diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 000000000..da25dd2c0 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,28 @@ +{ + "env": { + "browser": true, + "es2021": true + }, + "extends": [ + "eslint:recommended", + "plugin:react/recommended", + "plugin:@typescript-eslint/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaFeatures": { + "jsx": true + }, + "ecmaVersion": 12, + "sourceType": "module" + }, + "plugins": [ + "react", + "@typescript-eslint" + ], + "rules": { + "@typescript-eslint/no-empty-function": "off", + "react/display-name": "off", + "@typescript-eslint/explicit-module-boundary-types": "off" + } +} diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index dac8be199..9045cfde8 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -12,7 +12,7 @@ on: jobs: analyze: name: Analyze - runs-on: ubuntu-latest + runs-on: ubuntu-20.04 steps: - name: Checkout repository @@ -22,11 +22,6 @@ jobs: # a pull request then we can checkout the head. fetch-depth: 2 - # If this run was triggered by a pull request event, then checkout - # the head of the pull request instead of the merge commit. - - run: git checkout HEAD^2 - if: ${{ github.event_name == 'pull_request' }} - # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL uses: github/codeql-action/init@v1 diff --git a/.gitignore b/.gitignore index f0f050455..c68020f90 100644 --- a/.gitignore +++ b/.gitignore @@ -2,7 +2,6 @@ node_modules .nyc_output .DS_Store *.log -.vscode .idea compiled .awcache diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 000000000..0362e658d --- /dev/null +++ b/.prettierrc @@ -0,0 +1,5 @@ +{ + "arrowParens": "avoid", + "semi": false, + "tabWidth": 4 +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 000000000..7bed31b85 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,8 @@ +{ + "editor.defaultFormatter": "esbenp.prettier-vscode", + "tslint.enable": false, + "eslint.alwaysShowStatus": true, + "eslint.format.enable": false, + "eslint.debug": true, + "eslint.lintTask.enable": true, +} diff --git a/README.md b/README.md index 3864dddae..8c608237d 100644 --- a/README.md +++ b/README.md @@ -73,6 +73,14 @@ We use [Mocha](https://mochajs.org/) to run the unit test suite from ``/tests``. yarn test ``` +## Linting + +Run the following command to detect linting issues + +``` +yarn lint +``` + ### Docs build Launch the gatsbdy develop mode and navigate to http://localhost:8000 . This build does not require to load dist as the library is compiled directly into the web site. diff --git a/docs/.prettierrc b/docs/.prettierrc deleted file mode 100644 index 33d2cfa3f..000000000 --- a/docs/.prettierrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "arrowParens": "avoid", - "semi": false -} diff --git a/docs/package-lock.json b/docs/package-lock.json index 18e934852..912ad6e05 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -20,7 +20,11 @@ "@microsoft/applicationinsights-web-basic": "^2.5.11", "@octokit/core": "^3.2.5", "@react-three/drei": "^3.8.6", + "@typescript-eslint/eslint-plugin": "^4.15.2", + "@typescript-eslint/parser": "^4.15.2", "compare-versions": "^3.6.0", + "eslint": "^7.20.0", + "eslint-plugin-react": "^7.22.0", "gatsby": "^2.32.3", "gatsby-image": "^2.11.0", "gatsby-plugin-manifest": "^2.12.0", @@ -54,6 +58,7 @@ "material-ui-dropzone": "^3.5.0", "notistack": "^1.0.3", "octokit-plugin-create-pull-request": "^3.9.3", + "prettier": "2.2.1", "prism-react-renderer": "^1.2.0", "prop-types": "^15.7.2", "react": "^17.0.1", @@ -1189,6 +1194,63 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==" }, + "node_modules/@eslint/eslintrc": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.3.0.tgz", + "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" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dependencies": { + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "engines": { + "node": ">= 4" + } + }, "node_modules/@gatsby-contrib/gatsby-plugin-elasticlunr-search": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/@gatsby-contrib/gatsby-plugin-elasticlunr-search/-/gatsby-plugin-elasticlunr-search-2.4.2.tgz", @@ -2941,62 +3003,170 @@ "integrity": "sha512-S9q47ByT2pPvD65IvrWp7qppVMpk9WGMbVq9wbWZOHg6tnXSD4vyhao6nOSBwwfDdV2p3Kx9evA9vI+XWTfDvw==" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz", - "integrity": "sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ==", - "dependencies": { - "@typescript-eslint/experimental-utils": "2.34.0", - "functional-red-black-tree": "^1.0.1", - "regexpp": "^3.0.0", - "tsutils": "^3.17.1" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - } - }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz", - "integrity": "sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA==", - "dependencies": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/typescript-estree": "2.34.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.34.0.tgz", - "integrity": "sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA==", - "dependencies": { - "@types/eslint-visitor-keys": "^1.0.0", - "@typescript-eslint/experimental-utils": "2.34.0", - "@typescript-eslint/typescript-estree": "2.34.0", - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz", - "integrity": "sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg==", + "version": "4.15.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.15.2.tgz", + "integrity": "sha512-uiQQeu9tWl3f1+oK0yoAv9lt/KXO24iafxgQTkIYO/kitruILGx3uH+QtIAHqxFV+yIsdnJH+alel9KuE3J15Q==", "dependencies": { + "@typescript-eslint/experimental-utils": "4.15.2", + "@typescript-eslint/scope-manager": "4.15.2", "debug": "^4.1.1", - "eslint-visitor-keys": "^1.1.0", - "glob": "^7.1.6", - "is-glob": "^4.0.1", + "functional-red-black-tree": "^1.0.1", "lodash": "^4.17.15", + "regexpp": "^3.0.0", "semver": "^7.3.2", "tsutils": "^3.17.1" }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^4.0.0", + "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/experimental-utils": { + "version": "4.15.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.15.2.tgz", + "integrity": "sha512-Fxoshw8+R5X3/Vmqwsjc8nRO/7iTysRtDqx6rlfLZ7HbT8TZhPeQqbPjTyk2RheH3L8afumecTQnUc9EeXxohQ==", + "dependencies": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/scope-manager": "4.15.2", + "@typescript-eslint/types": "4.15.2", + "@typescript-eslint/typescript-estree": "4.15.2", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "4.15.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.15.2.tgz", + "integrity": "sha512-SHeF8xbsC6z2FKXsaTb1tBCf0QZsjJ94H6Bo51Y1aVEZ4XAefaw5ZAilMoDPlGghe+qtq7XdTiDlGfVTOmvA+Q==", + "dependencies": { + "@typescript-eslint/scope-manager": "4.15.2", + "@typescript-eslint/types": "4.15.2", + "@typescript-eslint/typescript-estree": "4.15.2", + "debug": "^4.1.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "4.15.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.15.2.tgz", + "integrity": "sha512-Zm0tf/MSKuX6aeJmuXexgdVyxT9/oJJhaCkijv0DvJVT3ui4zY6XYd6iwIo/8GEZGy43cd7w1rFMiCLHbRzAPQ==", + "dependencies": { + "@typescript-eslint/types": "4.15.2", + "@typescript-eslint/visitor-keys": "4.15.2" + }, "engines": { "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "4.15.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.15.2.tgz", + "integrity": "sha512-r7lW7HFkAarfUylJ2tKndyO9njwSyoy6cpfDKWPX6/ctZA+QyaYscAHXVAfJqtnY6aaTwDYrOhp+ginlbc7HfQ==", + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "4.15.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.15.2.tgz", + "integrity": "sha512-cGR8C2g5SPtHTQvAymEODeqx90pJHadWsgTtx6GbnTWKqsg7yp6Eaya9nFzUd4KrKhxdYTTFBiYeTPQaz/l8bw==", + "dependencies": { + "@typescript-eslint/types": "4.15.2", + "@typescript-eslint/visitor-keys": "4.15.2", + "debug": "^4.1.1", + "globby": "^11.0.1", + "is-glob": "^4.0.1", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/globby": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.2.tgz", + "integrity": "sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og==", + "dependencies": { + "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" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { @@ -3013,6 +3183,30 @@ "node": ">=10" } }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "4.15.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.15.2.tgz", + "integrity": "sha512-TME1VgSb7wTwgENN5KVj4Nqg25hP8DisXxNBojM4Nn31rYaNDIocNm5cmjOFfh42n7NVERxWrDFoETO/76ePyg==", + "dependencies": { + "@typescript-eslint/types": "4.15.2", + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "engines": { + "node": ">=10" + } + }, "node_modules/@webassemblyjs/ast": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", @@ -3211,7 +3405,10 @@ "node_modules/acorn-jsx": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==" + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } }, "node_modules/acorn-walk": { "version": "8.0.2", @@ -3861,11 +4058,11 @@ "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=" }, "node_modules/astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/async": { @@ -8289,6 +8486,25 @@ "node": ">=4.3.0 <5.0.0 || >=5.10" } }, + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/enquirer/node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "engines": { + "node": ">=6" + } + }, "node_modules/entities": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", @@ -8446,45 +8662,45 @@ } }, "node_modules/eslint": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", - "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.20.0.tgz", + "integrity": "sha512-qGi0CTcOGP2OtCQBgWZlQjcTuP0XkIpYFj25XtRTQSHC+umNnp7UMshr2G8SLsRFYDdAPFeHOsiteadmMH02Yw==", "dependencies": { - "@babel/code-frame": "^7.0.0", + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.3.0", "ajv": "^6.10.0", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", "debug": "^4.0.1", "doctrine": "^3.0.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^1.4.3", - "eslint-visitor-keys": "^1.1.0", - "espree": "^6.1.2", - "esquery": "^1.0.1", + "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.4.0", "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", + "file-entry-cache": "^6.0.0", "functional-red-black-tree": "^1.0.1", "glob-parent": "^5.0.0", "globals": "^12.1.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", - "inquirer": "^7.0.0", "is-glob": "^4.0.0", "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.14", + "levn": "^0.4.1", + "lodash": "^4.17.20", "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", "natural-compare": "^1.4.0", - "optionator": "^0.8.3", + "optionator": "^0.9.1", "progress": "^2.0.0", - "regexpp": "^2.0.1", - "semver": "^6.1.2", - "strip-ansi": "^5.2.0", - "strip-json-comments": "^3.0.1", - "table": "^5.2.3", + "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" }, @@ -8492,7 +8708,10 @@ "eslint": "bin/eslint.js" }, "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-config-react-app": { @@ -8806,6 +9025,9 @@ }, "engines": { "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" } }, "node_modules/eslint-visitor-keys": { @@ -8816,23 +9038,86 @@ "node": ">=4" } }, - "node_modules/eslint/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "engines": { - "node": ">=6" + "node_modules/eslint/node_modules/@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dependencies": { + "@babel/highlight": "^7.10.4" } }, - "node_modules/eslint/node_modules/eslint-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", - "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "node_modules/eslint/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { - "eslint-visitor-keys": "^1.1.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/eslint/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "engines": { + "node": ">=10" } }, "node_modules/eslint/node_modules/glob-parent": { @@ -8857,6 +9142,14 @@ "node": ">=8" } }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, "node_modules/eslint/node_modules/ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", @@ -8865,44 +9158,94 @@ "node": ">= 4" } }, - "node_modules/eslint/node_modules/regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "node_modules/eslint/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "engines": { - "node": ">=6.5.0" + "node": ">=8" } }, "node_modules/eslint/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "dependencies": { + "lru-cache": "^6.0.0" + }, "bin": { "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" } }, "node_modules/eslint/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dependencies": { - "ansi-regex": "^4.1.0" + "ansi-regex": "^5.0.0" }, "engines": { - "node": ">=6" + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, "node_modules/espree": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", - "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", "dependencies": { - "acorn": "^7.1.1", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.1.0" + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" }, "engines": { - "node": ">=6.0.0" + "node": "^10.12.0 || >=12.0.0" } }, "node_modules/esprima": { @@ -8918,9 +9261,9 @@ } }, "node_modules/esquery": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", - "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "dependencies": { "estraverse": "^5.1.0" }, @@ -9622,14 +9965,14 @@ } }, "node_modules/file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dependencies": { - "flat-cache": "^2.0.1" + "flat-cache": "^3.0.4" }, "engines": { - "node": ">=4" + "node": "^10.12.0 || >=12.0.0" } }, "node_modules/file-loader": { @@ -9806,33 +10149,21 @@ } }, "node_modules/flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dependencies": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" + "flatted": "^3.1.0", + "rimraf": "^3.0.2" }, "engines": { - "node": ">=4" - } - }, - "node_modules/flat-cache/node_modules/rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" + "node": "^10.12.0 || >=12.0.0" } }, "node_modules/flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", + "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==" }, "node_modules/fluids": { "version": "0.1.10", @@ -13051,6 +13382,122 @@ "node": ">= 10.0.0" } }, + "node_modules/gatsby/node_modules/@typescript-eslint/eslint-plugin": { + "version": "2.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz", + "integrity": "sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ==", + "dependencies": { + "@typescript-eslint/experimental-utils": "2.34.0", + "functional-red-black-tree": "^1.0.1", + "regexpp": "^3.0.0", + "tsutils": "^3.17.1" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^2.0.0", + "eslint": "^5.0.0 || ^6.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/gatsby/node_modules/@typescript-eslint/experimental-utils": { + "version": "2.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz", + "integrity": "sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA==", + "dependencies": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/typescript-estree": "2.34.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + } + }, + "node_modules/gatsby/node_modules/@typescript-eslint/parser": { + "version": "2.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.34.0.tgz", + "integrity": "sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA==", + "dependencies": { + "@types/eslint-visitor-keys": "^1.0.0", + "@typescript-eslint/experimental-utils": "2.34.0", + "@typescript-eslint/typescript-estree": "2.34.0", + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^5.0.0 || ^6.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/gatsby/node_modules/@typescript-eslint/typescript-estree": { + "version": "2.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz", + "integrity": "sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg==", + "dependencies": { + "debug": "^4.1.1", + "eslint-visitor-keys": "^1.1.0", + "glob": "^7.1.6", + "is-glob": "^4.0.1", + "lodash": "^4.17.15", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/gatsby/node_modules/@typescript-eslint/typescript-estree/node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, "node_modules/gatsby/node_modules/ansi-regex": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", @@ -13073,6 +13520,14 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/gatsby/node_modules/astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "engines": { + "node": ">=4" + } + }, "node_modules/gatsby/node_modules/babel-preset-gatsby": { "version": "0.12.1", "resolved": "https://registry.npmjs.org/babel-preset-gatsby/-/babel-preset-gatsby-0.12.1.tgz", @@ -13147,6 +13602,230 @@ "ms": "^2.1.1" } }, + "node_modules/gatsby/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "node_modules/gatsby/node_modules/eslint": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", + "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.10.0", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^1.4.3", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.1.2", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "inquirer": "^7.0.0", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.14", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.3", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "semver": "^6.1.2", + "strip-ansi": "^5.2.0", + "strip-json-comments": "^3.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/gatsby/node_modules/eslint/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/gatsby/node_modules/eslint/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/gatsby/node_modules/eslint/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/gatsby/node_modules/eslint/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/gatsby/node_modules/eslint/node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/gatsby/node_modules/eslint/node_modules/eslint-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", + "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/gatsby/node_modules/eslint/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/gatsby/node_modules/eslint/node_modules/regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "engines": { + "node": ">=6.5.0" + } + }, + "node_modules/gatsby/node_modules/eslint/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/gatsby/node_modules/eslint/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/gatsby/node_modules/espree": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", + "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", + "dependencies": { + "acorn": "^7.1.1", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/gatsby/node_modules/file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dependencies": { + "flat-cache": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/gatsby/node_modules/flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dependencies": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/gatsby/node_modules/flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==" + }, + "node_modules/gatsby/node_modules/glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/gatsby/node_modules/globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dependencies": { + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/gatsby/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -13155,6 +13834,61 @@ "node": ">=8" } }, + "node_modules/gatsby/node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/gatsby/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/gatsby/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/gatsby/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/gatsby/node_modules/rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, "node_modules/gatsby/node_modules/semver": { "version": "7.3.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", @@ -13169,6 +13903,43 @@ "node": ">=10" } }, + "node_modules/gatsby/node_modules/slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dependencies": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/gatsby/node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/gatsby/node_modules/slice-ansi/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/gatsby/node_modules/slice-ansi/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, "node_modules/gatsby/node_modules/source-map": { "version": "0.7.3", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", @@ -13177,6 +13948,19 @@ "node": ">= 8" } }, + "node_modules/gatsby/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/gatsby/node_modules/strip-ansi": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", @@ -13199,6 +13983,31 @@ "node": ">=8" } }, + "node_modules/gatsby/node_modules/table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dependencies": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/gatsby/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/gauge": { "version": "2.7.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", @@ -16427,12 +17236,12 @@ } }, "node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" }, "engines": { "node": ">= 0.8.0" @@ -18803,16 +19612,16 @@ } }, "node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" + "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" }, "engines": { "node": ">= 0.8.0" @@ -20465,9 +21274,9 @@ } }, "node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "engines": { "node": ">= 0.8.0" } @@ -22262,6 +23071,14 @@ "node": ">=0.10.0" } }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/require-like": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", @@ -23229,16 +24046,57 @@ } }, "node_modules/slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dependencies": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" }, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/slice-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" } }, "node_modules/slug": { @@ -24499,54 +25357,77 @@ } }, "node_modules/table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/table/-/table-6.0.7.tgz", + "integrity": "sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==", "dependencies": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" + "ajv": "^7.0.2", + "lodash": "^4.17.20", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0" }, "engines": { - "node": ">=6.0.0" + "node": ">=10.0.0" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.1.1.tgz", + "integrity": "sha512-ga/aqDYnUy/o7vbsRTFhhTsNeXiYb5JWDIcRIeZfwRNCefwjNTVYCGdGSUrEmiu3yDK3vFvNbgJxvrQW4JXrYQ==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, "node_modules/table/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/table/node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + "node_modules/table/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, "node_modules/table/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.1.tgz", + "integrity": "sha512-LL0OLyN6AnfV9xqGQpDBwedT2Rt63737LxvsRxbcwpa2aIeynBApG2Sm//F3TaLHIR1aJBN52DWklc06b94o5Q==", "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=6" + "node": ">=8" } }, "node_modules/table/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dependencies": { - "ansi-regex": "^4.1.0" + "ansi-regex": "^5.0.0" }, "engines": { - "node": ">=6" + "node": ">=8" } }, "node_modules/tapable": { @@ -25138,11 +26019,11 @@ "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" }, "node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dependencies": { - "prelude-ls": "~1.1.2" + "prelude-ls": "^1.2.1" }, "engines": { "node": ">= 0.8.0" @@ -28809,6 +29690,49 @@ } } }, + "@eslint/eslintrc": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.3.0.tgz", + "integrity": "sha512-1JTKgrOKAHVivSvOYw+sJOunkBjUOvjqWk1DPja7ZFhIS2mX/4EgTT8M7eTK9jrKhL/FvXXEbQwIs3pg1xp3dg==", + "requires": { + "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" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "requires": { + "type-fest": "^0.8.1" + } + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" + } + } + }, "@gatsby-contrib/gatsby-plugin-elasticlunr-search": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/@gatsby-contrib/gatsby-plugin-elasticlunr-search/-/gatsby-plugin-elasticlunr-search-2.4.2.tgz", @@ -30449,48 +31373,16 @@ "integrity": "sha512-S9q47ByT2pPvD65IvrWp7qppVMpk9WGMbVq9wbWZOHg6tnXSD4vyhao6nOSBwwfDdV2p3Kx9evA9vI+XWTfDvw==" }, "@typescript-eslint/eslint-plugin": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz", - "integrity": "sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ==", - "requires": { - "@typescript-eslint/experimental-utils": "2.34.0", - "functional-red-black-tree": "^1.0.1", - "regexpp": "^3.0.0", - "tsutils": "^3.17.1" - } - }, - "@typescript-eslint/experimental-utils": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz", - "integrity": "sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA==", - "requires": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/typescript-estree": "2.34.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" - } - }, - "@typescript-eslint/parser": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.34.0.tgz", - "integrity": "sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA==", - "requires": { - "@types/eslint-visitor-keys": "^1.0.0", - "@typescript-eslint/experimental-utils": "2.34.0", - "@typescript-eslint/typescript-estree": "2.34.0", - "eslint-visitor-keys": "^1.1.0" - } - }, - "@typescript-eslint/typescript-estree": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz", - "integrity": "sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg==", + "version": "4.15.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.15.2.tgz", + "integrity": "sha512-uiQQeu9tWl3f1+oK0yoAv9lt/KXO24iafxgQTkIYO/kitruILGx3uH+QtIAHqxFV+yIsdnJH+alel9KuE3J15Q==", "requires": { + "@typescript-eslint/experimental-utils": "4.15.2", + "@typescript-eslint/scope-manager": "4.15.2", "debug": "^4.1.1", - "eslint-visitor-keys": "^1.1.0", - "glob": "^7.1.6", - "is-glob": "^4.0.1", + "functional-red-black-tree": "^1.0.1", "lodash": "^4.17.15", + "regexpp": "^3.0.0", "semver": "^7.3.2", "tsutils": "^3.17.1" }, @@ -30505,6 +31397,97 @@ } } }, + "@typescript-eslint/experimental-utils": { + "version": "4.15.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.15.2.tgz", + "integrity": "sha512-Fxoshw8+R5X3/Vmqwsjc8nRO/7iTysRtDqx6rlfLZ7HbT8TZhPeQqbPjTyk2RheH3L8afumecTQnUc9EeXxohQ==", + "requires": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/scope-manager": "4.15.2", + "@typescript-eslint/types": "4.15.2", + "@typescript-eslint/typescript-estree": "4.15.2", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" + } + }, + "@typescript-eslint/parser": { + "version": "4.15.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.15.2.tgz", + "integrity": "sha512-SHeF8xbsC6z2FKXsaTb1tBCf0QZsjJ94H6Bo51Y1aVEZ4XAefaw5ZAilMoDPlGghe+qtq7XdTiDlGfVTOmvA+Q==", + "requires": { + "@typescript-eslint/scope-manager": "4.15.2", + "@typescript-eslint/types": "4.15.2", + "@typescript-eslint/typescript-estree": "4.15.2", + "debug": "^4.1.1" + } + }, + "@typescript-eslint/scope-manager": { + "version": "4.15.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.15.2.tgz", + "integrity": "sha512-Zm0tf/MSKuX6aeJmuXexgdVyxT9/oJJhaCkijv0DvJVT3ui4zY6XYd6iwIo/8GEZGy43cd7w1rFMiCLHbRzAPQ==", + "requires": { + "@typescript-eslint/types": "4.15.2", + "@typescript-eslint/visitor-keys": "4.15.2" + } + }, + "@typescript-eslint/types": { + "version": "4.15.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.15.2.tgz", + "integrity": "sha512-r7lW7HFkAarfUylJ2tKndyO9njwSyoy6cpfDKWPX6/ctZA+QyaYscAHXVAfJqtnY6aaTwDYrOhp+ginlbc7HfQ==" + }, + "@typescript-eslint/typescript-estree": { + "version": "4.15.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.15.2.tgz", + "integrity": "sha512-cGR8C2g5SPtHTQvAymEODeqx90pJHadWsgTtx6GbnTWKqsg7yp6Eaya9nFzUd4KrKhxdYTTFBiYeTPQaz/l8bw==", + "requires": { + "@typescript-eslint/types": "4.15.2", + "@typescript-eslint/visitor-keys": "4.15.2", + "debug": "^4.1.1", + "globby": "^11.0.1", + "is-glob": "^4.0.1", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + }, + "dependencies": { + "globby": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.2.tgz", + "integrity": "sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og==", + "requires": { + "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" + } + }, + "semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/visitor-keys": { + "version": "4.15.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.15.2.tgz", + "integrity": "sha512-TME1VgSb7wTwgENN5KVj4Nqg25hP8DisXxNBojM4Nn31rYaNDIocNm5cmjOFfh42n7NVERxWrDFoETO/76ePyg==", + "requires": { + "@typescript-eslint/types": "4.15.2", + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==" + } + } + }, "@webassemblyjs/ast": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", @@ -30694,7 +31677,8 @@ "acorn-jsx": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==" + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "requires": {} }, "acorn-walk": { "version": "8.0.2", @@ -31231,9 +32215,9 @@ "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=" }, "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" }, "async": { "version": "1.5.2", @@ -34967,6 +35951,21 @@ } } }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "requires": { + "ansi-colors": "^4.1.1" + }, + "dependencies": { + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" + } + } + }, "entities": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", @@ -35102,62 +36101,107 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "eslint": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", - "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.20.0.tgz", + "integrity": "sha512-qGi0CTcOGP2OtCQBgWZlQjcTuP0XkIpYFj25XtRTQSHC+umNnp7UMshr2G8SLsRFYDdAPFeHOsiteadmMH02Yw==", "requires": { - "@babel/code-frame": "^7.0.0", + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.3.0", "ajv": "^6.10.0", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", "debug": "^4.0.1", "doctrine": "^3.0.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^1.4.3", - "eslint-visitor-keys": "^1.1.0", - "espree": "^6.1.2", - "esquery": "^1.0.1", + "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.4.0", "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", + "file-entry-cache": "^6.0.0", "functional-red-black-tree": "^1.0.1", "glob-parent": "^5.0.0", "globals": "^12.1.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", - "inquirer": "^7.0.0", "is-glob": "^4.0.0", "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.14", + "levn": "^0.4.1", + "lodash": "^4.17.20", "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", "natural-compare": "^1.4.0", - "optionator": "^0.8.3", + "optionator": "^0.9.1", "progress": "^2.0.0", - "regexpp": "^2.0.1", - "semver": "^6.1.2", - "strip-ansi": "^5.2.0", - "strip-json-comments": "^3.0.1", - "table": "^5.2.3", + "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" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - }, - "eslint-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", - "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", "requires": { - "eslint-visitor-keys": "^1.1.0" + "@babel/highlight": "^7.10.4" } }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "eslint-visitor-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==" + }, "glob-parent": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", @@ -35174,27 +36218,64 @@ "type-fest": "^0.8.1" } }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, "ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" }, - "regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==" + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" }, "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" }, "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "requires": { - "ansi-regex": "^4.1.0" + "ansi-regex": "^5.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" } } } @@ -35476,13 +36557,13 @@ "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" }, "espree": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", - "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", "requires": { - "acorn": "^7.1.1", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.1.0" + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" } }, "esprima": { @@ -35491,9 +36572,9 @@ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, "esquery": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", - "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "requires": { "estraverse": "^5.1.0" }, @@ -36075,11 +37156,11 @@ } }, "file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "requires": { - "flat-cache": "^2.0.1" + "flat-cache": "^3.0.4" } }, "file-loader": { @@ -36225,29 +37306,18 @@ } }, "flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "requires": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" - }, - "dependencies": { - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "requires": { - "glob": "^7.1.3" - } - } + "flatted": "^3.1.0", + "rimraf": "^3.0.2" } }, "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", + "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==" }, "fluids": { "version": "0.1.10", @@ -36572,6 +37642,63 @@ "yaml-loader": "^0.6.0" }, "dependencies": { + "@typescript-eslint/eslint-plugin": { + "version": "2.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz", + "integrity": "sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ==", + "requires": { + "@typescript-eslint/experimental-utils": "2.34.0", + "functional-red-black-tree": "^1.0.1", + "regexpp": "^3.0.0", + "tsutils": "^3.17.1" + } + }, + "@typescript-eslint/experimental-utils": { + "version": "2.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz", + "integrity": "sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA==", + "requires": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/typescript-estree": "2.34.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" + } + }, + "@typescript-eslint/parser": { + "version": "2.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.34.0.tgz", + "integrity": "sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA==", + "requires": { + "@types/eslint-visitor-keys": "^1.0.0", + "@typescript-eslint/experimental-utils": "2.34.0", + "@typescript-eslint/typescript-estree": "2.34.0", + "eslint-visitor-keys": "^1.1.0" + } + }, + "@typescript-eslint/typescript-estree": { + "version": "2.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz", + "integrity": "sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg==", + "requires": { + "debug": "^4.1.1", + "eslint-visitor-keys": "^1.1.0", + "glob": "^7.1.6", + "is-glob": "^4.0.1", + "lodash": "^4.17.15", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + } + } + }, "ansi-regex": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", @@ -36585,6 +37712,11 @@ "color-convert": "^2.0.1" } }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==" + }, "babel-preset-gatsby": { "version": "0.12.1", "resolved": "https://registry.npmjs.org/babel-preset-gatsby/-/babel-preset-gatsby-0.12.1.tgz", @@ -36642,11 +37774,221 @@ "ms": "^2.1.1" } }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "eslint": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", + "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", + "requires": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.10.0", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^1.4.3", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.1.2", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "inquirer": "^7.0.0", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.14", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.3", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "semver": "^6.1.2", + "strip-ansi": "^5.2.0", + "strip-json-comments": "^3.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "eslint-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", + "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==" + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "espree": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", + "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", + "requires": { + "acorn": "^7.1.1", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.1.0" + } + }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "requires": { + "flat-cache": "^2.0.1" + } + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + } + }, + "flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==" + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "requires": { + "type-fest": "^0.8.1" + } + }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "requires": { + "glob": "^7.1.3" + } + }, "semver": { "version": "7.3.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", @@ -36655,11 +37997,54 @@ "lru-cache": "^6.0.0" } }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + } + } + }, "source-map": { "version": "0.7.3", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, "strip-ansi": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", @@ -36675,6 +38060,25 @@ "requires": { "has-flag": "^4.0.0" } + }, + "table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "requires": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + } + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "requires": { + "prelude-ls": "~1.1.2" + } } } }, @@ -41673,12 +43077,12 @@ } }, "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" } }, "lines-and-columns": { @@ -43674,16 +45078,16 @@ } }, "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" + "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" } }, "original": { @@ -45085,9 +46489,9 @@ } }, "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" }, "prepend-http": { "version": "2.0.0", @@ -46600,6 +48004,11 @@ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" + }, "require-like": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", @@ -47456,13 +48865,41 @@ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" }, "slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + } } }, "slug": { @@ -48564,42 +50001,58 @@ } }, "table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/table/-/table-6.0.7.tgz", + "integrity": "sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==", "requires": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" + "ajv": "^7.0.2", + "lodash": "^4.17.20", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + "ajv": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.1.1.tgz", + "integrity": "sha512-ga/aqDYnUy/o7vbsRTFhhTsNeXiYb5JWDIcRIeZfwRNCefwjNTVYCGdGSUrEmiu3yDK3vFvNbgJxvrQW4JXrYQ==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.1.tgz", + "integrity": "sha512-LL0OLyN6AnfV9xqGQpDBwedT2Rt63737LxvsRxbcwpa2aIeynBApG2Sm//F3TaLHIR1aJBN52DWklc06b94o5Q==", "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" } }, "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "requires": { - "ansi-regex": "^4.1.0" + "ansi-regex": "^5.0.0" } } } @@ -49082,11 +50535,11 @@ "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" }, "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "requires": { - "prelude-ls": "~1.1.2" + "prelude-ls": "^1.2.1" } }, "type-fest": { diff --git a/docs/package.json b/docs/package.json index e1be8736d..0113c6a8b 100644 --- a/docs/package.json +++ b/docs/package.json @@ -16,7 +16,11 @@ "@microsoft/applicationinsights-web-basic": "^2.5.11", "@octokit/core": "^3.2.5", "@react-three/drei": "^3.8.6", + "@typescript-eslint/eslint-plugin": "^4.15.2", + "@typescript-eslint/parser": "^4.15.2", "compare-versions": "^3.6.0", + "eslint": "^7.20.0", + "eslint-plugin-react": "^7.22.0", "gatsby": "^2.32.3", "gatsby-image": "^2.11.0", "gatsby-plugin-manifest": "^2.12.0", @@ -50,6 +54,7 @@ "material-ui-dropzone": "^3.5.0", "notistack": "^1.0.3", "octokit-plugin-create-pull-request": "^3.9.3", + "prettier": "2.2.1", "prism-react-renderer": "^1.2.0", "prop-types": "^15.7.2", "react": "^17.0.1", diff --git a/docs/src/components/AddServiceIconButton.tsx b/docs/src/components/AddServiceIconButton.tsx index c084fbe94..9bf436c95 100644 --- a/docs/src/components/AddServiceIconButton.tsx +++ b/docs/src/components/AddServiceIconButton.tsx @@ -1,6 +1,5 @@ import React, { useMemo } from 'react'; import { Menu, MenuItem, Typography } from '@material-ui/core'; -import { SRV_CTRL } from '../../../src/jdom/constants'; import { isInfrastructure, serviceSpecificationFromClassIdentifier, serviceSpecifications } from '../../../src/jdom/spec'; // tslint:disable-next-line: match-default-export-name no-submodule-imports import AddIcon from '@material-ui/icons/Add'; diff --git a/docs/src/components/ApiKeyAccordion.tsx b/docs/src/components/ApiKeyAccordion.tsx index 72e114d00..689e1c273 100644 --- a/docs/src/components/ApiKeyAccordion.tsx +++ b/docs/src/components/ApiKeyAccordion.tsx @@ -3,7 +3,7 @@ import useDbValue from "./useDbValue"; import useEffectAsync from "./useEffectAsync"; import Alert from "./ui/Alert" import { AccordionActions, AccordionSummary, AccordionDetails, Accordion, Typography, TextField, Box } from '@material-ui/core'; -import { Button, Link } from "gatsby-theme-material-ui"; +import { Button } from "gatsby-theme-material-ui"; // tslint:disable-next-line: match-default-export-name no-submodule-imports import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; // tslint:disable-next-line: match-default-export-name no-submodule-imports diff --git a/docs/src/components/AppContext.tsx b/docs/src/components/AppContext.tsx index 55b039aa5..d6d3db75f 100644 --- a/docs/src/components/AppContext.tsx +++ b/docs/src/components/AppContext.tsx @@ -23,6 +23,7 @@ export interface AppProps { setSearchQuery: (s: string) => void, toolsMenu: boolean, setToolsMenu: (visible: boolean) => void, + // eslint-disable-next-line @typescript-eslint/no-explicit-any setError: (error: any) => void, widgetMode: boolean, showDeviceHostsDialog: boolean, @@ -32,21 +33,22 @@ export interface AppProps { const AppContext = createContext({ drawerType: DrawerType.None, - setDrawerType: (type) => { }, + setDrawerType: () => { }, searchQuery: undefined, - setSearchQuery: (s) => { }, + setSearchQuery: () => { }, toolsMenu: false, - setToolsMenu: (v) => { }, - setError: (error: any) => { }, + setToolsMenu: () => { }, + setError: () => { }, widgetMode: false, showDeviceHostsDialog: false, toggleShowDeviceHostsDialog: () => { }, - showRenameDeviceDialog: (device) => { } + showRenameDeviceDialog: () => { } }); AppContext.displayName = "app"; export default AppContext; +// eslint-disable-next-line react/prop-types export const AppProvider = ({ children }) => { const { bus } = useContext(JacdacContext) const [type, setType] = useState(DrawerType.None) @@ -90,7 +92,7 @@ export const AppProvider = ({ children }) => { useEffect(() => bus.subscribe(CONNECTION_STATE, cs => { switch (cs) { case BusState.Connected: - if (!!bus.transport) + if (bus.transport) enqueueSnackbar("connected...", { variant: "info" }) diff --git a/docs/src/components/AppDrawer.tsx b/docs/src/components/AppDrawer.tsx index 89ce9c7e3..f4e53c3bd 100644 --- a/docs/src/components/AppDrawer.tsx +++ b/docs/src/components/AppDrawer.tsx @@ -15,7 +15,6 @@ import PacketRecorder from "./PacketRecorder"; import DrawerSearchInput from "./DrawerSearchInput"; import DrawerSearchResults from "./DrawerSearchResults"; import DrawerToolsButtonGroup from "./DrawerToolsButtonGroup"; -import PacketStats from "./PacketStats"; const useStyles = makeStyles((theme) => createStyles({ drawer: { diff --git a/docs/src/components/CmdButton.tsx b/docs/src/components/CmdButton.tsx index a533ef6c7..32564b423 100644 --- a/docs/src/components/CmdButton.tsx +++ b/docs/src/components/CmdButton.tsx @@ -87,9 +87,8 @@ export default function CmdButton(props: { } } finally { - if (!mounted()) - return; - setWorking(false) + if (mounted()) + setWorking(false) } } diff --git a/docs/src/components/DbContext.tsx b/docs/src/components/DbContext.tsx index 56cebab61..929e87fa1 100644 --- a/docs/src/components/DbContext.tsx +++ b/docs/src/components/DbContext.tsx @@ -139,8 +139,8 @@ export class Db extends JDEventSource { try { const transaction = this.db.transaction([table], "readwrite"); const blobs = transaction.objectStore(table) - const request = data !== undefined ? blobs.put(data, id) : blobs.delete(id);; - request.onsuccess = (event) => { + const request = data !== undefined ? blobs.put(data, id) : blobs.delete(id); + request.onsuccess = () => { this.emit(CHANGE) resolve() } @@ -191,6 +191,7 @@ DbContext.displayName = "db"; export default DbContext; +// eslint-disable-next-line react/prop-types export const DbProvider = ({ children }) => { const [db, setDb] = useState(undefined) const [error, setError] = useState(undefined) diff --git a/docs/src/components/DeviceCard.tsx b/docs/src/components/DeviceCard.tsx index 174a0db3d..70e3df374 100644 --- a/docs/src/components/DeviceCard.tsx +++ b/docs/src/components/DeviceCard.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState, Fragment } from 'react'; +import React from 'react'; // tslint:disable-next-line: no-submodule-imports import { makeStyles } from '@material-ui/core/styles'; // tslint:disable-next-line: no-submodule-imports @@ -11,12 +11,12 @@ import ServiceButton from './ServiceButton'; import useChange from '../jacdac/useChange'; import { navigate } from "gatsby"; import { JDService } from '../../../src/jdom/service'; -import { CardActions, createStyles, Theme } from '@material-ui/core'; +import { CardActions, createStyles } from '@material-ui/core'; import DeviceCardHeader from './DeviceCardHeader'; import { useRegisterStringValue } from '../jacdac/useRegisterValue'; import { DeviceLostAlert } from './alert/DeviceLostAlert'; -const useStyles = makeStyles((theme: Theme) => createStyles({ +const useStyles = makeStyles(() => createStyles({ root: { }, bullet: { diff --git a/docs/src/components/DeviceName.tsx b/docs/src/components/DeviceName.tsx index c6d73be2f..73181ced6 100644 --- a/docs/src/components/DeviceName.tsx +++ b/docs/src/components/DeviceName.tsx @@ -1,4 +1,4 @@ -import { Typography, useTheme } from "@material-ui/core"; +import { Typography } from "@material-ui/core"; import React from "react" import { JDDevice } from "../../../src/jdom/device"; import useDeviceName from "./useDeviceName"; diff --git a/docs/src/components/DeviceSpecificationSource.tsx b/docs/src/components/DeviceSpecificationSource.tsx index 3c4ef9233..0ca3458b1 100644 --- a/docs/src/components/DeviceSpecificationSource.tsx +++ b/docs/src/components/DeviceSpecificationSource.tsx @@ -1,4 +1,4 @@ -import React, { useMemo, useState } from 'react'; +import React, { useState } from 'react'; // tslint:disable-next-line: no-submodule-imports import Tabs from '@material-ui/core/Tabs'; // tslint:disable-next-line: no-submodule-imports @@ -34,7 +34,7 @@ export default function DeviceSpecificationSource(props: { const [tab, setTab] = useState(0); const spec = deviceSpecification - const handleTabChange = (event: React.ChangeEvent<{}>, newValue: number) => { + const handleTabChange = (event: React.ChangeEvent, newValue: number) => { setTab(newValue); }; diff --git a/docs/src/components/DrawerSearchResults.tsx b/docs/src/components/DrawerSearchResults.tsx index 1ec63e71d..3b67c2f80 100644 --- a/docs/src/components/DrawerSearchResults.tsx +++ b/docs/src/components/DrawerSearchResults.tsx @@ -1,13 +1,5 @@ import { Link } from "gatsby-theme-material-ui"; import React from "react"; -// tslint:disable-next-line: no-submodule-imports -import TreeView from '@material-ui/lab/TreeView'; -// tslint:disable-next-line: no-submodule-imports match-default-export-name -import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; -// tslint:disable-next-line: no-submodule-imports match-default-export-name -import ChevronRightIcon from '@material-ui/icons/ChevronRight'; -// tslint:disable-next-line: no-submodule-imports -import TreeItem from '@material-ui/lab/TreeItem'; import Alert from "./ui/Alert" import { useDrawerSearchResults } from "./useDrawerSearchResults"; diff --git a/docs/src/components/DrawerToolsButtonGroup.tsx b/docs/src/components/DrawerToolsButtonGroup.tsx index da8a88dff..e267f7696 100644 --- a/docs/src/components/DrawerToolsButtonGroup.tsx +++ b/docs/src/components/DrawerToolsButtonGroup.tsx @@ -1,5 +1,4 @@ -import { Badge } from "@material-ui/core"; -import React, { useContext, useEffect, useState } from "react"; +import React, { useContext } from "react"; import AppContext, { DrawerType } from "./AppContext"; // tslint:disable-next-line: no-submodule-imports match-default-export-name import HistoryIcon from '@material-ui/icons/History'; @@ -9,12 +8,9 @@ import MenuIcon from '@material-ui/icons/Menu'; import AccountTreeIcon from '@material-ui/icons/AccountTree'; import IconButtonWithTooltip from "./ui/IconButtonWithTooltip"; import ConnectButton from "../jacdac/ConnectButton"; -import JacdacContext, { JacdacContextProps } from "../jacdac/Context"; -import { DEVICE_CHANGE } from "../../../src/jdom/constants"; import WebUSBSupported from "./WebUSBSupported"; export default function DrawerToolsButtonGroup(props: { className?: string, showToc?: boolean, showCurrent?: boolean, showConnect?: boolean }) { - const { bus } = useContext(JacdacContext) const { className, showToc, showCurrent, showConnect } = props; const { drawerType, setDrawerType } = useContext(AppContext) diff --git a/docs/src/components/EventInput.tsx b/docs/src/components/EventInput.tsx index cbe0cfc4b..3c7058ec0 100644 --- a/docs/src/components/EventInput.tsx +++ b/docs/src/components/EventInput.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState } from "react"; +import React from "react"; import { JDEvent } from "../../../src/jdom/event"; import { Typography, Badge } from "@material-ui/core"; import KindIcon from "./KindIcon"; diff --git a/docs/src/components/FieldDataSet.ts b/docs/src/components/FieldDataSet.ts index 2bc211609..9f9a9fbf8 100644 --- a/docs/src/components/FieldDataSet.ts +++ b/docs/src/components/FieldDataSet.ts @@ -134,10 +134,10 @@ export default class FieldDataSet extends JDEventSource { this.emit(CHANGE); } - toCSV(sep: string = ",", options?: { units?: boolean }) { + toCSV(sep = ",", options?: { units?: boolean }) { const allheaders = ["time", ...this.headers].join(sep) const start = this.startTimestamp - let csv: string[] = [allheaders] + const csv: string[] = [allheaders] if (options?.units) csv.push(["ms", ...this.units].join(sep)) this.rows.forEach(row => csv.push( diff --git a/docs/src/components/FlashButton.tsx b/docs/src/components/FlashButton.tsx index 04776d435..1a457071d 100644 --- a/docs/src/components/FlashButton.tsx +++ b/docs/src/components/FlashButton.tsx @@ -7,7 +7,6 @@ import { DEVICE_CHANGE, DEVICE_FIRMWARE_INFO, FIRMWARE_BLOBS_CHANGE } from "../. import useEventRaised from "../jacdac/useEventRaised"; import { computeUpdates } from "../../../src/jdom/flashing"; import IconButtonWithTooltip from "./ui/IconButtonWithTooltip"; -import useDevices from "./hooks/useDevices"; export default function FlashButton(props: { className?: string }) { const { bus } = useContext(JacdacContext) diff --git a/docs/src/components/GithubPullRequestButton.tsx b/docs/src/components/GithubPullRequestButton.tsx index 2643c374c..1d2e4080c 100644 --- a/docs/src/components/GithubPullRequestButton.tsx +++ b/docs/src/components/GithubPullRequestButton.tsx @@ -7,7 +7,6 @@ import AppContext from "./AppContext"; import { GITHUB_API_KEY } from "./github"; import useDbValue from "./useDbValue"; import { useSnackbar } from "notistack"; -import Alert from "./ui/Alert"; import GitHubIcon from '@material-ui/icons/GitHub'; import ApiKeyAccordion from "./ApiKeyAccordion"; @@ -21,7 +20,7 @@ export default function GithubPullRequestButton(props: { }) { const { commit, files, label, title, body, head } = props; const { value: token } = useDbValue(GITHUB_API_KEY, "") - const [response, setResponse] = useState(undefined); + const [, setResponse] = useState(undefined); const [busy, setBusy] = useState(false) const { setError: setAppError } = useContext(AppContext) const { enqueueSnackbar } = useSnackbar(); diff --git a/docs/src/components/GithubRepositoryCardHeader.tsx b/docs/src/components/GithubRepositoryCardHeader.tsx index 0c55dcff0..7ac342d95 100644 --- a/docs/src/components/GithubRepositoryCardHeader.tsx +++ b/docs/src/components/GithubRepositoryCardHeader.tsx @@ -1,6 +1,6 @@ import React, { } from 'react'; // tslint:disable-next-line: no-submodule-imports -import { Box, Card, CardActions, CardContent, CardHeader, CircularProgress, Typography } from '@material-ui/core'; +import { Box, CardHeader, Typography } from '@material-ui/core'; import { useLatestRelease, useRepository } from './github'; import GitHubIcon from '@material-ui/icons/GitHub'; import { Link } from 'gatsby-theme-material-ui'; @@ -12,7 +12,7 @@ export default function GithubRepositoryCardHeader(props: { }) { const { slug, showRelease } = props; const { response: repo, loading: repoLoading } = useRepository(slug); - const { response: release, loading: releaseLoading } = useLatestRelease(showRelease && slug); + const { response: release } = useLatestRelease(showRelease && slug); const iframe = inIFrame(); const target = iframe ? "_blank" : "" diff --git a/docs/src/components/JDomTreeView.tsx b/docs/src/components/JDomTreeView.tsx index 3d615ca24..211577947 100644 --- a/docs/src/components/JDomTreeView.tsx +++ b/docs/src/components/JDomTreeView.tsx @@ -84,7 +84,7 @@ function DeviceTreeItem(props: { device: JDDevice } & StyledTreeViewItemProps & } function ServiceTreeItem(props: { service: JDService } & StyledTreeViewItemProps & JDomTreeViewProps) { - const { service, checked, setChecked, checkboxes, dashboard, registerFilter, eventFilter, ...other } = props; + const { service, checked, setChecked, checkboxes, registerFilter, eventFilter, ...other } = props; const specification = service.specification; const showSpecificationAction = false; const id = service.id @@ -226,12 +226,12 @@ export default function JDomTreeView(props: JDomTreeViewProps) { const { bus } = useContext(JacdacContext) const devices = useChange(bus, () => bus.devices().filter(dev => !deviceFilter || deviceFilter(dev))) - const handleToggle = (event: React.ChangeEvent<{}>, nodeIds: string[]) => { + const handleToggle = (event: React.ChangeEvent, nodeIds: string[]) => { setExpanded(nodeIds); if (onToggle) onToggle(nodeIds) }; - const handleSelect = (event: React.ChangeEvent<{}>, nodeIds: string[]) => { + const handleSelect = (event: React.ChangeEvent, nodeIds: string[]) => { setSelected(nodeIds); if (onSelect) onSelect(nodeIds) }; diff --git a/docs/src/components/PacketsContext.tsx b/docs/src/components/PacketsContext.tsx index 3992be817..fb24f1c36 100644 --- a/docs/src/components/PacketsContext.tsx +++ b/docs/src/components/PacketsContext.tsx @@ -47,16 +47,17 @@ const PacketsContext = createContext({ tracing: false, toggleTracing: () => { }, paused: false, - setPaused: (p) => { }, + setPaused: () => { }, progress: undefined, timeRange: undefined, toggleTimeRange: () => { }, - setTimeRange: (range) => { } + setTimeRange: () => { } }); PacketsContext.displayName = "packets"; export default PacketsContext; +// eslint-disable-next-line react/prop-types export const PacketsProvider = ({ children }) => { const { bus, disconnectAsync } = useContext(JacdacContext) const { value: filter, setValue: _setFilter } = useDbValue("packetfilter", "repeated-announce:false") diff --git a/docs/src/components/Page.tsx b/docs/src/components/Page.tsx index 0ed6205e6..ed9c0d247 100644 --- a/docs/src/components/Page.tsx +++ b/docs/src/components/Page.tsx @@ -1,5 +1,6 @@ import React, { Fragment } from "react"; +// eslint-disable-next-line react/prop-types const Page = ({ props, children }) => { return {children} } diff --git a/docs/src/components/ServiceManagerContext.tsx b/docs/src/components/ServiceManagerContext.tsx index be4869c1a..2181f0706 100644 --- a/docs/src/components/ServiceManagerContext.tsx +++ b/docs/src/components/ServiceManagerContext.tsx @@ -1,4 +1,4 @@ -import React, { createContext, useContext, useEffect, useMemo, useRef } from "react"; +import React, { createContext, useContext, useEffect, useRef } from "react"; import { JSONTryParse, SMap } from "../../../src/jdom/utils"; import { BrowserFileStorage, HostedFileStorage, IFileStorage } from '../../../src/embed/filestorage' import { IThemeMessage } from "../../../src/embed/protocol"; @@ -64,11 +64,15 @@ const ServiceManagerContext = createContext({ }); ServiceManagerContext.displayName = "Services"; +export default ServiceManagerContext; + +// eslint-disable-next-line react/prop-types export const ServiceManagerProvider = ({ children }) => { const { toggleDarkMode } = useContext(DarkModeContext) const { bus } = useContext(JacdacContext) - const props = useRef(createProps()) + const propsRef = useRef(createProps()) + // eslint-disable-next-line @typescript-eslint/no-explicit-any const handleMessage = (ev: MessageEvent) => { const msg = ev.data; if (msg?.source !== 'jacdac') @@ -91,14 +95,14 @@ export const ServiceManagerProvider = ({ children }) => { return () => { }; }, []) - return + return {children} function createProps(): ServiceManagerContextProps { const isHosted = inIFrame(); let fileStorage: IFileStorage = new BrowserFileStorage() - let deviceNames = new LocalStorageDeviceNameSettings( + const deviceNames = new LocalStorageDeviceNameSettings( bus, new LocalStorageSettings("jacdac_device_names") ); @@ -120,5 +124,3 @@ export const ServiceManagerProvider = ({ children }) => { } } } - -export default ServiceManagerContext; \ No newline at end of file diff --git a/docs/src/components/ServiceRegisters.tsx b/docs/src/components/ServiceRegisters.tsx index 1043e1843..d3ccf7b79 100644 --- a/docs/src/components/ServiceRegisters.tsx +++ b/docs/src/components/ServiceRegisters.tsx @@ -15,7 +15,7 @@ export default function ServiceRegisters(props: { hideMissingValues?: boolean, showTrends?: boolean }) { - const { service, registerIdentifiers, filter, showRegisterName, hideMissingValues, showTrends, expanded } = props; + const { service, registerIdentifiers, filter, showRegisterName, hideMissingValues, showTrends } = props; const specification = useChange(service, spec => spec.specification); const registers = useMemo(() => { const packets = specification?.packets; diff --git a/docs/src/components/ServiceSpecificationSource.tsx b/docs/src/components/ServiceSpecificationSource.tsx index cb8570e36..0c161c928 100644 --- a/docs/src/components/ServiceSpecificationSource.tsx +++ b/docs/src/components/ServiceSpecificationSource.tsx @@ -1,8 +1,5 @@ import React, { useState } from 'react'; -// tslint:disable-next-line: no-submodule-imports -import Tabs from '@material-ui/core/Tabs'; -// tslint:disable-next-line: no-submodule-imports -import Tab from '@material-ui/core/Tab'; +import { Tabs, Tab } from '@material-ui/core'; import { serviceSpecificationFromClassIdentifier } from '../../../src/jdom/spec'; import { Paper, createStyles, makeStyles, Theme } from '@material-ui/core'; import TabPanel, { a11yProps } from './ui/TabPanel'; @@ -38,7 +35,7 @@ export default function ServiceSpecificationSource(props: { const convs = converters(); const showDTDL = spec?.camelName !== "system" - const handleTabChange = (event: React.ChangeEvent<{}>, newValue: number) => { + const handleTabChange = (event: React.ChangeEvent, newValue: number) => { setTab(newValue); }; @@ -61,7 +58,7 @@ export default function ServiceSpecificationSource(props: { {showSpecification && } - {["sts", "ts", "c", "json"].map((lang, i) => + {["sts", "ts", "c", "json"].map((lang) => convs[lang](spec)} mode={lang} /> )} diff --git a/docs/src/components/ServiceTest.tsx b/docs/src/components/ServiceTest.tsx index 5a31bde35..d40879f80 100644 --- a/docs/src/components/ServiceTest.tsx +++ b/docs/src/components/ServiceTest.tsx @@ -4,7 +4,7 @@ import { Link } from 'gatsby-theme-material-ui'; import useGridBreakpoints from './useGridBreakpoints'; import JacdacContext, { JacdacContextProps } from "../jacdac/Context"; import useChange from '../jacdac/useChange'; -import { Grid, Card, CardHeader, CardActions, Button, createStyles, makeStyles, Paper, Step, StepContent, StepLabel, Stepper, Theme, Typography } from '@material-ui/core'; +import { Grid, Card, CardActions, Button, createStyles, makeStyles, Paper, Step, StepContent, StepLabel, Stepper, Theme, Typography } from '@material-ui/core'; // tslint:disable-next-line: no-submodule-imports import Alert from "./ui/Alert"; import DeviceCardHeader from "./DeviceCardHeader" @@ -101,8 +101,8 @@ export default function ServiceTest(props: { serviceSpec: jdspec.ServiceSpec }) Select a service to test {!!services.length && - {services.map(service => - + {services.map(service => + diff --git a/docs/src/components/Toc.tsx b/docs/src/components/Toc.tsx index 45c35487e..094237532 100644 --- a/docs/src/components/Toc.tsx +++ b/docs/src/components/Toc.tsx @@ -1,5 +1,5 @@ import React, { useContext, useMemo } from "react" -import { makeStyles, createStyles, Theme, List, ListItem, Typography, useTheme, Box, useMediaQuery } from '@material-ui/core'; +import { makeStyles, createStyles, Theme, List, ListItem, Typography, useTheme, Box } from '@material-ui/core'; import { Link } from 'gatsby-theme-material-ui'; // tslint:disable-next-line: no-submodule-imports import ListItemText from '@material-ui/core/ListItemText'; @@ -71,7 +71,6 @@ export default function Toc(props: { pagePath: string }) { const { setDrawerType } = useContext(AppContext) const theme = useTheme(); const classes = useStyles(); - const mobile = useMediaQuery(theme.breakpoints.down("lg")); const data = useStaticQuery(graphql` query { site { @@ -127,7 +126,7 @@ export default function Toc(props: { pagePath: string }) { const tree = useMemo(() => { // convert pages into tree - let toc: TocNode[] = [{ + const toc: TocNode[] = [{ name: "Home", path: "/", order: 0 @@ -189,7 +188,7 @@ export default function Toc(props: { pagePath: string }) { return tree; }, []); - const TocListItem = (props: { entry: TocNode, level: number }) => { + function TocListItem(props: { entry: TocNode, level: number }) { const { entry, level } = props; const { path, children, name } = entry; const selected = pagePath === path; @@ -211,6 +210,6 @@ export default function Toc(props: { pagePath: string }) { } return - {tree.map(entry => )} + {tree.map((entry, i) => )} } diff --git a/docs/src/components/Trend.tsx b/docs/src/components/Trend.tsx index 8cf840fab..6833f8c24 100644 --- a/docs/src/components/Trend.tsx +++ b/docs/src/components/Trend.tsx @@ -43,7 +43,7 @@ function UnitTrendChart(props: { const mint = Math.min.apply(null, times); let minv = unit == "/" ? 0 : Math.min.apply(null, indexes.map(i => dataSet.mins[i])); let maxv = unit == "/" ? 1 : Math.max.apply(null, indexes.map(i => dataSet.maxs[i])); - let opposite = unit != "/" && Math.sign(minv) != Math.sign(maxv) + const opposite = unit != "/" && Math.sign(minv) != Math.sign(maxv) if (isNaN(minv) && isNaN(maxv)) { minv = 0 maxv = 1 diff --git a/docs/src/components/WebDiagnostics.tsx b/docs/src/components/WebDiagnostics.tsx index 9703a2a31..e963169b7 100644 --- a/docs/src/components/WebDiagnostics.tsx +++ b/docs/src/components/WebDiagnostics.tsx @@ -126,7 +126,7 @@ export default function WebDiagnostics() { setV(v + 1); } - const handleChange = (panel: string) => (event: React.ChangeEvent<{}>, isExpanded: boolean) => { + const handleChange = (panel: string) => (event: React.ChangeEvent, isExpanded: boolean) => { setExpanded(isExpanded ? panel : false); }; diff --git a/docs/src/components/alert/ConnectAlert.tsx b/docs/src/components/alert/ConnectAlert.tsx index 737fdea4c..283e70a82 100644 --- a/docs/src/components/alert/ConnectAlert.tsx +++ b/docs/src/components/alert/ConnectAlert.tsx @@ -30,8 +30,8 @@ function NoSsrConnectAlert(props: { serviceClass?: number }) { connectionState === BusState.Disconnected) return - {!spec && Don't forget to connect!} - {spec && Don't forget to connect some {spec.name} devices!} + {!spec && Did you connect your device?} + {spec && Did you connect a {spec.name} device?} diff --git a/docs/src/components/dashboard/DashboardServiceWidget.tsx b/docs/src/components/dashboard/DashboardServiceWidget.tsx index a64453dfc..a08d9b0aa 100644 --- a/docs/src/components/dashboard/DashboardServiceWidget.tsx +++ b/docs/src/components/dashboard/DashboardServiceWidget.tsx @@ -105,18 +105,18 @@ const serviceViews: { }, [SRV_CHARACTER_SCREEN]: { component: DashboardCharacterScreen, - weight: (srv) => 3 + weight: () => 3 }, [SRV_RAIN_GAUGE]: { component: DashboardRainGauge, }, [SRV_LED_MATRIX]: { component: DashboardLEDMatrix, - weight: (srv) => 3 + weight: () => 3 }, [SRV_ARCADE_GAMEPAD]: { component: DashboardArcadeGamepad, - weight: (srv) => 3 + weight: () => 3 }, [SRV_WIND_DIRECTION]: { component: DashboardWindDirection, @@ -160,7 +160,7 @@ const serviceViews: { }, [SRV_SOUND_PLAYER]: { component: DashboardSoundPlayer, - weight: (srv) => 2 + weight: ( ) => 2 }, [SRV_ANALOG_BUTTON]: { component: DashboardAnalogButton, @@ -272,7 +272,7 @@ export default function DashboardServiceWidget(props: React.Attributes & Dashboa const color = host ? "secondary" : "primary"; // no special support if (!component) - return createElement(DefaultWidget, props);; + return createElement(DefaultWidget, props); return }> diff --git a/docs/src/components/dialogs/StartSimulatorDialog.tsx b/docs/src/components/dialogs/StartSimulatorDialog.tsx index 77ab66fdb..51276a4f0 100644 --- a/docs/src/components/dialogs/StartSimulatorDialog.tsx +++ b/docs/src/components/dialogs/StartSimulatorDialog.tsx @@ -4,9 +4,7 @@ import React, { useContext, useMemo, useState } from "react"; import { useId } from "react-use-id-hook"; import hosts, { addHost } from "../../../../src/hosts/hosts"; import { VIRTUAL_DEVICE_NODE_NAME } from "../../../../src/jdom/constants"; -import JDDeviceHost from "../../../../src/jdom/devicehost"; import Flags from "../../../../src/jdom/flags"; -import ServiceHost from "../../../../src/jdom/servicehost"; import { delay } from "../../../../src/jdom/utils"; import JacdacContext, { JacdacContextProps } from "../../jacdac/Context"; import KindIcon from "../KindIcon"; @@ -18,7 +16,6 @@ export default function StartSimulatorDialog(props: { open: boolean, onClose: () const deviceHostDialogId = useId(); const deviceHostLabelId = useId(); - const { } = props; const [selected, setSelected] = useState("button"); const { enqueueSnackbar } = useSnackbar(); const hostDefinitions = useMemo(() => hosts(), []); diff --git a/docs/src/components/fields/MemberInput.tsx b/docs/src/components/fields/MemberInput.tsx index feffcb341..485fd9723 100644 --- a/docs/src/components/fields/MemberInput.tsx +++ b/docs/src/components/fields/MemberInput.tsx @@ -11,13 +11,14 @@ import GaugeWidget from "../widgets/GaugeWidget"; import useWidgetSize from "../widgets/useWidgetSize"; import ValueWithUnitWidget from "../widgets/ValueWithUnitWidget"; import useUnitIcon from "../hooks/useUnitIcon"; +import { PackedSimpleValue } from "../../../../src/jdom/pack"; export default function MemberInput(props: { specification: jdspec.PacketMember, serviceSpecification: jdspec.ServiceSpec, serviceMemberSpecification: jdspec.PacketInfo, - value: any, - setValue?: (v: any) => void, + value: PackedSimpleValue, + setValue?: (v: PackedSimpleValue) => void, showDataType?: boolean, color?: "primary" | "secondary", variant?: RegisterInputVariant, @@ -46,7 +47,7 @@ export default function MemberInput(props: { const minValue = pick(min, typicalMin, absoluteMin, /^u/.test(type) ? 0 : undefined) const maxValue = pick(max, typicalMax, absoluteMax) - const errorValue = !!error ? ("±" + roundWithPrecision(error, 1 - Math.floor(Math.log10(error))).toLocaleString()) : undefined; + const errorValue = error ? ("±" + roundWithPrecision(error, 1 - Math.floor(Math.log10(error))).toLocaleString()) : undefined; const unit = prettyUnit(specification.unit); const helperText = errorText || [prettyMemberUnit(specification, showDataType), errorValue] @@ -72,8 +73,9 @@ export default function MemberInput(props: { setValue(r.value) setErrorText(r.error) } + // eslint-disable-next-line @typescript-eslint/no-explicit-any const handleEnumChange = (event: React.ChangeEvent<{ value: any }>) => { - const v = enumInfo.isFlags ? flagsToValue(event.target.value) : event.target.value + const v = enumInfo.isFlags ? flagsToValue(event.target.value as number[]) : event.target.value as number setValue(v) } const handleSliderChange = (event: unknown, newValue: number | number[]) => { @@ -127,7 +129,7 @@ export default function MemberInput(props: { aria-label={label} disabled={disabled} multiple={enumInfo.isFlags} - value={enumInfo.isFlags ? valueToFlags(enumInfo, value) : value} + value={enumInfo.isFlags ? valueToFlags(enumInfo, value as number) : value} onChange={handleEnumChange}> {Object.keys(enumInfo.members).map(n => {n})} @@ -141,7 +143,7 @@ export default function MemberInput(props: { return return diff --git a/docs/src/components/firmware/useFirmwareBlobs.ts b/docs/src/components/firmware/useFirmwareBlobs.ts index 2a6d578d3..ef7917f6e 100644 --- a/docs/src/components/firmware/useFirmwareBlobs.ts +++ b/docs/src/components/firmware/useFirmwareBlobs.ts @@ -53,7 +53,7 @@ export default function useFirmwareBlobs() { console.log(`firmwares: change`) const names = await fw?.list() console.log(`import stored uf2`, names) - let uf2s: FirmwareBlob[] = []; + const uf2s: FirmwareBlob[] = []; if (names?.length) { for (const name of names) { const blob = await fw.get(name) diff --git a/docs/src/components/firmware/useFirmwareRepos.ts b/docs/src/components/firmware/useFirmwareRepos.ts index da184362c..78724ccb4 100644 --- a/docs/src/components/firmware/useFirmwareRepos.ts +++ b/docs/src/components/firmware/useFirmwareRepos.ts @@ -3,10 +3,9 @@ import { deviceSpecificationFromFirmwareIdentifier, deviceSpecifications } from import JacdacContext, { JacdacContextProps } from "../../jacdac/Context"; import useEffectAsync from "../useEffectAsync"; import { unique } from "../../../../src/jdom/utils"; -import { BootloaderCmd, CMD_ADVERTISEMENT_DATA, ControlReg, DEVICE_CHANGE, SRV_BOOTLOADER, SRV_CTRL } from "../../../../src/jdom/constants"; +import { BootloaderCmd, ControlReg, DEVICE_CHANGE, SRV_BOOTLOADER } from "../../../../src/jdom/constants"; import useEventRaised from "../../jacdac/useEventRaised"; import Packet from "../../../../src/jdom/packet"; -import { jdunpack } from "../../../../src/jdom/pack"; export default function useFirmwareRepos(showAllRepos?: boolean) { const { bus } = useContext(JacdacContext) @@ -24,7 +23,7 @@ export default function useFirmwareRepos(showAllRepos?: boolean) { if (showAllRepos) repos = deviceSpecifications().map(spec => spec.repo); else { - let firmwares: number[] = []; + const firmwares: number[] = []; // ask firmware registers for (const register of registers) { await register.refresh(true) diff --git a/docs/src/components/github.ts b/docs/src/components/github.ts index a82e840ec..80076684f 100644 --- a/docs/src/components/github.ts +++ b/docs/src/components/github.ts @@ -1,37 +1,37 @@ -import useFetch from "./useFetch"; +import useFetch from "./useFetch" const ROOT = "https://api.github.com/" export const GITHUB_API_KEY = "githubtoken" export interface GithubRelease { - url: string, - html_url: string, - tag_name: string, - name: string, - body: string, + url: string + html_url: string + tag_name: string + name: string + body: string assets: { - url: string, - browser_download_url: string, + url: string + browser_download_url: string name: string }[] } export interface GithubUser { - login: string; - avatar_url: string; - html_url: string; + login: string + avatar_url: string + html_url: string } export interface GithubRepository { - name: string; - full_name: string; - private: boolean; - owner: GithubUser; - description: string; - fork: boolean; - homepage: string; - default_branch: string; - organization: GithubUser; - html_url: string; + name: string + full_name: string + private: boolean + owner: GithubUser + description: string + fork: boolean + homepage: string + default_branch: string + organization: GithubUser + html_url: string } export function normalizeSlug(slug: string): string { @@ -39,46 +39,57 @@ export function normalizeSlug(slug: string): string { } export interface GitHubApiOptions { - ignoreThrottled?: boolean; + ignoreThrottled?: boolean } -export function parseRepoUrl(url: string): { owner: string; name: string; } { - const m = /^https:\/\/github\.com\/([^\/ \t]+)\/([^\/ \t]+)\/?$/.exec(url || "") - if (m) - return { owner: m[1], name: m[2] } - return undefined; +export function parseRepoUrl(url: string): { owner: string; name: string } { + const m = /^https:\/\/github\.com\/([^/ \t]+)\/([^/ \t]+)\/?$/.exec( + url || "" + ) + if (m) return { owner: m[1], name: m[2] } + return undefined } -export async function fetchLatestRelease(slug: string, options?: GitHubApiOptions): Promise { - const uri = `${ROOT}repos/${normalizeSlug(slug)}/releases/latest`; +export async function fetchLatestRelease( + slug: string, + options?: GitHubApiOptions +): Promise { + const uri = `${ROOT}repos/${normalizeSlug(slug)}/releases/latest` const resp = await fetch(uri) // console.log(resp) switch (resp.status) { case 200: - case 204: + case 204: { const release: GithubRelease = await resp.json() - return release; + return release + } case 404: // unknow repo or no access - return undefined; + return undefined case 403: // throttled - if (options?.ignoreThrottled) - return undefined; - throw new Error("Too many calls to GitHub, try again later"); + if (options?.ignoreThrottled) return undefined + throw new Error("Too many calls to GitHub, try again later") } throw new Error(`unknown status code ${resp.status}`) } -export async function fetchReleaseBinary(slug: string, tag: string): Promise { +export async function fetchReleaseBinary( + slug: string, + tag: string +): Promise { // we are not using the release api because of CORS. - const downloadUrl = `https://raw.githubusercontent.com/${normalizeSlug(slug)}/${tag}/dist/firmware.uf2` - const req = await fetch(downloadUrl, { headers: { "Accept": "application/octet-stream" } }) + const downloadUrl = `https://raw.githubusercontent.com/${normalizeSlug( + slug + )}/${tag}/dist/firmware.uf2` + const req = await fetch(downloadUrl, { + headers: { Accept: "application/octet-stream" }, + }) if (req.status == 200) { const firmware = await req.blob() - return firmware; + return firmware } - return undefined; + return undefined } function useFetchApi(path: string, options?: GitHubApiOptions) { @@ -90,45 +101,54 @@ function useFetchApi(path: string, options?: GitHubApiOptions) { case 202: case 203: case 204: - break; + break case 404: // unknow repo or no access - res.response = undefined; - break; + res.response = undefined + break case 403: // throttled if (options?.ignoreThrottled) { - res.response = undefined; + res.response = undefined return res - } - else - throw new Error("Too many calls to GitHub, try again later"); + } else + throw new Error("Too many calls to GitHub, try again later") default: console.log(`unknown status`, res) - throw new Error(`Unknown response from GitHub ${res.status}`); + throw new Error(`Unknown response from GitHub ${res.status}`) } - return res; + return res } export function useRepository(slug: string) { const path = `repos/${normalizeSlug(slug)}` - const res = useFetchApi(path, { ignoreThrottled: true }); - return res; + const res = useFetchApi(path, { ignoreThrottled: true }) + return res } export function useLatestRelease(slug: string, options?: GitHubApiOptions) { if (!slug) - return { response: undefined, loading: false, error: undefined, status: undefined } - const uri = `repos/${normalizeSlug(slug)}/releases/latest`; - const res = useFetchApi(uri, { ignoreThrottled: true }); - return res; + return { + response: undefined, + loading: false, + error: undefined, + status: undefined, + } + const uri = `repos/${normalizeSlug(slug)}/releases/latest` + const res = useFetchApi(uri, { ...(options || {}), ignoreThrottled: true }) + return res } export function useLatestReleases(slug: string, options?: GitHubApiOptions) { if (!slug) - return { response: undefined, loading: false, error: undefined, status: undefined } - const uri = `repos/${normalizeSlug(slug)}/releases`; - const res = useFetchApi(uri, { ignoreThrottled: true }); - return res; -} \ No newline at end of file + return { + response: undefined, + loading: false, + error: undefined, + status: undefined, + } + const uri = `repos/${normalizeSlug(slug)}/releases` + const res = useFetchApi(uri, { ...(options || {}), ignoreThrottled: true }) + return res +} diff --git a/docs/src/components/hooks/useMounted.tsx b/docs/src/components/hooks/useMounted.tsx index 86ce4569b..c5ad23543 100644 --- a/docs/src/components/hooks/useMounted.tsx +++ b/docs/src/components/hooks/useMounted.tsx @@ -7,4 +7,4 @@ export default function useMounted(): () => boolean { return () => { mounted.current = false; } }, []); return () => mounted.current; -}; \ No newline at end of file +} \ No newline at end of file diff --git a/docs/src/components/icons/MicrobitIcon.tsx b/docs/src/components/icons/MicrobitIcon.tsx index f754b2f0e..4b42903b1 100644 --- a/docs/src/components/icons/MicrobitIcon.tsx +++ b/docs/src/components/icons/MicrobitIcon.tsx @@ -1,9 +1,10 @@ import { SvgIcon, SvgIconProps } from "@material-ui/core"; import React from "react"; -export default (props: SvgIconProps) => - +export default function MicrobitIcon(props: SvgIconProps) { + return +} diff --git a/docs/src/components/makecode/MakeCodeEditorExtension.tsx b/docs/src/components/makecode/MakeCodeEditorExtension.tsx index c1ff713e4..d74815504 100644 --- a/docs/src/components/makecode/MakeCodeEditorExtension.tsx +++ b/docs/src/components/makecode/MakeCodeEditorExtension.tsx @@ -1,10 +1,10 @@ -import { Grid, TextField, useEventCallback } from "@material-ui/core"; +import { Grid, TextField } from "@material-ui/core"; import React, { ChangeEvent, useEffect, useMemo, useState } from "react"; import { clone, JSONTryParse, SMap, uniqueName } from "../../../../src/jdom/utils"; import useChange from '../../jacdac/useChange'; // tslint:disable-next-line: no-submodule-imports match-default-export-name import DeleteIcon from '@material-ui/icons/Delete'; -import { resolveMakecodeService, resolveMakecodeServiceFromClassIdentifier, serviceSpecificationFromClassIdentifier, serviceSpecifications } from "../../../../src/jdom/spec"; +import { resolveMakecodeService, resolveMakecodeServiceFromClassIdentifier, serviceSpecifications } from "../../../../src/jdom/spec"; import AddServiceIconButton from "../AddServiceIconButton"; import ServiceSpecificationSelect from "../ServiceSpecificationSelect" import { escapeName } from "../../../../src/azure-iot/dtdl" @@ -88,9 +88,11 @@ function ClientRoleRow(props: { config: Configuration, component: ClientRole, on } +// eslint-disable-next-line @typescript-eslint/no-unused-vars function validateClientRole(config: Configuration, role: ClientRole) { - let serviceError: string = undefined; - let nameError: string = undefined; + const serviceError: string = undefined; + const nameError: string = undefined; + // TODO return { serviceError, nameError } } diff --git a/docs/src/components/makecode/MakeCodeSnippet.tsx b/docs/src/components/makecode/MakeCodeSnippet.tsx index a3583e2d8..4dce1ba9b 100644 --- a/docs/src/components/makecode/MakeCodeSnippet.tsx +++ b/docs/src/components/makecode/MakeCodeSnippet.tsx @@ -41,7 +41,7 @@ function MakeCodeSnippetNoSSR(props: { source: string }) { const tabs = ["blocks", "typescript", "sim"] const { editor, setEditor } = useContext(MakeCodeSnippetContext); const [tab, setTab] = useState(tabs.indexOf(editor) || 0); - const handleTabChange = (event: React.ChangeEvent<{}>, newValue: number) => { + const handleTabChange = (event: React.ChangeEvent, newValue: number) => { if (newValue < tabs.length - 1) setEditor(tabs[newValue]); setTab(newValue); diff --git a/docs/src/components/makecode/useMakeCodeRenderer.ts b/docs/src/components/makecode/useMakeCodeRenderer.ts index 1713b2b80..b82816a70 100644 --- a/docs/src/components/makecode/useMakeCodeRenderer.ts +++ b/docs/src/components/makecode/useMakeCodeRenderer.ts @@ -160,10 +160,10 @@ export function useMakeCodeRenderer() { // listen for messages const handleMessage = (ev: MessageEvent) => { - let msg = ev.data; + const msg = ev.data; if (msg.source != "makecode") return; switch (msg.type) { - case "renderready": + case "renderready": { console.log(`mkcd: renderer ready, ${Object.keys(pendingRequests).length} pending`) const iframe = typeof document !== "undefined" && document.getElementById(iframeId) if (iframe) { @@ -173,17 +173,19 @@ export function useMakeCodeRenderer() { .forEach(k => sendRequest(pendingRequests[k].req)); } break; - case "renderblocks": + } + case "renderblocks": { const id = msg.id; // this is the id you sent const r = pendingRequests[id]; if (!r) return; delete pendingRequests[id]; r.resolve(msg as RenderBlocksResponseMessage); break; + } } } - useWindowEvent("message", handleMessage, false) + useWindowEvent("message", handleMessage, false, []) return { render diff --git a/docs/src/components/spec.tsx b/docs/src/components/spec.tsx index 1854dd0b2..5a5f258b7 100644 --- a/docs/src/components/spec.tsx +++ b/docs/src/components/spec.tsx @@ -2,7 +2,10 @@ import React from "react" import { graphql } from "gatsby" import { MDXRenderer } from "gatsby-plugin-mdx" -export default function PageTemplate({ data: { mdx } }) { +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export default function PageTemplate(props: { data: { mdx: { body: any } } }) { + const { data } = props; + const { mdx } = data; return {mdx.body} } diff --git a/docs/src/components/tools/AzureDeviceTwinDesigner.tsx b/docs/src/components/tools/AzureDeviceTwinDesigner.tsx index 4fc8f67a4..9b9e9b837 100644 --- a/docs/src/components/tools/AzureDeviceTwinDesigner.tsx +++ b/docs/src/components/tools/AzureDeviceTwinDesigner.tsx @@ -1,6 +1,6 @@ import { Grid, TextField } from "@material-ui/core"; import React, { ChangeEvent, useMemo } from "react"; -import { clone, SMap, uniqueName } from "../../../../src/jdom/utils"; +import { clone, uniqueName } from "../../../../src/jdom/utils"; import useLocalStorage from "../useLocalStorage"; // tslint:disable-next-line: no-submodule-imports match-default-export-name import DeleteIcon from '@material-ui/icons/Delete'; @@ -58,7 +58,7 @@ function ComponentRow(props: { twin: DigitalTwinSpec, component: DigitalTwinComp function validateTwinComponent(twin: DigitalTwinSpec, component: DigitalTwinComponent) { let serviceError: string = undefined; - let nameError: string = undefined; + const nameError: string = undefined; const count = twin.components.filter(c => c.service.classIdentifier === component.service.classIdentifier).length if (count > 1) serviceError = `Multiple same service not supported.` @@ -110,7 +110,7 @@ export default function AzureDeviceTwinDesigner() { variant={variant} /> - {twin.components.map(c => )} + {twin.components.map((c, i) => )} diff --git a/docs/src/components/tools/AzureIoTHub.tsx b/docs/src/components/tools/AzureIoTHub.tsx index e75b8d073..5b004862b 100644 --- a/docs/src/components/tools/AzureIoTHub.tsx +++ b/docs/src/components/tools/AzureIoTHub.tsx @@ -34,7 +34,8 @@ interface ConnectionString { } function parseConnectionString(source: string): ConnectionString { - let r: any = { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const r: any = { source }; source.split(';').map(fragment => fragment.split('=')).forEach(kv => r[kv[0]] = kv[1]); @@ -117,7 +118,7 @@ class AzureIotHubClient { } } -export default function AzureIoTHub(props: {}) { +export default function AzureIoTHub() { return <> diff --git a/docs/src/components/tools/Collector.tsx b/docs/src/components/tools/Collector.tsx index d25a81e14..40cd3f5e7 100644 --- a/docs/src/components/tools/Collector.tsx +++ b/docs/src/components/tools/Collector.tsx @@ -75,8 +75,7 @@ function createDataSet(bus: JDBus, return set; } -export default function Collector(props: {}) { - const { } = props; +export default function Collector() { const { bus } = useContext(JacdacContext) const classes = useStyles(); const { fileStorage } = useContext(ServiceManagerContext) diff --git a/docs/src/components/tools/DeviceDesigner.tsx b/docs/src/components/tools/DeviceDesigner.tsx index 7d9451d7c..9b26f3cf9 100644 --- a/docs/src/components/tools/DeviceDesigner.tsx +++ b/docs/src/components/tools/DeviceDesigner.tsx @@ -93,7 +93,7 @@ export default function DeviceDesigner() { : deviceSpecifications().find(dev => dev.id == device.id) ? "identifer already used" : ""; - const servicesError = !!device.services?.length + const servicesError = device.services?.length ? "" : "Select at least one service" const imageError = !imageBase64 ? "missing image" : "" diff --git a/docs/src/components/tools/EdgeImpulse.tsx b/docs/src/components/tools/EdgeImpulse.tsx index 800182a7a..33863c1bd 100644 --- a/docs/src/components/tools/EdgeImpulse.tsx +++ b/docs/src/components/tools/EdgeImpulse.tsx @@ -1,5 +1,5 @@ import React, { useContext, useEffect, useState } from "react" -import { Box, Button, Card, CardActions, CardContent, CardHeader, CardMedia, CircularProgress, Collapse, Grid, Switch, TextField, Typography, useEventCallback, useTheme } from '@material-ui/core'; +import { Box, Button, Card, CardActions, CardContent, CardHeader, CardMedia, CircularProgress, Grid, Switch, Typography, useTheme } from '@material-ui/core'; import { Link } from 'gatsby-theme-material-ui'; import useDbValue from "../useDbValue"; import JacdacContext, { JacdacContextProps } from "../../jacdac/Context"; @@ -10,7 +10,7 @@ import { JDClient } from "../../../../src/jdom/client"; import DeviceCardHeader from "../DeviceCardHeader"; import Alert from "../ui/Alert"; import useEffectAsync from "../useEffectAsync"; -import { CHANGE, CONNECT, CONNECTING, CONNECTION_STATE, DISCONNECT, ERROR, PACKET_REPORT, PROGRESS, REPORT_RECEIVE, SensorAggregatorReg, SRV_MODEL_RUNNER, SRV_SENSOR_AGGREGATOR } from "../../../../src/jdom/constants"; +import { CHANGE, CONNECT, CONNECTING, CONNECTION_STATE, DISCONNECT, ERROR, PROGRESS, REPORT_RECEIVE, SRV_MODEL_RUNNER, SRV_SENSOR_AGGREGATOR } from "../../../../src/jdom/constants"; import FieldDataSet from "../FieldDataSet"; import { deviceSpecificationFromFirmwareIdentifier, isSensor } from "../../../../src/jdom/spec"; import CircularProgressWithLabel from "../ui/CircularProgressWithLabel"; @@ -48,6 +48,7 @@ interface EdgeImpulseResponse { interface EdgeImpulseHello { hello?: boolean; + // eslint-disable-next-line @typescript-eslint/no-explicit-any err?: any; } @@ -139,6 +140,7 @@ class EdgeImpulseClient extends JDClient { public samplingState = IDLE; private _hello: EdgeImpulseRemoteManagementInfo; private _sample: EdgeImpulseSampling; + // eslint-disable-next-line @typescript-eslint/no-explicit-any private _pingInterval: any; private pong: boolean; private aggregatorClient: SensorAggregatorClient; @@ -182,6 +184,7 @@ class EdgeImpulseClient extends JDClient { w.close(); } catch (e) { + console.debug(e) } finally { this.setConnectionState(DISCONNECT); @@ -206,7 +209,7 @@ class EdgeImpulseClient extends JDClient { } } - private send(msg: any) { + private send(msg: unknown) { this._ws?.send(JSON.stringify(msg)) } @@ -241,6 +244,7 @@ class EdgeImpulseClient extends JDClient { this.connect(); } + // eslint-disable-next-line @typescript-eslint/no-explicit-any private handleMessage(msg: any) { // response to ping? if (msg.data === "pong") { @@ -485,7 +489,7 @@ class EdgeImpulseClient extends JDClient { } } - static async apiFetch(apiKey: string, path: string | number, body?: any): Promise { + static async apiFetch(apiKey: string, path: string | number, body?: unknown): Promise { const API_ROOT = "https://studio.edgeimpulse.com/v1/api/" const url = `${API_ROOT}${path}` const options: RequestInit = { @@ -646,7 +650,7 @@ function Acquisition(props: { const [connectionState, setConnectionState] = useState(DISCONNECT) const [samplingState, setSamplingState] = useState(IDLE) const [samplingProgress, setSamplingProgress] = useState(0) - const [deviceInfo, setDeviceInfo] = useState(undefined); + const [, setDeviceInfo] = useState(undefined); const { deviceId } = device; const deviceName = useDeviceName(device, false); const projectId = info?.id; @@ -726,7 +730,7 @@ function Acquisition(props: { } -export default function EdgeImpulse(props: {}) { +export default function EdgeImpulse() { const { value: apiKey } = useDbValue(EDGE_IMPULSE_API_KEY, "") const { bus } = useContext(JacdacContext); const [model, setModel] = useState(undefined) diff --git a/docs/src/components/tools/Flash.tsx b/docs/src/components/tools/Flash.tsx index 11f66ce8c..5a6fd24ea 100644 --- a/docs/src/components/tools/Flash.tsx +++ b/docs/src/components/tools/Flash.tsx @@ -9,7 +9,7 @@ import SafeBootAlert from "../firmware/SafeBootAlert"; export default function Flash() { const [tab, setTab] = useState(0); - const handleTabChange = (event: React.ChangeEvent<{}>, newValue: number) => { + const handleTabChange = (event: React.ChangeEvent, newValue: number) => { setTab(newValue); } diff --git a/docs/src/components/tools/ModelUploader.tsx b/docs/src/components/tools/ModelUploader.tsx index 5f0627973..b57aa0943 100644 --- a/docs/src/components/tools/ModelUploader.tsx +++ b/docs/src/components/tools/ModelUploader.tsx @@ -72,7 +72,7 @@ export function ModelActions(props: { } -export default function ModelUploader(props: {}) { +export default function ModelUploader() { const classes = useStyles() const [importing, setImporting] = useState(false) const { data: model, setBlob: setModel } = useDbUint8Array("model.tflite") @@ -154,7 +154,7 @@ export default function ModelUploader(props: {}) {

Machine learning models are typically stored in a .tflite file.

{model && Model loaded ({prettySize(model.byteLength)})} {model &&

} - + {models?.length && {models.map(model => @@ -166,7 +166,7 @@ export default function ModelUploader(props: {}) { {sensorConfig && Sensor configuration loaded} {sensorConfig && } {sensorConfig &&

} - + {inputConfigurations?.length && {inputConfigurations.map(iconfig => diff --git a/docs/src/components/ui/DarkModeProvider.tsx b/docs/src/components/ui/DarkModeProvider.tsx index 4a27a2ccb..837c34b15 100644 --- a/docs/src/components/ui/DarkModeProvider.tsx +++ b/docs/src/components/ui/DarkModeProvider.tsx @@ -1,8 +1,9 @@ import { PaletteType } from "@material-ui/core"; -import React, { useEffect, useState } from "react"; +import React, { ReactNode, useEffect, useState } from "react"; import DarkModeContext from './DarkModeContext' -const DarkModeProvider = ({ children }) => { +export default function DarkModeProvider(props: { children: ReactNode }) { + const { children } = props; const KEY = 'darkMode' const [darkMode, setDarkMode] = useState("light"); const [darkModeMounted, setMounted] = useState(false); @@ -37,5 +38,3 @@ const DarkModeProvider = ({ children }) => { {children} } - -export default DarkModeProvider \ No newline at end of file diff --git a/docs/src/components/ui/HighlightTextField.tsx b/docs/src/components/ui/HighlightTextField.tsx index 30db32331..3772ce9f4 100644 --- a/docs/src/components/ui/HighlightTextField.tsx +++ b/docs/src/components/ui/HighlightTextField.tsx @@ -1,3 +1,5 @@ +/* eslint-disable @typescript-eslint/no-unused-vars */ +/* eslint-disable react/jsx-key */ import React, { useContext, useRef } from 'react' import Highlight, { defaultProps, Language, PrismTheme } from 'prism-react-renderer' // tslint:disable-next-line: no-submodule-imports match-default-export-name diff --git a/docs/src/components/ui/IconButtonWithProgress.tsx b/docs/src/components/ui/IconButtonWithProgress.tsx index 50f179d2a..aa0d007b9 100644 --- a/docs/src/components/ui/IconButtonWithProgress.tsx +++ b/docs/src/components/ui/IconButtonWithProgress.tsx @@ -29,8 +29,9 @@ export default function IconButtonWithProgress(props: IconButtonWithProgressProp progress={progress} progressColor={progressColor} progressStyle={progressStyle} - progressSize={progressSize} - children={badge} />} + progressSize={progressSize}> + {badge} + } } \ No newline at end of file diff --git a/docs/src/components/useFetch.ts b/docs/src/components/useFetch.ts index 538ad0022..882fa86a4 100644 --- a/docs/src/components/useFetch.ts +++ b/docs/src/components/useFetch.ts @@ -1,42 +1,40 @@ -import { useState } from "react"; -import useEffectAsync from "./useEffectAsync"; +import { useState } from "react" +import useEffectAsync from "./useEffectAsync" export default function useFetch(url: RequestInfo, options?: RequestInit) { - const [response, setResponse] = useState(undefined); - const [error, setError] = useState(undefined); - const [status, setStatus] = useState(undefined); - const [loading, setLoading] = useState(true); // start in loading mode + const [response, setResponse] = useState(undefined) + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const [error, setError] = useState(undefined) + const [status, setStatus] = useState(undefined) + const [loading, setLoading] = useState(true) // start in loading mode - useEffectAsync(async (mounted) => { - setLoading(true); - try { - const res = await fetch(url, options); - if (!mounted()) - return; - const status = res.status; - setStatus(status); - if (status >= 200 && status <= 204) { - const json = await res.json(); - if (!mounted()) - return; - setResponse(json); + useEffectAsync( + async mounted => { + setLoading(true) + try { + const res = await fetch(url, options) + if (!mounted()) return + const status = res.status + setStatus(status) + if (status >= 200 && status <= 204) { + const json = await res.json() + if (!mounted()) return + setResponse(json) + } + } catch (error) { + if (!mounted()) return + setError(error) + } finally { + if (mounted()) setLoading(false) } - } catch (error) { - if (!mounted()) - return; - setError(error); - } - finally { - if (!mounted()) - return; - setLoading(false) - } - }, [url]); + }, + [url] + ) return { response, error, status, - loading - }; -}; \ No newline at end of file + loading, + } +} diff --git a/docs/src/components/useMdxComponents.tsx b/docs/src/components/useMdxComponents.tsx index a1588bd52..74ce344c7 100644 --- a/docs/src/components/useMdxComponents.tsx +++ b/docs/src/components/useMdxComponents.tsx @@ -7,7 +7,6 @@ import DeviceList from "./DeviceList" import ServiceList from "./ServiceList" import DeviceSpecificationList from "./DeviceSpecificationList" import FilteredDeviceSpecificationList from "./FilteredDeviceSpecificationList" -import ServiceSpecificationList from "./ServiceSpecificationList" import PacketsPreview from "./PacketsPreview" import UpdateDeviceList from "./UpdateDeviceList"; import FlashButton from "./FlashButton"; diff --git a/docs/src/components/widgets/JoystickWidget.tsx b/docs/src/components/widgets/JoystickWidget.tsx index db2961c03..6ded1be7b 100644 --- a/docs/src/components/widgets/JoystickWidget.tsx +++ b/docs/src/components/widgets/JoystickWidget.tsx @@ -17,7 +17,7 @@ export default function JoystickWidget(props: { onUpdate?: (newx: number, newy: number) => void, hostValues?: () => [number, number] }) { - const { color, x, y, onUpdate, widgetSize, hostValues } = props; + const { color, x, y, onUpdate, hostValues } = props; const { active, background, controlBackground } = useWidgetTheme(color); const dragSurfaceRef = useRef(); const [grabbing, setGrabbing] = useState(false) diff --git a/docs/src/components/widgets/LightWidget.tsx b/docs/src/components/widgets/LightWidget.tsx index ca02e8be9..32aad2848 100644 --- a/docs/src/components/widgets/LightWidget.tsx +++ b/docs/src/components/widgets/LightWidget.tsx @@ -5,19 +5,18 @@ import useServiceHost from "../hooks/useServiceHost"; import LedPixelServiceHost from "../../../../src/hosts/ledpixelservicehost"; import SvgWidget from "../widgets/SvgWidget"; import useWidgetTheme from "../widgets/useWidgetTheme"; -import useWidgetSize from "../widgets/useWidgetSize"; import { JDService } from "../../../../src/jdom/service"; import { useRegisterUnpackedValue } from "../../jacdac/useRegisterValue" function rgbToHsl(r: number, g: number, b: number): [number, number, number] { const [r$, g$, b$] = [r / 255, g / 255, b / 255]; - let cMin = Math.min(r$, g$, b$); - let cMax = Math.max(r$, g$, b$); - let cDelta = cMax - cMin; + const cMin = Math.min(r$, g$, b$); + const cMax = Math.max(r$, g$, b$); + const cDelta = cMax - cMin; let h: number; let s: number; let l: number; - let maxAndMin = cMax + cMin; + const maxAndMin = cMax + cMin; //lum l = (maxAndMin / 2) * 100 @@ -75,7 +74,7 @@ function LightStripWidget(props: { numPixels: number, actualBrightness: number, host: LedPixelServiceHost, - widgetSize: string, + widgetSize?: string, }) { const { lightVariant, numPixels, actualBrightness, host, widgetSize } = props; const { background, controlBackground } = useWidgetTheme() @@ -192,15 +191,14 @@ function LightMatrixWidget(props: { lightVariant: LedPixelVariant, actualBrightness: number, host: LedPixelServiceHost, - widgetSize: string, + widgetSize?: string, columns: number, rows: number, }) { - const { actualBrightness, columns, rows, host, widgetSize } = props; + const { columns, rows, host, widgetSize } = props; const { background, controlBackground } = useWidgetTheme() const widgetRef = useRef(); - const clickeable = !!host; // compute size const pw = 8; const ph = 8; @@ -255,7 +253,7 @@ function LightMatrixWidget(props: { } export default function LightWidget(props: { variant?: "icon" | "", service: JDService, widgetCount?: number }) { - const { service, widgetCount, variant } = props; + const { service } = props; const [numPixels] = useRegisterUnpackedValue<[number]>(service.register(LedPixelReg.NumPixels)); const [lightVariant] = useRegisterUnpackedValue<[LedPixelVariant]>(service.register(LedPixelReg.Variant)); const [actualBrightness] = useRegisterUnpackedValue<[number]>(service.register(LedPixelReg.ActualBrightness)); diff --git a/docs/src/components/widgets/ValueWithUnitWidget.tsx b/docs/src/components/widgets/ValueWithUnitWidget.tsx index c420393e2..f37011915 100644 --- a/docs/src/components/widgets/ValueWithUnitWidget.tsx +++ b/docs/src/components/widgets/ValueWithUnitWidget.tsx @@ -2,7 +2,6 @@ import React from "react"; import { Grid, Slider, Typography } from "@material-ui/core"; import { isSet, roundWithPrecision } from "../../../../src/jdom/utils"; import { CSSProperties } from "@material-ui/core/styles/withStyles"; -import useUnitIcons from "../hooks/useUnitIcon"; export default function ValueWithUnitWidget(props: { value: number, @@ -23,7 +22,7 @@ export default function ValueWithUnitWidget(props: { const hasValue = !isNaN(value); const valueText = hasValue ? roundWithPrecision(value, precision).toLocaleString() : "--" const valueTextLength = isSet(min) && isSet(max) ? [min, max, min + (min + max) / 3] - .map(v => roundWithPrecision(v, precision).toLocaleString().replace(/[,\.]/, '').length) + .map(v => roundWithPrecision(v, precision).toLocaleString().replace(/[,.]/, '').length) .reduce((l, r) => Math.max(l, r), 0) + precision : valueText.length; diff --git a/docs/src/components/widgets/svgutils.ts b/docs/src/components/widgets/svgutils.ts index 5eeeea7d3..8a80b7ea8 100644 --- a/docs/src/components/widgets/svgutils.ts +++ b/docs/src/components/widgets/svgutils.ts @@ -1,54 +1,83 @@ -export function svgPointerPoint(svg: SVGSVGElement, event: React.PointerEvent): DOMPoint { - const point = svg.createSVGPoint(); - point.x = event.clientX; - point.y = event.clientY; - const res = point.matrixTransform(svg.getScreenCTM().inverse()); - return res; +import React from "react" + +export function svgPointerPoint( + svg: SVGSVGElement, + event: React.PointerEvent +): DOMPoint { + const point = svg.createSVGPoint() + point.x = event.clientX + point.y = event.clientY + const res = point.matrixTransform(svg.getScreenCTM().inverse()) + return res } -export function closestPoint(pathNode: SVGPathElement, step: number, point: DOMPoint): number { +export function closestPoint( + pathNode: SVGPathElement, + step: number, + point: DOMPoint +): number { const pathLength = pathNode.getTotalLength() const distance2 = (p: DOMPoint) => { const dx = p.x - point.x - const dy = p.y - point.y; - return dx * dx + dy * dy; + const dy = p.y - point.y + return dx * dx + dy * dy } - let bestLength: number = 0; - let bestDistance = Infinity; + let bestLength = 0 + let bestDistance = Infinity for (let scanLength = 0; scanLength <= pathLength; scanLength += step) { - const scan = pathNode.getPointAtLength(scanLength); - const scanDistance = distance2(scan); + const scan = pathNode.getPointAtLength(scanLength) + const scanDistance = distance2(scan) if (scanDistance < bestDistance) { - bestLength = scanLength; - bestDistance = scanDistance; + bestLength = scanLength + bestDistance = scanDistance } } - return bestLength / pathLength; + return bestLength / pathLength } -export function polarToCartesian(centerX: number, centerY: number, radius: number, angleInDegrees: number) { - const angleInRadians = (angleInDegrees - 90) * Math.PI / 180.0; +export function polarToCartesian( + centerX: number, + centerY: number, + radius: number, + angleInDegrees: number +) { + const angleInRadians = ((angleInDegrees - 90) * Math.PI) / 180.0 return { - x: centerX + (radius * Math.cos(angleInRadians)), - y: centerY + (radius * Math.sin(angleInRadians)) - }; + x: centerX + radius * Math.cos(angleInRadians), + y: centerY + radius * Math.sin(angleInRadians), + } } -export function describeArc(x: number, y: number, radius: number, startAngle: number, endAngle: number, large?: boolean) { +export function describeArc( + x: number, + y: number, + radius: number, + startAngle: number, + endAngle: number, + large?: boolean +) { + const start = polarToCartesian(x, y, radius, endAngle) + const end = polarToCartesian(x, y, radius, startAngle) - const start = polarToCartesian(x, y, radius, endAngle); - const end = polarToCartesian(x, y, radius, startAngle); - - const largeArcFlag = large !== true && (endAngle - startAngle <= 180) ? "0" : "1"; + const largeArcFlag = + large !== true && endAngle - startAngle <= 180 ? "0" : "1" const d = [ - "M", start.x, start.y, - "A", radius, radius, 0, largeArcFlag, 0, - end.x, end.y - ].join(" "); + "M", + start.x, + start.y, + "A", + radius, + radius, + 0, + largeArcFlag, + 0, + end.x, + end.y, + ].join(" ") - return d; -} \ No newline at end of file + return d +} diff --git a/docs/src/gatsby-theme-material-ui-top-layout/components/top-layout.tsx b/docs/src/gatsby-theme-material-ui-top-layout/components/top-layout.tsx index 941802501..2a522f861 100644 --- a/docs/src/gatsby-theme-material-ui-top-layout/components/top-layout.tsx +++ b/docs/src/gatsby-theme-material-ui-top-layout/components/top-layout.tsx @@ -2,6 +2,7 @@ import React from "react"; // tslint:disable-next-line: no-submodule-imports import ThemeTopLayout from "gatsby-theme-material-ui-top-layout/src/components/top-layout"; +// eslint-disable-next-line react/prop-types export default function TopLayout({ children, theme }) { return {children} diff --git a/docs/src/jacdac/Provider.tsx b/docs/src/jacdac/Provider.tsx index 04920a0c6..e67ec1463 100644 --- a/docs/src/jacdac/Provider.tsx +++ b/docs/src/jacdac/Provider.tsx @@ -1,4 +1,4 @@ -import React, { useState, useEffect } from "react"; +import React, { useState, useEffect, ReactNode } from "react"; import JacdacContext from "./Context"; import { BusState, JDBus } from "../../../src/jdom/bus"; import { createUSBBus } from "../../../src/jdom/usb"; @@ -36,7 +36,8 @@ GamepadHostManager.start(bus); if (typeof window !== "undefined") new IFrameBridgeClient(bus, args.frameId); // start bridge -const JacdacProvider = ({ children }) => { +export default function JacdacProvider(props: { children: ReactNode }) { + const { children } = props; const [firstConnect, setFirstConnect] = useState(false) const [connectionState, setConnectionState] = useState(bus.connectionState); @@ -60,5 +61,3 @@ const JacdacProvider = ({ children }) => { ) } - -export default JacdacProvider; diff --git a/jacdac-spec b/jacdac-spec index ec18b3e91..55577e7b7 160000 --- a/jacdac-spec +++ b/jacdac-spec @@ -1 +1 @@ -Subproject commit ec18b3e91202f31c6a5165fe3acb11ce2eaad71b +Subproject commit 55577e7b798d70eca9704fca22950537779a0c96 diff --git a/package-lock.json b/package-lock.json index 6453ae39a..4a6a2924f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,12 +18,16 @@ "@semantic-release/git": "^9.0.0", "@types/expect": "^24.3.0", "@types/mocha": "^8.2.1", + "@typescript-eslint/eslint-plugin": "^4.15.2", + "@typescript-eslint/parser": "^4.15.2", "cli": "^1.0.1", "colors": "^1.4.0", "cross-env": "^7.0.3", - "lint-staged": "^10.5.4", + "eslint": "^7.20.0", + "eslint-plugin-react": "^7.22.0", "lodash.camelcase": "^4.3.0", "mocha": "^8.3.0", + "prettier": "2.2.1", "prompt": "^1.1.0", "replace-in-file": "^6.2.0", "rollup": "^2.38.5", @@ -35,8 +39,6 @@ "semantic-release": "^17.3.8", "shelljs": "^0.8.4", "ts-node": "^7.0.1", - "tslint": "^6", - "tslint-microsoft-contrib": "^6", "typescript": "^4.1.4", "webusb": "^2.2.0" }, @@ -45,36 +47,72 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.10.3", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.3.tgz", - "integrity": "sha512-fDx9eNW0qz0WkUeqL6tXEXzVlPh6Y5aCDEZesl0xBGA8ndRukX91Uk44ZqnkECp01NAZUdCAl+aiQNGi0k88Eg==", + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", "dev": true, "dependencies": { - "@babel/highlight": "^7.10.3" + "@babel/highlight": "^7.10.4" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.10.3", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.3.tgz", - "integrity": "sha512-bU8JvtlYpJSBPuj1VUmKpFGaDZuLxASky3LhaKj3bmpSTY6VWooSM8msk+Z0CZoErFye2tlABF6yDkT3FOPAXw==", + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", "dev": true }, "node_modules/@babel/highlight": { - "version": "7.10.3", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.3.tgz", - "integrity": "sha512-Ih9B/u7AtgEnySE2L2F0Xm0GaM729XqqLfHkalTsbjXGyqmf/6M0Cu0WpvqueUlW+xk88BHw9Nkpj49naU+vWw==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.12.13.tgz", + "integrity": "sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.10.3", + "@babel/helper-validator-identifier": "^7.12.11", "chalk": "^2.0.0", "js-tokens": "^4.0.0" } }, - "node_modules/@babel/highlight/node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "node_modules/@eslint/eslintrc": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.3.0.tgz", + "integrity": "sha512-1JTKgrOKAHVivSvOYw+sJOunkBjUOvjqWk1DPja7ZFhIS2mX/4EgTT8M7eTK9jrKhL/FvXXEbQwIs3pg1xp3dg==", + "dev": true, + "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" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@eslint/eslintrc/node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/@jest/types": { "version": "26.6.2", @@ -465,32 +503,6 @@ "node": ">=10.18" } }, - "node_modules/@semantic-release/github/node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@semantic-release/github/node_modules/globby": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.2.tgz", - "integrity": "sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og==", - "dev": true, - "dependencies": { - "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" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@semantic-release/npm": { "version": "7.0.9", "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-7.0.9.tgz", @@ -623,6 +635,12 @@ "@types/istanbul-lib-report": "*" } }, + "node_modules/@types/json-schema": { + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", + "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", + "dev": true + }, "node_modules/@types/minimist": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.1.tgz", @@ -693,12 +711,190 @@ "integrity": "sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==", "dev": true }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "4.15.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.15.2.tgz", + "integrity": "sha512-uiQQeu9tWl3f1+oK0yoAv9lt/KXO24iafxgQTkIYO/kitruILGx3uH+QtIAHqxFV+yIsdnJH+alel9KuE3J15Q==", + "dev": true, + "dependencies": { + "@typescript-eslint/experimental-utils": "4.15.2", + "@typescript-eslint/scope-manager": "4.15.2", + "debug": "^4.1.1", + "functional-red-black-tree": "^1.0.1", + "lodash": "^4.17.15", + "regexpp": "^3.0.0", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^4.0.0", + "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/experimental-utils": { + "version": "4.15.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.15.2.tgz", + "integrity": "sha512-Fxoshw8+R5X3/Vmqwsjc8nRO/7iTysRtDqx6rlfLZ7HbT8TZhPeQqbPjTyk2RheH3L8afumecTQnUc9EeXxohQ==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/scope-manager": "4.15.2", + "@typescript-eslint/types": "4.15.2", + "@typescript-eslint/typescript-estree": "4.15.2", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "4.15.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.15.2.tgz", + "integrity": "sha512-SHeF8xbsC6z2FKXsaTb1tBCf0QZsjJ94H6Bo51Y1aVEZ4XAefaw5ZAilMoDPlGghe+qtq7XdTiDlGfVTOmvA+Q==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "4.15.2", + "@typescript-eslint/types": "4.15.2", + "@typescript-eslint/typescript-estree": "4.15.2", + "debug": "^4.1.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "4.15.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.15.2.tgz", + "integrity": "sha512-Zm0tf/MSKuX6aeJmuXexgdVyxT9/oJJhaCkijv0DvJVT3ui4zY6XYd6iwIo/8GEZGy43cd7w1rFMiCLHbRzAPQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "4.15.2", + "@typescript-eslint/visitor-keys": "4.15.2" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "4.15.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.15.2.tgz", + "integrity": "sha512-r7lW7HFkAarfUylJ2tKndyO9njwSyoy6cpfDKWPX6/ctZA+QyaYscAHXVAfJqtnY6aaTwDYrOhp+ginlbc7HfQ==", + "dev": true, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "4.15.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.15.2.tgz", + "integrity": "sha512-cGR8C2g5SPtHTQvAymEODeqx90pJHadWsgTtx6GbnTWKqsg7yp6Eaya9nFzUd4KrKhxdYTTFBiYeTPQaz/l8bw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "4.15.2", + "@typescript-eslint/visitor-keys": "4.15.2", + "debug": "^4.1.1", + "globby": "^11.0.1", + "is-glob": "^4.0.1", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "4.15.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.15.2.tgz", + "integrity": "sha512-TME1VgSb7wTwgENN5KVj4Nqg25hP8DisXxNBojM4Nn31rYaNDIocNm5cmjOFfh42n7NVERxWrDFoETO/76ePyg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "4.15.2", + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, "node_modules/@ungap/promise-all-settled": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", "dev": true }, + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, "node_modules/agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", @@ -724,6 +920,22 @@ "node": ">=8" } }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, "node_modules/ansi-colors": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", @@ -837,6 +1049,52 @@ "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", "dev": true }, + "node_modules/array-includes": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz", + "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz", + "integrity": "sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", @@ -1001,6 +1259,19 @@ "node": ">=4" } }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -1109,18 +1380,6 @@ "node": ">=0.2.5" } }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/cli-table": { "version": "0.3.4", "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.4.tgz", @@ -1192,66 +1451,6 @@ "node": ">=8" } }, - "node_modules/cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, - "dependencies": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-truncate/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-truncate/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-truncate/node_modules/string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-truncate/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -1340,12 +1539,6 @@ "node": ">=0.1.90" } }, - "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, "node_modules/commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", @@ -1622,12 +1815,6 @@ "node": ">=8" } }, - "node_modules/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", - "dev": true - }, "node_modules/deep-equal": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-0.2.2.tgz", @@ -1643,6 +1830,24 @@ "node": ">=4.0.0" } }, + "node_modules/deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "node_modules/define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "dependencies": { + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", @@ -1697,6 +1902,18 @@ "node": ">=8" } }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/dot-prop": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", @@ -1776,6 +1993,51 @@ "is-arrayish": "^0.2.1" } }, + "node_modules/es-abstract": { + "version": "1.18.0-next.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.2.tgz", + "integrity": "sha512-Ih4ZMFHEtZupnUh6497zEL4y2+w8+1ljnCyaTa+adcoafI1GOvMwFlDjBLfWR7y9VLfrjRJe9ocuHY1PSR9jjw==", + "dev": true, + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -1794,6 +2056,291 @@ "node": ">=0.8.0" } }, + "node_modules/eslint": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.20.0.tgz", + "integrity": "sha512-qGi0CTcOGP2OtCQBgWZlQjcTuP0XkIpYFj25XtRTQSHC+umNnp7UMshr2G8SLsRFYDdAPFeHOsiteadmMH02Yw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "7.12.11", + "@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.4.0", + "esutils": "^2.0.2", + "file-entry-cache": "^6.0.0", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "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.9.1", + "progress": "^2.0.0", + "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" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.22.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.22.0.tgz", + "integrity": "sha512-p30tuX3VS+NWv9nQot9xIGAHBXR0+xJVaZriEsHoJrASGCJZDJ8JLNM0YqKqI0AKm6Uxaa1VUHoNEibxRCMQHA==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.1", + "array.prototype.flatmap": "^1.2.3", + "doctrine": "^2.1.0", + "has": "^1.0.3", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "object.entries": "^1.1.2", + "object.fromentries": "^2.0.2", + "object.values": "^1.1.1", + "prop-types": "^15.7.2", + "resolve": "^1.18.1", + "string.prototype.matchall": "^4.0.2" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/eslint/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "dependencies": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", @@ -1807,12 +2354,72 @@ "node": ">=4" } }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, "node_modules/estree-walker": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", "dev": true }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/execa": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", @@ -1913,6 +2520,12 @@ "node": "> 0.1.90" } }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, "node_modules/fast-glob": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", @@ -1930,6 +2543,18 @@ "node": ">=8" } }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, "node_modules/fastq": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.10.0.tgz", @@ -1951,6 +2576,18 @@ "node": ">=4" } }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, "node_modules/file-uri-to-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", @@ -2020,6 +2657,40 @@ "flat": "cli.js" } }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flat-cache/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/flatted": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", + "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", + "dev": true + }, "node_modules/from2": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", @@ -2079,6 +2750,18 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, "node_modules/gauge": { "version": "2.7.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", @@ -2104,11 +2787,19 @@ "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", - "dev": true + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/get-stream": { "version": "5.2.0", @@ -2193,6 +2884,50 @@ "node": ">= 6" } }, + "node_modules/globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "dependencies": { + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globals/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/globby": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.2.tgz", + "integrity": "sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/graceful-fs": { "version": "4.2.4", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", @@ -2237,6 +2972,18 @@ "node": ">=6" } }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -2246,6 +2993,18 @@ "node": ">=4" } }, + "node_modules/has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", @@ -2379,6 +3138,15 @@ "node": ">=8" } }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, "node_modules/indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", @@ -2413,6 +3181,20 @@ "node": "*" } }, + "node_modules/internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/interpret": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", @@ -2453,6 +3235,42 @@ "node": ">=8" } }, + "node_modules/is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -2492,6 +3310,18 @@ "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", "dev": true }, + "node_modules/is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -2501,15 +3331,6 @@ "node": ">=0.12.0" } }, - "node_modules/is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", @@ -2519,13 +3340,20 @@ "node": ">=0.10.0" } }, - "node_modules/is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", + "node_modules/is-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", + "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-stream": { @@ -2537,6 +3365,33 @@ "node": ">=8" } }, + "node_modules/is-string": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-text-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", @@ -2870,6 +3725,12 @@ "node": ">= 10.14.2" } }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, "node_modules/js-yaml": { "version": "3.14.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", @@ -2895,6 +3756,18 @@ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, "node_modules/json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", @@ -2935,6 +3808,19 @@ "node": "*" } }, + "node_modules/jsx-ast-utils": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz", + "integrity": "sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.2", + "object.assign": "^4.1.2" + }, + "engines": { + "node": ">=4.0" + } + }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -2944,228 +3830,25 @@ "node": ">=0.10.0" } }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/lines-and-columns": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", "dev": true }, - "node_modules/lint-staged": { - "version": "10.5.4", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-10.5.4.tgz", - "integrity": "sha512-EechC3DdFic/TdOPgj/RB3FicqE6932LTHCUm0Y2fsD9KGlLB+RwJl2q1IYBIvEsKzDOgn0D4gll+YxG5RsrKg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "cli-truncate": "^2.1.0", - "commander": "^6.2.0", - "cosmiconfig": "^7.0.0", - "debug": "^4.2.0", - "dedent": "^0.7.0", - "enquirer": "^2.3.6", - "execa": "^4.1.0", - "listr2": "^3.2.2", - "log-symbols": "^4.0.0", - "micromatch": "^4.0.2", - "normalize-path": "^3.0.0", - "please-upgrade-node": "^3.2.0", - "string-argv": "0.3.1", - "stringify-object": "^3.3.0" - }, - "bin": { - "lint-staged": "bin/lint-staged.js" - }, - "funding": { - "url": "https://opencollective.com/lint-staged" - } - }, - "node_modules/lint-staged/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/lint-staged/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/lint-staged/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/lint-staged/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/lint-staged/node_modules/commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/lint-staged/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/lint-staged/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/listr2": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.3.1.tgz", - "integrity": "sha512-8Zoxe7s/8nNr4bJ8bdAduHD8uJce+exmMmUWTXlq0WuUdffnH3muisHPHPFtW2vvOfohIsq7FGCaguUxN/h3Iw==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "cli-truncate": "^2.1.0", - "figures": "^3.2.0", - "indent-string": "^4.0.0", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rxjs": "^6.6.3", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "enquirer": ">= 2.3.0 < 3" - } - }, - "node_modules/listr2/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/listr2/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/listr2/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/listr2/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/listr2/node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/listr2/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/listr2/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/load-json-file": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", @@ -3194,9 +3877,9 @@ } }, "node_modules/lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, "node_modules/lodash.camelcase": { @@ -3329,130 +4012,16 @@ "node": ">=8" } }, - "node_modules/log-update": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, "dependencies": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" + "js-tokens": "^3.0.0 || ^4.0.0" }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/log-update/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/log-update/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/log-update/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/log-update/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/log-update/node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/log-update/node_modules/string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/log-update/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/log-update/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" + "bin": { + "loose-envify": "cli.js" } }, "node_modules/lru-cache": { @@ -3966,6 +4535,12 @@ "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", "dev": true }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, "node_modules/ncp": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ncp/-/ncp-1.0.1.tgz", @@ -4571,6 +5146,7 @@ }, "node_modules/npm/node_modules/abbrev": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true, "inBundle": true, @@ -4578,6 +5154,7 @@ }, "node_modules/npm/node_modules/agent-base": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", "dev": true, "inBundle": true, @@ -4591,6 +5168,7 @@ }, "node_modules/npm/node_modules/agentkeepalive": { "version": "3.5.2", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-3.5.2.tgz", "integrity": "sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ==", "dev": true, "inBundle": true, @@ -4604,6 +5182,7 @@ }, "node_modules/npm/node_modules/ansi-align": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", "dev": true, "inBundle": true, @@ -4614,6 +5193,7 @@ }, "node_modules/npm/node_modules/ansi-regex": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true, "inBundle": true, @@ -4624,6 +5204,7 @@ }, "node_modules/npm/node_modules/ansi-styles": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "inBundle": true, @@ -4637,6 +5218,7 @@ }, "node_modules/npm/node_modules/ansicolors": { "version": "0.3.2", + "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", "integrity": "sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk=", "dev": true, "inBundle": true, @@ -4644,6 +5226,7 @@ }, "node_modules/npm/node_modules/ansistyles": { "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ansistyles/-/ansistyles-0.1.3.tgz", "integrity": "sha1-XeYEFb2gcbs3EnhUyGT0GyMlRTk=", "dev": true, "inBundle": true, @@ -4651,6 +5234,7 @@ }, "node_modules/npm/node_modules/aproba": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", "dev": true, "inBundle": true, @@ -4658,6 +5242,7 @@ }, "node_modules/npm/node_modules/archy": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", "dev": true, "inBundle": true, @@ -4665,6 +5250,7 @@ }, "node_modules/npm/node_modules/are-we-there-yet": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", "dev": true, "inBundle": true, @@ -4676,6 +5262,7 @@ }, "node_modules/npm/node_modules/are-we-there-yet/node_modules/readable-stream": { "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "inBundle": true, @@ -4692,6 +5279,7 @@ }, "node_modules/npm/node_modules/are-we-there-yet/node_modules/string_decoder": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "inBundle": true, @@ -4702,6 +5290,7 @@ }, "node_modules/npm/node_modules/asap": { "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", "dev": true, "inBundle": true, @@ -4709,6 +5298,7 @@ }, "node_modules/npm/node_modules/asn1": { "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", "dev": true, "inBundle": true, @@ -4719,6 +5309,7 @@ }, "node_modules/npm/node_modules/assert-plus": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "dev": true, "inBundle": true, @@ -4729,6 +5320,7 @@ }, "node_modules/npm/node_modules/asynckit": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", "dev": true, "inBundle": true, @@ -4736,6 +5328,7 @@ }, "node_modules/npm/node_modules/aws-sign2": { "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", "dev": true, "inBundle": true, @@ -4746,6 +5339,7 @@ }, "node_modules/npm/node_modules/aws4": { "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", "dev": true, "inBundle": true, @@ -4753,6 +5347,7 @@ }, "node_modules/npm/node_modules/balanced-match": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true, "inBundle": true, @@ -4760,6 +5355,7 @@ }, "node_modules/npm/node_modules/bcrypt-pbkdf": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", "dev": true, "inBundle": true, @@ -4771,6 +5367,7 @@ }, "node_modules/npm/node_modules/bin-links": { "version": "1.1.8", + "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-1.1.8.tgz", "integrity": "sha512-KgmVfx+QqggqP9dA3iIc5pA4T1qEEEL+hOhOhNPaUm77OTrJoOXE/C05SJLNJe6m/2wUK7F1tDSou7n5TfCDzQ==", "dev": true, "inBundle": true, @@ -4786,6 +5383,7 @@ }, "node_modules/npm/node_modules/bluebird": { "version": "3.5.5", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz", "integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==", "dev": true, "inBundle": true, @@ -4793,6 +5391,7 @@ }, "node_modules/npm/node_modules/boxen": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", "dev": true, "inBundle": true, @@ -4812,6 +5411,7 @@ }, "node_modules/npm/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "inBundle": true, @@ -4823,6 +5423,7 @@ }, "node_modules/npm/node_modules/buffer-from": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz", "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==", "dev": true, "inBundle": true, @@ -4830,6 +5431,7 @@ }, "node_modules/npm/node_modules/builtins": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", "dev": true, "inBundle": true, @@ -4837,6 +5439,7 @@ }, "node_modules/npm/node_modules/byline": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz", "integrity": "sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE=", "dev": true, "inBundle": true, @@ -4847,6 +5450,7 @@ }, "node_modules/npm/node_modules/byte-size": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-5.0.1.tgz", "integrity": "sha512-/XuKeqWocKsYa/cBY1YbSJSWWqTi4cFgr9S6OyM7PBaPbr9zvNGwWP33vt0uqGhwDdN+y3yhbXVILEUpnwEWGw==", "dev": true, "inBundle": true, @@ -4857,6 +5461,7 @@ }, "node_modules/npm/node_modules/cacache": { "version": "12.0.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz", "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==", "dev": true, "inBundle": true, @@ -4881,6 +5486,7 @@ }, "node_modules/npm/node_modules/call-limit": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/call-limit/-/call-limit-1.1.1.tgz", "integrity": "sha512-5twvci5b9eRBw2wCfPtN0GmlR2/gadZqyFpPhOK6CvMFoFgA+USnZ6Jpu1lhG9h85pQ3Ouil3PfXWRD4EUaRiQ==", "dev": true, "inBundle": true, @@ -4888,6 +5494,7 @@ }, "node_modules/npm/node_modules/camelcase": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", "dev": true, "inBundle": true, @@ -4898,6 +5505,7 @@ }, "node_modules/npm/node_modules/capture-stack-trace": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz", "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=", "dev": true, "inBundle": true, @@ -4908,6 +5516,7 @@ }, "node_modules/npm/node_modules/caseless": { "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", "dev": true, "inBundle": true, @@ -4915,6 +5524,7 @@ }, "node_modules/npm/node_modules/chalk": { "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "dev": true, "inBundle": true, @@ -4930,6 +5540,7 @@ }, "node_modules/npm/node_modules/chownr": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", "dev": true, "inBundle": true, @@ -4937,6 +5548,7 @@ }, "node_modules/npm/node_modules/ci-info": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", "dev": true, "inBundle": true, @@ -4944,6 +5556,7 @@ }, "node_modules/npm/node_modules/cidr-regex": { "version": "2.0.10", + "resolved": "https://registry.npmjs.org/cidr-regex/-/cidr-regex-2.0.10.tgz", "integrity": "sha512-sB3ogMQXWvreNPbJUZMRApxuRYd+KoIo4RGQ81VatjmMW6WJPo+IJZ2846FGItr9VzKo5w7DXzijPLGtSd0N3Q==", "dev": true, "inBundle": true, @@ -4957,6 +5570,7 @@ }, "node_modules/npm/node_modules/cli-boxes": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", "dev": true, "inBundle": true, @@ -4967,6 +5581,7 @@ }, "node_modules/npm/node_modules/cli-columns": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/cli-columns/-/cli-columns-3.1.2.tgz", "integrity": "sha1-ZzLZcpee/CrkRKHwjgj6E5yWoY4=", "dev": true, "inBundle": true, @@ -4981,6 +5596,7 @@ }, "node_modules/npm/node_modules/cli-table3": { "version": "0.5.1", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", "dev": true, "inBundle": true, @@ -4998,6 +5614,7 @@ }, "node_modules/npm/node_modules/cliui": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "dev": true, "inBundle": true, @@ -5010,6 +5627,7 @@ }, "node_modules/npm/node_modules/cliui/node_modules/ansi-regex": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true, "inBundle": true, @@ -5020,6 +5638,7 @@ }, "node_modules/npm/node_modules/cliui/node_modules/is-fullwidth-code-point": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true, "inBundle": true, @@ -5030,6 +5649,7 @@ }, "node_modules/npm/node_modules/cliui/node_modules/string-width": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "inBundle": true, @@ -5045,6 +5665,7 @@ }, "node_modules/npm/node_modules/cliui/node_modules/strip-ansi": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "inBundle": true, @@ -5058,6 +5679,7 @@ }, "node_modules/npm/node_modules/clone": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", "dev": true, "inBundle": true, @@ -5068,6 +5690,7 @@ }, "node_modules/npm/node_modules/cmd-shim": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-3.0.3.tgz", "integrity": "sha512-DtGg+0xiFhQIntSBRzL2fRQBnmtAVwXIDo4Qq46HPpObYquxMaZS4sb82U9nH91qJrlosC1wa9gwr0QyL/HypA==", "dev": true, "inBundle": true, @@ -5079,6 +5702,7 @@ }, "node_modules/npm/node_modules/code-point-at": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "dev": true, "inBundle": true, @@ -5089,6 +5713,7 @@ }, "node_modules/npm/node_modules/color-convert": { "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", "dev": true, "inBundle": true, @@ -5099,6 +5724,7 @@ }, "node_modules/npm/node_modules/color-name": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true, "inBundle": true, @@ -5106,6 +5732,7 @@ }, "node_modules/npm/node_modules/colors": { "version": "1.3.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz", "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==", "dev": true, "inBundle": true, @@ -5117,6 +5744,7 @@ }, "node_modules/npm/node_modules/columnify": { "version": "1.5.4", + "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.5.4.tgz", "integrity": "sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs=", "dev": true, "inBundle": true, @@ -5128,6 +5756,7 @@ }, "node_modules/npm/node_modules/combined-stream": { "version": "1.0.6", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", "dev": true, "inBundle": true, @@ -5141,6 +5770,7 @@ }, "node_modules/npm/node_modules/concat-map": { "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true, "inBundle": true, @@ -5148,6 +5778,7 @@ }, "node_modules/npm/node_modules/concat-stream": { "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "engines": [ @@ -5164,6 +5795,7 @@ }, "node_modules/npm/node_modules/concat-stream/node_modules/readable-stream": { "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "inBundle": true, @@ -5180,6 +5812,7 @@ }, "node_modules/npm/node_modules/concat-stream/node_modules/string_decoder": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "inBundle": true, @@ -5190,6 +5823,7 @@ }, "node_modules/npm/node_modules/config-chain": { "version": "1.1.12", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", "dev": true, "inBundle": true, @@ -5200,6 +5834,7 @@ }, "node_modules/npm/node_modules/configstore": { "version": "3.1.5", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.5.tgz", "integrity": "sha512-nlOhI4+fdzoK5xmJ+NY+1gZK56bwEaWZr8fYuXohZ9Vkc1o3a4T/R3M+yE/w7x/ZVJ1zF8c+oaOvF0dztdUgmA==", "dev": true, "inBundle": true, @@ -5218,6 +5853,7 @@ }, "node_modules/npm/node_modules/console-control-strings": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", "dev": true, "inBundle": true, @@ -5225,6 +5861,7 @@ }, "node_modules/npm/node_modules/copy-concurrently": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", "dev": true, "inBundle": true, @@ -5240,6 +5877,7 @@ }, "node_modules/npm/node_modules/copy-concurrently/node_modules/aproba": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "dev": true, "inBundle": true, @@ -5247,6 +5885,7 @@ }, "node_modules/npm/node_modules/copy-concurrently/node_modules/iferr": { "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", "dev": true, "inBundle": true, @@ -5254,6 +5893,7 @@ }, "node_modules/npm/node_modules/core-util-is": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true, "inBundle": true, @@ -5261,6 +5901,7 @@ }, "node_modules/npm/node_modules/create-error-class": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", "dev": true, "inBundle": true, @@ -5274,6 +5915,7 @@ }, "node_modules/npm/node_modules/cross-spawn": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "dev": true, "inBundle": true, @@ -5286,6 +5928,7 @@ }, "node_modules/npm/node_modules/cross-spawn/node_modules/lru-cache": { "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "dev": true, "inBundle": true, @@ -5297,6 +5940,7 @@ }, "node_modules/npm/node_modules/cross-spawn/node_modules/yallist": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", "dev": true, "inBundle": true, @@ -5304,6 +5948,7 @@ }, "node_modules/npm/node_modules/crypto-random-string": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", "dev": true, "inBundle": true, @@ -5314,12 +5959,14 @@ }, "node_modules/npm/node_modules/cyclist": { "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", "dev": true, "inBundle": true }, "node_modules/npm/node_modules/dashdash": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "dev": true, "inBundle": true, @@ -5333,6 +5980,7 @@ }, "node_modules/npm/node_modules/debug": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "dev": true, "inBundle": true, @@ -5343,6 +5991,7 @@ }, "node_modules/npm/node_modules/debug/node_modules/ms": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true, "inBundle": true, @@ -5350,6 +5999,7 @@ }, "node_modules/npm/node_modules/debuglog": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", "integrity": "sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=", "dev": true, "inBundle": true, @@ -5360,6 +6010,7 @@ }, "node_modules/npm/node_modules/decamelize": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true, "inBundle": true, @@ -5370,6 +6021,7 @@ }, "node_modules/npm/node_modules/decode-uri-component": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "dev": true, "inBundle": true, @@ -5380,6 +6032,7 @@ }, "node_modules/npm/node_modules/deep-extend": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true, "inBundle": true, @@ -5390,6 +6043,7 @@ }, "node_modules/npm/node_modules/defaults": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", "dev": true, "inBundle": true, @@ -5400,6 +6054,7 @@ }, "node_modules/npm/node_modules/define-properties": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dev": true, "inBundle": true, @@ -5413,6 +6068,7 @@ }, "node_modules/npm/node_modules/delayed-stream": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "dev": true, "inBundle": true, @@ -5423,6 +6079,7 @@ }, "node_modules/npm/node_modules/delegates": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", "dev": true, "inBundle": true, @@ -5430,6 +6087,7 @@ }, "node_modules/npm/node_modules/detect-indent": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", "integrity": "sha1-OHHMCmoALow+Wzz38zYmRnXwa50=", "dev": true, "inBundle": true, @@ -5440,6 +6098,7 @@ }, "node_modules/npm/node_modules/detect-newline": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=", "dev": true, "inBundle": true, @@ -5450,6 +6109,7 @@ }, "node_modules/npm/node_modules/dezalgo": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=", "dev": true, "inBundle": true, @@ -5461,6 +6121,7 @@ }, "node_modules/npm/node_modules/dot-prop": { "version": "4.2.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.1.tgz", "integrity": "sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==", "dev": true, "inBundle": true, @@ -5474,6 +6135,7 @@ }, "node_modules/npm/node_modules/dotenv": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-5.0.1.tgz", "integrity": "sha512-4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow==", "dev": true, "inBundle": true, @@ -5484,6 +6146,7 @@ }, "node_modules/npm/node_modules/duplexer3": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", "dev": true, "inBundle": true, @@ -5491,6 +6154,7 @@ }, "node_modules/npm/node_modules/duplexify": { "version": "3.6.0", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.0.tgz", "integrity": "sha512-fO3Di4tBKJpYTFHAxTU00BcfWMY9w24r/x21a6rZRbsD/ToUgGxsMbiGRmB7uVAXeGKXD9MwiLZa5E97EVgIRQ==", "dev": true, "inBundle": true, @@ -5504,6 +6168,7 @@ }, "node_modules/npm/node_modules/duplexify/node_modules/readable-stream": { "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "inBundle": true, @@ -5520,6 +6185,7 @@ }, "node_modules/npm/node_modules/duplexify/node_modules/string_decoder": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "inBundle": true, @@ -5530,6 +6196,7 @@ }, "node_modules/npm/node_modules/ecc-jsbn": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", "dev": true, "inBundle": true, @@ -5542,6 +6209,7 @@ }, "node_modules/npm/node_modules/editor": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/editor/-/editor-1.0.0.tgz", "integrity": "sha1-YMf4e9YrzGqJT6jM1q+3gjok90I=", "dev": true, "inBundle": true, @@ -5549,6 +6217,7 @@ }, "node_modules/npm/node_modules/emoji-regex": { "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true, "inBundle": true, @@ -5556,6 +6225,7 @@ }, "node_modules/npm/node_modules/encoding": { "version": "0.1.12", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", "dev": true, "inBundle": true, @@ -5566,6 +6236,7 @@ }, "node_modules/npm/node_modules/end-of-stream": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", "dev": true, "inBundle": true, @@ -5576,6 +6247,7 @@ }, "node_modules/npm/node_modules/env-paths": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.0.tgz", "integrity": "sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA==", "dev": true, "inBundle": true, @@ -5586,6 +6258,7 @@ }, "node_modules/npm/node_modules/err-code": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-1.1.2.tgz", "integrity": "sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA=", "dev": true, "inBundle": true, @@ -5593,6 +6266,7 @@ }, "node_modules/npm/node_modules/errno": { "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", "dev": true, "inBundle": true, @@ -5606,6 +6280,7 @@ }, "node_modules/npm/node_modules/es-abstract": { "version": "1.12.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz", "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", "dev": true, "inBundle": true, @@ -5623,6 +6298,7 @@ }, "node_modules/npm/node_modules/es-to-primitive": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", "dev": true, "inBundle": true, @@ -5638,6 +6314,7 @@ }, "node_modules/npm/node_modules/es6-promise": { "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", "dev": true, "inBundle": true, @@ -5645,6 +6322,7 @@ }, "node_modules/npm/node_modules/es6-promisify": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", "dev": true, "inBundle": true, @@ -5655,6 +6333,7 @@ }, "node_modules/npm/node_modules/escape-string-regexp": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true, "inBundle": true, @@ -5665,6 +6344,7 @@ }, "node_modules/npm/node_modules/execa": { "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", "dev": true, "inBundle": true, @@ -5684,6 +6364,7 @@ }, "node_modules/npm/node_modules/execa/node_modules/get-stream": { "version": "3.0.0", + "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", "dev": true, "inBundle": true, @@ -5694,6 +6375,7 @@ }, "node_modules/npm/node_modules/extend": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "dev": true, "inBundle": true, @@ -5701,6 +6383,7 @@ }, "node_modules/npm/node_modules/extsprintf": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", "dev": true, "engines": [ @@ -5711,6 +6394,7 @@ }, "node_modules/npm/node_modules/fast-json-stable-stringify": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", "dev": true, "inBundle": true, @@ -5718,6 +6402,7 @@ }, "node_modules/npm/node_modules/figgy-pudding": { "version": "3.5.1", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==", "dev": true, "inBundle": true, @@ -5725,6 +6410,7 @@ }, "node_modules/npm/node_modules/find-npm-prefix": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/find-npm-prefix/-/find-npm-prefix-1.0.2.tgz", "integrity": "sha512-KEftzJ+H90x6pcKtdXZEPsQse8/y/UnvzRKrOSQFprnrGaFuJ62fVkP34Iu2IYuMvyauCyoLTNkJZgrrGA2wkA==", "dev": true, "inBundle": true, @@ -5732,6 +6418,7 @@ }, "node_modules/npm/node_modules/flush-write-stream": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", "dev": true, "inBundle": true, @@ -5743,6 +6430,7 @@ }, "node_modules/npm/node_modules/flush-write-stream/node_modules/readable-stream": { "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "inBundle": true, @@ -5759,6 +6447,7 @@ }, "node_modules/npm/node_modules/flush-write-stream/node_modules/string_decoder": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "inBundle": true, @@ -5769,6 +6458,7 @@ }, "node_modules/npm/node_modules/forever-agent": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", "dev": true, "inBundle": true, @@ -5779,6 +6469,7 @@ }, "node_modules/npm/node_modules/form-data": { "version": "2.3.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", "dev": true, "inBundle": true, @@ -5794,6 +6485,7 @@ }, "node_modules/npm/node_modules/from2": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", "dev": true, "inBundle": true, @@ -5805,6 +6497,7 @@ }, "node_modules/npm/node_modules/from2/node_modules/readable-stream": { "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "inBundle": true, @@ -5821,6 +6514,7 @@ }, "node_modules/npm/node_modules/from2/node_modules/string_decoder": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "inBundle": true, @@ -5831,6 +6525,7 @@ }, "node_modules/npm/node_modules/fs-minipass": { "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", "dev": true, "inBundle": true, @@ -5841,6 +6536,7 @@ }, "node_modules/npm/node_modules/fs-minipass/node_modules/minipass": { "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", "dev": true, "inBundle": true, @@ -5852,6 +6548,7 @@ }, "node_modules/npm/node_modules/fs-vacuum": { "version": "1.2.10", + "resolved": "https://registry.npmjs.org/fs-vacuum/-/fs-vacuum-1.2.10.tgz", "integrity": "sha1-t2Kb7AekAxolSP35n17PHMizHjY=", "dev": true, "inBundle": true, @@ -5864,6 +6561,7 @@ }, "node_modules/npm/node_modules/fs-write-stream-atomic": { "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", "dev": true, "inBundle": true, @@ -5877,6 +6575,7 @@ }, "node_modules/npm/node_modules/fs-write-stream-atomic/node_modules/iferr": { "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", "dev": true, "inBundle": true, @@ -5884,6 +6583,7 @@ }, "node_modules/npm/node_modules/fs-write-stream-atomic/node_modules/readable-stream": { "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "inBundle": true, @@ -5900,6 +6600,7 @@ }, "node_modules/npm/node_modules/fs-write-stream-atomic/node_modules/string_decoder": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "inBundle": true, @@ -5910,6 +6611,7 @@ }, "node_modules/npm/node_modules/fs.realpath": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true, "inBundle": true, @@ -5917,6 +6619,7 @@ }, "node_modules/npm/node_modules/function-bind": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true, "inBundle": true, @@ -5924,6 +6627,7 @@ }, "node_modules/npm/node_modules/gauge": { "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "dev": true, "inBundle": true, @@ -5941,6 +6645,7 @@ }, "node_modules/npm/node_modules/gauge/node_modules/aproba": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "dev": true, "inBundle": true, @@ -5948,6 +6653,7 @@ }, "node_modules/npm/node_modules/gauge/node_modules/string-width": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "inBundle": true, @@ -5963,6 +6669,7 @@ }, "node_modules/npm/node_modules/genfun": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/genfun/-/genfun-5.0.0.tgz", "integrity": "sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA==", "dev": true, "inBundle": true, @@ -5970,6 +6677,7 @@ }, "node_modules/npm/node_modules/gentle-fs": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/gentle-fs/-/gentle-fs-2.3.1.tgz", "integrity": "sha512-OlwBBwqCFPcjm33rF2BjW+Pr6/ll2741l+xooiwTCeaX2CA1ZuclavyMBe0/KlR21/XGsgY6hzEQZ15BdNa13Q==", "dev": true, "inBundle": true, @@ -5990,6 +6698,7 @@ }, "node_modules/npm/node_modules/gentle-fs/node_modules/aproba": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "dev": true, "inBundle": true, @@ -5997,6 +6706,7 @@ }, "node_modules/npm/node_modules/gentle-fs/node_modules/iferr": { "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", "dev": true, "inBundle": true, @@ -6004,6 +6714,7 @@ }, "node_modules/npm/node_modules/get-caller-file": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, "inBundle": true, @@ -6014,6 +6725,7 @@ }, "node_modules/npm/node_modules/get-stream": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "dev": true, "inBundle": true, @@ -6027,6 +6739,7 @@ }, "node_modules/npm/node_modules/getpass": { "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "dev": true, "inBundle": true, @@ -6037,6 +6750,7 @@ }, "node_modules/npm/node_modules/glob": { "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dev": true, "inBundle": true, @@ -6058,6 +6772,7 @@ }, "node_modules/npm/node_modules/global-dirs": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", "dev": true, "inBundle": true, @@ -6071,6 +6786,7 @@ }, "node_modules/npm/node_modules/got": { "version": "6.7.1", + "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", "dev": true, "inBundle": true, @@ -6094,6 +6810,7 @@ }, "node_modules/npm/node_modules/got/node_modules/get-stream": { "version": "3.0.0", + "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", "dev": true, "inBundle": true, @@ -6104,6 +6821,7 @@ }, "node_modules/npm/node_modules/graceful-fs": { "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", "dev": true, "inBundle": true, @@ -6111,6 +6829,7 @@ }, "node_modules/npm/node_modules/har-schema": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", "dev": true, "inBundle": true, @@ -6121,6 +6840,7 @@ }, "node_modules/npm/node_modules/har-validator": { "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", "deprecated": "this library is no longer supported", "dev": true, @@ -6136,6 +6856,7 @@ }, "node_modules/npm/node_modules/har-validator/node_modules/ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "inBundle": true, @@ -6153,6 +6874,7 @@ }, "node_modules/npm/node_modules/har-validator/node_modules/fast-deep-equal": { "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true, "inBundle": true, @@ -6160,6 +6882,7 @@ }, "node_modules/npm/node_modules/har-validator/node_modules/json-schema-traverse": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true, "inBundle": true, @@ -6167,6 +6890,7 @@ }, "node_modules/npm/node_modules/has": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "inBundle": true, @@ -6180,6 +6904,7 @@ }, "node_modules/npm/node_modules/has-flag": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true, "inBundle": true, @@ -6190,6 +6915,7 @@ }, "node_modules/npm/node_modules/has-symbols": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", "dev": true, "inBundle": true, @@ -6200,6 +6926,7 @@ }, "node_modules/npm/node_modules/has-unicode": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", "dev": true, "inBundle": true, @@ -6207,6 +6934,7 @@ }, "node_modules/npm/node_modules/hosted-git-info": { "version": "2.8.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", "dev": true, "inBundle": true, @@ -6214,6 +6942,7 @@ }, "node_modules/npm/node_modules/http-cache-semantics": { "version": "3.8.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", "dev": true, "inBundle": true, @@ -6221,6 +6950,7 @@ }, "node_modules/npm/node_modules/http-proxy-agent": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", "dev": true, "inBundle": true, @@ -6235,6 +6965,7 @@ }, "node_modules/npm/node_modules/http-signature": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "dev": true, "inBundle": true, @@ -6251,6 +6982,7 @@ }, "node_modules/npm/node_modules/https-proxy-agent": { "version": "2.2.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", "dev": true, "inBundle": true, @@ -6265,6 +6997,7 @@ }, "node_modules/npm/node_modules/humanize-ms": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", "dev": true, "inBundle": true, @@ -6275,6 +7008,7 @@ }, "node_modules/npm/node_modules/iconv-lite": { "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", "dev": true, "inBundle": true, @@ -6288,6 +7022,7 @@ }, "node_modules/npm/node_modules/iferr": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-1.0.2.tgz", "integrity": "sha512-9AfeLfji44r5TKInjhz3W9DyZI1zR1JAf2hVBMGhddAKPqBsupb89jGfbCTHIGZd6fGZl9WlHdn4AObygyMKwg==", "dev": true, "inBundle": true, @@ -6298,6 +7033,7 @@ }, "node_modules/npm/node_modules/ignore-walk": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", "dev": true, "inBundle": true, @@ -6308,6 +7044,7 @@ }, "node_modules/npm/node_modules/import-lazy": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", "dev": true, "inBundle": true, @@ -6318,6 +7055,7 @@ }, "node_modules/npm/node_modules/imurmurhash": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true, "inBundle": true, @@ -6328,6 +7066,7 @@ }, "node_modules/npm/node_modules/infer-owner": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", "dev": true, "inBundle": true, @@ -6335,6 +7074,7 @@ }, "node_modules/npm/node_modules/inflight": { "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "inBundle": true, @@ -6346,6 +7086,7 @@ }, "node_modules/npm/node_modules/inherits": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true, "inBundle": true, @@ -6361,6 +7102,7 @@ }, "node_modules/npm/node_modules/init-package-json": { "version": "1.10.3", + "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-1.10.3.tgz", "integrity": "sha512-zKSiXKhQveNteyhcj1CoOP8tqp1QuxPIPBl8Bid99DGLFqA1p87M6lNgfjJHSBoWJJlidGOv5rWjyYKEB3g2Jw==", "dev": true, "inBundle": true, @@ -6378,6 +7120,7 @@ }, "node_modules/npm/node_modules/ip": { "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", "dev": true, "inBundle": true, @@ -6385,6 +7128,7 @@ }, "node_modules/npm/node_modules/ip-regex": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", "dev": true, "inBundle": true, @@ -6395,6 +7139,7 @@ }, "node_modules/npm/node_modules/is-callable": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", "dev": true, "inBundle": true, @@ -6405,6 +7150,7 @@ }, "node_modules/npm/node_modules/is-ci": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", "dev": true, "inBundle": true, @@ -6418,6 +7164,7 @@ }, "node_modules/npm/node_modules/is-ci/node_modules/ci-info": { "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", "dev": true, "inBundle": true, @@ -6425,6 +7172,7 @@ }, "node_modules/npm/node_modules/is-cidr": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-cidr/-/is-cidr-3.0.0.tgz", "integrity": "sha512-8Xnnbjsb0x462VoYiGlhEi+drY8SFwrHiSYuzc/CEwco55vkehTaxAyIjEdpi3EMvLPPJAJi9FlzP+h+03gp0Q==", "dev": true, "inBundle": true, @@ -6438,6 +7186,7 @@ }, "node_modules/npm/node_modules/is-date-object": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", "dev": true, "inBundle": true, @@ -6448,6 +7197,7 @@ }, "node_modules/npm/node_modules/is-fullwidth-code-point": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "inBundle": true, @@ -6461,6 +7211,7 @@ }, "node_modules/npm/node_modules/is-installed-globally": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", "dev": true, "inBundle": true, @@ -6475,6 +7226,7 @@ }, "node_modules/npm/node_modules/is-npm": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", "dev": true, "inBundle": true, @@ -6485,6 +7237,7 @@ }, "node_modules/npm/node_modules/is-obj": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", "dev": true, "inBundle": true, @@ -6495,6 +7248,7 @@ }, "node_modules/npm/node_modules/is-path-inside": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", "dev": true, "inBundle": true, @@ -6508,6 +7262,7 @@ }, "node_modules/npm/node_modules/is-redirect": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", "dev": true, "inBundle": true, @@ -6518,6 +7273,7 @@ }, "node_modules/npm/node_modules/is-regex": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", "dev": true, "inBundle": true, @@ -6531,6 +7287,7 @@ }, "node_modules/npm/node_modules/is-retry-allowed": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", "dev": true, "inBundle": true, @@ -6541,6 +7298,7 @@ }, "node_modules/npm/node_modules/is-stream": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true, "inBundle": true, @@ -6551,6 +7309,7 @@ }, "node_modules/npm/node_modules/is-symbol": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", "dev": true, "inBundle": true, @@ -6564,6 +7323,7 @@ }, "node_modules/npm/node_modules/is-typedarray": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true, "inBundle": true, @@ -6571,6 +7331,7 @@ }, "node_modules/npm/node_modules/isarray": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true, "inBundle": true, @@ -6578,6 +7339,7 @@ }, "node_modules/npm/node_modules/isexe": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true, "inBundle": true, @@ -6585,6 +7347,7 @@ }, "node_modules/npm/node_modules/isstream": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", "dev": true, "inBundle": true, @@ -6592,6 +7355,7 @@ }, "node_modules/npm/node_modules/jsbn": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", "dev": true, "inBundle": true, @@ -6600,6 +7364,7 @@ }, "node_modules/npm/node_modules/json-parse-better-errors": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true, "inBundle": true, @@ -6607,12 +7372,14 @@ }, "node_modules/npm/node_modules/json-schema": { "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", "dev": true, "inBundle": true }, "node_modules/npm/node_modules/json-stringify-safe": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", "dev": true, "inBundle": true, @@ -6620,6 +7387,7 @@ }, "node_modules/npm/node_modules/jsonparse": { "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", "dev": true, "engines": [ @@ -6630,6 +7398,7 @@ }, "node_modules/npm/node_modules/JSONStream": { "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", "dev": true, "inBundle": true, @@ -6647,6 +7416,7 @@ }, "node_modules/npm/node_modules/jsprim": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", "dev": true, "engines": [ @@ -6663,6 +7433,7 @@ }, "node_modules/npm/node_modules/latest-version": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", "dev": true, "inBundle": true, @@ -6676,6 +7447,7 @@ }, "node_modules/npm/node_modules/lazy-property": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lazy-property/-/lazy-property-1.0.0.tgz", "integrity": "sha1-hN3Es3Bnm6i9TNz6TAa0PVcREUc=", "dev": true, "inBundle": true, @@ -6683,6 +7455,7 @@ }, "node_modules/npm/node_modules/libcipm": { "version": "4.0.8", + "resolved": "https://registry.npmjs.org/libcipm/-/libcipm-4.0.8.tgz", "integrity": "sha512-IN3hh2yDJQtZZ5paSV4fbvJg4aHxCCg5tcZID/dSVlTuUiWktsgaldVljJv6Z5OUlYspx6xQkbR0efNodnIrOA==", "dev": true, "inBundle": true, @@ -6707,6 +7480,7 @@ }, "node_modules/npm/node_modules/libnpm": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/libnpm/-/libnpm-3.0.1.tgz", "integrity": "sha512-d7jU5ZcMiTfBqTUJVZ3xid44fE5ERBm9vBnmhp2ECD2Ls+FNXWxHSkO7gtvrnbLO78gwPdNPz1HpsF3W4rjkBQ==", "dev": true, "inBundle": true, @@ -6736,6 +7510,7 @@ }, "node_modules/npm/node_modules/libnpmaccess": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-3.0.2.tgz", "integrity": "sha512-01512AK7MqByrI2mfC7h5j8N9V4I7MHJuk9buo8Gv+5QgThpOgpjB7sQBDDkeZqRteFb1QM/6YNdHfG7cDvfAQ==", "dev": true, "inBundle": true, @@ -6749,6 +7524,7 @@ }, "node_modules/npm/node_modules/libnpmconfig": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/libnpmconfig/-/libnpmconfig-1.2.1.tgz", "integrity": "sha512-9esX8rTQAHqarx6qeZqmGQKBNZR5OIbl/Ayr0qQDy3oXja2iFVQQI81R6GZ2a02bSNZ9p3YOGX1O6HHCb1X7kA==", "dev": true, "inBundle": true, @@ -6761,6 +7537,7 @@ }, "node_modules/npm/node_modules/libnpmconfig/node_modules/find-up": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "inBundle": true, @@ -6774,6 +7551,7 @@ }, "node_modules/npm/node_modules/libnpmconfig/node_modules/locate-path": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "inBundle": true, @@ -6788,6 +7566,7 @@ }, "node_modules/npm/node_modules/libnpmconfig/node_modules/p-limit": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", "dev": true, "inBundle": true, @@ -6801,6 +7580,7 @@ }, "node_modules/npm/node_modules/libnpmconfig/node_modules/p-locate": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "inBundle": true, @@ -6814,6 +7594,7 @@ }, "node_modules/npm/node_modules/libnpmconfig/node_modules/p-try": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, "inBundle": true, @@ -6824,6 +7605,7 @@ }, "node_modules/npm/node_modules/libnpmhook": { "version": "5.0.3", + "resolved": "https://registry.npmjs.org/libnpmhook/-/libnpmhook-5.0.3.tgz", "integrity": "sha512-UdNLMuefVZra/wbnBXECZPefHMGsVDTq5zaM/LgKNE9Keyl5YXQTnGAzEo+nFOpdRqTWI9LYi4ApqF9uVCCtuA==", "dev": true, "inBundle": true, @@ -6837,6 +7619,7 @@ }, "node_modules/npm/node_modules/libnpmorg": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/libnpmorg/-/libnpmorg-1.0.1.tgz", "integrity": "sha512-0sRUXLh+PLBgZmARvthhYXQAWn0fOsa6T5l3JSe2n9vKG/lCVK4nuG7pDsa7uMq+uTt2epdPK+a2g6btcY11Ww==", "dev": true, "inBundle": true, @@ -6850,6 +7633,7 @@ }, "node_modules/npm/node_modules/libnpmpublish": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-1.1.2.tgz", "integrity": "sha512-2yIwaXrhTTcF7bkJKIKmaCV9wZOALf/gsTDxVSu/Gu/6wiG3fA8ce8YKstiWKTxSFNC0R7isPUb6tXTVFZHt2g==", "dev": true, "inBundle": true, @@ -6868,6 +7652,7 @@ }, "node_modules/npm/node_modules/libnpmsearch": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/libnpmsearch/-/libnpmsearch-2.0.2.tgz", "integrity": "sha512-VTBbV55Q6fRzTdzziYCr64+f8AopQ1YZ+BdPOv16UegIEaE8C0Kch01wo4s3kRTFV64P121WZJwgmBwrq68zYg==", "dev": true, "inBundle": true, @@ -6880,6 +7665,7 @@ }, "node_modules/npm/node_modules/libnpmteam": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/libnpmteam/-/libnpmteam-1.0.2.tgz", "integrity": "sha512-p420vM28Us04NAcg1rzgGW63LMM6rwe+6rtZpfDxCcXxM0zUTLl7nPFEnRF3JfFBF5skF/yuZDUthTsHgde8QA==", "dev": true, "inBundle": true, @@ -6893,6 +7679,7 @@ }, "node_modules/npm/node_modules/libnpx": { "version": "10.2.4", + "resolved": "https://registry.npmjs.org/libnpx/-/libnpx-10.2.4.tgz", "integrity": "sha512-BPc0D1cOjBeS8VIBKUu5F80s6njm0wbVt7CsGMrIcJ+SI7pi7V0uVPGpEMH9H5L8csOcclTxAXFE2VAsJXUhfA==", "dev": true, "inBundle": true, @@ -6913,6 +7700,7 @@ }, "node_modules/npm/node_modules/lock-verify": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lock-verify/-/lock-verify-2.1.0.tgz", "integrity": "sha512-vcLpxnGvrqisKvLQ2C2v0/u7LVly17ak2YSgoK4PrdsYBXQIax19vhKiLfvKNFx7FRrpTnitrpzF/uuCMuorIg==", "dev": true, "inBundle": true, @@ -6924,6 +7712,7 @@ }, "node_modules/npm/node_modules/lockfile": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lockfile/-/lockfile-1.0.4.tgz", "integrity": "sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA==", "dev": true, "inBundle": true, @@ -6934,13 +7723,15 @@ }, "node_modules/npm/node_modules/lodash._baseindexof": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash._baseindexof/-/lodash._baseindexof-3.1.0.tgz", "integrity": "sha1-/lK1OhxnYeQmGNZU5KJXie1hgiw=", - "dev": true, + "extraneous": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/lodash._baseuniq": { "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash._baseuniq/-/lodash._baseuniq-4.6.0.tgz", "integrity": "sha1-DrtE5FaBSveQXGIS+iybLVG4Qeg=", "dev": true, "inBundle": true, @@ -6952,22 +7743,25 @@ }, "node_modules/npm/node_modules/lodash._bindcallback": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz", "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=", - "dev": true, + "extraneous": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/lodash._cacheindexof": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/lodash._cacheindexof/-/lodash._cacheindexof-3.0.2.tgz", "integrity": "sha1-PcaayCSY0u5ePOVgkbr9Ktx73pI=", - "dev": true, + "extraneous": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/lodash._createcache": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lodash._createcache/-/lodash._createcache-3.1.2.tgz", "integrity": "sha1-VtagZAF2JeeevKa4AY4XRAvc8JM=", - "dev": true, + "extraneous": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6976,6 +7770,7 @@ }, "node_modules/npm/node_modules/lodash._createset": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/lodash._createset/-/lodash._createset-4.0.3.tgz", "integrity": "sha1-D0ZZ+7CddRlPqeK4imZE02PJ/iY=", "dev": true, "inBundle": true, @@ -6983,13 +7778,15 @@ }, "node_modules/npm/node_modules/lodash._getnative": { "version": "3.9.1", + "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", - "dev": true, + "extraneous": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/lodash._root": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=", "dev": true, "inBundle": true, @@ -6997,6 +7794,7 @@ }, "node_modules/npm/node_modules/lodash.clonedeep": { "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", "dev": true, "inBundle": true, @@ -7004,13 +7802,15 @@ }, "node_modules/npm/node_modules/lodash.restparam": { "version": "3.6.1", + "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", - "dev": true, + "extraneous": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/lodash.union": { "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=", "dev": true, "inBundle": true, @@ -7018,6 +7818,7 @@ }, "node_modules/npm/node_modules/lodash.uniq": { "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", "dev": true, "inBundle": true, @@ -7025,6 +7826,7 @@ }, "node_modules/npm/node_modules/lodash.without": { "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.without/-/lodash.without-4.4.0.tgz", "integrity": "sha1-PNRXSgC2e643OpS3SHcmQFB7eqw=", "dev": true, "inBundle": true, @@ -7032,6 +7834,7 @@ }, "node_modules/npm/node_modules/lowercase-keys": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", "dev": true, "inBundle": true, @@ -7042,6 +7845,7 @@ }, "node_modules/npm/node_modules/lru-cache": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, "inBundle": true, @@ -7052,6 +7856,7 @@ }, "node_modules/npm/node_modules/make-dir": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", "dev": true, "inBundle": true, @@ -7065,6 +7870,7 @@ }, "node_modules/npm/node_modules/make-fetch-happen": { "version": "5.0.2", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-5.0.2.tgz", "integrity": "sha512-07JHC0r1ykIoruKO8ifMXu+xEU8qOXDFETylktdug6vJDACnP+HKevOu3PXyNPzFyTSlz8vrBYlBO1JZRe8Cag==", "dev": true, "inBundle": true, @@ -7085,6 +7891,7 @@ }, "node_modules/npm/node_modules/meant": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/meant/-/meant-1.0.2.tgz", "integrity": "sha512-KN+1uowN/NK+sT/Lzx7WSGIj2u+3xe5n2LbwObfjOhPZiA+cCfCm6idVl0RkEfjThkw5XJ96CyRcanq6GmKtUg==", "dev": true, "inBundle": true, @@ -7092,6 +7899,7 @@ }, "node_modules/npm/node_modules/mime-db": { "version": "1.35.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz", "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==", "dev": true, "inBundle": true, @@ -7102,6 +7910,7 @@ }, "node_modules/npm/node_modules/mime-types": { "version": "2.1.19", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz", "integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==", "dev": true, "inBundle": true, @@ -7115,6 +7924,7 @@ }, "node_modules/npm/node_modules/minimatch": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "inBundle": true, @@ -7128,6 +7938,7 @@ }, "node_modules/npm/node_modules/minimist": { "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true, "inBundle": true, @@ -7135,6 +7946,7 @@ }, "node_modules/npm/node_modules/minizlib": { "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", "dev": true, "inBundle": true, @@ -7145,6 +7957,7 @@ }, "node_modules/npm/node_modules/minizlib/node_modules/minipass": { "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", "dev": true, "inBundle": true, @@ -7156,6 +7969,7 @@ }, "node_modules/npm/node_modules/mississippi": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", "dev": true, "inBundle": true, @@ -7178,6 +7992,7 @@ }, "node_modules/npm/node_modules/mkdirp": { "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "inBundle": true, @@ -7191,6 +8006,7 @@ }, "node_modules/npm/node_modules/mkdirp/node_modules/minimist": { "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true, "inBundle": true, @@ -7198,6 +8014,7 @@ }, "node_modules/npm/node_modules/move-concurrently": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", "dev": true, "inBundle": true, @@ -7213,6 +8030,7 @@ }, "node_modules/npm/node_modules/move-concurrently/node_modules/aproba": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "dev": true, "inBundle": true, @@ -7220,6 +8038,7 @@ }, "node_modules/npm/node_modules/ms": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", "dev": true, "inBundle": true, @@ -7227,6 +8046,7 @@ }, "node_modules/npm/node_modules/mute-stream": { "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", "dev": true, "inBundle": true, @@ -7234,6 +8054,7 @@ }, "node_modules/npm/node_modules/node-fetch-npm": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-fetch-npm/-/node-fetch-npm-2.0.2.tgz", "integrity": "sha512-nJIxm1QmAj4v3nfCvEeCrYSoVwXyxLnaPBK5W1W5DGEJwjlKuC2VEUycGw5oxk+4zZahRrB84PUJJgEmhFTDFw==", "dev": true, "inBundle": true, @@ -7249,6 +8070,7 @@ }, "node_modules/npm/node_modules/node-gyp": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-5.1.0.tgz", "integrity": "sha512-OUTryc5bt/P8zVgNUmC6xdXiDJxLMAW8cF5tLQOT9E5sOQj+UeQxnnPy74K3CLCa/SOjjBlbuzDLR8ANwA+wmw==", "dev": true, "inBundle": true, @@ -7275,6 +8097,7 @@ }, "node_modules/npm/node_modules/nopt": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", "dev": true, "inBundle": true, @@ -7289,6 +8112,7 @@ }, "node_modules/npm/node_modules/normalize-package-data": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "inBundle": true, @@ -7302,6 +8126,7 @@ }, "node_modules/npm/node_modules/normalize-package-data/node_modules/resolve": { "version": "1.10.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", "dev": true, "inBundle": true, @@ -7312,6 +8137,7 @@ }, "node_modules/npm/node_modules/npm-audit-report": { "version": "1.3.3", + "resolved": "https://registry.npmjs.org/npm-audit-report/-/npm-audit-report-1.3.3.tgz", "integrity": "sha512-8nH/JjsFfAWMvn474HB9mpmMjrnKb1Hx/oTAdjv4PT9iZBvBxiZ+wtDUapHCJwLqYGQVPaAfs+vL5+5k9QndXw==", "dev": true, "inBundle": true, @@ -7323,6 +8149,7 @@ }, "node_modules/npm/node_modules/npm-bundled": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz", "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", "dev": true, "inBundle": true, @@ -7333,6 +8160,7 @@ }, "node_modules/npm/node_modules/npm-cache-filename": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/npm-cache-filename/-/npm-cache-filename-1.0.2.tgz", "integrity": "sha1-3tMGxbC/yHCp6fr4I7xfKD4FrhE=", "dev": true, "inBundle": true, @@ -7340,6 +8168,7 @@ }, "node_modules/npm/node_modules/npm-install-checks": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-3.0.2.tgz", "integrity": "sha512-E4kzkyZDIWoin6uT5howP8VDvkM+E8IQDcHAycaAxMbwkqhIg5eEYALnXOl3Hq9MrkdQB/2/g1xwBINXdKSRkg==", "dev": true, "inBundle": true, @@ -7350,6 +8179,7 @@ }, "node_modules/npm/node_modules/npm-lifecycle": { "version": "3.1.5", + "resolved": "https://registry.npmjs.org/npm-lifecycle/-/npm-lifecycle-3.1.5.tgz", "integrity": "sha512-lDLVkjfZmvmfvpvBzA4vzee9cn+Me4orq0QF8glbswJVEbIcSNWib7qGOffolysc3teCqbbPZZkzbr3GQZTL1g==", "dev": true, "inBundle": true, @@ -7367,6 +8197,7 @@ }, "node_modules/npm/node_modules/npm-logical-tree": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/npm-logical-tree/-/npm-logical-tree-1.2.1.tgz", "integrity": "sha512-AJI/qxDB2PWI4LG1CYN579AY1vCiNyWfkiquCsJWqntRu/WwimVrC8yXeILBFHDwxfOejxewlmnvW9XXjMlYIg==", "dev": true, "inBundle": true, @@ -7374,6 +8205,7 @@ }, "node_modules/npm/node_modules/npm-normalize-package-bin": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", "dev": true, "inBundle": true, @@ -7381,6 +8213,7 @@ }, "node_modules/npm/node_modules/npm-package-arg": { "version": "6.1.1", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-6.1.1.tgz", "integrity": "sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg==", "dev": true, "inBundle": true, @@ -7394,6 +8227,7 @@ }, "node_modules/npm/node_modules/npm-packlist": { "version": "1.4.8", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz", "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", "dev": true, "inBundle": true, @@ -7406,6 +8240,7 @@ }, "node_modules/npm/node_modules/npm-pick-manifest": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-3.0.2.tgz", "integrity": "sha512-wNprTNg+X5nf+tDi+hbjdHhM4bX+mKqv6XmPh7B5eG+QY9VARfQPfCEH013H5GqfNj6ee8Ij2fg8yk0mzps1Vw==", "dev": true, "inBundle": true, @@ -7418,6 +8253,7 @@ }, "node_modules/npm/node_modules/npm-profile": { "version": "4.0.4", + "resolved": "https://registry.npmjs.org/npm-profile/-/npm-profile-4.0.4.tgz", "integrity": "sha512-Ta8xq8TLMpqssF0H60BXS1A90iMoM6GeKwsmravJ6wYjWwSzcYBTdyWa3DZCYqPutacBMEm7cxiOkiIeCUAHDQ==", "dev": true, "inBundle": true, @@ -7430,6 +8266,7 @@ }, "node_modules/npm/node_modules/npm-registry-fetch": { "version": "4.0.7", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-4.0.7.tgz", "integrity": "sha512-cny9v0+Mq6Tjz+e0erFAB+RYJ/AVGzkjnISiobqP8OWj9c9FLoZZu8/SPSKJWE17F1tk4018wfjV+ZbIbqC7fQ==", "dev": true, "inBundle": true, @@ -7446,6 +8283,7 @@ }, "node_modules/npm/node_modules/npm-registry-fetch/node_modules/safe-buffer": { "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, "funding": [ @@ -7467,6 +8305,7 @@ }, "node_modules/npm/node_modules/npm-run-path": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dev": true, "inBundle": true, @@ -7480,6 +8319,7 @@ }, "node_modules/npm/node_modules/npm-user-validate": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-user-validate/-/npm-user-validate-1.0.1.tgz", "integrity": "sha512-uQwcd/tY+h1jnEaze6cdX/LrhWhoBxfSknxentoqmIuStxUExxjWd3ULMLFPiFUrZKbOVMowH6Jq2FRWfmhcEw==", "dev": true, "inBundle": true, @@ -7487,6 +8327,7 @@ }, "node_modules/npm/node_modules/npmlog": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "dev": true, "inBundle": true, @@ -7500,6 +8341,7 @@ }, "node_modules/npm/node_modules/number-is-nan": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "dev": true, "inBundle": true, @@ -7510,6 +8352,7 @@ }, "node_modules/npm/node_modules/oauth-sign": { "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", "dev": true, "inBundle": true, @@ -7520,6 +8363,7 @@ }, "node_modules/npm/node_modules/object-assign": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true, "inBundle": true, @@ -7530,6 +8374,7 @@ }, "node_modules/npm/node_modules/object-keys": { "version": "1.0.12", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==", "dev": true, "inBundle": true, @@ -7540,6 +8385,7 @@ }, "node_modules/npm/node_modules/object.getownpropertydescriptors": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", "dev": true, "inBundle": true, @@ -7554,6 +8400,7 @@ }, "node_modules/npm/node_modules/once": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "inBundle": true, @@ -7575,6 +8422,7 @@ }, "node_modules/npm/node_modules/os-homedir": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "dev": true, "inBundle": true, @@ -7585,6 +8433,7 @@ }, "node_modules/npm/node_modules/os-tmpdir": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true, "inBundle": true, @@ -7595,6 +8444,7 @@ }, "node_modules/npm/node_modules/osenv": { "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "dev": true, "inBundle": true, @@ -7606,6 +8456,7 @@ }, "node_modules/npm/node_modules/p-finally": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", "dev": true, "inBundle": true, @@ -7616,6 +8467,7 @@ }, "node_modules/npm/node_modules/package-json": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", "dev": true, "inBundle": true, @@ -7632,6 +8484,7 @@ }, "node_modules/npm/node_modules/pacote": { "version": "9.5.12", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-9.5.12.tgz", "integrity": "sha512-BUIj/4kKbwWg4RtnBncXPJd15piFSVNpTzY0rysSr3VnMowTYgkGKcaHrbReepAkjTr8lH2CVWRi58Spg2CicQ==", "dev": true, "inBundle": true, @@ -7671,6 +8524,7 @@ }, "node_modules/npm/node_modules/pacote/node_modules/minipass": { "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", "dev": true, "inBundle": true, @@ -7682,6 +8536,7 @@ }, "node_modules/npm/node_modules/parallel-transform": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", "dev": true, "inBundle": true, @@ -7694,6 +8549,7 @@ }, "node_modules/npm/node_modules/parallel-transform/node_modules/readable-stream": { "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "inBundle": true, @@ -7710,6 +8566,7 @@ }, "node_modules/npm/node_modules/parallel-transform/node_modules/string_decoder": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "inBundle": true, @@ -7720,6 +8577,7 @@ }, "node_modules/npm/node_modules/path-exists": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true, "inBundle": true, @@ -7730,6 +8588,7 @@ }, "node_modules/npm/node_modules/path-is-absolute": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true, "inBundle": true, @@ -7740,6 +8599,7 @@ }, "node_modules/npm/node_modules/path-is-inside": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", "dev": true, "inBundle": true, @@ -7747,6 +8607,7 @@ }, "node_modules/npm/node_modules/path-key": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", "dev": true, "inBundle": true, @@ -7757,6 +8618,7 @@ }, "node_modules/npm/node_modules/path-parse": { "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", "dev": true, "inBundle": true, @@ -7764,6 +8626,7 @@ }, "node_modules/npm/node_modules/performance-now": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", "dev": true, "inBundle": true, @@ -7771,6 +8634,7 @@ }, "node_modules/npm/node_modules/pify": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true, "inBundle": true, @@ -7781,6 +8645,7 @@ }, "node_modules/npm/node_modules/prepend-http": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", "dev": true, "inBundle": true, @@ -7791,6 +8656,7 @@ }, "node_modules/npm/node_modules/process-nextick-args": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", "dev": true, "inBundle": true, @@ -7798,6 +8664,7 @@ }, "node_modules/npm/node_modules/promise-inflight": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", "dev": true, "inBundle": true, @@ -7805,6 +8672,7 @@ }, "node_modules/npm/node_modules/promise-retry": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-1.1.1.tgz", "integrity": "sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0=", "dev": true, "inBundle": true, @@ -7819,6 +8687,7 @@ }, "node_modules/npm/node_modules/promise-retry/node_modules/retry": { "version": "0.10.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz", "integrity": "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=", "dev": true, "inBundle": true, @@ -7829,6 +8698,7 @@ }, "node_modules/npm/node_modules/promzard": { "version": "0.3.0", + "resolved": "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz", "integrity": "sha1-JqXW7ox97kyxIggwWs+5O6OCqe4=", "dev": true, "inBundle": true, @@ -7839,6 +8709,7 @@ }, "node_modules/npm/node_modules/proto-list": { "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", "dev": true, "inBundle": true, @@ -7846,6 +8717,7 @@ }, "node_modules/npm/node_modules/protoduck": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/protoduck/-/protoduck-5.0.1.tgz", "integrity": "sha512-WxoCeDCoCBY55BMvj4cAEjdVUFGRWed9ZxPlqTKYyw1nDDTQ4pqmnIMAGfJlg7Dx35uB/M+PHJPTmGOvaCaPTg==", "dev": true, "inBundle": true, @@ -7856,6 +8728,7 @@ }, "node_modules/npm/node_modules/prr": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", "dev": true, "inBundle": true, @@ -7863,6 +8736,7 @@ }, "node_modules/npm/node_modules/pseudomap": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", "dev": true, "inBundle": true, @@ -7870,6 +8744,7 @@ }, "node_modules/npm/node_modules/psl": { "version": "1.1.29", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz", "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==", "dev": true, "inBundle": true, @@ -7877,6 +8752,7 @@ }, "node_modules/npm/node_modules/pump": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, "inBundle": true, @@ -7888,6 +8764,7 @@ }, "node_modules/npm/node_modules/pumpify": { "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", "dev": true, "inBundle": true, @@ -7900,6 +8777,7 @@ }, "node_modules/npm/node_modules/pumpify/node_modules/pump": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "dev": true, "inBundle": true, @@ -7911,6 +8789,7 @@ }, "node_modules/npm/node_modules/punycode": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", "dev": true, "inBundle": true, @@ -7918,6 +8797,7 @@ }, "node_modules/npm/node_modules/qrcode-terminal": { "version": "0.12.0", + "resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz", "integrity": "sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ==", "dev": true, "inBundle": true, @@ -7927,6 +8807,7 @@ }, "node_modules/npm/node_modules/qs": { "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", "dev": true, "inBundle": true, @@ -7937,6 +8818,7 @@ }, "node_modules/npm/node_modules/query-string": { "version": "6.8.2", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.8.2.tgz", "integrity": "sha512-J3Qi8XZJXh93t2FiKyd/7Ec6GNifsjKXUsVFkSBj/kjLsDylWhnCz4NT1bkPcKotttPW+QbKGqqPH8OoI2pdqw==", "dev": true, "inBundle": true, @@ -7952,6 +8834,7 @@ }, "node_modules/npm/node_modules/qw": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/qw/-/qw-1.0.1.tgz", "integrity": "sha1-77/cdA+a0FQwRCassYNBLMi5ltQ=", "dev": true, "inBundle": true, @@ -7959,6 +8842,7 @@ }, "node_modules/npm/node_modules/rc": { "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, "inBundle": true, @@ -7975,6 +8859,7 @@ }, "node_modules/npm/node_modules/read": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", "dev": true, "inBundle": true, @@ -7988,6 +8873,7 @@ }, "node_modules/npm/node_modules/read-cmd-shim": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-1.0.5.tgz", "integrity": "sha512-v5yCqQ/7okKoZZkBQUAfTsQ3sVJtXdNfbPnI5cceppoxEVLYA3k+VtV2omkeo8MS94JCy4fSiUwlRBAwCVRPUA==", "dev": true, "inBundle": true, @@ -7998,6 +8884,7 @@ }, "node_modules/npm/node_modules/read-installed": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/read-installed/-/read-installed-4.0.3.tgz", "integrity": "sha1-/5uLZ/GH0eTCm5/rMfayI6zRkGc=", "dev": true, "inBundle": true, @@ -8016,6 +8903,7 @@ }, "node_modules/npm/node_modules/read-package-json": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.1.1.tgz", "integrity": "sha512-dAiqGtVc/q5doFz6096CcnXhpYk0ZN8dEKVkGLU0CsASt8SrgF6SF7OTKAYubfvFhWaqofl+Y8HK19GR8jwW+A==", "dev": true, "inBundle": true, @@ -8032,6 +8920,7 @@ }, "node_modules/npm/node_modules/read-package-tree": { "version": "5.3.1", + "resolved": "https://registry.npmjs.org/read-package-tree/-/read-package-tree-5.3.1.tgz", "integrity": "sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw==", "dev": true, "inBundle": true, @@ -8044,6 +8933,7 @@ }, "node_modules/npm/node_modules/readable-stream": { "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "inBundle": true, @@ -8059,6 +8949,7 @@ }, "node_modules/npm/node_modules/readdir-scoped-modules": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==", "dev": true, "inBundle": true, @@ -8072,6 +8963,7 @@ }, "node_modules/npm/node_modules/registry-auth-token": { "version": "3.4.0", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz", "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==", "dev": true, "inBundle": true, @@ -8083,6 +8975,7 @@ }, "node_modules/npm/node_modules/registry-url": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", "dev": true, "inBundle": true, @@ -8096,6 +8989,7 @@ }, "node_modules/npm/node_modules/request": { "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", "dev": true, "inBundle": true, @@ -8128,6 +9022,7 @@ }, "node_modules/npm/node_modules/require-directory": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true, "inBundle": true, @@ -8138,6 +9033,7 @@ }, "node_modules/npm/node_modules/require-main-filename": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true, "inBundle": true, @@ -8145,6 +9041,7 @@ }, "node_modules/npm/node_modules/resolve-from": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, "inBundle": true, @@ -8155,6 +9052,7 @@ }, "node_modules/npm/node_modules/retry": { "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", "dev": true, "inBundle": true, @@ -8165,6 +9063,7 @@ }, "node_modules/npm/node_modules/rimraf": { "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "inBundle": true, @@ -8178,6 +9077,7 @@ }, "node_modules/npm/node_modules/run-queue": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", "dev": true, "inBundle": true, @@ -8188,6 +9088,7 @@ }, "node_modules/npm/node_modules/run-queue/node_modules/aproba": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "dev": true, "inBundle": true, @@ -8195,6 +9096,7 @@ }, "node_modules/npm/node_modules/safe-buffer": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true, "inBundle": true, @@ -8202,6 +9104,7 @@ }, "node_modules/npm/node_modules/safer-buffer": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true, "inBundle": true, @@ -8209,6 +9112,7 @@ }, "node_modules/npm/node_modules/semver": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, "inBundle": true, @@ -8219,6 +9123,7 @@ }, "node_modules/npm/node_modules/semver-diff": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", "dev": true, "inBundle": true, @@ -8232,6 +9137,7 @@ }, "node_modules/npm/node_modules/set-blocking": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true, "inBundle": true, @@ -8239,6 +9145,7 @@ }, "node_modules/npm/node_modules/sha": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/sha/-/sha-3.0.0.tgz", "integrity": "sha512-DOYnM37cNsLNSGIG/zZWch5CKIRNoLdYUQTQlcgkRkoYIUwDYjqDyye16YcDZg/OPdcbUgTKMjc4SY6TB7ZAPw==", "dev": true, "inBundle": true, @@ -8249,6 +9156,7 @@ }, "node_modules/npm/node_modules/shebang-command": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "inBundle": true, @@ -8262,6 +9170,7 @@ }, "node_modules/npm/node_modules/shebang-regex": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", "dev": true, "inBundle": true, @@ -8272,6 +9181,7 @@ }, "node_modules/npm/node_modules/signal-exit": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "dev": true, "inBundle": true, @@ -8279,6 +9189,7 @@ }, "node_modules/npm/node_modules/slide": { "version": "1.1.6", + "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", "dev": true, "inBundle": true, @@ -8289,6 +9200,7 @@ }, "node_modules/npm/node_modules/smart-buffer": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.1.0.tgz", "integrity": "sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==", "dev": true, "inBundle": true, @@ -8300,6 +9212,7 @@ }, "node_modules/npm/node_modules/socks": { "version": "2.3.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.3.3.tgz", "integrity": "sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA==", "dev": true, "inBundle": true, @@ -8315,6 +9228,7 @@ }, "node_modules/npm/node_modules/socks-proxy-agent": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz", "integrity": "sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg==", "dev": true, "inBundle": true, @@ -8329,6 +9243,7 @@ }, "node_modules/npm/node_modules/socks-proxy-agent/node_modules/agent-base": { "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", "dev": true, "inBundle": true, @@ -8342,6 +9257,7 @@ }, "node_modules/npm/node_modules/sorted-object": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/sorted-object/-/sorted-object-2.0.1.tgz", "integrity": "sha1-fWMfS9OnmKJK8d/8+/6DM3pd9fw=", "dev": true, "inBundle": true, @@ -8349,6 +9265,7 @@ }, "node_modules/npm/node_modules/sorted-union-stream": { "version": "2.1.3", + "resolved": "https://registry.npmjs.org/sorted-union-stream/-/sorted-union-stream-2.1.3.tgz", "integrity": "sha1-x3lMfgd4gAUv9xqNSi27Sppjisc=", "dev": true, "inBundle": true, @@ -8360,6 +9277,7 @@ }, "node_modules/npm/node_modules/sorted-union-stream/node_modules/from2": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-1.3.0.tgz", "integrity": "sha1-iEE7qqX5pZfP3pIh2GmGzTwGHf0=", "dev": true, "inBundle": true, @@ -8371,6 +9289,7 @@ }, "node_modules/npm/node_modules/sorted-union-stream/node_modules/isarray": { "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", "dev": true, "inBundle": true, @@ -8378,6 +9297,7 @@ }, "node_modules/npm/node_modules/sorted-union-stream/node_modules/readable-stream": { "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "dev": true, "inBundle": true, @@ -8391,6 +9311,7 @@ }, "node_modules/npm/node_modules/sorted-union-stream/node_modules/string_decoder": { "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", "dev": true, "inBundle": true, @@ -8398,6 +9319,7 @@ }, "node_modules/npm/node_modules/spdx-correct": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", "dev": true, "inBundle": true, @@ -8409,6 +9331,7 @@ }, "node_modules/npm/node_modules/spdx-exceptions": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==", "dev": true, "inBundle": true, @@ -8416,6 +9339,7 @@ }, "node_modules/npm/node_modules/spdx-expression-parse": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", "dev": true, "inBundle": true, @@ -8427,6 +9351,7 @@ }, "node_modules/npm/node_modules/spdx-license-ids": { "version": "3.0.5", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", "dev": true, "inBundle": true, @@ -8434,6 +9359,7 @@ }, "node_modules/npm/node_modules/split-on-first": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==", "dev": true, "inBundle": true, @@ -8444,6 +9370,7 @@ }, "node_modules/npm/node_modules/sshpk": { "version": "1.14.2", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", "dev": true, "inBundle": true, @@ -8472,6 +9399,7 @@ }, "node_modules/npm/node_modules/ssri": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", "dev": true, "inBundle": true, @@ -8482,6 +9410,7 @@ }, "node_modules/npm/node_modules/stream-each": { "version": "1.2.2", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.2.tgz", "integrity": "sha512-mc1dbFhGBxvTM3bIWmAAINbqiuAk9TATcfIQC8P+/+HJefgaiTlMn2dHvkX8qlI12KeYKSQ1Ua9RrIqrn1VPoA==", "dev": true, "inBundle": true, @@ -8493,6 +9422,7 @@ }, "node_modules/npm/node_modules/stream-iterate": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/stream-iterate/-/stream-iterate-1.2.0.tgz", "integrity": "sha1-K9fHcpbBcCpGSIuK1B95hl7s1OE=", "dev": true, "inBundle": true, @@ -8504,6 +9434,7 @@ }, "node_modules/npm/node_modules/stream-iterate/node_modules/readable-stream": { "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "inBundle": true, @@ -8520,6 +9451,7 @@ }, "node_modules/npm/node_modules/stream-iterate/node_modules/string_decoder": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "inBundle": true, @@ -8530,6 +9462,7 @@ }, "node_modules/npm/node_modules/stream-shift": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", "dev": true, "inBundle": true, @@ -8537,6 +9470,7 @@ }, "node_modules/npm/node_modules/strict-uri-encode": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", "integrity": "sha1-ucczDHBChi9rFC3CdLvMWGbONUY=", "dev": true, "inBundle": true, @@ -8547,6 +9481,7 @@ }, "node_modules/npm/node_modules/string_decoder": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, "inBundle": true, @@ -8557,6 +9492,7 @@ }, "node_modules/npm/node_modules/string_decoder/node_modules/safe-buffer": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", "dev": true, "inBundle": true, @@ -8564,6 +9500,7 @@ }, "node_modules/npm/node_modules/string-width": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "inBundle": true, @@ -8578,6 +9515,7 @@ }, "node_modules/npm/node_modules/string-width/node_modules/ansi-regex": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true, "inBundle": true, @@ -8588,6 +9526,7 @@ }, "node_modules/npm/node_modules/string-width/node_modules/is-fullwidth-code-point": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true, "inBundle": true, @@ -8598,6 +9537,7 @@ }, "node_modules/npm/node_modules/string-width/node_modules/strip-ansi": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "inBundle": true, @@ -8611,6 +9551,7 @@ }, "node_modules/npm/node_modules/stringify-package": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stringify-package/-/stringify-package-1.0.1.tgz", "integrity": "sha512-sa4DUQsYciMP1xhKWGuFM04fB0LG/9DlluZoSVywUMRNvzid6XucHK0/90xGxRoHrAaROrcHK1aPKaijCtSrhg==", "dev": true, "inBundle": true, @@ -8618,6 +9559,7 @@ }, "node_modules/npm/node_modules/strip-ansi": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "inBundle": true, @@ -8631,6 +9573,7 @@ }, "node_modules/npm/node_modules/strip-eof": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", "dev": true, "inBundle": true, @@ -8641,6 +9584,7 @@ }, "node_modules/npm/node_modules/strip-json-comments": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "dev": true, "inBundle": true, @@ -8651,6 +9595,7 @@ }, "node_modules/npm/node_modules/supports-color": { "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "inBundle": true, @@ -8664,6 +9609,7 @@ }, "node_modules/npm/node_modules/tar": { "version": "4.4.13", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", "dev": true, "inBundle": true, @@ -8683,6 +9629,7 @@ }, "node_modules/npm/node_modules/tar/node_modules/minipass": { "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", "dev": true, "inBundle": true, @@ -8694,6 +9641,7 @@ }, "node_modules/npm/node_modules/term-size": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", "dev": true, "inBundle": true, @@ -8707,6 +9655,7 @@ }, "node_modules/npm/node_modules/text-table": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true, "inBundle": true, @@ -8714,6 +9663,7 @@ }, "node_modules/npm/node_modules/through": { "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true, "inBundle": true, @@ -8721,6 +9671,7 @@ }, "node_modules/npm/node_modules/through2": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", "dev": true, "inBundle": true, @@ -8732,6 +9683,7 @@ }, "node_modules/npm/node_modules/through2/node_modules/readable-stream": { "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "inBundle": true, @@ -8748,6 +9700,7 @@ }, "node_modules/npm/node_modules/through2/node_modules/string_decoder": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "inBundle": true, @@ -8758,6 +9711,7 @@ }, "node_modules/npm/node_modules/timed-out": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", "dev": true, "inBundle": true, @@ -8768,6 +9722,7 @@ }, "node_modules/npm/node_modules/tiny-relative-date": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz", "integrity": "sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A==", "dev": true, "inBundle": true, @@ -8775,6 +9730,7 @@ }, "node_modules/npm/node_modules/tough-cookie": { "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", "dev": true, "inBundle": true, @@ -8789,6 +9745,7 @@ }, "node_modules/npm/node_modules/tunnel-agent": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "dev": true, "inBundle": true, @@ -8802,6 +9759,7 @@ }, "node_modules/npm/node_modules/tweetnacl": { "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", "dev": true, "inBundle": true, @@ -8810,6 +9768,7 @@ }, "node_modules/npm/node_modules/typedarray": { "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "dev": true, "inBundle": true, @@ -8817,6 +9776,7 @@ }, "node_modules/npm/node_modules/uid-number": { "version": "0.0.6", + "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=", "dev": true, "inBundle": true, @@ -8827,6 +9787,7 @@ }, "node_modules/npm/node_modules/umask": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/umask/-/umask-1.1.0.tgz", "integrity": "sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0=", "dev": true, "inBundle": true, @@ -8834,6 +9795,7 @@ }, "node_modules/npm/node_modules/unique-filename": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", "dev": true, "inBundle": true, @@ -8844,6 +9806,7 @@ }, "node_modules/npm/node_modules/unique-slug": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.0.tgz", "integrity": "sha1-22Z258fMBimHj/GWCXx4hVrp9Ks=", "dev": true, "inBundle": true, @@ -8854,6 +9817,7 @@ }, "node_modules/npm/node_modules/unique-string": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", "dev": true, "inBundle": true, @@ -8867,6 +9831,7 @@ }, "node_modules/npm/node_modules/unpipe": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", "dev": true, "inBundle": true, @@ -8877,6 +9842,7 @@ }, "node_modules/npm/node_modules/unzip-response": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", "dev": true, "inBundle": true, @@ -8887,6 +9853,7 @@ }, "node_modules/npm/node_modules/update-notifier": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", "dev": true, "inBundle": true, @@ -8909,6 +9876,7 @@ }, "node_modules/npm/node_modules/uri-js": { "version": "4.4.0", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", "dev": true, "inBundle": true, @@ -8919,6 +9887,7 @@ }, "node_modules/npm/node_modules/uri-js/node_modules/punycode": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true, "inBundle": true, @@ -8929,6 +9898,7 @@ }, "node_modules/npm/node_modules/url-parse-lax": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", "dev": true, "inBundle": true, @@ -8942,6 +9912,7 @@ }, "node_modules/npm/node_modules/util-deprecate": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true, "inBundle": true, @@ -8949,6 +9920,7 @@ }, "node_modules/npm/node_modules/util-extend": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/util-extend/-/util-extend-1.0.3.tgz", "integrity": "sha1-p8IW0mdUUWljeztu3GypEZ4v+T8=", "dev": true, "inBundle": true, @@ -8956,6 +9928,7 @@ }, "node_modules/npm/node_modules/util-promisify": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/util-promisify/-/util-promisify-2.1.0.tgz", "integrity": "sha1-PCI2R2xNMsX/PEcAKt18E7moKlM=", "dev": true, "inBundle": true, @@ -8966,6 +9939,7 @@ }, "node_modules/npm/node_modules/uuid": { "version": "3.3.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==", "dev": true, "inBundle": true, @@ -8976,6 +9950,7 @@ }, "node_modules/npm/node_modules/validate-npm-package-license": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "inBundle": true, @@ -8987,6 +9962,7 @@ }, "node_modules/npm/node_modules/validate-npm-package-name": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", "dev": true, "inBundle": true, @@ -8997,6 +9973,7 @@ }, "node_modules/npm/node_modules/verror": { "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "dev": true, "engines": [ @@ -9012,6 +9989,7 @@ }, "node_modules/npm/node_modules/wcwidth": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", "dev": true, "inBundle": true, @@ -9022,6 +10000,7 @@ }, "node_modules/npm/node_modules/which": { "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "inBundle": true, @@ -9035,6 +10014,7 @@ }, "node_modules/npm/node_modules/which-module": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true, "inBundle": true, @@ -9042,6 +10022,7 @@ }, "node_modules/npm/node_modules/wide-align": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", "dev": true, "inBundle": true, @@ -9052,6 +10033,7 @@ }, "node_modules/npm/node_modules/wide-align/node_modules/string-width": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "inBundle": true, @@ -9067,6 +10049,7 @@ }, "node_modules/npm/node_modules/widest-line": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", "dev": true, "inBundle": true, @@ -9080,6 +10063,7 @@ }, "node_modules/npm/node_modules/worker-farm": { "version": "1.7.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", "dev": true, "inBundle": true, @@ -9090,6 +10074,7 @@ }, "node_modules/npm/node_modules/wrap-ansi": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", "dev": true, "inBundle": true, @@ -9105,6 +10090,7 @@ }, "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-regex": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true, "inBundle": true, @@ -9115,6 +10101,7 @@ }, "node_modules/npm/node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true, "inBundle": true, @@ -9125,6 +10112,7 @@ }, "node_modules/npm/node_modules/wrap-ansi/node_modules/string-width": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "inBundle": true, @@ -9140,6 +10128,7 @@ }, "node_modules/npm/node_modules/wrap-ansi/node_modules/strip-ansi": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "inBundle": true, @@ -9153,6 +10142,7 @@ }, "node_modules/npm/node_modules/wrappy": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true, "inBundle": true, @@ -9160,6 +10150,7 @@ }, "node_modules/npm/node_modules/write-file-atomic": { "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", "dev": true, "inBundle": true, @@ -9172,6 +10163,7 @@ }, "node_modules/npm/node_modules/xdg-basedir": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", "dev": true, "inBundle": true, @@ -9182,6 +10174,7 @@ }, "node_modules/npm/node_modules/xtend": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", "dev": true, "inBundle": true, @@ -9192,6 +10185,7 @@ }, "node_modules/npm/node_modules/y18n": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", "dev": true, "inBundle": true, @@ -9199,6 +10193,7 @@ }, "node_modules/npm/node_modules/yallist": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", "dev": true, "inBundle": true, @@ -9206,6 +10201,7 @@ }, "node_modules/npm/node_modules/yargs": { "version": "14.2.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-14.2.3.tgz", "integrity": "sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==", "dev": true, "inBundle": true, @@ -9226,6 +10222,7 @@ }, "node_modules/npm/node_modules/yargs-parser": { "version": "15.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.1.tgz", "integrity": "sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw==", "dev": true, "inBundle": true, @@ -9237,6 +10234,7 @@ }, "node_modules/npm/node_modules/yargs-parser/node_modules/camelcase": { "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, "inBundle": true, @@ -9247,6 +10245,7 @@ }, "node_modules/npm/node_modules/yargs/node_modules/ansi-regex": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true, "inBundle": true, @@ -9257,6 +10256,7 @@ }, "node_modules/npm/node_modules/yargs/node_modules/find-up": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "inBundle": true, @@ -9270,6 +10270,7 @@ }, "node_modules/npm/node_modules/yargs/node_modules/is-fullwidth-code-point": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true, "inBundle": true, @@ -9280,6 +10281,7 @@ }, "node_modules/npm/node_modules/yargs/node_modules/locate-path": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "inBundle": true, @@ -9294,6 +10296,7 @@ }, "node_modules/npm/node_modules/yargs/node_modules/p-limit": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "inBundle": true, @@ -9310,6 +10313,7 @@ }, "node_modules/npm/node_modules/yargs/node_modules/p-locate": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "inBundle": true, @@ -9323,6 +10327,7 @@ }, "node_modules/npm/node_modules/yargs/node_modules/p-try": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, "inBundle": true, @@ -9333,6 +10338,7 @@ }, "node_modules/npm/node_modules/yargs/node_modules/string-width": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "inBundle": true, @@ -9348,6 +10354,7 @@ }, "node_modules/npm/node_modules/yargs/node_modules/strip-ansi": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "inBundle": true, @@ -9389,6 +10396,93 @@ "node": ">=0.10.0" } }, + "node_modules/object-inspect": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", + "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.3.tgz", + "integrity": "sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "has": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.4.tgz", + "integrity": "sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "has": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.3.tgz", + "integrity": "sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "has": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -9413,6 +10507,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "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" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/p-each-series": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", @@ -9699,15 +10810,6 @@ "node": ">=8" } }, - "node_modules/please-upgrade-node": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", - "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", - "dev": true, - "dependencies": { - "semver-compare": "^1.0.0" - } - }, "node_modules/prebuild-install": { "version": "5.3.6", "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.6.tgz", @@ -9737,6 +10839,27 @@ "node": ">=6" } }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz", + "integrity": "sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/pretty-format": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", @@ -9800,6 +10923,15 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/prompt": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/prompt/-/prompt-1.1.0.tgz", @@ -9816,6 +10948,23 @@ "node": ">= 0.6.6" } }, + "node_modules/prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "dev": true, + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } + }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, "node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -9826,6 +10975,15 @@ "once": "^1.3.1" } }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/q": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", @@ -10042,6 +11200,34 @@ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" }, + "node_modules/regexp.prototype.flags": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, "node_modules/registry-auth-token": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", @@ -10150,6 +11336,15 @@ "node": ">=0.10.0" } }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/resolve": { "version": "1.17.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", @@ -10168,19 +11363,6 @@ "node": ">=4" } }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/retry": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", @@ -10351,18 +11533,6 @@ "integrity": "sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw==", "dev": true }, - "node_modules/rxjs": { - "version": "6.6.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", - "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", - "dev": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -10491,12 +11661,6 @@ "node": ">=10" } }, - "node_modules/semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", - "dev": true - }, "node_modules/semver-diff": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", @@ -10580,6 +11744,20 @@ "node": ">=4" } }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/signal-exit": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", @@ -10640,62 +11818,6 @@ "node": ">=8" } }, - "node_modules/slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/slice-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -10855,15 +11977,6 @@ "safe-buffer": "~5.1.0" } }, - "node_modules/string-argv": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", - "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", - "dev": true, - "engines": { - "node": ">=0.6.19" - } - }, "node_modules/string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", @@ -10878,18 +11991,48 @@ "node": ">=0.10.0" } }, - "node_modules/stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "node_modules/string.prototype.matchall": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.4.tgz", + "integrity": "sha512-pknFIWVachNcyqRfaQSeu/FUfpvJTe4uskUSZ9Wc1RijsPuzbZ8TyYT8WCNnntCjUEqQ3vUHMAfVj2+wLAisPQ==", "dev": true, "dependencies": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "has-symbols": "^1.0.1", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.3.1", + "side-channel": "^1.0.4" }, - "engines": { - "node": ">=4" + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/strip-ansi": { @@ -10989,6 +12132,137 @@ "node": ">=8" } }, + "node_modules/table": { + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/table/-/table-6.0.7.tgz", + "integrity": "sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==", + "dev": true, + "dependencies": { + "ajv": "^7.0.2", + "lodash": "^4.17.20", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.1.1.tgz", + "integrity": "sha512-ga/aqDYnUy/o7vbsRTFhhTsNeXiYb5JWDIcRIeZfwRNCefwjNTVYCGdGSUrEmiu3yDK3vFvNbgJxvrQW4JXrYQ==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/table/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/table/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/table/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/table/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/table/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/table/node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/table/node_modules/string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/table/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/tar-fs": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", @@ -11056,15 +12330,6 @@ "node": ">=10" } }, - "node_modules/tempy/node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/tempy/node_modules/del": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", @@ -11084,23 +12349,6 @@ "node": ">=10" } }, - "node_modules/tempy/node_modules/globby": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.2.tgz", - "integrity": "sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og==", - "dev": true, - "dependencies": { - "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" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/tempy/node_modules/is-path-cwd": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", @@ -11149,6 +12397,12 @@ "node": ">=0.10" } }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -11251,85 +12505,19 @@ "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==", "dev": true }, - "node_modules/tslint": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz", - "integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "builtin-modules": "^1.1.1", - "chalk": "^2.3.0", - "commander": "^2.12.1", - "diff": "^4.0.1", - "glob": "^7.1.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.3", - "resolve": "^1.3.2", - "semver": "^5.3.0", - "tslib": "^1.13.0", - "tsutils": "^2.29.0" - }, - "bin": { - "tslint": "bin/tslint" - }, - "engines": { - "node": ">=4.8.0" - } - }, - "node_modules/tslint-microsoft-contrib": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/tslint-microsoft-contrib/-/tslint-microsoft-contrib-6.2.0.tgz", - "integrity": "sha512-6tfi/2tHqV/3CL77pULBcK+foty11Rr0idRDxKnteTaKm6gWF9qmaCNU17HVssOuwlYNyOmd9Jsmjd+1t3a3qw==", - "dev": true, - "dependencies": { - "tsutils": "^2.27.2 <2.29.0" - } - }, - "node_modules/tslint-microsoft-contrib/node_modules/tsutils": { - "version": "2.28.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.28.0.tgz", - "integrity": "sha512-bh5nAtW0tuhvOJnx1GLRn5ScraRLICGyJV5wJhtRWOLsxW70Kk5tZtpK3O/hW6LDnqKS9mlUMPZj9fEMJ0gxqA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - } - }, - "node_modules/tslint/node_modules/builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tslint/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/tslint/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, "node_modules/tsutils": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", - "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.20.0.tgz", + "integrity": "sha512-RYbuQuvkhuqVeXweWT3tJLKOEJ/UUw9GjNEZGWdrLLlM+611o1gwLHBpxoFJKKl25fLprp2eVthtKs5JOrNeXg==", "dev": true, "dependencies": { "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" } }, "node_modules/tunnel-agent": { @@ -11344,6 +12532,18 @@ "node": "*" } }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/type-fest": { "version": "0.18.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", @@ -11405,6 +12605,15 @@ "node": ">= 10.0.0" } }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, "node_modules/url-join": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", @@ -11448,6 +12657,12 @@ "node": ">= 0.8.0" } }, + "node_modules/v8-compile-cache": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", + "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==", + "dev": true + }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -11541,6 +12756,15 @@ "node": ">=0.1.90" } }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", @@ -11829,35 +13053,59 @@ }, "dependencies": { "@babel/code-frame": { - "version": "7.10.3", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.3.tgz", - "integrity": "sha512-fDx9eNW0qz0WkUeqL6tXEXzVlPh6Y5aCDEZesl0xBGA8ndRukX91Uk44ZqnkECp01NAZUdCAl+aiQNGi0k88Eg==", + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", "dev": true, "requires": { - "@babel/highlight": "^7.10.3" + "@babel/highlight": "^7.10.4" } }, "@babel/helper-validator-identifier": { - "version": "7.10.3", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.3.tgz", - "integrity": "sha512-bU8JvtlYpJSBPuj1VUmKpFGaDZuLxASky3LhaKj3bmpSTY6VWooSM8msk+Z0CZoErFye2tlABF6yDkT3FOPAXw==", + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", "dev": true }, "@babel/highlight": { - "version": "7.10.3", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.3.tgz", - "integrity": "sha512-Ih9B/u7AtgEnySE2L2F0Xm0GaM729XqqLfHkalTsbjXGyqmf/6M0Cu0WpvqueUlW+xk88BHw9Nkpj49naU+vWw==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.12.13.tgz", + "integrity": "sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.10.3", + "@babel/helper-validator-identifier": "^7.12.11", "chalk": "^2.0.0", "js-tokens": "^4.0.0" + } + }, + "@eslint/eslintrc": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.3.0.tgz", + "integrity": "sha512-1JTKgrOKAHVivSvOYw+sJOunkBjUOvjqWk1DPja7ZFhIS2mX/4EgTT8M7eTK9jrKhL/FvXXEbQwIs3pg1xp3dg==", + "dev": true, + "requires": { + "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" }, "dependencies": { - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true } } @@ -12199,28 +13447,6 @@ "p-filter": "^2.0.0", "p-retry": "^4.0.0", "url-join": "^4.0.0" - }, - "dependencies": { - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "globby": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.2.tgz", - "integrity": "sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og==", - "dev": true, - "requires": { - "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" - } - } } }, "@semantic-release/npm": { @@ -12338,6 +13564,12 @@ "@types/istanbul-lib-report": "*" } }, + "@types/json-schema": { + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", + "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", + "dev": true + }, "@types/minimist": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.1.tgz", @@ -12408,12 +13640,108 @@ "integrity": "sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==", "dev": true }, + "@typescript-eslint/eslint-plugin": { + "version": "4.15.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.15.2.tgz", + "integrity": "sha512-uiQQeu9tWl3f1+oK0yoAv9lt/KXO24iafxgQTkIYO/kitruILGx3uH+QtIAHqxFV+yIsdnJH+alel9KuE3J15Q==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "4.15.2", + "@typescript-eslint/scope-manager": "4.15.2", + "debug": "^4.1.1", + "functional-red-black-tree": "^1.0.1", + "lodash": "^4.17.15", + "regexpp": "^3.0.0", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + } + }, + "@typescript-eslint/experimental-utils": { + "version": "4.15.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.15.2.tgz", + "integrity": "sha512-Fxoshw8+R5X3/Vmqwsjc8nRO/7iTysRtDqx6rlfLZ7HbT8TZhPeQqbPjTyk2RheH3L8afumecTQnUc9EeXxohQ==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/scope-manager": "4.15.2", + "@typescript-eslint/types": "4.15.2", + "@typescript-eslint/typescript-estree": "4.15.2", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" + } + }, + "@typescript-eslint/parser": { + "version": "4.15.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.15.2.tgz", + "integrity": "sha512-SHeF8xbsC6z2FKXsaTb1tBCf0QZsjJ94H6Bo51Y1aVEZ4XAefaw5ZAilMoDPlGghe+qtq7XdTiDlGfVTOmvA+Q==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "4.15.2", + "@typescript-eslint/types": "4.15.2", + "@typescript-eslint/typescript-estree": "4.15.2", + "debug": "^4.1.1" + } + }, + "@typescript-eslint/scope-manager": { + "version": "4.15.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.15.2.tgz", + "integrity": "sha512-Zm0tf/MSKuX6aeJmuXexgdVyxT9/oJJhaCkijv0DvJVT3ui4zY6XYd6iwIo/8GEZGy43cd7w1rFMiCLHbRzAPQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.15.2", + "@typescript-eslint/visitor-keys": "4.15.2" + } + }, + "@typescript-eslint/types": { + "version": "4.15.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.15.2.tgz", + "integrity": "sha512-r7lW7HFkAarfUylJ2tKndyO9njwSyoy6cpfDKWPX6/ctZA+QyaYscAHXVAfJqtnY6aaTwDYrOhp+ginlbc7HfQ==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "4.15.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.15.2.tgz", + "integrity": "sha512-cGR8C2g5SPtHTQvAymEODeqx90pJHadWsgTtx6GbnTWKqsg7yp6Eaya9nFzUd4KrKhxdYTTFBiYeTPQaz/l8bw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.15.2", + "@typescript-eslint/visitor-keys": "4.15.2", + "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": { + "version": "4.15.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.15.2.tgz", + "integrity": "sha512-TME1VgSb7wTwgENN5KVj4Nqg25hP8DisXxNBojM4Nn31rYaNDIocNm5cmjOFfh42n7NVERxWrDFoETO/76ePyg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.15.2", + "eslint-visitor-keys": "^2.0.0" + } + }, "@ungap/promise-all-settled": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", "dev": true }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "dev": true, + "requires": {} + }, "agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", @@ -12433,6 +13761,18 @@ "indent-string": "^4.0.0" } }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, "ansi-colors": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", @@ -12524,6 +13864,37 @@ "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", "dev": true }, + "array-includes": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz", + "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.5" + } + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "array.prototype.flatmap": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz", + "integrity": "sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "function-bind": "^1.1.1" + } + }, "arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", @@ -12663,6 +14034,16 @@ "integrity": "sha512-3U5kUA5VPsRUA3nofm/BXX7GVHKfxz0hOBAPxXrIvHzlDRkQVqEn6yi8QJegxl4LzOHLdvb7XF5dVawa/VVYBg==", "dev": true }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -12745,15 +14126,6 @@ "glob": "^7.1.1" } }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, "cli-table": { "version": "0.3.4", "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.4.tgz", @@ -12809,50 +14181,6 @@ } } }, - "cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, - "requires": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, "cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -12925,12 +14253,6 @@ "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", "dev": true }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, "commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", @@ -13139,12 +14461,6 @@ "mimic-response": "^2.0.0" } }, - "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", - "dev": true - }, "deep-equal": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-0.2.2.tgz", @@ -13157,6 +14473,21 @@ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, "delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", @@ -13196,6 +14527,15 @@ "path-type": "^4.0.0" } }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, "dot-prop": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", @@ -13265,6 +14605,39 @@ "is-arrayish": "^0.2.1" } }, + "es-abstract": { + "version": "1.18.0-next.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.2.tgz", + "integrity": "sha512-Ih4ZMFHEtZupnUh6497zEL4y2+w8+1ljnCyaTa+adcoafI1GOvMwFlDjBLfWR7y9VLfrjRJe9ocuHY1PSR9jjw==", + "dev": true, + "requires": { + "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": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -13277,18 +14650,279 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, + "eslint": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.20.0.tgz", + "integrity": "sha512-qGi0CTcOGP2OtCQBgWZlQjcTuP0XkIpYFj25XtRTQSHC+umNnp7UMshr2G8SLsRFYDdAPFeHOsiteadmMH02Yw==", + "dev": true, + "requires": { + "@babel/code-frame": "7.12.11", + "@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.4.0", + "esutils": "^2.0.2", + "file-entry-cache": "^6.0.0", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "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.9.1", + "progress": "^2.0.0", + "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" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "eslint-plugin-react": { + "version": "7.22.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.22.0.tgz", + "integrity": "sha512-p30tuX3VS+NWv9nQot9xIGAHBXR0+xJVaZriEsHoJrASGCJZDJ8JLNM0YqKqI0AKm6Uxaa1VUHoNEibxRCMQHA==", + "dev": true, + "requires": { + "array-includes": "^3.1.1", + "array.prototype.flatmap": "^1.2.3", + "doctrine": "^2.1.0", + "has": "^1.0.3", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "object.entries": "^1.1.2", + "object.fromentries": "^2.0.2", + "object.values": "^1.1.1", + "prop-types": "^15.7.2", + "resolve": "^1.18.1", + "string.prototype.matchall": "^4.0.2" + }, + "dependencies": { + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + } + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "dev": true + }, + "espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "requires": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, "estree-walker": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", "dev": true }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, "execa": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", @@ -13364,6 +14998,12 @@ "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=", "dev": true }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, "fast-glob": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", @@ -13378,6 +15018,18 @@ "picomatch": "^2.2.1" } }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, "fastq": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.10.0.tgz", @@ -13396,6 +15048,15 @@ "escape-string-regexp": "^1.0.5" } }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, "file-uri-to-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", @@ -13447,6 +15108,33 @@ "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "dependencies": { + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "flatted": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", + "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", + "dev": true + }, "from2": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", @@ -13498,6 +15186,18 @@ "dev": true, "optional": true }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, "gauge": { "version": "2.7.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", @@ -13520,11 +15220,16 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, - "get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", - "dev": true + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } }, "get-stream": { "version": "5.2.0", @@ -13599,6 +15304,37 @@ "is-glob": "^4.0.1" } }, + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, + "globby": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.2.tgz", + "integrity": "sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og==", + "dev": true, + "requires": { + "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": { "version": "4.2.4", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", @@ -13629,12 +15365,27 @@ "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", "dev": true }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, "has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", @@ -13734,6 +15485,12 @@ } } }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, "indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", @@ -13762,6 +15519,17 @@ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", "dev": true }, + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, "interpret": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", @@ -13793,6 +15561,27 @@ "binary-extensions": "^2.0.0" } }, + "is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "dev": true + }, + "is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "dev": true + }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -13823,29 +15612,33 @@ "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", "dev": true }, + "is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true + }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true - }, "is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", "dev": true }, - "is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", - "dev": true + "is-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", + "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.1" + } }, "is-stream": { "version": "2.0.0", @@ -13853,6 +15646,21 @@ "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", "dev": true }, + "is-string": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "dev": true + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, "is-text-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", @@ -14105,6 +15913,12 @@ "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", "dev": true }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, "js-yaml": { "version": "3.14.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", @@ -14127,6 +15941,18 @@ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", @@ -14158,175 +15984,38 @@ "through": ">=2.2.7 <3" } }, + "jsx-ast-utils": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz", + "integrity": "sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q==", + "dev": true, + "requires": { + "array-includes": "^3.1.2", + "object.assign": "^4.1.2" + } + }, "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, "lines-and-columns": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", "dev": true }, - "lint-staged": { - "version": "10.5.4", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-10.5.4.tgz", - "integrity": "sha512-EechC3DdFic/TdOPgj/RB3FicqE6932LTHCUm0Y2fsD9KGlLB+RwJl2q1IYBIvEsKzDOgn0D4gll+YxG5RsrKg==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "cli-truncate": "^2.1.0", - "commander": "^6.2.0", - "cosmiconfig": "^7.0.0", - "debug": "^4.2.0", - "dedent": "^0.7.0", - "enquirer": "^2.3.6", - "execa": "^4.1.0", - "listr2": "^3.2.2", - "log-symbols": "^4.0.0", - "micromatch": "^4.0.2", - "normalize-path": "^3.0.0", - "please-upgrade-node": "^3.2.0", - "string-argv": "0.3.1", - "stringify-object": "^3.3.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "listr2": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.3.1.tgz", - "integrity": "sha512-8Zoxe7s/8nNr4bJ8bdAduHD8uJce+exmMmUWTXlq0WuUdffnH3muisHPHPFtW2vvOfohIsq7FGCaguUxN/h3Iw==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "cli-truncate": "^2.1.0", - "figures": "^3.2.0", - "indent-string": "^4.0.0", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rxjs": "^6.6.3", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, "load-json-file": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", @@ -14349,9 +16038,9 @@ } }, "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, "lodash.camelcase": { @@ -14462,96 +16151,13 @@ } } }, - "log-update": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, "requires": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } + "js-tokens": "^3.0.0 || ^4.0.0" } }, "lru-cache": { @@ -14934,6 +16540,12 @@ "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", "dev": true }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, "ncp": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ncp/-/ncp-1.0.1.tgz", @@ -15147,12 +16759,14 @@ "dependencies": { "abbrev": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "bundled": true, "dev": true }, "agent-base": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", "bundled": true, "dev": true, @@ -15162,6 +16776,7 @@ }, "agentkeepalive": { "version": "3.5.2", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-3.5.2.tgz", "integrity": "sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ==", "bundled": true, "dev": true, @@ -15171,6 +16786,7 @@ }, "ansi-align": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", "bundled": true, "dev": true, @@ -15180,12 +16796,14 @@ }, "ansi-regex": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "bundled": true, "dev": true }, "ansi-styles": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "bundled": true, "dev": true, @@ -15195,30 +16813,35 @@ }, "ansicolors": { "version": "0.3.2", + "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", "integrity": "sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk=", "bundled": true, "dev": true }, "ansistyles": { "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ansistyles/-/ansistyles-0.1.3.tgz", "integrity": "sha1-XeYEFb2gcbs3EnhUyGT0GyMlRTk=", "bundled": true, "dev": true }, "aproba": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", "bundled": true, "dev": true }, "archy": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", "bundled": true, "dev": true }, "are-we-there-yet": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", "bundled": true, "dev": true, @@ -15229,6 +16852,7 @@ "dependencies": { "readable-stream": { "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "bundled": true, "dev": true, @@ -15244,6 +16868,7 @@ }, "string_decoder": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "bundled": true, "dev": true, @@ -15255,12 +16880,14 @@ }, "asap": { "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", "bundled": true, "dev": true }, "asn1": { "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", "bundled": true, "dev": true, @@ -15270,36 +16897,42 @@ }, "assert-plus": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "bundled": true, "dev": true }, "asynckit": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", "bundled": true, "dev": true }, "aws-sign2": { "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", "bundled": true, "dev": true }, "aws4": { "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", "bundled": true, "dev": true }, "balanced-match": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "bundled": true, "dev": true }, "bcrypt-pbkdf": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", "bundled": true, "dev": true, @@ -15310,6 +16943,7 @@ }, "bin-links": { "version": "1.1.8", + "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-1.1.8.tgz", "integrity": "sha512-KgmVfx+QqggqP9dA3iIc5pA4T1qEEEL+hOhOhNPaUm77OTrJoOXE/C05SJLNJe6m/2wUK7F1tDSou7n5TfCDzQ==", "bundled": true, "dev": true, @@ -15324,12 +16958,14 @@ }, "bluebird": { "version": "3.5.5", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz", "integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==", "bundled": true, "dev": true }, "boxen": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", "bundled": true, "dev": true, @@ -15345,6 +16981,7 @@ }, "brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "bundled": true, "dev": true, @@ -15355,30 +16992,35 @@ }, "buffer-from": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz", "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==", "bundled": true, "dev": true }, "builtins": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", "bundled": true, "dev": true }, "byline": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz", "integrity": "sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE=", "bundled": true, "dev": true }, "byte-size": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-5.0.1.tgz", "integrity": "sha512-/XuKeqWocKsYa/cBY1YbSJSWWqTi4cFgr9S6OyM7PBaPbr9zvNGwWP33vt0uqGhwDdN+y3yhbXVILEUpnwEWGw==", "bundled": true, "dev": true }, "cacache": { "version": "12.0.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz", "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==", "bundled": true, "dev": true, @@ -15402,30 +17044,35 @@ }, "call-limit": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/call-limit/-/call-limit-1.1.1.tgz", "integrity": "sha512-5twvci5b9eRBw2wCfPtN0GmlR2/gadZqyFpPhOK6CvMFoFgA+USnZ6Jpu1lhG9h85pQ3Ouil3PfXWRD4EUaRiQ==", "bundled": true, "dev": true }, "camelcase": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", "bundled": true, "dev": true }, "capture-stack-trace": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz", "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=", "bundled": true, "dev": true }, "caseless": { "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", "bundled": true, "dev": true }, "chalk": { "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "bundled": true, "dev": true, @@ -15437,18 +17084,21 @@ }, "chownr": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", "bundled": true, "dev": true }, "ci-info": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", "bundled": true, "dev": true }, "cidr-regex": { "version": "2.0.10", + "resolved": "https://registry.npmjs.org/cidr-regex/-/cidr-regex-2.0.10.tgz", "integrity": "sha512-sB3ogMQXWvreNPbJUZMRApxuRYd+KoIo4RGQ81VatjmMW6WJPo+IJZ2846FGItr9VzKo5w7DXzijPLGtSd0N3Q==", "bundled": true, "dev": true, @@ -15458,12 +17108,14 @@ }, "cli-boxes": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", "bundled": true, "dev": true }, "cli-columns": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/cli-columns/-/cli-columns-3.1.2.tgz", "integrity": "sha1-ZzLZcpee/CrkRKHwjgj6E5yWoY4=", "bundled": true, "dev": true, @@ -15474,6 +17126,7 @@ }, "cli-table3": { "version": "0.5.1", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", "bundled": true, "dev": true, @@ -15485,6 +17138,7 @@ }, "cliui": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "bundled": true, "dev": true, @@ -15496,18 +17150,21 @@ "dependencies": { "ansi-regex": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "bundled": true, "dev": true }, "is-fullwidth-code-point": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "bundled": true, "dev": true }, "string-width": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "bundled": true, "dev": true, @@ -15519,6 +17176,7 @@ }, "strip-ansi": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "bundled": true, "dev": true, @@ -15530,12 +17188,14 @@ }, "clone": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", "bundled": true, "dev": true }, "cmd-shim": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-3.0.3.tgz", "integrity": "sha512-DtGg+0xiFhQIntSBRzL2fRQBnmtAVwXIDo4Qq46HPpObYquxMaZS4sb82U9nH91qJrlosC1wa9gwr0QyL/HypA==", "bundled": true, "dev": true, @@ -15546,12 +17206,14 @@ }, "code-point-at": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "bundled": true, "dev": true }, "color-convert": { "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", "bundled": true, "dev": true, @@ -15561,12 +17223,14 @@ }, "color-name": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "bundled": true, "dev": true }, "colors": { "version": "1.3.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz", "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==", "bundled": true, "dev": true, @@ -15574,6 +17238,7 @@ }, "columnify": { "version": "1.5.4", + "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.5.4.tgz", "integrity": "sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs=", "bundled": true, "dev": true, @@ -15584,6 +17249,7 @@ }, "combined-stream": { "version": "1.0.6", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", "bundled": true, "dev": true, @@ -15593,12 +17259,14 @@ }, "concat-map": { "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "bundled": true, "dev": true }, "concat-stream": { "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "bundled": true, "dev": true, @@ -15611,6 +17279,7 @@ "dependencies": { "readable-stream": { "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "bundled": true, "dev": true, @@ -15626,6 +17295,7 @@ }, "string_decoder": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "bundled": true, "dev": true, @@ -15637,6 +17307,7 @@ }, "config-chain": { "version": "1.1.12", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", "bundled": true, "dev": true, @@ -15647,6 +17318,7 @@ }, "configstore": { "version": "3.1.5", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.5.tgz", "integrity": "sha512-nlOhI4+fdzoK5xmJ+NY+1gZK56bwEaWZr8fYuXohZ9Vkc1o3a4T/R3M+yE/w7x/ZVJ1zF8c+oaOvF0dztdUgmA==", "bundled": true, "dev": true, @@ -15661,12 +17333,14 @@ }, "console-control-strings": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", "bundled": true, "dev": true }, "copy-concurrently": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", "bundled": true, "dev": true, @@ -15681,12 +17355,14 @@ "dependencies": { "aproba": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "bundled": true, "dev": true }, "iferr": { "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", "bundled": true, "dev": true @@ -15695,12 +17371,14 @@ }, "core-util-is": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "bundled": true, "dev": true }, "create-error-class": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", "bundled": true, "dev": true, @@ -15710,6 +17388,7 @@ }, "cross-spawn": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "bundled": true, "dev": true, @@ -15721,6 +17400,7 @@ "dependencies": { "lru-cache": { "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "bundled": true, "dev": true, @@ -15731,6 +17411,7 @@ }, "yallist": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", "bundled": true, "dev": true @@ -15739,18 +17420,21 @@ }, "crypto-random-string": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", "bundled": true, "dev": true }, "cyclist": { "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", "bundled": true, "dev": true }, "dashdash": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "bundled": true, "dev": true, @@ -15760,6 +17444,7 @@ }, "debug": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "bundled": true, "dev": true, @@ -15769,6 +17454,7 @@ "dependencies": { "ms": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "bundled": true, "dev": true @@ -15777,30 +17463,35 @@ }, "debuglog": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", "integrity": "sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=", "bundled": true, "dev": true }, "decamelize": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "bundled": true, "dev": true }, "decode-uri-component": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "bundled": true, "dev": true }, "deep-extend": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "bundled": true, "dev": true }, "defaults": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", "bundled": true, "dev": true, @@ -15810,6 +17501,7 @@ }, "define-properties": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "bundled": true, "dev": true, @@ -15819,30 +17511,35 @@ }, "delayed-stream": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "bundled": true, "dev": true }, "delegates": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", "bundled": true, "dev": true }, "detect-indent": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", "integrity": "sha1-OHHMCmoALow+Wzz38zYmRnXwa50=", "bundled": true, "dev": true }, "detect-newline": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=", "bundled": true, "dev": true }, "dezalgo": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=", "bundled": true, "dev": true, @@ -15853,6 +17550,7 @@ }, "dot-prop": { "version": "4.2.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.1.tgz", "integrity": "sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==", "bundled": true, "dev": true, @@ -15862,18 +17560,21 @@ }, "dotenv": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-5.0.1.tgz", "integrity": "sha512-4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow==", "bundled": true, "dev": true }, "duplexer3": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", "bundled": true, "dev": true }, "duplexify": { "version": "3.6.0", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.0.tgz", "integrity": "sha512-fO3Di4tBKJpYTFHAxTU00BcfWMY9w24r/x21a6rZRbsD/ToUgGxsMbiGRmB7uVAXeGKXD9MwiLZa5E97EVgIRQ==", "bundled": true, "dev": true, @@ -15886,6 +17587,7 @@ "dependencies": { "readable-stream": { "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "bundled": true, "dev": true, @@ -15901,6 +17603,7 @@ }, "string_decoder": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "bundled": true, "dev": true, @@ -15912,6 +17615,7 @@ }, "ecc-jsbn": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", "bundled": true, "dev": true, @@ -15923,18 +17627,21 @@ }, "editor": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/editor/-/editor-1.0.0.tgz", "integrity": "sha1-YMf4e9YrzGqJT6jM1q+3gjok90I=", "bundled": true, "dev": true }, "emoji-regex": { "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "bundled": true, "dev": true }, "encoding": { "version": "0.1.12", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", "bundled": true, "dev": true, @@ -15944,6 +17651,7 @@ }, "end-of-stream": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", "bundled": true, "dev": true, @@ -15953,18 +17661,21 @@ }, "env-paths": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.0.tgz", "integrity": "sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA==", "bundled": true, "dev": true }, "err-code": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-1.1.2.tgz", "integrity": "sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA=", "bundled": true, "dev": true }, "errno": { "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", "bundled": true, "dev": true, @@ -15974,6 +17685,7 @@ }, "es-abstract": { "version": "1.12.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz", "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", "bundled": true, "dev": true, @@ -15987,6 +17699,7 @@ }, "es-to-primitive": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", "bundled": true, "dev": true, @@ -15998,12 +17711,14 @@ }, "es6-promise": { "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", "bundled": true, "dev": true }, "es6-promisify": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", "bundled": true, "dev": true, @@ -16013,12 +17728,14 @@ }, "escape-string-regexp": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "bundled": true, "dev": true }, "execa": { "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", "bundled": true, "dev": true, @@ -16034,6 +17751,7 @@ "dependencies": { "get-stream": { "version": "3.0.0", + "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", "bundled": true, "dev": true @@ -16042,36 +17760,42 @@ }, "extend": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "bundled": true, "dev": true }, "extsprintf": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", "bundled": true, "dev": true }, "fast-json-stable-stringify": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", "bundled": true, "dev": true }, "figgy-pudding": { "version": "3.5.1", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==", "bundled": true, "dev": true }, "find-npm-prefix": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/find-npm-prefix/-/find-npm-prefix-1.0.2.tgz", "integrity": "sha512-KEftzJ+H90x6pcKtdXZEPsQse8/y/UnvzRKrOSQFprnrGaFuJ62fVkP34Iu2IYuMvyauCyoLTNkJZgrrGA2wkA==", "bundled": true, "dev": true }, "flush-write-stream": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", "bundled": true, "dev": true, @@ -16082,6 +17806,7 @@ "dependencies": { "readable-stream": { "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "bundled": true, "dev": true, @@ -16097,6 +17822,7 @@ }, "string_decoder": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "bundled": true, "dev": true, @@ -16108,12 +17834,14 @@ }, "forever-agent": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", "bundled": true, "dev": true }, "form-data": { "version": "2.3.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", "bundled": true, "dev": true, @@ -16125,6 +17853,7 @@ }, "from2": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", "bundled": true, "dev": true, @@ -16135,6 +17864,7 @@ "dependencies": { "readable-stream": { "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "bundled": true, "dev": true, @@ -16150,6 +17880,7 @@ }, "string_decoder": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "bundled": true, "dev": true, @@ -16161,6 +17892,7 @@ }, "fs-minipass": { "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", "bundled": true, "dev": true, @@ -16170,6 +17902,7 @@ "dependencies": { "minipass": { "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", "bundled": true, "dev": true, @@ -16182,6 +17915,7 @@ }, "fs-vacuum": { "version": "1.2.10", + "resolved": "https://registry.npmjs.org/fs-vacuum/-/fs-vacuum-1.2.10.tgz", "integrity": "sha1-t2Kb7AekAxolSP35n17PHMizHjY=", "bundled": true, "dev": true, @@ -16193,6 +17927,7 @@ }, "fs-write-stream-atomic": { "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", "bundled": true, "dev": true, @@ -16205,12 +17940,14 @@ "dependencies": { "iferr": { "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", "bundled": true, "dev": true }, "readable-stream": { "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "bundled": true, "dev": true, @@ -16226,6 +17963,7 @@ }, "string_decoder": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "bundled": true, "dev": true, @@ -16237,18 +17975,21 @@ }, "fs.realpath": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "bundled": true, "dev": true }, "function-bind": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "bundled": true, "dev": true }, "gauge": { "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "bundled": true, "dev": true, @@ -16265,12 +18006,14 @@ "dependencies": { "aproba": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "bundled": true, "dev": true }, "string-width": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "bundled": true, "dev": true, @@ -16284,12 +18027,14 @@ }, "genfun": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/genfun/-/genfun-5.0.0.tgz", "integrity": "sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA==", "bundled": true, "dev": true }, "gentle-fs": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/gentle-fs/-/gentle-fs-2.3.1.tgz", "integrity": "sha512-OlwBBwqCFPcjm33rF2BjW+Pr6/ll2741l+xooiwTCeaX2CA1ZuclavyMBe0/KlR21/XGsgY6hzEQZ15BdNa13Q==", "bundled": true, "dev": true, @@ -16309,12 +18054,14 @@ "dependencies": { "aproba": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "bundled": true, "dev": true }, "iferr": { "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", "bundled": true, "dev": true @@ -16323,12 +18070,14 @@ }, "get-caller-file": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "bundled": true, "dev": true }, "get-stream": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "bundled": true, "dev": true, @@ -16338,6 +18087,7 @@ }, "getpass": { "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "bundled": true, "dev": true, @@ -16347,6 +18097,7 @@ }, "glob": { "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "bundled": true, "dev": true, @@ -16361,6 +18112,7 @@ }, "global-dirs": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", "bundled": true, "dev": true, @@ -16370,6 +18122,7 @@ }, "got": { "version": "6.7.1", + "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", "bundled": true, "dev": true, @@ -16389,6 +18142,7 @@ "dependencies": { "get-stream": { "version": "3.0.0", + "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", "bundled": true, "dev": true @@ -16397,18 +18151,21 @@ }, "graceful-fs": { "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", "bundled": true, "dev": true }, "har-schema": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", "bundled": true, "dev": true }, "har-validator": { "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", "bundled": true, "dev": true, @@ -16419,6 +18176,7 @@ "dependencies": { "ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "bundled": true, "dev": true, @@ -16431,12 +18189,14 @@ }, "fast-deep-equal": { "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "bundled": true, "dev": true }, "json-schema-traverse": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "bundled": true, "dev": true @@ -16445,6 +18205,7 @@ }, "has": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "bundled": true, "dev": true, @@ -16454,36 +18215,42 @@ }, "has-flag": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "bundled": true, "dev": true }, "has-symbols": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", "bundled": true, "dev": true }, "has-unicode": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", "bundled": true, "dev": true }, "hosted-git-info": { "version": "2.8.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", "bundled": true, "dev": true }, "http-cache-semantics": { "version": "3.8.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", "bundled": true, "dev": true }, "http-proxy-agent": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", "bundled": true, "dev": true, @@ -16494,6 +18261,7 @@ }, "http-signature": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "bundled": true, "dev": true, @@ -16505,6 +18273,7 @@ }, "https-proxy-agent": { "version": "2.2.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", "bundled": true, "dev": true, @@ -16515,6 +18284,7 @@ }, "humanize-ms": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", "bundled": true, "dev": true, @@ -16524,6 +18294,7 @@ }, "iconv-lite": { "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", "bundled": true, "dev": true, @@ -16533,12 +18304,14 @@ }, "iferr": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-1.0.2.tgz", "integrity": "sha512-9AfeLfji44r5TKInjhz3W9DyZI1zR1JAf2hVBMGhddAKPqBsupb89jGfbCTHIGZd6fGZl9WlHdn4AObygyMKwg==", "bundled": true, "dev": true }, "ignore-walk": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", "bundled": true, "dev": true, @@ -16548,24 +18321,28 @@ }, "import-lazy": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", "bundled": true, "dev": true }, "imurmurhash": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "bundled": true, "dev": true }, "infer-owner": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", "bundled": true, "dev": true }, "inflight": { "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "bundled": true, "dev": true, @@ -16576,6 +18353,7 @@ }, "inherits": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "bundled": true, "dev": true @@ -16589,6 +18367,7 @@ }, "init-package-json": { "version": "1.10.3", + "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-1.10.3.tgz", "integrity": "sha512-zKSiXKhQveNteyhcj1CoOP8tqp1QuxPIPBl8Bid99DGLFqA1p87M6lNgfjJHSBoWJJlidGOv5rWjyYKEB3g2Jw==", "bundled": true, "dev": true, @@ -16605,24 +18384,28 @@ }, "ip": { "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", "bundled": true, "dev": true }, "ip-regex": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", "bundled": true, "dev": true }, "is-callable": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", "bundled": true, "dev": true }, "is-ci": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", "bundled": true, "dev": true, @@ -16632,6 +18415,7 @@ "dependencies": { "ci-info": { "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", "bundled": true, "dev": true @@ -16640,6 +18424,7 @@ }, "is-cidr": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-cidr/-/is-cidr-3.0.0.tgz", "integrity": "sha512-8Xnnbjsb0x462VoYiGlhEi+drY8SFwrHiSYuzc/CEwco55vkehTaxAyIjEdpi3EMvLPPJAJi9FlzP+h+03gp0Q==", "bundled": true, "dev": true, @@ -16649,12 +18434,14 @@ }, "is-date-object": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", "bundled": true, "dev": true }, "is-fullwidth-code-point": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "bundled": true, "dev": true, @@ -16664,6 +18451,7 @@ }, "is-installed-globally": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", "bundled": true, "dev": true, @@ -16674,18 +18462,21 @@ }, "is-npm": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", "bundled": true, "dev": true }, "is-obj": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", "bundled": true, "dev": true }, "is-path-inside": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", "bundled": true, "dev": true, @@ -16695,12 +18486,14 @@ }, "is-redirect": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", "bundled": true, "dev": true }, "is-regex": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", "bundled": true, "dev": true, @@ -16710,18 +18503,21 @@ }, "is-retry-allowed": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", "bundled": true, "dev": true }, "is-stream": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "bundled": true, "dev": true }, "is-symbol": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", "bundled": true, "dev": true, @@ -16731,30 +18527,35 @@ }, "is-typedarray": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "bundled": true, "dev": true }, "isarray": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "bundled": true, "dev": true }, "isexe": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "bundled": true, "dev": true }, "isstream": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", "bundled": true, "dev": true }, "jsbn": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", "bundled": true, "dev": true, @@ -16762,30 +18563,35 @@ }, "json-parse-better-errors": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "bundled": true, "dev": true }, "json-schema": { "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", "bundled": true, "dev": true }, "json-stringify-safe": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", "bundled": true, "dev": true }, "jsonparse": { "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", "bundled": true, "dev": true }, "JSONStream": { "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", "bundled": true, "dev": true, @@ -16796,6 +18602,7 @@ }, "jsprim": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", "bundled": true, "dev": true, @@ -16808,6 +18615,7 @@ }, "latest-version": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", "bundled": true, "dev": true, @@ -16817,12 +18625,14 @@ }, "lazy-property": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lazy-property/-/lazy-property-1.0.0.tgz", "integrity": "sha1-hN3Es3Bnm6i9TNz6TAa0PVcREUc=", "bundled": true, "dev": true }, "libcipm": { "version": "4.0.8", + "resolved": "https://registry.npmjs.org/libcipm/-/libcipm-4.0.8.tgz", "integrity": "sha512-IN3hh2yDJQtZZ5paSV4fbvJg4aHxCCg5tcZID/dSVlTuUiWktsgaldVljJv6Z5OUlYspx6xQkbR0efNodnIrOA==", "bundled": true, "dev": true, @@ -16846,6 +18656,7 @@ }, "libnpm": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/libnpm/-/libnpm-3.0.1.tgz", "integrity": "sha512-d7jU5ZcMiTfBqTUJVZ3xid44fE5ERBm9vBnmhp2ECD2Ls+FNXWxHSkO7gtvrnbLO78gwPdNPz1HpsF3W4rjkBQ==", "bundled": true, "dev": true, @@ -16874,6 +18685,7 @@ }, "libnpmaccess": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-3.0.2.tgz", "integrity": "sha512-01512AK7MqByrI2mfC7h5j8N9V4I7MHJuk9buo8Gv+5QgThpOgpjB7sQBDDkeZqRteFb1QM/6YNdHfG7cDvfAQ==", "bundled": true, "dev": true, @@ -16886,6 +18698,7 @@ }, "libnpmconfig": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/libnpmconfig/-/libnpmconfig-1.2.1.tgz", "integrity": "sha512-9esX8rTQAHqarx6qeZqmGQKBNZR5OIbl/Ayr0qQDy3oXja2iFVQQI81R6GZ2a02bSNZ9p3YOGX1O6HHCb1X7kA==", "bundled": true, "dev": true, @@ -16897,6 +18710,7 @@ "dependencies": { "find-up": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "bundled": true, "dev": true, @@ -16906,6 +18720,7 @@ }, "locate-path": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "bundled": true, "dev": true, @@ -16916,6 +18731,7 @@ }, "p-limit": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", "bundled": true, "dev": true, @@ -16925,6 +18741,7 @@ }, "p-locate": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "bundled": true, "dev": true, @@ -16934,6 +18751,7 @@ }, "p-try": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "bundled": true, "dev": true @@ -16942,6 +18760,7 @@ }, "libnpmhook": { "version": "5.0.3", + "resolved": "https://registry.npmjs.org/libnpmhook/-/libnpmhook-5.0.3.tgz", "integrity": "sha512-UdNLMuefVZra/wbnBXECZPefHMGsVDTq5zaM/LgKNE9Keyl5YXQTnGAzEo+nFOpdRqTWI9LYi4ApqF9uVCCtuA==", "bundled": true, "dev": true, @@ -16954,6 +18773,7 @@ }, "libnpmorg": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/libnpmorg/-/libnpmorg-1.0.1.tgz", "integrity": "sha512-0sRUXLh+PLBgZmARvthhYXQAWn0fOsa6T5l3JSe2n9vKG/lCVK4nuG7pDsa7uMq+uTt2epdPK+a2g6btcY11Ww==", "bundled": true, "dev": true, @@ -16966,6 +18786,7 @@ }, "libnpmpublish": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-1.1.2.tgz", "integrity": "sha512-2yIwaXrhTTcF7bkJKIKmaCV9wZOALf/gsTDxVSu/Gu/6wiG3fA8ce8YKstiWKTxSFNC0R7isPUb6tXTVFZHt2g==", "bundled": true, "dev": true, @@ -16983,6 +18804,7 @@ }, "libnpmsearch": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/libnpmsearch/-/libnpmsearch-2.0.2.tgz", "integrity": "sha512-VTBbV55Q6fRzTdzziYCr64+f8AopQ1YZ+BdPOv16UegIEaE8C0Kch01wo4s3kRTFV64P121WZJwgmBwrq68zYg==", "bundled": true, "dev": true, @@ -16994,6 +18816,7 @@ }, "libnpmteam": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/libnpmteam/-/libnpmteam-1.0.2.tgz", "integrity": "sha512-p420vM28Us04NAcg1rzgGW63LMM6rwe+6rtZpfDxCcXxM0zUTLl7nPFEnRF3JfFBF5skF/yuZDUthTsHgde8QA==", "bundled": true, "dev": true, @@ -17006,6 +18829,7 @@ }, "libnpx": { "version": "10.2.4", + "resolved": "https://registry.npmjs.org/libnpx/-/libnpx-10.2.4.tgz", "integrity": "sha512-BPc0D1cOjBeS8VIBKUu5F80s6njm0wbVt7CsGMrIcJ+SI7pi7V0uVPGpEMH9H5L8csOcclTxAXFE2VAsJXUhfA==", "bundled": true, "dev": true, @@ -17022,6 +18846,7 @@ }, "lock-verify": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lock-verify/-/lock-verify-2.1.0.tgz", "integrity": "sha512-vcLpxnGvrqisKvLQ2C2v0/u7LVly17ak2YSgoK4PrdsYBXQIax19vhKiLfvKNFx7FRrpTnitrpzF/uuCMuorIg==", "bundled": true, "dev": true, @@ -17032,6 +18857,7 @@ }, "lockfile": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lockfile/-/lockfile-1.0.4.tgz", "integrity": "sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA==", "bundled": true, "dev": true, @@ -17041,12 +18867,14 @@ }, "lodash._baseindexof": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash._baseindexof/-/lodash._baseindexof-3.1.0.tgz", "integrity": "sha1-/lK1OhxnYeQmGNZU5KJXie1hgiw=", "bundled": true, - "dev": true + "extraneous": true }, "lodash._baseuniq": { "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash._baseuniq/-/lodash._baseuniq-4.6.0.tgz", "integrity": "sha1-DrtE5FaBSveQXGIS+iybLVG4Qeg=", "bundled": true, "dev": true, @@ -17057,81 +18885,94 @@ }, "lodash._bindcallback": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz", "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=", "bundled": true, - "dev": true + "extraneous": true }, "lodash._cacheindexof": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/lodash._cacheindexof/-/lodash._cacheindexof-3.0.2.tgz", "integrity": "sha1-PcaayCSY0u5ePOVgkbr9Ktx73pI=", "bundled": true, - "dev": true + "extraneous": true }, "lodash._createcache": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lodash._createcache/-/lodash._createcache-3.1.2.tgz", "integrity": "sha1-VtagZAF2JeeevKa4AY4XRAvc8JM=", "bundled": true, - "dev": true, + "extraneous": true, "requires": { "lodash._getnative": "^3.0.0" } }, "lodash._createset": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/lodash._createset/-/lodash._createset-4.0.3.tgz", "integrity": "sha1-D0ZZ+7CddRlPqeK4imZE02PJ/iY=", "bundled": true, "dev": true }, "lodash._getnative": { "version": "3.9.1", + "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", "bundled": true, - "dev": true + "extraneous": true }, "lodash._root": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=", "bundled": true, "dev": true }, "lodash.clonedeep": { "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", "bundled": true, "dev": true }, "lodash.restparam": { "version": "3.6.1", + "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", "bundled": true, - "dev": true + "extraneous": true }, "lodash.union": { "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=", "bundled": true, "dev": true }, "lodash.uniq": { "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", "bundled": true, "dev": true }, "lodash.without": { "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.without/-/lodash.without-4.4.0.tgz", "integrity": "sha1-PNRXSgC2e643OpS3SHcmQFB7eqw=", "bundled": true, "dev": true }, "lowercase-keys": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", "bundled": true, "dev": true }, "lru-cache": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "bundled": true, "dev": true, @@ -17141,6 +18982,7 @@ }, "make-dir": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", "bundled": true, "dev": true, @@ -17150,6 +18992,7 @@ }, "make-fetch-happen": { "version": "5.0.2", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-5.0.2.tgz", "integrity": "sha512-07JHC0r1ykIoruKO8ifMXu+xEU8qOXDFETylktdug6vJDACnP+HKevOu3PXyNPzFyTSlz8vrBYlBO1JZRe8Cag==", "bundled": true, "dev": true, @@ -17169,18 +19012,21 @@ }, "meant": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/meant/-/meant-1.0.2.tgz", "integrity": "sha512-KN+1uowN/NK+sT/Lzx7WSGIj2u+3xe5n2LbwObfjOhPZiA+cCfCm6idVl0RkEfjThkw5XJ96CyRcanq6GmKtUg==", "bundled": true, "dev": true }, "mime-db": { "version": "1.35.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz", "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==", "bundled": true, "dev": true }, "mime-types": { "version": "2.1.19", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz", "integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==", "bundled": true, "dev": true, @@ -17190,6 +19036,7 @@ }, "minimatch": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "bundled": true, "dev": true, @@ -17199,12 +19046,14 @@ }, "minimist": { "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "bundled": true, "dev": true }, "minizlib": { "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", "bundled": true, "dev": true, @@ -17214,6 +19063,7 @@ "dependencies": { "minipass": { "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", "bundled": true, "dev": true, @@ -17226,6 +19076,7 @@ }, "mississippi": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", "bundled": true, "dev": true, @@ -17244,6 +19095,7 @@ }, "mkdirp": { "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "bundled": true, "dev": true, @@ -17253,6 +19105,7 @@ "dependencies": { "minimist": { "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "bundled": true, "dev": true @@ -17261,6 +19114,7 @@ }, "move-concurrently": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", "bundled": true, "dev": true, @@ -17275,6 +19129,7 @@ "dependencies": { "aproba": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "bundled": true, "dev": true @@ -17283,18 +19138,21 @@ }, "ms": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", "bundled": true, "dev": true }, "mute-stream": { "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", "bundled": true, "dev": true }, "node-fetch-npm": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-fetch-npm/-/node-fetch-npm-2.0.2.tgz", "integrity": "sha512-nJIxm1QmAj4v3nfCvEeCrYSoVwXyxLnaPBK5W1W5DGEJwjlKuC2VEUycGw5oxk+4zZahRrB84PUJJgEmhFTDFw==", "bundled": true, "dev": true, @@ -17306,6 +19164,7 @@ }, "node-gyp": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-5.1.0.tgz", "integrity": "sha512-OUTryc5bt/P8zVgNUmC6xdXiDJxLMAW8cF5tLQOT9E5sOQj+UeQxnnPy74K3CLCa/SOjjBlbuzDLR8ANwA+wmw==", "bundled": true, "dev": true, @@ -17325,6 +19184,7 @@ }, "nopt": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", "bundled": true, "dev": true, @@ -17335,6 +19195,7 @@ }, "normalize-package-data": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "bundled": true, "dev": true, @@ -17347,6 +19208,7 @@ "dependencies": { "resolve": { "version": "1.10.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", "bundled": true, "dev": true, @@ -17358,6 +19220,7 @@ }, "npm-audit-report": { "version": "1.3.3", + "resolved": "https://registry.npmjs.org/npm-audit-report/-/npm-audit-report-1.3.3.tgz", "integrity": "sha512-8nH/JjsFfAWMvn474HB9mpmMjrnKb1Hx/oTAdjv4PT9iZBvBxiZ+wtDUapHCJwLqYGQVPaAfs+vL5+5k9QndXw==", "bundled": true, "dev": true, @@ -17368,6 +19231,7 @@ }, "npm-bundled": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz", "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", "bundled": true, "dev": true, @@ -17377,12 +19241,14 @@ }, "npm-cache-filename": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/npm-cache-filename/-/npm-cache-filename-1.0.2.tgz", "integrity": "sha1-3tMGxbC/yHCp6fr4I7xfKD4FrhE=", "bundled": true, "dev": true }, "npm-install-checks": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-3.0.2.tgz", "integrity": "sha512-E4kzkyZDIWoin6uT5howP8VDvkM+E8IQDcHAycaAxMbwkqhIg5eEYALnXOl3Hq9MrkdQB/2/g1xwBINXdKSRkg==", "bundled": true, "dev": true, @@ -17392,6 +19258,7 @@ }, "npm-lifecycle": { "version": "3.1.5", + "resolved": "https://registry.npmjs.org/npm-lifecycle/-/npm-lifecycle-3.1.5.tgz", "integrity": "sha512-lDLVkjfZmvmfvpvBzA4vzee9cn+Me4orq0QF8glbswJVEbIcSNWib7qGOffolysc3teCqbbPZZkzbr3GQZTL1g==", "bundled": true, "dev": true, @@ -17408,18 +19275,21 @@ }, "npm-logical-tree": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/npm-logical-tree/-/npm-logical-tree-1.2.1.tgz", "integrity": "sha512-AJI/qxDB2PWI4LG1CYN579AY1vCiNyWfkiquCsJWqntRu/WwimVrC8yXeILBFHDwxfOejxewlmnvW9XXjMlYIg==", "bundled": true, "dev": true }, "npm-normalize-package-bin": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", "bundled": true, "dev": true }, "npm-package-arg": { "version": "6.1.1", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-6.1.1.tgz", "integrity": "sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg==", "bundled": true, "dev": true, @@ -17432,6 +19302,7 @@ }, "npm-packlist": { "version": "1.4.8", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz", "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", "bundled": true, "dev": true, @@ -17443,6 +19314,7 @@ }, "npm-pick-manifest": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-3.0.2.tgz", "integrity": "sha512-wNprTNg+X5nf+tDi+hbjdHhM4bX+mKqv6XmPh7B5eG+QY9VARfQPfCEH013H5GqfNj6ee8Ij2fg8yk0mzps1Vw==", "bundled": true, "dev": true, @@ -17454,6 +19326,7 @@ }, "npm-profile": { "version": "4.0.4", + "resolved": "https://registry.npmjs.org/npm-profile/-/npm-profile-4.0.4.tgz", "integrity": "sha512-Ta8xq8TLMpqssF0H60BXS1A90iMoM6GeKwsmravJ6wYjWwSzcYBTdyWa3DZCYqPutacBMEm7cxiOkiIeCUAHDQ==", "bundled": true, "dev": true, @@ -17465,6 +19338,7 @@ }, "npm-registry-fetch": { "version": "4.0.7", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-4.0.7.tgz", "integrity": "sha512-cny9v0+Mq6Tjz+e0erFAB+RYJ/AVGzkjnISiobqP8OWj9c9FLoZZu8/SPSKJWE17F1tk4018wfjV+ZbIbqC7fQ==", "bundled": true, "dev": true, @@ -17480,6 +19354,7 @@ "dependencies": { "safe-buffer": { "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "bundled": true, "dev": true @@ -17488,6 +19363,7 @@ }, "npm-run-path": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "bundled": true, "dev": true, @@ -17497,12 +19373,14 @@ }, "npm-user-validate": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-user-validate/-/npm-user-validate-1.0.1.tgz", "integrity": "sha512-uQwcd/tY+h1jnEaze6cdX/LrhWhoBxfSknxentoqmIuStxUExxjWd3ULMLFPiFUrZKbOVMowH6Jq2FRWfmhcEw==", "bundled": true, "dev": true }, "npmlog": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "bundled": true, "dev": true, @@ -17515,30 +19393,35 @@ }, "number-is-nan": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "bundled": true, "dev": true }, "oauth-sign": { "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", "bundled": true, "dev": true }, "object-assign": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "bundled": true, "dev": true }, "object-keys": { "version": "1.0.12", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==", "bundled": true, "dev": true }, "object.getownpropertydescriptors": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", "bundled": true, "dev": true, @@ -17549,6 +19432,7 @@ }, "once": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "bundled": true, "dev": true, @@ -17565,18 +19449,21 @@ }, "os-homedir": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "bundled": true, "dev": true }, "os-tmpdir": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "bundled": true, "dev": true }, "osenv": { "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "bundled": true, "dev": true, @@ -17587,12 +19474,14 @@ }, "p-finally": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", "bundled": true, "dev": true }, "package-json": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", "bundled": true, "dev": true, @@ -17605,6 +19494,7 @@ }, "pacote": { "version": "9.5.12", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-9.5.12.tgz", "integrity": "sha512-BUIj/4kKbwWg4RtnBncXPJd15piFSVNpTzY0rysSr3VnMowTYgkGKcaHrbReepAkjTr8lH2CVWRi58Spg2CicQ==", "bundled": true, "dev": true, @@ -17643,6 +19533,7 @@ "dependencies": { "minipass": { "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", "bundled": true, "dev": true, @@ -17655,6 +19546,7 @@ }, "parallel-transform": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", "bundled": true, "dev": true, @@ -17666,6 +19558,7 @@ "dependencies": { "readable-stream": { "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "bundled": true, "dev": true, @@ -17681,6 +19574,7 @@ }, "string_decoder": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "bundled": true, "dev": true, @@ -17692,66 +19586,77 @@ }, "path-exists": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "bundled": true, "dev": true }, "path-is-absolute": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "bundled": true, "dev": true }, "path-is-inside": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", "bundled": true, "dev": true }, "path-key": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", "bundled": true, "dev": true }, "path-parse": { "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", "bundled": true, "dev": true }, "performance-now": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", "bundled": true, "dev": true }, "pify": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "bundled": true, "dev": true }, "prepend-http": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", "bundled": true, "dev": true }, "process-nextick-args": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", "bundled": true, "dev": true }, "promise-inflight": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", "bundled": true, "dev": true }, "promise-retry": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-1.1.1.tgz", "integrity": "sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0=", "bundled": true, "dev": true, @@ -17762,6 +19667,7 @@ "dependencies": { "retry": { "version": "0.10.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz", "integrity": "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=", "bundled": true, "dev": true @@ -17770,6 +19676,7 @@ }, "promzard": { "version": "0.3.0", + "resolved": "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz", "integrity": "sha1-JqXW7ox97kyxIggwWs+5O6OCqe4=", "bundled": true, "dev": true, @@ -17779,12 +19686,14 @@ }, "proto-list": { "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", "bundled": true, "dev": true }, "protoduck": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/protoduck/-/protoduck-5.0.1.tgz", "integrity": "sha512-WxoCeDCoCBY55BMvj4cAEjdVUFGRWed9ZxPlqTKYyw1nDDTQ4pqmnIMAGfJlg7Dx35uB/M+PHJPTmGOvaCaPTg==", "bundled": true, "dev": true, @@ -17794,24 +19703,28 @@ }, "prr": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", "bundled": true, "dev": true }, "pseudomap": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", "bundled": true, "dev": true }, "psl": { "version": "1.1.29", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz", "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==", "bundled": true, "dev": true }, "pump": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "bundled": true, "dev": true, @@ -17822,6 +19735,7 @@ }, "pumpify": { "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", "bundled": true, "dev": true, @@ -17833,6 +19747,7 @@ "dependencies": { "pump": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "bundled": true, "dev": true, @@ -17845,24 +19760,28 @@ }, "punycode": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", "bundled": true, "dev": true }, "qrcode-terminal": { "version": "0.12.0", + "resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz", "integrity": "sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ==", "bundled": true, "dev": true }, "qs": { "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", "bundled": true, "dev": true }, "query-string": { "version": "6.8.2", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.8.2.tgz", "integrity": "sha512-J3Qi8XZJXh93t2FiKyd/7Ec6GNifsjKXUsVFkSBj/kjLsDylWhnCz4NT1bkPcKotttPW+QbKGqqPH8OoI2pdqw==", "bundled": true, "dev": true, @@ -17874,12 +19793,14 @@ }, "qw": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/qw/-/qw-1.0.1.tgz", "integrity": "sha1-77/cdA+a0FQwRCassYNBLMi5ltQ=", "bundled": true, "dev": true }, "rc": { "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "bundled": true, "dev": true, @@ -17892,6 +19813,7 @@ }, "read": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", "bundled": true, "dev": true, @@ -17901,6 +19823,7 @@ }, "read-cmd-shim": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-1.0.5.tgz", "integrity": "sha512-v5yCqQ/7okKoZZkBQUAfTsQ3sVJtXdNfbPnI5cceppoxEVLYA3k+VtV2omkeo8MS94JCy4fSiUwlRBAwCVRPUA==", "bundled": true, "dev": true, @@ -17910,6 +19833,7 @@ }, "read-installed": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/read-installed/-/read-installed-4.0.3.tgz", "integrity": "sha1-/5uLZ/GH0eTCm5/rMfayI6zRkGc=", "bundled": true, "dev": true, @@ -17925,6 +19849,7 @@ }, "read-package-json": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.1.1.tgz", "integrity": "sha512-dAiqGtVc/q5doFz6096CcnXhpYk0ZN8dEKVkGLU0CsASt8SrgF6SF7OTKAYubfvFhWaqofl+Y8HK19GR8jwW+A==", "bundled": true, "dev": true, @@ -17938,6 +19863,7 @@ }, "read-package-tree": { "version": "5.3.1", + "resolved": "https://registry.npmjs.org/read-package-tree/-/read-package-tree-5.3.1.tgz", "integrity": "sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw==", "bundled": true, "dev": true, @@ -17949,6 +19875,7 @@ }, "readable-stream": { "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "bundled": true, "dev": true, @@ -17960,6 +19887,7 @@ }, "readdir-scoped-modules": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==", "bundled": true, "dev": true, @@ -17972,6 +19900,7 @@ }, "registry-auth-token": { "version": "3.4.0", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz", "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==", "bundled": true, "dev": true, @@ -17982,6 +19911,7 @@ }, "registry-url": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", "bundled": true, "dev": true, @@ -17991,6 +19921,7 @@ }, "request": { "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", "bundled": true, "dev": true, @@ -18019,30 +19950,35 @@ }, "require-directory": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "bundled": true, "dev": true }, "require-main-filename": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "bundled": true, "dev": true }, "resolve-from": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "bundled": true, "dev": true }, "retry": { "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", "bundled": true, "dev": true }, "rimraf": { "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "bundled": true, "dev": true, @@ -18052,6 +19988,7 @@ }, "run-queue": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", "bundled": true, "dev": true, @@ -18061,6 +19998,7 @@ "dependencies": { "aproba": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "bundled": true, "dev": true @@ -18069,24 +20007,28 @@ }, "safe-buffer": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "bundled": true, "dev": true }, "safer-buffer": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "bundled": true, "dev": true }, "semver": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "bundled": true, "dev": true }, "semver-diff": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", "bundled": true, "dev": true, @@ -18096,12 +20038,14 @@ }, "set-blocking": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "bundled": true, "dev": true }, "sha": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/sha/-/sha-3.0.0.tgz", "integrity": "sha512-DOYnM37cNsLNSGIG/zZWch5CKIRNoLdYUQTQlcgkRkoYIUwDYjqDyye16YcDZg/OPdcbUgTKMjc4SY6TB7ZAPw==", "bundled": true, "dev": true, @@ -18111,6 +20055,7 @@ }, "shebang-command": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "bundled": true, "dev": true, @@ -18120,30 +20065,35 @@ }, "shebang-regex": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", "bundled": true, "dev": true }, "signal-exit": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "bundled": true, "dev": true }, "slide": { "version": "1.1.6", + "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", "bundled": true, "dev": true }, "smart-buffer": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.1.0.tgz", "integrity": "sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==", "bundled": true, "dev": true }, "socks": { "version": "2.3.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.3.3.tgz", "integrity": "sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA==", "bundled": true, "dev": true, @@ -18154,6 +20104,7 @@ }, "socks-proxy-agent": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz", "integrity": "sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg==", "bundled": true, "dev": true, @@ -18164,6 +20115,7 @@ "dependencies": { "agent-base": { "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", "bundled": true, "dev": true, @@ -18175,12 +20127,14 @@ }, "sorted-object": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/sorted-object/-/sorted-object-2.0.1.tgz", "integrity": "sha1-fWMfS9OnmKJK8d/8+/6DM3pd9fw=", "bundled": true, "dev": true }, "sorted-union-stream": { "version": "2.1.3", + "resolved": "https://registry.npmjs.org/sorted-union-stream/-/sorted-union-stream-2.1.3.tgz", "integrity": "sha1-x3lMfgd4gAUv9xqNSi27Sppjisc=", "bundled": true, "dev": true, @@ -18191,6 +20145,7 @@ "dependencies": { "from2": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-1.3.0.tgz", "integrity": "sha1-iEE7qqX5pZfP3pIh2GmGzTwGHf0=", "bundled": true, "dev": true, @@ -18201,12 +20156,14 @@ }, "isarray": { "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", "bundled": true, "dev": true }, "readable-stream": { "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "bundled": true, "dev": true, @@ -18219,6 +20176,7 @@ }, "string_decoder": { "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", "bundled": true, "dev": true @@ -18227,6 +20185,7 @@ }, "spdx-correct": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", "bundled": true, "dev": true, @@ -18237,12 +20196,14 @@ }, "spdx-exceptions": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==", "bundled": true, "dev": true }, "spdx-expression-parse": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", "bundled": true, "dev": true, @@ -18253,18 +20214,21 @@ }, "spdx-license-ids": { "version": "3.0.5", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", "bundled": true, "dev": true }, "split-on-first": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==", "bundled": true, "dev": true }, "sshpk": { "version": "1.14.2", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", "bundled": true, "dev": true, @@ -18282,6 +20246,7 @@ }, "ssri": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", "bundled": true, "dev": true, @@ -18291,6 +20256,7 @@ }, "stream-each": { "version": "1.2.2", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.2.tgz", "integrity": "sha512-mc1dbFhGBxvTM3bIWmAAINbqiuAk9TATcfIQC8P+/+HJefgaiTlMn2dHvkX8qlI12KeYKSQ1Ua9RrIqrn1VPoA==", "bundled": true, "dev": true, @@ -18301,6 +20267,7 @@ }, "stream-iterate": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/stream-iterate/-/stream-iterate-1.2.0.tgz", "integrity": "sha1-K9fHcpbBcCpGSIuK1B95hl7s1OE=", "bundled": true, "dev": true, @@ -18311,6 +20278,7 @@ "dependencies": { "readable-stream": { "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "bundled": true, "dev": true, @@ -18326,6 +20294,7 @@ }, "string_decoder": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "bundled": true, "dev": true, @@ -18337,18 +20306,21 @@ }, "stream-shift": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", "bundled": true, "dev": true }, "strict-uri-encode": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", "integrity": "sha1-ucczDHBChi9rFC3CdLvMWGbONUY=", "bundled": true, "dev": true }, "string_decoder": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "bundled": true, "dev": true, @@ -18358,6 +20330,7 @@ "dependencies": { "safe-buffer": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", "bundled": true, "dev": true @@ -18366,6 +20339,7 @@ }, "string-width": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "bundled": true, "dev": true, @@ -18376,18 +20350,21 @@ "dependencies": { "ansi-regex": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "bundled": true, "dev": true }, "is-fullwidth-code-point": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "bundled": true, "dev": true }, "strip-ansi": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "bundled": true, "dev": true, @@ -18399,12 +20376,14 @@ }, "stringify-package": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stringify-package/-/stringify-package-1.0.1.tgz", "integrity": "sha512-sa4DUQsYciMP1xhKWGuFM04fB0LG/9DlluZoSVywUMRNvzid6XucHK0/90xGxRoHrAaROrcHK1aPKaijCtSrhg==", "bundled": true, "dev": true }, "strip-ansi": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "bundled": true, "dev": true, @@ -18414,18 +20393,21 @@ }, "strip-eof": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", "bundled": true, "dev": true }, "strip-json-comments": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "bundled": true, "dev": true }, "supports-color": { "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "bundled": true, "dev": true, @@ -18435,6 +20417,7 @@ }, "tar": { "version": "4.4.13", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", "bundled": true, "dev": true, @@ -18450,6 +20433,7 @@ "dependencies": { "minipass": { "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", "bundled": true, "dev": true, @@ -18462,6 +20446,7 @@ }, "term-size": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", "bundled": true, "dev": true, @@ -18471,18 +20456,21 @@ }, "text-table": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "bundled": true, "dev": true }, "through": { "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "bundled": true, "dev": true }, "through2": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", "bundled": true, "dev": true, @@ -18493,6 +20481,7 @@ "dependencies": { "readable-stream": { "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "bundled": true, "dev": true, @@ -18508,6 +20497,7 @@ }, "string_decoder": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "bundled": true, "dev": true, @@ -18519,18 +20509,21 @@ }, "timed-out": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", "bundled": true, "dev": true }, "tiny-relative-date": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz", "integrity": "sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A==", "bundled": true, "dev": true }, "tough-cookie": { "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", "bundled": true, "dev": true, @@ -18541,6 +20534,7 @@ }, "tunnel-agent": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "bundled": true, "dev": true, @@ -18550,6 +20544,7 @@ }, "tweetnacl": { "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", "bundled": true, "dev": true, @@ -18557,24 +20552,28 @@ }, "typedarray": { "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "bundled": true, "dev": true }, "uid-number": { "version": "0.0.6", + "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=", "bundled": true, "dev": true }, "umask": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/umask/-/umask-1.1.0.tgz", "integrity": "sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0=", "bundled": true, "dev": true }, "unique-filename": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", "bundled": true, "dev": true, @@ -18584,6 +20583,7 @@ }, "unique-slug": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.0.tgz", "integrity": "sha1-22Z258fMBimHj/GWCXx4hVrp9Ks=", "bundled": true, "dev": true, @@ -18593,6 +20593,7 @@ }, "unique-string": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", "bundled": true, "dev": true, @@ -18602,18 +20603,21 @@ }, "unpipe": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", "bundled": true, "dev": true }, "unzip-response": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", "bundled": true, "dev": true }, "update-notifier": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", "bundled": true, "dev": true, @@ -18632,6 +20636,7 @@ }, "uri-js": { "version": "4.4.0", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", "bundled": true, "dev": true, @@ -18641,6 +20646,7 @@ "dependencies": { "punycode": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "bundled": true, "dev": true @@ -18649,6 +20655,7 @@ }, "url-parse-lax": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", "bundled": true, "dev": true, @@ -18658,18 +20665,21 @@ }, "util-deprecate": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "bundled": true, "dev": true }, "util-extend": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/util-extend/-/util-extend-1.0.3.tgz", "integrity": "sha1-p8IW0mdUUWljeztu3GypEZ4v+T8=", "bundled": true, "dev": true }, "util-promisify": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/util-promisify/-/util-promisify-2.1.0.tgz", "integrity": "sha1-PCI2R2xNMsX/PEcAKt18E7moKlM=", "bundled": true, "dev": true, @@ -18679,12 +20689,14 @@ }, "uuid": { "version": "3.3.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==", "bundled": true, "dev": true }, "validate-npm-package-license": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "bundled": true, "dev": true, @@ -18695,6 +20707,7 @@ }, "validate-npm-package-name": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", "bundled": true, "dev": true, @@ -18704,6 +20717,7 @@ }, "verror": { "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "bundled": true, "dev": true, @@ -18715,6 +20729,7 @@ }, "wcwidth": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", "bundled": true, "dev": true, @@ -18724,6 +20739,7 @@ }, "which": { "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "bundled": true, "dev": true, @@ -18733,12 +20749,14 @@ }, "which-module": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "bundled": true, "dev": true }, "wide-align": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", "bundled": true, "dev": true, @@ -18748,6 +20766,7 @@ "dependencies": { "string-width": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "bundled": true, "dev": true, @@ -18761,6 +20780,7 @@ }, "widest-line": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", "bundled": true, "dev": true, @@ -18770,6 +20790,7 @@ }, "worker-farm": { "version": "1.7.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", "bundled": true, "dev": true, @@ -18779,6 +20800,7 @@ }, "wrap-ansi": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", "bundled": true, "dev": true, @@ -18790,18 +20812,21 @@ "dependencies": { "ansi-regex": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "bundled": true, "dev": true }, "is-fullwidth-code-point": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "bundled": true, "dev": true }, "string-width": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "bundled": true, "dev": true, @@ -18813,6 +20838,7 @@ }, "strip-ansi": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "bundled": true, "dev": true, @@ -18824,12 +20850,14 @@ }, "wrappy": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "bundled": true, "dev": true }, "write-file-atomic": { "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", "bundled": true, "dev": true, @@ -18841,30 +20869,35 @@ }, "xdg-basedir": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", "bundled": true, "dev": true }, "xtend": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", "bundled": true, "dev": true }, "y18n": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", "bundled": true, "dev": true }, "yallist": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", "bundled": true, "dev": true }, "yargs": { "version": "14.2.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-14.2.3.tgz", "integrity": "sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==", "bundled": true, "dev": true, @@ -18884,12 +20917,14 @@ "dependencies": { "ansi-regex": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "bundled": true, "dev": true }, "find-up": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "bundled": true, "dev": true, @@ -18899,12 +20934,14 @@ }, "is-fullwidth-code-point": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "bundled": true, "dev": true }, "locate-path": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "bundled": true, "dev": true, @@ -18915,6 +20952,7 @@ }, "p-limit": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "bundled": true, "dev": true, @@ -18924,6 +20962,7 @@ }, "p-locate": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "bundled": true, "dev": true, @@ -18933,12 +20972,14 @@ }, "p-try": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "bundled": true, "dev": true }, "string-width": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "bundled": true, "dev": true, @@ -18950,6 +20991,7 @@ }, "strip-ansi": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "bundled": true, "dev": true, @@ -18961,6 +21003,7 @@ }, "yargs-parser": { "version": "15.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.1.tgz", "integrity": "sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw==", "bundled": true, "dev": true, @@ -18971,6 +21014,7 @@ "dependencies": { "camelcase": { "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "bundled": true, "dev": true @@ -19012,6 +21056,66 @@ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true }, + "object-inspect": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", + "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "object.entries": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.3.tgz", + "integrity": "sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "has": "^1.0.3" + } + }, + "object.fromentries": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.4.tgz", + "integrity": "sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "has": "^1.0.3" + } + }, + "object.values": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.3.tgz", + "integrity": "sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "has": "^1.0.3" + } + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -19030,6 +21134,20 @@ "mimic-fn": "^2.1.0" } }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "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" + } + }, "p-each-series": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", @@ -19239,15 +21357,6 @@ "find-up": "^4.0.0" } }, - "please-upgrade-node": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", - "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", - "dev": true, - "requires": { - "semver-compare": "^1.0.0" - } - }, "prebuild-install": { "version": "5.3.6", "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.6.tgz", @@ -19271,6 +21380,18 @@ "which-pm-runs": "^1.0.0" } }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "prettier": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz", + "integrity": "sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==", + "dev": true + }, "pretty-format": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", @@ -19321,6 +21442,12 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, "prompt": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/prompt/-/prompt-1.1.0.tgz", @@ -19334,6 +21461,25 @@ "winston": "2.x" } }, + "prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "dev": true, + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + }, + "dependencies": { + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + } + } + }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -19344,6 +21490,12 @@ "once": "^1.3.1" } }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, "q": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", @@ -19524,6 +21676,22 @@ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" }, + "regexp.prototype.flags": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "dev": true + }, "registry-auth-token": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", @@ -19601,6 +21769,12 @@ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, "resolve": { "version": "1.17.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", @@ -19616,16 +21790,6 @@ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, "retry": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", @@ -19757,15 +21921,6 @@ "integrity": "sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw==", "dev": true }, - "rxjs": { - "version": "6.6.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", - "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -19863,12 +22018,6 @@ "lru-cache": "^6.0.0" } }, - "semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", - "dev": true - }, "semver-diff": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", @@ -19933,6 +22082,17 @@ "rechoir": "^0.6.2" } }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, "signal-exit": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", @@ -19986,49 +22146,6 @@ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, - "slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - } - } - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -20177,12 +22294,6 @@ "safe-buffer": "~5.1.0" } }, - "string-argv": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", - "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", - "dev": true - }, "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", @@ -20194,15 +22305,39 @@ "strip-ansi": "^3.0.0" } }, - "stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "string.prototype.matchall": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.4.tgz", + "integrity": "sha512-pknFIWVachNcyqRfaQSeu/FUfpvJTe4uskUSZ9Wc1RijsPuzbZ8TyYT8WCNnntCjUEqQ3vUHMAfVj2+wLAisPQ==", "dev": true, "requires": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "has-symbols": "^1.0.1", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.3.1", + "side-channel": "^1.0.4" + } + }, + "string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" } }, "strip-ansi": { @@ -20277,6 +22412,105 @@ } } }, + "table": { + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/table/-/table-6.0.7.tgz", + "integrity": "sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==", + "dev": true, + "requires": { + "ajv": "^7.0.2", + "lodash": "^4.17.20", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0" + }, + "dependencies": { + "ajv": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.1.1.tgz", + "integrity": "sha512-ga/aqDYnUy/o7vbsRTFhhTsNeXiYb5JWDIcRIeZfwRNCefwjNTVYCGdGSUrEmiu3yDK3vFvNbgJxvrQW4JXrYQ==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, "tar-fs": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", @@ -20334,12 +22568,6 @@ "unique-string": "^2.0.0" }, "dependencies": { - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, "del": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", @@ -20356,20 +22584,6 @@ "slash": "^3.0.0" } }, - "globby": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.2.tgz", - "integrity": "sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og==", - "dev": true, - "requires": { - "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" - } - }, "is-path-cwd": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", @@ -20405,6 +22619,12 @@ "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", "dev": true }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -20490,71 +22710,10 @@ "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==", "dev": true }, - "tslint": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz", - "integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "builtin-modules": "^1.1.1", - "chalk": "^2.3.0", - "commander": "^2.12.1", - "diff": "^4.0.1", - "glob": "^7.1.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.3", - "resolve": "^1.3.2", - "semver": "^5.3.0", - "tslib": "^1.13.0", - "tsutils": "^2.29.0" - }, - "dependencies": { - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "tslint-microsoft-contrib": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/tslint-microsoft-contrib/-/tslint-microsoft-contrib-6.2.0.tgz", - "integrity": "sha512-6tfi/2tHqV/3CL77pULBcK+foty11Rr0idRDxKnteTaKm6gWF9qmaCNU17HVssOuwlYNyOmd9Jsmjd+1t3a3qw==", - "dev": true, - "requires": { - "tsutils": "^2.27.2 <2.29.0" - }, - "dependencies": { - "tsutils": { - "version": "2.28.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.28.0.tgz", - "integrity": "sha512-bh5nAtW0tuhvOJnx1GLRn5ScraRLICGyJV5wJhtRWOLsxW70Kk5tZtpK3O/hW6LDnqKS9mlUMPZj9fEMJ0gxqA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - } - } - }, "tsutils": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", - "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.20.0.tgz", + "integrity": "sha512-RYbuQuvkhuqVeXweWT3tJLKOEJ/UUw9GjNEZGWdrLLlM+611o1gwLHBpxoFJKKl25fLprp2eVthtKs5JOrNeXg==", "dev": true, "requires": { "tslib": "^1.8.1" @@ -20569,6 +22728,15 @@ "safe-buffer": "^5.0.1" } }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, "type-fest": { "version": "0.18.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", @@ -20608,6 +22776,15 @@ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, "url-join": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", @@ -20645,6 +22822,12 @@ "rimraf": "2.x.x" } }, + "v8-compile-cache": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", + "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==", + "dev": true + }, "validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -20727,6 +22910,12 @@ } } }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, "wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", diff --git a/package.json b/package.json index ab07edb9c..554febe2c 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ }, "scripts": { "pullsubmodules": "git submodule update --init --recursive", - "lint": "node node_modules/tslint/bin/tslint --project tsconfig.json", + "lint": "node node_modules/eslint/bin/eslint.js src/**/*.ts docs/src/**/*.ts docs/src/**/*.tsx", "predist": "rm -rf dist", "dist": "node node_modules/rollup/dist/bin/rollup -c rollup.config.ts", "predistdocs": "cd docs && node node_modules/gatsby/cli.js clean && cd .. && node ./tools/prepare.js", @@ -134,12 +134,16 @@ "@semantic-release/git": "^9.0.0", "@types/expect": "^24.3.0", "@types/mocha": "^8.2.1", + "@typescript-eslint/eslint-plugin": "^4.15.2", + "@typescript-eslint/parser": "^4.15.2", "cli": "^1.0.1", "colors": "^1.4.0", "cross-env": "^7.0.3", - "lint-staged": "^10.5.4", + "eslint": "^7.20.0", + "eslint-plugin-react": "^7.22.0", "lodash.camelcase": "^4.3.0", "mocha": "^8.3.0", + "prettier": "2.2.1", "prompt": "^1.1.0", "replace-in-file": "^6.2.0", "rollup": "^2.38.5", @@ -151,8 +155,6 @@ "semantic-release": "^17.3.8", "shelljs": "^0.8.4", "ts-node": "^7.0.1", - "tslint": "^6", - "tslint-microsoft-contrib": "^6", "typescript": "^4.1.4", "webusb": "^2.2.0" }, diff --git a/src/azure-iot/dtdl.ts b/src/azure-iot/dtdl.ts index 60cfea2ef..4da847c08 100644 --- a/src/azure-iot/dtdl.ts +++ b/src/azure-iot/dtdl.ts @@ -1,31 +1,40 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ /*** * Jacdac service/device specification to DTDL - * + * * DTDL specification: https://github.com/Azure/opendigitaltwins-dtdl/blob/master/DTDL/v2/dtdlv2.md. */ -import { serviceSpecificationFromClassIdentifier, serviceSpecificationFromName } from "../jdom/spec"; -import { uniqueMap } from "../jdom/utils"; +import { + serviceSpecificationFromClassIdentifier, + serviceSpecificationFromName, +} from "../jdom/spec" +import { uniqueMap } from "../jdom/utils" -export const DTDL_REFERENCE_URL = "https://github.com/Azure/opendigitaltwins-dtdl/blob/master/DTDL/v2/dtdlv2.md" +export const DTDL_REFERENCE_URL = + "https://github.com/Azure/opendigitaltwins-dtdl/blob/master/DTDL/v2/dtdlv2.md" export const DTDL_NAME = "Digital Twins Definition Language" -export const DTDL_CONTEXT = "dtmi:dtdl:context;2"; +export const DTDL_CONTEXT = "dtmi:dtdl:context;2" // https://github.com/Azure/digital-twin-model-identifier // ^dtmi:(?:_+[A-Za-z0-9]|[A-Za-z])(?:[A-Za-z0-9_]*[A-Za-z0-9])?(?::(?:_+[A-Za-z0-9]|[A-Za-z])(?:[A-Za-z0-9_]*[A-Za-z0-9])?)*;[1-9][0-9]{0,8}$ function toDTMI(segments: (string | number)[], version?: number) { return `dtmi:jacdac:${[...segments] - .map(seg => seg === undefined ? "???" : typeof seg === "string" ? seg : `x${seg.toString(16)}`) - .map(seg => seg.replace(/(-|_)/g, '')) - .join(':')};${version !== undefined ? version : 1}`.toLowerCase(); + .map(seg => + seg === undefined + ? "???" + : typeof seg === "string" + ? seg + : `x${seg.toString(16)}` + ) + .map(seg => seg.replace(/(-|_)/g, "")) + .join(":")};${version !== undefined ? version : 1}`.toLowerCase() } function toUnit(pkt: jdspec.PacketInfo) { - if (pkt.fields.length !== 1) - return undefined; - const field = pkt.fields[0]; - if (!field.unit) - return undefined; + if (pkt.fields.length !== 1) return undefined + const field = pkt.fields[0] + if (!field.unit) return undefined /** * type Unit = "m" | "kg" | "g" | "s" | "A" | "K" | "cd" | "mol" | "Hz" | "rad" | "sr" | "N" | "Pa" | "J" | "W" | "C" | "V" | "F" | "Ohm" @@ -37,94 +46,92 @@ function toUnit(pkt: jdspec.PacketInfo) { | "varh" | "kvarh" | "kVAh" | "Wh/km" | "KiB" | "GB" | "Mbit/s" | "B/s" | "MB/s" | "mV" | "mA" | "dBm" | "ug/m3" | "mm/h" | "m/h" | "ppm" | "/100" | "/1000" | "hPa" | "mm" | "cm" | "km" | "km/h"; */ - const units: jdspec.SMap<{ semantic: string; unit: string; }> = { + const units: jdspec.SMap<{ semantic: string; unit: string }> = { "m/s2": { semantic: "Acceleration", - unit: "metrePerSecondSquared" + unit: "metrePerSecondSquared", }, - "rad": { + rad: { semantic: "Angle", - unit: "radian" + unit: "radian", }, "rad/s": { semantic: "AngularVelocity", - unit: "radianPerSecond" + unit: "radianPerSecond", }, "rad/s2": { semantic: "AngularAcceleration", - unit: "radianPerSecondSquared" + unit: "radianPerSecondSquared", }, - "m": { + m: { semantic: "Length", - unit: "metre" + unit: "metre", }, - "m2": { + m2: { semantic: "Area", - unit: "squareMetre" + unit: "squareMetre", }, - "s": { + s: { semantic: "TimeSpan", - unit: "second" + unit: "second", }, - "ms": { + ms: { semantic: "TimeSpan", - unit: "millisecond" + unit: "millisecond", }, - "us": { + us: { semantic: "TimeSpan", - unit: "microsecond" + unit: "microsecond", }, - "K": { + K: { semantic: "Temperature", - unit: "kelvin" + unit: "kelvin", }, - "C": { + C: { semantic: "Temperature", - unit: "degreeCelsius" + unit: "degreeCelsius", }, - "F": { + F: { semantic: "Temperature", - unit: "degreeFahrenheit" + unit: "degreeFahrenheit", }, - "g": { + g: { semantic: "Acceleration", - unit: "gForce" + unit: "gForce", }, - "mA": { + mA: { semantic: "Current", - unit: "milliampere" + unit: "milliampere", }, - "uA": { + uA: { semantic: "Current", - unit: "microampere" + unit: "microampere", }, - "A": { + A: { semantic: "Current", - unit: "ampere" + unit: "ampere", }, - "mV": { + mV: { semantic: "Voltage", - unit: "millivolt" + unit: "millivolt", }, - "uV": { + uV: { semantic: "Voltage", - unit: "microvolt" + unit: "microvolt", }, - "V": { + V: { semantic: "Voltage", - unit: "volt" + unit: "volt", }, - }; - const unit = units[field.unit]; - if (unit) - return unit; + } + const unit = units[field.unit] + if (unit) return unit // ignoring some known units - if (["#", "/"].indexOf(field.unit) > -1) - return undefined; + if (["#", "/"].indexOf(field.unit) > -1) return undefined //console.warn(`unsupported unit ${field.unit}`) - return undefined; + return undefined } // https://github.com/Azure/opendigitaltwins-dtdl/blob/master/DTDL/v2/dtdlv2.md#primitive-schemas @@ -137,37 +144,36 @@ function enumSchema(srv: jdspec.ServiceSpec, en: jdspec.EnumInfo): DTDLSchema { const dtdl = { "@type": "Enum", "@id": enumDTDI(srv, en), - "valueSchema": "integer", - "enumValues": Object.keys(en.members).map(k => ({ + valueSchema: "integer", + enumValues: Object.keys(en.members).map(k => ({ name: escapeName(k), displayName: k, - enumValue: en.members[k] - })) + enumValue: en.members[k], + })), } - return dtdl; + return dtdl } -function fieldType(srv: jdspec.ServiceSpec, pkt: jdspec.PacketInfo, field: jdspec.PacketMember) { - let type: string; - if (field.type == "bool") - type = "boolean"; - else if (field.isFloat) - type = "float"; +function fieldType( + srv: jdspec.ServiceSpec, + pkt: jdspec.PacketInfo, + field: jdspec.PacketMember +) { + let type: string + if (field.type == "bool") type = "boolean" + else if (field.isFloat) type = "float" else if (field.isSimpleType) { - if (/^(u|i)/.test(field.type)) - type = "integer"; + if (/^(u|i)/.test(field.type)) type = "integer" else if (field.type === "B") // base64 encoded binary data - type = "string"; - } - else if (field.type === "string" || field.type == "string0") - type = "string"; - else if (field.shift && /^(u|i)/.test(field.type)) - type = "float"; // decimal type + type = "string" + } else if (field.type === "string" || field.type == "string0") + type = "string" + else if (field.shift && /^(u|i)/.test(field.type)) type = "float" + // decimal type else { - const en = srv.enums[field.type]; - if (en) - type = enumDTDI(srv, en); + const en = srv.enums[field.type] + if (en) type = enumDTDI(srv, en) } //if (!type) @@ -175,7 +181,7 @@ function fieldType(srv: jdspec.ServiceSpec, pkt: jdspec.PacketInfo, field: jdspe return { name: field.name == "_" ? pkt.name : field.name, - type: type + type: type, } } @@ -183,7 +189,7 @@ function fieldType(srv: jdspec.ServiceSpec, pkt: jdspec.PacketInfo, field: jdspe function objectSchema(schemas: DTDLSchema[]): DTDLSchema { return { "@type": "Object", - "fields": schemas + fields: schemas, } } @@ -191,29 +197,31 @@ function objectSchema(schemas: DTDLSchema[]): DTDLSchema { function arraySchema(schema: string | DTDLSchema): DTDLSchema { return { "@type": "Array", - "elementSchema": schema + elementSchema: schema, } } // converts JADAC pkt data layout into a DTDL schema -function toSchema(srv: jdspec.ServiceSpec, pkt: jdspec.PacketInfo, supportsArray?: boolean): string | DTDLSchema { - const fields = pkt.fields.map(field => fieldType(srv, pkt, field)); - if (!fields.length) - return undefined; +function toSchema( + srv: jdspec.ServiceSpec, + pkt: jdspec.PacketInfo, + supportsArray?: boolean +): string | DTDLSchema { + const fields = pkt.fields.map(field => fieldType(srv, pkt, field)) + if (!fields.length) return undefined // a single data entry if (fields.length === 1 && !pkt.fields[0].startRepeats) - return fields[0].type; + return fields[0].type // map fields into schema - const schemas: DTDLSchema[] = - fields.map(field => ({ - name: field.name, - schema: field.type - })) + const schemas: DTDLSchema[] = fields.map(field => ({ + name: field.name, + schema: field.type, + })) // is there an array? - const repeatIndex = pkt.fields.findIndex(field => field.startRepeats); + const repeatIndex = pkt.fields.findIndex(field => field.startRepeats) if (repeatIndex < 0) { // no array @@ -224,34 +232,39 @@ function toSchema(srv: jdspec.ServiceSpec, pkt: jdspec.PacketInfo, supportsArray // check if arrays are supported if (!supportsArray) { //console.warn(`arrays not supported in ${srv.shortName}.${pkt.name}`) - return undefined; + return undefined } if (repeatIndex == 0) { // the whole structure is an array return arraySchema(objectSchema(schemas)) - } - else { + } else { // split fields into prelude and array data - const nonRepeat = schemas.slice(0, repeatIndex); - const repeats = schemas.slice(repeatIndex); + const nonRepeat = schemas.slice(0, repeatIndex) + const repeats = schemas.slice(repeatIndex) return objectSchema([ ...nonRepeat, { name: "repeat", - schema: arraySchema(repeats.length > 1 ? objectSchema(repeats) : repeats[0]) - } - ]); + schema: arraySchema( + repeats.length > 1 ? objectSchema(repeats) : repeats[0] + ), + }, + ]) } } -function packetToDTDL(srv: jdspec.ServiceSpec, pkt: jdspec.PacketInfo): DTDLContent { +function packetToDTDL( + srv: jdspec.ServiceSpec, + pkt: jdspec.PacketInfo +): DTDLContent { const types: jdspec.SMap = { - "const": "Property", - "rw": "Property", - "ro": "Telemetry", - "event": "Telemetry" + const: "Property", + rw: "Property", + ro: "Telemetry", + event: "Telemetry", } + // eslint-disable-next-line @typescript-eslint/no-explicit-any const dtdl: any = { "@type": types[pkt.kind] || `Unsupported${pkt.kind}`, name: pkt.name, @@ -262,133 +275,142 @@ function packetToDTDL(srv: jdspec.ServiceSpec, pkt: jdspec.PacketInfo): DTDLCont case "report": case "command": // https://docs.microsoft.com/en-us/azure/digital-twins/concepts-models#azure-digital-twins-dtdl-implementation-specifics - return undefined; + return undefined case "const": case "rw": case "ro": - case "event": - const unit = toUnit(pkt); + case "event": { + const unit = toUnit(pkt) if (unit) { - dtdl.unit = unit.unit; + dtdl.unit = unit.unit } dtdl.schema = toSchema(srv, pkt, false) - if (pkt.kind === "rw") - dtdl.writable = true; + if (pkt.kind === "rw") dtdl.writable = true if (!dtdl.schema && pkt.kind === "event") { // keep a count of the events dtdl["@type"] = [dtdl["@type"], "Event"] - dtdl.schema = toDTMI([srv.classIdentifier, "event"]); - } - else if (unit && unit.semantic) + dtdl.schema = toDTMI([srv.classIdentifier, "event"]) + } else if (unit && unit.semantic) dtdl["@type"] = [dtdl["@type"], unit.semantic] - break; + break + } default: //console.log(`unknown packet kind ${pkt.kind}`) - break; + break } if (!dtdl.schema) { //console.log(`unknown schema for ${srv.name}.${pkt.name}`); - return undefined; + return undefined } - return dtdl; + return dtdl } - interface DTDLNode { - '@type'?: string; - '@id'?: string; + "@type"?: string + "@id"?: string // 1-64 characters // ^[a-zA-Z](?:[a-zA-Z0-9_]*[a-zA-Z0-9])?$ - name?: string; - displayName?: string, - description?: string; + name?: string + displayName?: string + description?: string } interface DTDLSchema extends DTDLNode { - fields?: DTDLSchema[]; - schema?: string | DTDLSchema; - elementSchema?: string | DTDLSchema; + fields?: DTDLSchema[] + schema?: string | DTDLSchema + elementSchema?: string | DTDLSchema } interface DTDLContent extends DTDLNode { - '@type': "Property" | "Command" | "Component" | "Interface"; - unit?: string; - schema?: string | DTDLSchema; + "@type": "Property" | "Command" | "Component" | "Interface" + unit?: string + schema?: string | DTDLSchema } interface DTDLInterface extends DTDLContent { - contents: DTDLContent[]; - extends?: string | string[]; - schemas?: (DTDLSchema | DTDLInterface)[]; - '@context'?: string; + contents: DTDLContent[] + extends?: string | string[] + schemas?: (DTDLSchema | DTDLInterface)[] + "@context"?: string } export function escapeName(name: string) { - name = name.trim().replace(/[^a-zA-Z0-9_]/g, '_'); - if (!/^[a-zA-Z]/.test(name)) - name = "a" + name; - name = name[0].toLowerCase() + name.slice(1); - return name.slice(0, 64); + name = name.trim().replace(/[^a-zA-Z0-9_]/g, "_") + if (!/^[a-zA-Z]/.test(name)) name = "a" + name + name = name[0].toLowerCase() + name.slice(1) + return name.slice(0, 64) } function escapeDisplayName(name: string) { - return name.slice(0, 64); + return name.slice(0, 64) } -export function serviceSpecificationToDTDL(srv: jdspec.ServiceSpec): DTDLInterface { +export function serviceSpecificationToDTDL( + srv: jdspec.ServiceSpec +): DTDLInterface { const dtdl: DTDLInterface = { "@type": "Interface", "@id": serviceSpecificationDTMI(srv), - "displayName": escapeDisplayName(srv.name), - "description": srv.notes["short"], - "contents": srv.packets + displayName: escapeDisplayName(srv.name), + description: srv.notes["short"], + contents: srv.packets .filter(pkt => !pkt.derived && !pkt.internal) .map(pkt => { try { return packetToDTDL(srv, pkt) } catch (e) { - console.log(`failed to generate DTDL for ${srv.name}`, e); - return undefined; + console.log(`failed to generate DTDL for ${srv.name}`, e) + return undefined } - }).filter(c => !!c) + }) + .filter(c => !!c), } if (srv.extends.length) - dtdl.extends = srv.extends.map(id => serviceSpecificationDTMI(serviceSpecificationFromName(id))) + dtdl.extends = srv.extends.map(id => + serviceSpecificationDTMI(serviceSpecificationFromName(id)) + ) - const hasEvents = srv.packets.find(pkt => pkt.kind === "event"); - const hasEnums = Object.keys(srv.enums).length; + const hasEvents = srv.packets.find(pkt => pkt.kind === "event") + const hasEnums = Object.keys(srv.enums).length if (hasEvents || hasEnums) { - dtdl.schemas = []; + dtdl.schemas = [] if (hasEvents) dtdl.schemas.push({ "@id": toDTMI([srv.classIdentifier, "event"]), "@type": "Object", - "fields": [{ - "name": "count", - "schema": "integer" - }] - }); + fields: [ + { + name: "count", + schema: "integer", + }, + ], + }) if (hasEnums) - dtdl.schemas = dtdl.schemas.concat(Object.keys(srv.enums).map(en => enumSchema(srv, srv.enums[en]))); + dtdl.schemas = dtdl.schemas.concat( + Object.keys(srv.enums).map(en => enumSchema(srv, srv.enums[en])) + ) } dtdl["@context"] = DTDL_CONTEXT - return dtdl; + return dtdl } -export function serviceSpecificationToComponent(srv: jdspec.ServiceSpec, name: string): any { +export function serviceSpecificationToComponent( + srv: jdspec.ServiceSpec, + name: string +): any { const dtdl = { "@type": "Component", - "name": name, - "displayName": escapeDisplayName(srv.name), - "schema": serviceSpecificationDTMI(srv) + name: name, + displayName: escapeDisplayName(srv.name), + schema: serviceSpecificationDTMI(srv), } - return dtdl; + return dtdl } export interface DTDLGenerationOptions { - inlineServices?: boolean; // generate all services + inlineServices?: boolean // generate all services } export function serviceSpecificationDTMI(srv: jdspec.ServiceSpec) { @@ -396,44 +418,51 @@ export function serviceSpecificationDTMI(srv: jdspec.ServiceSpec) { } export function deviceSpecificationDTMI(dev: jdspec.DeviceSpec) { - return toDTMI(["devices", dev.id.replace(/-/g, ':')]); + return toDTMI(["devices", dev.id.replace(/-/g, ":")]) } export function DTMIToRoute(dtmi: string) { - const route = dtmi.toLowerCase().replace(/;/, '-') - .replace(/:/g, "/") + ".json"; - return route; + const route = + dtmi.toLowerCase().replace(/;/, "-").replace(/:/g, "/") + ".json" + return route } -export function deviceSpecificationToDTDL(dev: jdspec.DeviceSpec, options?: DTDLGenerationOptions): any { - const services = dev.services.map(srv => serviceSpecificationFromClassIdentifier(srv)); - const uniqueServices = uniqueMap(services, srv => srv.classIdentifier.toString(), srv => srv); - const schemas = uniqueServices.map(srv => serviceSpecificationToDTDL(srv)); +export function deviceSpecificationToDTDL( + dev: jdspec.DeviceSpec, + options?: DTDLGenerationOptions +): any { + const services = dev.services.map(srv => + serviceSpecificationFromClassIdentifier(srv) + ) + const uniqueServices = uniqueMap( + services, + srv => srv.classIdentifier.toString(), + srv => srv + ) + const schemas = uniqueServices.map(srv => serviceSpecificationToDTDL(srv)) // allocate names - let names: string[] = []; - services.forEach((srv, i) => { - let name = escapeName(srv.shortId || srv.shortName) - if (names.indexOf(name) < 0) - names.push(name) + const names: string[] = [] + services.forEach((srv) => { + const name = escapeName(srv.shortId || srv.shortName) + if (names.indexOf(name) < 0) names.push(name) else { - let count = 2; - while (names.indexOf(name + count) > -1) - count++; - names.push(name + count); + let count = 2 + while (names.indexOf(name + count) > -1) count++ + names.push(name + count) } }) const dtdl: DTDLInterface = { "@type": "Interface", "@id": deviceSpecificationDTMI(dev), - "displayName": escapeDisplayName(dev.name), - "description": dev.description, - "contents": services.map((srv, i) => serviceSpecificationToComponent(srv, names[i])), - "@context": DTDL_CONTEXT + displayName: escapeDisplayName(dev.name), + description: dev.description, + contents: services.map((srv, i) => + serviceSpecificationToComponent(srv, names[i]) + ), + "@context": DTDL_CONTEXT, } - if (options?.inlineServices) - return [dtdl, ...schemas] - else - return dtdl + if (options?.inlineServices) return [dtdl, ...schemas] + else return dtdl } diff --git a/src/cli/jacdac-cli.ts b/src/cli/jacdac-cli.ts index 20945dc90..1cbfe7c71 100644 --- a/src/cli/jacdac-cli.ts +++ b/src/cli/jacdac-cli.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/no-var-requires */ const cli = require("cli") const fs = require("fs-extra") import { PACKET_PROCESS } from "../jdom/constants" diff --git a/src/hosts/analogsensorservicehost.ts b/src/hosts/analogsensorservicehost.ts index e3bbbaebe..f033eb326 100644 --- a/src/hosts/analogsensorservicehost.ts +++ b/src/hosts/analogsensorservicehost.ts @@ -1,4 +1,4 @@ -import { SystemReg, READING_SENT } from "../jdom/constants"; +import { SystemReg } from "../jdom/constants"; import RegisterHost from "../jdom/registerhost"; import { LevelDetector } from "./leveldetector"; import SensorServiceHost, { SensorServiceOptions } from "./sensorservicehost"; diff --git a/src/hosts/bitradioservicehost.ts b/src/hosts/bitradioservicehost.ts index e00c84285..8cd7ba1a8 100644 --- a/src/hosts/bitradioservicehost.ts +++ b/src/hosts/bitradioservicehost.ts @@ -47,6 +47,7 @@ function getStringOffset(packetType: number) { } } +/* function getMaxStringLength(packetType: number) { switch (packetType) { case PACKET_TYPE_STRING: @@ -58,6 +59,7 @@ function getMaxStringLength(packetType: number) { return undefined; } } +*/ function truncateString(str: string) { // TODO diff --git a/src/hosts/hosts.ts b/src/hosts/hosts.ts index 772a20948..07761369c 100644 --- a/src/hosts/hosts.ts +++ b/src/hosts/hosts.ts @@ -8,7 +8,7 @@ import { SRV_DISTANCE, SRV_E_CO2, SRV_HUMIDITY, SRV_LED_PIXEL, SRV_MATRIX_KEYPAD, SRV_MOTOR, SRV_POTENTIOMETER, SRV_PROTO_TEST, SRV_RAIN_GAUGE, SRV_RELAY, - SRV_ROLE_MANAGER, SRV_JOYSTICK, + SRV_JOYSTICK, SRV_ROTARY_ENCODER, SRV_SERVO, SRV_SETTINGS, SRV_SWITCH, SRV_THERMOMETER, SRV_TRAFFIC_LIGHT, SRV_VIBRATION_MOTOR, SRV_TVOC, SRV_WIND_DIRECTION, SRV_WIND_SPEED, @@ -22,7 +22,7 @@ import { } from "../jdom/constants"; import DeviceHost from "../jdom/devicehost"; import ProtocolTestServiceHost from "../jdom/protocoltestservicehost"; -import ServiceHost, { ServiceHostOptions } from "../jdom/servicehost"; +import ServiceHost from "../jdom/servicehost"; import ArcadeGamepadServiceHost from "./arcadegamepadservicehost"; import ButtonServiceHost from "./buttonservicehost"; import BuzzerServiceHost from "./buzzerservicehost"; @@ -607,7 +607,7 @@ const _hosts: { { name: "relay 4x (SSR/5A)", serviceClasses: [SRV_RELAY], - services: () => Array(4).fill(0).map(_ => new ServiceHost(SRV_RELAY, { + services: () => Array(4).fill(0).map(() => new ServiceHost(SRV_RELAY, { intensityValues: [false], variant: RelayVariant.SolidState, registerValues: [ @@ -654,12 +654,12 @@ const _hosts: { { name: "servo x 2", serviceClasses: [SRV_SERVO], - services: () => Array(2).fill(0).map((_, i) => new ServoServiceHost(microServoOptions)) + services: () => Array(2).fill(0).map(() => new ServoServiceHost(microServoOptions)) }, { name: "servo x 4", serviceClasses: [SRV_SERVO], - services: () => Array(4).fill(0).map((_, i) => new ServoServiceHost(microServoOptions)) + services: () => Array(4).fill(0).map(() => new ServoServiceHost(microServoOptions)) }, { name: "servo x 6", diff --git a/src/hosts/ledpixelservicehost.ts b/src/hosts/ledpixelservicehost.ts index c25aa1508..c2c1ecaa8 100644 --- a/src/hosts/ledpixelservicehost.ts +++ b/src/hosts/ledpixelservicehost.ts @@ -51,7 +51,7 @@ function hsv(hue: number, sat: number, val: number): RGB { const rampup_adj_with_floor = (rampup_amp_adj + brightness_floor); const rampdown_adj_with_floor = (rampdown_amp_adj + brightness_floor); - let r: number = 0, g: number = 0, b: number = 0; + let r = 0, g = 0, b = 0; if (section) { if (section == 1) { // section 1: 0x40..0x7F @@ -107,20 +107,20 @@ export default class LedPixelServiceHost extends ServiceHost { private pxbuffer: Uint8Array = new Uint8Array(0); - private prog_mode: number = 0; - private prog_tmpmode: number = 0; + private prog_mode = 0; + private prog_tmpmode = 0; - private range_start: number = 0; - private range_end: number = 0; - private range_len: number = 0; - private range_ptr: number = 0; + private range_start = 0; + private range_end = 0; + private range_len = 0; + private range_ptr = 0; - private prog_ptr: number = 0; - private prog_size: number = 0; + private prog_ptr = 0; + private prog_size = 0; private prog_data = new Uint8Array(0); - private dirty: boolean = true; - private inited: boolean = false; + private dirty = true; + private inited = false; power_enable = false; @@ -215,7 +215,7 @@ export default class LedPixelServiceHost extends ServiceHost { return false; const p = this.pxbuffer; - let pi = this.range_ptr++ * 3; + const pi = this.range_ptr++ * 3; // fast path if (this.prog_tmpmode == LIGHT_MODE_REPLACE) { p[pi + 0] = c.r; @@ -267,7 +267,7 @@ export default class LedPixelServiceHost extends ServiceHost { let current_prev = 0; let di = 0; while (n--) { - let v = pxbuffer[di++]; + const v = pxbuffer[di++]; current += SCALE0(v, intensity); current_prev += SCALE0(v, prev_intensity); current_full += v; @@ -279,8 +279,8 @@ export default class LedPixelServiceHost extends ServiceHost { current_full *= 46; // 14mA is the chip at 48MHz, 930uA per LED is static - let base_current = 14000 + 930 * numpixels; - let current_limit = maxpower * 1000 - base_current; + const base_current = 14000 + 930 * numpixels; + const current_limit = maxpower * 1000 - base_current; if (current <= current_limit) { this.intensity = intensity; @@ -443,7 +443,7 @@ export default class LedPixelServiceHost extends ServiceHost { let first = range_start * 3; let middle = (range_start + shift) * 3; - let last = range_end * 3; + const last = range_end * 3; let next = middle; while (first != next) { diff --git a/src/hosts/ledservicehost.ts b/src/hosts/ledservicehost.ts index 37624dc69..715926749 100644 --- a/src/hosts/ledservicehost.ts +++ b/src/hosts/ledservicehost.ts @@ -1,4 +1,4 @@ -import { CHANGE, LedReg, LedVariant, REPORT_UPDATE, SRV_LED } from "../jdom/constants"; +import { CHANGE, LedReg, LedVariant, SRV_LED } from "../jdom/constants"; import { JDEventSource } from "../jdom/eventsource"; import RegisterHost from "../jdom/registerhost"; import ServiceHost from "../jdom/servicehost"; diff --git a/src/hosts/realtimeclockservicehost.ts b/src/hosts/realtimeclockservicehost.ts index d5345ab86..5ca81c133 100644 --- a/src/hosts/realtimeclockservicehost.ts +++ b/src/hosts/realtimeclockservicehost.ts @@ -22,7 +22,7 @@ export default class RealTimeClockServiceHost extends SensorServiceHost { readonly error: RegisterHost<[number]>; readonly precision: RegisterHost<[number]>; - private lastSecond: number = 0; + private lastSecond = 0; constructor() { super(SRV_REAL_TIME_CLOCK, { @@ -47,7 +47,7 @@ export default class RealTimeClockServiceHost } private handleSetTime(pkt: Packet) { - console.log(`set time`) + console.log(`set time`, { pkt }) } private refreshTime() { diff --git a/src/hosts/sensorservicehost.ts b/src/hosts/sensorservicehost.ts index 256d58f0e..56c89ab21 100644 --- a/src/hosts/sensorservicehost.ts +++ b/src/hosts/sensorservicehost.ts @@ -1,16 +1,16 @@ import { SystemReg } from "../../jacdac-spec/dist/specconstants"; -import { CHANGE, READING_SENT, REFRESH, REPORT_UPDATE, SensorReg } from "../jdom/constants"; +import { CHANGE, READING_SENT, REFRESH, SensorReg } from "../jdom/constants"; +import { PackedValues } from "../jdom/pack"; import RegisterHost from "../jdom/registerhost"; import ServiceHost, { ServiceHostOptions } from "../jdom/servicehost"; -import TrafficLightServiceHost from "./trafficlightservicehost"; -export interface SensorServiceOptions extends ServiceHostOptions { +export interface SensorServiceOptions extends ServiceHostOptions { readingValues?: TReading, readingError?: TReading, streamingInterval?: number, -}; +} -export default class SensorServiceHost extends ServiceHost { +export default class SensorServiceHost extends ServiceHost { readonly reading: RegisterHost; readonly readingError: RegisterHost; readonly streamingSamples: RegisterHost<[number]>; diff --git a/src/jdom/buffer.ts b/src/jdom/buffer.ts index c97f4f7a9..04253a6ce 100644 --- a/src/jdom/buffer.ts +++ b/src/jdom/buffer.ts @@ -1,4 +1,4 @@ -import { read16, read32 } from "./utils"; +import { read16, read32 } from "./utils" export enum NumberFormat { Int8LE = 1, @@ -25,28 +25,49 @@ export enum NumberFormat { function fmtInfoCore(fmt: NumberFormat) { switch (fmt) { - case NumberFormat.Int8LE: return -1; - case NumberFormat.UInt8LE: return 1; - case NumberFormat.Int16LE: return -2; - case NumberFormat.UInt16LE: return 2; - case NumberFormat.Int32LE: return -4; - case NumberFormat.UInt32LE: return 4; - case NumberFormat.Int64LE: return -8; - case NumberFormat.UInt64LE: return 8; - case NumberFormat.Int8BE: return -10; - case NumberFormat.UInt8BE: return 10; - case NumberFormat.Int16BE: return -20; - case NumberFormat.UInt16BE: return 20; - case NumberFormat.Int32BE: return -40; - case NumberFormat.UInt32BE: return 40; - case NumberFormat.Int64BE: return -80; - case NumberFormat.UInt64BE: return 80; + case NumberFormat.Int8LE: + return -1 + case NumberFormat.UInt8LE: + return 1 + case NumberFormat.Int16LE: + return -2 + case NumberFormat.UInt16LE: + return 2 + case NumberFormat.Int32LE: + return -4 + case NumberFormat.UInt32LE: + return 4 + case NumberFormat.Int64LE: + return -8 + case NumberFormat.UInt64LE: + return 8 + case NumberFormat.Int8BE: + return -10 + case NumberFormat.UInt8BE: + return 10 + case NumberFormat.Int16BE: + return -20 + case NumberFormat.UInt16BE: + return 20 + case NumberFormat.Int32BE: + return -40 + case NumberFormat.UInt32BE: + return 40 + case NumberFormat.Int64BE: + return -80 + case NumberFormat.UInt64BE: + return 80 - case NumberFormat.Float32LE: return 4; - case NumberFormat.Float32BE: return 40; - case NumberFormat.Float64LE: return 8; - case NumberFormat.Float64BE: return 80; - default: throw new Error("unknown format"); + case NumberFormat.Float32LE: + return 4 + case NumberFormat.Float32BE: + return 40 + case NumberFormat.Float64LE: + return 8 + case NumberFormat.Float64BE: + return 80 + default: + throw new Error("unknown format") } } @@ -83,31 +104,35 @@ export function sizeOfNumberFormat(format: NumberFormat) { case NumberFormat.UInt8LE: case NumberFormat.Int8BE: case NumberFormat.UInt8BE: - return 1; + return 1 case NumberFormat.Int16LE: case NumberFormat.UInt16LE: case NumberFormat.Int16BE: case NumberFormat.UInt16BE: - return 2; + return 2 case NumberFormat.Int32LE: case NumberFormat.Int32BE: case NumberFormat.UInt32BE: case NumberFormat.UInt32LE: case NumberFormat.Float32BE: case NumberFormat.Float32LE: - return 4; + return 4 case NumberFormat.UInt64BE: case NumberFormat.Int64BE: case NumberFormat.UInt64LE: case NumberFormat.Int64LE: case NumberFormat.Float64BE: case NumberFormat.Float64LE: - return 8; + return 8 } - return 0; + return 0 } -export function getNumber(buf: ArrayLike, fmt: NumberFormat, offset: number) { +export function getNumber( + buf: ArrayLike, + fmt: NumberFormat, + offset: number +) { switch (fmt) { case NumberFormat.UInt8BE: case NumberFormat.UInt8LE: @@ -126,35 +151,38 @@ export function getNumber(buf: ArrayLike, fmt: NumberFormat, offset: num case NumberFormat.UInt64LE: return read32(buf, offset) + read32(buf, offset + 4) * 0x100000000 case NumberFormat.Int64LE: - return read32(buf, offset) + (read32(buf, offset + 4) >> 0) * 0x100000000 - default: + return ( + read32(buf, offset) + + (read32(buf, offset + 4) >> 0) * 0x100000000 + ) + default: { const inf = fmtInfo(fmt) if (inf.isFloat) { - let arr = new Uint8Array(inf.size) + const arr = new Uint8Array(inf.size) for (let i = 0; i < inf.size; ++i) { arr[i] = buf[offset + i] } - if (inf.swap) - arr.reverse() - if (inf.size == 4) - return new Float32Array(arr.buffer)[0] - else - return new Float64Array(arr.buffer)[0] + if (inf.swap) arr.reverse() + if (inf.size == 4) return new Float32Array(arr.buffer)[0] + else return new Float64Array(arr.buffer)[0] } throw new Error("unsupported fmt:" + fmt) + } } } -export function setNumber(buf: Uint8Array, fmt: NumberFormat, offset: number, r: number) { - let inf = fmtInfo(fmt) +export function setNumber( + buf: Uint8Array, + fmt: NumberFormat, + offset: number, + r: number +) { + const inf = fmtInfo(fmt) if (inf.isFloat) { - let arr = new Uint8Array(inf.size) - if (inf.size == 4) - new Float32Array(arr.buffer)[0] = r - else - new Float64Array(arr.buffer)[0] = r - if (inf.swap) - arr.reverse() + const arr = new Uint8Array(inf.size) + if (inf.size == 4) new Float32Array(arr.buffer)[0] = r + else new Float64Array(arr.buffer)[0] = r + if (inf.swap) arr.reverse() for (let i = 0; i < inf.size; ++i) { buf[offset + i] = arr[i] } @@ -162,8 +190,8 @@ export function setNumber(buf: Uint8Array, fmt: NumberFormat, offset: number, r: } for (let i = 0; i < inf.size; ++i) { - let off = !inf.swap ? offset + i : offset + inf.size - i - 1 - buf[off] = (r & 0xff) + const off = !inf.swap ? offset + i : offset + inf.size - i - 1 + buf[off] = r & 0xff r >>= 8 } } diff --git a/src/jdom/bus.ts b/src/jdom/bus.ts index 70b034480..ef77a50f2 100644 --- a/src/jdom/bus.ts +++ b/src/jdom/bus.ts @@ -1,6 +1,12 @@ -import Packet from "./packet"; -import { JDDevice } from "./device"; -import { debounceAsync, strcmp, arrayConcatMany, anyRandomUint32, toHex } from "./utils"; +import Packet from "./packet" +import { JDDevice } from "./device" +import { + debounceAsync, + strcmp, + arrayConcatMany, + anyRandomUint32, + toHex, +} from "./utils" import { JD_SERVICE_INDEX_CTRL, CMD_ADVERTISEMENT_DATA, @@ -46,103 +52,128 @@ import { DEVICE_HOST_ADDED, DEVICE_HOST_REMOVED, REFRESH, - PACKET_INVALID_CRC -} from "./constants"; -import { serviceClass } from "./pretty"; -import { JDNode, Log, LogLevel } from "./node"; -import { FirmwareBlob, scanFirmwares, sendStayInBootloaderCommand } from "./flashing"; -import { JDService } from "./service"; -import { isConstRegister, isReading, isSensor } from "./spec"; -import { ControlReg, LoggerPriority, LoggerReg, SensorReg, SRV_CONTROL, SRV_LOGGER, SRV_REAL_TIME_CLOCK, SystemReg } from "../../jacdac-spec/dist/specconstants"; -import DeviceHost from "./devicehost"; -import RealTimeClockServiceHost from "../hosts/realtimeclockservicehost"; -import { JDEventSource } from "./eventsource"; -import Flags from "./flags"; +} from "./constants" +import { serviceClass } from "./pretty" +import { JDNode, Log, LogLevel } from "./node" +import { + FirmwareBlob, + scanFirmwares, + sendStayInBootloaderCommand, +} from "./flashing" +import { JDService } from "./service" +import { isConstRegister, isReading, isSensor } from "./spec" +import { + ControlReg, + LoggerPriority, + LoggerReg, + SensorReg, + SRV_CONTROL, + SRV_LOGGER, + SRV_REAL_TIME_CLOCK, + SystemReg, +} from "../../jacdac-spec/dist/specconstants" +import DeviceHost from "./devicehost" +import RealTimeClockServiceHost from "../hosts/realtimeclockservicehost" +import { JDEventSource } from "./eventsource" export interface IDeviceNameSettings { - resolve(device: JDDevice): string; + resolve(device: JDDevice): string // notify namer that the device was renamed - notifyUpdate(device: JDDevice, name: string): void; + notifyUpdate(device: JDDevice, name: string): void } export interface PacketTransport { - sendPacketAsync?: (p: Packet) => Promise; - connectAsync?: (background?: boolean) => Promise; - disconnectAsync?: () => Promise; + sendPacketAsync?: (p: Packet) => Promise + connectAsync?: (background?: boolean) => Promise + disconnectAsync?: () => Promise } export interface BusOptions { - deviceLostDelay?: number; - deviceDisconnectedDelay?: number; - deviceId?: string; + deviceLostDelay?: number + deviceDisconnectedDelay?: number + deviceId?: string - parentOrigin?: string; + parentOrigin?: string } export interface BusHost { - log?: Log; - deviceNameSettings?: IDeviceNameSettings; + log?: Log + deviceNameSettings?: IDeviceNameSettings } export interface Error { - context: string; - exception: any; + context: string + // eslint-disable-next-line @typescript-eslint/no-explicit-any + exception: any } export enum BusState { Connected = "connected", Connecting = "connecting", Disconnecting = "disconnecting", - Disconnected = "disconnected" + Disconnected = "disconnected", } const SCAN_FIRMWARE_INTERVAL = 30000 +// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types function log(level: LogLevel, message: any, optionalArgs?: any[]): void { switch (level) { - case 'error': console.error(message, optionalArgs || ""); break; - case 'warn': console.warn(message, optionalArgs || ""); break; - case 'info': console.info(message, optionalArgs || ""); break; - case 'debug': console.debug(message, optionalArgs || ""); break; - default: console.log(message, optionalArgs || ""); break; + case "error": + console.error(message, optionalArgs || "") + break + case "warn": + console.warn(message, optionalArgs || "") + break + case "info": + console.info(message, optionalArgs || "") + break + case "debug": + console.debug(message, optionalArgs || "") + break + default: + console.log(message, optionalArgs || "") + break } } export interface DeviceFilter { - serviceName?: string; - serviceClass?: number; - ignoreSelf?: boolean; - announced?: boolean; - ignoreSimulators?: boolean; - firmwareIdentifier?: boolean; + serviceName?: string + serviceClass?: number + ignoreSelf?: boolean + announced?: boolean + ignoreSimulators?: boolean + firmwareIdentifier?: boolean } export interface BusStats { - packets: number; - announce: number; - acks: number; - bytes: number; + packets: number + announce: number + acks: number + bytes: number } export class BusStatsMonitor extends JDEventSource { - private readonly _prev: BusStats[] = Array(10).fill(0).map(_ => ({ - packets: 0, - announce: 0, - acks: 0, - bytes: 0 - })); - private _previ = 0; + private readonly _prev: BusStats[] = Array(10) + .fill(0) + .map(() => ({ + packets: 0, + announce: 0, + acks: 0, + bytes: 0, + })) + private _previ = 0 private _temp: BusStats = { packets: 0, announce: 0, acks: 0, - bytes: 0 + bytes: 0, } constructor(readonly bus: JDBus) { - super(); + super() this.bus.on(PACKET_SEND, this.handlePacketSend.bind(this)) - this.bus.on(PACKET_PROCESS, this.handlePacketProcess.bind(this)); - this.bus.on(SELF_ANNOUNCE, this.handleSelfAnnounce.bind(this)); + this.bus.on(PACKET_PROCESS, this.handlePacketProcess.bind(this)) + this.bus.on(SELF_ANNOUNCE, this.handleSelfAnnounce.bind(this)) } get current(): BusStats { @@ -150,52 +181,51 @@ export class BusStatsMonitor extends JDEventSource { packets: 0, announce: 0, acks: 0, - bytes: 0 + bytes: 0, } - const n = this._prev.length; + const n = this._prev.length for (let i = 0; i < this._prev.length; ++i) { - const p = this._prev[i]; - r.packets += p.packets; - r.announce += p.announce; - r.acks += p.acks; - r.bytes += p.bytes; + const p = this._prev[i] + r.packets += p.packets + r.announce += p.announce + r.acks += p.acks + r.bytes += p.bytes } // announce every 500ms - const n2 = n / 2; - r.packets /= n2; - r.announce /= n2; - r.acks /= n2; - r.bytes /= n2; - return r; + const n2 = n / 2 + r.packets /= n2 + r.announce /= n2 + r.acks /= n2 + r.bytes /= n2 + return r } private accumulate(pkt: Packet) { - this._temp.packets++; - this._temp.bytes += (pkt.header?.length || 0) + (pkt.data?.length || 0); - if (pkt.isCRCAck) - this._temp.acks++; + this._temp.packets++ + this._temp.bytes += (pkt.header?.length || 0) + (pkt.data?.length || 0) + if (pkt.isCRCAck) this._temp.acks++ } private handleSelfAnnounce() { - const changed = JSON.stringify(this._prev) !== JSON.stringify(this._temp); - this._prev[this._previ] = this._temp; - this._previ = (this._previ + 1) % this._prev.length; + const changed = + JSON.stringify(this._prev) !== JSON.stringify(this._temp) + this._prev[this._previ] = this._temp + this._previ = (this._previ + 1) % this._prev.length this._temp = { packets: 0, announce: 0, acks: 0, - bytes: 0 + bytes: 0, } - if (changed) - this.emit(CHANGE); + if (changed) this.emit(CHANGE) } private handlePacketSend(pkt: Packet) { - this.accumulate(pkt); + this.accumulate(pkt) } private handlePacketProcess(pkt: Packet) { - this.accumulate(pkt); + this.accumulate(pkt) } } @@ -203,97 +233,114 @@ export class BusStatsMonitor extends JDEventSource { * A Jacdac bus manager. This instance maintains the list of devices on the bus. */ export class JDBus extends JDNode { - private _connectionState = BusState.Disconnected; - private _connectPromise: Promise; - private _disconnectPromise: Promise; + private _connectionState = BusState.Disconnected + private _connectPromise: Promise + private _disconnectPromise: Promise - private _devices: JDDevice[] = []; - private _startTime: number; - private _gcInterval: any; - private _announceInterval: any; - private _safeBootInterval: any; - private _refreshRegistersInterval: any; - private _minLoggerPriority = LoggerPriority.Log; - private _firmwareBlobs: FirmwareBlob[]; - private _announcing = false; - private _gcDevicesEnabled = 0; + private _devices: JDDevice[] = [] + private _startTime: number + // eslint-disable-next-line @typescript-eslint/no-explicit-any + private _gcInterval: any + // eslint-disable-next-line @typescript-eslint/no-explicit-any + private _announceInterval: any + // eslint-disable-next-line @typescript-eslint/no-explicit-any + private _safeBootInterval: any + // eslint-disable-next-line @typescript-eslint/no-explicit-any + private _refreshRegistersInterval: any + private _minLoggerPriority = LoggerPriority.Log + private _firmwareBlobs: FirmwareBlob[] + private _announcing = false + private _gcDevicesEnabled = 0 - private _deviceHosts: DeviceHost[] = []; + private _deviceHosts: DeviceHost[] = [] public readonly host: BusHost = { - log + log, } - public readonly stats: BusStatsMonitor; + public readonly stats: BusStatsMonitor /** * Creates the bus with the given transport - * @param sendPacket + * @param sendPacket */ - constructor(public readonly transport: PacketTransport, public options?: BusOptions) { - super(); - this.options = this.options || {}; + constructor( + public readonly transport: PacketTransport, + public options?: BusOptions + ) { + super() + this.options = this.options || {} if (!this.options.deviceId) { - const devId = anyRandomUint32(8); - for (let i = 0; i < 8; ++i) devId[i] &= 0xff; - this.options.deviceId = toHex(devId); + const devId = anyRandomUint32(8) + for (let i = 0; i < 8; ++i) devId[i] &= 0xff + this.options.deviceId = toHex(devId) } - this.stats = new BusStatsMonitor(this); - this.resetTime(); + this.stats = new BusStatsMonitor(this) + this.resetTime() // tell loggers to send data - this.on(DEVICE_ANNOUNCE, debounceAsync(this.pingLoggers.bind(this), 1000)); + this.on( + DEVICE_ANNOUNCE, + debounceAsync(this.pingLoggers.bind(this), 1000) + ) // tell RTC clock the computer time - this.on(DEVICE_ANNOUNCE, this.handleRealTimeClockSync.bind(this)); + this.on(DEVICE_ANNOUNCE, this.handleRealTimeClockSync.bind(this)) // start all timers - this.start(); + this.start() } start() { if (!this._announceInterval) - this._announceInterval = setInterval(() => this.emit(SELF_ANNOUNCE), 499); + this._announceInterval = setInterval( + () => this.emit(SELF_ANNOUNCE), + 499 + ) if (!this._refreshRegistersInterval) - this._refreshRegistersInterval = setInterval(this.refreshRegisters.bind(this), 50); + this._refreshRegistersInterval = setInterval( + this.refreshRegisters.bind(this), + 50 + ) if (!this._gcInterval) - this._gcInterval = setInterval(() => this.gcDevices(), JD_DEVICE_DISCONNECTED_DELAY); + this._gcInterval = setInterval( + () => this.gcDevices(), + JD_DEVICE_DISCONNECTED_DELAY + ) } stop() { if (this._announceInterval) { - clearInterval(this._announceInterval); - this._announceInterval = undefined; + clearInterval(this._announceInterval) + this._announceInterval = undefined } - this.safeBoot = false; + this.safeBoot = false if (this._refreshRegistersInterval) { clearInterval(this._refreshRegistersInterval) - this._refreshRegistersInterval = undefined; + this._refreshRegistersInterval = undefined } if (this._gcInterval) { clearInterval(this._gcInterval) - this._gcInterval = undefined; + this._gcInterval = undefined } } get safeBoot() { - return !!this._safeBootInterval; + return !!this._safeBootInterval } set safeBoot(enabled: boolean) { if (enabled && !this._safeBootInterval) { this._safeBootInterval = setInterval(() => { // don't send message if any device is flashing - if (this._devices.some(d => d.flashing)) - return; + if (this._devices.some(d => d.flashing)) return sendStayInBootloaderCommand(this) - }, 50); - this.emit(CHANGE); - } - else if (!enabled && this._safeBootInterval) { - clearInterval(this._safeBootInterval); - this._safeBootInterval = undefined; - this.emit(CHANGE); + }, 50) + this.emit(CHANGE) + } else if (!enabled && this._safeBootInterval) { + clearInterval(this._safeBootInterval) + this._safeBootInterval = undefined + this.emit(CHANGE) } } @@ -301,45 +348,51 @@ export class JDBus extends JDNode { * Gets the bus connection state. */ get connectionState(): BusState { - return this._connectionState; + return this._connectionState } private setConnectionState(state: BusState) { if (this._connectionState !== state) { - this.log('debug', `${this._connectionState} -> ${state}`) - this._connectionState = state; - this.emit(CONNECTION_STATE, this._connectionState); + this.log("debug", `${this._connectionState} -> ${state}`) + this._connectionState = state + this.emit(CONNECTION_STATE, this._connectionState) switch (this._connectionState) { - case BusState.Connected: this.emit(CONNECT); break; - case BusState.Connecting: this.emit(CONNECTING); break; - case BusState.Disconnecting: this.emit(DISCONNECTING); break; + case BusState.Connected: + this.emit(CONNECT) + break + case BusState.Connecting: + this.emit(CONNECTING) + break + case BusState.Disconnecting: + this.emit(DISCONNECTING) + break case BusState.Disconnected: - this.clear(); - this.emit(DISCONNECT); - break; + this.clear() + this.emit(DISCONNECT) + break } this.emit(CHANGE) } } clear() { - const devs = this._devices; + const devs = this._devices if (devs?.length) { - this._devices = []; + this._devices = [] devs.forEach(dev => { - dev.disconnect(); - this.emit(DEVICE_DISCONNECT, dev); + dev.disconnect() + this.emit(DEVICE_DISCONNECT, dev) this.emit(DEVICE_CHANGE, dev) }) } - this.resetTime(); + this.resetTime() } /** * Gets a unique identifier for this node in the Jacdac DOM. */ get id(): string { - return this.nodeKind; + return this.nodeKind } get name(): string { @@ -347,7 +400,7 @@ export class JDBus extends JDNode { } get friendlyName(): string { - return this.name; + return this.name } get qualifiedName(): string { @@ -359,89 +412,98 @@ export class JDBus extends JDNode { } toString(): string { - return this.id; + return this.id } node(id: string): JDNode { const resolve = (): JDNode => { - const m = /^(?bus|device|service|register|event|field)(:(?\w+)(:(?\w+)(:(?\w+(:(?\w+))?))?)?)?$/.exec(id) - if (!m) return undefined; + const m = /^(?bus|device|service|register|event|field)(:(?\w+)(:(?\w+)(:(?\w+(:(?\w+))?))?)?)?$/.exec( + id + ) + if (!m) return undefined const type = m.groups["type"] - const dev = m.groups["dev"]; - const srv = parseInt(m.groups["srv"], 16); - const reg = parseInt(m.groups["reg"], 16); - const idx = parseInt(m.groups["idx"], 16); + const dev = m.groups["dev"] + const srv = parseInt(m.groups["srv"], 16) + const reg = parseInt(m.groups["reg"], 16) + const idx = parseInt(m.groups["idx"], 16) //console.log(type, this.device(dev), this.device(dev)?.service(srv), this.device(dev)?.service(srv)?.register(reg), idx) switch (type) { - case BUS_NODE_NAME: return this; - case DEVICE_NODE_NAME: return this.device(dev) - case SERVICE_NODE_NAME: return this.device(dev)?.service(srv) - case REGISTER_NODE_NAME: return this.device(dev)?.service(srv)?.register(reg); - case EVENT_NODE_NAME: return this.device(dev)?.service(srv)?.event(reg); - case FIELD_NODE_NAME: return this.device(dev)?.service(srv)?.register(reg)?.fields[idx]; + case BUS_NODE_NAME: + return this + case DEVICE_NODE_NAME: + return this.device(dev) + case SERVICE_NODE_NAME: + return this.device(dev)?.service(srv) + case REGISTER_NODE_NAME: + return this.device(dev)?.service(srv)?.register(reg) + case EVENT_NODE_NAME: + return this.device(dev)?.service(srv)?.event(reg) + case FIELD_NODE_NAME: + return this.device(dev)?.service(srv)?.register(reg) + ?.fields[idx] } - this.log('info', `node ${id} not found`) - return undefined; + this.log("info", `node ${id} not found`) + return undefined } - const node = resolve(); - return node; + const node = resolve() + return node } private resetTime() { - this._startTime = Date.now(); + this._startTime = Date.now() this.emit(CHANGE) } - get timestamp() { - return Date.now() - this._startTime; + get timestamp(): number { + return Date.now() - this._startTime } get minLoggerPriority(): LoggerPriority { - return this._minLoggerPriority; - } - - get parent(): JDNode { - return undefined; - } - - protected get logger(): Log { - return this.host.log + return this._minLoggerPriority } set minLoggerPriority(priority: LoggerPriority) { if (priority !== this._minLoggerPriority) { - this._minLoggerPriority = priority; + this._minLoggerPriority = priority this.emit(CHANGE) } } + get parent(): JDNode { + return undefined + } + + protected get logger(): Log { + return this.host.log + } + private async pingLoggers() { if (this._minLoggerPriority < LoggerPriority.Silent) { const pkt = Packet.jdpacked<[LoggerPriority]>( 0x2000 | LoggerReg.MinPriority, "i32", - [this._minLoggerPriority]); - await pkt.sendAsMultiCommandAsync(this, SRV_LOGGER); + [this._minLoggerPriority] + ) + await pkt.sendAsMultiCommandAsync(this, SRV_LOGGER) } } private async handleRealTimeClockSync(device: JDDevice) { // tell time to the RTC clocks if (device.hasService(SRV_REAL_TIME_CLOCK)) - await RealTimeClockServiceHost.syncTime(this); + await RealTimeClockServiceHost.syncTime(this) } sendPacketAsync(p: Packet) { - p.timestamp = this.timestamp; - this.emit(PACKET_SEND, p); + p.timestamp = this.timestamp + this.emit(PACKET_SEND, p) if (!this.connected) { - this.emit(PACKET_SEND_DISCONNECT, p); - return Promise.resolve(); + this.emit(PACKET_SEND_DISCONNECT, p) + return Promise.resolve() } - const spa = this.transport?.sendPacketAsync; - if (!spa) - return Promise.resolve(); - return spa(p); + const spa = this.transport?.sendPacketAsync + if (!spa) return Promise.resolve() + return spa(p) } get connecting() { @@ -465,13 +527,17 @@ export class JDBus extends JDNode { } set firmwareBlobs(blobs: FirmwareBlob[]) { - this._firmwareBlobs = blobs; + this._firmwareBlobs = blobs this.emit(FIRMWARE_BLOBS_CHANGE) this.emit(CHANGE) } + // eslint-disable-next-line @typescript-eslint/no-explicit-any errorHandler(context: string, exception: any) { - this.log('error', `error ${context} ${exception?.message}\n${exception?.stack}`) + this.log( + "error", + `error ${context} ${exception?.message}\n${exception?.stack}` + ) this.emit(ERROR, { context, exception }) this.emit(CHANGE) } @@ -479,82 +545,86 @@ export class JDBus extends JDNode { connectAsync(background?: boolean): Promise { // already connected if (this.connectionState == BusState.Connected) { - this.log('debug', `already connected`) - return Promise.resolve(); + this.log("debug", `already connected`) + return Promise.resolve() } // connecting if (!this._connectPromise) { // already disconnecting, retry when disconnected if (this._disconnectPromise) { - this.log('debug', `queuing connect after disconnecting`) + this.log("debug", `queuing connect after disconnecting`) const p = this._disconnectPromise - this._disconnectPromise = undefined; + this._disconnectPromise = undefined this._connectPromise = p.then(() => this.connectAsync()) - } - else { + } else { // starting a fresh connection - this.log('debug', `connecting`) - this._connectPromise = Promise.resolve(); + this.log("debug", `connecting`) + this._connectPromise = Promise.resolve() this.setConnectionState(BusState.Connecting) if (this.transport?.connectAsync) - this._connectPromise = this._connectPromise - .then(() => this.transport.connectAsync(background)) - const p = this._connectPromise = this._connectPromise + this._connectPromise = this._connectPromise.then(() => + this.transport.connectAsync(background) + ) + const p = (this._connectPromise = this._connectPromise .then(() => { if (p == this._connectPromise) { - this._connectPromise = undefined; + this._connectPromise = undefined this.setConnectionState(BusState.Connected) } else { - this.log('debug', `connection aborted in flight`) + this.log("debug", `connection aborted in flight`) } }) .catch(e => { if (p == this._connectPromise) { - this._connectPromise = undefined; + this._connectPromise = undefined this.setConnectionState(BusState.Disconnected) - this.errorHandler(CONNECT, e); + this.errorHandler(CONNECT, e) } else { - this.log('debug', `connection error aborted in flight`) + this.log( + "debug", + `connection error aborted in flight` + ) } - }) + })) } } else { - this.log('debug', `connect with existing promise`) + this.log("debug", `connect with existing promise`) } - return this._connectPromise; + return this._connectPromise } disconnectAsync(): Promise { // already disconnected if (this.connectionState == BusState.Disconnected) - return Promise.resolve(); + return Promise.resolve() if (!this._disconnectPromise) { // connection in progress, wait and disconnect when done if (this._connectPromise) { - this.log('debug', `cancelling connection and disconnect`) - this._connectPromise = undefined; + this.log("debug", `cancelling connection and disconnect`) + this._connectPromise = undefined } - this.log('debug', `disconnecting`) - this._disconnectPromise = Promise.resolve(); + this.log("debug", `disconnecting`) + this._disconnectPromise = Promise.resolve() this.setConnectionState(BusState.Disconnecting) if (this.transport?.disconnectAsync) - this._disconnectPromise = this._disconnectPromise - .then(() => this.transport.disconnectAsync()) + this._disconnectPromise = this._disconnectPromise.then(() => + this.transport.disconnectAsync() + ) this._disconnectPromise = this._disconnectPromise .catch(e => { - this._disconnectPromise = undefined; + this._disconnectPromise = undefined this.errorHandler(DISCONNECT, e) }) .finally(() => { - this._disconnectPromise = undefined; - this.setConnectionState(BusState.Disconnected); - }); + this._disconnectPromise = undefined + this.setConnectionState(BusState.Disconnected) + }) } else { - this.log('debug', `disconnect with existing promise`) + this.log("debug", `disconnect with existing promise`) } - return this._disconnectPromise; + return this._disconnectPromise } /** @@ -563,37 +633,36 @@ export class JDBus extends JDNode { devices(options?: DeviceFilter) { if (options?.serviceName && options?.serviceClass > -1) throw Error("serviceClass and serviceName cannot be used together") - const sc = options?.serviceClass > -1 - ? options?.serviceClass - : serviceClass(options?.serviceName); + const sc = + options?.serviceClass > -1 + ? options?.serviceClass + : serviceClass(options?.serviceName) let r = this._devices.slice(0) - if (sc > -1) - r = r.filter(s => s.hasService(sc)); + if (sc > -1) r = r.filter(s => s.hasService(sc)) if (options?.ignoreSelf) - r = r.filter(s => s.deviceId !== this.selfDeviceId); - if (options?.announced) - r = r.filter(s => s.announced); + r = r.filter(s => s.deviceId !== this.selfDeviceId) + if (options?.announced) r = r.filter(s => s.announced) if (options?.ignoreSimulators) - r = r.filter(r => !this.deviceHost(r.deviceId)); + r = r.filter(r => !this.deviceHost(r.deviceId)) if (options?.firmwareIdentifier) r = r.filter(r => !!r.firmwareIdentifier) - return r; + return r } /** * Gets the current list of device hosts on the bus */ deviceHosts(): DeviceHost[] { - return this._deviceHosts.slice(0); + return this._deviceHosts.slice(0) } /** * Get a device host for a given device - * @param deviceId + * @param deviceId */ deviceHost(deviceId: string) { - return this._deviceHosts.find(d => d.deviceId === deviceId); + return this._deviceHosts.find(d => d.deviceId === deviceId) } /** @@ -602,14 +671,14 @@ export class JDBus extends JDNode { */ addDeviceHost(deviceHost: DeviceHost) { if (deviceHost && this._deviceHosts.indexOf(deviceHost) < 0) { - this._deviceHosts.push(deviceHost); - deviceHost.bus = this; + this._deviceHosts.push(deviceHost) + deviceHost.bus = this - this.emit(DEVICE_HOST_ADDED); - this.emit(CHANGE); + this.emit(DEVICE_HOST_ADDED) + this.emit(CHANGE) } - return this.device(deviceHost.deviceId); + return this.device(deviceHost.deviceId) } /** @@ -617,139 +686,144 @@ export class JDBus extends JDNode { * @param deviceHost */ removeDeviceHost(deviceHost: DeviceHost) { - if (!deviceHost) return; + if (!deviceHost) return - const i = this._deviceHosts.indexOf(deviceHost); + const i = this._deviceHosts.indexOf(deviceHost) if (i > -1) { // remove device as well - const devi = this._devices.findIndex(d => d.deviceId === deviceHost.deviceId); + const devi = this._devices.findIndex( + d => d.deviceId === deviceHost.deviceId + ) if (devi > -1) { - const dev = this._devices[devi]; + const dev = this._devices[devi] this._devices.splice(devi, 1) - dev.disconnect(); - this.emit(DEVICE_DISCONNECT, dev); + dev.disconnect() + this.emit(DEVICE_DISCONNECT, dev) this.emit(DEVICE_CHANGE, dev) } // remove host this._deviceHosts.splice(i, 1) - deviceHost.bus = undefined; - this.emit(DEVICE_HOST_REMOVED); + deviceHost.bus = undefined + this.emit(DEVICE_HOST_REMOVED) // removed host - this.emit(CHANGE); + this.emit(CHANGE) } } get children(): JDNode[] { - return this.devices(); + return this.devices() } /** * Gets the current list of services from all the known devices on the bus */ - services(options?: { serviceName?: string, serviceClass?: number }): JDService[] { - return arrayConcatMany(this.devices(options).map(d => d.services(options))) + services(options?: { + serviceName?: string + serviceClass?: number + }): JDService[] { + return arrayConcatMany( + this.devices(options).map(d => d.services(options)) + ) } /** * Gets a device on the bus - * @param id + * @param id */ device(id: string) { let d = this._devices.find(d => d.deviceId == id) if (!d) { - this.log('info', `new device ${id}`) + this.log("info", `new device ${id}`) if (this.devicesFrozen) { this.log(`info`, `devices frozen, dropping ${id}`) - return undefined; + return undefined } d = new JDDevice(this, id) if (this.host.deviceNameSettings) d.name = this.host.deviceNameSettings.resolve(d) - if (!d.name && id === this.selfDeviceId) - d.name = "self"; - this._devices.push(d); + if (!d.name && id === this.selfDeviceId) d.name = "self" + this._devices.push(d) // stable sort this._devices.sort((l, r) => strcmp(l.deviceId, r.deviceId)) - this.emit(DEVICE_CONNECT, d); - this.emit(DEVICE_CHANGE, d); + this.emit(DEVICE_CONNECT, d) + this.emit(DEVICE_CHANGE, d) this.emit(CHANGE) } return d } - private _debouncedScanFirmwares: () => void; + private _debouncedScanFirmwares: () => void setBackgroundFirmwareScans(enabled: boolean) { const isSSR = typeof window === "undefined" - if (isSSR) - enabled = false; + if (isSSR) enabled = false if (enabled) { if (!this._debouncedScanFirmwares) { this._debouncedScanFirmwares = debounceAsync(async () => { if (this.connected) { - this.log('info', `scanning firmwares`) - await scanFirmwares(this); + this.log("info", `scanning firmwares`) + await scanFirmwares(this) } }, SCAN_FIRMWARE_INTERVAL) this.on(DEVICE_ANNOUNCE, this._debouncedScanFirmwares) } } else { if (this._debouncedScanFirmwares) { - this.log('debug', `disabling background firmware scans`) - const d = this._debouncedScanFirmwares; - this._debouncedScanFirmwares = undefined; + this.log("debug", `disabling background firmware scans`) + const d = this._debouncedScanFirmwares + this._debouncedScanFirmwares = undefined this.off(DEVICE_ANNOUNCE, d) } } } freezeDevices() { - this._gcDevicesEnabled++; + this._gcDevicesEnabled++ } unfreezeDevices() { - this._gcDevicesEnabled = Math.max(0, this._gcDevicesEnabled - 1); + this._gcDevicesEnabled = Math.max(0, this._gcDevicesEnabled - 1) } get devicesFrozen() { - return this._gcDevicesEnabled > 0; + return this._gcDevicesEnabled > 0 } private gcDevices() { if (this.devicesFrozen) { this.log("debug", "devices frozen") - return; + return } - const LOST_DELAY = this.options?.deviceLostDelay || JD_DEVICE_LOST_DELAY; - const DISCONNECTED_DELAY = this.options?.deviceDisconnectedDelay || JD_DEVICE_DISCONNECTED_DELAY + const LOST_DELAY = this.options?.deviceLostDelay || JD_DEVICE_LOST_DELAY + const DISCONNECTED_DELAY = + this.options?.deviceDisconnectedDelay || + JD_DEVICE_DISCONNECTED_DELAY const lostCutoff = this.timestamp - LOST_DELAY - const disconnectedCutoff = this.timestamp - DISCONNECTED_DELAY; + const disconnectedCutoff = this.timestamp - DISCONNECTED_DELAY // cycle through events and disconnect devices that are long gone for (let i = 0; i < this._devices.length; ++i) { const dev = this._devices[i] // don't gc traces - if (dev.replay) - continue; + if (dev.replay) continue if (dev.lastSeen < disconnectedCutoff) { this._devices.splice(i, 1) i-- this.disconnectDevice(dev) - } - else if (dev.lastSeen < lostCutoff) { + } else if (dev.lastSeen < lostCutoff) { dev.lost = true } } } private disconnectDevice(dev: JDDevice) { - dev.disconnect(); - this.emit(DEVICE_DISCONNECT, dev); + dev.disconnect() + this.emit(DEVICE_DISCONNECT, dev) this.emit(DEVICE_CHANGE, dev) this.emit(CHANGE) } @@ -762,8 +836,7 @@ export class JDBus extends JDNode { if (!pkt.isMultiCommand && !pkt.device) { pkt.device = this.device(pkt.deviceIdentifier) // check if devices are frozen - if (!pkt.device) - return; + if (!pkt.device) return } this.emit(PACKET_PRE_PROCESS, pkt) let isAnnounce = false @@ -778,7 +851,7 @@ export class JDBus extends JDNode { ack.sendReportAsync(this.selfDevice) } } - pkt.device.processPacket(pkt); + pkt.device.processPacket(pkt) } else { pkt.device.lastSeen = pkt.timestamp if (pkt.serviceIndex == JD_SERVICE_INDEX_CTRL) { @@ -795,10 +868,8 @@ export class JDBus extends JDNode { this.emit(PACKET_RECEIVE_ANNOUNCE, pkt) } else { this.emit(PACKET_RECEIVE, pkt) - if (pkt.isEvent) - this.emit(PACKET_EVENT, pkt); - else if (pkt.isReport) - this.emit(PACKET_REPORT, pkt) + if (pkt.isEvent) this.emit(PACKET_EVENT, pkt) + else if (pkt.isReport) this.emit(PACKET_REPORT, pkt) } } @@ -811,14 +882,17 @@ export class JDBus extends JDNode { } enableAnnounce() { - if (!this._announcing) - return; - this._announcing = true; + if (!this._announcing) return + this._announcing = true let restartCounter = 0 this.on(SELF_ANNOUNCE, () => { // we do not support any services (at least yet) if (restartCounter < 0xf) restartCounter++ - const pkt = Packet.jdpacked<[number]>(CMD_ADVERTISEMENT_DATA, "u32", [restartCounter | 0x100]) + const pkt = Packet.jdpacked<[number]>( + CMD_ADVERTISEMENT_DATA, + "u32", + [restartCounter | 0x100] + ) pkt.serviceIndex = JD_SERVICE_INDEX_CTRL pkt.deviceIdentifier = this.selfDeviceId pkt.sendReportAsync(this.selfDevice) @@ -829,92 +903,125 @@ export class JDBus extends JDNode { * Cycles through all known registers and refreshes the once that have REPORT_UPDATE registered */ private refreshRegisters() { - const devices = this._devices - .filter(device => device.announced && !device.lost); // don't try lost devices or devices flashing + const devices = this._devices.filter( + device => device.announced && !device.lost + ) // don't try lost devices or devices flashing // skip if no devices or any device is currently flashing - if (!devices.length || devices.some(dev => dev.flashing)) - return; // no devices, we're done + if (!devices.length || devices.some(dev => dev.flashing)) return // no devices, we're done // collect registers - const registers = arrayConcatMany(devices - .map(device => arrayConcatMany( - device.services({ specification: true }) - .map(service => service.registers() - // someone is listening for reports - .filter(reg => reg.listenerCount(REPORT_UPDATE) > 0) - // ask if data is missing or non-const/status code - .filter(reg => !reg.data - || !(isConstRegister(reg.specification) || reg.code === SystemReg.StatusCode || reg.code === SystemReg.ReadingError)) - // double double-query status light - .filter(reg => !reg.data || !(service.serviceClass === SRV_CONTROL && reg.code === ControlReg.StatusLight)) - // stop asking optional registers - .filter(reg => !reg.specification?.optional || reg.lastGetAttempts < REGISTER_OPTIONAL_POLL_COUNT) + const registers = arrayConcatMany( + devices.map(device => + arrayConcatMany( + device.services({ specification: true }).map(service => + service + .registers() + // someone is listening for reports + .filter(reg => reg.listenerCount(REPORT_UPDATE) > 0) + // ask if data is missing or non-const/status code + .filter( + reg => + !reg.data || + !( + isConstRegister(reg.specification) || + reg.code === SystemReg.StatusCode || + reg.code === SystemReg.ReadingError + ) + ) + // double double-query status light + .filter( + reg => + !reg.data || + !( + service.serviceClass === SRV_CONTROL && + reg.code === ControlReg.StatusLight + ) + ) + // stop asking optional registers + .filter( + reg => + !reg.specification?.optional || + reg.lastGetAttempts < + REGISTER_OPTIONAL_POLL_COUNT + ) ) - ) + ) ) ) // refresh values for (const register of registers) { - const { service, specification } = register; - const noDataYet = !register.data; - const age = this.timestamp - register.lastGetTimestamp; - const backoff = register.lastGetAttempts; + const { service, specification } = register + const noDataYet = !register.data + const age = this.timestamp - register.lastGetTimestamp + const backoff = register.lastGetAttempts // streaming register? use streaming sample if (isReading(specification) && isSensor(service.specification)) { // compute refresh interval - const intervalRegister = service.register(SensorReg.StreamingInterval); - let interval = intervalRegister?.intValue; + const intervalRegister = service.register( + SensorReg.StreamingInterval + ) + let interval = intervalRegister?.intValue // no interval data if (interval === undefined) { // use preferred interval data or default to 50 - const preferredInterval = service.register(SensorReg.StreamingPreferredInterval); - interval = preferredInterval?.intValue; + const preferredInterval = service.register( + SensorReg.StreamingPreferredInterval + ) + interval = preferredInterval?.intValue if (intervalRegister) // all async - intervalRegister.sendGetAsync(); + intervalRegister.sendGetAsync() } // still no interval data use from spec or default if (interval === undefined) - interval = specification.preferredInterval || STREAMING_DEFAULT_INTERVAL - const samplesRegister = service.register(SensorReg.StreamingSamples); - const samplesLastSetTimesamp = samplesRegister?.lastSetTimestamp; + interval = + specification.preferredInterval || + STREAMING_DEFAULT_INTERVAL + const samplesRegister = service.register( + SensorReg.StreamingSamples + ) + const samplesLastSetTimesamp = samplesRegister?.lastSetTimestamp if (samplesLastSetTimesamp !== undefined) { - const age = this.timestamp - samplesRegister.lastSetTimestamp; + const age = + this.timestamp - samplesRegister.lastSetTimestamp // need to figure out when we asked for streaming - const midAge = interval * 0xff / 2; + const midAge = (interval * 0xff) / 2 // compute if half aged if (age > midAge) { //console.log(`auto-refresh - restream`, register) - samplesRegister.sendSetPackedAsync("u8", [0xff]); + samplesRegister.sendSetPackedAsync("u8", [0xff]) } } // first query, get data asap once per second - if (noDataYet && age > 1000) - register.sendGetAsync(); + if (noDataYet && age > 1000) register.sendGetAsync() } // regular register, ping if data is old else { - const expiration = Math.min(REGISTER_POLL_REPORT_MAX_INTERVAL, - (noDataYet ? REGISTER_POLL_FIRST_REPORT_INTERVAL : REGISTER_POLL_REPORT_INTERVAL) - * (1 << backoff)) + const expiration = Math.min( + REGISTER_POLL_REPORT_MAX_INTERVAL, + (noDataYet + ? REGISTER_POLL_FIRST_REPORT_INTERVAL + : REGISTER_POLL_REPORT_INTERVAL) * + (1 << backoff) + ) if (age > expiration) { //console.log(`bus: poll ${register.id}`, register, age, backoff, expiration) - register.sendGetAsync(); + register.sendGetAsync() } } } // apply streaming samples to device hosts - this._deviceHosts.map(host => host.emit(REFRESH)); + this._deviceHosts.map(host => host.emit(REFRESH)) } /** * Runs a promise with a timeout. Returns undefined if timeout happens before of disconnection. - * @param timeout - * @param p + * @param timeout + * @param p */ withTimeout(timeout: number, p: Promise): Promise { return new Promise((resolve, reject) => { @@ -926,32 +1033,34 @@ export class JDBus extends JDNode { // the bus got disconnected so all operation will // time out going further this.emit(TIMEOUT_DISCONNECT) - resolve(undefined); - } - else { + resolve(undefined) + } else { // the command timed out this.emit(TIMEOUT) - this.emit(ERROR, "Timeout (" + timeout + "ms)"); - resolve(undefined); + this.emit(ERROR, "Timeout (" + timeout + "ms)") + resolve(undefined) } } - }, timeout); - p.then(v => { - if (!done) { - done = true - clearTimeout(tid); - resolve(v) - } else { - // we already gave up - this.emit(LATE) + }, timeout) + p.then( + v => { + if (!done) { + done = true + clearTimeout(tid) + resolve(v) + } else { + // we already gave up + this.emit(LATE) + } + }, + e => { + if (!done) { + done = true + clearTimeout(tid) + reject(e) + } } - }, e => { - if (!done) { - done = true - clearTimeout(tid); - reject(e) - } - }) + ) }) } } diff --git a/src/jdom/command.ts b/src/jdom/command.ts index 0ae95e728..a057e7840 100644 --- a/src/jdom/command.ts +++ b/src/jdom/command.ts @@ -8,7 +8,7 @@ export type ArgType = number | boolean | string | Uint8Array export function packArguments(info: jdspec.PacketInfo, args: ArgType[]) { let repeatIdx = -1 let numReps = 0 - let argIdx = 0 + const argIdx = 0 let dst = 0 const buf = new Uint8Array(256) diff --git a/src/jdom/device.ts b/src/jdom/device.ts index 60e779c67..589e51524 100644 --- a/src/jdom/device.ts +++ b/src/jdom/device.ts @@ -168,14 +168,14 @@ export class JDDevice extends JDNode { return this._shortId; } - get firmwareInfo() { - return this._firmwareInfo; - } - get parent(): JDNode { return this.bus } + get firmwareInfo() { + return this._firmwareInfo; + } + set firmwareInfo(info: FirmwareInfo) { const changed = JSON.stringify(this._firmwareInfo) !== JSON.stringify(info); if (changed) { @@ -283,7 +283,7 @@ export class JDDevice extends JDNode { assert(this.announced) if (!this._services) { const n = this.serviceLength; - let s = []; + const s = []; for (let i = 0; i < n; ++i) s.push(new JDService(this, i)); this._services = s; diff --git a/src/jdom/event.ts b/src/jdom/event.ts index 7ba670571..5dbfb9a06 100644 --- a/src/jdom/event.ts +++ b/src/jdom/event.ts @@ -8,7 +8,7 @@ import { JDServiceMemberNode } from "./servicemembernode"; export class JDEvent extends JDServiceMemberNode { private _lastReportPkt: Packet; - private _count: number = 0; + private _count = 0; constructor( service: JDService, diff --git a/src/jdom/eventsource.ts b/src/jdom/eventsource.ts index 9d40f1873..4e0195525 100644 --- a/src/jdom/eventsource.ts +++ b/src/jdom/eventsource.ts @@ -3,6 +3,7 @@ import { NEW_LISTENER, REMOVE_LISTENER, ERROR, CHANGE } from "./constants"; import { Observable, Observer } from "./observable"; import Flags from "./flags"; +// eslint-disable-next-line @typescript-eslint/no-explicit-any export type EventHandler = (...args: any[]) => void; interface Listener { @@ -93,6 +94,7 @@ export class JDEventSource { * @param eventName * @param args */ + // eslint-disable-next-line @typescript-eslint/no-explicit-any emit(eventName: string, ...args: any[]): boolean { if (!eventName) return false; @@ -114,6 +116,7 @@ export class JDEventSource { --i; } try { + // eslint-disable-next-line prefer-spread handler.apply(null, args); } catch (e) { diff --git a/src/jdom/flashing.ts b/src/jdom/flashing.ts index 8493ead91..8a82a1b05 100644 --- a/src/jdom/flashing.ts +++ b/src/jdom/flashing.ts @@ -86,7 +86,7 @@ class FlashClient { private async startFlashAsync() { this.sessionId = (Math.random() * 0x10000000) | 0 - for (let d of this.classClients) { + for (const d of this.classClients) { d.start() log(`flashing ${d.device.shortId}; available flash=${d.flashSize / 1024}kb; page=${d.pageSize}b`) } @@ -96,7 +96,7 @@ class FlashClient { this.allPending() for (let i = 0; i < BL_RETRIES; ++i) { - for (let d of this.classClients) { + for (const d of this.classClients) { if (d.pending) { if (d.lastStatus && d.lastStatus.getNumber(NumberFormat.UInt32LE, 0) == this.sessionId) { d.pending = false @@ -118,14 +118,14 @@ class FlashClient { } private async endFlashAsync() { - for (let f of this.classClients) { + for (const f of this.classClients) { await delay(10) await f.device.sendCtrlCommand(ControlCmd.Reset) } } private allPending() { - for (let c of this.classClients) { + for (const c of this.classClients) { c.pending = true c.lastStatus = null } @@ -133,7 +133,7 @@ class FlashClient { private numPending() { let num = 0 - for (let c of this.classClients) + for (const c of this.classClients) if (c.pending) num++ return num } @@ -156,7 +156,7 @@ class FlashClient { if (page.data.length != this.pageSize) throw new Error("invalid page size") - for (let f of this.classClients) + for (const f of this.classClients) f.lastStatus = null this.allPending() @@ -176,7 +176,7 @@ class FlashClient { if (i == 0 || currSubpage < numSubpage) await p.sendAsMultiCommandAsync(this.bus, SRV_BOOTLOADER) else { - for (let f of this.classClients) + for (const f of this.classClients) if (f.pending) { f.lastStatus = null await f.sendCommandAsync(p) @@ -187,7 +187,7 @@ class FlashClient { await this.waitForStatusAsync() - for (let f of this.classClients) { + for (const f of this.classClients) { if (f.pending) { let err = "" if (f.lastStatus) { @@ -248,7 +248,7 @@ class FlashClient { } } finally { // even if resetting failed, unregister event listeners - for (let d of this.classClients) { + for (const d of this.classClients) { d.stop() } } @@ -265,7 +265,7 @@ export function parseUF2(uf2: Uint8Array, store: string): FirmwareBlob[] { let currBlob: FirmwareBlob for (let off = 0; off < uf2.length; off += 512) { const header = uf2.slice(off, off + 32) - let [magic0, magic1, flags, trgaddr, payloadSize, blkNo, numBlocks, familyID] = + const [magic0, magic1, flags, trgaddr, payloadSize, blkNo, numBlocks, familyID] = bufferToArray(header, NumberFormat.UInt32LE) if (magic0 != UF2_MAGIC_START0 || magic1 != UF2_MAGIC_START1 || diff --git a/src/jdom/hf2.ts b/src/jdom/hf2.ts index a47977db0..3e250a48c 100644 --- a/src/jdom/hf2.ts +++ b/src/jdom/hf2.ts @@ -1,14 +1,25 @@ -import { CMSISProto } from "./microbit"; -import { USBOptions } from "./usb"; +import { CMSISProto } from "./microbit" +import { USBOptions } from "./usb" import { - throwError, delay, assert, SMap, PromiseBuffer, PromiseQueue, memcpy, write32, write16, read16, - encodeU32LE, read32, bufferToString -} from "./utils"; + throwError, + delay, + assert, + SMap, + PromiseBuffer, + PromiseQueue, + memcpy, + write32, + write16, + read16, + encodeU32LE, + read32, + bufferToString, +} from "./utils" -const controlTransferGetReport = 0x01; -const controlTransferSetReport = 0x09; -const controlTransferOutReport = 0x200; -const controlTransferInReport = 0x100; +const controlTransferGetReport = 0x01 +const controlTransferSetReport = 0x09 +const controlTransferOutReport = 0x200 +const controlTransferInReport = 0x100 // see https://github.com/microsoft/uf2/blob/main/hf2.md for full spec export const HF2_DEVICE_MAJOR = 42 @@ -28,11 +39,11 @@ export const HF2_CMD_INFO = 0x0002 // no arguments // results is utf8 character array -export const HF2_CMD_RESET_INTO_APP = 0x0003// no arguments, no result +export const HF2_CMD_RESET_INTO_APP = 0x0003 // no arguments, no result -export const HF2_CMD_RESET_INTO_BOOTLOADER = 0x0004 // no arguments, no result +export const HF2_CMD_RESET_INTO_BOOTLOADER = 0x0004 // no arguments, no result -export const HF2_CMD_START_FLASH = 0x0005 // no arguments, no result +export const HF2_CMD_START_FLASH = 0x0005 // no arguments, no result export const HF2_CMD_WRITE_FLASH_PAGE = 0x0006 /* @@ -80,10 +91,10 @@ export const HF2_CMD_DMESG = 0x0010 // results is utf8 character array export const HF2_FLAG_SERIAL_OUT = 0x80 -export const HF2_FLAG_SERIAL_ERR = 0xC0 +export const HF2_FLAG_SERIAL_ERR = 0xc0 export const HF2_FLAG_CMDPKT_LAST = 0x40 export const HF2_FLAG_CMDPKT_BODY = 0x00 -export const HF2_FLAG_MASK = 0xC0 +export const HF2_FLAG_MASK = 0xc0 export const HF2_SIZE_MASK = 63 export const HF2_STATUS_OK = 0x00 @@ -100,27 +111,27 @@ export const HF2_CMD_JDS_SEND = 0x0021 export const HF2_EV_JDS_PACKET = 0x800020 export class Transport { - dev: USBDevice; - iface: USBInterface; - altIface: USBAlternateInterface; - epIn: USBEndpoint; - epOut: USBEndpoint; - readLoopStarted = false; - ready = false; - rawMode = false; + dev: USBDevice + iface: USBInterface + altIface: USBAlternateInterface + epIn: USBEndpoint + epOut: USBEndpoint + readLoopStarted = false + ready = false + rawMode = false - constructor(private usb: USBOptions) { } + constructor(private usb: USBOptions) {} - onData = (v: Uint8Array) => { }; + // eslint-disable-next-line @typescript-eslint/no-unused-vars + onData = (v: Uint8Array) => {} onError = (e: Error) => { console.error("USB error: " + (e ? e.stack : e)) - }; + } + // eslint-disable-next-line @typescript-eslint/no-explicit-any log(msg: string, v?: any) { - if (v != undefined) - console.log("USB: " + msg, v) - else - console.log("USB: " + msg) + if (v != undefined) console.log("USB: " + msg, v) + else console.log("USB: " + msg) } private mkProto(): Proto { @@ -139,9 +150,11 @@ export class Transport { this.ready = false if (!this.dev) return Promise.resolve() this.log("close device") - return this.dev.close() + return this.dev + .close() .catch(e => { // just ignore errors closing, most likely device just disconnected + console.debug(e) }) .then(() => { this.clearDev() @@ -150,49 +163,53 @@ export class Transport { } recvPacketAsync(): Promise { - if (!this.rawMode) - this.error("rawMode required") + if (!this.rawMode) this.error("rawMode required") return this.recvPacketCoreAsync() } private recvPacketCoreAsync(): Promise { - let final = (res: USBInTransferResult) => { - if (res.status != "ok") - this.error("USB IN transfer failed") - let arr = new Uint8Array(res.data.buffer) - if (arr.length == 0) - return this.recvPacketCoreAsync() + const final = (res: USBInTransferResult) => { + if (res.status != "ok") this.error("USB IN transfer failed") + const arr = new Uint8Array(res.data.buffer) + if (arr.length == 0) return this.recvPacketCoreAsync() return arr } - if (!this.dev) - return Promise.reject(new Error("Disconnected")) + if (!this.dev) return Promise.reject(new Error("Disconnected")) if (!this.epIn) { - return this.dev.controlTransferIn({ - requestType: "class", - recipient: "interface", - request: controlTransferGetReport, - value: controlTransferInReport, - index: this.iface.interfaceNumber - }, 64).then(final) + return this.dev + .controlTransferIn( + { + requestType: "class", + recipient: "interface", + request: controlTransferGetReport, + value: controlTransferInReport, + index: this.iface.interfaceNumber, + }, + 64 + ) + .then(final) } - return this.dev.transferIn(this.epIn.endpointNumber, 64) - .then(final) + return this.dev.transferIn(this.epIn.endpointNumber, 64).then(final) } error(msg: string) { - console.error(`USB error on device ${this.dev ? this.dev.productName : "n/a"} (${msg})`) + console.error( + `USB error on device ${ + this.dev ? this.dev.productName : "n/a" + } (${msg})` + ) this.onError(new Error("USB error")) } private async readLoop() { - if (this.rawMode || this.readLoopStarted) - return + if (this.rawMode || this.readLoopStarted) return this.readLoopStarted = true this.log("start read loop") + // eslint-disable-next-line no-constant-condition while (true) { if (!this.ready) { break @@ -221,60 +238,69 @@ export class Transport { } sendPacketAsync(pkt: Uint8Array) { - if (!this.dev) - return Promise.reject(new Error("Disconnected")) + if (!this.dev) return Promise.reject(new Error("Disconnected")) assert(pkt.length <= 64) if (!this.epOut) { - return this.dev.controlTransferOut({ - requestType: "class", - recipient: "interface", - request: controlTransferSetReport, - value: controlTransferOutReport, - index: this.iface.interfaceNumber - }, pkt).then(res => { - if (res.status != "ok") - this.error("USB CTRL OUT transfer failed") - }) + return this.dev + .controlTransferOut( + { + requestType: "class", + recipient: "interface", + request: controlTransferSetReport, + value: controlTransferOutReport, + index: this.iface.interfaceNumber, + }, + pkt + ) + .then(res => { + if (res.status != "ok") + this.error("USB CTRL OUT transfer failed") + }) } - return this.dev.transferOut(this.epOut.endpointNumber, pkt) + return this.dev + .transferOut(this.epOut.endpointNumber, pkt) .then(res => { - if (res.status != "ok") - this.error("USB OUT transfer failed") + if (res.status != "ok") this.error("USB OUT transfer failed") }) } get isMicrobit() { - return this.dev && this.dev.productId == 516 && this.dev.vendorId == 3368 + return ( + this.dev && this.dev.productId == 516 && this.dev.vendorId == 3368 + ) } private checkDevice() { - this.iface = undefined; - this.altIface = undefined; - if (!this.dev) - return false; - this.log("connect device: " + this.dev.manufacturerName + " " + this.dev.productName) + this.iface = undefined + this.altIface = undefined + if (!this.dev) return false + this.log( + "connect device: " + + this.dev.manufacturerName + + " " + + this.dev.productName + ) // resolve interfaces const subcl = this.isMicrobit ? 0 : HF2_DEVICE_MAJOR for (const iface of this.dev.configuration.interfaces) { const alt = iface.alternates[0] if (alt.interfaceClass == 0xff && alt.interfaceSubclass == subcl) { - this.iface = iface; - this.altIface = alt; - break; + this.iface = iface + this.altIface = alt + break } } - if (this.isMicrobit) - this.rawMode = true - return !!this.iface; + if (this.isMicrobit) this.rawMode = true + return !!this.iface } private async tryReconnectAsync() { try { - const devices = await this.usb.getDevices(); - this.dev = devices[0]; + const devices = await this.usb.getDevices() + this.dev = devices[0] } catch (e) { console.log(e) - this.dev = undefined; + this.dev = undefined } } @@ -286,29 +312,28 @@ export class Transport { // hf2 devices (incl. arcade) classCode: 255, subclassCode: HF2_DEVICE_MAJOR, - }, { + }, + { // micro:bit v2 vendorId: 3368, - productId: 516 - } - ] + productId: 516, + }, + ], }) } catch (e) { console.log(e) - this.dev = undefined; + this.dev = undefined } } async connectAsync(background: boolean) { - await this.tryReconnectAsync(); - if (!this.dev && !background) - await this.requestDeviceAsync(); + await this.tryReconnectAsync() + if (!this.dev && !background) await this.requestDeviceAsync() // background call and no device, just give up for now - if (!this.dev && background) - throwError("device not paired", true); + if (!this.dev && background) throwError("device not paired", true) // let's connect! - await this.openDeviceAsync(); + await this.openDeviceAsync() const proto = this.mkProto() await proto.postConnectAsync() @@ -317,18 +342,20 @@ export class Transport { } private async openDeviceAsync() { - if (!this.dev) - throwError("device not found") - if (!this.checkDevice()) - throwError("device does not support HF2") + if (!this.dev) throwError("device not found") + if (!this.checkDevice()) throwError("device does not support HF2") await this.dev.open() await this.dev.selectConfiguration(1) if (this.altIface.endpoints.length) { - this.epIn = this.altIface.endpoints.filter(e => e.direction == "in")[0] - this.epOut = this.altIface.endpoints.filter(e => e.direction == "out")[0] - assert(this.epIn.packetSize == 64); - assert(this.epOut.packetSize == 64); + this.epIn = this.altIface.endpoints.filter( + e => e.direction == "in" + )[0] + this.epOut = this.altIface.endpoints.filter( + e => e.direction == "out" + )[0] + assert(this.epIn.packetSize == 64) + assert(this.epOut.packetSize == 64) } this.log("claim interface") await this.dev.claimInterface(this.iface.interfaceNumber) @@ -348,17 +375,17 @@ export interface Proto { class HF2Proto implements Proto { eventHandlers: SMap<(buf: Uint8Array) => void> = {} msgs = new PromiseBuffer() - cmdSeq = (Math.random() * 0xffff) | 0; - private lock = new PromiseQueue(); + cmdSeq = (Math.random() * 0xffff) | 0 + private lock = new PromiseQueue() constructor(public io: Transport) { let frames: Uint8Array[] = [] io.onData = buf => { - let tp = buf[0] & HF2_FLAG_MASK - let len = buf[0] & 63 + const tp = buf[0] & HF2_FLAG_MASK + const len = buf[0] & 63 //console.log(`msg tp=${tp} len=${len}`) - let frame = new Uint8Array(len) + const frame = new Uint8Array(len) memcpy(frame, 0, buf, 1, len) if (tp & HF2_FLAG_SERIAL_OUT) { this.onSerial(frame, tp == HF2_FLAG_SERIAL_ERR) @@ -370,10 +397,10 @@ class HF2Proto implements Proto { } else { assert(tp == HF2_FLAG_CMDPKT_LAST) let total = 0 - for (let f of frames) total += f.length - let r = new Uint8Array(total) + for (const f of frames) total += f.length + const r = new Uint8Array(total) let ptr = 0 - for (let f of frames) { + for (const f of frames) { memcpy(r, ptr, f) ptr += f.length } @@ -388,7 +415,6 @@ class HF2Proto implements Proto { } } - error(m: string) { return this.io.error(m) } @@ -396,28 +422,32 @@ class HF2Proto implements Proto { talkAsync(cmd: number, data?: Uint8Array) { let len = 8 if (data) len += data.length - let pkt = new Uint8Array(len) - let seq = ++this.cmdSeq & 0xffff - write32(pkt, 0, cmd); - write16(pkt, 4, seq); - write16(pkt, 6, 0); - if (data) - memcpy(pkt, 8, data, 0, data.length) + const pkt = new Uint8Array(len) + const seq = ++this.cmdSeq & 0xffff + write32(pkt, 0, cmd) + write16(pkt, 4, seq) + write16(pkt, 6, 0) + if (data) memcpy(pkt, 8, data, 0, data.length) let numSkipped = 0 - let handleReturnAsync = (): Promise => - this.msgs.shiftAsync(1000) // we wait up to a second + const handleReturnAsync = (): Promise => + this.msgs + .shiftAsync(1000) // we wait up to a second .then(res => { if (read16(res, 0) != seq) { if (numSkipped < 3) { numSkipped++ - this.io.log(`message out of sync, (${seq} vs ${read16(res, 0)}); will re-try`) + this.io.log( + `message out of sync, (${seq} vs ${read16( + res, + 0 + )}); will re-try` + ) return handleReturnAsync() } this.error("out of sync") } let info = "" - if (res[3]) - info = "; info=" + res[3] + if (res[3]) info = "; info=" + res[3] switch (res[2]) { case HF2_STATUS_OK: return res.slice(4) @@ -439,29 +469,28 @@ class HF2Proto implements Proto { }) return this.lock.enqueue("talk", () => - this.sendMsgAsync(pkt) - .then(handleReturnAsync)) + this.sendMsgAsync(pkt).then(handleReturnAsync) + ) } - - private sendMsgAsync(buf: Uint8Array, serial: number = 0) { + private sendMsgAsync(buf: Uint8Array, serial = 0) { // Util.assert(buf.length <= this.maxMsgSize) - let frame = new Uint8Array(64) - let loop = (pos: number): Promise => { + const frame = new Uint8Array(64) + const loop = (pos: number): Promise => { let len = buf.length - pos if (len <= 0) return Promise.resolve() if (len > 63) { len = 63 - frame[0] = HF2_FLAG_CMDPKT_BODY; + frame[0] = HF2_FLAG_CMDPKT_BODY } else { - frame[0] = HF2_FLAG_CMDPKT_LAST; + frame[0] = HF2_FLAG_CMDPKT_LAST } - if (serial) frame[0] = serial == 1 ? HF2_FLAG_SERIAL_OUT : HF2_FLAG_SERIAL_ERR; - frame[0] |= len; - for (let i = 0; i < len; ++i) - frame[i + 1] = buf[pos + i] - return this.io.sendPacketAsync(frame) - .then(() => loop(pos + len)) + if (serial) + frame[0] = + serial == 1 ? HF2_FLAG_SERIAL_OUT : HF2_FLAG_SERIAL_ERR + frame[0] |= len + for (let i = 0; i < len; ++i) frame[i + 1] = buf[pos + i] + return this.io.sendPacketAsync(frame).then(() => loop(pos + len)) } return loop(0) } @@ -477,8 +506,7 @@ class HF2Proto implements Proto { } sendJDMessageAsync(buf: Uint8Array) { - return this.talkAsync(HF2_CMD_JDS_SEND, buf) - .then(() => { }) + return this.talkAsync(HF2_CMD_JDS_SEND, buf).then(() => {}) } handleEvent(buf: Uint8Array) { @@ -495,7 +523,9 @@ class HF2Proto implements Proto { } } onSerial(data: Uint8Array, iserr: boolean) { - console.log("SERIAL:", bufferToString(data)) + const msg = `hf2 serial: ${bufferToString(data)}` + if (iserr) console.error(msg) + else console.log(msg) } async postConnectAsync() { @@ -513,7 +543,9 @@ class HF2Proto implements Proto { // all good this.io.log(`device in user-space mode`) } else if (mode == HF2_MODE_BOOTLOADER) { - this.io.log(`device in bootloader mode, reseting into user-space mode`) + this.io.log( + `device in bootloader mode, reseting into user-space mode` + ) await this.talkAsync(HF2_CMD_RESET_INTO_APP) // and fail throwError("Device in bootloader mode") @@ -524,6 +556,6 @@ class HF2Proto implements Proto { } disconnectAsync(): Promise { - return this.io.disconnectAsync(); + return this.io.disconnectAsync() } } diff --git a/src/jdom/iframebridgeclient.ts b/src/jdom/iframebridgeclient.ts index fb69f6487..b31e7035b 100644 --- a/src/jdom/iframebridgeclient.ts +++ b/src/jdom/iframebridgeclient.ts @@ -22,7 +22,7 @@ export default class IFrameBridgeClient extends JDIFrameClient { readonly bridgeId = "bridge" + Math.random(); packetSent = 0; packetProcessed = 0; - private _lastAspectRatio: number = 0; + private _lastAspectRatio = 0; constructor(readonly bus: JDBus, readonly frameId: string) { super(bus) diff --git a/src/jdom/light.ts b/src/jdom/light.ts index 38979af3d..536565005 100644 --- a/src/jdom/light.ts +++ b/src/jdom/light.ts @@ -96,7 +96,7 @@ export function lightEncode(format: string, args: (number | number[])[]) { outarr.push(colors.length) } } - for (let c of colors) { + for (const c of colors) { outarr.push((c >> 16) & 0xff) outarr.push((c >> 8) & 0xff) outarr.push((c >> 0) & 0xff) @@ -152,7 +152,7 @@ export function lightEncode(format: string, args: (number | number[])[]) { if (typeof v == "number") colors.push(v) else - for (let vv of v) colors.push(vv) + for (const vv of v) colors.push(vv) } else { if (token.length == 7) { const b = fromHex(token.slice(1)) diff --git a/src/jdom/logparser.ts b/src/jdom/logparser.ts index b315e1ade..e9cd8fd1f 100644 --- a/src/jdom/logparser.ts +++ b/src/jdom/logparser.ts @@ -6,8 +6,8 @@ import Frame from "./frame" import Trace from "./trace" export function parseTrace(contents: string): Trace { - let description: string[] = []; - let packets: Packet[] = [] + const description: string[] = []; + const packets: Packet[] = [] contents?.split(/\r?\n/).forEach(ln => { // parse data const m = /(\d+)\s+([a-f0-9]{12,})/i.exec(ln) @@ -34,7 +34,7 @@ export function parseLogicLog(logcontents: string): Frame[] { const res: Frame[] = [] let frameBytes = [] let lastTime = 0 - for (let ln of logcontents.split(/\r?\n/)) { + for (const ln of logcontents.split(/\r?\n/)) { let m = /^JD (\d+) ([0-9a-f]+)/i.exec(ln) if (m) { res.push({ @@ -78,7 +78,7 @@ Time [s],Value,Parity Error,Framing Error 0.043264800000000,0x00,,Error 0.063968960000000,0x00,,Error */ - m = /^([\d\.]+),(?:Async Serial,)?.*(0x[A-F0-9][A-F0-9])/.exec(ln) + m = /^([\d.]+),(?:Async Serial,)?.*(0x[A-F0-9][A-F0-9])/.exec(ln) if (!m) continue const tm = parseFloat(m[1]) diff --git a/src/jdom/microbit.ts b/src/jdom/microbit.ts index 931b849c0..f1c31b59e 100644 --- a/src/jdom/microbit.ts +++ b/src/jdom/microbit.ts @@ -352,6 +352,7 @@ export class CMSISProto implements Proto { return 0 } + // eslint-disable-next-line no-constant-condition while (true) { const a0 = await check(p0) if (a0) return a0 diff --git a/src/jdom/modelrunner.ts b/src/jdom/modelrunner.ts index d22e91521..253886a38 100644 --- a/src/jdom/modelrunner.ts +++ b/src/jdom/modelrunner.ts @@ -71,10 +71,10 @@ export class ModelRunnerClient extends JDServiceClient { }) } - async deployModel(model: Uint8Array, progress: (p: number) => void = () => { }) { - progress(0) + async deployModel(model: Uint8Array, onProgress?: (p: number) => void) { + onProgress?.(0) const resp = await this.service.sendCmdAwaitResponseAsync(Packet.jdpacked(ModelRunnerCmd.SetModel, "u32", [model.length]), 3000) - progress(0.05) + onProgress?.(0.05) const [pipePort] = jdunpack<[number]>(resp.data, "u16") if (!pipePort) throw new Error("wrong port " + pipePort) @@ -82,14 +82,14 @@ export class ModelRunnerClient extends JDServiceClient { const chunkSize = 224 // has to be divisible by 8 for (let i = 0; i < model.length; i += chunkSize) { await pipe.send(model.slice(i, i + chunkSize)) - progress(0.05 + (i / model.length) * 0.9) + onProgress?.(0.05 + (i / model.length) * 0.9) } try { await pipe.close() } catch { // the device may restart before we manage to close } - progress(1) + onProgress?.(1) } async autoInvoke(everySamples = 1) { diff --git a/src/jdom/msgpack.ts b/src/jdom/msgpack.ts index 5caaf77ed..e9fc24b4a 100644 --- a/src/jdom/msgpack.ts +++ b/src/jdom/msgpack.ts @@ -43,7 +43,7 @@ function packNumberCore(buf: Uint8Array, offset: number, num: number) { } } } - let fmt = tagFormat(tag) + const fmt = tagFormat(tag) if (buf) { buf[offset] = tag setNumber(buf, fmt, offset + 1, num) @@ -55,12 +55,12 @@ function packNumberCore(buf: Uint8Array, offset: number, num: number) { * Unpacks a buffer into a number array. */ export function unpackNumberArray(buf: Uint8Array, offset = 0): number[] { - let res: number[] = [] + const res: number[] = [] while (offset < buf.length) { - let fmt = tagFormat(buf[offset++]) + const fmt = tagFormat(buf[offset++]) if (fmt === null) { - let v = getNumber(buf, NumberFormat.Int8BE, offset - 1) + const v = getNumber(buf, NumberFormat.Int8BE, offset - 1) if (-31 <= v && v <= 127) res.push(v) else @@ -82,12 +82,12 @@ export function unpackNumberArray(buf: Uint8Array, offset = 0): number[] { */ export function packNumberArray(nums: number[]): Uint8Array { let off = 0 - for (let n of nums) { + for (const n of nums) { off += packNumberCore(null, off, n) } - let buf = new Uint8Array(off) + const buf = new Uint8Array(off) off = 0 - for (let n of nums) { + for (const n of nums) { off += packNumberCore(buf, off, n) } return buf diff --git a/src/jdom/node.ts b/src/jdom/node.ts index e525fb7c9..117ce66b6 100644 --- a/src/jdom/node.ts +++ b/src/jdom/node.ts @@ -66,7 +66,7 @@ export abstract class JDNode extends JDEventSource { export function visitNodes(node: JDNode, vis: (node: JDNode) => void) { - let todo = [node]; + const todo = [node]; while (todo.length) { const node = todo.pop(); vis(node) diff --git a/src/jdom/pack.ts b/src/jdom/pack.ts index e3bdfb69e..c6f826c16 100644 --- a/src/jdom/pack.ts +++ b/src/jdom/pack.ts @@ -2,6 +2,10 @@ import { getNumber, NumberFormat, setNumber, sizeOfNumberFormat } from "./buffer import { clampToStorage, numberFormatToStorageType } from "./spec" import { bufferEq, bufferToString, stringToBuffer } from "./utils" +export type PackedSimpleValue = number | boolean | string | Uint8Array +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export type PackedValues = any[]; + /* ## Format strings @@ -35,8 +39,8 @@ const ch_s = 115 const ch_u = 117 const ch_x = 120 const ch_z = 122 -const ch_0 = 48 -const ch_9 = 57 +//const ch_0 = 48 +//const ch_9 = 57 const ch_colon = 58 const ch_sq_open = 91 const ch_sq_close = 93 @@ -212,7 +216,7 @@ function jdunpackCore(buf: Uint8Array, fmt: string, repeat: number) { } } -export function jdunpack(buf: Uint8Array, fmt: string): T { +export function jdunpack(buf: Uint8Array, fmt: string): T { if (!buf || !fmt) return undefined; // hot path for buffers @@ -230,7 +234,7 @@ export function jdunpack(buf: Uint8Array, fmt: string): T { return jdunpackCore(buf, fmt, 0) as T } -function jdpackCore(trg: Uint8Array, fmt: string, data: any[], off: number) { +function jdpackCore(trg: Uint8Array, fmt: string, data: PackedValues, off: number) { //console.log({ fmt, data }) let idx = 0 const parser = new TokenParser(fmt) @@ -243,7 +247,7 @@ function jdpackCore(trg: Uint8Array, fmt: string, data: any[], off: number) { continue } - let dataItem = data[idx++] + const dataItem = data[idx++] if (c0 == ch_r && dataItem) { const fmt0 = fmt.slice(parser.fp) @@ -310,7 +314,7 @@ function jdpackCore(trg: Uint8Array, fmt: string, data: any[], off: number) { return off } -export function jdpack(fmt: string, data: T) { +export function jdpack(fmt: string, data: T) { if (!fmt || !data) return undefined; @@ -332,7 +336,7 @@ export function jdpack(fmt: string, data: T) { return res } -export function jdpackEqual(fmt: string, left: T, right: T) { +export function jdpackEqual(fmt: string, left: T, right: T) { if ((!left) !== (!right)) return false; if (!left) return true; diff --git a/src/jdom/packet.ts b/src/jdom/packet.ts index fbb34af9e..de80b5059 100644 --- a/src/jdom/packet.ts +++ b/src/jdom/packet.ts @@ -261,14 +261,14 @@ export class Packet { if (stripped.length == 0) return let sz = -4 - for (let s of stripped) { + for (const s of stripped) { sz += s.length } const data = new Uint8Array(sz) this._header.set(stripped[0], 12) data.set(stripped[0].slice(4), 0) sz = stripped[0].length - 4 - for (let s of stripped.slice(1)) { + for (const s of stripped.slice(1)) { data.set(s, sz) sz += s.length } diff --git a/src/jdom/packetfilter.ts b/src/jdom/packetfilter.ts index 6f85dcbc9..6da89e31b 100644 --- a/src/jdom/packetfilter.ts +++ b/src/jdom/packetfilter.ts @@ -1,37 +1,37 @@ -import { SRV_LOGGER } from "../../jacdac-spec/dist/specconstants"; -import { JDBus } from "./bus"; -import Packet from "./packet"; -import { isCommand, isInstanceOf, serviceSpecificationFromName } from "./spec"; -import { SMap } from "./utils"; +import { SRV_LOGGER } from "../../jacdac-spec/dist/specconstants" +import { JDBus } from "./bus" +import Packet from "./packet" +import { isInstanceOf, serviceSpecificationFromName } from "./spec" +import { SMap } from "./utils" -export type CompiledPacketFilter = (pkt: Packet) => boolean; +export type CompiledPacketFilter = (pkt: Packet) => boolean export interface PacketFilterProps { - announce?: boolean, - repeatedAnnounce?: boolean, - requiresAck?: boolean, - log?: boolean, - firmwareIdentifiers?: number[], - flags?: string[], - regGet?: boolean, - regSet?: boolean, - devices?: SMap<{ from?: boolean; to?: boolean }>, - serviceClasses?: number[], - pkts?: string[], - before?: number, - after?: number, - grouping?: boolean, - pipes?: boolean, - port?: number, - collapseAck?: boolean, - collapsePipes?: boolean, + announce?: boolean + repeatedAnnounce?: boolean + requiresAck?: boolean + log?: boolean + firmwareIdentifiers?: number[] + flags?: string[] + regGet?: boolean + regSet?: boolean + devices?: SMap<{ from?: boolean; to?: boolean }> + serviceClasses?: number[] + pkts?: string[] + before?: number + after?: number + grouping?: boolean + pipes?: boolean + port?: number + collapseAck?: boolean + collapsePipes?: boolean collapseGets?: boolean } export interface PacketFilter { - source: string; - props: PacketFilterProps; - filter: CompiledPacketFilter; + source: string + props: PacketFilterProps + filter: CompiledPacketFilter } export function parsePacketFilter(bus: JDBus, text: string): PacketFilter { @@ -39,139 +39,143 @@ export function parsePacketFilter(bus: JDBus, text: string): PacketFilter { return { source: text, props: { - grouping: true + grouping: true, }, - filter: (pkt) => true + filter: () => true, } } - let flags = new Set() - let serviceClasses = new Set(); - let pkts = new Set(); - let firmwares = new Set(); - let repeatedAnnounce: boolean = undefined; - let announce: boolean = undefined; - let regGet: boolean = undefined; - let regSet: boolean = undefined; - let requiresAck: boolean = undefined; - let log: boolean = undefined; - let before: number = undefined; - let after: number = undefined; - let devices: SMap<{ from: boolean; to: boolean; }> = {}; - let grouping: boolean = true; - let pipes: boolean = undefined; - let port: number = undefined; - let collapseAck: boolean = true; - let collapsePipes: boolean = true; - let collapseGets: boolean = true; + const flags = new Set() + const serviceClasses = new Set() + const pkts = new Set() + const firmwares = new Set() + let repeatedAnnounce: boolean = undefined + let announce: boolean = undefined + let regGet: boolean = undefined + let regSet: boolean = undefined + let requiresAck: boolean = undefined + let log: boolean = undefined + let before: number = undefined + let after: number = undefined + const devices: SMap<{ from: boolean; to: boolean }> = {} + let grouping = true + let pipes: boolean = undefined + let port: number = undefined + let collapseAck = true + let collapsePipes = true + let collapseGets = true text.split(/\s+/g).forEach(part => { - const [match, prefix, _, value] = /([a-z\-_]+)([:=]([^\s]+))?/.exec(part) || []; + const [, prefix, , value] = + /([a-z\-_]+)([:=]([^\s]+))?/.exec(part) || [] switch (prefix || "") { case "kind": case "k": - if (!value) - break; + if (!value) break flags.add(value.toLowerCase()) - break; + break case "service": - case "srv": - if (!value) - break; + case "srv": { + if (!value) break const service = serviceSpecificationFromName(value) - const serviceClass = service?.classIdentifier || parseInt(value, 16); + const serviceClass = + service?.classIdentifier || parseInt(value, 16) if (serviceClass !== undefined && !isNaN(serviceClass)) serviceClasses.add(serviceClass) - break; + break + } case "announce": case "a": - announce = parseBoolean(value); - break; + announce = parseBoolean(value) + break case "repeated-announce": case "ra": - repeatedAnnounce = parseBoolean(value); - break; + repeatedAnnounce = parseBoolean(value) + break case "requires-ack": case "ack": - requiresAck = parseBoolean(value); - break; + requiresAck = parseBoolean(value) + break case "collapse-ack": - collapseAck = parseBoolean(value); - break; + collapseAck = parseBoolean(value) + break case "device": case "dev": case "to": - case "from": - if (!value) - break; + case "from": { + if (!value) break // resolve device by name - const deviceId = bus.devices().find(d => d.shortId === value || d.name === value)?.deviceId; + const deviceId = bus + .devices() + .find(d => d.shortId === value || d.name === value) + ?.deviceId if (deviceId) { - const data = devices[deviceId] || (devices[deviceId] = { from: false, to: false }) - if (prefix === "from") - data.from = true; - else if (prefix === "to") - data.to = true; + const data = + devices[deviceId] || + (devices[deviceId] = { from: false, to: false }) + if (prefix === "from") data.from = true + else if (prefix === "to") data.to = true } - break; + break + } case "fw": - case "firmware-identifier": - if (!value) return; + case "firmware-identifier": { + if (!value) return // find register - const fwid = parseInt(value.replace(/^0?x/, ''), 16); - if (!isNaN(fwid)) - firmwares.add(fwid); - break; + const fwid = parseInt(value.replace(/^0?x/, ""), 16) + if (!isNaN(fwid)) firmwares.add(fwid) + break + } case "pkt": case "reg": case "register": case "cmd": case "command": case "ev": - case "event": - if (!value) return; + case "event": { + if (!value) return // find register - const id = parseInt(value.replace(/^0?x/, ''), 16); - if (!isNaN(id)) - pkts.add(id.toString(16)); + const id = parseInt(value.replace(/^0?x/, ""), 16) + if (!isNaN(id)) pkts.add(id.toString(16)) // support name - pkts.add(value); - break; + pkts.add(value) + break + } case "reg-get": case "get": - regGet = parseBoolean(value); - break; + regGet = parseBoolean(value) + break case "reg-set": case "set": - regSet = parseBoolean(value); - break; + regSet = parseBoolean(value) + break case "log": - log = parseBoolean(value); - break; + log = parseBoolean(value) + break case "before": - before = parseTimestamp(value); - break; + before = parseTimestamp(value) + break case "after": - after = parseTimestamp(value); - break; + after = parseTimestamp(value) + break case "grouping": - grouping = parseBoolean(value); - break; + grouping = parseBoolean(value) + break case "pipes": - pipes = parseBoolean(value); - break; + pipes = parseBoolean(value) + break case "collapse-pipe": case "collapse-pipes": - collapsePipes = parseBoolean(value); - break; + collapsePipes = parseBoolean(value) + break case "collapse-get": case "collapse-gets": - collapseGets = parseBoolean(value); - break; + collapseGets = parseBoolean(value) + break case "port": - port = parseInt(value); - break; + port = parseInt(value) + break } - }); + }) const props = { announce, @@ -184,7 +188,8 @@ export function parsePacketFilter(bus: JDBus, text: string): PacketFilter { regGet, regSet, devices, - serviceClasses: !!serviceClasses.size && Array.from(serviceClasses.keys()), + serviceClasses: + !!serviceClasses.size && Array.from(serviceClasses.keys()), pkts: !!pkts.size && Array.from(pkts.keys()), before, after, @@ -192,25 +197,22 @@ export function parsePacketFilter(bus: JDBus, text: string): PacketFilter { pipes, collapsePipes, collapseGets, - port + port, } const filter = compileFilter(props) return { source: text, props, filter, - }; + } function parseBoolean(value: string) { - if (value === "false" || value === "no") - return false; - else if (value === "true" || value === "yes" || !value) - return true; - else - return undefined; + if (value === "false" || value === "no") return false + else if (value === "true" || value === "yes" || !value) return true + else return undefined } function parseTimestamp(value: string) { - const t = parseInt(value); - return isNaN(t) ? undefined : t; + const t = parseInt(value) + return isNaN(t) ? undefined : t } } @@ -230,60 +232,71 @@ export function compileFilter(props: PacketFilterProps) { before, after, pipes, - port - } = props; + port, + } = props - let filters: CompiledPacketFilter[] = []; - if (before !== undefined) - filters.push(pkt => pkt.timestamp <= before) - if (after !== undefined) - filters.push(pkt => pkt.timestamp >= after) - if (announce !== undefined) - filters.push(pkt => pkt.isAnnounce === announce) + const filters: CompiledPacketFilter[] = [] + if (before !== undefined) filters.push(pkt => pkt.timestamp <= before) + if (after !== undefined) filters.push(pkt => pkt.timestamp >= after) + if (announce !== undefined) filters.push(pkt => pkt.isAnnounce === announce) if (repeatedAnnounce !== undefined) - filters.push(pkt => !pkt.isAnnounce || (pkt.isRepeatedAnnounce === repeatedAnnounce)) + filters.push( + pkt => + !pkt.isAnnounce || pkt.isRepeatedAnnounce === repeatedAnnounce + ) if (requiresAck !== undefined) - filters.push(pkt => pkt.requiresAck === requiresAck); - if (flags) - filters.push(pkt => hasAnyFlag(pkt)) - if (pipes !== undefined) - filters.push(pkt => pkt.isPipe) - if (port !== undefined) - filters.push(pkt => pkt.pipePort === port); + filters.push(pkt => pkt.requiresAck === requiresAck) + if (flags) filters.push(pkt => hasAnyFlag(pkt)) + if (pipes !== undefined) filters.push(pkt => pkt.isPipe) + if (port !== undefined) filters.push(pkt => pkt.pipePort === port) if (regGet !== undefined && regSet !== undefined) - filters.push(pkt => (pkt.isRegisterGet === regGet) && (pkt.isRegisterSet === regSet)) + filters.push( + pkt => pkt.isRegisterGet === regGet && pkt.isRegisterSet === regSet + ) else if (regGet !== undefined) filters.push(pkt => pkt.isRegisterGet === regGet) else if (regSet !== undefined) filters.push(pkt => pkt.isRegisterSet === regSet) if (log !== undefined) - filters.push(pkt => (pkt.serviceClass === SRV_LOGGER && pkt.isReport) === log); + filters.push( + pkt => (pkt.serviceClass === SRV_LOGGER && pkt.isReport) === log + ) if (Object.keys(devices).length) filters.push(pkt => { - if (!pkt.device) return false; - const f = devices[pkt.device.deviceId]; - return !!f && (!f.from || !pkt.isCommand) && (!f.to || pkt.isCommand); + if (!pkt.device) return false + const f = devices[pkt.device.deviceId] + return ( + !!f && (!f.from || !pkt.isCommand) && (!f.to || pkt.isCommand) + ) }) if (serviceClasses) { - filters.push(pkt => serviceClasses.some(serviceClass => isInstanceOf(pkt.serviceClass, serviceClass))); + filters.push(pkt => + serviceClasses.some(serviceClass => + isInstanceOf(pkt.serviceClass, serviceClass) + ) + ) } if (pkts) { - filters.push(pkt => pkts.indexOf(pkt.decoded?.info.identifier.toString(16)) > -1 - || pkts.indexOf(pkt.decoded?.info.name) > -1); + filters.push( + pkt => + pkts.indexOf(pkt.decoded?.info.identifier.toString(16)) > -1 || + pkts.indexOf(pkt.decoded?.info.name) > -1 + ) } if (firmwareIdentifiers) filters.push(pkt => { - const fwid = pkt.device?.firmwareIdentifier; - return fwid === undefined || firmwareIdentifiers.indexOf(fwid) > -1; + const fwid = pkt.device?.firmwareIdentifier + return fwid === undefined || firmwareIdentifiers.indexOf(fwid) > -1 }) - const filter: CompiledPacketFilter = (pkt: Packet) => filters.every(filter => filter(pkt)); - return filter; + const filter: CompiledPacketFilter = (pkt: Packet) => + filters.every(filter => filter(pkt)) + return filter function hasAnyFlag(pkt: Packet) { - const k = pkt.decoded?.info.kind; - return !!k && flags.indexOf(k) > -1; + const k = pkt.decoded?.info.kind + return !!k && flags.indexOf(k) > -1 } } diff --git a/src/jdom/pipes.ts b/src/jdom/pipes.ts index 220d950a5..064234262 100644 --- a/src/jdom/pipes.ts +++ b/src/jdom/pipes.ts @@ -57,7 +57,7 @@ export class OutPipe { const cmd = (this.port << PIPE_PORT_SHIFT) | flags | (this._count & PIPE_COUNTER_MASK) const pkt = Packet.from(cmd, buf) pkt.serviceIndex = JD_SERVICE_INDEX_PIPE - const p = this.device.sendPktWithAck(pkt) + this.device.sendPktWithAck(pkt) .then( () => { }, err => { @@ -107,6 +107,7 @@ export class InPipe extends JDClient { } private allocPort() { + // eslint-disable-next-line no-constant-condition while (true) { this._port = 1 + randomUInt(511) const info = this.bus.selfDevice.port(this._port) diff --git a/src/jdom/pretty.ts b/src/jdom/pretty.ts index d0f48e878..1e96f8fc6 100644 --- a/src/jdom/pretty.ts +++ b/src/jdom/pretty.ts @@ -227,8 +227,8 @@ export function decodeMember( } export function valueToFlags(enumInfo: jdspec.EnumInfo, value: number) { - let r = []; - let curr = value + const r = []; + const curr = value for (const key of Object.keys(enumInfo.members)) { const val = enumInfo.members[key] if (curr & val) { @@ -336,7 +336,7 @@ function decodeEvent(service: jdspec.ServiceSpec, pkt: Packet): DecodedPacket { || syntheticPktInfo("event", evCode) const decoded = decodeMembers(service, evInfo, pkt) - let description = `EVENT[${pkt.eventCounter}] ${evInfo.name}` + wrapDecodedMembers(decoded) + const description = `EVENT[${pkt.eventCounter}] ${evInfo.name}` + wrapDecodedMembers(decoded) return { service, @@ -418,7 +418,7 @@ export function decodePacketData(pkt: Packet): DecodedPacket { } function reverseLookup(map: SMap, n: number) { - for (let k of Object.keys(map)) { + for (const k of Object.keys(map)) { if (map[k] == n) return k } @@ -546,7 +546,7 @@ export function printPacket(pkt: Packet, opts: PrintPacketOptions = {}): string if (decoded) { pdesc += "; " + decoded.description } else if (0 < d.length && d.length <= 4) { - let v0 = pkt.uintData, v1 = pkt.intData + const v0 = pkt.uintData, v1 = pkt.intData pdesc += "; " + num2str(v0) if (v0 != v1) pdesc += "; signed: " + num2str(v1) diff --git a/src/jdom/register.ts b/src/jdom/register.ts index 6ff251e47..c5a07eb21 100644 --- a/src/jdom/register.ts +++ b/src/jdom/register.ts @@ -12,15 +12,15 @@ import { isRegister, isReading } from "./spec"; import { JDField } from "./field"; import { JDServiceMemberNode } from "./servicemembernode"; import { JDNode } from "./node"; -import { jdpack, jdunpack } from "./pack"; +import { jdpack, jdunpack, PackedValues } from "./pack"; export class JDRegister extends JDServiceMemberNode { private _lastReportPkt: Packet; private _fields: JDField[]; - private _lastSetTimestamp: number = -Infinity; - private _lastGetTimestamp: number = -Infinity; - private _lastGetAttempts: number = 0; + private _lastSetTimestamp = -Infinity; + private _lastGetTimestamp = -Infinity; + private _lastGetAttempts = 0; constructor( service: JDService, @@ -77,7 +77,7 @@ export class JDRegister extends JDServiceMemberNode { .then(() => { this.emit(GET_ATTEMPT) }); } - sendSetPackedAsync(fmt: string, values: any[], autoRefresh?: boolean): Promise { + sendSetPackedAsync(fmt: string, values: PackedValues, autoRefresh?: boolean): Promise { return this.sendSetAsync(jdpack(fmt, values), autoRefresh) } @@ -105,7 +105,7 @@ export class JDRegister extends JDServiceMemberNode { return this._lastReportPkt?.timestamp } - get unpackedValue(): any[] { + get unpackedValue(): PackedValues { const d = this.data; const fmt = this.specification?.packFormat; return d && fmt && jdunpack(this.data, fmt); @@ -189,9 +189,8 @@ export class JDRegister extends JDServiceMemberNode { } compareTo(b: JDRegister) { - const a = this; - return a.code - b.code || - a.service.compareTo(b.service); + return this.code - b.code || + this.service.compareTo(b.service); } } diff --git a/src/jdom/sensoraggregatorclient.ts b/src/jdom/sensoraggregatorclient.ts index ca4c65fb3..7c53ae1bc 100644 --- a/src/jdom/sensoraggregatorclient.ts +++ b/src/jdom/sensoraggregatorclient.ts @@ -116,6 +116,7 @@ export class SensorAggregatorClient extends JDServiceClient { } async stats(): Promise { + // eslint-disable-next-line @typescript-eslint/no-explicit-any const info: any = { "numSamples": this.getReg(SensorAggregatorReg.NumSamples, r => r.intValue), "sampleSize": this.getReg(SensorAggregatorReg.SampleSize, r => r.intValue), diff --git a/src/jdom/service.ts b/src/jdom/service.ts index 5b49a10e4..97eaeff2c 100644 --- a/src/jdom/service.ts +++ b/src/jdom/service.ts @@ -2,15 +2,15 @@ import { JDDevice } from "./device"; import Packet from "./packet"; import { serviceName } from "./pretty"; import { JDRegister } from "./register"; -import { PACKET_RECEIVE, PACKET_SEND, SERVICE_NODE_NAME, REPORT_RECEIVE, SERVICE_CLIENT_ADDED, SERVICE_CLIENT_REMOVED, EVENT, CHANGE } from "./constants"; +import { PACKET_RECEIVE, PACKET_SEND, SERVICE_NODE_NAME, REPORT_RECEIVE, SERVICE_CLIENT_ADDED, SERVICE_CLIENT_REMOVED, CHANGE } from "./constants"; import { JDNode } from "./node"; -import { serviceSpecificationFromClassIdentifier, isRegister, isReading, isEvent, isSensor, isActuator, isValueOrIntensity, isValue, isIntensity } from "./spec"; +import { serviceSpecificationFromClassIdentifier, isRegister, isReading, isEvent, isValue, isIntensity } from "./spec"; import { JDEvent } from "./event"; import { delay, strcmp } from "./utils"; import { BaseEvent, BaseReg, SystemReg } from "../../jacdac-spec/dist/specconstants"; import { JDServiceClient } from "./serviceclient"; import { InPipeReader } from "./pipes"; -import { jdunpack } from "./pack"; +import { jdunpack, PackedValues } from "./pack"; import Flags from "./flags"; export class JDService extends JDNode { @@ -238,10 +238,9 @@ export class JDService extends JDNode { } compareTo(b: JDService): number { - const a = this; - return a.serviceClass - b.serviceClass || - strcmp(a.device.deviceId, b.device.deviceId) || - a.serviceIndex - b.serviceIndex; + return this.serviceClass - b.serviceClass || + strcmp(this.device.deviceId, b.device.deviceId) || + this.serviceIndex - b.serviceIndex; } get clients(): JDServiceClient[] { @@ -263,7 +262,7 @@ export class JDService extends JDNode { } } - async receiveWithInPipe(cmd: number, packFormat: string) { + async receiveWithInPipe(cmd: number, packFormat: string) { const inp = new InPipeReader(this.device.bus) await this.sendPacketAsync( inp.openCommand(cmd), diff --git a/src/jdom/servicehost.ts b/src/jdom/servicehost.ts index 5166722f2..c9ce441ad 100644 --- a/src/jdom/servicehost.ts +++ b/src/jdom/servicehost.ts @@ -20,7 +20,7 @@ export interface ServiceHostOptions { } export default class ServiceHost extends JDEventSource { - public serviceIndex: number = -1; // set by device + public serviceIndex = -1; // set by device public device: DeviceHost; public readonly specification: jdspec.ServiceSpec; private readonly _registers: RegisterHost[] = []; diff --git a/src/jdom/spec.ts b/src/jdom/spec.ts index 032f12f67..a07a7b954 100644 --- a/src/jdom/spec.ts +++ b/src/jdom/spec.ts @@ -1,4 +1,6 @@ +// eslint-disable-next-line @typescript-eslint/triple-slash-reference /// +// eslint-disable-next-line @typescript-eslint/triple-slash-reference /// import { NumberFormat } from "./buffer"; @@ -9,9 +11,12 @@ import { fromHex, SMap, toHex } from "./utils"; import { SystemReg, SensorReg, SRV_CONTROL, SRV_ROLE_MANAGER, SRV_SETTINGS, SRV_BOOTLOADER, SRV_LOGGER, SRV_POWER, SRV_PROTO_TEST } from "./constants"; import makecodeServicesData from "../../jacdac-spec/services/makecode-extensions.json"; +// eslint-disable-next-line @typescript-eslint/no-explicit-any let _serviceSpecifications: jdspec.ServiceSpec[] = serviceSpecificationData as any; +// eslint-disable-next-line @typescript-eslint/no-explicit-any const _serviceTests: jdtest.ServiceTest[] = serviceTestData as any; let _customServiceSpecifications: SMap = {}; +// eslint-disable-next-line @typescript-eslint/no-explicit-any const _deviceRegistry: jdspec.DeviceSpec[] = deviceRegistryData as any; /** diff --git a/src/jdom/traceplayer.ts b/src/jdom/traceplayer.ts index d6366df29..ddb9eae88 100644 --- a/src/jdom/traceplayer.ts +++ b/src/jdom/traceplayer.ts @@ -5,10 +5,10 @@ import Trace from "./trace"; export default class TracePlayer extends JDClient { private _trace: Trace; - private _busStartTimestamp: number = 0; - private _index: number = 0; + private _busStartTimestamp = 0; + private _index = 0; private _interval: any; - private _lastProgressEmit: number = 0; + private _lastProgressEmit = 0; constructor( public readonly bus: JDBus, diff --git a/src/jdom/traceview.ts b/src/jdom/traceview.ts index 895c7a838..b38d83022 100644 --- a/src/jdom/traceview.ts +++ b/src/jdom/traceview.ts @@ -1,7 +1,6 @@ import { JDBus } from "./bus"; import { JDClient } from "./client"; import { CHANGE, DEVICE_ANNOUNCE, META_ACK, META_GET, META_PIPE, PACKET_PROCESS, PACKET_SEND, TRACE_FILTER_HORIZON } from "./constants"; -import { jdunpack } from "./pack"; import Packet from "./packet"; import { PacketFilter, parsePacketFilter } from "./packetfilter"; import Trace from "./trace"; diff --git a/src/jdom/usb.ts b/src/jdom/usb.ts index 1bd9d4d35..bc3a648aa 100644 --- a/src/jdom/usb.ts +++ b/src/jdom/usb.ts @@ -69,7 +69,7 @@ export function createUSBBus(options?: USBOptions, busOptions?: BusOptions): JDB if (!options) { options = { getDevices: () => Promise.resolve([]), - requestDevice: (filters) => Promise.resolve(undefined) + requestDevice: () => Promise.resolve(undefined) } } let hf2: Proto; @@ -99,8 +99,7 @@ export function createUSBBus(options?: USBOptions, busOptions?: BusOptions): JDB return Promise.reject("hf2 transport disconnected") const buf = p.toBuffer(); - return hf2.sendJDMessageAsync(buf) - .then(() => { }); + return hf2.sendJDMessageAsync(buf); }, disconnectAsync: () => { const h = hf2; diff --git a/src/jdom/utils.ts b/src/jdom/utils.ts index 0bd3f6a0d..18e1e7e41 100644 --- a/src/jdom/utils.ts +++ b/src/jdom/utils.ts @@ -1,61 +1,65 @@ +import Flags from "./flags" + export function throwError(msg: string, cancel?: boolean) { const e = new Error(msg) if (cancel) - (e as any).__cancel = true; - throw e; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + (e as any).__cancel = true + throw e } export function isCancelError(e: Error) { - return !!(e as any)?.__cancel; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + return !!(e as any)?.__cancel } export function setAckError(e: Error) { - if (e) - (e as any).__ack = true; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + if (e) (e as any).__ack = true } export function isAckError(e: Error) { - return !!(e as any)?.__ack; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + return !!(e as any)?.__ack } +// eslint-disable-next-line @typescript-eslint/no-explicit-any export function log(msg: string, v?: any) { - if (v === undefined) - console.log("JD: " + msg) - else - console.log("JD: " + msg, v) + if (v === undefined) console.log("JD: " + msg) + else console.log("JD: " + msg, v) } +// eslint-disable-next-line @typescript-eslint/no-explicit-any export function warn(msg: string, v?: any) { - if (v === undefined) - console.log("JD-WARN: " + msg) - else - console.log("JD-WARN: " + msg, v) + if (v === undefined) console.log("JD-WARN: " + msg) + else console.log("JD-WARN: " + msg, v) } export function delay(millis: number, value?: T): Promise { - return new Promise((resolve) => setTimeout(() => resolve(value), millis)) + return new Promise(resolve => setTimeout(() => resolve(value), millis)) } -export function memcpy(trg: Uint8Array, trgOff: number, src: ArrayLike, srcOff?: number, len?: number) { - if (srcOff === void 0) - srcOff = 0 - if (len === void 0) - len = src.length - srcOff - for (let i = 0; i < len; ++i) - trg[trgOff + i] = src[srcOff + i] +export function memcpy( + trg: Uint8Array, + trgOff: number, + src: ArrayLike, + srcOff?: number, + len?: number +) { + if (srcOff === void 0) srcOff = 0 + if (len === void 0) len = src.length - srcOff + for (let i = 0; i < len; ++i) trg[trgOff + i] = src[srcOff + i] } export function strcmp(a: string, b: string) { - if (a == b) return 0; - if (a < b) return -1; - else return 1; + if (a == b) return 0 + if (a < b) return -1 + else return 1 } export function bufferEq(a: Uint8Array, b: ArrayLike, offset = 0) { - if (a == b) - return true - if (!a || !b || a.length != b.length) - return false + if (a == b) return true + if (!a || !b || a.length != b.length) return false for (let i = offset; i < a.length; ++i) { if (a[i] != b[i]) return false } @@ -64,16 +68,15 @@ export function bufferEq(a: Uint8Array, b: ArrayLike, offset = 0) { export function hash(buf: Uint8Array, bits: number) { bits |= 0 - if (bits < 1) - return 0 + if (bits < 1) return 0 const h = fnv1(buf) - if (bits >= 32) - return h >>> 0 - else - return ((h ^ (h >>> bits)) & ((1 << bits) - 1)) >>> 0 + if (bits >= 32) return h >>> 0 + else return ((h ^ (h >>> bits)) & ((1 << bits) - 1)) >>> 0 } -export function idiv(a: number, b: number) { return ((a | 0) / (b | 0)) | 0 } +export function idiv(a: number, b: number) { + return ((a | 0) / (b | 0)) | 0 +} export function fnv1(data: Uint8Array) { let h = 0x811c9dc5 for (let i = 0; i < data.length; ++i) { @@ -83,46 +86,45 @@ export function fnv1(data: Uint8Array) { } export function crc(p: Uint8Array) { - let crc = 0xffff; + let crc = 0xffff for (let i = 0; i < p.length; ++i) { - const data = p[i]; - let x = (crc >> 8) ^ data; - x ^= x >> 4; - crc = (crc << 8) ^ (x << 12) ^ (x << 5) ^ x; - crc &= 0xffff; + const data = p[i] + let x = (crc >> 8) ^ data + x ^= x >> 4 + crc = (crc << 8) ^ (x << 12) ^ (x << 5) ^ x + crc &= 0xffff } - return crc; + return crc } -export function ALIGN(n: number) { return (n + 3) & ~3 } +export function ALIGN(n: number) { + return (n + 3) & ~3 +} // this will take lower 8 bits from each character export function stringToUint8Array(input: string) { - let len = input.length; - let res = new Uint8Array(len) - for (let i = 0; i < len; ++i) - res[i] = input.charCodeAt(i) & 0xff; - return res; + const len = input.length + const res = new Uint8Array(len) + for (let i = 0; i < len; ++i) res[i] = input.charCodeAt(i) & 0xff + return res } export function uint8ArrayToString(input: ArrayLike) { - let len = input.length; + const len = input.length let res = "" - for (let i = 0; i < len; ++i) - res += String.fromCharCode(input[i]); - return res; + for (let i = 0; i < len; ++i) res += String.fromCharCode(input[i]) + return res } - export function fromUTF8(binstr: string) { if (!binstr) return "" // escape function is deprecated let escaped = "" for (let i = 0; i < binstr.length; ++i) { - let k = binstr.charCodeAt(i) & 0xff + const k = binstr.charCodeAt(i) & 0xff if (k == 37 || k > 0x7f) { - escaped += "%" + k.toString(16); + escaped += "%" + k.toString(16) } else { escaped += binstr.charAt(i) } @@ -133,89 +135,93 @@ export function fromUTF8(binstr: string) { } export function toUTF8(str: string, cesu8?: boolean) { - let res = ""; - if (!str) return res; + let res = "" + if (!str) return res for (let i = 0; i < str.length; ++i) { - let code = str.charCodeAt(i); - if (code <= 0x7f) res += str.charAt(i); + let code = str.charCodeAt(i) + if (code <= 0x7f) res += str.charAt(i) else if (code <= 0x7ff) { - res += String.fromCharCode(0xc0 | (code >> 6), 0x80 | (code & 0x3f)); + res += String.fromCharCode(0xc0 | (code >> 6), 0x80 | (code & 0x3f)) } else { if (!cesu8 && 0xd800 <= code && code <= 0xdbff) { - let next = str.charCodeAt(++i); + const next = str.charCodeAt(++i) if (!isNaN(next)) - code = 0x10000 + ((code - 0xd800) << 10) + (next - 0xdc00); + code = 0x10000 + ((code - 0xd800) << 10) + (next - 0xdc00) } if (code <= 0xffff) - res += String.fromCharCode(0xe0 | (code >> 12), 0x80 | ((code >> 6) & 0x3f), 0x80 | (code & 0x3f)); + res += String.fromCharCode( + 0xe0 | (code >> 12), + 0x80 | ((code >> 6) & 0x3f), + 0x80 | (code & 0x3f) + ) else - res += String.fromCharCode(0xf0 | (code >> 18), 0x80 | ((code >> 12) & 0x3f), 0x80 | ((code >> 6) & 0x3f), 0x80 | (code & 0x3f)); + res += String.fromCharCode( + 0xf0 | (code >> 18), + 0x80 | ((code >> 12) & 0x3f), + 0x80 | ((code >> 6) & 0x3f), + 0x80 | (code & 0x3f) + ) } - } - return res; + return res } - export interface SMap { - [index: string]: T; + [index: string]: T } export class PromiseBuffer { - private waiting: ((v: (T | Error)) => void)[] = []; - private available: (T | Error)[] = []; + private waiting: ((v: T | Error) => void)[] = [] + private available: (T | Error)[] = [] drain() { - for (let f of this.waiting) { + for (const f of this.waiting) { f(new Error("Promise Buffer Reset")) } this.waiting = [] this.available = [] } - pushError(v: Error) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any this.push(v as any) } push(v: T) { - let f = this.waiting.shift() + const f = this.waiting.shift() if (f) f(v) else this.available.push(v) } shiftAsync(timeout = 0) { if (this.available.length > 0) { - let v = this.available.shift() - if (v instanceof Error) - return Promise.reject(v) - else - return Promise.resolve(v) + const v = this.available.shift() + if (v instanceof Error) return Promise.reject(v) + else return Promise.resolve(v) } else return new Promise((resolve, reject) => { - let f = (v: (T | Error)) => { + const f = (v: T | Error) => { if (v instanceof Error) reject(v) else resolve(v) } this.waiting.push(f) if (timeout > 0) { - delay(timeout) - .then(() => { - let idx = this.waiting.indexOf(f) - if (idx >= 0) { - this.waiting.splice(idx, 1) - reject(new Error("Timeout")) - } - }) + delay(timeout).then(() => { + const idx = this.waiting.indexOf(f) + if (idx >= 0) { + this.waiting.splice(idx, 1) + reject(new Error("Timeout")) + } + }) } }) } } - export class PromiseQueue { - promises: SMap<(() => Promise)[]> = {}; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + promises: SMap<(() => Promise)[]> = {} enqueue(id: string, f: () => Promise): Promise { return new Promise((resolve, reject) => { @@ -225,27 +231,28 @@ export class PromiseQueue { } const cleanup = () => { arr.shift() - if (arr.length == 0) - delete this.promises[id] - else - arr[0]() + if (arr.length == 0) delete this.promises[id] + else arr[0]() } arr.push(() => - f().then(v => { - cleanup() - resolve(v) - }, err => { - cleanup() - reject(err) - })) - if (arr.length == 1) - arr[0]() + f().then( + v => { + cleanup() + resolve(v) + }, + err => { + cleanup() + reject(err) + } + ) + ) + if (arr.length == 1) arr[0]() }) } } export function toHex(bytes: ArrayLike) { - if (!bytes) return undefined; + if (!bytes) return undefined let r = "" for (let i = 0; i < bytes.length; ++i) r += ("0" + bytes[i].toString(16)).slice(-2) @@ -259,42 +266,46 @@ export function fromHex(hex: string) { return r } -export function isSet(v: any) { +export function isSet(v: unknown) { return v !== null && v !== undefined } export function toArray(a: ArrayLike): T[] { const r: T[] = new Array(a.length) - for (let i = 0; i < a.length; ++i) - r[i] = a[i] + for (let i = 0; i < a.length; ++i) r[i] = a[i] return r } export interface MutableArrayLike { - readonly length: number; - [n: number]: T; + readonly length: number + [n: number]: T } export function hexNum(n: number): string { - if (n < 0) - return "-" + hexNum(-n) + if (n < 0) return "-" + hexNum(-n) return "0x" + n.toString(16) } export function write32(buf: MutableArrayLike, pos: number, v: number) { - buf[pos + 0] = (v >> 0) & 0xff; - buf[pos + 1] = (v >> 8) & 0xff; - buf[pos + 2] = (v >> 16) & 0xff; - buf[pos + 3] = (v >> 24) & 0xff; + buf[pos + 0] = (v >> 0) & 0xff + buf[pos + 1] = (v >> 8) & 0xff + buf[pos + 2] = (v >> 16) & 0xff + buf[pos + 3] = (v >> 24) & 0xff } export function write16(buf: MutableArrayLike, pos: number, v: number) { - buf[pos + 0] = (v >> 0) & 0xff; - buf[pos + 1] = (v >> 8) & 0xff; + buf[pos + 0] = (v >> 0) & 0xff + buf[pos + 1] = (v >> 8) & 0xff } export function read32(buf: ArrayLike, pos: number) { - return (buf[pos] | (buf[pos + 1] << 8) | (buf[pos + 2] << 16) | (buf[pos + 3] << 24)) >>> 0 + return ( + (buf[pos] | + (buf[pos + 1] << 8) | + (buf[pos + 2] << 16) | + (buf[pos + 3] << 24)) >>> + 0 + ) } export function read16(buf: ArrayLike, pos: number) { @@ -302,30 +313,26 @@ export function read16(buf: ArrayLike, pos: number) { } export function encodeU32LE(words: number[]) { - let r = new Uint8Array(words.length * 4) - for (let i = 0; i < words.length; ++i) - write32(r, i * 4, words[i]) + const r = new Uint8Array(words.length * 4) + for (let i = 0; i < words.length; ++i) write32(r, i * 4, words[i]) return r } export function decodeU32LE(buf: Uint8Array) { - let res: number[] = [] - for (let i = 0; i < buf.length; i += 4) - res.push(read32(buf, i)) + const res: number[] = [] + for (let i = 0; i < buf.length; i += 4) res.push(read32(buf, i)) return res } export function isBufferEmpty(data: Uint8Array): boolean { - if (!data) return true; - const n = data.length; - for (let i = 0; i < data.length; ++i) { - if (data[i]) - return false; + if (!data) return true + const n = data.length + for (let i = 0; i < n; ++i) { + if (data[i]) return false } - return true; + return true } - export function bufferToString(buf: Uint8Array) { return fromUTF8(uint8ArrayToString(buf)) } @@ -343,8 +350,7 @@ export function bufferConcat(a: Uint8Array, b: Uint8Array) { export function bufferConcatMany(bufs: Uint8Array[]) { let sz = 0 - for (const buf of bufs) - sz += buf.length + for (const buf of bufs) sz += buf.length const r = new Uint8Array(sz) sz = 0 for (const buf of bufs) { @@ -356,36 +362,41 @@ export function bufferConcatMany(bufs: Uint8Array[]) { export function arrayConcatMany(arrs: T[][]) { let sz = 0 - for (const buf of arrs) - sz += buf.length + for (const buf of arrs) sz += buf.length const r: T[] = new Array(sz) sz = 0 for (const arr of arrs) { - for (let i = 0; i < arr.length; ++i) - r[i + sz] = arr[i] + for (let i = 0; i < arr.length; ++i) r[i + sz] = arr[i] sz += arr.length } return r } export function jsonCopyFrom(trg: T, src: T) { - let v = clone(src) - for (let k of Object.keys(src)) { - (trg as any)[k] = (v as any)[k] + const v = clone(src) + for (const k of Object.keys(src)) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-extra-semi + ;(trg as any)[k] = (v as any)[k] } } export function assert(cond: boolean, msg = "Assertion failed") { if (!cond) { - debugger + if (Flags.diagnostics) + // eslint-disable-next-line no-debugger + debugger throw new Error(msg) } } -export function flatClone(obj: T): T { +export function flatClone(obj: T): T { if (obj == null) return null - let r: any = {} - Object.keys(obj).forEach((k) => { r[k] = (obj as any)[k] }) - return r; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const r: any = {} + Object.keys(obj).forEach(k => { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + r[k] = (obj as any)[k] + }) + return r } export function clone(v: T): T { @@ -394,12 +405,12 @@ export function clone(v: T): T { } export function throttle(handler: () => void, delay: number): () => void { - let enableCall = true; + let enableCall = true return function () { - if (!enableCall) return; - enableCall = false; - handler(); - setTimeout(() => enableCall = true, delay); + if (!enableCall) return + enableCall = false + handler() + setTimeout(() => (enableCall = true), delay) } } @@ -408,96 +419,101 @@ export interface Signal { signal: () => void } export function signal(): Signal { - let resolve: (v: any) => void + let resolve: (v: boolean) => void return { - signalled: new Promise(r => { resolve = r }), - signal: () => resolve(true) + signalled: new Promise(r => { + resolve = r + }), + signal: () => resolve(true), } } export function readBlobToUint8Array(blob: Blob): Promise { - if (!!blob.arrayBuffer) { - return blob.arrayBuffer() - .then(data => new Uint8Array(data)); + if (blob.arrayBuffer) { + return blob.arrayBuffer().then(data => new Uint8Array(data)) } return new Promise((resolve, reject) => { - const fileReader = new FileReader(); + const fileReader = new FileReader() fileReader.onload = () => { resolve(new Uint8Array(fileReader.result as ArrayBuffer)) } - fileReader.onerror = (e) => { + fileReader.onerror = e => { console.log(e) reject(e) } try { - fileReader.readAsArrayBuffer(blob); + fileReader.readAsArrayBuffer(blob) } catch (e) { - reject(e); + reject(e) } }) } export function readBlobToText(blob: Blob): Promise { - if (!!blob.text) { + if (blob.text) { return blob.text() } return new Promise((resolve, reject) => { - const fileReader = new FileReader(); + const fileReader = new FileReader() fileReader.onload = () => resolve(fileReader.result as string) - fileReader.onerror = (e) => { + fileReader.onerror = e => { console.log(e) reject(e) } try { - fileReader.readAsText(blob); + fileReader.readAsText(blob) } catch (e) { - reject(e); + reject(e) } }) } export function debounce(handler: () => void, delay: number): () => void { - let timeOutId: any; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + let timeOutId: any return function () { if (timeOutId) { - clearTimeout(timeOutId); + clearTimeout(timeOutId) } timeOutId = setTimeout(async () => { - handler(); - }, delay); + handler() + }, delay) } } -export function debounceAsync(handler: () => Promise, delay: number): () => void { - let timeOutId: any; +export function debounceAsync( + handler: () => Promise, + delay: number +): () => void { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + let timeOutId: any return function () { if (timeOutId) { - clearTimeout(timeOutId); + clearTimeout(timeOutId) } timeOutId = setTimeout(async () => { - await handler(); - }, delay); + await handler() + }, delay) } } export function cryptoRandomUint32(length: number): Uint32Array { - if (typeof window === "undefined") - return undefined; // not supported + if (typeof window === "undefined") return undefined // not supported const vals = new Uint32Array(length) window.crypto.getRandomValues(vals) - return vals; + return vals } export function anyRandomUint32(length: number): Uint32Array { - let r = cryptoRandomUint32(length); + let r = cryptoRandomUint32(length) if (!r) { r = new Uint32Array(length) for (let i = 0; i < r.length; ++i) - r[i] = Math.random() * 0x1_0000_0000 >>> 0 + r[i] = (Math.random() * 0x1_0000_0000) >>> 0 } - return r; + return r } export function randomUInt(max: number) { @@ -506,117 +522,120 @@ export function randomUInt(max: number) { } export function JSONTryParse(src: string) { - if (src === undefined || src === null) - return src; + if (src === undefined || src === null) return src try { return JSON.parse(src) - } - catch (e) { - return undefined; + } catch (e) { + return undefined } } export function roundWithPrecision(x: number, digits: number): number { - digits = digits | 0; + digits = digits | 0 // invalid digits input - if (digits <= 0) return Math.round(x); - if (x == 0) return 0; - let r = 0; + if (digits <= 0) return Math.round(x) + if (x == 0) return 0 + let r = 0 while (r == 0 && digits < 21) { - const d = Math.pow(10, digits++); - r = Math.round(x * d + Number.EPSILON) / d; + const d = Math.pow(10, digits++) + r = Math.round(x * d + Number.EPSILON) / d } - return r; + return r } export function randomRange(min: number, max: number) { - return Math.round(Math.random() * (max - min) + min); + return Math.round(Math.random() * (max - min) + min) } - export function unique(values: string[]): string[] { - return Array.from(new Set(values).keys()); + return Array.from(new Set(values).keys()) } -export function uniqueMap(values: T[], id: (value: T) => string, converter: (value: T) => U) { +export function uniqueMap( + values: T[], + id: (value: T) => string, + converter: (value: T) => U +) { const r: SMap = {} for (let i = 0; i < values.length; ++i) { const value = values[i] const idv = id(value) if (!r[idv]) { - r[idv] = value; + r[idv] = value } } return Object.values(r).map(converter) } -export function ellipseJoin(values: string[], maxChars: number, ellipse = "...") { - let r = ""; +export function ellipseJoin( + values: string[], + maxChars: number, + ellipse = "..." +) { + let r = "" for (let i = 0; i < values.length && r.length < maxChars; ++i) { - if (r) - r += ", "; - r += values[i]; + if (r) r += ", " + r += values[i] } - if (r.length > maxChars) - return r.slice(0, maxChars) + ellipse; - else - return r; + if (r.length > maxChars) return r.slice(0, maxChars) + ellipse + else return r } export function arrayShuffle(a: T[]): T[] { for (let i = a.length - 1; i > 0; i--) { - const j = Math.floor(Math.random() * (i + 1)); - [a[i], a[j]] = [a[j], a[i]]; + const j = Math.floor(Math.random() * (i + 1)) + ;[a[i], a[j]] = [a[j], a[i]] } - return a; + return a } export function uniqueName(names: string[], name: string): string { - if (names.indexOf(name) < 0) - return name; + if (names.indexOf(name) < 0) return name // allocate names - let count = 2; - while (names.indexOf(`${name}${count}`) > -1) - count++; - return `${name}${count}`; + let count = 2 + while (names.indexOf(`${name}${count}`) > -1) count++ + return `${name}${count}` } export function groupBy(list: T[], key: (value: T) => string): SMap { - if (!list) return {}; + if (!list) return {} const r: SMap = {} - list.forEach((item) => { - const k = key(item); - const a = r[k] || (r[k] = []); - a.push(item); - }); - return r; + list.forEach(item => { + const k = key(item) + const a = r[k] || (r[k] = []) + a.push(item) + }) + return r } export function pick(...values: number[]) { - return values?.find(x => x !== undefined); + return values?.find(x => x !== undefined) } /** * Applies filters and returns array of [yays, nays] - * @param values - * @param condition + * @param values + * @param condition */ -export function splitFilter(values: ArrayLike, condition: (t: T) => boolean): [T[], T[]] { - let yays: T[] = []; - let nays: T[] = []; +export function splitFilter( + values: ArrayLike, + condition: (t: T) => boolean +): [T[], T[]] { + const yays: T[] = [] + const nays: T[] = [] const n = values.length for (let i = 0; i < n; ++i) { - const v = values[i]; - if (condition(v)) - yays.push(v) - else - nays.push(v); + const v = values[i] + if (condition(v)) yays.push(v) + else nays.push(v) } - return [yays, nays]; + return [yays, nays] } export function range(end: number): number[] { - return Array(end).fill(0).map((_, i) => i); -} \ No newline at end of file + return Array(end) + .fill(0) + .map((_, i) => i) +} diff --git a/src/node/nodewebusb.ts b/src/node/nodewebusb.ts index 16e98e462..68b53f42e 100644 --- a/src/node/nodewebusb.ts +++ b/src/node/nodewebusb.ts @@ -1,5 +1,6 @@ import { HF2_DEVICE_MAJOR } from "../jdom/hf2"; +// eslint-disable-next-line @typescript-eslint/no-var-requires const USB = require('webusb').USB; function findDevice(devices: USBDevice[]) {