From e6085c40ac4dddf1c990c7ae2f9f5b11c3a94b07 Mon Sep 17 00:00:00 2001 From: subash Date: Wed, 10 Feb 2021 16:03:47 +1100 Subject: [PATCH 1/5] add github actions --- .github/workflows/build.yml | 32 ++++++++++++++++++++++++++++++++ .github/workflows/publish.yml | 29 +++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 .github/workflows/build.yml create mode 100644 .github/workflows/publish.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..3167de1 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,32 @@ +name: Build + +on: [push, pull_request] + +jobs: + build: + + runs-on: ubuntu-latest + + strategy: + matrix: + node-version: [10.x, 12.x, 14.x] + + steps: + - uses: actions/checkout@v2 + + - name: Use node ${{ matrix.node-version }} + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + + - name: Install packages + run: yarn install --frozen-lockfile + + - name: Run lint + run: yarn lint + + - name: Run tests + run: yarn test + + - name: Generate code coverage + uses: codecov/codecov-action@v1 diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 0000000..2ca681b --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,29 @@ +name: Publish + +on: + push: + branches: + - master + +jobs: + publish: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + + - name: Use node 14.x + uses: actions/setup-node@v1 + with: + node-version: '14.x' + registry-url: 'https://registry.npmjs.org' + + - name: Install packages + run: yarn install --frozen-lockfile + + - name: Publish to npm + run: yarn release + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + From b4e685a23a48e19fce1fc1d4cc4f978d1a59d6b5 Mon Sep 17 00:00:00 2001 From: subash Date: Wed, 10 Feb 2021 16:12:06 +1100 Subject: [PATCH 2/5] remove travis --- .travis.yml | 25 ------------------------- README.md | 11 ++++++----- 2 files changed, 6 insertions(+), 30 deletions(-) delete mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 23281e1..0000000 --- a/.travis.yml +++ /dev/null @@ -1,25 +0,0 @@ -language: node_js -node_js: - - '6.10' - - '8.10' - - '10' -install: - - yarn install -script: - - yarn run lint - - yarn run test -after_success: - - cat ./coverage/lcov.info | ./node_modules/.bin/coveralls && rm -rf ./coverage -deploy: - provider: npm - email: accounts@acloud.guru - api_key: - secure: nMZVsye4+DHAPIcIHy2DxycA+55c6hxW+tTubIZZSR3W0Z5IfIDE1CUPixzlEG4mScvmFGUUHvKL52rfBMAA6XB/TLCH+05B9D1xxk+pJog/af+ueG5QKW3v5GVbSuyTxpoec5/YUiz5gYLnysdRejrWgLhMOGGzlWHUuLaQIheFy0c+UkLA0c9E4NnBHo3kmNzHmF41f/FqXfDPJqaJYRnpyTG3sZCAQQ4rhjdMsLfPn1728fRN328uGs6iAZK1G7G2WlGyWZ6UG5bF9DClyXvgwhAIaZl+hbRm7GArfVxOlg1Jh/ioRgXhTTyzJGYJLlCb1t/qVcSFDSQn14OIaQ6nxpbiH8wYUxSHuGGyY5ZMjAt7D7kfJ7SrTUn65dUZhwrj/N0Hb8yynDDphnBwoRekmEROiCQ2SRprMiY4fjusx4gbLCM9uP99UyjC6bKkT1OUjxeX2MdgZ5F2xC89p+7bMNuI0Bhjsg2rDGdAjQf9YMxvMherRJeL8lTnkKkhn4gK1iwaxC5YkBeigaaqLhhzV4l95vWKy47r6IT4zwA0oxgOuLCzq5co2camdvkCu01osWceon/ORJH7vic2pkbYd7IWF9PVjo4z+BJDXPDqpu9jI392knoJiSRSCaBLBJSN02cYJIZjbUONEe2XU73W19/ZreChQpSOFdz8Lcs= - on: - tags: true - repo: ACloudGuru/serverless-plugin-aws-alerts - branch: master - node: '10' -notifications: - slack: - secure: KOs6IURWgOVOiB6haTYcaQVVueM2/0mLiQbZEV++DsrNIZkd/ArqU+ufr18jCb7z4mWJ+TNTj4QSiwFFjaB2o2ZF+0/2hzGzj/y41E/Qir9MswdgpdZSpPcPBDYB8IK1o+1FlX81o1jOibeQyUv+CMOej8aXk/kYlEvtxqec9NqRdPQHM56V7AizrjYOZGH7MVcxOYmvvmcWWAEfzg5SxzgJvVNbXZvqkMut9kcpD6rOMUYtXbIQ22Xy3lfJ5MHCckQMFKYUwZSjwmhWOayrevNfXPdiAPCuxVXm0Hgzyzm8vNSntmet+j9mdqS5dYRiteoAXN+Th0fgf9l/nhkPpoNW7VIJMUmjMaxbxb/McU2+1h/ZGF+OG10kTZzX+5Bw7nKrtUUAs0bKQ8hfEWh7YTgTKPfLOd5ieR+9LGUy/bqfTfvoBdP8bi//wY72VyrfYmDCUmWfE9X0u8VaMR/cOhKT6WAueoseOXebpvKo1wcxHI2GH0SHDRWnIWQrSQuE/3sdan8ek3ZCiQBv74n4cCcTN0hV3KFk2EG9ENMtL1+3FZ924vqW1yV1LzME8CrzVxwJ08cauzfAPTABa2m/iXWyGgr0O5BALjrAHqIuTWCCjwKZhfLrZnSrfzOPBggkzPqqlpMHBAqo7+1sOSYZMSglLZaLpm9055/wn2OBfYg= diff --git a/README.md b/README.md index 0b3f0cb..3260a98 100644 --- a/README.md +++ b/README.md @@ -2,12 +2,14 @@ [![NPM version][npm-image]][npm-url] [![Build Status][travis-image]][travis-url] [![Dependency Status][daviddm-image]][daviddm-url] - [![Coverage percentage][coveralls-image]][coveralls-url] + [![codecov][codecov-image]][codecov-url] A Serverless plugin to easily add CloudWatch alarms to functions ## Installation `npm i serverless-plugin-aws-alerts` +OR +`yarn add --dev serverless-plugin-aws-alerts` ## Usage @@ -187,7 +189,7 @@ custom: #### CloudFormation support ```yaml -custom: +custom: alerts: topics: alarm: @@ -204,7 +206,6 @@ custom: insufficientData: topic: Ref: ExampleInsufficientdataTopic - resources: Resources: @@ -473,5 +474,5 @@ MIT © [A Cloud Guru](https://acloud.guru/) [travis-url]: https://travis-ci.org/ACloudGuru/serverless-plugin-aws-alerts [daviddm-image]: https://david-dm.org/ACloudGuru/serverless-plugin-aws-alerts.svg?theme=shields.io [daviddm-url]: https://david-dm.org/ACloudGuru/serverless-plugin-aws-alerts -[coveralls-image]: https://coveralls.io/repos/ACloudGuru/serverless-plugin-aws-alerts/badge.svg -[coveralls-url]: https://coveralls.io/r/ACloudGuru/serverless-plugin-aws-alerts +[codecov-image]: https://codecov.io/gh/ACloudGuru/serverless-plugin-aws-alerts/branch/master/graph/badge.svg?token=uC4maLoz3W +[codecov-url]: https://codecov.io/gh/ACloudGuru/serverless-plugin-aws-alerts From 1a6c509b32c196665157084ab4042a1f6099d31a Mon Sep 17 00:00:00 2001 From: subash Date: Wed, 10 Feb 2021 16:37:01 +1100 Subject: [PATCH 3/5] add new linting rules --- .eslintrc | 38 + .eslintrc.yml | 17 - .husky/.gitignore | 1 + .husky/commit-msg | 4 + .prettierrc | 5 + example/error.js | 5 +- example/foo.js | 6 +- example/slow.js | 8 +- package.json | 18 +- src/dashboards/index.js | 8 +- .../widgets/api-gw/latency/numbers.js | 32 +- .../widgets/api-gw/latency/time-series.js | 36 +- .../widgets/api-gw/requests/numbers.js | 45 +- .../widgets/api-gw/requests/time-series.js | 28 +- .../widgets/dynamodb/capacity/time-series.js | 21 +- src/dashboards/widgets/factory.js | 20 +- .../widgets/lambda/duration/numbers.js | 16 +- .../widgets/lambda/duration/time-series.js | 65 +- .../widgets/lambda/errors/numbers.js | 16 +- .../widgets/lambda/errors/time-series.js | 16 +- .../widgets/lambda/invocations/numbers.js | 16 +- .../widgets/lambda/invocations/time-series.js | 16 +- .../widgets/lambda/iterator-age/numbers.js | 16 +- .../lambda/iterator-age/time-series.js | 65 +- .../widgets/lambda/throttles/numbers.js | 16 +- .../widgets/lambda/throttles/time-series.js | 16 +- src/defaults/definitions.js | 4 +- src/external-stack.js | 250 +-- src/index.js | 294 ++- src/index.test.js | 856 +++++---- src/naming.js | 41 +- src/naming.test.js | 98 +- yarn.lock | 1704 +++++++++++------ 33 files changed, 2294 insertions(+), 1503 deletions(-) create mode 100644 .eslintrc delete mode 100644 .eslintrc.yml create mode 100644 .husky/.gitignore create mode 100755 .husky/commit-msg create mode 100644 .prettierrc diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 0000000..9976d6b --- /dev/null +++ b/.eslintrc @@ -0,0 +1,38 @@ +extends: + - airbnb-base + - prettier + - plugin:import/errors + - plugin:import/warnings + - plugin:jest/recommended + +globals: + Atomics: readonly + SharedArrayBuffer: readonly + +parserOptions: + ecmaVersion: 2020 + sourceType: module + +plugins: + - jest + - prettier + +rules: { + "prettier/prettier": "error", + "import/prefer-default-export": 0, + "jest/no-focused-tests": 0, + + # eventually want to remove everything below this + "class-methods-use-this": 0, + "prefer-object-spread": 0, + "prefer-destructuring": 0, + "no-return-assign": 0, + "array-callback-return": 0, + "global-require": 0, + "consistent-return": 0, + "no-param-reassign": 0, + "no-underscore-dangle": 0, + "no-plusplus": 0, + "guard-for-in": 0, + "no-restricted-syntax": 0 +} diff --git a/.eslintrc.yml b/.eslintrc.yml deleted file mode 100644 index 86505cc..0000000 --- a/.eslintrc.yml +++ /dev/null @@ -1,17 +0,0 @@ -extends: - - eslint:recommended - - plugin:node/recommended - -plugins: - - node - - promise - -env: - mocha: true - node: true - jest: true - -rules: - no-console: 0 - strict: 0 - node/no-unsupported-features: 0 diff --git a/.husky/.gitignore b/.husky/.gitignore new file mode 100644 index 0000000..31354ec --- /dev/null +++ b/.husky/.gitignore @@ -0,0 +1 @@ +_ diff --git a/.husky/commit-msg b/.husky/commit-msg new file mode 100755 index 0000000..9887f87 --- /dev/null +++ b/.husky/commit-msg @@ -0,0 +1,4 @@ +#!/bin/sh +. "$(dirname $0)/_/husky.sh" + +yarn commitlint --edit \ No newline at end of file diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..ff1d539 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,5 @@ +{ + "tabWidth": 2, + "printWidth": 80, + "singleQuote": true +} diff --git a/example/error.js b/example/error.js index a161014..1e5b6aa 100644 --- a/example/error.js +++ b/example/error.js @@ -1,6 +1,3 @@ -exports.handler = (event, context, cb) => { - console.log('Received event', event); - console.log('Blah'); - +exports.handler = (_, __, cb) => { cb(new Error('This is an error')); }; diff --git a/example/foo.js b/example/foo.js index 458a51a..2a22beb 100644 --- a/example/foo.js +++ b/example/foo.js @@ -1,9 +1,7 @@ -exports.handler = async (event) => { - console.log('Received event', event); - +exports.handler = async () => { const response = { statusCode: 200, - body: JSON.stringify({ message: `success - ${Date.now()}` }) + body: JSON.stringify({ message: `success - ${Date.now()}` }), }; return response; diff --git a/example/slow.js b/example/slow.js index 51aa4a4..fda31b3 100644 --- a/example/slow.js +++ b/example/slow.js @@ -1,9 +1,5 @@ -exports.handler = (event, context, cb) => { - console.log('Received event', event); - console.log('Sleeping'); - +exports.handler = (_, __, cb) => { setTimeout(() => { - console.log('Awake'); cb(null, { message: 'success' }); }, 10000); -} +}; diff --git a/package.json b/package.json index 55f606d..1c67bab 100644 --- a/package.json +++ b/package.json @@ -22,16 +22,18 @@ "lodash": "^4.17.10" }, "devDependencies": { - "coveralls": "^2.11.16", - "eslint": "^4.7.1", - "eslint-config-standard": "^6.2.0", - "eslint-plugin-node": "^4.0.0", - "eslint-plugin-promise": "^3.4.1", - "eslint-plugin-standard": "^2.0.1", - "jest": "^19.0.2" + "eslint": "^7.19.0", + "eslint-config-airbnb-base": "^14.2.1", + "eslint-config-prettier": "^7.2.0", + "eslint-plugin-import": "^2.22.1", + "eslint-plugin-jest": "^24.1.3", + "eslint-plugin-prettier": "^3.3.1", + "husky": "^5.0.9", + "jest": "^19.0.2", + "prettier": "^2.2.1" }, "engines": { - "node": ">=6.10.0" + "node": ">=8.10.0" }, "jest": { "testMatch": [ diff --git a/src/dashboards/index.js b/src/dashboards/index.js index 7338c69..9711df7 100644 --- a/src/dashboards/index.js +++ b/src/dashboards/index.js @@ -1,10 +1,8 @@ -'use strict'; - const widgetFactory = require('./widgets/factory'); const dashboards = { - 'default': require('./configs/default'), - 'vertical': require('./configs/vertical'), + default: require('./configs/default'), + vertical: require('./configs/vertical'), }; const createDashboard = (service, stage, region, functions, name) => { @@ -22,7 +20,7 @@ const createDashboard = (service, stage, region, functions, name) => { region, coordinates: w.coordinates, title: w.title, - functions + functions, }; return widget.createWidget(config); diff --git a/src/dashboards/widgets/api-gw/latency/numbers.js b/src/dashboards/widgets/api-gw/latency/numbers.js index 74d6aea..f8564d7 100644 --- a/src/dashboards/widgets/api-gw/latency/numbers.js +++ b/src/dashboards/widgets/api-gw/latency/numbers.js @@ -1,5 +1,3 @@ -'use strict'; - const createWidget = (config) => { const apiName = `${config.stage}-${config.service}`; @@ -13,12 +11,34 @@ const createWidget = (config) => { title: config.title, view: 'singleValue', metrics: [ - [ 'AWS/ApiGateway', 'IntegrationLatency', 'ApiName', apiName, { stat: 'Average', period: 2592000, region: config.region, label: 'IntegrationLatency' } ], - [ 'AWS/ApiGateway', 'Latency', 'ApiName', apiName, { stat: 'Average', period: 2592000, region: config.region, label: 'Latency' } ] + [ + 'AWS/ApiGateway', + 'IntegrationLatency', + 'ApiName', + apiName, + { + stat: 'Average', + period: 2592000, + region: config.region, + label: 'IntegrationLatency', + }, + ], + [ + 'AWS/ApiGateway', + 'Latency', + 'ApiName', + apiName, + { + stat: 'Average', + period: 2592000, + region: config.region, + label: 'Latency', + }, + ], ], region: config.region, - period: 300 - } + period: 300, + }, }; return widget; diff --git a/src/dashboards/widgets/api-gw/latency/time-series.js b/src/dashboards/widgets/api-gw/latency/time-series.js index f2faa91..6e7e6cf 100644 --- a/src/dashboards/widgets/api-gw/latency/time-series.js +++ b/src/dashboards/widgets/api-gw/latency/time-series.js @@ -1,5 +1,3 @@ -'use strict'; - const createWidget = (config) => { const apiName = `${config.stage}-${config.service}`; @@ -14,13 +12,37 @@ const createWidget = (config) => { view: 'timeSeries', stacked: false, metrics: [ - [ 'AWS/ApiGateway', 'IntegrationLatency', 'ApiName', apiName, { stat: 'p50', period: 900, region: config.region } ], - [ 'AWS/ApiGateway', 'Latency', 'ApiName', apiName, { stat: 'p50', period: 900, region: config.region } ], - [ 'AWS/ApiGateway', 'IntegrationLatency', 'ApiName', apiName, { stat: 'p90', period: 900, region: config.region } ], - [ 'AWS/ApiGateway', 'Latency', 'ApiName', apiName, { stat: 'p90', period: 900, region: config.region } ] + [ + 'AWS/ApiGateway', + 'IntegrationLatency', + 'ApiName', + apiName, + { stat: 'p50', period: 900, region: config.region }, + ], + [ + 'AWS/ApiGateway', + 'Latency', + 'ApiName', + apiName, + { stat: 'p50', period: 900, region: config.region }, + ], + [ + 'AWS/ApiGateway', + 'IntegrationLatency', + 'ApiName', + apiName, + { stat: 'p90', period: 900, region: config.region }, + ], + [ + 'AWS/ApiGateway', + 'Latency', + 'ApiName', + apiName, + { stat: 'p90', period: 900, region: config.region }, + ], ], region: config.region, - } + }, }; return widget; diff --git a/src/dashboards/widgets/api-gw/requests/numbers.js b/src/dashboards/widgets/api-gw/requests/numbers.js index 2635f74..71cc70a 100644 --- a/src/dashboards/widgets/api-gw/requests/numbers.js +++ b/src/dashboards/widgets/api-gw/requests/numbers.js @@ -1,5 +1,3 @@ -'use strict'; - const createWidget = (config) => { const apiName = `${config.stage}-${config.service}`; @@ -13,13 +11,46 @@ const createWidget = (config) => { title: config.title, view: 'singleValue', metrics: [ - [ 'AWS/ApiGateway', '5XXError', 'ApiName', apiName, { stat: 'Sum', period: 2592000, region: config.region, label: '5XXError' } ], - [ 'AWS/ApiGateway', '4XXError', 'ApiName', apiName, { stat: 'Sum', period: 2592000, region: config.region, label: '4XXError' } ], - [ 'AWS/ApiGateway', 'Count', 'ApiName', apiName, { stat: 'Sum', period: 2592000, region: config.region, label: 'Count' } ] + [ + 'AWS/ApiGateway', + '5XXError', + 'ApiName', + apiName, + { + stat: 'Sum', + period: 2592000, + region: config.region, + label: '5XXError', + }, + ], + [ + 'AWS/ApiGateway', + '4XXError', + 'ApiName', + apiName, + { + stat: 'Sum', + period: 2592000, + region: config.region, + label: '4XXError', + }, + ], + [ + 'AWS/ApiGateway', + 'Count', + 'ApiName', + apiName, + { + stat: 'Sum', + period: 2592000, + region: config.region, + label: 'Count', + }, + ], ], region: config.region, - period: 300 - } + period: 300, + }, }; return widget; diff --git a/src/dashboards/widgets/api-gw/requests/time-series.js b/src/dashboards/widgets/api-gw/requests/time-series.js index c982149..7bb34f8 100644 --- a/src/dashboards/widgets/api-gw/requests/time-series.js +++ b/src/dashboards/widgets/api-gw/requests/time-series.js @@ -1,5 +1,3 @@ -'use strict'; - const createWidget = (config) => { const apiName = `${config.stage}-${config.service}`; @@ -14,12 +12,30 @@ const createWidget = (config) => { view: 'timeSeries', stacked: false, metrics: [ - [ 'AWS/ApiGateway', '5XXError', 'ApiName', apiName, { stat: 'Sum', period: 900 } ], - [ 'AWS/ApiGateway', '4XXError', 'ApiName', apiName, { stat: 'Sum', period: 900 } ], - [ 'AWS/ApiGateway', 'Count', 'ApiName', apiName, { stat: 'Sum', period: 900 } ] + [ + 'AWS/ApiGateway', + '5XXError', + 'ApiName', + apiName, + { stat: 'Sum', period: 900 }, + ], + [ + 'AWS/ApiGateway', + '4XXError', + 'ApiName', + apiName, + { stat: 'Sum', period: 900 }, + ], + [ + 'AWS/ApiGateway', + 'Count', + 'ApiName', + apiName, + { stat: 'Sum', period: 900 }, + ], ], region: config.region, - } + }, }; return widget; diff --git a/src/dashboards/widgets/dynamodb/capacity/time-series.js b/src/dashboards/widgets/dynamodb/capacity/time-series.js index 9f511fc..7e838f9 100644 --- a/src/dashboards/widgets/dynamodb/capacity/time-series.js +++ b/src/dashboards/widgets/dynamodb/capacity/time-series.js @@ -1,5 +1,3 @@ -'use strict'; - const createWidget = (config) => { const widget = { type: 'metric', @@ -11,18 +9,23 @@ const createWidget = (config) => { title: config.title, view: 'timeSeries', stacked: false, - metrics: [ ], + metrics: [], region: config.region, - period: 300 - } + period: 300, + }, }; // TODO for a GSI add "GlobalSecondaryIndexName", "index name" to end widget.properties.metrics = [ - [ 'AWS/DynamoDB', 'ProvisionedReadCapacityUnits', 'TableName', config.table.name ], - [ '.', 'ConsumedReadCapacityUnits', '.', '.' ], - [ '.', 'ProvisionedWriteCapacityUnits', '.', '.' ], - [ '.', 'ConsumedWriteCapacityUnits', '.', '.' ], + [ + 'AWS/DynamoDB', + 'ProvisionedReadCapacityUnits', + 'TableName', + config.table.name, + ], + ['.', 'ConsumedReadCapacityUnits', '.', '.'], + ['.', 'ProvisionedWriteCapacityUnits', '.', '.'], + ['.', 'ConsumedWriteCapacityUnits', '.', '.'], ]; return widget; diff --git a/src/dashboards/widgets/factory.js b/src/dashboards/widgets/factory.js index 6d7de10..174a663 100644 --- a/src/dashboards/widgets/factory.js +++ b/src/dashboards/widgets/factory.js @@ -1,35 +1,33 @@ -'use strict'; - const widgets = { 'api-gw': { latency: { - 'numbers': require('./api-gw/latency/numbers'), + numbers: require('./api-gw/latency/numbers'), 'time-series': require('./api-gw/latency/time-series'), }, requests: { - 'numbers': require('./api-gw/requests/numbers'), + numbers: require('./api-gw/requests/numbers'), 'time-series': require('./api-gw/requests/time-series'), }, }, lambda: { duration: { - 'numbers': require('./lambda/duration/numbers'), + numbers: require('./lambda/duration/numbers'), 'time-series': require('./lambda/duration/time-series'), }, errors: { - 'numbers': require('./lambda/errors/numbers'), + numbers: require('./lambda/errors/numbers'), 'time-series': require('./lambda/errors/time-series'), }, invocations: { - 'numbers': require('./lambda/invocations/numbers'), + numbers: require('./lambda/invocations/numbers'), 'time-series': require('./lambda/invocations/time-series'), }, throttles: { - 'numbers': require('./lambda/throttles/numbers'), + numbers: require('./lambda/throttles/numbers'), 'time-series': require('./lambda/throttles/time-series'), }, iteratorage: { - 'numbers': require('./lambda/iterator-age/numbers'), + numbers: require('./lambda/iterator-age/numbers'), 'time-series': require('./lambda/iterator-age/time-series'), }, }, @@ -48,7 +46,9 @@ const getWidget = (service, metric, display) => { const widget = serviceMetricWidgets[display]; if (!widget) { - throw new Error(`Invalid metric ${display} for service ${service} and metric ${metric}`); + throw new Error( + `Invalid metric ${display} for service ${service} and metric ${metric}` + ); } return widget; diff --git a/src/dashboards/widgets/lambda/duration/numbers.js b/src/dashboards/widgets/lambda/duration/numbers.js index d2b4a1d..7bdeafb 100644 --- a/src/dashboards/widgets/lambda/duration/numbers.js +++ b/src/dashboards/widgets/lambda/duration/numbers.js @@ -1,5 +1,3 @@ -'use strict'; - const createWidget = (config) => { const widget = { type: 'metric', @@ -10,13 +8,13 @@ const createWidget = (config) => { properties: { title: config.title, view: 'singleValue', - metrics: [ ], + metrics: [], region: config.region, - period: 300 - } + period: 300, + }, }; - widget.properties.metrics = config.functions.map(f => ([ + widget.properties.metrics = config.functions.map((f) => [ 'AWS/Lambda', 'Duration', 'FunctionName', @@ -25,9 +23,9 @@ const createWidget = (config) => { stat: 'Average', period: 2592000, region: config.region, - label: f.name - } - ])); + label: f.name, + }, + ]); return widget; }; diff --git a/src/dashboards/widgets/lambda/duration/time-series.js b/src/dashboards/widgets/lambda/duration/time-series.js index 1e23d6e..4db1414 100644 --- a/src/dashboards/widgets/lambda/duration/time-series.js +++ b/src/dashboards/widgets/lambda/duration/time-series.js @@ -1,5 +1,3 @@ -'use strict'; - const createWidget = (config) => { const widget = { type: 'metric', @@ -11,39 +9,42 @@ const createWidget = (config) => { title: config.title, view: 'timeSeries', stacked: false, - metrics: [ ], + metrics: [], region: config.region, - period: 300 - } + period: 300, + }, }; - widget.properties.metrics = config.functions.reduce((accum, f) => { - return accum.concat([ - [ - 'AWS/Lambda', - 'Duration', - 'FunctionName', - `${config.service}-${config.stage}-${f.name}`, - { - stat: 'p50', - period: 900, - region: config.region, - label: `${f.name} p50`, - } - ],[ - 'AWS/Lambda', - 'Duration', - 'FunctionName', - `${config.service}-${config.stage}-${f.name}`, - { - stat: 'p90', - period: 900, - region: config.region, - label: `${f.name} p90`, - } - ] - ]); - }, []); + widget.properties.metrics = config.functions.reduce( + (accum, f) => + accum.concat([ + [ + 'AWS/Lambda', + 'Duration', + 'FunctionName', + `${config.service}-${config.stage}-${f.name}`, + { + stat: 'p50', + period: 900, + region: config.region, + label: `${f.name} p50`, + }, + ], + [ + 'AWS/Lambda', + 'Duration', + 'FunctionName', + `${config.service}-${config.stage}-${f.name}`, + { + stat: 'p90', + period: 900, + region: config.region, + label: `${f.name} p90`, + }, + ], + ]), + [] + ); return widget; }; diff --git a/src/dashboards/widgets/lambda/errors/numbers.js b/src/dashboards/widgets/lambda/errors/numbers.js index 1234931..ba14c80 100644 --- a/src/dashboards/widgets/lambda/errors/numbers.js +++ b/src/dashboards/widgets/lambda/errors/numbers.js @@ -1,5 +1,3 @@ -'use strict'; - const createWidget = (config) => { const widget = { type: 'metric', @@ -10,13 +8,13 @@ const createWidget = (config) => { properties: { title: config.title, view: 'singleValue', - metrics: [ ], + metrics: [], region: config.region, - period: 300 - } + period: 300, + }, }; - widget.properties.metrics = config.functions.map(f => ([ + widget.properties.metrics = config.functions.map((f) => [ 'AWS/Lambda', 'Errors', 'FunctionName', @@ -25,9 +23,9 @@ const createWidget = (config) => { stat: 'Sum', period: 2592000, region: config.region, - label: f.name - } - ])); + label: f.name, + }, + ]); return widget; }; diff --git a/src/dashboards/widgets/lambda/errors/time-series.js b/src/dashboards/widgets/lambda/errors/time-series.js index ee70352..0afcefc 100644 --- a/src/dashboards/widgets/lambda/errors/time-series.js +++ b/src/dashboards/widgets/lambda/errors/time-series.js @@ -1,5 +1,3 @@ -'use strict'; - const createWidget = (config) => { const widget = { type: 'metric', @@ -11,13 +9,13 @@ const createWidget = (config) => { title: config.title, view: 'timeSeries', stacked: false, - metrics: [ ], + metrics: [], region: config.region, - period: 300 - } + period: 300, + }, }; - widget.properties.metrics = config.functions.map(f => ([ + widget.properties.metrics = config.functions.map((f) => [ 'AWS/Lambda', 'Errors', 'FunctionName', @@ -26,9 +24,9 @@ const createWidget = (config) => { stat: 'Sum', period: 900, region: config.region, - label: f.name - } - ])); + label: f.name, + }, + ]); return widget; }; diff --git a/src/dashboards/widgets/lambda/invocations/numbers.js b/src/dashboards/widgets/lambda/invocations/numbers.js index 78a5827..a4fc6a4 100644 --- a/src/dashboards/widgets/lambda/invocations/numbers.js +++ b/src/dashboards/widgets/lambda/invocations/numbers.js @@ -1,5 +1,3 @@ -'use strict'; - const createWidget = (config) => { const widget = { type: 'metric', @@ -10,13 +8,13 @@ const createWidget = (config) => { properties: { title: config.title, view: 'singleValue', - metrics: [ ], + metrics: [], region: config.region, - period: 300 - } + period: 300, + }, }; - widget.properties.metrics = config.functions.map(f => ([ + widget.properties.metrics = config.functions.map((f) => [ 'AWS/Lambda', 'Invocations', 'FunctionName', @@ -25,9 +23,9 @@ const createWidget = (config) => { stat: 'Sum', period: 2592000, region: config.region, - label: f.name - } - ])); + label: f.name, + }, + ]); return widget; }; diff --git a/src/dashboards/widgets/lambda/invocations/time-series.js b/src/dashboards/widgets/lambda/invocations/time-series.js index 1cf7909..a97bc30 100644 --- a/src/dashboards/widgets/lambda/invocations/time-series.js +++ b/src/dashboards/widgets/lambda/invocations/time-series.js @@ -1,5 +1,3 @@ -'use strict'; - const createWidget = (config) => { const widget = { type: 'metric', @@ -11,13 +9,13 @@ const createWidget = (config) => { title: config.title, view: 'timeSeries', stacked: false, - metrics: [ ], + metrics: [], region: config.region, - period: 300 - } + period: 300, + }, }; - widget.properties.metrics = config.functions.map(f => ([ + widget.properties.metrics = config.functions.map((f) => [ 'AWS/Lambda', 'Invocations', 'FunctionName', @@ -26,9 +24,9 @@ const createWidget = (config) => { stat: 'Sum', period: 900, region: config.region, - label: f.name - } - ])); + label: f.name, + }, + ]); return widget; }; diff --git a/src/dashboards/widgets/lambda/iterator-age/numbers.js b/src/dashboards/widgets/lambda/iterator-age/numbers.js index 977c818..e6db348 100644 --- a/src/dashboards/widgets/lambda/iterator-age/numbers.js +++ b/src/dashboards/widgets/lambda/iterator-age/numbers.js @@ -1,5 +1,3 @@ -'use strict'; - const createWidget = (config) => { const widget = { type: 'metric', @@ -10,13 +8,13 @@ const createWidget = (config) => { properties: { title: config.title, view: 'singleValue', - metrics: [ ], + metrics: [], region: config.region, - period: 300 - } + period: 300, + }, }; - widget.properties.metrics = config.functions.map(f => ([ + widget.properties.metrics = config.functions.map((f) => [ 'AWS/Lambda', 'IteratorAge', 'FunctionName', @@ -25,9 +23,9 @@ const createWidget = (config) => { stat: 'Average', period: 2592000, region: config.region, - label: f.name - } - ])); + label: f.name, + }, + ]); return widget; }; diff --git a/src/dashboards/widgets/lambda/iterator-age/time-series.js b/src/dashboards/widgets/lambda/iterator-age/time-series.js index c6568f8..1fb76bb 100644 --- a/src/dashboards/widgets/lambda/iterator-age/time-series.js +++ b/src/dashboards/widgets/lambda/iterator-age/time-series.js @@ -1,5 +1,3 @@ -'use strict'; - const createWidget = (config) => { const widget = { type: 'metric', @@ -11,39 +9,42 @@ const createWidget = (config) => { title: config.title, view: 'timeSeries', stacked: false, - metrics: [ ], + metrics: [], region: config.region, - period: 300 - } + period: 300, + }, }; - widget.properties.metrics = config.functions.reduce((accum, f) => { - return accum.concat([ - [ - 'AWS/Lambda', - 'IteratorAge', - 'FunctionName', - `${config.service}-${config.stage}-${f.name}`, - { - stat: 'p50', - period: 900, - region: config.region, - label: `${f.name} p50`, - } - ],[ - 'AWS/Lambda', - 'IteratorAge', - 'FunctionName', - `${config.service}-${config.stage}-${f.name}`, - { - stat: 'p90', - period: 900, - region: config.region, - label: `${f.name} p90`, - } - ] - ]); - }, []); + widget.properties.metrics = config.functions.reduce( + (accum, f) => + accum.concat([ + [ + 'AWS/Lambda', + 'IteratorAge', + 'FunctionName', + `${config.service}-${config.stage}-${f.name}`, + { + stat: 'p50', + period: 900, + region: config.region, + label: `${f.name} p50`, + }, + ], + [ + 'AWS/Lambda', + 'IteratorAge', + 'FunctionName', + `${config.service}-${config.stage}-${f.name}`, + { + stat: 'p90', + period: 900, + region: config.region, + label: `${f.name} p90`, + }, + ], + ]), + [] + ); return widget; }; diff --git a/src/dashboards/widgets/lambda/throttles/numbers.js b/src/dashboards/widgets/lambda/throttles/numbers.js index 6e018d0..475754b 100644 --- a/src/dashboards/widgets/lambda/throttles/numbers.js +++ b/src/dashboards/widgets/lambda/throttles/numbers.js @@ -1,5 +1,3 @@ -'use strict'; - const createWidget = (config) => { const widget = { type: 'metric', @@ -10,13 +8,13 @@ const createWidget = (config) => { properties: { title: config.title, view: 'singleValue', - metrics: [ ], + metrics: [], region: config.region, - period: 300 - } + period: 300, + }, }; - widget.properties.metrics = config.functions.map(f => ([ + widget.properties.metrics = config.functions.map((f) => [ 'AWS/Lambda', 'Throttles', 'FunctionName', @@ -25,9 +23,9 @@ const createWidget = (config) => { stat: 'Sum', period: 2592000, region: config.region, - label: f.name - } - ])); + label: f.name, + }, + ]); return widget; }; diff --git a/src/dashboards/widgets/lambda/throttles/time-series.js b/src/dashboards/widgets/lambda/throttles/time-series.js index cdadbd7..c324858 100644 --- a/src/dashboards/widgets/lambda/throttles/time-series.js +++ b/src/dashboards/widgets/lambda/throttles/time-series.js @@ -1,5 +1,3 @@ -'use strict'; - const createWidget = (config) => { const widget = { type: 'metric', @@ -11,13 +9,13 @@ const createWidget = (config) => { title: config.title, view: 'timeSeries', stacked: false, - metrics: [ ], + metrics: [], region: config.region, - period: 300 - } + period: 300, + }, }; - widget.properties.metrics = config.functions.map(f => ([ + widget.properties.metrics = config.functions.map((f) => [ 'AWS/Lambda', 'Throttles', 'FunctionName', @@ -26,9 +24,9 @@ const createWidget = (config) => { stat: 'Sum', period: 900, region: config.region, - label: f.name - } - ])); + label: f.name, + }, + ]); return widget; }; diff --git a/src/defaults/definitions.js b/src/defaults/definitions.js index 9d89faf..bbbc468 100644 --- a/src/defaults/definitions.js +++ b/src/defaults/definitions.js @@ -1,5 +1,3 @@ -'use strict'; - const lambdaNamespace = 'AWS/Lambda'; module.exports = { @@ -54,5 +52,5 @@ module.exports = { evaluationPeriods: 1, datapointsToAlarm: 1, comparisonOperator: 'GreaterThanOrEqualToThreshold', - } + }, }; diff --git a/src/external-stack.js b/src/external-stack.js index 05c76a9..1415ef1 100644 --- a/src/external-stack.js +++ b/src/external-stack.js @@ -1,5 +1,3 @@ -"use strict"; - /** * The ExternalStack class manages an external CloudFormation stack * for the alarms. It is enabled by using this custom option in serverless.yml: @@ -19,57 +17,54 @@ class ExternalStack { constructor(serverless, options) { this.serverless = serverless; this.options = options; - this.provider = this.serverless.getProvider("aws"); + this.provider = this.serverless.getProvider('aws'); this.queuedResources = []; this.mergedResources = {}; this.refParameters = {}; this.stackStatusCodes = { - CREATE_COMPLETE: "success", - CREATE_IN_PROGRESS: "in_progress", - CREATE_FAILED: "failure", - DELETE_COMPLETE: "success", - DELETE_FAILED: "failure", - DELETE_IN_PROGRESS: "in_progress", - REVIEW_IN_PROGRESS: "in_progress", - ROLLBACK_COMPLETE: "failure", - ROLLBACK_FAILED: "failure", - ROLLBACK_IN_PROGRESS: "in_progress", - UPDATE_COMPLETE: "success", - UPDATE_COMPLETE_CLEANUP_IN_PROGRESS: "in_progress", - UPDATE_IN_PROGRESS: "in_progress", - UPDATE_ROLLBACK_COMPLETE: "failure", - UPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS: "in_progress", - UPDATE_ROLLBACK_FAILED: "failure", - UPDATE_ROLLBACK_IN_PROGRESS: "in_progress", + CREATE_COMPLETE: 'success', + CREATE_IN_PROGRESS: 'in_progress', + CREATE_FAILED: 'failure', + DELETE_COMPLETE: 'success', + DELETE_FAILED: 'failure', + DELETE_IN_PROGRESS: 'in_progress', + REVIEW_IN_PROGRESS: 'in_progress', + ROLLBACK_COMPLETE: 'failure', + ROLLBACK_FAILED: 'failure', + ROLLBACK_IN_PROGRESS: 'in_progress', + UPDATE_COMPLETE: 'success', + UPDATE_COMPLETE_CLEANUP_IN_PROGRESS: 'in_progress', + UPDATE_IN_PROGRESS: 'in_progress', + UPDATE_ROLLBACK_COMPLETE: 'failure', + UPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS: 'in_progress', + UPDATE_ROLLBACK_FAILED: 'failure', + UPDATE_ROLLBACK_IN_PROGRESS: 'in_progress', }; this.phrases = { create: { - success: "created successfully", - failure: "create failed", + success: 'created successfully', + failure: 'create failed', }, update: { - success: "updated successfully", - failure: "updated failed", + success: 'updated successfully', + failure: 'updated failed', }, delete: { - success: "removed successfully", - failure: "remove failed", + success: 'removed successfully', + failure: 'remove failed', }, }; } getExternalStackConfig() { if (!this.serverless.service.custom.alerts) { - return ( - this.options["alerts-external-stack"] || - "" - ); + return this.options['alerts-external-stack'] || ''; } - + return ( this.serverless.service.custom.alerts.externalStack || - this.options["alerts-external-stack"] || - "" + this.options['alerts-external-stack'] || + '' ); } @@ -77,7 +72,7 @@ class ExternalStack { return ( (this.getExternalStackConfig() && this.getExternalStackConfig().nameSuffix) || - "-alerts" + '-alerts' ); } @@ -102,9 +97,9 @@ class ExternalStack { preMergedResources ); } - } else if (typeof resource === "object") { + } else if (typeof resource === 'object') { for (const key in resource) { - if (key === "Ref" && typeof resource[key] === "string") { + if (key === 'Ref' && typeof resource[key] === 'string') { // Found a (Lambda function) reference. See if it's unresolved. const refName = resource[key]; if (!preMergedResources[refName]) { @@ -118,18 +113,18 @@ class ExternalStack { ) { // Found Lambda function in main stack, create a parameter from it. this.refParameters[refName] = { - Type: "String", + Type: 'String', Default: mainResource.Properties.FunctionName, }; } else { this.serverless.cli.log( - "Warning: Unresolved external alert stack reference: " + refName + `Warning: Unresolved external alert stack reference: ${refName}` ); } } } else if ( - key === "DependsOn" && - typeof resource[key] === "string" && + key === 'DependsOn' && + typeof resource[key] === 'string' && parent && childKey ) { @@ -151,8 +146,7 @@ class ExternalStack { delete parent[childKey]; } else { this.serverless.cli.log( - "Warning: Unresolved external alert stack dependency: " + - refName + `Warning: Unresolved external alert stack dependency: ${refName}` ); } } @@ -177,11 +171,11 @@ class ExternalStack { mergeQueuedResources() { // Make one map of all resources so we can find unresolved references const preMergedResources = {}; - for (let resource of this.queuedResources) { + for (const resource of this.queuedResources) { Object.assign(preMergedResources, resource); } // Now find the unresolved references and create parameters from them - for (let resource of this.queuedResources) { + for (const resource of this.queuedResources) { this.fixLambdaFunctionAndLogGroupReferences( null, null, @@ -204,10 +198,9 @@ class ExternalStack { if (!Object.keys(this.mergedResources).length) { // Stack is empty - delete it return this.deleteExternalStack(externalStackName, true); - } else { - // Stack is not empty - deploy it - return this.deployExternalStack(externalStackName); } + // Stack is not empty - deploy it + return this.deployExternalStack(externalStackName); } beforeRemoveGlobal() { @@ -219,73 +212,54 @@ class ExternalStack { describeExternalStack(externalStackName) { return this.provider - .request("CloudFormation", "describeStacks", { + .request('CloudFormation', 'describeStacks', { StackName: externalStackName, }) - .then((response) => { - return response.Stacks && response.Stacks[0]; - }) + .then((response) => response.Stacks && response.Stacks[0]) .catch((err) => { if (err.message && err.message.match(/does not exist$/)) { // Stack doesn't exist yet return null; - } else { - // Some other error, let it throw - return Promise.reject(err); } + // Some other error, let it throw + return Promise.reject(err); }); } waitForExternalStack(externalStackName, operation) { let dots = 0; - const readMore = () => { - return this.describeExternalStack(externalStackName).then((response) => { + const readMore = () => + this.describeExternalStack(externalStackName).then((response) => { if (!response) { // Stack does not exist - if (dots) this.serverless.cli.consoleLog(""); + if (dots) this.serverless.cli.consoleLog(''); this.serverless.cli.log( - "External alert stack " + - externalStackName + - " removed successfully." + `External alert stack ${externalStackName} removed successfully.` ); return; } const state = this.stackStatusCodes[response.StackStatus]; - if (state === "in_progress") { + if (state === 'in_progress') { // Continue until no longer in progress this.serverless.cli.printDot(); dots += 1; return new Promise((resolve) => setTimeout(resolve, 5000)).then( readMore ); - } else { - if (dots) this.serverless.cli.consoleLog(""); - this.serverless.cli.log( - "External alert stack " + - externalStackName + - " " + - this.phrases[operation][state] + - " (" + - response.StackStatus + - ")." + } + if (dots) this.serverless.cli.consoleLog(''); + this.serverless.cli.log( + `External alert stack ${externalStackName} ${this.phrases[operation][state]} (${response.StackStatus}).` + ); + if (this.stackStatusCodes[response.StackStatus] === 'failure') { + // The operation failed, so return an error to Serverless + return Promise.reject( + new Error( + `External alert stack ${externalStackName} ${this.phrases[operation][state]} (${response.StackStatus})` + ) ); - if (this.stackStatusCodes[response.StackStatus] === "failure") { - // The operation failed, so return an error to Serverless - return Promise.reject( - new Error( - "External alert stack " + - externalStackName + - " " + - this.phrases[operation][state] + - " (" + - response.StackStatus + - ")" - ) - ); - } } }); - }; return readMore(); } @@ -295,10 +269,10 @@ class ExternalStack { const configResources = (externalStackConfig && externalStackConfig.resources) || {}; const compiledCloudFormationTemplate = { - AWSTemplateFormatVersion: "2010-09-09", + AWSTemplateFormatVersion: '2010-09-09', Description: configResources.Description || - "External AWS CloudFormation template for alerts", + 'External AWS CloudFormation template for alerts', Metadata: configResources.Metadata || undefined, Parameters: Object.assign( {}, @@ -322,11 +296,11 @@ class ExternalStack { }; if ( typeof externalStackConfig && - externalStackConfig.stackTags === "object" + externalStackConfig.stackTags === 'object' ) { // Add custom tags specified only for this stack Object.assign(stackTags, externalStackConfig.stackTags); - } else if (typeof this.serverless.service.provider.stackTags === "object") { + } else if (typeof this.serverless.service.provider.stackTags === 'object') { // Add stackTags from Serverless main provider config Object.assign(stackTags, this.serverless.service.provider.stackTags); } @@ -344,14 +318,13 @@ class ExternalStack { deployParameters, stackTags ); - } else { - return this.createExternalStack( - externalStackName, - compiledCloudFormationTemplate, - deployParameters, - stackTags - ); } + return this.createExternalStack( + externalStackName, + compiledCloudFormationTemplate, + deployParameters, + stackTags + ); } ); } @@ -359,11 +332,11 @@ class ExternalStack { // From Serverless setServersideEncryptionOptions(putParams, deploymentBucketOptions) { const encryptionFields = [ - ["serverSideEncryption", "ServerSideEncryption"], - ["sseCustomerAlgorithim", "SSECustomerAlgorithm"], - ["sseCustomerKey", "SSECustomerKey"], - ["sseCustomerKeyMD5", "SSECustomerKeyMD5"], - ["sseKMSKeyId", "SSEKMSKeyId"], + ['serverSideEncryption', 'ServerSideEncryption'], + ['sseCustomerAlgorithim', 'SSECustomerAlgorithm'], + ['sseCustomerKey', 'SSECustomerKey'], + ['sseCustomerKeyMD5', 'SSECustomerKeyMD5'], + ['sseKMSKeyId', 'SSEKMSKeyId'], ]; const params = putParams; @@ -385,20 +358,20 @@ class ExternalStack { // look for china - currently s3.cn-north-1.amazonaws.com.cn if (strRegion.match(/cn-/)) return `s3.${strRegion}.amazonaws.com.cn`; // default s3 endpoint for other regions - return "s3.amazonaws.com"; + return 's3.amazonaws.com'; } // From Serverless uploadCloudFormationTemplate(compiledCloudFormationTemplate) { - this.serverless.cli.log("Uploading external alerts template to S3..."); + this.serverless.cli.log('Uploading external alerts template to S3...'); const compiledTemplateFileName = - "compiled-cloudformation-alerts-template.json"; + 'compiled-cloudformation-alerts-template.json'; let params = { Key: `${this.serverless.service.package.artifactDirectoryName}/${compiledTemplateFileName}`, Body: JSON.stringify(compiledCloudFormationTemplate), - ContentType: "application/json", + ContentType: 'application/json', }; const deploymentBucketObject = this.serverless.service.provider @@ -413,7 +386,7 @@ class ExternalStack { .getServerlessDeploymentBucketName() .then((bucketName) => { params.Bucket = bucketName; - return this.provider.request("S3", "upload", params); + return this.provider.request('S3', 'upload', params); }) .then(() => { // Return the template URL @@ -432,17 +405,15 @@ class ExternalStack { stackTags ) { this.serverless.cli.log( - "Creating external alert stack " + - externalStackName + - " (" + - Object.keys(this.mergedResources).length + - " resources configured)..." + `Creating external alert stack ${externalStackName} (${ + Object.keys(this.mergedResources).length + } resources configured)...` ); // These are mostly the same parameters that Serverless uses in https://github.com/serverless/serverless/blob/master/lib/plugins/aws/deploy/lib/createStack.js const params = { StackName: externalStackName, - OnFailure: "ROLLBACK", + OnFailure: 'ROLLBACK', Capabilities: [], Parameters: deployParameters || [], Tags: Object.keys(stackTags).map((key) => ({ @@ -452,18 +423,14 @@ class ExternalStack { }; return Promise.resolve() - .then(() => { - return this.uploadCloudFormationTemplate( - compiledCloudFormationTemplate - ); - }) + .then(() => + this.uploadCloudFormationTemplate(compiledCloudFormationTemplate) + ) .then((templateUrl) => { params.TemplateURL = templateUrl; - return this.provider.request("CloudFormation", "createStack", params); + return this.provider.request('CloudFormation', 'createStack', params); }) - .then(() => { - return this.waitForExternalStack(externalStackName, "create"); - }); + .then(() => this.waitForExternalStack(externalStackName, 'create')); } updateExternalStack( @@ -473,11 +440,9 @@ class ExternalStack { stackTags ) { this.serverless.cli.log( - "Updating external alert stack " + - externalStackName + - " (" + - Object.keys(this.mergedResources).length + - " resources configured)..." + `Updating external alert stack ${externalStackName} (${ + Object.keys(this.mergedResources).length + } resources configured)...` ); // These are the same parameters that Serverless uses in https://github.com/serverless/serverless/blob/master/lib/plugins/aws/lib/updateStack.js @@ -492,44 +457,37 @@ class ExternalStack { }; return Promise.resolve() - .then(() => { - return this.uploadCloudFormationTemplate( - compiledCloudFormationTemplate - ); - }) + .then(() => + this.uploadCloudFormationTemplate(compiledCloudFormationTemplate) + ) .then((templateUrl) => { params.TemplateURL = templateUrl; - return this.provider.request("CloudFormation", "updateStack", params); - }) - .then(() => { - return this.waitForExternalStack(externalStackName, "update"); + return this.provider.request('CloudFormation', 'updateStack', params); }) + .then(() => this.waitForExternalStack(externalStackName, 'update')) .then(null, (err) => { if (err.message && err.message.match(/^No updates/)) { // Stack is unchanged, ignore error this.serverless.cli.log( - "External alert stack " + externalStackName + " has not changed." + `External alert stack ${externalStackName} has not changed.` ); return Promise.resolve(); - } else { - return Promise.reject(err); } + return Promise.reject(err); }); } deleteExternalStack(externalStackName, becauseNoResources) { this.serverless.cli.log( - "Removing external alert stack " + - externalStackName + - (becauseNoResources ? " (no resources configured)..." : "...") + `Removing external alert stack ${externalStackName}${ + becauseNoResources ? ' (no resources configured)...' : '...' + }` ); return this.provider - .request("CloudFormation", "deleteStack", { + .request('CloudFormation', 'deleteStack', { StackName: externalStackName, }) - .then(() => { - return this.waitForExternalStack(externalStackName, "delete"); - }); + .then(() => this.waitForExternalStack(externalStackName, 'delete')); } } diff --git a/src/index.js b/src/index.js index d2819a3..652edb1 100644 --- a/src/index.js +++ b/src/index.js @@ -1,5 +1,3 @@ -'use strict'; - // Try to remove this. Such a large package const _ = require('lodash'); @@ -7,7 +5,7 @@ const Naming = require('./naming'); const ExternalStack = require('./external-stack'); const defaultDefinitions = require('./defaults/definitions'); -const dashboards = require('./dashboards') +const dashboards = require('./dashboards'); class AlertsPlugin { constructor(serverless, options) { @@ -21,8 +19,12 @@ class AlertsPlugin { this.hooks = { 'package:compileEvents': this.compile.bind(this), - 'after:deploy:deploy': this.externalStack.afterDeployGlobal.bind(this.externalStack), - 'before:remove:remove': this.externalStack.beforeRemoveGlobal.bind(this.externalStack), + 'after:deploy:deploy': this.externalStack.afterDeployGlobal.bind( + this.externalStack + ), + 'before:remove:remove': this.externalStack.beforeRemoveGlobal.bind( + this.externalStack + ), }; } @@ -45,24 +47,28 @@ class AlertsPlugin { throw new Error(`Alarm definition ${alarm} does not exist!`); } - result.push(Object.assign( - { - enabled: true, - type: 'static' - }, - definition, - { - name: alarm - }) + result.push( + Object.assign( + { + enabled: true, + type: 'static', + }, + definition, + { + name: alarm, + } + ) ); } else if (_.isObject(alarm)) { - result.push(_.merge( - { - enabled: true, - type: 'static' - }, - definitions[alarm.name], - alarm) + result.push( + _.merge( + { + enabled: true, + type: 'static', + }, + definitions[alarm.name], + alarm + ) ); } @@ -108,34 +114,51 @@ class AlertsPlugin { insufficientDataActions.push(alertTopics.insufficientData); } - if (definition.okActions) { - definition.okActions.map(alertTopic => { okActions.push(alertTopics[alertTopic].ok) }); + definition.okActions.map((alertTopic) => { + okActions.push(alertTopics[alertTopic].ok); + }); } if (definition.alarmActions) { - definition.alarmActions.map(alertTopic => { alarmActions.push(alertTopics[alertTopic].alarm) }); + definition.alarmActions.map((alertTopic) => { + alarmActions.push(alertTopics[alertTopic].alarm); + }); } if (definition.insufficientDataActions) { - definition.insufficientDataActions.map(alertTopic => { insufficientDataActions.push(alertTopics[alertTopic].insufficientData) }); + definition.insufficientDataActions.map((alertTopic) => { + insufficientDataActions.push(alertTopics[alertTopic].insufficientData); + }); } const stackName = this.awsProvider.naming.getStackName(); - const namespace = definition.pattern ? - stackName : - definition.namespace; - - const metricId = definition.pattern ? - this.naming.getPatternMetricName(definition.metric, functionRef) : - definition.metric; + const namespace = definition.pattern ? stackName : definition.namespace; - const dimensions = definition.pattern ? [] : this.naming.getDimensionsList(definition.dimensions, functionRef, definition.omitDefaultDimension); + const metricId = definition.pattern + ? this.naming.getPatternMetricName(definition.metric, functionRef) + : definition.metric; - const treatMissingData = definition.treatMissingData ? definition.treatMissingData : 'missing'; + const dimensions = definition.pattern + ? [] + : this.naming.getDimensionsList( + definition.dimensions, + functionRef, + definition.omitDefaultDimension + ); - const statisticValues = ['SampleCount', 'Average', 'Sum', 'Minimum', 'Maximum']; + const treatMissingData = definition.treatMissingData + ? definition.treatMissingData + : 'missing'; + + const statisticValues = [ + 'SampleCount', + 'Average', + 'Sum', + 'Minimum', + 'Maximum', + ]; let alarm; if (definition.type === 'static') { alarm = { @@ -155,14 +178,15 @@ class AlertsPlugin { InsufficientDataActions: insufficientDataActions, Dimensions: dimensions, TreatMissingData: treatMissingData, - } + }, }; if (_.includes(statisticValues, definition.statistic)) { - alarm.Properties.Statistic = definition.statistic + alarm.Properties.Statistic = definition.statistic; } else { - alarm.Properties.ExtendedStatistic = definition.statistic - alarm.Properties.EvaluateLowSampleCountPercentile = definition.evaluateLowSampleCountPercentile + alarm.Properties.ExtendedStatistic = definition.statistic; + alarm.Properties.EvaluateLowSampleCountPercentile = + definition.evaluateLowSampleCountPercentile; } } else if (definition.type === 'anomalyDetection') { alarm = { @@ -185,24 +209,26 @@ class AlertsPlugin { Metric: { Namespace: namespace, MetricName: metricId, - Dimensions: dimensions + Dimensions: dimensions, }, Period: definition.period, - Stat: definition.statistic - } + Stat: definition.statistic, + }, }, { Id: 'ad1', Expression: `ANOMALY_DETECTION_BAND(m1, ${definition.threshold})`, Label: `${metricId} (expected)`, - ReturnData: true - } + ReturnData: true, + }, ], - ThresholdMetricId: 'ad1' - } - } + ThresholdMetricId: 'ad1', + }, + }; } else { - throw new Error(`Missing type for alarm ${alarm.name} on function ${functionName}, must be one of 'static' or 'anomalyDetection'`); + throw new Error( + `Missing type for alarm ${alarm.name} on function ${functionName}, must be one of 'static' or 'anomalyDetection'` + ); } if (definition.nameTemplate) { @@ -213,7 +239,7 @@ class AlertsPlugin { metricName: definition.metric, metricId, functionName, - stackName + stackName, }); } return alarm; @@ -222,7 +248,7 @@ class AlertsPlugin { getSnsTopicCloudFormation(topicName, notifications) { const subscription = (notifications || []).map((n) => ({ Protocol: n.protocol, - Endpoint: n.endpoint + Endpoint: n.endpoint, })); return { @@ -230,7 +256,7 @@ class AlertsPlugin { Properties: { TopicName: topicName, Subscription: subscription, - } + }, }; } @@ -241,7 +267,9 @@ class AlertsPlugin { const topic = isTopicConfigAnObject ? topicConfig.topic : topicConfig; const isTopicAnObject = _.isObject(topic); - const notifications = isTopicConfigAnObject ? topicConfig.notifications : []; + const notifications = isTopicConfigAnObject + ? topicConfig.notifications + : []; if (topic) { if (isTopicAnObject || topic.indexOf('arn:') === 0) { @@ -252,17 +280,19 @@ class AlertsPlugin { alertTopics[key] = topic; } } else { - const cfRef = `AwsAlerts${customAlarmName ? _.upperFirst(customAlarmName) : ''}${_.upperFirst(key)}`; + const cfRef = `AwsAlerts${ + customAlarmName ? _.upperFirst(customAlarmName) : '' + }${_.upperFirst(key)}`; if (customAlarmName) { if (!alertTopics[customAlarmName]) { - alertTopics[customAlarmName] = {} + alertTopics[customAlarmName] = {}; } alertTopics[customAlarmName][key] = { - Ref: cfRef + Ref: cfRef, }; } else { alertTopics[key] = { - Ref: cfRef + Ref: cfRef, }; } @@ -279,11 +309,11 @@ class AlertsPlugin { if (config.topics) { Object.keys(config.topics).forEach((key) => { if (['ok', 'alarm', 'insufficientData'].indexOf(key) !== -1) { - this._addAlertTopic(key, config.topics, alertTopics) + this._addAlertTopic(key, config.topics, alertTopics); } else { Object.keys(config.topics[key]).forEach((subkey) => { - this._addAlertTopic(subkey, config.topics[key], alertTopics, key) - }) + this._addAlertTopic(subkey, config.topics[key], alertTopics, key); + }); } }); } @@ -291,17 +321,28 @@ class AlertsPlugin { return alertTopics; } - getLogMetricCloudFormation(alarm, functionName, normalizedFunctionName, functionObj) { + getLogMetricCloudFormation( + alarm, + functionName, + normalizedFunctionName, + functionObj + ) { if (!alarm.pattern) return {}; - const logMetricCFRefBase = this.naming.getLogMetricCloudFormationRef(normalizedFunctionName, alarm.name); + const logMetricCFRefBase = this.naming.getLogMetricCloudFormationRef( + normalizedFunctionName, + alarm.name + ); const logMetricCFRefALERT = `${logMetricCFRefBase}ALERT`; const logMetricCFRefOK = `${logMetricCFRefBase}OK`; const cfLogName = this.providerNaming.getLogGroupLogicalId(functionName); const metricNamespace = this.providerNaming.getStackName(); const logGroupName = this.providerNaming.getLogGroupName(functionObj.name); - const metricName = this.naming.getPatternMetricName(alarm.metric, normalizedFunctionName); + const metricName = this.naming.getPatternMetricName( + alarm.metric, + normalizedFunctionName + ); return { [logMetricCFRefALERT]: { @@ -310,12 +351,14 @@ class AlertsPlugin { Properties: { FilterPattern: alarm.pattern, LogGroupName: logGroupName, - MetricTransformations: [{ - MetricValue: 1, - MetricNamespace: metricNamespace, - MetricName: metricName - }] - } + MetricTransformations: [ + { + MetricValue: 1, + MetricNamespace: metricNamespace, + MetricName: metricName, + }, + ], + }, }, [logMetricCFRefOK]: { Type: 'AWS::Logs::MetricFilter', @@ -323,13 +366,15 @@ class AlertsPlugin { Properties: { FilterPattern: '', LogGroupName: logGroupName, - MetricTransformations: [{ - MetricValue: 0, - MetricNamespace: metricNamespace, - MetricName: metricName - }] - } - } + MetricTransformations: [ + { + MetricValue: 0, + MetricNamespace: metricNamespace, + MetricName: metricName, + }, + ], + }, + }, }; } @@ -339,19 +384,46 @@ class AlertsPlugin { this.serverless.service.getAllFunctions().forEach((functionName) => { const functionObj = this.serverless.service.getFunction(functionName); - const normalizedFunctionName = this.providerNaming.getLambdaLogicalId(functionName); - - const functionAlarms = this.getFunctionAlarms(functionObj, config, definitions); - const alarms = globalAlarms.concat(functionAlarms).map(alarm => _.assign({ nameTemplate: config.nameTemplate, prefixTemplate: config.prefixTemplate }, alarm)); + const normalizedFunctionName = this.providerNaming.getLambdaLogicalId( + functionName + ); + + const functionAlarms = this.getFunctionAlarms( + functionObj, + config, + definitions + ); + const alarms = globalAlarms.concat(functionAlarms).map((alarm) => + _.assign( + { + nameTemplate: config.nameTemplate, + prefixTemplate: config.prefixTemplate, + }, + alarm + ) + ); const alarmStatements = alarms.reduce((statements, alarm) => { - const key = this.naming.getAlarmCloudFormationRef(alarm.name, functionName); + const key = this.naming.getAlarmCloudFormationRef( + alarm.name, + functionName + ); if (alarm.enabled) { - const cf = this.getAlarmCloudFormation(alertTopics, alarm, functionName, normalizedFunctionName); + const cf = this.getAlarmCloudFormation( + alertTopics, + alarm, + functionName, + normalizedFunctionName + ); statements[key] = cf; - const logMetricCF = this.getLogMetricCloudFormation(alarm, functionName, normalizedFunctionName, functionObj); + const logMetricCF = this.getLogMetricCloudFormation( + alarm, + functionName, + normalizedFunctionName, + functionObj + ); _.merge(statements, logMetricCF); } else { delete statements[key]; @@ -368,10 +440,12 @@ class AlertsPlugin { const configType = typeof configDashboards; if (configType === 'boolean') { - return ['default'] - } else if (configType === 'string') { - return [configDashboards] - } else if (configType === 'object' && configDashboards.stages) { + return ['default']; + } + if (configType === 'string') { + return [configDashboards]; + } + if (configType === 'object' && configDashboards.stages) { if (configDashboards.stages.indexOf(stage) >= 0) { if (configDashboards.templates) { return [].concat(configDashboards.templates); @@ -379,11 +453,12 @@ class AlertsPlugin { return ['default']; } - this.serverless.cli.log(`Info: Not deploying dashboards on stage ${this.options.stage}`); + this.serverless.cli.log( + `Info: Not deploying dashboards on stage ${this.options.stage}` + ); return []; - } else { - return [].concat(configDashboards); } + return [].concat(configDashboards); } compileDashboards(configDashboards) { @@ -391,30 +466,39 @@ class AlertsPlugin { const provider = service.provider; const stage = this.options.stage; const region = this.options.region || provider.region; - const dashboardTemplates = this.getDashboardTemplates(configDashboards, stage); + const dashboardTemplates = this.getDashboardTemplates( + configDashboards, + stage + ); const functions = this.serverless.service .getAllFunctions() - .map(functionName => ({ name: functionName })); + .map((functionName) => ({ name: functionName })); const cf = _.chain(dashboardTemplates) .uniq() .reduce((acc, d) => { - const dashboard = dashboards.createDashboard(service.service, stage, region, functions, d); + const dashboard = dashboards.createDashboard( + service.service, + stage, + region, + functions, + d + ); - const cfResource = d === 'default' - ? 'AlertsDashboard' - : `AlertsDashboard${d}`; - const dashboardName = d === 'default' - ? `${service.service}-${stage}-${region}` - : `${service.service}-${stage}-${region}-${d}`; + const cfResource = + d === 'default' ? 'AlertsDashboard' : `AlertsDashboard${d}`; + const dashboardName = + d === 'default' + ? `${service.service}-${stage}-${region}` + : `${service.service}-${stage}-${region}-${d}`; acc[cfResource] = { Type: 'AWS::CloudWatch::Dashboard', Properties: { DashboardName: dashboardName, DashboardBody: JSON.stringify(dashboard), - } + }, }; return acc; }, {}) @@ -430,7 +514,9 @@ class AlertsPlugin { } if (config.stages && !_.includes(config.stages, this.options.stage)) { - this.serverless.cli.log(`Warning: Not deploying alerts on stage ${this.options.stage}`); + this.serverless.cli.log( + `Warning: Not deploying alerts on stage ${this.options.stage}` + ); return; } @@ -440,7 +526,7 @@ class AlertsPlugin { this.compileAlarms(config, definitions, alertTopics); if (config.dashboards) { - this.compileDashboards(config.dashboards) + this.compileDashboards(config.dashboards); } } @@ -450,7 +536,11 @@ class AlertsPlugin { this.externalStack.mergeResources(resources); } else { // Otherwise merge the resources to the main Serverless stack. - _.merge(this.serverless.service.provider.compiledCloudFormationTemplate.Resources, resources); + _.merge( + this.serverless.service.provider.compiledCloudFormationTemplate + .Resources, + resources + ); } } } diff --git a/src/index.test.js b/src/index.test.js index d85283b..d7b793c 100644 --- a/src/index.test.js +++ b/src/index.test.js @@ -1,5 +1,3 @@ -'use strict'; - const _ = require('lodash'); const path = require('path'); @@ -11,20 +9,20 @@ const pluginFactory = (alarmsConfig, s) => { const stage = s || 'dev'; const functions = { foo: { - name: 'foo' - } + name: 'foo', + }, }; const serverless = { cli: { - log: console.log + log: console.log, // eslint-disable-line no-console }, config: { - servicePath: testServicePath + servicePath: testServicePath, }, service: { custom: { - alerts: alarmsConfig + alerts: alarmsConfig, }, getAllFunctions: () => Object.keys(functions), getFunction: (name) => functions[name], @@ -35,23 +33,21 @@ const pluginFactory = (alarmsConfig, s) => { }, service: 'fooservice', }, - getProvider: () => { - return { - naming: { - getLambdaLogicalId: (name) => `${_.upperFirst(name)}LambdaFunction`, - getLogGroupLogicalId: (name) => name, - getLogGroupName: (name) => `/aws/lambda/${name}`, - getStackName: () => `fooservice-${stage}`, - } - }; - } + getProvider: () => ({ + naming: { + getLambdaLogicalId: (name) => `${_.upperFirst(name)}LambdaFunction`, + getLogGroupLogicalId: (name) => name, + getLogGroupName: (name) => `/aws/lambda/${name}`, + getStackName: () => `fooservice-${stage}`, + }, + }), }; return new Plugin(serverless, { stage, }); }; -describe('#index', function () { +describe('#index', () => { describe('#getConfig', () => { it('should get config', () => { const expected = {}; @@ -80,21 +76,23 @@ describe('#index', function () { const testAlarm = {}; const alarms = ['test']; const definitions = { - 'test': testAlarm, + test: testAlarm, }; const alarmsConfig = plugin.getAlarms(alarms, definitions); - expect(alarmsConfig).toEqual([{ - name: 'test', - enabled: true, - type: 'static' - }]); + expect(alarmsConfig).toEqual([ + { + name: 'test', + enabled: true, + type: 'static', + }, + ]); }); it('should get alarms config by object', () => { const testAlarm = { enabled: true, - type: 'static' + type: 'static', }; const alarms = [testAlarm]; const definitions = {}; @@ -115,31 +113,33 @@ describe('#index', function () { it('should merge alarm with definition', () => { const testAlarm = { name: 'testAlarm', - threshold: 100 + threshold: 100, }; const alarms = [testAlarm]; const definitions = { testAlarm: { threshold: 1, - statistic: 'Sum' - } + statistic: 'Sum', + }, }; const alarmsConfig = plugin.getAlarms(alarms, definitions); - expect(alarmsConfig).toEqual([{ - name: 'testAlarm', - enabled: true, - type: 'static', - threshold: 100, - statistic: 'Sum' - }]); + expect(alarmsConfig).toEqual([ + { + name: 'testAlarm', + enabled: true, + type: 'static', + threshold: 100, + statistic: 'Sum', + }, + ]); }); it('should import alarms from CloudFormation', () => { const testAlarm = { - 'Fn::ImportValue': "ServiceMonitoring:monitoring-${opt:stage, 'dev'}", + 'Fn::ImportValue': "ServiceMonitoring:monitoring-${opt:stage, 'dev'}", // eslint-disable-line enabled: true, - type: 'static' + type: 'static', }; const alarms = [testAlarm]; const definitions = {}; @@ -169,26 +169,6 @@ describe('#index', function () { }); }); - describe('#getFunctionAlarms', () => { - let plugin = null; - - beforeEach(() => { - plugin = pluginFactory({}); - }); - - it('should throw if no config argument', () => { - expect(() => { - plugin.getFunctionAlarms({}); - }).toThrow(); - }); - - it('should throw if no definitions argument', () => { - expect(() => { - plugin.getFunctionAlarms({}, {}); - }).toThrow(); - }); - }); - describe('#getDefinitions', () => { it('should merge definitions', () => { const config = { @@ -215,8 +195,8 @@ describe('#index', function () { evaluationPeriods: 2, datapointsToAlarm: 1, comparisonOperator: 'GreaterThanOrEqualToThreshold', - } - } + }, + }, }; const plugin = pluginFactory(config); @@ -287,7 +267,7 @@ describe('#index', function () { evaluationPeriods: 2, datapointsToAlarm: 1, comparisonOperator: 'GreaterThanOrEqualToThreshold', - } + }, }); }); }); @@ -304,12 +284,10 @@ describe('#index', function () { evaluationPeriods: 2, datapointsToAlarm: 1, comparisonOperator: 'GreaterThanOrEqualToThreshold', - } + }, }, global: ['functionThrottles'], - 'function': [ - 'functionInvocations', - ] + function: ['functionInvocations'], }; it('should get no alarms', () => { @@ -323,9 +301,13 @@ describe('#index', function () { it('should get empty alarms', () => { const plugin = pluginFactory(config); const definitions = plugin.getDefinitions(config); - const actual = plugin.getFunctionAlarms({ - alarms: [] - }, config, definitions); + const actual = plugin.getFunctionAlarms( + { + alarms: [], + }, + config, + definitions + ); expect(actual).toEqual([]); }); @@ -333,33 +315,59 @@ describe('#index', function () { it('should get defined function alarms', () => { const plugin = pluginFactory(config); const definitions = plugin.getDefinitions(config); - const actual = plugin.getFunctionAlarms({ - alarms: [ - 'customAlarm' - ] - }, config, definitions); - - expect(actual).toEqual([{ - name: 'customAlarm', - enabled: true, - type: 'static', - namespace: 'AWS/Lambda', - metric: 'Invocations', - threshold: 5, - statistic: 'Minimum', - period: 120, - evaluationPeriods: 2, - datapointsToAlarm: 1, - comparisonOperator: 'GreaterThanOrEqualToThreshold', - }]); + const actual = plugin.getFunctionAlarms( + { + alarms: ['customAlarm'], + }, + config, + definitions + ); + + expect(actual).toEqual([ + { + name: 'customAlarm', + enabled: true, + type: 'static', + namespace: 'AWS/Lambda', + metric: 'Invocations', + threshold: 5, + statistic: 'Minimum', + period: 120, + evaluationPeriods: 2, + datapointsToAlarm: 1, + comparisonOperator: 'GreaterThanOrEqualToThreshold', + }, + ]); }); it('should get custom function alarms', () => { const plugin = pluginFactory(config); const definitions = plugin.getDefinitions(config); - const actual = plugin.getFunctionAlarms({ - alarms: [{ + const actual = plugin.getFunctionAlarms( + { + alarms: [ + { + name: 'fooAlarm', + namespace: 'AWS/Lambda', + metric: 'Invocations', + threshold: 5, + statistic: 'Minimum', + period: 120, + evaluationPeriods: 2, + datapointsToAlarm: 1, + comparisonOperator: 'GreaterThanOrEqualToThreshold', + }, + ], + }, + config, + definitions + ); + + expect(actual).toEqual([ + { name: 'fooAlarm', + enabled: true, + type: 'static', namespace: 'AWS/Lambda', metric: 'Invocations', threshold: 5, @@ -368,33 +376,23 @@ describe('#index', function () { evaluationPeriods: 2, datapointsToAlarm: 1, comparisonOperator: 'GreaterThanOrEqualToThreshold', - }] - }, config, definitions); - - expect(actual).toEqual([{ - name: 'fooAlarm', - enabled: true, - type: 'static', - namespace: 'AWS/Lambda', - metric: 'Invocations', - threshold: 5, - statistic: 'Minimum', - period: 120, - evaluationPeriods: 2, - datapointsToAlarm: 1, - comparisonOperator: 'GreaterThanOrEqualToThreshold', - }]); + }, + ]); }); it('should throw if definition is missing alarms', () => { const plugin = pluginFactory(config); const definitions = plugin.getDefinitions(config); - expect(() => plugin.getFunctionAlarms({ - alarms: [ - 'missingAlarm' - ] - }, config, definitions)).toThrow(Error); + expect(() => + plugin.getFunctionAlarms( + { + alarms: ['missingAlarm'], + }, + config, + definitions + ) + ).toThrow(Error); }); }); @@ -403,18 +401,21 @@ describe('#index', function () { const topicArn = 'arn:aws:sns:us-east-1:123456789012:ok-topic'; const plugin = pluginFactory({ topics: { - ok: topicArn - } + ok: topicArn, + }, }); const config = plugin.getConfig(); const topics = plugin.compileAlertTopics(config); expect(topics).toEqual({ - ok: topicArn + ok: topicArn, }); - expect(plugin.serverless.service.provider.compiledCloudFormationTemplate.Resources).toEqual({}); + expect( + plugin.serverless.service.provider.compiledCloudFormationTemplate + .Resources + ).toEqual({}); }); it('should not create SNS topic when ARN is passed to custom topic', () => { @@ -453,8 +454,8 @@ describe('#index', function () { const topicName = 'ok-topic'; const plugin = pluginFactory({ topics: { - ok: topicName - } + ok: topicName, + }, }); const config = plugin.getConfig(); @@ -462,18 +463,21 @@ describe('#index', function () { expect(topics).toEqual({ ok: { - Ref: `AwsAlertsOk` - } + Ref: `AwsAlertsOk`, + }, }); - expect(plugin.serverless.service.provider.compiledCloudFormationTemplate.Resources).toEqual({ - 'AwsAlertsOk': { + expect( + plugin.serverless.service.provider.compiledCloudFormationTemplate + .Resources + ).toEqual({ + AwsAlertsOk: { Type: 'AWS::SNS::Topic', Properties: { TopicName: topicName, Subscription: [], - } - } + }, + }, }); }); @@ -483,12 +487,14 @@ describe('#index', function () { topics: { ok: { topic: topicName, - notifications: [{ - protocol: 'email', - endpoint: 'test@email.com', - }] - } - } + notifications: [ + { + protocol: 'email', + endpoint: 'test@email.com', + }, + ], + }, + }, }); const config = plugin.getConfig(); @@ -496,21 +502,26 @@ describe('#index', function () { expect(topics).toEqual({ ok: { - Ref: `AwsAlertsOk` - } + Ref: `AwsAlertsOk`, + }, }); - expect(plugin.serverless.service.provider.compiledCloudFormationTemplate.Resources).toEqual({ - 'AwsAlertsOk': { + expect( + plugin.serverless.service.provider.compiledCloudFormationTemplate + .Resources + ).toEqual({ + AwsAlertsOk: { Type: 'AWS::SNS::Topic', Properties: { TopicName: topicName, - Subscription: [{ - Protocol: 'email', - Endpoint: 'test@email.com', - }], - } - } + Subscription: [ + { + Protocol: 'email', + Endpoint: 'test@email.com', + }, + ], + }, + }, }); }); @@ -520,12 +531,12 @@ describe('#index', function () { critical: { ok: 'critical-ok-topic', alert: 'critical-alert-topic', - insufficientData: 'critical-insufficientData-topic' + insufficientData: 'critical-insufficientData-topic', }, nonCritical: { - alarm: 'nonCritical-alarm-topic' - } - } + alarm: 'nonCritical-alarm-topic', + }, + }, }); const config = plugin.getConfig(); @@ -534,51 +545,54 @@ describe('#index', function () { expect(topics).toEqual({ critical: { ok: { - Ref: `AwsAlertsCriticalOk` + Ref: `AwsAlertsCriticalOk`, }, alert: { - Ref: `AwsAlertsCriticalAlert` + Ref: `AwsAlertsCriticalAlert`, }, insufficientData: { - Ref: `AwsAlertsCriticalInsufficientData` - } + Ref: `AwsAlertsCriticalInsufficientData`, + }, }, nonCritical: { alarm: { - Ref: `AwsAlertsNonCriticalAlarm` - } - } + Ref: `AwsAlertsNonCriticalAlarm`, + }, + }, }); - expect(plugin.serverless.service.provider.compiledCloudFormationTemplate.Resources).toEqual({ - 'AwsAlertsCriticalOk': { + expect( + plugin.serverless.service.provider.compiledCloudFormationTemplate + .Resources + ).toEqual({ + AwsAlertsCriticalOk: { Type: 'AWS::SNS::Topic', Properties: { TopicName: 'critical-ok-topic', Subscription: [], - } + }, }, - 'AwsAlertsCriticalAlert': { + AwsAlertsCriticalAlert: { Type: 'AWS::SNS::Topic', Properties: { TopicName: 'critical-alert-topic', Subscription: [], - } + }, }, - 'AwsAlertsCriticalInsufficientData': { + AwsAlertsCriticalInsufficientData: { Type: 'AWS::SNS::Topic', Properties: { TopicName: 'critical-insufficientData-topic', Subscription: [], - } + }, }, - 'AwsAlertsNonCriticalAlarm': { + AwsAlertsNonCriticalAlarm: { Type: 'AWS::SNS::Topic', Properties: { TopicName: 'nonCritical-alarm-topic', Subscription: [], - } - } + }, + }, }); }); @@ -588,59 +602,63 @@ describe('#index', function () { ':', [ 'arn:aws:sns', - '${self:provider.region}', - {Ref: 'AWS::AccountId'}, - 'ok-topic' - ] + '${self:provider.region}', // eslint-disable-line + { Ref: 'AWS::AccountId' }, + 'ok-topic', + ], ], - } + }; const plugin = pluginFactory({ topics: { ok: { - topic - } - } + topic, + }, + }, }); const config = plugin.getConfig(); const topics = plugin.compileAlertTopics(config); expect(topics).toEqual({ - ok: topic + ok: topic, }); - expect(plugin.serverless.service.provider.compiledCloudFormationTemplate.Resources).toEqual({}); + expect( + plugin.serverless.service.provider.compiledCloudFormationTemplate + .Resources + ).toEqual({}); }); it('should not create SNS topic when an object including Ref is passed under "topic"', () => { const topic = { Ref: 'OkTopicLogicalId', - } + }; const plugin = pluginFactory({ topics: { ok: { - topic - } - } + topic, + }, + }, }); const config = plugin.getConfig(); const topics = plugin.compileAlertTopics(config); expect(topics).toEqual({ - ok: topic + ok: topic, }); - expect(plugin.serverless.service.provider.compiledCloudFormationTemplate.Resources).toEqual({}); + expect( + plugin.serverless.service.provider.compiledCloudFormationTemplate + .Resources + ).toEqual({}); }); }); describe('#compileAlarms', () => { it('should compile default function alarms', () => { const plugin = pluginFactory({ - 'function': [ - 'functionInvocations', - ] + function: ['functionInvocations'], }); const config = plugin.getConfig(); @@ -649,7 +667,10 @@ describe('#index', function () { plugin.compileAlarms(config, definitions, alertTopics); - expect(plugin.serverless.service.provider.compiledCloudFormationTemplate.Resources).toEqual({ + expect( + plugin.serverless.service.provider.compiledCloudFormationTemplate + .Resources + ).toEqual({ FooFunctionInvocationsAlarm: { Type: 'AWS::CloudWatch::Alarm', Properties: { @@ -665,15 +686,17 @@ describe('#index', function () { AlarmActions: [], OKActions: [], InsufficientDataActions: [], - Dimensions: [{ - Name: 'FunctionName', - Value: { - Ref: 'FooLambdaFunction' + Dimensions: [ + { + Name: 'FunctionName', + Value: { + Ref: 'FooLambdaFunction', + }, }, - }], + ], TreatMissingData: 'missing', - } - } + }, + }, }); }); @@ -688,10 +711,10 @@ describe('#index', function () { evaluationPeriods: 1, datapointsToAlarm: 1, comparisonOperator: 'GreaterThanOrEqualToThreshold', - pattern: '{$.level > 40}' - } + pattern: '{$.level > 40}', + }, }, - 'function': ['bunyanErrors'] + function: ['bunyanErrors'], }; const plugin = pluginFactory(config); @@ -701,7 +724,10 @@ describe('#index', function () { const alertTopics = plugin.compileAlertTopics(config); plugin.compileAlarms(config, definitions, alertTopics); - expect(plugin.serverless.service.provider.compiledCloudFormationTemplate.Resources).toEqual({ + expect( + plugin.serverless.service.provider.compiledCloudFormationTemplate + .Resources + ).toEqual({ FooBunyanErrorsAlarm: { Type: 'AWS::CloudWatch::Alarm', Properties: { @@ -726,12 +752,14 @@ describe('#index', function () { Properties: { FilterPattern: '{$.level > 40}', LogGroupName: '/aws/lambda/foo', - MetricTransformations: [{ - MetricValue: 1, - MetricNamespace: 'fooservice-dev', - MetricName: 'BunyanErrorsFooLambdaFunction' - }], - } + MetricTransformations: [ + { + MetricValue: 1, + MetricNamespace: 'fooservice-dev', + MetricName: 'BunyanErrorsFooLambdaFunction', + }, + ], + }, }, FooLambdaFunctionBunyanErrorsLogMetricFilterOK: { Type: 'AWS::Logs::MetricFilter', @@ -739,20 +767,22 @@ describe('#index', function () { Properties: { FilterPattern: '', LogGroupName: '/aws/lambda/foo', - MetricTransformations: [{ - MetricValue: 0, - MetricNamespace: 'fooservice-dev', - MetricName: 'BunyanErrorsFooLambdaFunction' - }], + MetricTransformations: [ + { + MetricValue: 0, + MetricNamespace: 'fooservice-dev', + MetricName: 'BunyanErrorsFooLambdaFunction', + }, + ], }, }, }); }); - it('should use globally defined nameTemplate when it`s not provided in definitions', function () { + it('should use globally defined nameTemplate when it`s not provided in definitions', () => { let config = { nameTemplate: '$[functionName]-global', - function: ['functionErrors'] + function: ['functionErrors'], }; const plugin = pluginFactory(config); @@ -762,7 +792,10 @@ describe('#index', function () { const alertTopics = plugin.compileAlertTopics(config); plugin.compileAlarms(config, definitions, alertTopics); - expect(plugin.serverless.service.provider.compiledCloudFormationTemplate.Resources).toEqual({ + expect( + plugin.serverless.service.provider.compiledCloudFormationTemplate + .Resources + ).toEqual({ FooFunctionErrorsAlarm: { Type: 'AWS::CloudWatch::Alarm', Properties: { @@ -779,23 +812,25 @@ describe('#index', function () { AlarmActions: [], OKActions: [], InsufficientDataActions: [], - Dimensions: [{ - Name: 'FunctionName', - Value: { - Ref: 'FooLambdaFunction' + Dimensions: [ + { + Name: 'FunctionName', + Value: { + Ref: 'FooLambdaFunction', + }, }, - }], + ], TreatMissingData: 'missing', - } - } + }, + }, }); }); - it('should use globally defined prefixTemplate when it`s not provided in definitions', function () { + it('should use globally defined prefixTemplate when it`s not provided in definitions', () => { let config = { nameTemplate: '$[functionName]-global', prefixTemplate: 'notTheStackName', - function: ['functionErrors'] + function: ['functionErrors'], }; const plugin = pluginFactory(config); @@ -805,7 +840,10 @@ describe('#index', function () { const alertTopics = plugin.compileAlertTopics(config); plugin.compileAlarms(config, definitions, alertTopics); - expect(plugin.serverless.service.provider.compiledCloudFormationTemplate.Resources).toEqual({ + expect( + plugin.serverless.service.provider.compiledCloudFormationTemplate + .Resources + ).toEqual({ FooFunctionErrorsAlarm: { Type: 'AWS::CloudWatch::Alarm', Properties: { @@ -822,27 +860,29 @@ describe('#index', function () { AlarmActions: [], OKActions: [], InsufficientDataActions: [], - Dimensions: [{ - Name: 'FunctionName', - Value: { - Ref: 'FooLambdaFunction' + Dimensions: [ + { + Name: 'FunctionName', + Value: { + Ref: 'FooLambdaFunction', + }, }, - }], + ], TreatMissingData: 'missing', - } - } + }, + }, }); }); - it('should overwrite globally defined nameTemplate using definitions', function () { + it('should overwrite globally defined nameTemplate using definitions', () => { let config = { nameTemplate: '$[functionName]-global', definitions: { functionErrors: { - nameTemplate: '$[functionName]-local' - } + nameTemplate: '$[functionName]-local', + }, }, - function: ['functionErrors'] + function: ['functionErrors'], }; const plugin = pluginFactory(config); @@ -852,7 +892,10 @@ describe('#index', function () { const alertTopics = plugin.compileAlertTopics(config); plugin.compileAlarms(config, definitions, alertTopics); - expect(plugin.serverless.service.provider.compiledCloudFormationTemplate.Resources).toEqual({ + expect( + plugin.serverless.service.provider.compiledCloudFormationTemplate + .Resources + ).toEqual({ FooFunctionErrorsAlarm: { Type: 'AWS::CloudWatch::Alarm', Properties: { @@ -869,29 +912,31 @@ describe('#index', function () { AlarmActions: [], OKActions: [], InsufficientDataActions: [], - Dimensions: [{ - Name: 'FunctionName', - Value: { - Ref: 'FooLambdaFunction' + Dimensions: [ + { + Name: 'FunctionName', + Value: { + Ref: 'FooLambdaFunction', + }, }, - }], + ], TreatMissingData: 'missing', - } - } + }, + }, }); }); - it('should overwrite globally defined prefixTemplate using definitions', function () { + it('should overwrite globally defined prefixTemplate using definitions', () => { let config = { nameTemplate: '$[functionName]-global', prefixTemplate: 'notTheStackName', definitions: { functionErrors: { nameTemplate: '$[functionName]-local', - prefixTemplate: 'somethingCompletelyCustom' - } + prefixTemplate: 'somethingCompletelyCustom', + }, }, - function: ['functionErrors'] + function: ['functionErrors'], }; const plugin = pluginFactory(config); @@ -901,7 +946,10 @@ describe('#index', function () { const alertTopics = plugin.compileAlertTopics(config); plugin.compileAlarms(config, definitions, alertTopics); - expect(plugin.serverless.service.provider.compiledCloudFormationTemplate.Resources).toEqual({ + expect( + plugin.serverless.service.provider.compiledCloudFormationTemplate + .Resources + ).toEqual({ FooFunctionErrorsAlarm: { Type: 'AWS::CloudWatch::Alarm', Properties: { @@ -918,71 +966,73 @@ describe('#index', function () { AlarmActions: [], OKActions: [], InsufficientDataActions: [], - Dimensions: [{ - Name: 'FunctionName', - Value: { - Ref: 'FooLambdaFunction' + Dimensions: [ + { + Name: 'FunctionName', + Value: { + Ref: 'FooLambdaFunction', + }, + }, + ], + TreatMissingData: 'missing', + }, + }, + }); + }); + + it('should skip alarms that are marked disabled', () => { + let config = { + definitions: { + functionErrors: { + enabled: false, + }, + }, + function: ['functionErrors', 'functionInvocations'], + }; + + const plugin = pluginFactory(config); + + config = plugin.getConfig(); + const definitions = plugin.getDefinitions(config); + const alertTopics = plugin.compileAlertTopics(config); + + plugin.compileAlarms(config, definitions, alertTopics); + expect( + plugin.serverless.service.provider.compiledCloudFormationTemplate + .Resources + ).toEqual({ + FooFunctionInvocationsAlarm: { + Type: 'AWS::CloudWatch::Alarm', + Properties: { + ActionsEnabled: true, + Namespace: 'AWS/Lambda', + MetricName: 'Invocations', + Threshold: 100, + Statistic: 'Sum', + Period: 60, + EvaluationPeriods: 1, + DatapointsToAlarm: 1, + ComparisonOperator: 'GreaterThanOrEqualToThreshold', + Dimensions: [ + { + Name: 'FunctionName', + Value: { + Ref: 'FooLambdaFunction', + }, }, - }], + ], + AlarmActions: [], + OKActions: [], + InsufficientDataActions: [], TreatMissingData: 'missing', - } - } + }, + }, }); - }); - - it('should skip alarms that are marked disabled', () => { - let config = { - definitions: { - functionErrors: { - enabled: false - } - }, - function: [ - 'functionErrors', - 'functionInvocations' - ] - }; - - const plugin = pluginFactory(config); - - config = plugin.getConfig(); - const definitions = plugin.getDefinitions(config); - const alertTopics = plugin.compileAlertTopics(config); - - plugin.compileAlarms(config, definitions, alertTopics); - expect(plugin.serverless.service.provider.compiledCloudFormationTemplate.Resources).toEqual({ - FooFunctionInvocationsAlarm: { - Type: 'AWS::CloudWatch::Alarm', - Properties: { - ActionsEnabled: true, - Namespace: 'AWS/Lambda', - MetricName: 'Invocations', - Threshold: 100, - Statistic: 'Sum', - Period: 60, - EvaluationPeriods: 1, - DatapointsToAlarm: 1, - ComparisonOperator: 'GreaterThanOrEqualToThreshold', - Dimensions: [ - { - Name: 'FunctionName', - Value: { - Ref: 'FooLambdaFunction' - } - } - ], - AlarmActions: [], - OKActions: [], - InsufficientDataActions: [], - TreatMissingData: 'missing' - } - } - }); - }); + }); }); describe('#getDashboardTemplates', () => { - const stage = "production"; + const stage = 'production'; const plugin = pluginFactory({}, stage); it('should return default template if config is true', () => { @@ -990,23 +1040,39 @@ describe('#index', function () { }); it('should return given template if config is string', () => { - expect(plugin.getDashboardTemplates("vertical", stage)).toEqual(["vertical"]); + expect(plugin.getDashboardTemplates('vertical', stage)).toEqual([ + 'vertical', + ]); }); it('should return default template if config is object without templates defined', () => { - expect(plugin.getDashboardTemplates({ stages: ['production'] }, stage)).toEqual(["default"]); + expect( + plugin.getDashboardTemplates({ stages: ['production'] }, stage) + ).toEqual(['default']); }); it('should return defined template if config is object with stages and templates defined', () => { - expect(plugin.getDashboardTemplates({ stages: ['production'], templates: ['vertical'] }, stage)).toEqual(["vertical"]); + expect( + plugin.getDashboardTemplates( + { stages: ['production'], templates: ['vertical'] }, + stage + ) + ).toEqual(['vertical']); }); it('should return empty array if dashboard should not be deployed to this stage', () => { - expect(plugin.getDashboardTemplates({ stages: ['production'], templates: ['vertical'] }, 'dev')).toEqual([]); + expect( + plugin.getDashboardTemplates( + { stages: ['production'], templates: ['vertical'] }, + 'dev' + ) + ).toEqual([]); }); it('should return all defined dashboards if config is an array', () => { - expect(plugin.getDashboardTemplates(['default', 'vertical'], stage)).toEqual(['default', 'vertical']); + expect( + plugin.getDashboardTemplates(['default', 'vertical'], stage) + ).toEqual(['default', 'vertical']); }); }); @@ -1038,6 +1104,7 @@ describe('#index', function () { plugin.compileAlarms = jest.fn(); }); + /* eslint-disable jest/expect-expect */ it('should compile alarms - by default', () => { const config = {}; const definitions = {}; @@ -1054,7 +1121,7 @@ describe('#index', function () { it('should compile alarms - for stage', () => { const config = { - stages: [stage] + stages: [stage], }; const definitions = {}; const alertTopics = {}; @@ -1067,6 +1134,7 @@ describe('#index', function () { expectCompiled(config, definitions, alertTopics); }); + /* eslint-enable jest/expect-expect */ it('should not compile alarms without config', () => { plugin.getConfig.mockImplementation(() => null); @@ -1082,7 +1150,7 @@ describe('#index', function () { it('should not compile alarms on invalid stage', () => { plugin.getConfig.mockImplementation(() => ({ - stages: ['blah'] + stages: ['blah'], })); plugin.compile(); @@ -1130,7 +1198,12 @@ describe('#index', function () { const functionName = 'func-name'; const functionRef = 'func-ref'; - const cf = plugin.getAlarmCloudFormation(alertTopics, definition, functionName, functionRef); + const cf = plugin.getAlarmCloudFormation( + alertTopics, + definition, + functionName, + functionRef + ); expect(cf).toEqual({ Type: 'AWS::CloudWatch::Alarm', @@ -1146,18 +1219,19 @@ describe('#index', function () { OKActions: ['ok-topic'], AlarmActions: ['alarm-topic'], InsufficientDataActions: ['insufficientData-topic'], - Dimensions: [{ - Name: 'FunctionName', - Value: { - Ref: functionRef, - } - }], + Dimensions: [ + { + Name: 'FunctionName', + Value: { + Ref: functionRef, + }, + }, + ], TreatMissingData: 'breaching', - } + }, }); }); - it('should add nested actions - create topics', () => { const alertTopics = { critical: { @@ -1169,7 +1243,7 @@ describe('#index', function () { ok: 'nonCritical-ok-topic', alarm: 'nonCritical-alarm-topic', insufficientData: 'nonCritical-insufficientData-topic', - } + }, }; const definition = { @@ -1186,13 +1260,18 @@ describe('#index', function () { treatMissingData: 'breaching', okActions: ['critical', 'nonCritical'], alarmActions: ['critical', 'nonCritical'], - insufficientDataActions: ['critical', 'nonCritical'] + insufficientDataActions: ['critical', 'nonCritical'], }; const functionName = 'func-name'; const functionRef = 'func-ref'; - const cf = plugin.getAlarmCloudFormation(alertTopics, definition, functionName, functionRef); + const cf = plugin.getAlarmCloudFormation( + alertTopics, + definition, + functionName, + functionRef + ); expect(cf).toEqual({ Type: 'AWS::CloudWatch::Alarm', @@ -1207,15 +1286,20 @@ describe('#index', function () { ComparisonOperator: definition.comparisonOperator, OKActions: ['critical-ok-topic', 'nonCritical-ok-topic'], AlarmActions: ['critical-alarm-topic', 'nonCritical-alarm-topic'], - InsufficientDataActions: ['critical-insufficientData-topic', 'nonCritical-insufficientData-topic'], - Dimensions: [{ - Name: 'FunctionName', - Value: { - Ref: functionRef, - } - }], + InsufficientDataActions: [ + 'critical-insufficientData-topic', + 'nonCritical-insufficientData-topic', + ], + Dimensions: [ + { + Name: 'FunctionName', + Value: { + Ref: functionRef, + }, + }, + ], TreatMissingData: 'breaching', - } + }, }); }); @@ -1244,7 +1328,12 @@ describe('#index', function () { const functionName = 'func-name'; const functionRef = 'func-ref'; - const cf = plugin.getAlarmCloudFormation(alertTopics, definition, functionName, functionRef); + const cf = plugin.getAlarmCloudFormation( + alertTopics, + definition, + functionName, + functionRef + ); expect(cf).toEqual({ Type: 'AWS::CloudWatch::Alarm', @@ -1255,20 +1344,23 @@ describe('#index', function () { Threshold: definition.threshold, ExtendedStatistic: definition.statistic, Period: definition.period, - EvaluateLowSampleCountPercentile: definition.evaluateLowSampleCountPercentile, + EvaluateLowSampleCountPercentile: + definition.evaluateLowSampleCountPercentile, EvaluationPeriods: definition.evaluationPeriods, ComparisonOperator: definition.comparisonOperator, OKActions: ['ok-topic'], AlarmActions: ['alarm-topic'], InsufficientDataActions: ['insufficientData-topic'], - Dimensions: [{ - Name: 'FunctionName', - Value: { - Ref: functionRef, - } - }], + Dimensions: [ + { + Name: 'FunctionName', + Value: { + Ref: functionRef, + }, + }, + ], TreatMissingData: 'breaching', - } + }, }); }); @@ -1291,13 +1383,21 @@ describe('#index', function () { evaluationPeriods: 1, comparisonOperator: 'GreaterThanThreshold', treatMissingData: 'breaching', - dimensions: [{ 'Name': 'Cow', 'Value': 'MOO' }, { 'Name': 'Duck', 'Value': 'QUACK' }] + dimensions: [ + { Name: 'Cow', Value: 'MOO' }, + { Name: 'Duck', Value: 'QUACK' }, + ], }; const functionName = 'func-name'; const functionRef = 'func-ref'; - const cf = plugin.getAlarmCloudFormation(alertTopics, definition, functionName, functionRef); + const cf = plugin.getAlarmCloudFormation( + alertTopics, + definition, + functionName, + functionRef + ); expect(cf).toEqual({ Type: 'AWS::CloudWatch::Alarm', @@ -1313,20 +1413,24 @@ describe('#index', function () { OKActions: ['ok-topic'], AlarmActions: ['alarm-topic'], InsufficientDataActions: ['insufficientData-topic'], - Dimensions: [{ - Name: "Cow", - Value: "MOO" - }, { - Name: "Duck", - Value: "QUACK" - }, { - Name: 'FunctionName', - Value: { - Ref: functionRef, - } - }], + Dimensions: [ + { + Name: 'Cow', + Value: 'MOO', + }, + { + Name: 'Duck', + Value: 'QUACK', + }, + { + Name: 'FunctionName', + Value: { + Ref: functionRef, + }, + }, + ], TreatMissingData: 'breaching', - } + }, }); }); @@ -1354,7 +1458,12 @@ describe('#index', function () { const functionName = 'func-name'; const functionRef = 'func-ref'; - const cf = plugin.getAlarmCloudFormation(alertTopics, definition, functionName, functionRef); + const cf = plugin.getAlarmCloudFormation( + alertTopics, + definition, + functionName, + functionRef + ); expect(cf).toEqual({ Type: 'AWS::CloudWatch::Alarm', @@ -1370,14 +1479,16 @@ describe('#index', function () { OKActions: ['ok-topic'], AlarmActions: ['alarm-topic'], InsufficientDataActions: ['insufficientData-topic'], - Dimensions: [{ - Name: 'FunctionName', - Value: { - Ref: functionRef, - } - }], + Dimensions: [ + { + Name: 'FunctionName', + Value: { + Ref: functionRef, + }, + }, + ], TreatMissingData: 'breaching', - } + }, }); }); @@ -1400,13 +1511,18 @@ describe('#index', function () { datapointsToAlarm: 1, evaluationPeriods: 1, comparisonOperator: 'GreaterThanThreshold', - treatMissingData: 'breaching' + treatMissingData: 'breaching', }; const functionName = 'func-name'; const functionRef = 'func-ref'; - const cf = plugin.getAlarmCloudFormation(alertTopics, definition, functionName, functionRef); + const cf = plugin.getAlarmCloudFormation( + alertTopics, + definition, + functionName, + functionRef + ); expect(cf).toEqual({ Type: 'AWS::CloudWatch::Alarm', @@ -1427,26 +1543,28 @@ describe('#index', function () { Metric: { Namespace: definition.namespace, MetricName: definition.metric, - Dimensions: [{ - Name: 'FunctionName', - Value: { - Ref: functionRef, - } - }] + Dimensions: [ + { + Name: 'FunctionName', + Value: { + Ref: functionRef, + }, + }, + ], }, Period: definition.period, - Stat: definition.statistic - } + Stat: definition.statistic, + }, }, { Id: 'ad1', Expression: `ANOMALY_DETECTION_BAND(m1, ${definition.threshold})`, Label: `${definition.metric} (expected)`, - ReturnData: true - } + ReturnData: true, + }, ], - ThresholdMetricId: 'ad1' - } + ThresholdMetricId: 'ad1', + }, }); }); }); diff --git a/src/naming.js b/src/naming.js index 5bd45fa..d66e3e5 100644 --- a/src/naming.js +++ b/src/naming.js @@ -1,13 +1,9 @@ -'use strict'; - const _ = require('lodash'); -const getNormalisedName = (name) => { - return `${_.upperFirst(name.replace(/-/g, 'Dash').replace(/_/g, 'Underscore'))}`; -} +const getNormalisedName = (name) => + `${_.upperFirst(name.replace(/-/g, 'Dash').replace(/_/g, 'Underscore'))}`; class Naming { - getAlarmCloudFormationRef(alarmName, prefix) { const normalizePrefix = getNormalisedName(prefix); const normalizedName = getNormalisedName(alarmName); @@ -25,21 +21,21 @@ class Naming { getDimensionsList(dimensionsList, funcRef, omitDefaultDimension) { if (omitDefaultDimension) { - return dimensionsList || [] + return dimensionsList || []; } - let funcNameDimension = { - 'Name': 'FunctionName', - 'Value': { - Ref: funcRef - } + const funcNameDimension = { + Name: 'FunctionName', + Value: { + Ref: funcRef, + }, }; - let filteredDimensions = (dimensionsList || []).filter((dim) => { - return dim.Name != 'FunctionName' - }) + const filteredDimensions = (dimensionsList || []).filter( + (dim) => dim.Name !== 'FunctionName' + ); filteredDimensions.push(funcNameDimension); - return filteredDimensions + return filteredDimensions; } getAlarmName(options) { @@ -49,11 +45,14 @@ class Naming { .replace('$[metricName]', options.metricName) .replace('$[metricId]', options.metricId); - const prefixTemplate = typeof options.prefixTemplate !== 'undefined' - ? options.prefixTemplate - : '$[stackName]'; - const interpolatedPrefix = prefixTemplate - .replace('$[stackName]', options.stackName); + const prefixTemplate = + typeof options.prefixTemplate !== 'undefined' + ? options.prefixTemplate + : '$[stackName]'; + const interpolatedPrefix = prefixTemplate.replace( + '$[stackName]', + options.stackName + ); return interpolatedPrefix ? `${interpolatedPrefix}-${interpolatedTemplate}` diff --git a/src/naming.test.js b/src/naming.test.js index 351c939..a993b20 100644 --- a/src/naming.test.js +++ b/src/naming.test.js @@ -1,33 +1,37 @@ -'use strict'; - const Naming = require('./naming'); -describe('#naming', function () { +describe('#naming', () => { describe('#getAlarmCloudFormationRef', () => { let naming = null; - beforeEach(() => naming = new Naming()); + beforeEach(() => (naming = new Naming())); it('should get alarm name', () => { const expected = 'PrefixFunctionErrorsAlarm'; - const actual = naming.getAlarmCloudFormationRef('functionErrors', 'prefix'); + const actual = naming.getAlarmCloudFormationRef( + 'functionErrors', + 'prefix' + ); expect(actual).toEqual(expected); }); }); describe('#getLogMetricCloudFormationRef', () => { let naming = null; - beforeEach(() => naming = new Naming()); + beforeEach(() => (naming = new Naming())); it('should get alarm name', () => { const expected = 'PrefixFunctionErrorsLogMetricFilter'; - const actual = naming.getLogMetricCloudFormationRef('Prefix', 'functionErrors'); + const actual = naming.getLogMetricCloudFormationRef( + 'Prefix', + 'functionErrors' + ); expect(actual).toEqual(expected); }); }); describe('#getPatternMetricName', () => { let naming = null; - beforeEach(() => naming = new Naming()); + beforeEach(() => (naming = new Naming())); it('should get the pattern metric name', () => { const expected = 'MetricNamefoo'; @@ -38,40 +42,59 @@ describe('#naming', function () { describe('#getDimensionsMap', () => { let naming = null; - beforeEach(() => naming = new Naming()); + beforeEach(() => (naming = new Naming())); it('should use function name derived from funcref', () => { - const expected = [{ "Name": "Duck", "Value": "QUACK" }, { "Name": "FunctionName", "Value": { 'Ref': 'funcName' } }] - const actual = naming.getDimensionsList([{ 'Name': 'FunctionName', 'Value': 'overridden' }, { 'Name': 'Duck', 'Value': 'QUACK' }], 'funcName') + const expected = [ + { Name: 'Duck', Value: 'QUACK' }, + { Name: 'FunctionName', Value: { Ref: 'funcName' } }, + ]; + const actual = naming.getDimensionsList( + [ + { Name: 'FunctionName', Value: 'overridden' }, + { Name: 'Duck', Value: 'QUACK' }, + ], + 'funcName' + ); expect(actual).toEqual(expected); }); it('should use function name derived from funcref when dimensions are undefined', () => { - const expected = [{ "Name": "FunctionName", "Value": { 'Ref': 'funcName' } }] - const actual = naming.getDimensionsList(undefined, 'funcName') + const expected = [{ Name: 'FunctionName', Value: { Ref: 'funcName' } }]; + const actual = naming.getDimensionsList(undefined, 'funcName'); expect(actual).toEqual(expected); }); - it('should get a mapped dimensions object when FunctionName is missing', () => { - const expected = [{ "Name": "Duck", "Value": "QUACK" }, { "Name": "FunctionName", "Value": { 'Ref': 'funcName' } }] - const actual = naming.getDimensionsList([{ 'Name': 'Duck', 'Value': 'QUACK' }], 'funcName'); + const expected = [ + { Name: 'Duck', Value: 'QUACK' }, + { Name: 'FunctionName', Value: { Ref: 'funcName' } }, + ]; + const actual = naming.getDimensionsList( + [{ Name: 'Duck', Value: 'QUACK' }], + 'funcName' + ); expect(actual).toEqual(expected); }); it('should not include FunctionName when omitFunctionNameDimension is true', () => { - const expected = [{ "Name": "Duck", "Value": "QUACK" }] - const actual = naming.getDimensionsList([{ 'Name': 'Duck', 'Value': 'QUACK' }], 'funcName', true); + const expected = [{ Name: 'Duck', Value: 'QUACK' }]; + const actual = naming.getDimensionsList( + [{ Name: 'Duck', Value: 'QUACK' }], + 'funcName', + true + ); expect(actual).toEqual(expected); }); }); describe('#getAlarmName', () => { let naming = null; - beforeEach(() => naming = new Naming()); + beforeEach(() => (naming = new Naming())); it('should interpolate alarm name', () => { - const template = '$[functionName]-$[functionId]-$[metricName]-$[metricId]'; + const template = + '$[functionName]-$[functionId]-$[metricName]-$[metricId]'; const functionName = 'function'; const functionLogicalId = 'functionId'; const metricName = 'metric'; @@ -79,13 +102,21 @@ describe('#naming', function () { const stackName = 'fooservice-dev'; const expected = `${stackName}-${functionName}-${functionLogicalId}-${metricName}-${metricId}`; - const actual = naming.getAlarmName({ template, functionName, functionLogicalId, metricName, metricId, stackName }); + const actual = naming.getAlarmName({ + template, + functionName, + functionLogicalId, + metricName, + metricId, + stackName, + }); expect(actual).toEqual(expected); }); it('should interpolate alarm prefix', () => { - const template = '$[functionName]-$[functionId]-$[metricName]-$[metricId]'; + const template = + '$[functionName]-$[functionId]-$[metricName]-$[metricId]'; const prefixTemplate = 'notTheStackName'; const functionName = 'function'; const functionLogicalId = 'functionId'; @@ -94,13 +125,22 @@ describe('#naming', function () { const stackName = 'fooservice-dev'; const expected = `notTheStackName-${functionName}-${functionLogicalId}-${metricName}-${metricId}`; - const actual = naming.getAlarmName({ template, prefixTemplate, functionName, functionLogicalId, metricName, metricId, stackName }); + const actual = naming.getAlarmName({ + template, + prefixTemplate, + functionName, + functionLogicalId, + metricName, + metricId, + stackName, + }); expect(actual).toEqual(expected); }); it('should interpolate an empty alarm prefix', () => { - const template = '$[functionName]-$[functionId]-$[metricName]-$[metricId]'; + const template = + '$[functionName]-$[functionId]-$[metricName]-$[metricId]'; const prefixTemplate = ''; const functionName = 'function'; const functionLogicalId = 'functionId'; @@ -109,7 +149,15 @@ describe('#naming', function () { const stackName = 'fooservice-dev'; const expected = `${functionName}-${functionLogicalId}-${metricName}-${metricId}`; - const actual = naming.getAlarmName({ template, prefixTemplate, functionName, functionLogicalId, metricName, metricId, stackName }); + const actual = naming.getAlarmName({ + template, + prefixTemplate, + functionName, + functionLogicalId, + metricName, + metricId, + stackName, + }); expect(actual).toEqual(expected); }); diff --git a/yarn.lock b/yarn.lock index 96d2c65..f6e186c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,120 @@ # yarn lockfile v1 +"@babel/code-frame@^7.0.0": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" + integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g== + dependencies: + "@babel/highlight" "^7.12.13" + +"@babel/helper-validator-identifier@^7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" + integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== + +"@babel/highlight@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.12.13.tgz#8ab538393e00370b26271b01fa08f7f27f2e795c" + integrity sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww== + dependencies: + "@babel/helper-validator-identifier" "^7.12.11" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@eslint/eslintrc@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.3.0.tgz#d736d6963d7003b6514e6324bec9c602ac340318" + integrity sha512-1JTKgrOKAHVivSvOYw+sJOunkBjUOvjqWk1DPja7ZFhIS2mX/4EgTT8M7eTK9jrKhL/FvXXEbQwIs3pg1xp3dg== + dependencies: + ajv "^6.12.4" + debug "^4.1.1" + espree "^7.3.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.2.1" + js-yaml "^3.13.1" + lodash "^4.17.20" + minimatch "^3.0.4" + strip-json-comments "^3.1.1" + +"@nodelib/fs.scandir@2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69" + integrity sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA== + dependencies: + "@nodelib/fs.stat" "2.0.4" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.4", "@nodelib/fs.stat@^2.0.2": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz#a3f2dd61bab43b8db8fa108a121cfffe4c676655" + integrity sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz#cce9396b30aa5afe9e3756608f5831adcb53d063" + integrity sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow== + dependencies: + "@nodelib/fs.scandir" "2.1.4" + fastq "^1.6.0" + +"@types/json-schema@^7.0.3": + version "7.0.7" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad" + integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA== + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= + +"@typescript-eslint/experimental-utils@^4.0.1": + version "4.15.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.15.0.tgz#b87c36410a9b23f637689427be85007a2ec1a9c6" + integrity sha512-V4vaDWvxA2zgesg4KPgEGiomWEBpJXvY4ZX34Y3qxK8LUm5I87L+qGIOTd9tHZOARXNRt9pLbblSKiYBlGMawg== + dependencies: + "@types/json-schema" "^7.0.3" + "@typescript-eslint/scope-manager" "4.15.0" + "@typescript-eslint/types" "4.15.0" + "@typescript-eslint/typescript-estree" "4.15.0" + eslint-scope "^5.0.0" + eslint-utils "^2.0.0" + +"@typescript-eslint/scope-manager@4.15.0": + version "4.15.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.15.0.tgz#c42703558ea6daaaba51a9c3a86f2902dbab9432" + integrity sha512-CSNBZnCC2jEA/a+pR9Ljh8Y+5TY5qgbPz7ICEk9WCpSEgT6Pi7H2RIjxfrrbUXvotd6ta+i27sssKEH8Azm75g== + dependencies: + "@typescript-eslint/types" "4.15.0" + "@typescript-eslint/visitor-keys" "4.15.0" + +"@typescript-eslint/types@4.15.0": + version "4.15.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.15.0.tgz#3011ae1ac3299bb9a5ac56bdd297cccf679d3662" + integrity sha512-su4RHkJhS+iFwyqyXHcS8EGPlUVoC+XREfy5daivjLur9JP8GhvTmDipuRpcujtGC4M+GYhUOJCPDE3rC5NJrg== + +"@typescript-eslint/typescript-estree@4.15.0": + version "4.15.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.15.0.tgz#402c86a7d2111c1f7a2513022f22a38a395b7f93" + integrity sha512-jG6xTmcNbi6xzZq0SdWh7wQ9cMb2pqXaUp6bUZOMsIlu5aOlxGxgE/t6L/gPybybQGvdguajXGkZKSndZJpksA== + dependencies: + "@typescript-eslint/types" "4.15.0" + "@typescript-eslint/visitor-keys" "4.15.0" + debug "^4.1.1" + globby "^11.0.1" + is-glob "^4.0.1" + semver "^7.3.2" + tsutils "^3.17.1" + +"@typescript-eslint/visitor-keys@4.15.0": + version "4.15.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.15.0.tgz#2a07768df30c8a5673f1bce406338a07fdec38ca" + integrity sha512-RnDtJwOwFucWFAMjG3ghCG/ikImFJFEg20DI7mn4pHEx3vC48lIAoyjhffvfHmErRDboUPC7p9Z2il4CLb7qxA== + dependencies: + "@typescript-eslint/types" "4.15.0" + eslint-visitor-keys "^2.0.0" + abab@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.3.tgz#b81de5f7274ec4e756d797cd834f303642724e5d" @@ -12,34 +126,19 @@ acorn-globals@^3.1.0: dependencies: acorn "^4.0.4" -acorn-jsx@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" - dependencies: - acorn "^3.0.4" - -acorn@^3.0.4: - version "3.3.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" +acorn-jsx@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" + integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== acorn@^4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.4.tgz#17a8d6a7a6c4ef538b814ec9abac2779293bf30a" -acorn@^5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.1.2.tgz#911cb53e036807cf0fa778dc5d370fbd864246d7" - -ajv-keywords@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.1.1.tgz#02550bc605a3e576041565628af972e06c549d50" - -ajv@^4.7.0: - version "4.8.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.8.2.tgz#65486936ca36fea39a1504332a78bebd5d447bdc" - dependencies: - co "^4.6.0" - json-stable-stringify "^1.0.1" +acorn@^7.4.0: + version "7.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== ajv@^4.9.1: version "4.11.4" @@ -48,14 +147,25 @@ ajv@^4.9.1: co "^4.6.0" json-stable-stringify "^1.0.1" -ajv@^5.2.0: - version "5.2.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.2.2.tgz#47c68d69e86f5d953103b0074a9430dc63da5e39" +ajv@^6.10.0, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: - co "^4.6.0" - fast-deep-equal "^1.0.0" - json-schema-traverse "^0.3.0" - json-stable-stringify "^1.0.1" + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-7.0.4.tgz#827e5f5ae32f5e5c1637db61f253a112229b5e2f" + integrity sha512-xzzzaqgEQfmuhbhAoqjJ8T/1okb6gAzXn/eQRNpAN1AEUoHJTNF9xCDRTtf/s3SKldtZfa+RJeTs+BQq+eZ/sw== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" align-text@^0.1.1, align-text@^0.1.3: version "0.1.4" @@ -69,21 +179,23 @@ amdefine@>=0.0.4: version "1.0.1" resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" +ansi-colors@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + ansi-escapes@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" -ansi-escapes@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.0.0.tgz#ec3e8b4e9f8064fc02c3ac9b65f1c275bda8ef92" - ansi-regex@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.0.0.tgz#c5061b6e0ef8a81775e50f5d66151bf6bf371107" -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== ansi-styles@^2.2.1: version "2.2.1" @@ -95,12 +207,20 @@ ansi-styles@^3.0.0: dependencies: color-convert "^1.0.0" -ansi-styles@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88" +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + anymatch@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507" @@ -134,20 +254,35 @@ array-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" -array-union@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" +array-includes@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.2.tgz#a8db03e0b88c8c6aeddc49cb132f9bcab4ebf9c8" + integrity sha512-w2GspexNQpx+PutG3QpT437/BenZBj0M/MZGn5mzv/MofYqo0xmRHzn4lFsoDlWJ+THYsGJmFlW68WlDFx7VRw== dependencies: - array-uniq "^1.0.1" + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + get-intrinsic "^1.0.1" + is-string "^1.0.5" -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== array-unique@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" +array.prototype.flat@^1.2.3: + version "1.2.4" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz#6ef638b43312bd401b4c6199fdec7e2dc9e9a123" + integrity sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + arrify@^1.0.0, arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" @@ -164,6 +299,11 @@ assert-plus@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + async@^1.4.0, async@^1.4.2: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" @@ -344,12 +484,6 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" -bl@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/bl/-/bl-1.1.2.tgz#fdca871a99713aa00d19e3bbba41c44787a65398" - dependencies: - readable-stream "~2.0.5" - boom@2.x.x: version "2.10.1" resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" @@ -378,6 +512,13 @@ braces@^1.8.2: preserve "^0.2.0" repeat-element "^1.1.2" +braces@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + browser-resolve@^1.11.2: version "1.11.2" resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" @@ -400,20 +541,23 @@ builtin-modules@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" -caller-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== dependencies: - callsites "^0.2.0" - -callsites@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" + function-bind "^1.1.1" + get-intrinsic "^1.0.2" callsites@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + camelcase@^1.0.2: version "1.2.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" @@ -422,10 +566,6 @@ camelcase@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" -caseless@~0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" - caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" @@ -447,32 +587,27 @@ chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.1.0.tgz#ac5becf14fa21b99c6c92ca7a7d7cfd5b17e743e" +chalk@^2.0.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== dependencies: - ansi-styles "^3.1.0" + ansi-styles "^3.2.1" escape-string-regexp "^1.0.5" - supports-color "^4.0.0" + supports-color "^5.3.0" + +chalk@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" ci-info@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.0.0.tgz#dc5285f2b4e251821683681c381c3388f46ec534" -circular-json@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.1.tgz#be8b36aefccde8b3ca7aa2d6afc07a37242c0d2d" - -cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - dependencies: - restore-cursor "^2.0.0" - -cli-width@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.1.0.tgz#b234ca209b29ef66fc518d9b98d5847b00edf00a" - cliui@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" @@ -497,39 +632,59 @@ code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" -color-convert@^1.0.0, color-convert@^1.9.0: +color-convert@^1.0.0: version "1.9.0" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a" dependencies: color-name "^1.1.1" +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + color-name@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.1.tgz#4b1415304cf50028ea81643643bd82ea05803689" +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + combined-stream@^1.0.5, combined-stream@~1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" dependencies: delayed-stream "~1.0.0" -commander@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" - dependencies: - graceful-readlink ">= 1.0.0" - concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" -concat-stream@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" - dependencies: - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" +confusing-browser-globals@^1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz#30d1e7f3d1b882b25ec4933d1d1adac353d20a59" + integrity sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA== + +contains-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" + integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= content-type-parser@^1.0.1: version "1.0.1" @@ -543,27 +698,14 @@ core-js@^2.4.0: version "2.4.1" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" -core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - -coveralls: - version "2.11.15" - resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-2.11.15.tgz#37d3474369d66c14f33fa73a9d25cee6e099fca0" +cross-spawn@^7.0.2: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== dependencies: - js-yaml "3.6.1" - lcov-parse "0.0.10" - log-driver "1.2.5" - minimist "1.2.0" - request "2.75.0" - -cross-spawn@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" - dependencies: - lru-cache "^4.0.1" - shebang-command "^1.2.0" - which "^1.2.9" + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" cryptiles@2.x.x: version "2.0.5" @@ -593,17 +735,25 @@ debug@^2.1.1, debug@^2.2.0: dependencies: ms "0.7.2" -debug@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.0.1.tgz#0564c612b521dc92d9f2988f0549e34f9c98db64" +debug@^2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" +debug@^4.0.1, debug@^4.1.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" + integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== + dependencies: + ms "2.1.2" + decamelize@^1.0.0, decamelize@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" -deep-is@~0.1.3: +deep-is@^0.1.3, deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" @@ -613,17 +763,12 @@ default-require-extensions@^1.0.0: dependencies: strip-bom "^2.0.0" -del@^2.0.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" +define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== dependencies: - globby "^5.0.0" - is-path-cwd "^1.0.0" - is-path-in-cwd "^1.0.0" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - rimraf "^2.2.8" + object-keys "^1.0.12" delayed-stream@~1.0.0: version "1.0.0" @@ -639,19 +784,46 @@ diff@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" -doctrine@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.0.0.tgz#c73d8d2909d22291e1a007a395804da8b665fe63" +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +doctrine@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" + integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= dependencies: esutils "^2.0.2" isarray "^1.0.0" +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + ecc-jsbn@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" dependencies: jsbn "~0.1.0" +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +enquirer@^2.3.5: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + "errno@>=0.1.1 <0.2.0-0": version "0.1.4" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" @@ -664,6 +836,35 @@ error-ex@^1.2.0: dependencies: is-arrayish "^0.2.1" +es-abstract@^1.18.0-next.1: + version "1.18.0-next.2" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.2.tgz#088101a55f0541f595e7e057199e27ddc8f3a5c2" + integrity sha512-Ih4ZMFHEtZupnUh6497zEL4y2+w8+1ljnCyaTa+adcoafI1GOvMwFlDjBLfWR7y9VLfrjRJe9ocuHY1PSR9jjw== + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.2.2" + is-negative-zero "^2.0.1" + is-regex "^1.1.1" + object-inspect "^1.9.0" + object-keys "^1.1.1" + object.assign "^4.1.2" + string.prototype.trimend "^1.0.3" + string.prototype.trimstart "^1.0.3" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -679,85 +880,147 @@ escodegen@^1.6.1: optionalDependencies: source-map "~0.2.0" -eslint-config-standard@^6.2.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-6.2.1.tgz#d3a68aafc7191639e7ee441e7348739026354292" +eslint-config-airbnb-base@^14.2.1: + version "14.2.1" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz#8a2eb38455dc5a312550193b319cdaeef042cd1e" + integrity sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA== + dependencies: + confusing-browser-globals "^1.0.10" + object.assign "^4.1.2" + object.entries "^1.1.2" + +eslint-config-prettier@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-7.2.0.tgz#f4a4bd2832e810e8cc7c1411ec85b3e85c0c53f9" + integrity sha512-rV4Qu0C3nfJKPOAhFujFxB7RMP+URFyQqqOZW9DMRD7ZDTFyjaIlETU3xzHELt++4ugC0+Jm084HQYkkJe+Ivg== + +eslint-import-resolver-node@^0.3.4: + version "0.3.4" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717" + integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA== + dependencies: + debug "^2.6.9" + resolve "^1.13.1" + +eslint-module-utils@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz#579ebd094f56af7797d19c9866c9c9486629bfa6" + integrity sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA== + dependencies: + debug "^2.6.9" + pkg-dir "^2.0.0" + +eslint-plugin-import@^2.22.1: + version "2.22.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz#0896c7e6a0cf44109a2d97b95903c2bb689d7702" + integrity sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw== + dependencies: + array-includes "^3.1.1" + array.prototype.flat "^1.2.3" + contains-path "^0.1.0" + debug "^2.6.9" + doctrine "1.5.0" + eslint-import-resolver-node "^0.3.4" + eslint-module-utils "^2.6.0" + has "^1.0.3" + minimatch "^3.0.4" + object.values "^1.1.1" + read-pkg-up "^2.0.0" + resolve "^1.17.0" + tsconfig-paths "^3.9.0" -eslint-plugin-node@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-4.1.0.tgz#87cb62a96109087bcb5827bd5ae15fd0c49685bb" +eslint-plugin-jest@^24.1.3: + version "24.1.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-24.1.3.tgz#fa3db864f06c5623ff43485ca6c0e8fc5fe8ba0c" + integrity sha512-dNGGjzuEzCE3d5EPZQ/QGtmlMotqnYWD/QpCZ1UuZlrMAdhG5rldh0N0haCvhGnUkSeuORS5VNROwF9Hrgn3Lg== dependencies: - ignore "^3.0.11" - minimatch "^3.0.2" - object-assign "^4.0.1" - resolve "^1.1.7" - semver "5.3.0" + "@typescript-eslint/experimental-utils" "^4.0.1" -eslint-plugin-promise@^3.4.1: - version "3.5.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-3.5.0.tgz#78fbb6ffe047201627569e85a6c5373af2a68fca" - -eslint-plugin-standard@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-2.0.1.tgz#3589699ff9c917f2c25f76a916687f641c369ff3" +eslint-plugin-prettier@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.3.1.tgz#7079cfa2497078905011e6f82e8dd8453d1371b7" + integrity sha512-Rq3jkcFY8RYeQLgk2cCwuc0P7SEFwDravPhsJZOQ5N4YI4DSg50NyqJ/9gdZHzQlHf8MvafSesbNJCcP/FF6pQ== + dependencies: + prettier-linter-helpers "^1.0.0" -eslint-scope@^3.7.1: - version "3.7.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" +eslint-scope@^5.0.0, eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== dependencies: - esrecurse "^4.1.0" + esrecurse "^4.3.0" estraverse "^4.1.1" -eslint@^4.7.1: - version "4.7.1" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.7.1.tgz#849804136953ebe366782f9f8611e2cbd1b54681" +eslint-utils@^2.0.0, eslint-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== dependencies: - ajv "^5.2.0" - babel-code-frame "^6.22.0" - chalk "^2.1.0" - concat-stream "^1.6.0" - cross-spawn "^5.1.0" - debug "^3.0.1" - doctrine "^2.0.0" - eslint-scope "^3.7.1" - espree "^3.5.1" - esquery "^1.0.0" - estraverse "^4.2.0" + eslint-visitor-keys "^1.1.0" + +eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +eslint-visitor-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" + integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== + +eslint@^7.19.0: + version "7.19.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.19.0.tgz#6719621b196b5fad72e43387981314e5d0dc3f41" + integrity sha512-CGlMgJY56JZ9ZSYhJuhow61lMPPjUzWmChFya71Z/jilVos7mR/jPgaEfVGgMBY5DshbKdG8Ezb8FDCHcoMEMg== + dependencies: + "@babel/code-frame" "^7.0.0" + "@eslint/eslintrc" "^0.3.0" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.0.1" + doctrine "^3.0.0" + enquirer "^2.3.5" + eslint-scope "^5.1.1" + eslint-utils "^2.1.0" + eslint-visitor-keys "^2.0.0" + espree "^7.3.1" + esquery "^1.2.0" esutils "^2.0.2" - file-entry-cache "^2.0.0" + file-entry-cache "^6.0.0" functional-red-black-tree "^1.0.1" - glob "^7.1.2" - globals "^9.17.0" - ignore "^3.3.3" + glob-parent "^5.0.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.0.0" imurmurhash "^0.1.4" - inquirer "^3.0.6" - is-resolvable "^1.0.0" - js-yaml "^3.9.1" - json-stable-stringify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.4" - minimatch "^3.0.2" - mkdirp "^0.5.1" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash "^4.17.20" + minimatch "^3.0.4" natural-compare "^1.4.0" - optionator "^0.8.2" - path-is-inside "^1.0.2" - pluralize "^7.0.0" + optionator "^0.9.1" progress "^2.0.0" - require-uncached "^1.0.3" - semver "^5.3.0" - strip-ansi "^4.0.0" - strip-json-comments "~2.0.1" - table "^4.0.1" - text-table "~0.2.0" - -espree@^3.5.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.1.tgz#0c988b8ab46db53100a1954ae4ba995ddd27d87e" - dependencies: - acorn "^5.1.1" - acorn-jsx "^3.0.0" - -esprima@^2.6.0, esprima@^2.7.1: + regexpp "^3.1.0" + semver "^7.2.1" + strip-ansi "^6.0.0" + strip-json-comments "^3.1.0" + table "^6.0.4" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +espree@^7.3.0, espree@^7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" + integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== + dependencies: + acorn "^7.4.0" + acorn-jsx "^5.3.1" + eslint-visitor-keys "^1.3.0" + +esprima@^2.7.1: version "2.7.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" @@ -766,33 +1029,36 @@ esprima@^3.1.1: resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" esprima@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa" +esquery@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== dependencies: - estraverse "^4.0.0" + estraverse "^5.1.0" -esrecurse@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.1.0.tgz#4713b6536adf7f2ac4f327d559e7756bff648220" +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: - estraverse "~4.1.0" - object-assign "^4.0.1" + estraverse "^5.2.0" estraverse@^1.9.1: version "1.9.3" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" -estraverse@^4.0.0, estraverse@^4.1.1, estraverse@^4.2.0: +estraverse@^4.1.1: version "4.2.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" -estraverse@~4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.1.1.tgz#f6caca728933a850ef90661d0e17982ba47111a2" +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== esutils@^2.0.2: version "2.0.2" @@ -820,14 +1086,6 @@ extend@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4" -external-editor@^2.0.4: - version "2.0.5" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.0.5.tgz#52c249a3981b9ba187c7cacf5beb50bf1d91a6bc" - dependencies: - iconv-lite "^0.4.17" - jschardet "^1.4.2" - tmp "^0.0.33" - extglob@^0.3.1: version "0.3.2" resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" @@ -838,14 +1096,49 @@ extsprintf@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" -fast-deep-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff" +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-diff@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" + integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== + +fast-glob@^3.1.1: + version "3.2.5" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661" + integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.0" + merge2 "^1.3.0" + micromatch "^4.0.2" + picomatch "^2.2.1" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= fast-levenshtein@~2.0.4: version "2.0.5" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.5.tgz#bd33145744519ab1c36c3ee9f31f08e9079b67f2" +fastq@^1.6.0: + version "1.10.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.10.1.tgz#8b8f2ac8bf3632d67afcd65dac248d5fdc45385e" + integrity sha512-AWuv6Ery3pM+dY7LYS8YIaCiQvUaos9OB1RyNgaOWnaX+Tik7Onvcsf8x8c+YtDeT0maYLniBip2hox5KtEXXA== + dependencies: + reusify "^1.0.4" + fb-watchman@^1.8.0: version "1.9.2" resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-1.9.2.tgz#a24cf47827f82d38fb59a69ad70b76e3b6ae7383" @@ -858,18 +1151,12 @@ fb-watchman@^2.0.0: dependencies: bser "^2.0.0" -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" +file-entry-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.0.tgz#7921a89c391c6d93efec2169ac6bf300c527ea0a" + integrity sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA== dependencies: - escape-string-regexp "^1.0.5" - -file-entry-cache@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" - dependencies: - flat-cache "^1.2.1" - object-assign "^4.0.1" + flat-cache "^3.0.4" filename-regex@^2.0.0: version "2.0.0" @@ -892,6 +1179,13 @@ fill-range@^2.1.0: repeat-element "^1.1.2" repeat-string "^1.5.2" +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + find-up@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" @@ -899,20 +1193,24 @@ find-up@^1.0.0: path-exists "^2.0.0" pinkie-promise "^2.0.0" -find-up@^2.1.0: +find-up@^2.0.0, find-up@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" dependencies: locate-path "^2.0.0" -flat-cache@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.2.1.tgz#6c837d6225a7de5659323740b36d5361f71691ff" +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== dependencies: - circular-json "^0.3.0" - del "^2.0.2" - graceful-fs "^4.1.2" - write "^0.2.1" + flatted "^3.1.0" + rimraf "^3.0.2" + +flatted@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469" + integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== for-in@^1.0.1: version "1.0.2" @@ -928,14 +1226,6 @@ forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" -form-data@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.0.0.tgz#6f0aebadcc5da16c13e1ecc11137d85f9b883b25" - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.5" - mime-types "^2.1.11" - form-data@~2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.2.tgz#89c3534008b97eada4cbb157d58f6f5df025eae4" @@ -948,26 +1238,29 @@ fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - -generate-function@^2.0.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.3.1.tgz#f069617690c10c868e73b8465746764f97c3479f" - dependencies: - is-property "^1.0.2" - -generate-object-property@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" - dependencies: - is-property "^1.0.0" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= get-caller-file@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" +get-intrinsic@^1.0.1, get-intrinsic@^1.0.2: + version "1.1.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" + integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + getpass@^0.1.1: version "0.1.6" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6" @@ -987,6 +1280,13 @@ glob-parent@^2.0.0: dependencies: is-glob "^2.0.0" +glob-parent@^5.0.0, glob-parent@^5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== + dependencies: + is-glob "^4.0.1" + glob@^7.0.3, glob@^7.0.5: version "7.1.1" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" @@ -998,9 +1298,10 @@ glob@^7.0.3, glob@^7.0.5: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" +glob@^7.1.3: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -1009,33 +1310,33 @@ glob@^7.1.2: once "^1.3.0" path-is-absolute "^1.0.0" +globals@^12.1.0: + version "12.4.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" + integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== + dependencies: + type-fest "^0.8.1" + globals@^9.0.0: version "9.16.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.16.0.tgz#63e903658171ec2d9f51b1d31de5e2b8dc01fb80" -globals@^9.17.0: - version "9.18.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" - -globby@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" +globby@^11.0.1: + version "11.0.2" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.2.tgz#1af538b766a3b540ebfb58a32b2e2d5897321d83" + integrity sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og== dependencies: - array-union "^1.0.1" - arrify "^1.0.0" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.1.1" + ignore "^5.1.4" + merge2 "^1.3.0" + slash "^3.0.0" graceful-fs@^4.1.2, graceful-fs@^4.1.6: version "4.1.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" -"graceful-readlink@>= 1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" - growly@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" @@ -1054,15 +1355,6 @@ har-schema@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" -har-validator@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" - dependencies: - chalk "^1.1.1" - commander "^2.9.0" - is-my-json-valid "^2.12.4" - pinkie-promise "^2.0.0" - har-validator@~4.2.0: version "4.2.1" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" @@ -1080,9 +1372,27 @@ has-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" -has-flag@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-symbols@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" + integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" hawk@~3.1.3: version "3.1.3" @@ -1122,25 +1432,37 @@ http-signature@~1.1.0: jsprim "^1.2.2" sshpk "^1.7.0" +husky@^5.0.9: + version "5.0.9" + resolved "https://registry.yarnpkg.com/husky/-/husky-5.0.9.tgz#6d38706643d66ed395bcd4ee952d02e3f15eb3a3" + integrity sha512-0SjcaY21a+IRdx7p7r/X33Vc09UR2m8SbP8yfkhUX2/jAmwcz+GR7i9jXkp2pP3GfX23JhMkVP6SWwXB18uXtg== + iconv-lite@0.4.13: version "0.4.13" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2" -iconv-lite@^0.4.17: - version "0.4.19" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== -ignore@^3.0.11: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.2.0.tgz#8d88f03c3002a0ac52114db25d2c673b0bf1e435" +ignore@^5.1.4: + version "5.1.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== -ignore@^3.3.3: - version "3.3.5" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.5.tgz#c4e715455f6073a8d7e5dae72d2fc9d71663dba6" +import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= inflight@^1.0.4: version "1.0.6" @@ -1149,29 +1471,10 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: +inherits@2: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" -inquirer@^3.0.6: - version "3.3.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" - dependencies: - ansi-escapes "^3.0.0" - chalk "^2.0.0" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^2.0.4" - figures "^2.0.0" - lodash "^4.3.0" - mute-stream "0.0.7" - run-async "^2.2.0" - rx-lite "^4.0.8" - rx-lite-aggregates "^4.0.8" - string-width "^2.1.0" - strip-ansi "^4.0.0" - through "^2.3.6" - invariant@^2.2.0: version "2.2.2" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" @@ -1196,12 +1499,29 @@ is-builtin-module@^1.0.0: dependencies: builtin-modules "^1.0.0" +is-callable@^1.1.4, is-callable@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" + integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== + is-ci@^1.0.9: version "1.0.10" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.0.10.tgz#f739336b2632365061a9d48270cd56ae3369318e" dependencies: ci-info "^1.0.0" +is-core-module@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" + integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== + dependencies: + has "^1.0.3" + +is-date-object@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== + is-dotfile@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d" @@ -1220,6 +1540,11 @@ is-extglob@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + is-finite@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" @@ -1232,9 +1557,10 @@ is-fullwidth-code-point@^1.0.0: dependencies: number-is-nan "^1.0.0" -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== is-glob@^2.0.0, is-glob@^2.0.1: version "2.0.1" @@ -1242,19 +1568,17 @@ is-glob@^2.0.0, is-glob@^2.0.1: dependencies: is-extglob "^1.0.0" -is-my-ip-valid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz#7b351b8e8edd4d3995d4d066680e664d94696824" - -is-my-json-valid@^2.12.4: - version "2.20.5" - resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.20.5.tgz#5eca6a8232a687f68869b7361be1612e7512e5df" +is-glob@^4.0.0, is-glob@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== dependencies: - generate-function "^2.0.0" - generate-object-property "^1.1.0" - is-my-ip-valid "^1.0.0" - jsonpointer "^4.0.0" - xtend "^4.0.0" + is-extglob "^2.1.1" + +is-negative-zero@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" + integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== is-number@^2.0.2, is-number@^2.1.0: version "2.1.0" @@ -1262,21 +1586,10 @@ is-number@^2.0.2, is-number@^2.1.0: dependencies: kind-of "^3.0.2" -is-path-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" - -is-path-in-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc" - dependencies: - is-path-inside "^1.0.0" - -is-path-inside@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.0.tgz#fc06e5a1683fbda13de667aff717bbc10a48f37f" - dependencies: - path-is-inside "^1.0.1" +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== is-posix-bracket@^0.1.0: version "0.1.1" @@ -1286,19 +1599,25 @@ is-primitive@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" -is-promise@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" +is-regex@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.2.tgz#81c8ebde4db142f2cf1c53fc86d6a45788266251" + integrity sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg== + dependencies: + call-bind "^1.0.2" + has-symbols "^1.0.1" -is-property@^1.0.0, is-property@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" +is-string@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" + integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== -is-resolvable@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.0.tgz#8df57c61ea2e3c501408d100fb013cf8d6e0cc62" +is-symbol@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" + integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== dependencies: - tryit "^1.0.1" + has-symbols "^1.0.1" is-typedarray@~1.0.0: version "1.0.0" @@ -1308,7 +1627,7 @@ is-utf8@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" -isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: +isarray@1.0.0, isarray@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -1319,6 +1638,7 @@ isexe@^1.1.1: isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= isobject@^2.0.0: version "2.1.0" @@ -1606,12 +1926,18 @@ js-tokens@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7" -js-yaml@3.6.1: - version "3.6.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.6.1.tgz#6e5fe67d8b205ce4d22fad05b7781e8dadcc4b30" +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== dependencies: argparse "^1.0.7" - esprima "^2.6.0" + esprima "^4.0.0" js-yaml@^3.7.0: version "3.8.2" @@ -1620,21 +1946,10 @@ js-yaml@^3.7.0: argparse "^1.0.7" esprima "^3.1.1" -js-yaml@^3.9.1: - version "3.10.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - jsbn@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.0.tgz#650987da0dd74f4ebf5a11377a2aa2d273e97dfd" -jschardet@^1.4.2: - version "1.5.1" - resolved "https://registry.yarnpkg.com/jschardet/-/jschardet-1.5.1.tgz#c519f629f86b3a5bedba58a88d311309eec097f9" - jsdom@^9.11.0: version "9.11.0" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.11.0.tgz#a95b0304e521a2ca5a63c6ea47bf7708a7a84591" @@ -1663,14 +1978,25 @@ jsesc@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" -json-schema-traverse@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + json-stable-stringify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" @@ -1685,14 +2011,17 @@ json5@^0.5.0: version "0.5.1" resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + jsonify@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" -jsonpointer@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.1.0.tgz#501fb89986a2389765ba09e6053299ceb4f2c2cc" - jsprim@^1.2.2: version "1.3.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.3.1.tgz#2a7256f70412a29ee3670aaca625994c4dcff252" @@ -1717,15 +2046,19 @@ lcid@^1.0.0: dependencies: invert-kv "^1.0.0" -lcov-parse@0.0.10: - version "0.0.10" - resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-0.0.10.tgz#1b0b8ff9ac9c7889250582b70b71315d9da6d9a3" - leven@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" -levn@^0.3.0, levn@~0.3.0: +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" dependencies: @@ -1742,6 +2075,16 @@ load-json-file@^1.0.0: pinkie-promise "^2.0.0" strip-bom "^2.0.0" +load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + locate-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" @@ -1749,13 +2092,14 @@ locate-path@^2.0.0: p-locate "^2.0.0" path-exists "^3.0.0" -lodash@^4.0.0, lodash@^4.14.0, lodash@^4.17.10, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.3.0: +lodash@^4.14.0, lodash@^4.17.10, lodash@^4.2.0: version "4.17.19" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" -log-driver@1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.5.tgz#7ae4ec257302fd790d557cb10c97100d857b0056" +lodash@^4.17.20: + version "4.17.20" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" + integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== longest@^1.0.1: version "1.0.1" @@ -1767,12 +2111,12 @@ loose-envify@^1.0.0: dependencies: js-tokens "^3.0.0" -lru-cache@^4.0.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55" +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" + yallist "^4.0.0" makeerror@1.0.x: version "1.0.11" @@ -1780,6 +2124,11 @@ makeerror@1.0.x: dependencies: tmpl "1.0.x" +merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + merge@^1.1.3: version "1.2.0" resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" @@ -1802,20 +2151,24 @@ micromatch@^2.1.5, micromatch@^2.3.11: parse-glob "^3.0.4" regex-cache "^0.4.2" +micromatch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" + integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== + dependencies: + braces "^3.0.1" + picomatch "^2.0.5" + mime-db@~1.24.0: version "1.24.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.24.0.tgz#e2d13f939f0016c6e4e9ad25a8652f126c467f0c" -mime-types@^2.1.11, mime-types@^2.1.12, mime-types@~2.1.7: +mime-types@^2.1.12, mime-types@~2.1.7: version "2.1.12" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.12.tgz#152ba256777020dd4663f54c2e7bc26381e71729" dependencies: mime-db "~1.24.0" -mimic-fn@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18" - minimatch@^3.0.2, minimatch@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" @@ -1832,10 +2185,15 @@ minimist@0.0.8, minimist@~0.0.1: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" -minimist@1.2.0, minimist@^1.1.1: +minimist@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" +minimist@^1.2.0: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + mkdirp@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" @@ -1850,9 +2208,10 @@ ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" -mute-stream@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== natural-compare@^1.4.0: version "1.4.0" @@ -1871,10 +2230,6 @@ node-notifier@^5.0.1: shellwords "^0.1.0" which "^1.2.12" -node-uuid@~1.4.7: - version "1.4.7" - resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.7.tgz#6da5a17668c4b3dd59623bda11cf7fa4c1f60a6f" - normalize-package-data@^2.3.2: version "2.3.5" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.5.tgz#8d924f142960e1777e7ffe170543631cc7cb02df" @@ -1900,10 +2255,40 @@ oauth-sign@~0.8.1: version "0.8.2" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" -object-assign@^4.0.1, object-assign@^4.1.0: +object-assign@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0" +object-inspect@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" + integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw== + +object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + has-symbols "^1.0.1" + object-keys "^1.1.1" + +object.entries@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.3.tgz#c601c7f168b62374541a07ddbd3e2d5e4f7711a6" + integrity sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + has "^1.0.3" + object.omit@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" @@ -1911,18 +2296,22 @@ object.omit@^2.0.0: for-own "^0.1.4" is-extendable "^0.1.1" +object.values@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.2.tgz#7a2015e06fcb0f546bd652486ce8583a4731c731" + integrity sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + has "^1.0.3" + once@^1.3.0, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" dependencies: wrappy "1" -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - dependencies: - mimic-fn "^1.0.0" - optimist@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" @@ -1930,7 +2319,7 @@ optimist@^0.6.1: minimist "~0.0.1" wordwrap "~0.0.2" -optionator@^0.8.1, optionator@^0.8.2: +optionator@^0.8.1: version "0.8.2" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" dependencies: @@ -1941,6 +2330,18 @@ optionator@^0.8.1, optionator@^0.8.2: type-check "~0.3.2" wordwrap "~1.0.0" +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + os-homedir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" @@ -1951,7 +2352,7 @@ os-locale@^1.4.0: dependencies: lcid "^1.0.0" -os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: +os-tmpdir@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" @@ -1965,6 +2366,13 @@ p-locate@^2.0.0: dependencies: p-limit "^1.1.0" +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + parse-glob@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" @@ -1998,14 +2406,20 @@ path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" -path-is-inside@^1.0.1, path-is-inside@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-parse@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + path-type@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" @@ -2014,10 +2428,27 @@ path-type@^1.0.0: pify "^2.0.0" pinkie-promise "^2.0.0" +path-type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= + dependencies: + pify "^2.0.0" + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + performance-now@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" +picomatch@^2.0.5, picomatch@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== + pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -2032,9 +2463,17 @@ pinkie@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" -pluralize@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" +pkg-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= + dependencies: + find-up "^2.1.0" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== prelude-ls@~1.1.2: version "1.1.2" @@ -2044,6 +2483,18 @@ preserve@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== + dependencies: + fast-diff "^1.1.2" + +prettier@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5" + integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q== + pretty-format@^19.0.0: version "19.0.0" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-19.0.0.tgz#56530d32acb98a3fa4851c4e2b9d37b420684c84" @@ -2054,34 +2505,33 @@ private@^0.1.6: version "0.1.7" resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1" -process-nextick-args@~1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" - progress@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== prr@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" -qs@~6.2.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.1.tgz#ce03c5ff0935bc1d9d69a9f14cbd18e568d67625" +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== qs@~6.3.0: version "6.3.1" resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.1.tgz#918c0b3bcd36679772baf135b1acb4c1651ed79d" +queue-microtask@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.2.tgz#abf64491e6ecf0f38a6502403d4cda04f372dfd3" + integrity sha512-dB15eXv3p2jDlbOiNLyMabYg1/sXvppd8DP2J3EOCQ0AkuSXCW2tP7mnVouVLJKgUMY6yP0kcQDVpLCN13h4Xg== + randomatic@^1.1.3: version "1.1.6" resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb" @@ -2096,6 +2546,14 @@ read-pkg-up@^1.0.1: find-up "^1.0.0" read-pkg "^1.0.0" +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" + read-pkg@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" @@ -2104,28 +2562,14 @@ read-pkg@^1.0.0: normalize-package-data "^2.3.2" path-type "^1.0.0" -readable-stream@^2.2.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~1.0.6" - safe-buffer "~5.1.1" - string_decoder "~1.0.3" - util-deprecate "~1.0.1" - -readable-stream@~2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e" +read-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "~1.0.0" - process-nextick-args "~1.0.6" - string_decoder "~0.10.x" - util-deprecate "~1.0.1" + load-json-file "^2.0.0" + normalize-package-data "^2.3.2" + path-type "^2.0.0" regenerator-runtime@^0.10.0: version "0.10.3" @@ -2138,6 +2582,11 @@ regex-cache@^0.4.2: is-equal-shallow "^0.1.3" is-primitive "^2.0.0" +regexpp@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" + integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== + repeat-element@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" @@ -2152,32 +2601,6 @@ repeating@^2.0.0: dependencies: is-finite "^1.0.0" -request@2.75.0: - version "2.75.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.75.0.tgz#d2b8268a286da13eaa5d01adf5d18cc90f657d93" - dependencies: - aws-sign2 "~0.6.0" - aws4 "^1.2.1" - bl "~1.1.2" - caseless "~0.11.0" - combined-stream "~1.0.5" - extend "~3.0.0" - forever-agent "~0.6.1" - form-data "~2.0.0" - har-validator "~2.0.6" - hawk "~3.1.3" - http-signature "~1.1.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.7" - node-uuid "~1.4.7" - oauth-sign "~0.8.1" - qs "~6.2.0" - stringstream "~0.0.4" - tough-cookie "~2.3.0" - tunnel-agent "~0.4.1" - request@^2.79.0: version "2.80.0" resolved "https://registry.yarnpkg.com/request/-/request-2.80.0.tgz#8cc162d76d79381cdefdd3505d76b80b60589bd0" @@ -2208,37 +2631,42 @@ require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + require-main-filename@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" -require-uncached@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" - dependencies: - caller-path "^0.1.0" - resolve-from "^1.0.0" - -resolve-from@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== -resolve@1.1.7, resolve@^1.1.7: +resolve@1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" +resolve@^1.13.1, resolve@^1.17.0: + version "1.19.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" + integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== + dependencies: + is-core-module "^2.1.0" + path-parse "^1.0.6" + resolve@^1.2.0: version "1.3.2" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.2.tgz#1f0442c9e0cbb8136e87b9305f932f46c7f28235" dependencies: path-parse "^1.0.5" -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== right-align@^0.1.1: version "0.1.3" @@ -2246,31 +2674,25 @@ right-align@^0.1.1: dependencies: align-text "^0.1.1" -rimraf@^2.2.8, rimraf@^2.4.3, rimraf@^2.4.4: +rimraf@^2.4.3, rimraf@^2.4.4: version "2.5.4" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04" dependencies: glob "^7.0.5" -run-async@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: - is-promise "^2.1.0" + glob "^7.1.3" -rx-lite-aggregates@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== dependencies: - rx-lite "*" - -rx-lite@*, rx-lite@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" - -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" + queue-microtask "^1.2.2" sane@~1.5.0: version "1.5.0" @@ -2288,39 +2710,54 @@ sax@^1.2.1: version "1.2.2" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.2.tgz#fd8631a23bc7826bef5d871bdb87378c95647828" -"semver@2 || 3 || 4 || 5", semver@5.3.0, semver@^5.3.0: +"semver@2 || 3 || 4 || 5", semver@^5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" +semver@^7.2.1, semver@^7.3.2: + version "7.3.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" + integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== + dependencies: + lru-cache "^6.0.0" + set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: - shebang-regex "^1.0.0" + shebang-regex "^3.0.0" -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== shellwords@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.0.tgz#66afd47b6a12932d9071cbfd98a52e785cd0ba14" -signal-exit@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" - slash@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" -slice-ansi@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" sntp@1.x.x: version "1.0.9" @@ -2397,29 +2834,30 @@ string-width@^1.0.1, string-width@^1.0.2: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -string-width@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.0.0.tgz#635c5436cc72a6e0c387ceca278d4e2eec52687e" +string-width@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" + integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^3.0.0" + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" -string-width@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" +string.prototype.trimend@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz#a22bd53cca5c7cf44d7c9d5c732118873d6cd18b" + integrity sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw== dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + call-bind "^1.0.0" + define-properties "^1.1.3" -string_decoder@~1.0.3: +string.prototype.trimstart@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz#9b4cb590e123bb36564401d59824298de50fd5aa" + integrity sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg== dependencies: - safe-buffer "~5.1.0" + call-bind "^1.0.0" + define-properties "^1.1.3" stringstream@~0.0.4: version "0.0.5" @@ -2431,13 +2869,14 @@ strip-ansi@^3.0.0, strip-ansi@^3.0.1: dependencies: ansi-regex "^2.0.0" -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== dependencies: - ansi-regex "^3.0.0" + ansi-regex "^5.0.0" -strip-bom@3.0.0: +strip-bom@3.0.0, strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" @@ -2447,9 +2886,10 @@ strip-bom@^2.0.0: dependencies: is-utf8 "^0.2.0" -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== supports-color@^2.0.0: version "2.0.0" @@ -2461,26 +2901,33 @@ supports-color@^3.1.2: dependencies: has-flag "^1.0.0" -supports-color@^4.0.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.4.0.tgz#883f7ddabc165142b2a61427f3352ded195d1a3e" +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: - has-flag "^2.0.0" + has-flag "^4.0.0" symbol-tree@^3.2.1: version "3.2.2" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" -table@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/table/-/table-4.0.1.tgz#a8116c133fac2c61f4a420ab6cdf5c4d61f0e435" +table@^6.0.4: + version "6.0.7" + resolved "https://registry.yarnpkg.com/table/-/table-6.0.7.tgz#e45897ffbcc1bcf9e8a87bf420f2c9e5a7a52a34" + integrity sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g== dependencies: - ajv "^4.7.0" - ajv-keywords "^1.0.0" - chalk "^1.1.1" - lodash "^4.0.0" - slice-ansi "0.0.4" - string-width "^2.0.0" + ajv "^7.0.2" + lodash "^4.17.20" + slice-ansi "^4.0.0" + string-width "^4.2.0" test-exclude@^4.0.0: version "4.0.0" @@ -2492,24 +2939,15 @@ test-exclude@^4.0.0: read-pkg-up "^1.0.1" require-main-filename "^1.0.1" -text-table@~0.2.0: +text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= throat@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/throat/-/throat-3.0.0.tgz#e7c64c867cbb3845f10877642f7b60055b8ec0d6" -through@^2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - dependencies: - os-tmpdir "~1.0.2" - tmpl@1.0.x: version "1.0.4" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" @@ -2518,6 +2956,13 @@ to-fast-properties@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.2.tgz#f3f5c0c3ba7299a7ef99427e44633257ade43320" +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + tough-cookie@^2.3.2, tough-cookie@~2.3.0: version "2.3.2" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" @@ -2532,9 +2977,27 @@ trim-right@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" -tryit@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb" +tsconfig-paths@^3.9.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b" + integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.1" + minimist "^1.2.0" + strip-bom "^3.0.0" + +tslib@^1.8.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tsutils@^3.17.1: + version "3.20.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.20.0.tgz#ea03ea45462e146b53d70ce0893de453ff24f698" + integrity sha512-RYbuQuvkhuqVeXweWT3tJLKOEJ/UUw9GjNEZGWdrLLlM+611o1gwLHBpxoFJKKl25fLprp2eVthtKs5JOrNeXg== + dependencies: + tslib "^1.8.1" tunnel-agent@~0.4.1: version "0.4.3" @@ -2544,15 +3007,23 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.3" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.3.tgz#3da382f670f25ded78d7b3d1792119bca0b7132d" +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + type-check@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" dependencies: prelude-ls "~1.1.2" -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== uglify-js@^2.6: version "2.7.4" @@ -2567,14 +3038,22 @@ uglify-to-browserify@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" -util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" uuid@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" +v8-compile-cache@^2.0.3: + version "2.2.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz#9471efa3ef9128d2f7c6a7ca39c4dd6b5055b132" + integrity sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q== + validate-npm-package-license@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" @@ -2629,9 +3108,10 @@ which@^1.1.1, which@^1.2.12: dependencies: isexe "^1.1.1" -which@^1.2.9: - version "1.3.0" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" @@ -2639,6 +3119,11 @@ window-size@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" +word-wrap@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + wordwrap@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" @@ -2669,17 +3154,11 @@ wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" -write@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" - dependencies: - mkdirp "^0.5.1" - xml-name-validator@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-2.0.1.tgz#4d8b8f1eccd3419aa362061becef515e1e559635" -"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0: +"xtend@>=4.0.0 <4.1.0-0": version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" @@ -2687,9 +3166,10 @@ y18n@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== yargs-parser@^4.2.0: version "4.2.1" From 0ea68386a5d7800d8f2690522017179e7d5df3f1 Mon Sep 17 00:00:00 2001 From: subash Date: Wed, 10 Feb 2021 17:08:13 +1100 Subject: [PATCH 4/5] chore: add commitlint --- .commitlintrc | 2 + .husky/.gitignore | 2 +- .husky/commit-msg | 4 +- package.json | 14 +- yarn.lock | 903 +++++++++++++++++++++++++++++++++++++++++++++- 5 files changed, 903 insertions(+), 22 deletions(-) create mode 100644 .commitlintrc diff --git a/.commitlintrc b/.commitlintrc new file mode 100644 index 0000000..0974185 --- /dev/null +++ b/.commitlintrc @@ -0,0 +1,2 @@ +extends: + - '@commitlint/config-conventional' diff --git a/.husky/.gitignore b/.husky/.gitignore index 31354ec..c9cdc63 100644 --- a/.husky/.gitignore +++ b/.husky/.gitignore @@ -1 +1 @@ -_ +_ \ No newline at end of file diff --git a/.husky/commit-msg b/.husky/commit-msg index 9887f87..e277ad5 100755 --- a/.husky/commit-msg +++ b/.husky/commit-msg @@ -1,4 +1,4 @@ #!/bin/sh -. "$(dirname $0)/_/husky.sh" +. "$(dirname "$0")/_/husky.sh" -yarn commitlint --edit \ No newline at end of file +yarn commitlint --edit. \ No newline at end of file diff --git a/package.json b/package.json index 1c67bab..e0c4b01 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,10 @@ "lint": "eslint .", "lint-fix": "eslint . --fix", "test": "jest --coverage", - "test:watch": "jest --watch" + "test:watch": "jest --watch", + "postinstall": "husky install", + "prepublishOnly": "pinst --disable", + "postpublish": "pinst --enable" }, "repository": { "url": "https://github.com/ACloudGuru/serverless-plugin-aws-alerts.git", @@ -15,13 +18,12 @@ }, "author": "John McKim ", "license": "MIT", - "peerDependencies": { - "serverless": "^2.4.0" - }, "dependencies": { "lodash": "^4.17.10" }, "devDependencies": { + "@commitlint/config-conventional": "^11.0.0", + "commitlint": "^11.0.0", "eslint": "^7.19.0", "eslint-config-airbnb-base": "^14.2.1", "eslint-config-prettier": "^7.2.0", @@ -30,8 +32,12 @@ "eslint-plugin-prettier": "^3.3.1", "husky": "^5.0.9", "jest": "^19.0.2", + "pinst": "^2.1.4", "prettier": "^2.2.1" }, + "peerDependencies": { + "serverless": "^2.4.0" + }, "engines": { "node": ">=8.10.0" }, diff --git a/yarn.lock b/yarn.lock index f6e186c..a27229e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -23,6 +23,149 @@ chalk "^2.0.0" js-tokens "^4.0.0" +"@babel/runtime@^7.11.2": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.13.tgz#0a21452352b02542db0ffb928ac2d3ca7cb6d66d" + integrity sha512-8+3UMPBrjFa/6TtKi/7sehPKqfAm4g6K+YQjyyFOLUTxzOngcRZTlAVY8sc2CORJYqdHQY8gRPHmn+qo15rCBw== + dependencies: + regenerator-runtime "^0.13.4" + +"@commitlint/cli@^11.0.0": + version "11.0.0" + resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-11.0.0.tgz#698199bc52afed50aa28169237758fa14a67b5d3" + integrity sha512-YWZWg1DuqqO5Zjh7vUOeSX76vm0FFyz4y0cpGMFhrhvUi5unc4IVfCXZ6337R9zxuBtmveiRuuhQqnRRer+13g== + dependencies: + "@babel/runtime" "^7.11.2" + "@commitlint/format" "^11.0.0" + "@commitlint/lint" "^11.0.0" + "@commitlint/load" "^11.0.0" + "@commitlint/read" "^11.0.0" + chalk "4.1.0" + core-js "^3.6.1" + get-stdin "8.0.0" + lodash "^4.17.19" + resolve-from "5.0.0" + resolve-global "1.0.0" + yargs "^15.1.0" + +"@commitlint/config-conventional@^11.0.0": + version "11.0.0" + resolved "https://registry.yarnpkg.com/@commitlint/config-conventional/-/config-conventional-11.0.0.tgz#3fa300a1b639273946de3c3f15e1cda518333422" + integrity sha512-SNDRsb5gLuDd2PL83yCOQX6pE7gevC79UPFx+GLbLfw6jGnnbO9/tlL76MLD8MOViqGbo7ZicjChO9Gn+7tHhA== + dependencies: + conventional-changelog-conventionalcommits "^4.3.1" + +"@commitlint/ensure@^11.0.0": + version "11.0.0" + resolved "https://registry.yarnpkg.com/@commitlint/ensure/-/ensure-11.0.0.tgz#3e796b968ab5b72bc6f8a6040076406306c987fb" + integrity sha512-/T4tjseSwlirKZdnx4AuICMNNlFvRyPQimbZIOYujp9DSO6XRtOy9NrmvWujwHsq9F5Wb80QWi4WMW6HMaENug== + dependencies: + "@commitlint/types" "^11.0.0" + lodash "^4.17.19" + +"@commitlint/execute-rule@^11.0.0": + version "11.0.0" + resolved "https://registry.yarnpkg.com/@commitlint/execute-rule/-/execute-rule-11.0.0.tgz#3ed60ab7a33019e58d90e2d891b75d7df77b4b4d" + integrity sha512-g01p1g4BmYlZ2+tdotCavrMunnPFPhTzG1ZiLKTCYrooHRbmvqo42ZZn4QMStUEIcn+jfLb6BRZX3JzIwA1ezQ== + +"@commitlint/format@^11.0.0": + version "11.0.0" + resolved "https://registry.yarnpkg.com/@commitlint/format/-/format-11.0.0.tgz#ac47b0b9ca46540c0082c721b290794e67bdc51b" + integrity sha512-bpBLWmG0wfZH/svzqD1hsGTpm79TKJWcf6EXZllh2J/LSSYKxGlv967lpw0hNojme0sZd4a/97R3qA2QHWWSLg== + dependencies: + "@commitlint/types" "^11.0.0" + chalk "^4.0.0" + +"@commitlint/is-ignored@^11.0.0": + version "11.0.0" + resolved "https://registry.yarnpkg.com/@commitlint/is-ignored/-/is-ignored-11.0.0.tgz#7b803eda56276dbe7fec51eb1510676198468f39" + integrity sha512-VLHOUBN+sOlkYC4tGuzE41yNPO2w09sQnOpfS+pSPnBFkNUUHawEuA44PLHtDvQgVuYrMAmSWFQpWabMoP5/Xg== + dependencies: + "@commitlint/types" "^11.0.0" + semver "7.3.2" + +"@commitlint/lint@^11.0.0": + version "11.0.0" + resolved "https://registry.yarnpkg.com/@commitlint/lint/-/lint-11.0.0.tgz#01e062cd1b0e7c3d756aa2c246462e0b6a3348a4" + integrity sha512-Q8IIqGIHfwKr8ecVZyYh6NtXFmKw4YSEWEr2GJTB/fTZXgaOGtGFZDWOesCZllQ63f1s/oWJYtVv5RAEuwN8BQ== + dependencies: + "@commitlint/is-ignored" "^11.0.0" + "@commitlint/parse" "^11.0.0" + "@commitlint/rules" "^11.0.0" + "@commitlint/types" "^11.0.0" + +"@commitlint/load@^11.0.0": + version "11.0.0" + resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-11.0.0.tgz#f736562f0ffa7e773f8808fea93319042ee18211" + integrity sha512-t5ZBrtgvgCwPfxmG811FCp39/o3SJ7L+SNsxFL92OR4WQxPcu6c8taD0CG2lzOHGuRyuMxZ7ps3EbngT2WpiCg== + dependencies: + "@commitlint/execute-rule" "^11.0.0" + "@commitlint/resolve-extends" "^11.0.0" + "@commitlint/types" "^11.0.0" + chalk "4.1.0" + cosmiconfig "^7.0.0" + lodash "^4.17.19" + resolve-from "^5.0.0" + +"@commitlint/message@^11.0.0": + version "11.0.0" + resolved "https://registry.yarnpkg.com/@commitlint/message/-/message-11.0.0.tgz#83554c3cbbc884fd07b473593bc3e94bcaa3ee05" + integrity sha512-01ObK/18JL7PEIE3dBRtoMmU6S3ecPYDTQWWhcO+ErA3Ai0KDYqV5VWWEijdcVafNpdeUNrEMigRkxXHQLbyJA== + +"@commitlint/parse@^11.0.0": + version "11.0.0" + resolved "https://registry.yarnpkg.com/@commitlint/parse/-/parse-11.0.0.tgz#d18b08cf67c35d02115207d7009306a2e8e7c901" + integrity sha512-DekKQAIYWAXIcyAZ6/PDBJylWJ1BROTfDIzr9PMVxZRxBPc1gW2TG8fLgjZfBP5mc0cuthPkVi91KQQKGri/7A== + dependencies: + conventional-changelog-angular "^5.0.0" + conventional-commits-parser "^3.0.0" + +"@commitlint/read@^11.0.0": + version "11.0.0" + resolved "https://registry.yarnpkg.com/@commitlint/read/-/read-11.0.0.tgz#f24240548c63587bba139fa5a364cab926077016" + integrity sha512-37V0V91GSv0aDzMzJioKpCoZw6l0shk7+tRG8RkW1GfZzUIytdg3XqJmM+IaIYpaop0m6BbZtfq+idzUwJnw7g== + dependencies: + "@commitlint/top-level" "^11.0.0" + fs-extra "^9.0.0" + git-raw-commits "^2.0.0" + +"@commitlint/resolve-extends@^11.0.0": + version "11.0.0" + resolved "https://registry.yarnpkg.com/@commitlint/resolve-extends/-/resolve-extends-11.0.0.tgz#158ecbe27d4a2a51d426111a01478e216fbb1036" + integrity sha512-WinU6Uv6L7HDGLqn/To13KM1CWvZ09VHZqryqxXa1OY+EvJkfU734CwnOEeNlSCK7FVLrB4kmodLJtL1dkEpXw== + dependencies: + import-fresh "^3.0.0" + lodash "^4.17.19" + resolve-from "^5.0.0" + resolve-global "^1.0.0" + +"@commitlint/rules@^11.0.0": + version "11.0.0" + resolved "https://registry.yarnpkg.com/@commitlint/rules/-/rules-11.0.0.tgz#bdb310cc6fc55c9f8d7d917a22b69055c535c375" + integrity sha512-2hD9y9Ep5ZfoNxDDPkQadd2jJeocrwC4vJ98I0g8pNYn/W8hS9+/FuNpolREHN8PhmexXbkjrwyQrWbuC0DVaA== + dependencies: + "@commitlint/ensure" "^11.0.0" + "@commitlint/message" "^11.0.0" + "@commitlint/to-lines" "^11.0.0" + "@commitlint/types" "^11.0.0" + +"@commitlint/to-lines@^11.0.0": + version "11.0.0" + resolved "https://registry.yarnpkg.com/@commitlint/to-lines/-/to-lines-11.0.0.tgz#86dea151c10eea41e39ea96fa4de07839258a7fe" + integrity sha512-TIDTB0Y23jlCNubDROUVokbJk6860idYB5cZkLWcRS9tlb6YSoeLn1NLafPlrhhkkkZzTYnlKYzCVrBNVes1iw== + +"@commitlint/top-level@^11.0.0": + version "11.0.0" + resolved "https://registry.yarnpkg.com/@commitlint/top-level/-/top-level-11.0.0.tgz#bb2d1b6e5ed3be56874633b59e1f7de118c32783" + integrity sha512-O0nFU8o+Ws+py5pfMQIuyxOtfR/kwtr5ybqTvR+C2lUPer2x6lnQU+OnfD7hPM+A+COIUZWx10mYQvkR3MmtAA== + dependencies: + find-up "^5.0.0" + +"@commitlint/types@^11.0.0": + version "11.0.0" + resolved "https://registry.yarnpkg.com/@commitlint/types/-/types-11.0.0.tgz#719cf05fcc1abb6533610a2e0f5dd1e61eac14fe" + integrity sha512-VoNqai1vR5anRF5Tuh/+SWDFk7xi7oMwHrHrbm1BprYXjB2RJsWLhUrStMssDxEl5lW/z3EUdg8RvH/IUBccSQ== + "@eslint/eslintrc@^0.3.0": version "0.3.0" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.3.0.tgz#d736d6963d7003b6514e6324bec9c602ac340318" @@ -70,6 +213,21 @@ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= +"@types/minimist@^1.2.0": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.1.tgz#283f669ff76d7b8260df8ab7a4262cc83d988256" + integrity sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg== + +"@types/normalize-package-data@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" + integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== + +"@types/parse-json@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" + integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== + "@typescript-eslint/experimental-utils@^4.0.1": version "4.15.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.15.0.tgz#b87c36410a9b23f637689427be85007a2ec1a9c6" @@ -116,6 +274,14 @@ "@typescript-eslint/types" "4.15.0" eslint-visitor-keys "^2.0.0" +JSONStream@^1.0.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + abab@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.3.tgz#b81de5f7274ec4e756d797cd834f303642724e5d" @@ -254,6 +420,11 @@ array-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" +array-ify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" + integrity sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4= + array-includes@^3.1.1: version "3.1.2" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.2.tgz#a8db03e0b88c8c6aeddc49cb132f9bcab4ebf9c8" @@ -322,6 +493,11 @@ asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + aws-sign2@~0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" @@ -558,6 +734,15 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== +camelcase-keys@^6.2.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" + integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== + dependencies: + camelcase "^5.3.1" + map-obj "^4.0.0" + quick-lru "^4.0.1" + camelcase@^1.0.2: version "1.2.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" @@ -566,6 +751,11 @@ camelcase@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" +camelcase@^5.0.0, camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" @@ -577,6 +767,14 @@ center-align@^0.1.1: align-text "^0.1.3" lazy-cache "^1.0.3" +chalk@4.1.0, chalk@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" @@ -596,14 +794,6 @@ chalk@^2.0.0: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" - integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - ci-info@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.0.0.tgz#dc5285f2b4e251821683681c381c3388f46ec534" @@ -624,6 +814,15 @@ cliui@^3.2.0: strip-ansi "^3.0.1" wrap-ansi "^2.0.0" +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" + co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" @@ -672,6 +871,21 @@ combined-stream@^1.0.5, combined-stream@~1.0.5: dependencies: delayed-stream "~1.0.0" +commitlint@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/commitlint/-/commitlint-11.0.0.tgz#a60f759b938c97c5d601c881cfe71b1d4051d219" + integrity sha512-nTmP1tM52gfi39tDCN8dAlRRWJyVoJY2JuYgVhSONETGJ2MY69K/go0YbCzlIEDO/bUka5ybeI6CJz5ZicvNzg== + dependencies: + "@commitlint/cli" "^11.0.0" + +compare-func@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3" + integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== + dependencies: + array-ify "^1.0.0" + dot-prop "^5.1.0" + concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -690,6 +904,36 @@ content-type-parser@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.1.tgz#c3e56988c53c65127fb46d4032a3a900246fdc94" +conventional-changelog-angular@^5.0.0: + version "5.0.12" + resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.12.tgz#c979b8b921cbfe26402eb3da5bbfda02d865a2b9" + integrity sha512-5GLsbnkR/7A89RyHLvvoExbiGbd9xKdKqDTrArnPbOqBqG/2wIosu0fHwpeIRI8Tl94MhVNBXcLJZl92ZQ5USw== + dependencies: + compare-func "^2.0.0" + q "^1.5.1" + +conventional-changelog-conventionalcommits@^4.3.1: + version "4.5.0" + resolved "https://registry.yarnpkg.com/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.5.0.tgz#a02e0b06d11d342fdc0f00c91d78265ed0bc0a62" + integrity sha512-buge9xDvjjOxJlyxUnar/+6i/aVEVGA7EEh4OafBCXPlLUQPGbRUBhBUveWRxzvR8TEjhKEP4BdepnpG2FSZXw== + dependencies: + compare-func "^2.0.0" + lodash "^4.17.15" + q "^1.5.1" + +conventional-commits-parser@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.2.0.tgz#9e261b139ca4b7b29bcebbc54460da36894004ca" + integrity sha512-XmJiXPxsF0JhAKyfA2Nn+rZwYKJ60nanlbSWwwkGwLQFbugsc0gv1rzc7VbbUWAzJfR1qR87/pNgv9NgmxtBMQ== + dependencies: + JSONStream "^1.0.4" + is-text-path "^1.0.1" + lodash "^4.17.15" + meow "^8.0.0" + split2 "^2.0.0" + through2 "^4.0.0" + trim-off-newlines "^1.0.0" + convert-source-map@^1.1.0: version "1.4.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.4.0.tgz#e3dad195bf61bfe13a7a3c73e9876ec14a0268f3" @@ -698,6 +942,27 @@ core-js@^2.4.0: version "2.4.1" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" +core-js@^3.6.1: + version "3.8.3" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.8.3.tgz#c21906e1f14f3689f93abcc6e26883550dd92dd0" + integrity sha512-KPYXeVZYemC2TkNEkX/01I+7yd+nX3KddKwZ1Ww7SKWdI2wQprSgLmrTddT8nw92AjEklTsPBoSdQBhbI1bQ6Q== + +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +cosmiconfig@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.0.tgz#ef9b44d773959cae63ddecd122de23853b60f8d3" + integrity sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.2.1" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.10.0" + cross-spawn@^7.0.2: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" @@ -723,6 +988,11 @@ cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": dependencies: cssom "0.3.x" +dargs@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" + integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== + dashdash@^1.12.0: version "1.14.0" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.0.tgz#29e486c5418bf0f356034a993d51686a33e84141" @@ -749,7 +1019,15 @@ debug@^4.0.1, debug@^4.1.1: dependencies: ms "2.1.2" -decamelize@^1.0.0, decamelize@^1.1.1: +decamelize-keys@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" + integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= + dependencies: + decamelize "^1.1.0" + map-obj "^1.0.0" + +decamelize@^1.0.0, decamelize@^1.1.0, decamelize@^1.1.1, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -780,6 +1058,11 @@ detect-indent@^4.0.0: dependencies: repeating "^2.0.0" +detect-indent@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.0.0.tgz#0abd0f549f69fc6659a254fe96786186b6f528fd" + integrity sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA== + diff@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" @@ -806,6 +1089,13 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" +dot-prop@^5.1.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + dependencies: + is-obj "^2.0.0" + ecc-jsbn@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" @@ -836,6 +1126,13 @@ error-ex@^1.2.0: dependencies: is-arrayish "^0.2.1" +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + es-abstract@^1.18.0-next.1: version "1.18.0-next.2" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.2.tgz#088101a55f0541f595e7e057199e27ddc8f3a5c2" @@ -1199,6 +1496,22 @@ find-up@^2.0.0, find-up@^2.1.0: dependencies: locate-path "^2.0.0" +find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + flat-cache@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" @@ -1234,6 +1547,21 @@ form-data@~2.1.1: combined-stream "^1.0.5" mime-types "^2.1.12" +fromentries@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/fromentries/-/fromentries-1.3.2.tgz#e4bca6808816bf8f93b52750f1127f5a6fd86e3a" + integrity sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg== + +fs-extra@^9.0.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -1252,6 +1580,11 @@ get-caller-file@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" +get-caller-file@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + get-intrinsic@^1.0.1, get-intrinsic@^1.0.2: version "1.1.1" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" @@ -1261,12 +1594,28 @@ get-intrinsic@^1.0.1, get-intrinsic@^1.0.2: has "^1.0.3" has-symbols "^1.0.1" +get-stdin@8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-8.0.0.tgz#cbad6a73feb75f6eeb22ba9e01f89aa28aa97a53" + integrity sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg== + getpass@^0.1.1: version "0.1.6" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6" dependencies: assert-plus "^1.0.0" +git-raw-commits@^2.0.0: + version "2.0.10" + resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.10.tgz#e2255ed9563b1c9c3ea6bd05806410290297bbc1" + integrity sha512-sHhX5lsbG9SOO6yXdlwgEMQ/ljIn7qMpAbJZCGfXX2fq5T8M5SrDnpYk9/4HswTildcIqatsWa91vty6VhWSaQ== + dependencies: + dargs "^7.0.0" + lodash "^4.17.15" + meow "^8.0.0" + split2 "^3.0.0" + through2 "^4.0.0" + glob-base@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" @@ -1310,6 +1659,13 @@ glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" +global-dirs@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" + integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU= + dependencies: + ini "^1.3.4" + globals@^12.1.0: version "12.4.0" resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" @@ -1333,6 +1689,11 @@ globby@^11.0.1: merge2 "^1.3.0" slash "^3.0.0" +graceful-fs@^4.1.15, graceful-fs@^4.2.0: + version "4.2.6" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" + integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== + graceful-fs@^4.1.2, graceful-fs@^4.1.6: version "4.1.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" @@ -1362,6 +1723,11 @@ har-validator@~4.2.0: ajv "^4.9.1" har-schema "^1.0.5" +hard-rejection@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" + integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== + has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" @@ -1418,6 +1784,13 @@ hosted-git-info@^2.1.4: version "2.2.0" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.2.0.tgz#7a0d097863d886c0fabbdcd37bf1758d8becf8a5" +hosted-git-info@^3.0.6: + version "3.0.8" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-3.0.8.tgz#6e35d4cc87af2c5f816e4cb9ce350ba87a3f370d" + integrity sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw== + dependencies: + lru-cache "^6.0.0" + html-encoding-sniffer@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.1.tgz#79bf7a785ea495fe66165e734153f363ff5437da" @@ -1464,6 +1837,11 @@ imurmurhash@^0.1.4: resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -1475,6 +1853,16 @@ inherits@2: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" +inherits@^2.0.3, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ini@^1.3.4: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + invariant@^2.2.0: version "2.2.2" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" @@ -1591,6 +1979,21 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + +is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= + +is-plain-obj@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + is-posix-bracket@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" @@ -1619,7 +2022,14 @@ is-symbol@^1.0.2: dependencies: has-symbols "^1.0.1" -is-typedarray@~1.0.0: +is-text-path@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" + integrity sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4= + dependencies: + text-extensions "^1.0.0" + +is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" @@ -1627,7 +2037,7 @@ is-utf8@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" -isarray@1.0.0, isarray@^1.0.0: +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -1978,6 +2388,11 @@ jsesc@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" @@ -2018,10 +2433,24 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + jsonify@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" +jsonparse@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= + jsprim@^1.2.2: version "1.3.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.3.1.tgz#2a7256f70412a29ee3670aaca625994c4dcff252" @@ -2036,6 +2465,11 @@ kind-of@^3.0.2: dependencies: is-buffer "^1.0.2" +kind-of@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + lazy-cache@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" @@ -2065,6 +2499,11 @@ levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" +lines-and-columns@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" + integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= + load-json-file@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" @@ -2092,11 +2531,25 @@ locate-path@^2.0.0: p-locate "^2.0.0" path-exists "^3.0.0" +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + lodash@^4.14.0, lodash@^4.17.10, lodash@^4.2.0: version "4.17.19" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" -lodash@^4.17.20: +lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20: version "4.17.20" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== @@ -2118,12 +2571,46 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" +make-dir@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + makeerror@1.0.x: version "1.0.11" resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" dependencies: tmpl "1.0.x" +map-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= + +map-obj@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.1.0.tgz#b91221b542734b9f14256c0132c897c5d7256fd5" + integrity sha512-glc9y00wgtwcDmp7GaE/0b0OnxpNJsVf3ael/An6Fe2Q51LLwN1er6sdomLRzz5h0+yMpiYLhWYF5R7HeqVd4g== + +meow@^8.0.0: + version "8.1.2" + resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" + integrity sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q== + dependencies: + "@types/minimist" "^1.2.0" + camelcase-keys "^6.2.2" + decamelize-keys "^1.1.0" + hard-rejection "^2.1.0" + minimist-options "4.1.0" + normalize-package-data "^3.0.0" + read-pkg-up "^7.0.1" + redent "^3.0.0" + trim-newlines "^3.0.0" + type-fest "^0.18.0" + yargs-parser "^20.2.3" + merge2@^1.3.0: version "1.4.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" @@ -2169,6 +2656,11 @@ mime-types@^2.1.12, mime-types@~2.1.7: dependencies: mime-db "~1.24.0" +min-indent@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== + minimatch@^3.0.2, minimatch@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" @@ -2181,6 +2673,15 @@ minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" +minimist-options@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" + integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== + dependencies: + arrify "^1.0.1" + is-plain-obj "^1.1.0" + kind-of "^6.0.3" + minimist@0.0.8, minimist@~0.0.1: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" @@ -2239,6 +2740,26 @@ normalize-package-data@^2.3.2: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" +normalize-package-data@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-package-data@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.0.tgz#1f8a7c423b3d2e85eb36985eaf81de381d01301a" + integrity sha512-6lUjEI0d3v6kFrtgA/lOx4zHCWULXsFNIjHolnZCKCTLA6m/G625cdn3O7eNmT0iD3jfo6HZ9cdImGZwf21prw== + dependencies: + hosted-git-info "^3.0.6" + resolve "^1.17.0" + semver "^7.3.2" + validate-npm-package-license "^3.0.1" + normalize-path@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.0.1.tgz#47886ac1662760d4261b7d979d241709d3ce3f7a" @@ -2360,12 +2881,45 @@ p-limit@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc" +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + p-locate@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" dependencies: p-limit "^1.1.0" +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -2388,6 +2942,16 @@ parse-json@^2.2.0: dependencies: error-ex "^1.2.0" +parse-json@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + parse5@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94" @@ -2402,6 +2966,11 @@ path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" @@ -2463,6 +3032,14 @@ pinkie@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" +pinst@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/pinst/-/pinst-2.1.4.tgz#f951567ac350b5a6d920bca0d53f558df15a27e4" + integrity sha512-T44k87is/GiSjONFxSl/uL6yGqwVpojdnUfbYzNeatDTM8uRCoCEQjuQ0g1oW6XENfbdO2XKtMfdGlDSQ19MJA== + dependencies: + fromentries "^1.3.2" + write-json-file "^4.3.0" + pkg-dir@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" @@ -2505,6 +3082,11 @@ private@^0.1.6: version "0.1.7" resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1" +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + progress@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" @@ -2523,6 +3105,11 @@ punycode@^2.1.0: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== +q@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= + qs@~6.3.0: version "6.3.1" resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.1.tgz#918c0b3bcd36679772baf135b1acb4c1651ed79d" @@ -2532,6 +3119,11 @@ queue-microtask@^1.2.2: resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.2.tgz#abf64491e6ecf0f38a6502403d4cda04f372dfd3" integrity sha512-dB15eXv3p2jDlbOiNLyMabYg1/sXvppd8DP2J3EOCQ0AkuSXCW2tP7mnVouVLJKgUMY6yP0kcQDVpLCN13h4Xg== +quick-lru@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" + integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== + randomatic@^1.1.3: version "1.1.6" resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb" @@ -2554,6 +3146,15 @@ read-pkg-up@^2.0.0: find-up "^2.0.0" read-pkg "^2.0.0" +read-pkg-up@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== + dependencies: + find-up "^4.1.0" + read-pkg "^5.2.0" + type-fest "^0.8.1" + read-pkg@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" @@ -2571,10 +3172,55 @@ read-pkg@^2.0.0: normalize-package-data "^2.3.2" path-type "^2.0.0" +read-pkg@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== + dependencies: + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" + parse-json "^5.0.0" + type-fest "^0.6.0" + +readable-stream@3, readable-stream@^3.0.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@~2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +redent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" + integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== + dependencies: + indent-string "^4.0.0" + strip-indent "^3.0.0" + regenerator-runtime@^0.10.0: version "0.10.3" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.3.tgz#8c4367a904b51ea62a908ac310bf99ff90a82a3e" +regenerator-runtime@^0.13.4: + version "0.13.7" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" + integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== + regex-cache@^0.4.2: version "0.4.3" resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145" @@ -2640,16 +3286,33 @@ require-main-filename@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +resolve-from@5.0.0, resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== +resolve-global@1.0.0, resolve-global@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/resolve-global/-/resolve-global-1.0.0.tgz#a2a79df4af2ca3f49bf77ef9ddacd322dad19255" + integrity sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw== + dependencies: + global-dirs "^0.1.1" + resolve@1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" -resolve@^1.13.1, resolve@^1.17.0: +resolve@^1.10.0, resolve@^1.13.1, resolve@^1.17.0: version "1.19.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== @@ -2694,6 +3357,16 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + sane@~1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/sane/-/sane-1.5.0.tgz#a4adeae764d048621ecb27d5f9ecf513101939f3" @@ -2714,6 +3387,16 @@ sax@^1.2.1: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" +semver@7.3.2: + version "7.3.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" + integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== + +semver@^6.0.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + semver@^7.2.1, semver@^7.3.2: version "7.3.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" @@ -2741,6 +3424,11 @@ shellwords@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.0.tgz#66afd47b6a12932d9071cbfd98a52e785cd0ba14" +signal-exit@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + slash@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" @@ -2765,6 +3453,13 @@ sntp@1.x.x: dependencies: hoek "2.x.x" +sort-keys@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-4.2.0.tgz#6b7638cee42c506fff8c1cecde7376d21315be18" + integrity sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg== + dependencies: + is-plain-obj "^2.0.0" + source-map-support@^0.4.2: version "0.4.11" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.11.tgz#647f939978b38535909530885303daf23279f322" @@ -2801,6 +3496,20 @@ spdx-license-ids@^1.0.2: version "1.2.2" resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" +split2@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/split2/-/split2-2.2.0.tgz#186b2575bcf83e85b7d18465756238ee4ee42493" + integrity sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw== + dependencies: + through2 "^2.0.2" + +split2@^3.0.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" + integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== + dependencies: + readable-stream "^3.0.0" + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -2834,7 +3543,7 @@ string-width@^1.0.1, string-width@^1.0.2: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -string-width@^4.2.0: +string-width@^4.1.0, string-width@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== @@ -2859,6 +3568,20 @@ string.prototype.trimstart@^1.0.3: call-bind "^1.0.0" define-properties "^1.1.3" +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + stringstream@~0.0.4: version "0.0.5" resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" @@ -2886,6 +3609,13 @@ strip-bom@^2.0.0: dependencies: is-utf8 "^0.2.0" +strip-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== + dependencies: + min-indent "^1.0.0" + strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" @@ -2939,6 +3669,11 @@ test-exclude@^4.0.0: read-pkg-up "^1.0.1" require-main-filename "^1.0.1" +text-extensions@^1.0.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" + integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== + text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" @@ -2948,6 +3683,26 @@ throat@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/throat/-/throat-3.0.0.tgz#e7c64c867cbb3845f10877642f7b60055b8ec0d6" +through2@^2.0.2: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +through2@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764" + integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw== + dependencies: + readable-stream "3" + +"through@>=2.2.7 <3": + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + tmpl@1.0.x: version "1.0.4" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" @@ -2973,6 +3728,16 @@ tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" +trim-newlines@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.0.tgz#79726304a6a898aa8373427298d54c2ee8b1cb30" + integrity sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA== + +trim-off-newlines@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3" + integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM= + trim-right@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" @@ -3020,11 +3785,28 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" +type-fest@^0.18.0: + version "0.18.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" + integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== + +type-fest@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== + type-fest@^0.8.1: version "0.8.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + uglify-js@^2.6: version "2.7.4" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.7.4.tgz#a295a0de12b6a650c031c40deb0dc40b14568bd2" @@ -3038,6 +3820,11 @@ uglify-to-browserify@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + uri-js@^4.2.2: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" @@ -3045,6 +3832,11 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + uuid@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" @@ -3102,6 +3894,11 @@ which-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + which@^1.1.1, which@^1.2.12: version "1.2.12" resolved "https://registry.yarnpkg.com/which/-/which-1.2.12.tgz#de67b5e450269f194909ef23ece4ebe416fa1192" @@ -3150,15 +3947,46 @@ wrap-ansi@^2.0.0: string-width "^1.0.1" strip-ansi "^3.0.1" +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" +write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + +write-json-file@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-4.3.0.tgz#908493d6fd23225344af324016e4ca8f702dd12d" + integrity sha512-PxiShnxf0IlnQuMYOPPhPkhExoCQuTUNPOa/2JWCYTmBquU9njyyDuwRKN26IZBlp4yn1nt+Agh2HOOBl+55HQ== + dependencies: + detect-indent "^6.0.0" + graceful-fs "^4.1.15" + is-plain-obj "^2.0.0" + make-dir "^3.0.0" + sort-keys "^4.0.0" + write-file-atomic "^3.0.0" + xml-name-validator@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-2.0.1.tgz#4d8b8f1eccd3419aa362061becef515e1e559635" -"xtend@>=4.0.0 <4.1.0-0": +"xtend@>=4.0.0 <4.1.0-0", xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" @@ -3166,17 +3994,57 @@ y18n@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" +y18n@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" + integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ== + yallist@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== +yaml@^1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e" + integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg== + +yargs-parser@^18.1.2: + version "18.1.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^20.2.3: + version "20.2.4" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" + integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== + yargs-parser@^4.2.0: version "4.2.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-4.2.1.tgz#29cceac0dc4f03c6c87b4a9f217dd18c9f74871c" dependencies: camelcase "^3.0.0" +yargs@^15.1.0: + version "15.4.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.2" + yargs@^6.3.0: version "6.6.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208" @@ -3203,3 +4071,8 @@ yargs@~3.10.0: cliui "^2.1.0" decamelize "^1.0.0" window-size "0.1.0" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From 39d3d71d7cb5eb589d7f8a2de9687705cae2d8ec Mon Sep 17 00:00:00 2001 From: subash Date: Wed, 10 Feb 2021 17:15:04 +1100 Subject: [PATCH 5/5] chore: add codecov configuration --- codecov.yml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 codecov.yml diff --git a/codecov.yml b/codecov.yml new file mode 100644 index 0000000..18455ef --- /dev/null +++ b/codecov.yml @@ -0,0 +1,15 @@ +coverage: + status: + project: + default: + target: auto + threshold: null + +comment: + layout: "reach, diff, flags, files" + behavior: default + require_changes: false + require_base: no + require_head: yes + branches: + - master