├── .eslintrc ├── .github └── workflows │ ├── FUNDING.yml │ └── build-and-test.yaml ├── .gitignore ├── .prettierignore ├── LICENSE ├── README.md ├── lib └── node-loader-core.js ├── package.json ├── pnpm-lock.yaml └── test ├── fixtures ├── captainfalcon-1.js ├── captainfalcon-2.js ├── donkeykong-1.js ├── donkeykong-2.js ├── krool.js ├── krool2.js ├── luigi-1.js ├── luigi-2.js └── yoshi.js ├── load.test.js ├── resolve.test.js └── run-tests.js /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["node-important-stuff", "plugin:prettier/recommended"], 3 | "parserOptions": { 4 | "ecmaVersion": 2020 5 | }, 6 | "rules": { 7 | "node/no-unsupported-features/es-syntax": "off", 8 | "node/no-missing-import": "off", 9 | "node/no-unpublished-import": "off" 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /.github/workflows/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: [joeldenning] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] 13 | -------------------------------------------------------------------------------- /.github/workflows/build-and-test.yaml: -------------------------------------------------------------------------------- 1 | name: Build and Test 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | pull_request: 8 | branches: 9 | - "*" 10 | 11 | jobs: 12 | build: 13 | runs-on: ubuntu-latest 14 | 15 | steps: 16 | - uses: actions/checkout@v2 17 | - uses: actions/setup-node@v2 18 | with: 19 | node-version: "16.12" 20 | - uses: pnpm/action-setup@v2.0.1 21 | with: 22 | version: 6.20.3 23 | - run: pnpm install --frozen-lockfile 24 | - run: pnpm test 25 | - run: pnpm run check-format 26 | - run: pnpm run lint 27 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | 9 | # Diagnostic reports (https://nodejs.org/api/report.html) 10 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 11 | 12 | # Runtime data 13 | pids 14 | *.pid 15 | *.seed 16 | *.pid.lock 17 | 18 | # Directory for instrumented libs generated by jscoverage/JSCover 19 | lib-cov 20 | 21 | # Coverage directory used by tools like istanbul 22 | coverage 23 | *.lcov 24 | 25 | # nyc test coverage 26 | .nyc_output 27 | 28 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 29 | .grunt 30 | 31 | # Bower dependency directory (https://bower.io/) 32 | bower_components 33 | 34 | # node-waf configuration 35 | .lock-wscript 36 | 37 | # Compiled binary addons (https://nodejs.org/api/addons.html) 38 | build/Release 39 | 40 | # Dependency directories 41 | node_modules/ 42 | jspm_packages/ 43 | 44 | # TypeScript v1 declaration files 45 | typings/ 46 | 47 | # TypeScript cache 48 | *.tsbuildinfo 49 | 50 | # Optional npm cache directory 51 | .npm 52 | 53 | # Optional eslint cache 54 | .eslintcache 55 | 56 | # Microbundle cache 57 | .rpt2_cache/ 58 | .rts2_cache_cjs/ 59 | .rts2_cache_es/ 60 | .rts2_cache_umd/ 61 | 62 | # Optional REPL history 63 | .node_repl_history 64 | 65 | # Output of 'npm pack' 66 | *.tgz 67 | 68 | # Yarn Integrity file 69 | .yarn-integrity 70 | 71 | # dotenv environment variables file 72 | .env 73 | .env.test 74 | 75 | # parcel-bundler cache (https://parceljs.org/) 76 | .cache 77 | 78 | # Next.js build output 79 | .next 80 | 81 | # Nuxt.js build / generate output 82 | .nuxt 83 | dist 84 | 85 | # Gatsby files 86 | .cache/ 87 | # Comment in the public line in if your project uses Gatsby and *not* Next.js 88 | # https://nextjs.org/blog/next-9-1#public-directory-support 89 | # public 90 | 91 | # vuepress build output 92 | .vuepress/dist 93 | 94 | # Serverless directories 95 | .serverless/ 96 | 97 | # FuseBox cache 98 | .fusebox/ 99 | 100 | # DynamoDB Local files 101 | .dynamodb/ 102 | 103 | # TernJS port file 104 | .tern-port 105 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | pnpm-lock.yaml -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 node-loader 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # @node-loader/core 2 | 3 | A configurable NodeJS loader that combines multiple other loaders into one. 4 | 5 | ## Deprecation Notice 6 | 7 | As of NodeJS 20, combining multiple loaders into one loader is possible via [chaining with the `--import` flag](https://nodejs.org/docs/latest-v20.x/api/module.html#chaining). It is recommended to switch to native NodeJS chaining. 8 | 9 | ## Motivation 10 | 11 | [NodeJS Loaders](https://nodejs.org/dist/latest-v14.x/docs/api/esm.html#esm_experimental_loaders) are a new feature that allow you to configure the behavior of modules loaded with `import` or `import()`. NodeJS currently only allows you to specify a single loader when starting up Node. However, the `@node-loader/core` project allows you to combine multiple into a single loader through a configuration file. 12 | 13 | ## Installation 14 | 15 | ```sh 16 | npm install --save @node-loader/core 17 | ``` 18 | 19 | For NodeJS@<16.12, use `@node-loader/core@1`. For NodeJS@>=16.12 but <20, use `@node-loader/core@latest`. For Node >=20, use [`--import` chaining](https://nodejs.org/docs/latest-v20.x/api/module.html#chaining) 20 | 21 | ## Usage 22 | 23 | Create a file `node-loader.config.js` in your current working directory: 24 | 25 | ```js 26 | import * as importMapLoader from "@node-loader/import-maps"; 27 | import * as httpLoader from "@node-loader/http"; 28 | 29 | export default { 30 | loaders: [importMapLoader, httpLoader], 31 | }; 32 | ``` 33 | 34 | Then run node with the `--experimental-loader` flag: 35 | 36 | ```sh 37 | node --experimental-loader @node-loader/core file.js 38 | ``` 39 | 40 | Your code will now run with all loaders specified in the configuration file, merged into a single loader. When multiple loaders specify the same loader hook (such as `resolve`), they will be called sequentially until one of them returns a non-default value. The order in which they are called is the same order specified in the configuration file. 41 | 42 | ## Configuration 43 | 44 | By default, node-loader core looks for a configuration file called `node-loader.config.js` in the current working directory. To specify the file path to the configuration file, provide the `NODE_LOADER_CONFIG` environment variable: 45 | 46 | ```sh 47 | NODE_LOADER_CONFIG=/Users/name/some/dir/node-loader.config.js --experimental-loader @node-loader/core file.js 48 | ``` 49 | 50 | Within the file, only the `loaders` property is currently respected. In the future, additional configuration options may be defined. 51 | -------------------------------------------------------------------------------- /lib/node-loader-core.js: -------------------------------------------------------------------------------- 1 | import path from "path"; 2 | import url from "url"; 3 | 4 | let configPromise; 5 | 6 | let configPath; 7 | 8 | if ( 9 | process.env.NODE_LOADER_CONFIG && 10 | path.isAbsolute(process.env.NODE_LOADER_CONFIG) 11 | ) { 12 | configPath = url.pathToFileURL(process.env.NODE_LOADER_CONFIG); 13 | } else { 14 | configPath = url.pathToFileURL( 15 | path.join( 16 | process.cwd(), 17 | process.env.NODE_LOADER_CONFIG || "node-loader.config.js" 18 | ) 19 | ); 20 | } 21 | 22 | let loadingConfig = false; 23 | 24 | function processConfig(config) { 25 | if (typeof config !== "object") { 26 | die( 27 | `node-loader.config.js: did not export a config object as default export.` 28 | ); 29 | } 30 | 31 | if (!Array.isArray(config.loaders)) { 32 | die( 33 | `node-loader.config.js: exported object does not include a "loaders" array` 34 | ); 35 | } 36 | 37 | config.loaders.forEach((loader, i) => { 38 | if (typeof loader !== "object") { 39 | die( 40 | `node-loader.config.js: Invalid loader at index ${i} - expected object but received ${typeof loader}` 41 | ); 42 | } 43 | 44 | if (Array.isArray(loader)) { 45 | die( 46 | `node-loader.config.js: Invalid loader at index ${i} - expected plain object but received Array` 47 | ); 48 | } 49 | }); 50 | 51 | config.resolvedLoaders = resolveLoaders(config); 52 | 53 | return config; 54 | } 55 | 56 | function die(msg, err) { 57 | console.error(msg); 58 | if (err) { 59 | console.error(err); 60 | } 61 | process.exit(1); 62 | } 63 | 64 | export const resolve = createHook("resolve"); 65 | 66 | export const load = createHook("load"); 67 | 68 | // getGlobalPreloadCode is synchronous, which means we can't import the config file in time :'( 69 | // export const getGlobalPreloadCode = createHook("getGlobalPreloadCode") 70 | 71 | global.nodeLoader = global.nodeLoader || {}; 72 | global.nodeLoader.setConfigPromise = function setConfigPromise(newConfig) { 73 | configPromise = newConfig.then((config) => { 74 | config.resolvedLoaders = resolveLoaders(config); 75 | return config; 76 | }); 77 | }; 78 | 79 | function getConfigPromise() { 80 | if (!configPromise) { 81 | loadingConfig = true; 82 | configPromise = import(configPath) 83 | .then( 84 | (ns) => { 85 | const config = ns.default; 86 | return processConfig(config); 87 | }, 88 | (err) => { 89 | console.warn( 90 | `Could not read node-loader.config.js file at ${configPath}, continuing without node loader config` 91 | ); 92 | console.error(err); 93 | return processConfig({ loaders: [] }); 94 | } 95 | ) 96 | .finally(() => { 97 | loadingConfig = false; 98 | }); 99 | } 100 | 101 | return configPromise; 102 | } 103 | 104 | function createHook(name) { 105 | return async function (...args) { 106 | if (loadingConfig) { 107 | const defaultImpl = args[args.length - 1]; 108 | return defaultImpl(...args); 109 | } else { 110 | const config = await getConfigPromise(); 111 | const { resolvedLoaders } = config; 112 | const hook = resolvedLoaders[name]; 113 | return hook(...args); 114 | } 115 | }; 116 | } 117 | 118 | function resolveLoaders(config) { 119 | return { 120 | resolve: flattenSequentialLoaders(config, "resolve"), 121 | load: flattenSequentialLoaders(config, "load"), 122 | }; 123 | } 124 | 125 | function getLoaders(config, name) { 126 | return config.loaders 127 | .filter((loader) => loader[name]) 128 | .map((loader) => loader[name]); 129 | } 130 | 131 | function flattenSequentialLoaders(config, name) { 132 | const loaders = getLoaders(config, name); 133 | 134 | return async function (...args) { 135 | const hookArgs = args.slice(0, args.length - 1); 136 | const defaultImplementation = args[args.length - 1]; 137 | 138 | const impl = constructImpl(loaders, 0, defaultImplementation); 139 | return impl(...hookArgs); 140 | }; 141 | } 142 | 143 | function constructImpl(loaders, index, defaultImplementation) { 144 | return async function (...args) { 145 | const impl = loaders[index] || defaultImplementation; 146 | const nextImpl = constructImpl(loaders, index + 1, defaultImplementation); 147 | if (typeof args[args.length - 1] === "function") { 148 | args.pop(); 149 | } 150 | return impl(...args, nextImpl); 151 | }; 152 | } 153 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@node-loader/core", 3 | "version": "2.0.0", 4 | "description": "The base loader for configuring NodeJS loaders", 5 | "type": "module", 6 | "main": "lib/node-loader-core.js", 7 | "scripts": { 8 | "test": "node --experimental-loader ./lib/node-loader-core.js ./test/run-tests.js", 9 | "format": "prettier --write .", 10 | "check-format": "prettier --check .", 11 | "lint": "eslint lib test" 12 | }, 13 | "engines": { 14 | "node": ">=13" 15 | }, 16 | "husky": { 17 | "hooks": { 18 | "pre-commit": "pretty-quick --staged && yarn lint" 19 | } 20 | }, 21 | "repository": { 22 | "type": "git", 23 | "url": "git+https://github.com/node-loader/node-loader-core.git" 24 | }, 25 | "author": "", 26 | "license": "MIT", 27 | "bugs": { 28 | "url": "https://github.com/node-loader/node-loader-core/issues" 29 | }, 30 | "publishConfig": { 31 | "access": "public" 32 | }, 33 | "homepage": "https://github.com/node-loader/node-loader-core#readme", 34 | "devDependencies": { 35 | "@types/mocha": "^8.0.0", 36 | "eslint": "^7.5.0", 37 | "eslint-config-node-important-stuff": "^1.1.0", 38 | "eslint-config-prettier": "^8.3.0", 39 | "eslint-plugin-prettier": "^3.1.4", 40 | "husky": "^4.2.5", 41 | "mocha": "^8.0.1", 42 | "prettier": "^2.0.5", 43 | "pretty-quick": "^2.0.1" 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: 5.3 2 | 3 | specifiers: 4 | '@types/mocha': ^8.0.0 5 | eslint: ^7.5.0 6 | eslint-config-node-important-stuff: ^1.1.0 7 | eslint-config-prettier: ^8.3.0 8 | eslint-plugin-prettier: ^3.1.4 9 | husky: ^4.2.5 10 | mocha: ^8.0.1 11 | prettier: ^2.0.5 12 | pretty-quick: ^2.0.1 13 | 14 | devDependencies: 15 | '@types/mocha': 8.2.0 16 | eslint: 7.20.0 17 | eslint-config-node-important-stuff: 1.1.0_eslint@7.20.0 18 | eslint-config-prettier: 8.3.0_eslint@7.20.0 19 | eslint-plugin-prettier: 3.3.1_b661bfebe0a6f20f629965703be5f1b4 20 | husky: 4.3.8 21 | mocha: 8.3.0 22 | prettier: 2.2.1 23 | pretty-quick: 2.0.2_prettier@2.2.1 24 | 25 | packages: 26 | 27 | /@babel/code-frame/7.12.11: 28 | resolution: {integrity: sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==} 29 | dependencies: 30 | '@babel/highlight': 7.12.13 31 | dev: true 32 | 33 | /@babel/code-frame/7.12.13: 34 | resolution: {integrity: sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==} 35 | dependencies: 36 | '@babel/highlight': 7.12.13 37 | dev: true 38 | 39 | /@babel/helper-validator-identifier/7.12.11: 40 | resolution: {integrity: sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==} 41 | dev: true 42 | 43 | /@babel/highlight/7.12.13: 44 | resolution: {integrity: sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww==} 45 | dependencies: 46 | '@babel/helper-validator-identifier': 7.12.11 47 | chalk: 2.4.2 48 | js-tokens: 4.0.0 49 | dev: true 50 | 51 | /@eslint/eslintrc/0.3.0: 52 | resolution: {integrity: sha512-1JTKgrOKAHVivSvOYw+sJOunkBjUOvjqWk1DPja7ZFhIS2mX/4EgTT8M7eTK9jrKhL/FvXXEbQwIs3pg1xp3dg==} 53 | engines: {node: ^10.12.0 || >=12.0.0} 54 | dependencies: 55 | ajv: 6.12.6 56 | debug: 4.3.1 57 | espree: 7.3.1 58 | globals: 12.4.0 59 | ignore: 4.0.6 60 | import-fresh: 3.3.0 61 | js-yaml: 3.14.1 62 | lodash: 4.17.20 63 | minimatch: 3.0.4 64 | strip-json-comments: 3.1.1 65 | transitivePeerDependencies: 66 | - supports-color 67 | dev: true 68 | 69 | /@types/minimatch/3.0.3: 70 | resolution: {integrity: sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==} 71 | dev: true 72 | 73 | /@types/mocha/8.2.0: 74 | resolution: {integrity: sha512-/Sge3BymXo4lKc31C8OINJgXLaw+7vL1/L1pGiBNpGrBiT8FQiaFpSYV0uhTaG4y78vcMBTMFsWaHDvuD+xGzQ==} 75 | dev: true 76 | 77 | /@types/parse-json/4.0.0: 78 | resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} 79 | dev: true 80 | 81 | /@ungap/promise-all-settled/1.1.2: 82 | resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==} 83 | dev: true 84 | 85 | /acorn-jsx/5.3.1_acorn@7.4.1: 86 | resolution: {integrity: sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==} 87 | peerDependencies: 88 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 89 | dependencies: 90 | acorn: 7.4.1 91 | dev: true 92 | 93 | /acorn/7.4.1: 94 | resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} 95 | engines: {node: '>=0.4.0'} 96 | hasBin: true 97 | dev: true 98 | 99 | /ajv/6.12.6: 100 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 101 | dependencies: 102 | fast-deep-equal: 3.1.3 103 | fast-json-stable-stringify: 2.1.0 104 | json-schema-traverse: 0.4.1 105 | uri-js: 4.4.1 106 | dev: true 107 | 108 | /ajv/7.1.0: 109 | resolution: {integrity: sha512-svS9uILze/cXbH0z2myCK2Brqprx/+JJYK5pHicT/GQiBfzzhUVAIT6MwqJg8y4xV/zoGsUeuPuwtoiKSGE15g==} 110 | dependencies: 111 | fast-deep-equal: 3.1.3 112 | json-schema-traverse: 1.0.0 113 | require-from-string: 2.0.2 114 | uri-js: 4.4.1 115 | dev: true 116 | 117 | /ansi-colors/4.1.1: 118 | resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} 119 | engines: {node: '>=6'} 120 | dev: true 121 | 122 | /ansi-regex/3.0.0: 123 | resolution: {integrity: sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=} 124 | engines: {node: '>=4'} 125 | dev: true 126 | 127 | /ansi-regex/5.0.0: 128 | resolution: {integrity: sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==} 129 | engines: {node: '>=8'} 130 | dev: true 131 | 132 | /ansi-styles/3.2.1: 133 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 134 | engines: {node: '>=4'} 135 | dependencies: 136 | color-convert: 1.9.3 137 | dev: true 138 | 139 | /ansi-styles/4.3.0: 140 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 141 | engines: {node: '>=8'} 142 | dependencies: 143 | color-convert: 2.0.1 144 | dev: true 145 | 146 | /anymatch/3.1.1: 147 | resolution: {integrity: sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==} 148 | engines: {node: '>= 8'} 149 | dependencies: 150 | normalize-path: 3.0.0 151 | picomatch: 2.2.2 152 | dev: true 153 | 154 | /argparse/1.0.10: 155 | resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} 156 | dependencies: 157 | sprintf-js: 1.0.3 158 | dev: true 159 | 160 | /argparse/2.0.1: 161 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 162 | dev: true 163 | 164 | /array-differ/3.0.0: 165 | resolution: {integrity: sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==} 166 | engines: {node: '>=8'} 167 | dev: true 168 | 169 | /array-union/2.1.0: 170 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 171 | engines: {node: '>=8'} 172 | dev: true 173 | 174 | /arrify/2.0.1: 175 | resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==} 176 | engines: {node: '>=8'} 177 | dev: true 178 | 179 | /astral-regex/2.0.0: 180 | resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} 181 | engines: {node: '>=8'} 182 | dev: true 183 | 184 | /balanced-match/1.0.0: 185 | resolution: {integrity: sha1-ibTRmasr7kneFk6gK4nORi1xt2c=} 186 | dev: true 187 | 188 | /binary-extensions/2.2.0: 189 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} 190 | engines: {node: '>=8'} 191 | dev: true 192 | 193 | /brace-expansion/1.1.11: 194 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 195 | dependencies: 196 | balanced-match: 1.0.0 197 | concat-map: 0.0.1 198 | dev: true 199 | 200 | /braces/3.0.2: 201 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 202 | engines: {node: '>=8'} 203 | dependencies: 204 | fill-range: 7.0.1 205 | dev: true 206 | 207 | /browser-stdout/1.3.1: 208 | resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} 209 | dev: true 210 | 211 | /callsites/3.1.0: 212 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 213 | engines: {node: '>=6'} 214 | dev: true 215 | 216 | /camelcase/6.2.0: 217 | resolution: {integrity: sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==} 218 | engines: {node: '>=10'} 219 | dev: true 220 | 221 | /chalk/2.4.2: 222 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 223 | engines: {node: '>=4'} 224 | dependencies: 225 | ansi-styles: 3.2.1 226 | escape-string-regexp: 1.0.5 227 | supports-color: 5.5.0 228 | dev: true 229 | 230 | /chalk/4.1.0: 231 | resolution: {integrity: sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==} 232 | engines: {node: '>=10'} 233 | dependencies: 234 | ansi-styles: 4.3.0 235 | supports-color: 7.2.0 236 | dev: true 237 | 238 | /chokidar/3.5.1: 239 | resolution: {integrity: sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==} 240 | engines: {node: '>= 8.10.0'} 241 | dependencies: 242 | anymatch: 3.1.1 243 | braces: 3.0.2 244 | glob-parent: 5.1.1 245 | is-binary-path: 2.1.0 246 | is-glob: 4.0.1 247 | normalize-path: 3.0.0 248 | readdirp: 3.5.0 249 | optionalDependencies: 250 | fsevents: 2.3.2 251 | dev: true 252 | 253 | /ci-info/2.0.0: 254 | resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} 255 | dev: true 256 | 257 | /cliui/7.0.4: 258 | resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} 259 | dependencies: 260 | string-width: 4.2.0 261 | strip-ansi: 6.0.0 262 | wrap-ansi: 7.0.0 263 | dev: true 264 | 265 | /color-convert/1.9.3: 266 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 267 | dependencies: 268 | color-name: 1.1.3 269 | dev: true 270 | 271 | /color-convert/2.0.1: 272 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 273 | engines: {node: '>=7.0.0'} 274 | dependencies: 275 | color-name: 1.1.4 276 | dev: true 277 | 278 | /color-name/1.1.3: 279 | resolution: {integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=} 280 | dev: true 281 | 282 | /color-name/1.1.4: 283 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 284 | dev: true 285 | 286 | /compare-versions/3.6.0: 287 | resolution: {integrity: sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==} 288 | dev: true 289 | 290 | /concat-map/0.0.1: 291 | resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} 292 | dev: true 293 | 294 | /cosmiconfig/7.0.0: 295 | resolution: {integrity: sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==} 296 | engines: {node: '>=10'} 297 | dependencies: 298 | '@types/parse-json': 4.0.0 299 | import-fresh: 3.3.0 300 | parse-json: 5.2.0 301 | path-type: 4.0.0 302 | yaml: 1.10.0 303 | dev: true 304 | 305 | /cross-spawn/7.0.3: 306 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 307 | engines: {node: '>= 8'} 308 | dependencies: 309 | path-key: 3.1.1 310 | shebang-command: 2.0.0 311 | which: 2.0.2 312 | dev: true 313 | 314 | /debug/4.3.1: 315 | resolution: {integrity: sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==} 316 | engines: {node: '>=6.0'} 317 | peerDependencies: 318 | supports-color: '*' 319 | peerDependenciesMeta: 320 | supports-color: 321 | optional: true 322 | dependencies: 323 | ms: 2.1.2 324 | dev: true 325 | 326 | /debug/4.3.1_supports-color@8.1.1: 327 | resolution: {integrity: sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==} 328 | engines: {node: '>=6.0'} 329 | peerDependencies: 330 | supports-color: '*' 331 | peerDependenciesMeta: 332 | supports-color: 333 | optional: true 334 | dependencies: 335 | ms: 2.1.2 336 | supports-color: 8.1.1 337 | dev: true 338 | 339 | /decamelize/4.0.0: 340 | resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} 341 | engines: {node: '>=10'} 342 | dev: true 343 | 344 | /deep-is/0.1.3: 345 | resolution: {integrity: sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=} 346 | dev: true 347 | 348 | /diff/5.0.0: 349 | resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} 350 | engines: {node: '>=0.3.1'} 351 | dev: true 352 | 353 | /doctrine/3.0.0: 354 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} 355 | engines: {node: '>=6.0.0'} 356 | dependencies: 357 | esutils: 2.0.3 358 | dev: true 359 | 360 | /emoji-regex/8.0.0: 361 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 362 | dev: true 363 | 364 | /end-of-stream/1.4.4: 365 | resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} 366 | dependencies: 367 | once: 1.4.0 368 | dev: true 369 | 370 | /enquirer/2.3.6: 371 | resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} 372 | engines: {node: '>=8.6'} 373 | dependencies: 374 | ansi-colors: 4.1.1 375 | dev: true 376 | 377 | /error-ex/1.3.2: 378 | resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} 379 | dependencies: 380 | is-arrayish: 0.2.1 381 | dev: true 382 | 383 | /escalade/3.1.1: 384 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} 385 | engines: {node: '>=6'} 386 | dev: true 387 | 388 | /escape-string-regexp/1.0.5: 389 | resolution: {integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=} 390 | engines: {node: '>=0.8.0'} 391 | dev: true 392 | 393 | /escape-string-regexp/4.0.0: 394 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 395 | engines: {node: '>=10'} 396 | dev: true 397 | 398 | /eslint-config-important-stuff/1.1.0: 399 | resolution: {integrity: sha512-CsV6QFsjNDTZTDEgE1XxhTKph4YJUh5XFMdsWv3p+9DuMyvfy40fsnZiwqXZHBVEUNMHf+zfPGk6s6b4fS9Erw==} 400 | dev: true 401 | 402 | /eslint-config-node-important-stuff/1.1.0_eslint@7.20.0: 403 | resolution: {integrity: sha512-bG6bnD0P81rWYIU2yY3RUxnjz7BoDushsTsDUfg0tZlujXHqApaR2tN1AskHk/FEOYOB7hObY9NxmPdiT8jctA==} 404 | dependencies: 405 | eslint-config-important-stuff: 1.1.0 406 | eslint-plugin-node: 11.1.0_eslint@7.20.0 407 | transitivePeerDependencies: 408 | - eslint 409 | dev: true 410 | 411 | /eslint-config-prettier/8.3.0_eslint@7.20.0: 412 | resolution: {integrity: sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==} 413 | hasBin: true 414 | peerDependencies: 415 | eslint: '>=7.0.0' 416 | dependencies: 417 | eslint: 7.20.0 418 | dev: true 419 | 420 | /eslint-plugin-es/3.0.1_eslint@7.20.0: 421 | resolution: {integrity: sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==} 422 | engines: {node: '>=8.10.0'} 423 | peerDependencies: 424 | eslint: '>=4.19.1' 425 | dependencies: 426 | eslint: 7.20.0 427 | eslint-utils: 2.1.0 428 | regexpp: 3.1.0 429 | dev: true 430 | 431 | /eslint-plugin-node/11.1.0_eslint@7.20.0: 432 | resolution: {integrity: sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==} 433 | engines: {node: '>=8.10.0'} 434 | peerDependencies: 435 | eslint: '>=5.16.0' 436 | dependencies: 437 | eslint: 7.20.0 438 | eslint-plugin-es: 3.0.1_eslint@7.20.0 439 | eslint-utils: 2.1.0 440 | ignore: 5.1.8 441 | minimatch: 3.0.4 442 | resolve: 1.20.0 443 | semver: 6.3.0 444 | dev: true 445 | 446 | /eslint-plugin-prettier/3.3.1_b661bfebe0a6f20f629965703be5f1b4: 447 | resolution: {integrity: sha512-Rq3jkcFY8RYeQLgk2cCwuc0P7SEFwDravPhsJZOQ5N4YI4DSg50NyqJ/9gdZHzQlHf8MvafSesbNJCcP/FF6pQ==} 448 | engines: {node: '>=6.0.0'} 449 | peerDependencies: 450 | eslint: '>=5.0.0' 451 | eslint-config-prettier: '*' 452 | prettier: '>=1.13.0' 453 | peerDependenciesMeta: 454 | eslint-config-prettier: 455 | optional: true 456 | dependencies: 457 | eslint: 7.20.0 458 | eslint-config-prettier: 8.3.0_eslint@7.20.0 459 | prettier: 2.2.1 460 | prettier-linter-helpers: 1.0.0 461 | dev: true 462 | 463 | /eslint-scope/5.1.1: 464 | resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} 465 | engines: {node: '>=8.0.0'} 466 | dependencies: 467 | esrecurse: 4.3.0 468 | estraverse: 4.3.0 469 | dev: true 470 | 471 | /eslint-utils/2.1.0: 472 | resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} 473 | engines: {node: '>=6'} 474 | dependencies: 475 | eslint-visitor-keys: 1.3.0 476 | dev: true 477 | 478 | /eslint-visitor-keys/1.3.0: 479 | resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} 480 | engines: {node: '>=4'} 481 | dev: true 482 | 483 | /eslint-visitor-keys/2.0.0: 484 | resolution: {integrity: sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==} 485 | engines: {node: '>=10'} 486 | dev: true 487 | 488 | /eslint/7.20.0: 489 | resolution: {integrity: sha512-qGi0CTcOGP2OtCQBgWZlQjcTuP0XkIpYFj25XtRTQSHC+umNnp7UMshr2G8SLsRFYDdAPFeHOsiteadmMH02Yw==} 490 | engines: {node: ^10.12.0 || >=12.0.0} 491 | hasBin: true 492 | dependencies: 493 | '@babel/code-frame': 7.12.11 494 | '@eslint/eslintrc': 0.3.0 495 | ajv: 6.12.6 496 | chalk: 4.1.0 497 | cross-spawn: 7.0.3 498 | debug: 4.3.1 499 | doctrine: 3.0.0 500 | enquirer: 2.3.6 501 | eslint-scope: 5.1.1 502 | eslint-utils: 2.1.0 503 | eslint-visitor-keys: 2.0.0 504 | espree: 7.3.1 505 | esquery: 1.4.0 506 | esutils: 2.0.3 507 | file-entry-cache: 6.0.0 508 | functional-red-black-tree: 1.0.1 509 | glob-parent: 5.1.1 510 | globals: 12.4.0 511 | ignore: 4.0.6 512 | import-fresh: 3.3.0 513 | imurmurhash: 0.1.4 514 | is-glob: 4.0.1 515 | js-yaml: 3.14.1 516 | json-stable-stringify-without-jsonify: 1.0.1 517 | levn: 0.4.1 518 | lodash: 4.17.20 519 | minimatch: 3.0.4 520 | natural-compare: 1.4.0 521 | optionator: 0.9.1 522 | progress: 2.0.3 523 | regexpp: 3.1.0 524 | semver: 7.3.4 525 | strip-ansi: 6.0.0 526 | strip-json-comments: 3.1.1 527 | table: 6.0.7 528 | text-table: 0.2.0 529 | v8-compile-cache: 2.2.0 530 | transitivePeerDependencies: 531 | - supports-color 532 | dev: true 533 | 534 | /espree/7.3.1: 535 | resolution: {integrity: sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==} 536 | engines: {node: ^10.12.0 || >=12.0.0} 537 | dependencies: 538 | acorn: 7.4.1 539 | acorn-jsx: 5.3.1_acorn@7.4.1 540 | eslint-visitor-keys: 1.3.0 541 | dev: true 542 | 543 | /esprima/4.0.1: 544 | resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} 545 | engines: {node: '>=4'} 546 | hasBin: true 547 | dev: true 548 | 549 | /esquery/1.4.0: 550 | resolution: {integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==} 551 | engines: {node: '>=0.10'} 552 | dependencies: 553 | estraverse: 5.2.0 554 | dev: true 555 | 556 | /esrecurse/4.3.0: 557 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 558 | engines: {node: '>=4.0'} 559 | dependencies: 560 | estraverse: 5.2.0 561 | dev: true 562 | 563 | /estraverse/4.3.0: 564 | resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} 565 | engines: {node: '>=4.0'} 566 | dev: true 567 | 568 | /estraverse/5.2.0: 569 | resolution: {integrity: sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==} 570 | engines: {node: '>=4.0'} 571 | dev: true 572 | 573 | /esutils/2.0.3: 574 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 575 | engines: {node: '>=0.10.0'} 576 | dev: true 577 | 578 | /execa/2.1.0: 579 | resolution: {integrity: sha512-Y/URAVapfbYy2Xp/gb6A0E7iR8xeqOCXsuuaoMn7A5PzrXUK84E1gyiEfq0wQd/GHA6GsoHWwhNq8anb0mleIw==} 580 | engines: {node: ^8.12.0 || >=9.7.0} 581 | dependencies: 582 | cross-spawn: 7.0.3 583 | get-stream: 5.2.0 584 | is-stream: 2.0.0 585 | merge-stream: 2.0.0 586 | npm-run-path: 3.1.0 587 | onetime: 5.1.2 588 | p-finally: 2.0.1 589 | signal-exit: 3.0.3 590 | strip-final-newline: 2.0.0 591 | dev: true 592 | 593 | /fast-deep-equal/3.1.3: 594 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 595 | dev: true 596 | 597 | /fast-diff/1.2.0: 598 | resolution: {integrity: sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==} 599 | dev: true 600 | 601 | /fast-json-stable-stringify/2.1.0: 602 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 603 | dev: true 604 | 605 | /fast-levenshtein/2.0.6: 606 | resolution: {integrity: sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=} 607 | dev: true 608 | 609 | /file-entry-cache/6.0.0: 610 | resolution: {integrity: sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA==} 611 | engines: {node: ^10.12.0 || >=12.0.0} 612 | dependencies: 613 | flat-cache: 3.0.4 614 | dev: true 615 | 616 | /fill-range/7.0.1: 617 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 618 | engines: {node: '>=8'} 619 | dependencies: 620 | to-regex-range: 5.0.1 621 | dev: true 622 | 623 | /find-up/4.1.0: 624 | resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} 625 | engines: {node: '>=8'} 626 | dependencies: 627 | locate-path: 5.0.0 628 | path-exists: 4.0.0 629 | dev: true 630 | 631 | /find-up/5.0.0: 632 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 633 | engines: {node: '>=10'} 634 | dependencies: 635 | locate-path: 6.0.0 636 | path-exists: 4.0.0 637 | dev: true 638 | 639 | /find-versions/4.0.0: 640 | resolution: {integrity: sha512-wgpWy002tA+wgmO27buH/9KzyEOQnKsG/R0yrcjPT9BOFm0zRBVQbZ95nRGXWMywS8YR5knRbpohio0bcJABxQ==} 641 | engines: {node: '>=10'} 642 | dependencies: 643 | semver-regex: 3.1.2 644 | dev: true 645 | 646 | /flat-cache/3.0.4: 647 | resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} 648 | engines: {node: ^10.12.0 || >=12.0.0} 649 | dependencies: 650 | flatted: 3.1.1 651 | rimraf: 3.0.2 652 | dev: true 653 | 654 | /flat/5.0.2: 655 | resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} 656 | hasBin: true 657 | dev: true 658 | 659 | /flatted/3.1.1: 660 | resolution: {integrity: sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==} 661 | dev: true 662 | 663 | /fs.realpath/1.0.0: 664 | resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=} 665 | dev: true 666 | 667 | /fsevents/2.3.2: 668 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} 669 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 670 | os: [darwin] 671 | dev: true 672 | optional: true 673 | 674 | /function-bind/1.1.1: 675 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 676 | dev: true 677 | 678 | /functional-red-black-tree/1.0.1: 679 | resolution: {integrity: sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=} 680 | dev: true 681 | 682 | /get-caller-file/2.0.5: 683 | resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} 684 | engines: {node: 6.* || 8.* || >= 10.*} 685 | dev: true 686 | 687 | /get-stream/5.2.0: 688 | resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} 689 | engines: {node: '>=8'} 690 | dependencies: 691 | pump: 3.0.0 692 | dev: true 693 | 694 | /glob-parent/5.1.1: 695 | resolution: {integrity: sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==} 696 | engines: {node: '>= 6'} 697 | dependencies: 698 | is-glob: 4.0.1 699 | dev: true 700 | 701 | /glob/7.1.6: 702 | resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} 703 | dependencies: 704 | fs.realpath: 1.0.0 705 | inflight: 1.0.6 706 | inherits: 2.0.4 707 | minimatch: 3.0.4 708 | once: 1.4.0 709 | path-is-absolute: 1.0.1 710 | dev: true 711 | 712 | /globals/12.4.0: 713 | resolution: {integrity: sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==} 714 | engines: {node: '>=8'} 715 | dependencies: 716 | type-fest: 0.8.1 717 | dev: true 718 | 719 | /growl/1.10.5: 720 | resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==} 721 | engines: {node: '>=4.x'} 722 | dev: true 723 | 724 | /has-flag/3.0.0: 725 | resolution: {integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=} 726 | engines: {node: '>=4'} 727 | dev: true 728 | 729 | /has-flag/4.0.0: 730 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 731 | engines: {node: '>=8'} 732 | dev: true 733 | 734 | /has/1.0.3: 735 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} 736 | engines: {node: '>= 0.4.0'} 737 | dependencies: 738 | function-bind: 1.1.1 739 | dev: true 740 | 741 | /he/1.2.0: 742 | resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} 743 | hasBin: true 744 | dev: true 745 | 746 | /husky/4.3.8: 747 | resolution: {integrity: sha512-LCqqsB0PzJQ/AlCgfrfzRe3e3+NvmefAdKQhRYpxS4u6clblBoDdzzvHi8fmxKRzvMxPY/1WZWzomPZww0Anow==} 748 | engines: {node: '>=10'} 749 | hasBin: true 750 | requiresBuild: true 751 | dependencies: 752 | chalk: 4.1.0 753 | ci-info: 2.0.0 754 | compare-versions: 3.6.0 755 | cosmiconfig: 7.0.0 756 | find-versions: 4.0.0 757 | opencollective-postinstall: 2.0.3 758 | pkg-dir: 5.0.0 759 | please-upgrade-node: 3.2.0 760 | slash: 3.0.0 761 | which-pm-runs: 1.0.0 762 | dev: true 763 | 764 | /ignore/4.0.6: 765 | resolution: {integrity: sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==} 766 | engines: {node: '>= 4'} 767 | dev: true 768 | 769 | /ignore/5.1.8: 770 | resolution: {integrity: sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==} 771 | engines: {node: '>= 4'} 772 | dev: true 773 | 774 | /import-fresh/3.3.0: 775 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 776 | engines: {node: '>=6'} 777 | dependencies: 778 | parent-module: 1.0.1 779 | resolve-from: 4.0.0 780 | dev: true 781 | 782 | /imurmurhash/0.1.4: 783 | resolution: {integrity: sha1-khi5srkoojixPcT7a21XbyMUU+o=} 784 | engines: {node: '>=0.8.19'} 785 | dev: true 786 | 787 | /inflight/1.0.6: 788 | resolution: {integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=} 789 | dependencies: 790 | once: 1.4.0 791 | wrappy: 1.0.2 792 | dev: true 793 | 794 | /inherits/2.0.4: 795 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 796 | dev: true 797 | 798 | /is-arrayish/0.2.1: 799 | resolution: {integrity: sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=} 800 | dev: true 801 | 802 | /is-binary-path/2.1.0: 803 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 804 | engines: {node: '>=8'} 805 | dependencies: 806 | binary-extensions: 2.2.0 807 | dev: true 808 | 809 | /is-core-module/2.2.0: 810 | resolution: {integrity: sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==} 811 | dependencies: 812 | has: 1.0.3 813 | dev: true 814 | 815 | /is-extglob/2.1.1: 816 | resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=} 817 | engines: {node: '>=0.10.0'} 818 | dev: true 819 | 820 | /is-fullwidth-code-point/2.0.0: 821 | resolution: {integrity: sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=} 822 | engines: {node: '>=4'} 823 | dev: true 824 | 825 | /is-fullwidth-code-point/3.0.0: 826 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 827 | engines: {node: '>=8'} 828 | dev: true 829 | 830 | /is-glob/4.0.1: 831 | resolution: {integrity: sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==} 832 | engines: {node: '>=0.10.0'} 833 | dependencies: 834 | is-extglob: 2.1.1 835 | dev: true 836 | 837 | /is-number/7.0.0: 838 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 839 | engines: {node: '>=0.12.0'} 840 | dev: true 841 | 842 | /is-plain-obj/2.1.0: 843 | resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} 844 | engines: {node: '>=8'} 845 | dev: true 846 | 847 | /is-stream/2.0.0: 848 | resolution: {integrity: sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==} 849 | engines: {node: '>=8'} 850 | dev: true 851 | 852 | /isexe/2.0.0: 853 | resolution: {integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=} 854 | dev: true 855 | 856 | /js-tokens/4.0.0: 857 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 858 | dev: true 859 | 860 | /js-yaml/3.14.1: 861 | resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} 862 | hasBin: true 863 | dependencies: 864 | argparse: 1.0.10 865 | esprima: 4.0.1 866 | dev: true 867 | 868 | /js-yaml/4.0.0: 869 | resolution: {integrity: sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==} 870 | hasBin: true 871 | dependencies: 872 | argparse: 2.0.1 873 | dev: true 874 | 875 | /json-parse-even-better-errors/2.3.1: 876 | resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} 877 | dev: true 878 | 879 | /json-schema-traverse/0.4.1: 880 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 881 | dev: true 882 | 883 | /json-schema-traverse/1.0.0: 884 | resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} 885 | dev: true 886 | 887 | /json-stable-stringify-without-jsonify/1.0.1: 888 | resolution: {integrity: sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=} 889 | dev: true 890 | 891 | /levn/0.4.1: 892 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 893 | engines: {node: '>= 0.8.0'} 894 | dependencies: 895 | prelude-ls: 1.2.1 896 | type-check: 0.4.0 897 | dev: true 898 | 899 | /lines-and-columns/1.1.6: 900 | resolution: {integrity: sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=} 901 | dev: true 902 | 903 | /locate-path/5.0.0: 904 | resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} 905 | engines: {node: '>=8'} 906 | dependencies: 907 | p-locate: 4.1.0 908 | dev: true 909 | 910 | /locate-path/6.0.0: 911 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 912 | engines: {node: '>=10'} 913 | dependencies: 914 | p-locate: 5.0.0 915 | dev: true 916 | 917 | /lodash/4.17.20: 918 | resolution: {integrity: sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==} 919 | dev: true 920 | 921 | /log-symbols/4.0.0: 922 | resolution: {integrity: sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==} 923 | engines: {node: '>=10'} 924 | dependencies: 925 | chalk: 4.1.0 926 | dev: true 927 | 928 | /lru-cache/6.0.0: 929 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 930 | engines: {node: '>=10'} 931 | dependencies: 932 | yallist: 4.0.0 933 | dev: true 934 | 935 | /merge-stream/2.0.0: 936 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} 937 | dev: true 938 | 939 | /mimic-fn/2.1.0: 940 | resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} 941 | engines: {node: '>=6'} 942 | dev: true 943 | 944 | /minimatch/3.0.4: 945 | resolution: {integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==} 946 | dependencies: 947 | brace-expansion: 1.1.11 948 | dev: true 949 | 950 | /mocha/8.3.0: 951 | resolution: {integrity: sha512-TQqyC89V1J/Vxx0DhJIXlq9gbbL9XFNdeLQ1+JsnZsVaSOV1z3tWfw0qZmQJGQRIfkvZcs7snQnZnOCKoldq1Q==} 952 | engines: {node: '>= 10.12.0'} 953 | hasBin: true 954 | dependencies: 955 | '@ungap/promise-all-settled': 1.1.2 956 | ansi-colors: 4.1.1 957 | browser-stdout: 1.3.1 958 | chokidar: 3.5.1 959 | debug: 4.3.1_supports-color@8.1.1 960 | diff: 5.0.0 961 | escape-string-regexp: 4.0.0 962 | find-up: 5.0.0 963 | glob: 7.1.6 964 | growl: 1.10.5 965 | he: 1.2.0 966 | js-yaml: 4.0.0 967 | log-symbols: 4.0.0 968 | minimatch: 3.0.4 969 | ms: 2.1.3 970 | nanoid: 3.1.20 971 | serialize-javascript: 5.0.1 972 | strip-json-comments: 3.1.1 973 | supports-color: 8.1.1 974 | which: 2.0.2 975 | wide-align: 1.1.3 976 | workerpool: 6.1.0 977 | yargs: 16.2.0 978 | yargs-parser: 20.2.4 979 | yargs-unparser: 2.0.0 980 | dev: true 981 | 982 | /mri/1.1.6: 983 | resolution: {integrity: sha512-oi1b3MfbyGa7FJMP9GmLTttni5JoICpYBRlq+x5V16fZbLsnL9N3wFqqIm/nIG43FjUFkFh9Epzp/kzUGUnJxQ==} 984 | engines: {node: '>=4'} 985 | dev: true 986 | 987 | /ms/2.1.2: 988 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 989 | dev: true 990 | 991 | /ms/2.1.3: 992 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 993 | dev: true 994 | 995 | /multimatch/4.0.0: 996 | resolution: {integrity: sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==} 997 | engines: {node: '>=8'} 998 | dependencies: 999 | '@types/minimatch': 3.0.3 1000 | array-differ: 3.0.0 1001 | array-union: 2.1.0 1002 | arrify: 2.0.1 1003 | minimatch: 3.0.4 1004 | dev: true 1005 | 1006 | /nanoid/3.1.20: 1007 | resolution: {integrity: sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==} 1008 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1009 | hasBin: true 1010 | dev: true 1011 | 1012 | /natural-compare/1.4.0: 1013 | resolution: {integrity: sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=} 1014 | dev: true 1015 | 1016 | /normalize-path/3.0.0: 1017 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 1018 | engines: {node: '>=0.10.0'} 1019 | dev: true 1020 | 1021 | /npm-run-path/3.1.0: 1022 | resolution: {integrity: sha512-Dbl4A/VfiVGLgQv29URL9xshU8XDY1GeLy+fsaZ1AA8JDSfjvr5P5+pzRbWqRSBxk6/DW7MIh8lTM/PaGnP2kg==} 1023 | engines: {node: '>=8'} 1024 | dependencies: 1025 | path-key: 3.1.1 1026 | dev: true 1027 | 1028 | /once/1.4.0: 1029 | resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=} 1030 | dependencies: 1031 | wrappy: 1.0.2 1032 | dev: true 1033 | 1034 | /onetime/5.1.2: 1035 | resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} 1036 | engines: {node: '>=6'} 1037 | dependencies: 1038 | mimic-fn: 2.1.0 1039 | dev: true 1040 | 1041 | /opencollective-postinstall/2.0.3: 1042 | resolution: {integrity: sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==} 1043 | hasBin: true 1044 | dev: true 1045 | 1046 | /optionator/0.9.1: 1047 | resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} 1048 | engines: {node: '>= 0.8.0'} 1049 | dependencies: 1050 | deep-is: 0.1.3 1051 | fast-levenshtein: 2.0.6 1052 | levn: 0.4.1 1053 | prelude-ls: 1.2.1 1054 | type-check: 0.4.0 1055 | word-wrap: 1.2.3 1056 | dev: true 1057 | 1058 | /p-finally/2.0.1: 1059 | resolution: {integrity: sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==} 1060 | engines: {node: '>=8'} 1061 | dev: true 1062 | 1063 | /p-limit/2.3.0: 1064 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} 1065 | engines: {node: '>=6'} 1066 | dependencies: 1067 | p-try: 2.2.0 1068 | dev: true 1069 | 1070 | /p-limit/3.1.0: 1071 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1072 | engines: {node: '>=10'} 1073 | dependencies: 1074 | yocto-queue: 0.1.0 1075 | dev: true 1076 | 1077 | /p-locate/4.1.0: 1078 | resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} 1079 | engines: {node: '>=8'} 1080 | dependencies: 1081 | p-limit: 2.3.0 1082 | dev: true 1083 | 1084 | /p-locate/5.0.0: 1085 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1086 | engines: {node: '>=10'} 1087 | dependencies: 1088 | p-limit: 3.1.0 1089 | dev: true 1090 | 1091 | /p-try/2.2.0: 1092 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} 1093 | engines: {node: '>=6'} 1094 | dev: true 1095 | 1096 | /parent-module/1.0.1: 1097 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1098 | engines: {node: '>=6'} 1099 | dependencies: 1100 | callsites: 3.1.0 1101 | dev: true 1102 | 1103 | /parse-json/5.2.0: 1104 | resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} 1105 | engines: {node: '>=8'} 1106 | dependencies: 1107 | '@babel/code-frame': 7.12.13 1108 | error-ex: 1.3.2 1109 | json-parse-even-better-errors: 2.3.1 1110 | lines-and-columns: 1.1.6 1111 | dev: true 1112 | 1113 | /path-exists/4.0.0: 1114 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1115 | engines: {node: '>=8'} 1116 | dev: true 1117 | 1118 | /path-is-absolute/1.0.1: 1119 | resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=} 1120 | engines: {node: '>=0.10.0'} 1121 | dev: true 1122 | 1123 | /path-key/3.1.1: 1124 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1125 | engines: {node: '>=8'} 1126 | dev: true 1127 | 1128 | /path-parse/1.0.6: 1129 | resolution: {integrity: sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==} 1130 | dev: true 1131 | 1132 | /path-type/4.0.0: 1133 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 1134 | engines: {node: '>=8'} 1135 | dev: true 1136 | 1137 | /picomatch/2.2.2: 1138 | resolution: {integrity: sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==} 1139 | engines: {node: '>=8.6'} 1140 | dev: true 1141 | 1142 | /pkg-dir/5.0.0: 1143 | resolution: {integrity: sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==} 1144 | engines: {node: '>=10'} 1145 | dependencies: 1146 | find-up: 5.0.0 1147 | dev: true 1148 | 1149 | /please-upgrade-node/3.2.0: 1150 | resolution: {integrity: sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==} 1151 | dependencies: 1152 | semver-compare: 1.0.0 1153 | dev: true 1154 | 1155 | /prelude-ls/1.2.1: 1156 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 1157 | engines: {node: '>= 0.8.0'} 1158 | dev: true 1159 | 1160 | /prettier-linter-helpers/1.0.0: 1161 | resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} 1162 | engines: {node: '>=6.0.0'} 1163 | dependencies: 1164 | fast-diff: 1.2.0 1165 | dev: true 1166 | 1167 | /prettier/2.2.1: 1168 | resolution: {integrity: sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==} 1169 | engines: {node: '>=10.13.0'} 1170 | hasBin: true 1171 | dev: true 1172 | 1173 | /pretty-quick/2.0.2_prettier@2.2.1: 1174 | resolution: {integrity: sha512-aLb6vtOTEfJDwi1w+MBTeE20GwPVUYyn6IqNg6TtGpiOB1W3y6vKcsGFjqGeaaEtQgMLSPXTWONqh33UBuwG8A==} 1175 | engines: {node: '>=8'} 1176 | hasBin: true 1177 | peerDependencies: 1178 | prettier: '>=1.8.0' 1179 | dependencies: 1180 | chalk: 2.4.2 1181 | execa: 2.1.0 1182 | find-up: 4.1.0 1183 | ignore: 5.1.8 1184 | mri: 1.1.6 1185 | multimatch: 4.0.0 1186 | prettier: 2.2.1 1187 | dev: true 1188 | 1189 | /progress/2.0.3: 1190 | resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} 1191 | engines: {node: '>=0.4.0'} 1192 | dev: true 1193 | 1194 | /pump/3.0.0: 1195 | resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} 1196 | dependencies: 1197 | end-of-stream: 1.4.4 1198 | once: 1.4.0 1199 | dev: true 1200 | 1201 | /punycode/2.1.1: 1202 | resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} 1203 | engines: {node: '>=6'} 1204 | dev: true 1205 | 1206 | /randombytes/2.1.0: 1207 | resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} 1208 | dependencies: 1209 | safe-buffer: 5.2.1 1210 | dev: true 1211 | 1212 | /readdirp/3.5.0: 1213 | resolution: {integrity: sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==} 1214 | engines: {node: '>=8.10.0'} 1215 | dependencies: 1216 | picomatch: 2.2.2 1217 | dev: true 1218 | 1219 | /regexpp/3.1.0: 1220 | resolution: {integrity: sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==} 1221 | engines: {node: '>=8'} 1222 | dev: true 1223 | 1224 | /require-directory/2.1.1: 1225 | resolution: {integrity: sha1-jGStX9MNqxyXbiNE/+f3kqam30I=} 1226 | engines: {node: '>=0.10.0'} 1227 | dev: true 1228 | 1229 | /require-from-string/2.0.2: 1230 | resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} 1231 | engines: {node: '>=0.10.0'} 1232 | dev: true 1233 | 1234 | /resolve-from/4.0.0: 1235 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1236 | engines: {node: '>=4'} 1237 | dev: true 1238 | 1239 | /resolve/1.20.0: 1240 | resolution: {integrity: sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==} 1241 | dependencies: 1242 | is-core-module: 2.2.0 1243 | path-parse: 1.0.6 1244 | dev: true 1245 | 1246 | /rimraf/3.0.2: 1247 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 1248 | hasBin: true 1249 | dependencies: 1250 | glob: 7.1.6 1251 | dev: true 1252 | 1253 | /safe-buffer/5.2.1: 1254 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} 1255 | dev: true 1256 | 1257 | /semver-compare/1.0.0: 1258 | resolution: {integrity: sha1-De4hahyUGrN+nvsXiPavxf9VN/w=} 1259 | dev: true 1260 | 1261 | /semver-regex/3.1.2: 1262 | resolution: {integrity: sha512-bXWyL6EAKOJa81XG1OZ/Yyuq+oT0b2YLlxx7c+mrdYPaPbnj6WgVULXhinMIeZGufuUBu/eVRqXEhiv4imfwxA==} 1263 | engines: {node: '>=8'} 1264 | dev: true 1265 | 1266 | /semver/6.3.0: 1267 | resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} 1268 | hasBin: true 1269 | dev: true 1270 | 1271 | /semver/7.3.4: 1272 | resolution: {integrity: sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==} 1273 | engines: {node: '>=10'} 1274 | hasBin: true 1275 | dependencies: 1276 | lru-cache: 6.0.0 1277 | dev: true 1278 | 1279 | /serialize-javascript/5.0.1: 1280 | resolution: {integrity: sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==} 1281 | dependencies: 1282 | randombytes: 2.1.0 1283 | dev: true 1284 | 1285 | /shebang-command/2.0.0: 1286 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1287 | engines: {node: '>=8'} 1288 | dependencies: 1289 | shebang-regex: 3.0.0 1290 | dev: true 1291 | 1292 | /shebang-regex/3.0.0: 1293 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1294 | engines: {node: '>=8'} 1295 | dev: true 1296 | 1297 | /signal-exit/3.0.3: 1298 | resolution: {integrity: sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==} 1299 | dev: true 1300 | 1301 | /slash/3.0.0: 1302 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 1303 | engines: {node: '>=8'} 1304 | dev: true 1305 | 1306 | /slice-ansi/4.0.0: 1307 | resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} 1308 | engines: {node: '>=10'} 1309 | dependencies: 1310 | ansi-styles: 4.3.0 1311 | astral-regex: 2.0.0 1312 | is-fullwidth-code-point: 3.0.0 1313 | dev: true 1314 | 1315 | /sprintf-js/1.0.3: 1316 | resolution: {integrity: sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=} 1317 | dev: true 1318 | 1319 | /string-width/2.1.1: 1320 | resolution: {integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==} 1321 | engines: {node: '>=4'} 1322 | dependencies: 1323 | is-fullwidth-code-point: 2.0.0 1324 | strip-ansi: 4.0.0 1325 | dev: true 1326 | 1327 | /string-width/4.2.0: 1328 | resolution: {integrity: sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==} 1329 | engines: {node: '>=8'} 1330 | dependencies: 1331 | emoji-regex: 8.0.0 1332 | is-fullwidth-code-point: 3.0.0 1333 | strip-ansi: 6.0.0 1334 | dev: true 1335 | 1336 | /strip-ansi/4.0.0: 1337 | resolution: {integrity: sha1-qEeQIusaw2iocTibY1JixQXuNo8=} 1338 | engines: {node: '>=4'} 1339 | dependencies: 1340 | ansi-regex: 3.0.0 1341 | dev: true 1342 | 1343 | /strip-ansi/6.0.0: 1344 | resolution: {integrity: sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==} 1345 | engines: {node: '>=8'} 1346 | dependencies: 1347 | ansi-regex: 5.0.0 1348 | dev: true 1349 | 1350 | /strip-final-newline/2.0.0: 1351 | resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} 1352 | engines: {node: '>=6'} 1353 | dev: true 1354 | 1355 | /strip-json-comments/3.1.1: 1356 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 1357 | engines: {node: '>=8'} 1358 | dev: true 1359 | 1360 | /supports-color/5.5.0: 1361 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 1362 | engines: {node: '>=4'} 1363 | dependencies: 1364 | has-flag: 3.0.0 1365 | dev: true 1366 | 1367 | /supports-color/7.2.0: 1368 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1369 | engines: {node: '>=8'} 1370 | dependencies: 1371 | has-flag: 4.0.0 1372 | dev: true 1373 | 1374 | /supports-color/8.1.1: 1375 | resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} 1376 | engines: {node: '>=10'} 1377 | dependencies: 1378 | has-flag: 4.0.0 1379 | dev: true 1380 | 1381 | /table/6.0.7: 1382 | resolution: {integrity: sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==} 1383 | engines: {node: '>=10.0.0'} 1384 | dependencies: 1385 | ajv: 7.1.0 1386 | lodash: 4.17.20 1387 | slice-ansi: 4.0.0 1388 | string-width: 4.2.0 1389 | dev: true 1390 | 1391 | /text-table/0.2.0: 1392 | resolution: {integrity: sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=} 1393 | dev: true 1394 | 1395 | /to-regex-range/5.0.1: 1396 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1397 | engines: {node: '>=8.0'} 1398 | dependencies: 1399 | is-number: 7.0.0 1400 | dev: true 1401 | 1402 | /type-check/0.4.0: 1403 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 1404 | engines: {node: '>= 0.8.0'} 1405 | dependencies: 1406 | prelude-ls: 1.2.1 1407 | dev: true 1408 | 1409 | /type-fest/0.8.1: 1410 | resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} 1411 | engines: {node: '>=8'} 1412 | dev: true 1413 | 1414 | /uri-js/4.4.1: 1415 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 1416 | dependencies: 1417 | punycode: 2.1.1 1418 | dev: true 1419 | 1420 | /v8-compile-cache/2.2.0: 1421 | resolution: {integrity: sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==} 1422 | dev: true 1423 | 1424 | /which-pm-runs/1.0.0: 1425 | resolution: {integrity: sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=} 1426 | dev: true 1427 | 1428 | /which/2.0.2: 1429 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1430 | engines: {node: '>= 8'} 1431 | hasBin: true 1432 | dependencies: 1433 | isexe: 2.0.0 1434 | dev: true 1435 | 1436 | /wide-align/1.1.3: 1437 | resolution: {integrity: sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==} 1438 | dependencies: 1439 | string-width: 2.1.1 1440 | dev: true 1441 | 1442 | /word-wrap/1.2.3: 1443 | resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} 1444 | engines: {node: '>=0.10.0'} 1445 | dev: true 1446 | 1447 | /workerpool/6.1.0: 1448 | resolution: {integrity: sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==} 1449 | dev: true 1450 | 1451 | /wrap-ansi/7.0.0: 1452 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 1453 | engines: {node: '>=10'} 1454 | dependencies: 1455 | ansi-styles: 4.3.0 1456 | string-width: 4.2.0 1457 | strip-ansi: 6.0.0 1458 | dev: true 1459 | 1460 | /wrappy/1.0.2: 1461 | resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=} 1462 | dev: true 1463 | 1464 | /y18n/5.0.5: 1465 | resolution: {integrity: sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==} 1466 | engines: {node: '>=10'} 1467 | dev: true 1468 | 1469 | /yallist/4.0.0: 1470 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 1471 | dev: true 1472 | 1473 | /yaml/1.10.0: 1474 | resolution: {integrity: sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==} 1475 | engines: {node: '>= 6'} 1476 | dev: true 1477 | 1478 | /yargs-parser/20.2.4: 1479 | resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} 1480 | engines: {node: '>=10'} 1481 | dev: true 1482 | 1483 | /yargs-unparser/2.0.0: 1484 | resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} 1485 | engines: {node: '>=10'} 1486 | dependencies: 1487 | camelcase: 6.2.0 1488 | decamelize: 4.0.0 1489 | flat: 5.0.2 1490 | is-plain-obj: 2.1.0 1491 | dev: true 1492 | 1493 | /yargs/16.2.0: 1494 | resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} 1495 | engines: {node: '>=10'} 1496 | dependencies: 1497 | cliui: 7.0.4 1498 | escalade: 3.1.1 1499 | get-caller-file: 2.0.5 1500 | require-directory: 2.1.1 1501 | string-width: 4.2.0 1502 | y18n: 5.0.5 1503 | yargs-parser: 20.2.4 1504 | dev: true 1505 | 1506 | /yocto-queue/0.1.0: 1507 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 1508 | engines: {node: '>=10'} 1509 | dev: true 1510 | -------------------------------------------------------------------------------- /test/fixtures/captainfalcon-1.js: -------------------------------------------------------------------------------- 1 | export default "Captain Falcon 1"; 2 | -------------------------------------------------------------------------------- /test/fixtures/captainfalcon-2.js: -------------------------------------------------------------------------------- 1 | export default "Captain Falcon 2"; 2 | -------------------------------------------------------------------------------- /test/fixtures/donkeykong-1.js: -------------------------------------------------------------------------------- 1 | export default "Donkey Kong 1"; 2 | -------------------------------------------------------------------------------- /test/fixtures/donkeykong-2.js: -------------------------------------------------------------------------------- 1 | export default "Donkey Kong 2"; 2 | -------------------------------------------------------------------------------- /test/fixtures/krool.js: -------------------------------------------------------------------------------- 1 | export default "King K Rool might actually be a nice guy"; 2 | -------------------------------------------------------------------------------- /test/fixtures/krool2.js: -------------------------------------------------------------------------------- 1 | export default "King K Rool might actually be a nice guy"; 2 | -------------------------------------------------------------------------------- /test/fixtures/luigi-1.js: -------------------------------------------------------------------------------- 1 | export default "Luigi 1"; 2 | -------------------------------------------------------------------------------- /test/fixtures/luigi-2.js: -------------------------------------------------------------------------------- 1 | export default "Luigi 2"; 2 | -------------------------------------------------------------------------------- /test/fixtures/yoshi.js: -------------------------------------------------------------------------------- 1 | export default "Yoshi doesn't deserve to be subservient to Mario"; 2 | -------------------------------------------------------------------------------- /test/load.test.js: -------------------------------------------------------------------------------- 1 | import assert from "assert"; 2 | 3 | describe("load hook", () => { 4 | it(`works with a single load hook`, async () => { 5 | global.nodeLoader.setConfigPromise( 6 | Promise.resolve({ 7 | loaders: [ 8 | { 9 | load: async function (url, context, defaultLoad) { 10 | if (url.includes("krool.js")) { 11 | const { source: originalSource } = await defaultLoad( 12 | url, 13 | context 14 | ); 15 | const finalSource = `${originalSource};\nexport const more = "I mean what did he even do to deserve Donkey Kong's wrath?"`; 16 | return { 17 | format: "module", 18 | source: finalSource, 19 | }; 20 | } else { 21 | return defaultLoad(url, context); 22 | } 23 | }, 24 | }, 25 | ], 26 | }) 27 | ); 28 | 29 | const ns = await import("./fixtures/krool.js"); 30 | assert.equal(ns.default, "King K Rool might actually be a nice guy"); 31 | 32 | assert.equal( 33 | ns.more, 34 | "I mean what did he even do to deserve Donkey Kong's wrath?" 35 | ); 36 | }); 37 | 38 | it(`works with multiple load hooks`, async () => { 39 | global.nodeLoader.setConfigPromise( 40 | Promise.resolve({ 41 | loaders: [ 42 | { 43 | load: async function (url, context, defaultLoad) { 44 | if (url.includes("krool2.js")) { 45 | const { source: originalSource } = await defaultLoad( 46 | url, 47 | context 48 | ); 49 | const finalSource = `${originalSource};\nexport const more = "I mean what did he even do to deserve Donkey Kong's wrath?"`; 50 | return { 51 | format: "module", 52 | source: finalSource, 53 | }; 54 | } else { 55 | return defaultLoad(url, context); 56 | } 57 | }, 58 | }, 59 | { 60 | load: async function (url, context, defaultLoad) { 61 | if (url.includes("krool2.js")) { 62 | const { source: originalSource } = await defaultLoad( 63 | url, 64 | context 65 | ); 66 | const finalSource = `${originalSource};\nexport const evenMore = "What if we got it all wrong and DK is the evil one?"`; 67 | return { 68 | format: "module", 69 | source: finalSource, 70 | }; 71 | } else { 72 | return defaultLoad(url, context); 73 | } 74 | }, 75 | }, 76 | ], 77 | }) 78 | ); 79 | 80 | const ns = await import("./fixtures/krool2.js"); 81 | assert.equal(ns.default, "King K Rool might actually be a nice guy"); 82 | 83 | assert.equal( 84 | ns.more, 85 | "I mean what did he even do to deserve Donkey Kong's wrath?" 86 | ); 87 | 88 | assert.equal( 89 | ns.evenMore, 90 | "What if we got it all wrong and DK is the evil one?" 91 | ); 92 | }); 93 | }); 94 | -------------------------------------------------------------------------------- /test/resolve.test.js: -------------------------------------------------------------------------------- 1 | import assert from "assert"; 2 | 3 | describe("resolve hook", () => { 4 | it(`works with a single resolve hook`, async () => { 5 | global.nodeLoader.setConfigPromise( 6 | Promise.resolve({ 7 | loaders: [ 8 | { 9 | resolve: async function (specifier, context, defaultResolve) { 10 | const { parentURL = null } = context; 11 | 12 | if (specifier === "yoshi") { 13 | return { 14 | url: new URL("./fixtures/yoshi.js", parentURL).href, 15 | }; 16 | } else { 17 | return defaultResolve(specifier, context); 18 | } 19 | }, 20 | }, 21 | ], 22 | }) 23 | ); 24 | 25 | const ns = await import("./fixtures/yoshi.js"); 26 | assert.equal( 27 | ns.default, 28 | "Yoshi doesn't deserve to be subservient to Mario" 29 | ); 30 | 31 | const ns2 = await import("yoshi"); 32 | assert.equal(ns2, ns); 33 | }); 34 | 35 | it(`works with multiple resolve hooks`, async () => { 36 | global.nodeLoader.setConfigPromise( 37 | Promise.resolve({ 38 | loaders: [ 39 | { 40 | resolve: async function (specifier, context, defaultResolve) { 41 | const { parentURL = null } = context; 42 | 43 | if (specifier === "donkeykong") { 44 | return { 45 | url: new URL("./fixtures/donkeykong-1.js", parentURL).href, 46 | }; 47 | } else if (specifier === "luigi") { 48 | return { 49 | url: new URL("./fixtures/luigi-1.js", parentURL).href, 50 | }; 51 | } else { 52 | return defaultResolve(specifier, context); 53 | } 54 | }, 55 | }, 56 | { 57 | resolve: async function (specifier, context, defaultResolve) { 58 | const { parentURL = null } = context; 59 | 60 | if (specifier === "luigi") { 61 | return { 62 | url: new URL("./fixtures/luigi-2.js", parentURL).href, 63 | }; 64 | } else if (specifier === "captainfalcon") { 65 | return { 66 | url: new URL("./fixtures/captainfalcon-2.js", parentURL).href, 67 | }; 68 | } else { 69 | return defaultResolve(specifier, context); 70 | } 71 | }, 72 | }, 73 | ], 74 | }) 75 | ); 76 | 77 | const dk = await import("donkeykong"); 78 | assert.equal(dk.default, "Donkey Kong 1"); 79 | 80 | const luigi = await import("luigi"); 81 | assert.equal(luigi.default, "Luigi 1"); 82 | 83 | const captainFalcon = await import("captainfalcon"); 84 | assert.equal(captainFalcon.default, "Captain Falcon 2"); 85 | }); 86 | }); 87 | -------------------------------------------------------------------------------- /test/run-tests.js: -------------------------------------------------------------------------------- 1 | import Mocha from "mocha"; 2 | 3 | const mocha = new Mocha(); 4 | 5 | mocha.addFile("./test/resolve.test.js"); 6 | mocha.addFile("./test/load.test.js"); 7 | 8 | mocha.loadFilesAsync().then(() => { 9 | mocha.run(); 10 | }); 11 | --------------------------------------------------------------------------------