diff --git a/.c8rc.json b/.c8rc.json deleted file mode 100644 index fa1f49d1..00000000 --- a/.c8rc.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "extension": [".js", ".cjs", ".mjs", ".ts"], - "reporter": ["text", "lcov"] -} diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 7f37c99b..00000000 --- a/.editorconfig +++ /dev/null @@ -1,27 +0,0 @@ -# Editor config -# http://EditorConfig.org - -# This EditorConfig overrides any parent EditorConfigs -root = true - -# Default rules applied to all file types -[*] - -# No trailing spaces, newline at EOF -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true -end_of_line = lf - -# 2 space indentation -indent_style = space -indent_size = 2 - -# JavaScript-specific settings -[*.{js,ts}] -quote_type = double -continuation_indent_size = 2 -curly_bracket_next_line = false -indent_brace_style = BSD -spaces_around_operators = true -spaces_around_brackets = none diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 00000000..1c384bd1 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,46 @@ +{ + "root": true, + "env": { + "browser": true, + "es2021": true, + "node": true, + "amd": true + }, + "settings": { + "react": { "version": "detect" } + }, + "extends": ["prettier", "eslint:recommended", "plugin:@typescript-eslint/recommended"], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaFeatures": { + "jsx": true + }, + "ecmaVersion": 12, + "sourceType": "module" + }, + "plugins": ["prettier", "unused-imports", "@typescript-eslint"], + "rules": { + "prefer-rest-params": "off", + "prefer-const": "error", + "prefer-spread": "off", + "no-case-declarations": "off", + "curly": ["error", "all"], + "@typescript-eslint/no-non-null-assertion": "off", + "@typescript-eslint/consistent-type-definitions": ["error", "interface"], + "@typescript-eslint/consistent-type-imports": [ + "error", + { + "prefer": "type-imports" + } + ], + "@typescript-eslint/ban-ts-comment": "off", + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/no-use-before-define": ["off"], + "object-shorthand": "error", + "@typescript-eslint/no-unused-vars": [ + "warn", + { "varsIgnorePattern": "^_", "argsIgnorePattern": "^_", "ignoreRestSiblings": true } + ], + "unused-imports/no-unused-imports-ts": "error" + } +} diff --git a/.eslintrc.yml b/.eslintrc.yml deleted file mode 100644 index d1bad32e..00000000 --- a/.eslintrc.yml +++ /dev/null @@ -1,13 +0,0 @@ -# ESLint config -# http://eslint.org/docs/user-guide/configuring -# https://jstools.dev/eslint-config/ - -root: true -extends: "@jsdevtools" -env: - node: true - browser: true -rules: - "@typescript-eslint/no-explicit-any": ["off"] -parserOptions: - sourceType: module diff --git a/.github/workflows/CI-CD.yaml b/.github/workflows/CI-CD.yaml index 1308c7f4..ae2b5f76 100644 --- a/.github/workflows/CI-CD.yaml +++ b/.github/workflows/CI-CD.yaml @@ -25,7 +25,7 @@ jobs: - macos-latest - windows-latest node: - - 17 + - 16 - lts/* - current @@ -39,16 +39,13 @@ jobs: node-version: ${{ matrix.node }} - name: Install dependencies - run: npm ci + run: yarn install --frozen-lockfile - name: Run linter - run: npm run lint - - - name: Run TypeScript tests - run: npm run test:typescript + run: yarn lint - name: Run Node tests - run: npm run coverage:node + run: yarn test:node - name: Send code coverage results to Coveralls uses: coverallsapp/github-action@v1.1.0 @@ -77,19 +74,10 @@ jobs: node-version: lts/* - name: Install dependencies - run: npm ci + run: yarn install --frozen-lockfile - name: Run tests - run: npm run coverage:browser - env: - SAUCE_USERNAME: ${{ secrets.SAUCE_USERNAME }} - SAUCE_ACCESS_KEY: ${{ secrets.SAUCE_ACCESS_KEY }} - - - name: Combine code coverage data into a single file - shell: bash - run: | - ls -Rlh coverage/*/lcov.info - cat coverage/*/lcov.info > ./coverage/lcov.info + run: yarn test:browser - name: Send code coverage results to Coveralls uses: coverallsapp/github-action@v1.1.0 @@ -126,10 +114,10 @@ jobs: node-version: lts/* - name: Install dependencies - run: npm ci + run: yarn install --frozen-lockfile - name: Prepare Unscoped Package - run: npm run build --if-present + run: yarn build - name: Publish to NPM run: npx semantic-release diff --git a/.gitignore b/.gitignore index 587144d2..a43aeb26 100644 --- a/.gitignore +++ b/.gitignore @@ -38,3 +38,4 @@ node_modules # Test output /.nyc_output /coverage +dist diff --git a/.mocharc.yml b/.mocharc.yml deleted file mode 100644 index 329e70f6..00000000 --- a/.mocharc.yml +++ /dev/null @@ -1,11 +0,0 @@ -# Mocha options -# https://mochajs.org/#configuring-mocha-nodejs -# https://github.com/mochajs/mocha/blob/master/example/config/.mocharc.yml - -spec: test/specs/**/*.spec.js - -bail: true -recursive: true -async-only: true -timeout: "5000" -require: ./test/fixtures/polyfill.js diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 00000000..cdfd9a25 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,4 @@ +coverage +dist +node_modules +test/__snapshots__ \ No newline at end of file diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 00000000..a0c7ad6f --- /dev/null +++ b/.prettierrc @@ -0,0 +1,7 @@ +{ + "printWidth": 120, + "arrowParens": "always", + "semi": true, + "tabWidth": 2, + "trailingComma": "all" +} diff --git a/karma.conf.cjs b/karma.conf.cjs deleted file mode 100644 index 64037677..00000000 --- a/karma.conf.cjs +++ /dev/null @@ -1,78 +0,0 @@ -// Karma config -// https://karma-runner.github.io/0.12/config/configuration-file.html -// https://jstools.dev/karma-config/ - -"use strict"; - -const nodeUtil = require("util"); -const { buildConfig } = require("@jsdevtools/karma-config"); -const { host } = require("@jsdevtools/host-environment"); - -module.exports = (karma) => { - - const browsers = []; - const CI = isCI(); - browsers.push(CI ? "ChromeHeadless" : "Chrome"); - browsers.push(CI ? "FirefoxHeadless" : "Firefox"); - host.os.mac && browsers.push("Safari"); - host.os.windows && browsers.push("Edge"); - - const plugins = [ - require("@jsdevtools/karma-host-environment"), - require("karma-verbose-reporter"), - require("karma-mocha"), - require("karma-webpack"), - ] - plugins.push(require("karma-chrome-launcher")) - plugins.push(require("karma-firefox-launcher")) - host.os.mac && plugins.push(require("karma-safari-launcher")) - host.os.windows && plugins.push(require("@chiragrupani/karma-chromium-edge-launcher")) - plugins.push(require("karma-coverage-istanbul-reporter")) - - const config = buildConfig({ - sourceDir: "lib", - fixtures: "test/fixtures/**/*.js", - browsers: { - chrome: true, - firefox: true, - safari: host.os.mac, - edge: host.os.windows, - ie: false - }, - config: { - browsers: browsers, - plugins: plugins - } - }); - - config.files.push({ - pattern: "test/**/*.js", - type: "module" - }); - - if (config.logLevel !== karma.LOG_DISABLE) { - console.debug("Karma Config:\n", nodeUtil.inspect(config, { - depth: 10, - colors: true, - compact: false, - })); - } - - karma.set(config); -}; - -function isCI() { - let CI = environmentFlag("CI"); - let karmaCI = environmentFlag("KARMA_CI"); - - return Boolean(CI || karmaCI || host.ci); -}; - -function environmentFlag(name) { - let value = environmentVariable(name); - return !["", "false", "off", "no"].includes(value); -} - -function environmentVariable(name) { - return (process.env[name] || "").trim().toLowerCase(); -} diff --git a/lib/bundle.js b/lib/bundle.ts similarity index 56% rename from lib/bundle.js rename to lib/bundle.ts index 8019bd7c..9c9ee2b4 100644 --- a/lib/bundle.js +++ b/lib/bundle.ts @@ -1,6 +1,8 @@ import $Ref from "./ref.js"; import Pointer from "./pointer.js"; import * as url from "./util/url.js"; +import type $RefParserOptions from "./options.js"; +import type $Refs from "./refs.js"; export default bundle; @@ -9,14 +11,14 @@ export default bundle; * only has *internal* references, not any *external* references. * This method mutates the JSON schema object, adding new references and re-mapping existing ones. * - * @param {$RefParser} parser - * @param {$RefParserOptions} options + * @param parser + * @param options */ -function bundle (parser, options) { +function bundle(parser: any, options: any) { // console.log('Bundling $ref pointers in %s', parser.$refs._root$Ref.path); // Build an inventory of all $ref pointers in the JSON Schema - let inventory = []; + const inventory: any = []; crawl(parser, "schema", parser.$refs._root$Ref.path + "#", "#", 0, inventory, parser.$refs, options); // Remap all $ref pointers @@ -26,52 +28,58 @@ function bundle (parser, options) { /** * Recursively crawls the given value, and inventories all JSON references. * - * @param {object} parent - The object containing the value to crawl. If the value is not an object or array, it will be ignored. - * @param {string} key - The property key of `parent` to be crawled - * @param {string} path - The full path of the property being crawled, possibly with a JSON Pointer in the hash - * @param {string} pathFromRoot - The path of the property being crawled, from the schema root - * @param {object[]} inventory - An array of already-inventoried $ref pointers - * @param {$Refs} $refs - * @param {$RefParserOptions} options + * @param parent - The object containing the value to crawl. If the value is not an object or array, it will be ignored. + * @param key - The property key of `parent` to be crawled + * @param path - The full path of the property being crawled, possibly with a JSON Pointer in the hash + * @param pathFromRoot - The path of the property being crawled, from the schema root + * @param inventory - An array of already-inventoried $ref pointers + * @param $refs + * @param options */ -function crawl (parent, key, path, pathFromRoot, indirections, inventory, $refs, options) { - let obj = key === null ? parent : parent[key]; +function crawl( + parent: any, + key: any, + path: any, + pathFromRoot: any, + indirections: any, + inventory: any, + $refs: any, + options: any, +) { + const obj = key === null ? parent : parent[key]; if (obj && typeof obj === "object" && !ArrayBuffer.isView(obj)) { + // @ts-expect-error TS(2554): Expected 2 arguments, but got 1. if ($Ref.isAllowed$Ref(obj)) { inventory$Ref(parent, key, path, pathFromRoot, indirections, inventory, $refs, options); - } - else { + } else { // Crawl the object in a specific order that's optimized for bundling. // This is important because it determines how `pathFromRoot` gets built, // which later determines which keys get dereferenced and which ones get remapped - let keys = Object.keys(obj) - .sort((a, b) => { - // Most people will expect references to be bundled into the the "definitions" property, - // so we always crawl that property first, if it exists. - if (a === "definitions") { - return -1; - } - else if (b === "definitions") { - return 1; - } - else { - // Otherwise, crawl the keys based on their length. - // This produces the shortest possible bundled references - return a.length - b.length; - } - }); + const keys = Object.keys(obj).sort((a, b) => { + // Most people will expect references to be bundled into the the "definitions" property, + // so we always crawl that property first, if it exists. + if (a === "definitions") { + return -1; + } else if (b === "definitions") { + return 1; + } else { + // Otherwise, crawl the keys based on their length. + // This produces the shortest possible bundled references + return a.length - b.length; + } + }); // eslint-disable-next-line no-shadow - for (let key of keys) { - let keyPath = Pointer.join(path, key); - let keyPathFromRoot = Pointer.join(pathFromRoot, key); - let value = obj[key]; + for (const key of keys) { + const keyPath = Pointer.join(path, key); + const keyPathFromRoot = Pointer.join(pathFromRoot, key); + const value = obj[key]; + // @ts-expect-error TS(2554): Expected 2 arguments, but got 1. if ($Ref.isAllowed$Ref(value)) { inventory$Ref(obj, key, path, keyPathFromRoot, indirections, inventory, $refs, options); - } - else { + } else { crawl(obj, key, keyPath, keyPathFromRoot, indirections, inventory, $refs, options); } } @@ -83,53 +91,60 @@ function crawl (parent, key, path, pathFromRoot, indirections, inventory, $refs, * Inventories the given JSON Reference (i.e. records detailed information about it so we can * optimize all $refs in the schema), and then crawls the resolved value. * - * @param {object} $refParent - The object that contains a JSON Reference as one of its keys - * @param {string} $refKey - The key in `$refParent` that is a JSON Reference - * @param {string} path - The full path of the JSON Reference at `$refKey`, possibly with a JSON Pointer in the hash - * @param {string} pathFromRoot - The path of the JSON Reference at `$refKey`, from the schema root - * @param {object[]} inventory - An array of already-inventoried $ref pointers - * @param {$Refs} $refs - * @param {$RefParserOptions} options + * @param $refParent - The object that contains a JSON Reference as one of its keys + * @param $refKey - The key in `$refParent` that is a JSON Reference + * @param path - The full path of the JSON Reference at `$refKey`, possibly with a JSON Pointer in the hash + * @param pathFromRoot - The path of the JSON Reference at `$refKey`, from the schema root + * @param inventory - An array of already-inventoried $ref pointers + * @param $refs + * @param options */ -function inventory$Ref ($refParent, $refKey, path, pathFromRoot, indirections, inventory, $refs, options) { - let $ref = $refKey === null ? $refParent : $refParent[$refKey]; - let $refPath = url.resolve(path, $ref.$ref); - let pointer = $refs._resolve($refPath, pathFromRoot, options); +function inventory$Ref( + $refParent: any, + $refKey: any, + path: string, + pathFromRoot: any, + indirections: any, + inventory: any, + $refs: $Refs, + options: $RefParserOptions, +) { + const $ref = $refKey === null ? $refParent : $refParent[$refKey]; + const $refPath = url.resolve(path, $ref.$ref); + const pointer = $refs._resolve($refPath, pathFromRoot, options); if (pointer === null) { return; } - - let depth = Pointer.parse(pathFromRoot).length; - let file = url.stripHash(pointer.path); - let hash = url.getHash(pointer.path); - let external = file !== $refs._root$Ref.path; - let extended = $Ref.isExtended$Ref($ref); + const depth = Pointer.parse(pathFromRoot).length; + const file = url.stripHash(pointer.path); + const hash = url.getHash(pointer.path); + const external = file !== $refs._root$Ref.path; + const extended = $Ref.isExtended$Ref($ref); indirections += pointer.indirections; - let existingEntry = findInInventory(inventory, $refParent, $refKey); + const existingEntry = findInInventory(inventory, $refParent, $refKey); if (existingEntry) { // This $Ref has already been inventoried, so we don't need to process it again if (depth < existingEntry.depth || indirections < existingEntry.indirections) { removeFromInventory(inventory, existingEntry); - } - else { + } else { return; } } inventory.push({ - $ref, // The JSON Reference (e.g. {$ref: string}) - parent: $refParent, // The object that contains this $ref pointer - key: $refKey, // The key in `parent` that is the $ref pointer - pathFromRoot, // The path to the $ref pointer, from the JSON Schema root - depth, // How far from the JSON Schema root is this $ref pointer? - file, // The file that the $ref pointer resolves to - hash, // The hash within `file` that the $ref pointer resolves to - value: pointer.value, // The resolved value of the $ref pointer - circular: pointer.circular, // Is this $ref pointer DIRECTLY circular? (i.e. it references itself) - extended, // Does this $ref extend its resolved value? (i.e. it has extra properties, in addition to "$ref") - external, // Does this $ref pointer point to a file other than the main JSON Schema file? - indirections, // The number of indirect references that were traversed to resolve the value + $ref, // The JSON Reference (e.g. {$ref: string}) + parent: $refParent, // The object that contains this $ref pointer + key: $refKey, // The key in `parent` that is the $ref pointer + pathFromRoot, // The path to the $ref pointer, from the JSON Schema root + depth, // How far from the JSON Schema root is this $ref pointer? + file, // The file that the $ref pointer resolves to + hash, // The hash within `file` that the $ref pointer resolves to + value: pointer.value, // The resolved value of the $ref pointer + circular: pointer.circular, // Is this $ref pointer DIRECTLY circular? (i.e. it references itself) + extended, // Does this $ref extend its resolved value? (i.e. it has extra properties, in addition to "$ref") + external, // Does this $ref pointer point to a file other than the main JSON Schema file? + indirections, // The number of indirect references that were traversed to resolve the value }); // Recursively crawl the resolved value @@ -143,8 +158,7 @@ function inventory$Ref ($refParent, $refKey, path, pathFromRoot, indirections, i * Each referenced value is dereferenced EXACTLY ONCE. All subsequent references to the same * value are re-mapped to point to the first reference. * - * @example: - * { + * @example: { * first: { $ref: somefile.json#/some/part }, * second: { $ref: somefile.json#/another/part }, * third: { $ref: somefile.json }, @@ -159,46 +173,39 @@ function inventory$Ref ($refParent, $refKey, path, pathFromRoot, indirections, i * to be dereferenced, since they point to different parts of the file. The fourth reference does NOT * need to be dereferenced, because it can be remapped to point inside the first one. * - * @param {object[]} inventory + * @param inventory */ -function remap (inventory) { +function remap(inventory: any) { // Group & sort all the $ref pointers, so they're in the order that we need to dereference/remap them - inventory.sort((a, b) => { + inventory.sort((a: any, b: any) => { if (a.file !== b.file) { // Group all the $refs that point to the same file return a.file < b.file ? -1 : +1; - } - else if (a.hash !== b.hash) { + } else if (a.hash !== b.hash) { // Group all the $refs that point to the same part of the file return a.hash < b.hash ? -1 : +1; - } - else if (a.circular !== b.circular) { + } else if (a.circular !== b.circular) { // If the $ref points to itself, then sort it higher than other $refs that point to this $ref return a.circular ? -1 : +1; - } - else if (a.extended !== b.extended) { + } else if (a.extended !== b.extended) { // If the $ref extends the resolved value, then sort it lower than other $refs that don't extend the value return a.extended ? +1 : -1; - } - else if (a.indirections !== b.indirections) { + } else if (a.indirections !== b.indirections) { // Sort direct references higher than indirect references return a.indirections - b.indirections; - } - else if (a.depth !== b.depth) { + } else if (a.depth !== b.depth) { // Sort $refs by how close they are to the JSON Schema root return a.depth - b.depth; - } - else { + } else { // Determine how far each $ref is from the "definitions" property. // Most people will expect references to be bundled into the the "definitions" property if possible. - let aDefinitionsIndex = a.pathFromRoot.lastIndexOf("/definitions"); - let bDefinitionsIndex = b.pathFromRoot.lastIndexOf("/definitions"); + const aDefinitionsIndex = a.pathFromRoot.lastIndexOf("/definitions"); + const bDefinitionsIndex = b.pathFromRoot.lastIndexOf("/definitions"); if (aDefinitionsIndex !== bDefinitionsIndex) { // Give higher priority to the $ref that's closer to the "definitions" property return bDefinitionsIndex - aDefinitionsIndex; - } - else { + } else { // All else is equal, so use the shorter path, which will produce the shortest possible reference return a.pathFromRoot.length - b.pathFromRoot.length; } @@ -206,22 +213,19 @@ function remap (inventory) { }); let file, hash, pathFromRoot; - for (let entry of inventory) { + for (const entry of inventory) { // console.log('Re-mapping $ref pointer "%s" at %s', entry.$ref.$ref, entry.pathFromRoot); if (!entry.external) { // This $ref already resolves to the main JSON Schema file entry.$ref.$ref = entry.hash; - } - else if (entry.file === file && entry.hash === hash) { + } else if (entry.file === file && entry.hash === hash) { // This $ref points to the same value as the prevous $ref, so remap it to the same path entry.$ref.$ref = pathFromRoot; - } - else if (entry.file === file && entry.hash.indexOf(hash + "/") === 0) { + } else if (entry.file === file && entry.hash.indexOf(hash + "/") === 0) { // This $ref points to a sub-value of the prevous $ref, so remap it beneath that path entry.$ref.$ref = Pointer.join(pathFromRoot, Pointer.parse(entry.hash.replace(hash, "#"))); - } - else { + } else { // We've moved to a new file or new hash file = entry.file; hash = entry.hash; @@ -244,16 +248,16 @@ function remap (inventory) { /** * TODO */ -function findInInventory (inventory, $refParent, $refKey) { +function findInInventory(inventory: any, $refParent: any, $refKey: any) { for (let i = 0; i < inventory.length; i++) { - let existingEntry = inventory[i]; + const existingEntry = inventory[i]; if (existingEntry.parent === $refParent && existingEntry.key === $refKey) { return existingEntry; } } } -function removeFromInventory (inventory, entry) { - let index = inventory.indexOf(entry); +function removeFromInventory(inventory: any, entry: any) { + const index = inventory.indexOf(entry); inventory.splice(index, 1); } diff --git a/lib/dereference.js b/lib/dereference.ts similarity index 54% rename from lib/dereference.js rename to lib/dereference.ts index 968218fe..f07216ad 100644 --- a/lib/dereference.js +++ b/lib/dereference.ts @@ -2,6 +2,8 @@ import $Ref from "./ref.js"; import Pointer from "./pointer.js"; import { ono } from "@jsdevtools/ono"; import * as url from "./util/url.js"; +import type $Refs from "./refs.js"; +import type $RefParserOptions from "./options.js"; export default dereference; @@ -9,12 +11,21 @@ export default dereference; * Crawls the JSON schema, finds all JSON references, and dereferences them. * This method mutates the JSON schema object, replacing JSON references with their resolved value. * - * @param {$RefParser} parser - * @param {$RefParserOptions} options + * @param parser + * @param options */ -function dereference (parser, options) { +function dereference(parser: any, options: any) { // console.log('Dereferencing $ref pointers in %s', parser.$refs._root$Ref.path); - let dereferenced = crawl(parser.schema, parser.$refs._root$Ref.path, "#", new Set(), new Set(), new Map(), parser.$refs, options); + const dereferenced = crawl( + parser.schema, + parser.$refs._root$Ref.path, + "#", + new Set(), + new Set(), + new Map(), + parser.$refs, + options, + ); parser.$refs.circular = dereferenced.circular; parser.schema = dereferenced.value; } @@ -22,24 +33,33 @@ function dereference (parser, options) { /** * Recursively crawls the given value, and dereferences any JSON references. * - * @param {*} obj - The value to crawl. If it's not an object or array, it will be ignored. - * @param {string} path - The full path of `obj`, possibly with a JSON Pointer in the hash - * @param {string} pathFromRoot - The path of `obj` from the schema root - * @param {Set} parents - An array of the parent objects that have already been dereferenced - * @param {Set} processedObjects - An array of all the objects that have already been processed - * @param {Map} dereferencedCache - An map of all the dereferenced objects - * @param {$Refs} $refs - * @param {$RefParserOptions} options - * @returns {{value: object, circular: boolean}} + * @param obj - The value to crawl. If it's not an object or array, it will be ignored. + * @param path - The full path of `obj`, possibly with a JSON Pointer in the hash + * @param pathFromRoot - The path of `obj` from the schema root + * @param parents - An array of the parent objects that have already been dereferenced + * @param processedObjects - An array of all the objects that have already been processed + * @param dereferencedCache - An map of all the dereferenced objects + * @param $refs + * @param options + * @returns */ -function crawl (obj, path, pathFromRoot, parents, processedObjects, dereferencedCache, $refs, options) { +function crawl( + obj: any, + path: string, + pathFromRoot: string, + parents: Set, + processedObjects: Set, + dereferencedCache: any, + $refs: $Refs, + options: $RefParserOptions, +) { let dereferenced; - let result = { + const result = { value: obj, - circular: false + circular: false, }; - let isExcludedPath = options.dereference.excludedPathMatcher; + const isExcludedPath = options.dereference.excludedPathMatcher || (() => false); if (options.dereference.circular === "ignore" || !processedObjects.has(obj)) { if (obj && typeof obj === "object" && !ArrayBuffer.isView(obj) && !isExcludedPath(pathFromRoot)) { @@ -47,24 +67,41 @@ function crawl (obj, path, pathFromRoot, parents, processedObjects, dereferenced processedObjects.add(obj); if ($Ref.isAllowed$Ref(obj, options)) { - dereferenced = dereference$Ref(obj, path, pathFromRoot, parents, processedObjects, dereferencedCache, $refs, options); + dereferenced = dereference$Ref( + obj, + path, + pathFromRoot, + parents, + processedObjects, + dereferencedCache, + $refs, + options, + ); result.circular = dereferenced.circular; result.value = dereferenced.value; - } - else { + } else { for (const key of Object.keys(obj)) { - let keyPath = Pointer.join(path, key); - let keyPathFromRoot = Pointer.join(pathFromRoot, key); + const keyPath = Pointer.join(path, key); + const keyPathFromRoot = Pointer.join(pathFromRoot, key); if (isExcludedPath(keyPathFromRoot)) { continue; } - let value = obj[key]; + const value = obj[key]; let circular = false; if ($Ref.isAllowed$Ref(value, options)) { - dereferenced = dereference$Ref(value, keyPath, keyPathFromRoot, parents, processedObjects, dereferencedCache, $refs, options); + dereferenced = dereference$Ref( + value, + keyPath, + keyPathFromRoot, + parents, + processedObjects, + dereferencedCache, + $refs, + options, + ); circular = dereferenced.circular; // Avoid pointless mutations; breaks frozen objects to no profit if (obj[key] !== dereferenced.value) { @@ -73,17 +110,24 @@ function crawl (obj, path, pathFromRoot, parents, processedObjects, dereferenced options.dereference.onDereference(value.$ref, obj[key]); } } - } - else { + } else { if (!parents.has(value)) { - dereferenced = crawl(value, keyPath, keyPathFromRoot, parents, processedObjects, dereferencedCache, $refs, options); + dereferenced = crawl( + value, + keyPath, + keyPathFromRoot, + parents, + processedObjects, + dereferencedCache, + $refs, + options, + ); circular = dereferenced.circular; // Avoid pointless mutations; breaks frozen objects to no profit if (obj[key] !== dereferenced.value) { obj[key] = dereferenced.value; } - } - else { + } else { circular = foundCircularReference(keyPath, $refs, options); } } @@ -103,28 +147,38 @@ function crawl (obj, path, pathFromRoot, parents, processedObjects, dereferenced /** * Dereferences the given JSON Reference, and then crawls the resulting value. * - * @param {{$ref: string}} $ref - The JSON Reference to resolve - * @param {string} path - The full path of `$ref`, possibly with a JSON Pointer in the hash - * @param {string} pathFromRoot - The path of `$ref` from the schema root - * @param {Set} parents - An array of the parent objects that have already been dereferenced - * @param {Set} processedObjects - An array of all the objects that have already been dereferenced - * @param {Map} dereferencedCache - An map of all the dereferenced objects - * @param {$Refs} $refs - * @param {$RefParserOptions} options - * @returns {{value: object, circular: boolean}} + * @param $ref - The JSON Reference to resolve + * @param path - The full path of `$ref`, possibly with a JSON Pointer in the hash + * @param pathFromRoot - The path of `$ref` from the schema root + * @param parents - An array of the parent objects that have already been dereferenced + * @param processedObjects - An array of all the objects that have already been dereferenced + * @param dereferencedCache - An map of all the dereferenced objects + * @param $refs + * @param options + * @returns */ -function dereference$Ref ($ref, path, pathFromRoot, parents, processedObjects, dereferencedCache, $refs, options) { +function dereference$Ref( + $ref: any, + path: any, + pathFromRoot: any, + parents: any, + processedObjects: any, + dereferencedCache: any, + $refs: any, + options: any, +) { // console.log('Dereferencing $ref pointer "%s" at %s', $ref.$ref, path); - let $refPath = url.resolve(path, $ref.$ref); + const $refPath = url.resolve(path, $ref.$ref); const cache = dereferencedCache.get($refPath); if (cache) { const refKeys = Object.keys($ref); if (refKeys.length > 1) { const extraKeys = {}; - for (let key of refKeys) { + for (const key of refKeys) { if (key !== "$ref" && !(key in cache.value)) { + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message extraKeys[key] = $ref[key]; } } @@ -137,8 +191,7 @@ function dereference$Ref ($ref, path, pathFromRoot, parents, processedObjects, d return cache; } - - let pointer = $refs._resolve($refPath, path, options); + const pointer = $refs._resolve($refPath, path, options); if (pointer === null) { return { @@ -148,7 +201,7 @@ function dereference$Ref ($ref, path, pathFromRoot, parents, processedObjects, d } // Check for circular references - let directCircular = pointer.circular; + const directCircular = pointer.circular; let circular = directCircular || parents.has(pointer.value); circular && foundCircularReference(path, $refs, options); @@ -158,7 +211,16 @@ function dereference$Ref ($ref, path, pathFromRoot, parents, processedObjects, d // Crawl the dereferenced value (unless it's circular) if (!circular) { // Determine if the dereferenced value is circular - let dereferenced = crawl(dereferencedValue, pointer.path, pathFromRoot, parents, processedObjects, dereferencedCache, $refs, options); + const dereferenced = crawl( + dereferencedValue, + pointer.path, + pathFromRoot, + parents, + processedObjects, + dereferencedCache, + $refs, + options, + ); circular = dereferenced.circular; dereferencedValue = dereferenced.value; } @@ -174,10 +236,9 @@ function dereference$Ref ($ref, path, pathFromRoot, parents, processedObjects, d dereferencedValue.$ref = pathFromRoot; } - const dereferencedObject = { circular, - value: dereferencedValue + value: dereferencedValue, }; // only cache if no extra properties than $ref @@ -192,12 +253,12 @@ function dereference$Ref ($ref, path, pathFromRoot, parents, processedObjects, d * Called when a circular reference is found. * It sets the {@link $Refs#circular} flag, and throws an error if options.dereference.circular is false. * - * @param {string} keyPath - The JSON Reference path of the circular reference - * @param {$Refs} $refs - * @param {$RefParserOptions} options - * @returns {boolean} - always returns true, to indicate that a circular reference was found + * @param keyPath - The JSON Reference path of the circular reference + * @param $refs + * @param options + * @returns - always returns true, to indicate that a circular reference was found */ -function foundCircularReference (keyPath, $refs, options) { +function foundCircularReference(keyPath: any, $refs: any, options: any) { $refs.circular = true; if (!options.dereference.circular) { throw ono.reference(`Circular $ref pointer found at ${keyPath}`); diff --git a/lib/index.d.ts b/lib/index.d.ts deleted file mode 100644 index a62a8fda..00000000 --- a/lib/index.d.ts +++ /dev/null @@ -1,496 +0,0 @@ -import { JSONSchema4, JSONSchema4Object, JSONSchema4Type, JSONSchema6, JSONSchema6Object, JSONSchema6Type, JSONSchema7, JSONSchema7Object, JSONSchema7Type } from "json-schema"; - -export = $RefParser; - -/** - * This is the default export of JSON Schema $Ref Parser. You can creates instances of this class using new $RefParser(), or you can just call its static methods. - * - * See https://apitools.dev/json-schema-ref-parser/docs/ref-parser.html - */ -declare class $RefParser { - - /** - * The `schema` property is the parsed/bundled/dereferenced JSON Schema object. This is the same value that is passed to the callback function (or Promise) when calling the parse, bundle, or dereference methods. - * - * See https://apitools.dev/json-schema-ref-parser/docs/ref-parser.html#schema - */ - public schema: $RefParser.JSONSchema; - - /** - * The $refs property is a `$Refs` object, which lets you access all of the externally-referenced files in the schema, as well as easily get and set specific values in the schema using JSON pointers. - * - * This is the same value that is passed to the callback function (or Promise) when calling the `resolve` method. - * - * See https://apitools.dev/json-schema-ref-parser/docs/ref-parser.html#refs - */ - public $refs: $RefParser.$Refs; - - /** - * Dereferences all `$ref` pointers in the JSON Schema, replacing each reference with its resolved value. This results in a schema object that does not contain any `$ref` pointers. Instead, it's a normal JavaScript object tree that can easily be crawled and used just like any other JavaScript object. This is great for programmatic usage, especially when using tools that don't understand JSON references. - * - * The dereference method maintains object reference equality, meaning that all `$ref` pointers that point to the same object will be replaced with references to the same object. Again, this is great for programmatic usage, but it does introduce the risk of circular references, so be careful if you intend to serialize the schema using `JSON.stringify()`. Consider using the bundle method instead, which does not create circular references. - * - * See https://apitools.dev/json-schema-ref-parser/docs/ref-parser.html#dereferenceschema-options-callback - * - * @param schema A JSON Schema object, or the file path or URL of a JSON Schema file. See the `parse` method for more info. - * @param options (optional) - * @param callback (optional) A callback that will receive the dereferenced schema object - */ - public dereference(schema: string | $RefParser.JSONSchema, callback: $RefParser.SchemaCallback): void; - public dereference(schema: string | $RefParser.JSONSchema, options: $RefParser.Options, callback: $RefParser.SchemaCallback): void; - public dereference(baseUrl: string, schema: string | $RefParser.JSONSchema, options: $RefParser.Options, callback: $RefParser.SchemaCallback): void; - public dereference(schema: string | $RefParser.JSONSchema): Promise<$RefParser.JSONSchema>; - public dereference(schema: string | $RefParser.JSONSchema, options: $RefParser.Options): Promise<$RefParser.JSONSchema>; - public dereference(baseUrl: string, schema: string | $RefParser.JSONSchema, options: $RefParser.Options): Promise<$RefParser.JSONSchema>; - - /** - * Dereferences all `$ref` pointers in the JSON Schema, replacing each reference with its resolved value. This results in a schema object that does not contain any `$ref` pointers. Instead, it's a normal JavaScript object tree that can easily be crawled and used just like any other JavaScript object. This is great for programmatic usage, especially when using tools that don't understand JSON references. - * - * The dereference method maintains object reference equality, meaning that all `$ref` pointers that point to the same object will be replaced with references to the same object. Again, this is great for programmatic usage, but it does introduce the risk of circular references, so be careful if you intend to serialize the schema using `JSON.stringify()`. Consider using the bundle method instead, which does not create circular references. - * - * See https://apitools.dev/json-schema-ref-parser/docs/ref-parser.html#dereferenceschema-options-callback - * - * @param schema A JSON Schema object, or the file path or URL of a JSON Schema file. See the `parse` method for more info. - * @param options (optional) - * @param callback (optional) A callback that will receive the dereferenced schema object - */ - public static dereference(schema: string | $RefParser.JSONSchema, callback: $RefParser.SchemaCallback): void; - public static dereference(schema: string | $RefParser.JSONSchema, options: $RefParser.Options, callback: $RefParser.SchemaCallback): void; - public static dereference(baseUrl: string, schema: string | $RefParser.JSONSchema, options: $RefParser.Options, callback: $RefParser.SchemaCallback): void; - public static dereference(schema: string | $RefParser.JSONSchema): Promise<$RefParser.JSONSchema>; - public static dereference(schema: string | $RefParser.JSONSchema, options: $RefParser.Options): Promise<$RefParser.JSONSchema>; - public static dereference(baseUrl: string, schema: string | $RefParser.JSONSchema, options: $RefParser.Options): Promise<$RefParser.JSONSchema>; - - /** - * Bundles all referenced files/URLs into a single schema that only has internal `$ref` pointers. This lets you split-up your schema however you want while you're building it, but easily combine all those files together when it's time to package or distribute the schema to other people. The resulting schema size will be small, since it will still contain internal JSON references rather than being fully-dereferenced. - * - * This also eliminates the risk of circular references, so the schema can be safely serialized using `JSON.stringify()`. - * - * See https://apitools.dev/json-schema-ref-parser/docs/ref-parser.html#bundleschema-options-callback - * - * @param schema A JSON Schema object, or the file path or URL of a JSON Schema file. See the `parse` method for more info. - * @param options (optional) - * @param callback (optional) A callback that will receive the bundled schema object - */ - public bundle(schema: string | $RefParser.JSONSchema, callback: $RefParser.SchemaCallback): void; - public bundle(schema: string | $RefParser.JSONSchema, options: $RefParser.Options, callback: $RefParser.SchemaCallback): void; - public bundle(baseUrl: string, schema: string | $RefParser.JSONSchema, options: $RefParser.Options, callback: $RefParser.SchemaCallback): void; - public bundle(schema: string | $RefParser.JSONSchema): Promise<$RefParser.JSONSchema>; - public bundle(schema: string | $RefParser.JSONSchema, options: $RefParser.Options): Promise<$RefParser.JSONSchema>; - public bundle(baseUrl: string, schema: string | $RefParser.JSONSchema, options: $RefParser.Options): Promise<$RefParser.JSONSchema>; - - /** - * Bundles all referenced files/URLs into a single schema that only has internal `$ref` pointers. This lets you split-up your schema however you want while you're building it, but easily combine all those files together when it's time to package or distribute the schema to other people. The resulting schema size will be small, since it will still contain internal JSON references rather than being fully-dereferenced. - * - * This also eliminates the risk of circular references, so the schema can be safely serialized using `JSON.stringify()`. - * - * See https://apitools.dev/json-schema-ref-parser/docs/ref-parser.html#bundleschema-options-callback - * - * @param schema A JSON Schema object, or the file path or URL of a JSON Schema file. See the `parse` method for more info. - * @param options (optional) - * @param callback (optional) A callback that will receive the bundled schema object - */ - public static bundle(schema: string | $RefParser.JSONSchema, callback: $RefParser.SchemaCallback): void; - public static bundle(schema: string | $RefParser.JSONSchema, options: $RefParser.Options, callback: $RefParser.SchemaCallback): void; - public static bundle(baseUrl: string, schema: string | $RefParser.JSONSchema, options: $RefParser.Options, callback: $RefParser.SchemaCallback): void; - public static bundle(schema: string | $RefParser.JSONSchema): Promise<$RefParser.JSONSchema>; - public static bundle(schema: string | $RefParser.JSONSchema, options: $RefParser.Options): Promise<$RefParser.JSONSchema>; - public static bundle(baseUrl: string, schema: string | $RefParser.JSONSchema, options: $RefParser.Options): Promise<$RefParser.JSONSchema>; - - /** - * *This method is used internally by other methods, such as `bundle` and `dereference`. You probably won't need to call this method yourself.* - * - * Parses the given JSON Schema file (in JSON or YAML format), and returns it as a JavaScript object. This method `does not` resolve `$ref` pointers or dereference anything. It simply parses one file and returns it. - * - * See https://apitools.dev/json-schema-ref-parser/docs/ref-parser.html#parseschema-options-callback - * - * @param schema A JSON Schema object, or the file path or URL of a JSON Schema file. The path can be absolute or relative. In Node, the path is relative to `process.cwd()`. In the browser, it's relative to the URL of the page. - * @param options (optional) - * @param callback (optional) A callback that will receive the parsed schema object, or an error - */ - public parse(schema: string | $RefParser.JSONSchema, callback: $RefParser.SchemaCallback): void; - public parse(schema: string | $RefParser.JSONSchema, options: $RefParser.Options, callback: $RefParser.SchemaCallback): void; - public parse(baseUrl: string, schema: string | $RefParser.JSONSchema, options: $RefParser.Options, callback: $RefParser.SchemaCallback): void; - public parse(schema: string | $RefParser.JSONSchema): Promise<$RefParser.JSONSchema>; - public parse(schema: string | $RefParser.JSONSchema, options: $RefParser.Options): Promise<$RefParser.JSONSchema>; - public parse(baseUrl: string, schema: string | $RefParser.JSONSchema, options: $RefParser.Options): Promise<$RefParser.JSONSchema>; - - /** - * *This method is used internally by other methods, such as `bundle` and `dereference`. You probably won't need to call this method yourself.* - * - * Parses the given JSON Schema file (in JSON or YAML format), and returns it as a JavaScript object. This method `does not` resolve `$ref` pointers or dereference anything. It simply parses one file and returns it. - * - * See https://apitools.dev/json-schema-ref-parser/docs/ref-parser.html#parseschema-options-callback - * - * @param schema A JSON Schema object, or the file path or URL of a JSON Schema file. The path can be absolute or relative. In Node, the path is relative to `process.cwd()`. In the browser, it's relative to the URL of the page. - * @param options (optional) - * @param callback (optional) A callback that will receive the parsed schema object, or an error - */ - public static parse(schema: string | $RefParser.JSONSchema, callback: $RefParser.SchemaCallback): void; - public static parse(schema: string | $RefParser.JSONSchema, options: $RefParser.Options, callback: $RefParser.SchemaCallback): void; - public static parse(baseUrl: string, schema: string | $RefParser.JSONSchema, options: $RefParser.Options, callback: $RefParser.SchemaCallback): void; - public static parse(schema: string | $RefParser.JSONSchema): Promise<$RefParser.JSONSchema>; - public static parse(schema: string | $RefParser.JSONSchema, options: $RefParser.Options): Promise<$RefParser.JSONSchema>; - public static parse(baseUrl: string, schema: string | $RefParser.JSONSchema, options: $RefParser.Options): Promise<$RefParser.JSONSchema>; - - /** - * *This method is used internally by other methods, such as `bundle` and `dereference`. You probably won't need to call this method yourself.* - * - * Resolves all JSON references (`$ref` pointers) in the given JSON Schema file. If it references any other files/URLs, then they will be downloaded and resolved as well. This method **does not** dereference anything. It simply gives you a `$Refs` object, which is a map of all the resolved references and their values. - * - * See https://apitools.dev/json-schema-ref-parser/docs/ref-parser.html#resolveschema-options-callback - * - * @param schema A JSON Schema object, or the file path or URL of a JSON Schema file. See the `parse` method for more info. - * @param options (optional) - * @param callback (optional) A callback that will receive a `$Refs` object - */ - public resolve(schema: string | $RefParser.JSONSchema, callback: $RefParser.$RefsCallback): void; - public resolve(schema: string | $RefParser.JSONSchema, options: $RefParser.Options, callback: $RefParser.$RefsCallback): void; - public resolve(baseUrl: string, schema: string | $RefParser.JSONSchema, options: $RefParser.Options, callback: $RefParser.$RefsCallback): void; - public resolve(schema: string | $RefParser.JSONSchema): Promise<$RefParser.$Refs>; - public resolve(schema: string | $RefParser.JSONSchema, options: $RefParser.Options): Promise<$RefParser.$Refs>; - public resolve(baseUrl: string, schema: string | $RefParser.JSONSchema, options: $RefParser.Options): Promise<$RefParser.$Refs>; - - /** - * *This method is used internally by other methods, such as `bundle` and `dereference`. You probably won't need to call this method yourself.* - * - * Resolves all JSON references (`$ref` pointers) in the given JSON Schema file. If it references any other files/URLs, then they will be downloaded and resolved as well. This method **does not** dereference anything. It simply gives you a `$Refs` object, which is a map of all the resolved references and their values. - * - * See https://apitools.dev/json-schema-ref-parser/docs/ref-parser.html#resolveschema-options-callback - * - * @param schema A JSON Schema object, or the file path or URL of a JSON Schema file. See the `parse` method for more info. - * @param options (optional) - * @param callback (optional) A callback that will receive a `$Refs` object - */ - public static resolve(schema: string | $RefParser.JSONSchema, callback: $RefParser.$RefsCallback): void; - public static resolve(schema: string | $RefParser.JSONSchema, options: $RefParser.Options, callback: $RefParser.$RefsCallback): void; - public static resolve(baseUrl: string, schema: string | $RefParser.JSONSchema, options: $RefParser.Options, callback: $RefParser.$RefsCallback): void; - public static resolve(schema: string | $RefParser.JSONSchema): Promise<$RefParser.$Refs>; - public static resolve(schema: string | $RefParser.JSONSchema, options: $RefParser.Options): Promise<$RefParser.$Refs>; - public static resolve(baseUrl: string, schema: string | $RefParser.JSONSchema, options: $RefParser.Options): Promise<$RefParser.$Refs>; -} - -// eslint-disable-next-line no-redeclare -declare namespace $RefParser { - - export type JSONSchema = JSONSchema4 | JSONSchema6 | JSONSchema7; - export type JSONSchemaObject = JSONSchema4Object | JSONSchema6Object | JSONSchema7Object; - export type SchemaCallback = (err: Error | null, schema?: JSONSchema) => any; - export type $RefsCallback = (err: Error | null, $refs?: $Refs) => any; - - /** - * See https://apitools.dev/json-schema-ref-parser/docs/options.html - */ - export interface Options { - - /** - * The `parse` options determine how different types of files will be parsed. - * - * JSON Schema `$Ref` Parser comes with built-in JSON, YAML, plain-text, and binary parsers, any of which you can configure or disable. You can also add your own custom parsers if you want. - */ - parse?: { - json?: ParserOptions | boolean; - yaml?: ParserOptions | boolean; - text?: (ParserOptions & { encoding?: string }) | boolean; - [key: string]: ParserOptions | boolean | undefined; - }; - - /** - * The `resolve` options control how JSON Schema $Ref Parser will resolve file paths and URLs, and how those files will be read/downloaded. - * - * JSON Schema `$Ref` Parser comes with built-in support for HTTP and HTTPS, as well as support for local files (when running in Node.js). You can configure or disable either of these built-in resolvers. You can also add your own custom resolvers if you want. - */ - resolve?: { - - /** - * Determines whether external $ref pointers will be resolved. If this option is disabled, then external `$ref` pointers will simply be ignored. - */ - external?: boolean; - file?: Partial | boolean; - http?: HTTPResolverOptions | boolean; - } & { - [key: string]: Partial | HTTPResolverOptions | boolean | undefined; - }; - - /** - * By default, JSON Schema $Ref Parser throws the first error it encounters. Setting `continueOnError` to `true` - * causes it to keep processing as much as possible and then throw a single error that contains all errors - * that were encountered. - */ - continueOnError?: boolean; - - /** - * The `dereference` options control how JSON Schema `$Ref` Parser will dereference `$ref` pointers within the JSON schema. - */ - dereference?: { - - /** - * Determines whether circular `$ref` pointers are handled. - * - * If set to `false`, then a `ReferenceError` will be thrown if the schema contains any circular references. - * - * If set to `"ignore"`, then circular references will simply be ignored. No error will be thrown, but the `$Refs.circular` property will still be set to `true`. - */ - circular?: boolean | "ignore"; - - /** - * A function, called for each path, which can return true to stop this path and all - * subpaths from being dereferenced further. This is useful in schemas where some - * subpaths contain literal $ref keys that should not be dereferenced. - */ - excludedPathMatcher?(path: string): boolean; - - /** - * Callback invoked during dereferencing. - * - * @argument {string} path The path being dereferenced (ie. the `$ref` string). - * @argument {JSONSchemaObject} object The JSON-Schema that the `$ref` resolved to. - */ - onDereference?(path: string, value: JSONSchemaObject): void; - }; - } - - export interface HTTPResolverOptions extends Partial { - - /** - * You can specify any HTTP headers that should be sent when downloading files. For example, some servers may require you to set the `Accept` or `Referrer` header. - */ - headers?: object; - - /** - * The amount of time (in milliseconds) to wait for a response from the server when downloading files. The default is 5 seconds. - */ - timeout?: number; - - /** - * The maximum number of HTTP redirects to follow per file. The default is 5. To disable automatic following of redirects, set this to zero. - */ - redirects?: number; - - /** - * Set this to `true` if you're downloading files from a CORS-enabled server that requires authentication - */ - withCredentials?: boolean; - } - - /** - * JSON Schema `$Ref` Parser comes with built-in resolvers for HTTP and HTTPS URLs, as well as local filesystem paths (when running in Node.js). You can add your own custom resolvers to support additional protocols, or even replace any of the built-in resolvers with your own custom implementation. - * - * See https://apitools.dev/json-schema-ref-parser/docs/plugins/resolvers.html - */ - export interface ResolverOptions { - - /** - * All resolvers have an order property, even the built-in resolvers. If you don't specify an order property, then your resolver will run last. Specifying `order: 1`, like we did in this example, will make your resolver run first. Or you can squeeze your resolver in-between some of the built-in resolvers. For example, `order: 101` would make it run after the file resolver, but before the HTTP resolver. You can see the order of all the built-in resolvers by looking at their source code. - * - * The order property and canRead property are related to each other. For each file that JSON Schema $Ref Parser needs to resolve, it first determines which resolvers can read that file by checking their canRead property. If only one resolver matches a file, then only that one resolver is called, regardless of its order. If multiple resolvers match a file, then those resolvers are tried in order until one of them successfully reads the file. Once a resolver successfully reads the file, the rest of the resolvers are skipped. - */ - order?: number; - - /** - * The `canRead` property tells JSON Schema `$Ref` Parser what kind of files your resolver can read. In this example, we've simply specified a regular expression that matches "mogodb://" URLs, but we could have used a simple boolean, or even a function with custom logic to determine which files to resolve. Here are examples of each approach: - */ - canRead: boolean | RegExp | string | string[] | ((file: FileInfo) => boolean); - - /** - * This is where the real work of a resolver happens. The `read` method accepts the same file info object as the `canRead` function, but rather than returning a boolean value, the `read` method should return the contents of the file. The file contents should be returned in as raw a form as possible, such as a string or a byte array. Any further parsing or processing should be done by parsers. - * - * Unlike the `canRead` function, the `read` method can also be asynchronous. This might be important if your resolver needs to read data from a database or some other external source. You can return your asynchronous value using either an ES6 Promise or a Node.js-style error-first callback. Of course, if your resolver has the ability to return its data synchronously, then that's fine too. Here are examples of all three approaches: - */ - read( - file: FileInfo, - callback?: (error: Error | null, data: string | null) => any - ): string | Buffer | JSONSchema | Promise; - } - - export interface ParserOptions { - - /** - * Parsers run in a specific order, relative to other parsers. For example, a parser with `order: 5` will run before a parser with `order: 10`. If a parser is unable to successfully parse a file, then the next parser is tried, until one succeeds or they all fail. - * - * You can change the order in which parsers run, which is useful if you know that most of your referenced files will be a certain type, or if you add your own custom parser that you want to run first. - */ - order?: number; - - /** - * All of the built-in parsers allow empty files by default. The JSON and YAML parsers will parse empty files as `undefined`. The text parser will parse empty files as an empty string. The binary parser will parse empty files as an empty byte array. - * - * You can set `allowEmpty: false` on any parser, which will cause an error to be thrown if a file empty. - */ - allowEmpty?: boolean; - - /** - * Determines which parsers will be used for which files. - * - * A regular expression can be used to match files by their full path. A string (or array of strings) can be used to match files by their file extension. Or a function can be used to perform more complex matching logic. See the custom parser docs for details. - */ - canParse?: boolean | RegExp | string | string[] | ((file: FileInfo) => boolean); - - /** - * This is where the real work of a parser happens. The `parse` method accepts the same file info object as the `canParse` function, but rather than returning a boolean value, the `parse` method should return a JavaScript representation of the file contents. For our CSV parser, that is a two-dimensional array of lines and values. For your parser, it might be an object, a string, a custom class, or anything else. - * - * Unlike the `canParse` function, the `parse` method can also be asynchronous. This might be important if your parser needs to retrieve data from a database or if it relies on an external HTTP service to return the parsed value. You can return your asynchronous value via a [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) or a Node.js-style error-first callback. Here are examples of both approaches: - */ - parse( - file: FileInfo, - callback?: (error: Error | null, data: string | null) => any - ): unknown | Promise; - } - - /** - * JSON Schema `$Ref` Parser supports plug-ins, such as resolvers and parsers. These plug-ins can have methods such as `canRead()`, `read()`, `canParse()`, and `parse()`. All of these methods accept the same object as their parameter: an object containing information about the file being read or parsed. - * - * The file info object currently only consists of a few properties, but it may grow in the future if plug-ins end up needing more information. - * - * See https://apitools.dev/json-schema-ref-parser/docs/plugins/file-info-object.html - */ - export interface FileInfo { - - /** - * The full URL of the file. This could be any type of URL, including "http://", "https://", "file://", "ftp://", "mongodb://", or even a local filesystem path (when running in Node.js). - */ - url: string; - - /** - * The lowercase file extension, such as ".json", ".yaml", ".txt", etc. - */ - extension: string; - - /** - * The raw file contents, in whatever form they were returned by the resolver that read the file. - */ - data: string | Buffer; - } - - /** - * When you call the resolve method, the value that gets passed to the callback function (or Promise) is a $Refs object. This same object is accessible via the parser.$refs property of $RefParser objects. - * - * This object is a map of JSON References and their resolved values. It also has several convenient helper methods that make it easy for you to navigate and manipulate the JSON References. - * - * See https://apitools.dev/json-schema-ref-parser/docs/refs.html - */ - export class $Refs { - /** - * This property is true if the schema contains any circular references. You may want to check this property before serializing the dereferenced schema as JSON, since JSON.stringify() does not support circular references by default. - * - * See https://apitools.dev/json-schema-ref-parser/docs/refs.html#circular - */ - public circular: boolean; - - /** - * Returns the paths/URLs of all the files in your schema (including the main schema file). - * - * See https://apitools.dev/json-schema-ref-parser/docs/refs.html#pathstypes - * - * @param types (optional) Optionally only return certain types of paths ("file", "http", etc.) - */ - public paths(...types: string[]): string[] - - /** - * Returns a map of paths/URLs and their correspond values. - * - * See https://apitools.dev/json-schema-ref-parser/docs/refs.html#valuestypes - * - * @param types (optional) Optionally only return values from certain locations ("file", "http", etc.) - */ - public values(...types: string[]): { [url: string]: $RefParser.JSONSchema } - - /** - * Returns `true` if the given path exists in the schema; otherwise, returns `false` - * - * See https://apitools.dev/json-schema-ref-parser/docs/refs.html#existsref - * - * @param $ref The JSON Reference path, optionally with a JSON Pointer in the hash - */ - public exists($ref: string): boolean - - /** - * Gets the value at the given path in the schema. Throws an error if the path does not exist. - * - * See https://apitools.dev/json-schema-ref-parser/docs/refs.html#getref - * - * @param $ref The JSON Reference path, optionally with a JSON Pointer in the hash - */ - public get($ref: string): JSONSchema4Type | JSONSchema6Type | JSONSchema7Type - - /** - * Sets the value at the given path in the schema. If the property, or any of its parents, don't exist, they will be created. - * - * @param $ref The JSON Reference path, optionally with a JSON Pointer in the hash - * @param value The value to assign. Can be anything (object, string, number, etc.) - */ - public set($ref: string, value: JSONSchema4Type | JSONSchema6Type | JSONSchema7Type): void - } - - export type JSONParserErrorType = "EUNKNOWN" | "EPARSER" | "EUNMATCHEDPARSER" | "ERESOLVER" | "EUNMATCHEDRESOLVER" | "EMISSINGPOINTER" | "EINVALIDPOINTER"; - - export class JSONParserError extends Error { - public constructor(message: string, source: string); - - public readonly name: string; - public readonly message: string; - public readonly source: string; - public readonly path: Array; - public readonly errors: string; - public readonly code: JSONParserErrorType; - } - - export class JSONParserErrorGroup extends Error { - /** - * List of all errors - * - * See https://github.com/APIDevTools/json-schema-ref-parser/blob/master/docs/ref-parser.md#errors - */ - public readonly errors: Array<$RefParser.JSONParserError | $RefParser.InvalidPointerError | $RefParser.ResolverError | $RefParser.ParserError | $RefParser.MissingPointerError | $RefParser.UnmatchedParserError | $RefParser.UnmatchedResolverError>; - - /** - * The fields property is a `$RefParser` instance - * - * See https://apitools.dev/json-schema-ref-parser/docs/ref-parser.html - */ - public readonly files: $RefParser; - - /** - * User friendly message containing the total amount of errors, as well as the absolute path to the source document - */ - public readonly message: string; - } - - export class ParserError extends JSONParserError { - public constructor(message: string, source: string); - - public readonly name = "ParserError"; - public readonly code = "EPARSER"; - } - export class UnmatchedParserError extends JSONParserError { - public constructor(source: string); - - public readonly name = "UnmatchedParserError"; - public readonly code = "EUNMATCHEDPARSER"; - } - export class ResolverError extends JSONParserError { - public constructor(ex: Error | NodeJS.ErrnoException, source: string); - - public readonly name = "ResolverError"; - public readonly code = "ERESOLVER"; - public readonly ioErrorCode?: string; - } - export class UnmatchedResolverError extends JSONParserError { - public constructor(source: string); - - public readonly name = "UnmatchedResolverError"; - public readonly code = "EUNMATCHEDRESOLVER"; - } - export class MissingPointerError extends JSONParserError { - public constructor(token: string | number, source: string); - - public readonly name = "MissingPointerError"; - public readonly code = "EMISSINGPOINTER"; - } - export class InvalidPointerError extends JSONParserError { - public constructor(pointer: string, source: string); - - public readonly name = "InvalidPointerError"; - public readonly code = "EINVALIDPOINTER"; - } -} diff --git a/lib/index.js b/lib/index.js deleted file mode 100644 index 5fdfb79c..00000000 --- a/lib/index.js +++ /dev/null @@ -1,290 +0,0 @@ -/* eslint-disable no-unused-vars */ -import $Refs from "./refs.js"; -import _parse from "./parse.js"; -import normalizeArgs from "./normalize-args.js"; -import resolveExternal from "./resolve-external.js"; -import _bundle from "./bundle.js"; -import _dereference from "./dereference.js"; -import * as url from "./util/url.js"; -import { JSONParserError, InvalidPointerError, MissingPointerError, ResolverError, ParserError, UnmatchedParserError, UnmatchedResolverError, isHandledError, JSONParserErrorGroup } from "./util/errors.js"; -import maybe from "call-me-maybe"; -import { ono } from "@jsdevtools/ono"; - -export default $RefParser; -export { JSONParserError }; -export { InvalidPointerError }; -export { MissingPointerError }; -export { ResolverError }; -export { ParserError }; -export { UnmatchedParserError }; -export { UnmatchedResolverError }; - -/** - * This class parses a JSON schema, builds a map of its JSON references and their resolved values, - * and provides methods for traversing, manipulating, and dereferencing those references. - * - * @constructor - */ -function $RefParser () { - /** - * The parsed (and possibly dereferenced) JSON schema object - * - * @type {object} - * @readonly - */ - this.schema = null; - - /** - * The resolved JSON references - * - * @type {$Refs} - * @readonly - */ - this.$refs = new $Refs(); -} - -/** - * Parses the given JSON schema. - * This method does not resolve any JSON references. - * It just reads a single file in JSON or YAML format, and parse it as a JavaScript object. - * - * @param {string} [path] - The file path or URL of the JSON schema - * @param {object} [schema] - A JSON schema object. This object will be used instead of reading from `path`. - * @param {$RefParserOptions} [options] - Options that determine how the schema is parsed - * @param {function} [callback] - An error-first callback. The second parameter is the parsed JSON schema object. - * @returns {Promise} - The returned promise resolves with the parsed JSON schema object. - */ -$RefParser.parse = function parse (path, schema, options, callback) { - let Class = this; // eslint-disable-line consistent-this - let instance = new Class(); - return instance.parse.apply(instance, arguments); -}; - -/** - * Parses the given JSON schema. - * This method does not resolve any JSON references. - * It just reads a single file in JSON or YAML format, and parse it as a JavaScript object. - * - * @param {string} [path] - The file path or URL of the JSON schema - * @param {object} [schema] - A JSON schema object. This object will be used instead of reading from `path`. - * @param {$RefParserOptions} [options] - Options that determine how the schema is parsed - * @param {function} [callback] - An error-first callback. The second parameter is the parsed JSON schema object. - * @returns {Promise} - The returned promise resolves with the parsed JSON schema object. - */ -$RefParser.prototype.parse = async function parse (path, schema, options, callback) { - let args = normalizeArgs(arguments); - let promise; - - if (!args.path && !args.schema) { - let err = ono(`Expected a file path, URL, or object. Got ${args.path || args.schema}`); - return maybe(args.callback, Promise.reject(err)); - } - - // Reset everything - this.schema = null; - this.$refs = new $Refs(); - - // If the path is a filesystem path, then convert it to a URL. - // NOTE: According to the JSON Reference spec, these should already be URLs, - // but, in practice, many people use local filesystem paths instead. - // So we're being generous here and doing the conversion automatically. - // This is not intended to be a 100% bulletproof solution. - // If it doesn't work for your use-case, then use a URL instead. - let pathType = "http"; - if (url.isFileSystemPath(args.path)) { - args.path = url.fromFileSystemPath(args.path); - pathType = "file"; - } - - // Resolve the absolute path of the schema - args.path = url.resolve(url.cwd(), args.path); - - if (args.schema && typeof args.schema === "object") { - // A schema object was passed-in. - // So immediately add a new $Ref with the schema object as its value - let $ref = this.$refs._add(args.path); - $ref.value = args.schema; - $ref.pathType = pathType; - promise = Promise.resolve(args.schema); - } - else { - // Parse the schema file/url - promise = _parse(args.path, this.$refs, args.options); - } - - let me = this; - try { - let result = await promise; - - if (result !== null && typeof result === "object" && !Buffer.isBuffer(result)) { - me.schema = result; - return maybe(args.callback, Promise.resolve(me.schema)); - } - else if (args.options.continueOnError) { - me.schema = null; // it's already set to null at line 79, but let's set it again for the sake of readability - return maybe(args.callback, Promise.resolve(me.schema)); - } - else { - throw ono.syntax(`"${me.$refs._root$Ref.path || result}" is not a valid JSON Schema`); - } - } - catch (err) { - if (!args.options.continueOnError || !isHandledError(err)) { - return maybe(args.callback, Promise.reject(err)); - } - - if (this.$refs._$refs[url.stripHash(args.path)]) { - this.$refs._$refs[url.stripHash(args.path)].addError(err); - } - - return maybe(args.callback, Promise.resolve(null)); - } -}; - -/** - * Parses the given JSON schema and resolves any JSON references, including references in - * externally-referenced files. - * - * @param {string} [path] - The file path or URL of the JSON schema - * @param {object} [schema] - A JSON schema object. This object will be used instead of reading from `path`. - * @param {$RefParserOptions} [options] - Options that determine how the schema is parsed and resolved - * @param {function} [callback] - * - An error-first callback. The second parameter is a {@link $Refs} object containing the resolved JSON references - * - * @returns {Promise} - * The returned promise resolves with a {@link $Refs} object containing the resolved JSON references - */ -$RefParser.resolve = function resolve (path, schema, options, callback) { - let Class = this; // eslint-disable-line consistent-this - let instance = new Class(); - return instance.resolve.apply(instance, arguments); -}; - -/** - * Parses the given JSON schema and resolves any JSON references, including references in - * externally-referenced files. - * - * @param {string} [path] - The file path or URL of the JSON schema - * @param {object} [schema] - A JSON schema object. This object will be used instead of reading from `path`. - * @param {$RefParserOptions} [options] - Options that determine how the schema is parsed and resolved - * @param {function} [callback] - * - An error-first callback. The second parameter is a {@link $Refs} object containing the resolved JSON references - * - * @returns {Promise} - * The returned promise resolves with a {@link $Refs} object containing the resolved JSON references - */ -$RefParser.prototype.resolve = async function resolve (path, schema, options, callback) { - let me = this; - let args = normalizeArgs(arguments); - - try { - await this.parse(args.path, args.schema, args.options); - await resolveExternal(me, args.options); - finalize(me); - return maybe(args.callback, Promise.resolve(me.$refs)); - } - catch (err) { - return maybe(args.callback, Promise.reject(err)); - } -}; - -/** - * Parses the given JSON schema, resolves any JSON references, and bundles all external references - * into the main JSON schema. This produces a JSON schema that only has *internal* references, - * not any *external* references. - * - * @param {string} [path] - The file path or URL of the JSON schema - * @param {object} [schema] - A JSON schema object. This object will be used instead of reading from `path`. - * @param {$RefParserOptions} [options] - Options that determine how the schema is parsed, resolved, and dereferenced - * @param {function} [callback] - An error-first callback. The second parameter is the bundled JSON schema object - * @returns {Promise} - The returned promise resolves with the bundled JSON schema object. - */ -$RefParser.bundle = function bundle (path, schema, options, callback) { - let Class = this; // eslint-disable-line consistent-this - let instance = new Class(); - return instance.bundle.apply(instance, arguments); -}; - -/** - * Parses the given JSON schema, resolves any JSON references, and bundles all external references - * into the main JSON schema. This produces a JSON schema that only has *internal* references, - * not any *external* references. - * - * @param {string} [path] - The file path or URL of the JSON schema - * @param {object} [schema] - A JSON schema object. This object will be used instead of reading from `path`. - * @param {$RefParserOptions} [options] - Options that determine how the schema is parsed, resolved, and dereferenced - * @param {function} [callback] - An error-first callback. The second parameter is the bundled JSON schema object - * @returns {Promise} - The returned promise resolves with the bundled JSON schema object. - */ -$RefParser.prototype.bundle = async function bundle (path, schema, options, callback) { - let me = this; - let args = normalizeArgs(arguments); - - try { - await this.resolve(args.path, args.schema, args.options); - _bundle(me, args.options); - finalize(me); - return maybe(args.callback, Promise.resolve(me.schema)); - } - catch (err) { - return maybe(args.callback, Promise.reject(err)); - } -}; - -/** - * Parses the given JSON schema, resolves any JSON references, and dereferences the JSON schema. - * That is, all JSON references are replaced with their resolved values. - * - * @param {string} [path] - The file path or URL of the JSON schema - * @param {object} [schema] - A JSON schema object. This object will be used instead of reading from `path`. - * @param {$RefParserOptions} [options] - Options that determine how the schema is parsed, resolved, and dereferenced - * @param {function} [callback] - An error-first callback. The second parameter is the dereferenced JSON schema object - * @returns {Promise} - The returned promise resolves with the dereferenced JSON schema object. - */ -$RefParser.dereference = function dereference (path, schema, options, callback) { - let Class = this; // eslint-disable-line consistent-this - let instance = new Class(); - return instance.dereference.apply(instance, arguments); -}; - -/** - * Parses the given JSON schema, resolves any JSON references, and dereferences the JSON schema. - * That is, all JSON references are replaced with their resolved values. - * - * @param {string} [path] - The file path or URL of the JSON schema - * @param {object} [schema] - A JSON schema object. This object will be used instead of reading from `path`. - * @param {$RefParserOptions} [options] - Options that determine how the schema is parsed, resolved, and dereferenced - * @param {function} [callback] - An error-first callback. The second parameter is the dereferenced JSON schema object - * @returns {Promise} - The returned promise resolves with the dereferenced JSON schema object. - */ -$RefParser.prototype.dereference = async function dereference (path, schema, options, callback) { - let me = this; - let args = normalizeArgs(arguments); - - try { - await this.resolve(args.path, args.schema, args.options); - _dereference(me, args.options); - finalize(me); - return maybe(args.callback, Promise.resolve(me.schema)); - } - catch (err) { - return maybe(args.callback, Promise.reject(err)); - } -}; - -function finalize (parser) { - const errors = JSONParserErrorGroup.getParserErrors(parser); - if (errors.length > 0) { - throw new JSONParserErrorGroup(parser); - } -} - -export const parse = $RefParser.parse.bind($RefParser); -export const resolve = $RefParser.resolve.bind($RefParser); -export const bundle = $RefParser.bundle.bind($RefParser); -export const dereference = $RefParser.dereference.bind($RefParser); - -// CommonJS default export hack -if (typeof module === "object" && typeof module.exports === "object") { - module.exports = Object.assign(module.exports.default, module.exports); -} diff --git a/lib/index.ts b/lib/index.ts new file mode 100644 index 00000000..ae770b1d --- /dev/null +++ b/lib/index.ts @@ -0,0 +1,413 @@ +import $Refs from "./refs.js"; +import _parse from "./parse.js"; +import normalizeArgs from "./normalize-args.js"; +import resolveExternal from "./resolve-external.js"; +import _bundle from "./bundle.js"; +import _dereference from "./dereference.js"; +import * as url from "./util/url.js"; +import { + JSONParserError, + InvalidPointerError, + MissingPointerError, + ResolverError, + ParserError, + UnmatchedParserError, + UnmatchedResolverError, + isHandledError, + JSONParserErrorGroup, +} from "./util/errors.js"; +import { ono } from "@jsdevtools/ono"; +import maybe from "./util/maybe.js"; +import type { ParserOptions } from "./options.js"; +import type { $RefsCallback, JSONSchema, SchemaCallback } from "./types/index.js"; + +export { JSONParserError }; +export { InvalidPointerError }; +export { MissingPointerError }; +export { ResolverError }; +export { ParserError }; +export { UnmatchedParserError }; +export { UnmatchedResolverError }; + +type RefParserSchema = string | JSONSchema; + +/** + * This class parses a JSON schema, builds a map of its JSON references and their resolved values, + * and provides methods for traversing, manipulating, and dereferencing those references. + * + * @class + */ +export class $RefParser { + /** + * The parsed (and possibly dereferenced) JSON schema object + * + * @type {object} + * @readonly + */ + public schema: JSONSchema | null = null; + + /** + * The resolved JSON references + * + * @type {$Refs} + * @readonly + */ + $refs = new $Refs(); + + /** + * Parses the given JSON schema. + * This method does not resolve any JSON references. + * It just reads a single file in JSON or YAML format, and parse it as a JavaScript object. + * + * @param [path] - The file path or URL of the JSON schema + * @param [schema] - A JSON schema object. This object will be used instead of reading from `path`. + * @param [options] - Options that determine how the schema is parsed + * @param [callback] - An error-first callback. The second parameter is the parsed JSON schema object. + * @returns - The returned promise resolves with the parsed JSON schema object. + */ + public parse(schema: RefParserSchema): Promise; + public parse(schema: RefParserSchema, callback: SchemaCallback): Promise; + public parse(schema: RefParserSchema, options: ParserOptions): Promise; + public parse(schema: RefParserSchema, options: ParserOptions, callback: SchemaCallback): Promise; + public parse(baseUrl: string, schema: RefParserSchema, options: ParserOptions): Promise; + public parse( + baseUrl: string, + schema: RefParserSchema, + options: ParserOptions, + callback: SchemaCallback, + ): Promise; + + async parse() { + const args = normalizeArgs(arguments as any); + let promise; + + if (!args.path && !args.schema) { + const err = ono(`Expected a file path, URL, or object. Got ${args.path || args.schema}`); + return maybe(args.callback, Promise.reject(err)); + } + + // Reset everything + this.schema = null; + this.$refs = new $Refs(); + + // If the path is a filesystem path, then convert it to a URL. + // NOTE: According to the JSON Reference spec, these should already be URLs, + // but, in practice, many people use local filesystem paths instead. + // So we're being generous here and doing the conversion automatically. + // This is not intended to be a 100% bulletproof solution. + // If it doesn't work for your use-case, then use a URL instead. + let pathType = "http"; + if (url.isFileSystemPath(args.path)) { + args.path = url.fromFileSystemPath(args.path); + pathType = "file"; + } + + // Resolve the absolute path of the schema + args.path = url.resolve(url.cwd(), args.path); + + if (args.schema && typeof args.schema === "object") { + // A schema object was passed-in. + // So immediately add a new $Ref with the schema object as its value + const $ref = this.$refs._add(args.path); + $ref.value = args.schema; + $ref.pathType = pathType; + promise = Promise.resolve(args.schema); + } else { + // Parse the schema file/url + promise = _parse(args.path, this.$refs, args.options); + } + + try { + const result = await promise; + + if (result !== null && typeof result === "object" && !Buffer.isBuffer(result)) { + this.schema = result; + return maybe(args.callback, Promise.resolve(this.schema!)); + } else if (args.options.continueOnError) { + this.schema = null; // it's already set to null at line 79, but let's set it again for the sake of readability + return maybe(args.callback, Promise.resolve(this.schema!)); + } else { + throw ono.syntax(`"${this.$refs._root$Ref.path || result}" is not a valid JSON Schema`); + } + } catch (err) { + if (!args.options.continueOnError || !isHandledError(err)) { + return maybe(args.callback, Promise.reject(err)); + } + + if (this.$refs._$refs[url.stripHash(args.path)]) { + this.$refs._$refs[url.stripHash(args.path)].addError(err); + } + + return maybe(args.callback, Promise.resolve(null)); + } + } + + public static parse(schema: RefParserSchema): Promise; + public static parse(schema: RefParserSchema, callback: SchemaCallback): Promise; + public static parse(schema: RefParserSchema, options: ParserOptions): Promise; + public static parse(schema: RefParserSchema, options: ParserOptions, callback: SchemaCallback): Promise; + public static parse(baseUrl: string, schema: RefParserSchema, options: ParserOptions): Promise; + public static parse( + baseUrl: string, + schema: RefParserSchema, + options: ParserOptions, + callback: SchemaCallback, + ): Promise; + public static parse(): Promise | Promise { + const parser = new $RefParser(); + return parser.parse.apply(parser, arguments as any); + } + + /** + * *This method is used internally by other methods, such as `bundle` and `dereference`. You probably won't need to call this method yourself.* + * + * Resolves all JSON references (`$ref` pointers) in the given JSON Schema file. If it references any other files/URLs, then they will be downloaded and resolved as well. This method **does not** dereference anything. It simply gives you a `$Refs` object, which is a map of all the resolved references and their values. + * + * See https://apitools.dev/json-schema-ref-parser/docs/ref-parser.html#resolveschema-options-callback + * + * @param schema A JSON Schema object, or the file path or URL of a JSON Schema file. See the `parse` method for more info. + * @param options (optional) + * @param callback (optional) A callback that will receive a `$Refs` object + */ + public resolve(schema: RefParserSchema): Promise<$Refs>; + public resolve(schema: RefParserSchema, callback: $RefsCallback): Promise; + public resolve(schema: RefParserSchema, options: ParserOptions): Promise<$Refs>; + public resolve(schema: RefParserSchema, options: ParserOptions, callback: $RefsCallback): Promise; + public resolve(baseUrl: string, schema: RefParserSchema, options: ParserOptions): Promise<$Refs>; + public resolve( + baseUrl: string, + schema: RefParserSchema, + options: ParserOptions, + callback: $RefsCallback, + ): Promise; + /** + * Parses the given JSON schema and resolves any JSON references, including references in + * externally-referenced files. + * + * @param [path] - The file path or URL of the JSON schema + * @param [schema] - A JSON schema object. This object will be used instead of reading from `path`. + * @param [options] - Options that determine how the schema is parsed and resolved + * @param [callback] + * - An error-first callback. The second parameter is a {@link $Refs} object containing the resolved JSON references + * + * @returns + * The returned promise resolves with a {@link $Refs} object containing the resolved JSON references + */ + async resolve() { + const args = normalizeArgs(arguments); + + try { + await this.parse(args.path, args.schema, args.options); + await resolveExternal(this, args.options); + finalize(this); + return maybe(args.callback, Promise.resolve(this.$refs)); + } catch (err) { + return maybe(args.callback, Promise.reject(err)); + } + } + + /** + * *This method is used internally by other methods, such as `bundle` and `dereference`. You probably won't need to call this method yourself.* + * + * Resolves all JSON references (`$ref` pointers) in the given JSON Schema file. If it references any other files/URLs, then they will be downloaded and resolved as well. This method **does not** dereference anything. It simply gives you a `$Refs` object, which is a map of all the resolved references and their values. + * + * See https://apitools.dev/json-schema-ref-parser/docs/ref-parser.html#resolveschema-options-callback + * + * @param schema A JSON Schema object, or the file path or URL of a JSON Schema file. See the `parse` method for more info. + * @param options (optional) + * @param callback (optional) A callback that will receive a `$Refs` object + */ + public static resolve(schema: RefParserSchema): Promise<$Refs>; + public static resolve(schema: RefParserSchema, callback: $RefsCallback): Promise; + public static resolve(schema: RefParserSchema, options: ParserOptions): Promise<$Refs>; + public static resolve(schema: RefParserSchema, options: ParserOptions, callback: $RefsCallback): Promise; + public static resolve(baseUrl: string, schema: RefParserSchema, options: ParserOptions): Promise<$Refs>; + public static resolve( + baseUrl: string, + schema: RefParserSchema, + options: ParserOptions, + callback: $RefsCallback, + ): Promise; + static resolve(): Promise | Promise { + const instance = new $RefParser(); + return instance.resolve.apply(instance, arguments as any); + } + + /** + * Parses the given JSON schema, resolves any JSON references, and bundles all external references + * into the main JSON schema. This produces a JSON schema that only has *internal* references, + * not any *external* references. + * + * @param [path] - The file path or URL of the JSON schema + * @param [schema] - A JSON schema object. This object will be used instead of reading from `path`. + * @param [options] - Options that determine how the schema is parsed, resolved, and dereferenced + * @param [callback] - An error-first callback. The second parameter is the bundled JSON schema object + * @returns - The returned promise resolves with the bundled JSON schema object. + */ + /** + * Bundles all referenced files/URLs into a single schema that only has internal `$ref` pointers. This lets you split-up your schema however you want while you're building it, but easily combine all those files together when it's time to package or distribute the schema to other people. The resulting schema size will be small, since it will still contain internal JSON references rather than being fully-dereferenced. + * + * This also eliminates the risk of circular references, so the schema can be safely serialized using `JSON.stringify()`. + * + * See https://apitools.dev/json-schema-ref-parser/docs/ref-parser.html#bundleschema-options-callback + * + * @param schema A JSON Schema object, or the file path or URL of a JSON Schema file. See the `parse` method for more info. + * @param options (optional) + * @param callback (optional) A callback that will receive the bundled schema object + */ + public static bundle(schema: RefParserSchema): Promise; + public static bundle(schema: RefParserSchema, callback: SchemaCallback): Promise; + public static bundle(schema: RefParserSchema, options: ParserOptions): Promise; + public static bundle(schema: RefParserSchema, options: ParserOptions, callback: SchemaCallback): Promise; + public static bundle(baseUrl: string, schema: RefParserSchema, options: ParserOptions): Promise; + public static bundle( + baseUrl: string, + schema: RefParserSchema, + options: ParserOptions, + callback: SchemaCallback, + ): Promise; + static bundle(): Promise | Promise { + const instance = new $RefParser(); + return instance.bundle.apply(instance, arguments as any); + } + + /** + * Parses the given JSON schema, resolves any JSON references, and bundles all external references + * into the main JSON schema. This produces a JSON schema that only has *internal* references, + * not any *external* references. + * + * @param [path] - The file path or URL of the JSON schema + * @param [schema] - A JSON schema object. This object will be used instead of reading from `path`. + * @param [options] - Options that determine how the schema is parsed, resolved, and dereferenced + * @param [callback] - An error-first callback. The second parameter is the bundled JSON schema object + * @returns - The returned promise resolves with the bundled JSON schema object. + */ + /** + * Bundles all referenced files/URLs into a single schema that only has internal `$ref` pointers. This lets you split-up your schema however you want while you're building it, but easily combine all those files together when it's time to package or distribute the schema to other people. The resulting schema size will be small, since it will still contain internal JSON references rather than being fully-dereferenced. + * + * This also eliminates the risk of circular references, so the schema can be safely serialized using `JSON.stringify()`. + * + * See https://apitools.dev/json-schema-ref-parser/docs/ref-parser.html#bundleschema-options-callback + * + * @param schema A JSON Schema object, or the file path or URL of a JSON Schema file. See the `parse` method for more info. + * @param options (optional) + * @param callback (optional) A callback that will receive the bundled schema object + */ + public bundle(schema: RefParserSchema): Promise; + public bundle(schema: RefParserSchema, callback: SchemaCallback): Promise; + public bundle(schema: RefParserSchema, options: ParserOptions): Promise; + public bundle(schema: RefParserSchema, options: ParserOptions, callback: SchemaCallback): Promise; + public bundle(baseUrl: string, schema: RefParserSchema, options: ParserOptions): Promise; + public bundle( + baseUrl: string, + schema: RefParserSchema, + options: ParserOptions, + callback: SchemaCallback, + ): Promise; + async bundle() { + const args = normalizeArgs(arguments); + try { + await this.resolve(args.path, args.schema, args.options); + _bundle(this, args.options); + finalize(this); + return maybe(args.callback, Promise.resolve(this.schema!)); + } catch (err) { + return maybe(args.callback, Promise.reject(err)); + } + } + + /** + * Parses the given JSON schema, resolves any JSON references, and dereferences the JSON schema. + * That is, all JSON references are replaced with their resolved values. + * + * @param [path] - The file path or URL of the JSON schema + * @param [schema] - A JSON schema object. This object will be used instead of reading from `path`. + * @param [options] - Options that determine how the schema is parsed, resolved, and dereferenced + * @param [callback] - An error-first callback. The second parameter is the dereferenced JSON schema object + * @returns - The returned promise resolves with the dereferenced JSON schema object. + */ + /** + * Dereferences all `$ref` pointers in the JSON Schema, replacing each reference with its resolved value. This results in a schema object that does not contain any `$ref` pointers. Instead, it's a normal JavaScript object tree that can easily be crawled and used just like any other JavaScript object. This is great for programmatic usage, especially when using tools that don't understand JSON references. + * + * The dereference method maintains object reference equality, meaning that all `$ref` pointers that point to the same object will be replaced with references to the same object. Again, this is great for programmatic usage, but it does introduce the risk of circular references, so be careful if you intend to serialize the schema using `JSON.stringify()`. Consider using the bundle method instead, which does not create circular references. + * + * See https://apitools.dev/json-schema-ref-parser/docs/ref-parser.html#dereferenceschema-options-callback + * + * @param schema A JSON Schema object, or the file path or URL of a JSON Schema file. See the `parse` method for more info. + * @param options (optional) + * @param callback (optional) A callback that will receive the dereferenced schema object + */ + public static dereference(schema: RefParserSchema): Promise; + public static dereference(schema: RefParserSchema, callback: SchemaCallback): Promise; + public static dereference(schema: RefParserSchema, options: ParserOptions): Promise; + public static dereference(schema: RefParserSchema, options: ParserOptions, callback: SchemaCallback): Promise; + public static dereference(baseUrl: string, schema: RefParserSchema, options: ParserOptions): Promise; + public static dereference( + baseUrl: string, + schema: RefParserSchema, + options: ParserOptions, + callback: SchemaCallback, + ): Promise; + static dereference(): Promise | Promise { + const instance = new $RefParser(); + return instance.dereference.apply(instance, arguments as any); + } + + /** + * Parses the given JSON schema, resolves any JSON references, and dereferences the JSON schema. + * That is, all JSON references are replaced with their resolved values. + * + * @param [path] - The file path or URL of the JSON schema + * @param [schema] - A JSON schema object. This object will be used instead of reading from `path`. + * @param [options] - Options that determine how the schema is parsed, resolved, and dereferenced + * @param [callback] - An error-first callback. The second parameter is the dereferenced JSON schema object + * @returns - The returned promise resolves with the dereferenced JSON schema object. + */ + /** + * Dereferences all `$ref` pointers in the JSON Schema, replacing each reference with its resolved value. This results in a schema object that does not contain any `$ref` pointers. Instead, it's a normal JavaScript object tree that can easily be crawled and used just like any other JavaScript object. This is great for programmatic usage, especially when using tools that don't understand JSON references. + * + * The dereference method maintains object reference equality, meaning that all `$ref` pointers that point to the same object will be replaced with references to the same object. Again, this is great for programmatic usage, but it does introduce the risk of circular references, so be careful if you intend to serialize the schema using `JSON.stringify()`. Consider using the bundle method instead, which does not create circular references. + * + * See https://apitools.dev/json-schema-ref-parser/docs/ref-parser.html#dereferenceschema-options-callback + * + * @param schema A JSON Schema object, or the file path or URL of a JSON Schema file. See the `parse` method for more info. + * @param options (optional) + * @param callback (optional) A callback that will receive the dereferenced schema object + */ + public dereference( + baseUrl: string, + schema: RefParserSchema, + options: ParserOptions, + callback: SchemaCallback, + ): Promise; + public dereference(schema: RefParserSchema, options: ParserOptions, callback: SchemaCallback): Promise; + public dereference(schema: RefParserSchema, callback: SchemaCallback): Promise; + public dereference(baseUrl: string, schema: RefParserSchema, options: ParserOptions): Promise; + public dereference(schema: RefParserSchema, options: ParserOptions): Promise; + public dereference(schema: RefParserSchema): Promise; + async dereference() { + const args = normalizeArgs(arguments); + + try { + await this.resolve(args.path, args.schema, args.options); + _dereference(this, args.options); + finalize(this); + return maybe(args.callback, Promise.resolve(this.schema)); + } catch (err) { + return maybe(args.callback, Promise.reject(err)); + } + } +} +export default $RefParser; + +function finalize(parser: any) { + const errors = JSONParserErrorGroup.getParserErrors(parser); + if (errors.length > 0) { + throw new JSONParserErrorGroup(parser); + } +} + +export const parse = $RefParser.parse; +export const resolve = $RefParser.resolve; +export const bundle = $RefParser.bundle; +export const dereference = $RefParser.dereference; diff --git a/lib/normalize-args.js b/lib/normalize-args.ts similarity index 74% rename from lib/normalize-args.js rename to lib/normalize-args.ts index 4f5d0fcd..d72e5550 100644 --- a/lib/normalize-args.js +++ b/lib/normalize-args.ts @@ -1,16 +1,13 @@ -import Options from "./options.js"; +import { getNewOptions } from "./options.js"; export default normalizeArgs; /** * Normalizes the given arguments, accounting for optional args. - * - * @param {Arguments} args - * @returns {object} */ -function normalizeArgs (args) { +function normalizeArgs(_args: Partial) { let path, schema, options, callback; - args = Array.prototype.slice.call(args); + const args = Array.prototype.slice.call(_args) as any[]; if (typeof args[args.length - 1] === "function") { // The last parameter is a callback function @@ -24,28 +21,24 @@ function normalizeArgs (args) { // The second parameter is the schema, and the third parameter is the options schema = args[1]; options = args[2]; - } - else { + } else { // The second parameter is the options schema = undefined; options = args[1]; } - } - else { + } else { // The first parameter is the schema path = ""; schema = args[0]; options = args[1]; } - if (!(options instanceof Options)) { - options = new Options(options); - } + options = getNewOptions(options); return { path, schema, options, - callback + callback, }; } diff --git a/lib/options.js b/lib/options.js deleted file mode 100644 index 3d55b1c4..00000000 --- a/lib/options.js +++ /dev/null @@ -1,128 +0,0 @@ -/* eslint lines-around-comment: [2, {beforeBlockComment: false}] */ -import jsonParser from "./parsers/json.js"; -import yamlParser from "./parsers/yaml.js"; -import textParser from "./parsers/text.js"; -import binaryParser from "./parsers/binary.js"; -import fileResolver from "./resolvers/file.js"; -import httpResolver from "./resolvers/http.js"; - -export default $RefParserOptions; - -/** - * Options that determine how JSON schemas are parsed, resolved, and dereferenced. - * - * @param {object|$RefParserOptions} [options] - Overridden options - * @constructor - */ -function $RefParserOptions (options) { - merge(this, $RefParserOptions.defaults); - merge(this, options); -} - -$RefParserOptions.defaults = { - /** - * Determines how different types of files will be parsed. - * - * You can add additional parsers of your own, replace an existing one with - * your own implementation, or disable any parser by setting it to false. - */ - parse: { - json: jsonParser, - yaml: yamlParser, - text: textParser, - binary: binaryParser, - }, - - /** - * Determines how JSON References will be resolved. - * - * You can add additional resolvers of your own, replace an existing one with - * your own implementation, or disable any resolver by setting it to false. - */ - resolve: { - file: fileResolver, - http: httpResolver, - - /** - * Determines whether external $ref pointers will be resolved. - * If this option is disabled, then none of above resolvers will be called. - * Instead, external $ref pointers will simply be ignored. - * - * @type {boolean} - */ - external: true, - }, - - /** - * By default, JSON Schema $Ref Parser throws the first error it encounters. Setting `continueOnError` to `true` - * causes it to keep processing as much as possible and then throw a single error that contains all errors - * that were encountered. - */ - continueOnError: false, - - /** - * Determines the types of JSON references that are allowed. - */ - dereference: { - /** - * Dereference circular (recursive) JSON references? - * If false, then a {@link ReferenceError} will be thrown if a circular reference is found. - * If "ignore", then circular references will not be dereferenced. - * - * @type {boolean|string} - */ - circular: true, - - /** - * A function, called for each path, which can return true to stop this path and all - * subpaths from being dereferenced further. This is useful in schemas where some - * subpaths contain literal $ref keys that should not be dereferenced. - * - * @type {function} - */ - excludedPathMatcher: () => false - }, -}; - -/** - * Merges the properties of the source object into the target object. - * - * @param {object} target - The object that we're populating - * @param {?object} source - The options that are being merged - * @returns {object} - */ -function merge (target, source) { - if (isMergeable(source)) { - let keys = Object.keys(source); - for (let i = 0; i < keys.length; i++) { - let key = keys[i]; - let sourceSetting = source[key]; - let targetSetting = target[key]; - - if (isMergeable(sourceSetting)) { - // It's a nested object, so merge it recursively - target[key] = merge(targetSetting || {}, sourceSetting); - } - else if (sourceSetting !== undefined) { - // It's a scalar value, function, or array. No merging necessary. Just overwrite the target value. - target[key] = sourceSetting; - } - } - } - return target; -} - -/** - * Determines whether the given value can be merged, - * or if it is a scalar value that should just override the target value. - * - * @param {*} val - * @returns {Boolean} - */ -function isMergeable (val) { - return val && - (typeof val === "object") && - !Array.isArray(val) && - !(val instanceof RegExp) && - !(val instanceof Date); -} diff --git a/lib/options.ts b/lib/options.ts new file mode 100644 index 00000000..62afe6bf --- /dev/null +++ b/lib/options.ts @@ -0,0 +1,202 @@ +import jsonParser from "./parsers/json.js"; +import yamlParser from "./parsers/yaml.js"; +import textParser from "./parsers/text.js"; +import binaryParser from "./parsers/binary.js"; +import fileResolver from "./resolvers/file.js"; +import httpResolver from "./resolvers/http.js"; +import cloneDeep from "lodash.clonedeep"; + +import type { HTTPResolverOptions, JSONSchemaObject, Plugin, ResolverOptions } from "./types/index.js"; + +type DeepPartial = T extends object + ? { + [P in keyof T]?: DeepPartial; + } + : T; +/** + * Options that determine how JSON schemas are parsed, resolved, and dereferenced. + * + * @param [options] - Overridden options + * @class + */ +interface $RefParserOptions { + /** + * The `parse` options determine how different types of files will be parsed. + * + * JSON Schema `$Ref` Parser comes with built-in JSON, YAML, plain-text, and binary parsers, any of which you can configure or disable. You can also add your own custom parsers if you want. + */ + parse: { + json?: Plugin | boolean; + yaml?: Plugin | boolean; + binary?: Plugin | boolean; + text?: (Plugin & { encoding?: string }) | boolean; + [key: string]: Plugin | boolean | undefined; + }; + + /** + * The `resolve` options control how JSON Schema $Ref Parser will resolve file paths and URLs, and how those files will be read/downloaded. + * + * JSON Schema `$Ref` Parser comes with built-in support for HTTP and HTTPS, as well as support for local files (when running in Node.js). You can configure or disable either of these built-in resolvers. You can also add your own custom resolvers if you want. + */ + resolve: { + /** + * Determines whether external $ref pointers will be resolved. If this option is disabled, then external `$ref` pointers will simply be ignored. + */ + external?: boolean; + file?: Partial | boolean; + http?: HTTPResolverOptions | boolean; + } & { + [key: string]: Partial | HTTPResolverOptions | boolean | undefined; + }; + + /** + * By default, JSON Schema $Ref Parser throws the first error it encounters. Setting `continueOnError` to `true` + * causes it to keep processing as much as possible and then throw a single error that contains all errors + * that were encountered. + */ + continueOnError: boolean; + + /** + * The `dereference` options control how JSON Schema `$Ref` Parser will dereference `$ref` pointers within the JSON schema. + */ + dereference: { + /** + * Determines whether circular `$ref` pointers are handled. + * + * If set to `false`, then a `ReferenceError` will be thrown if the schema contains any circular references. + * + * If set to `"ignore"`, then circular references will simply be ignored. No error will be thrown, but the `$Refs.circular` property will still be set to `true`. + */ + circular?: boolean | "ignore"; + + /** + * A function, called for each path, which can return true to stop this path and all + * subpaths from being dereferenced further. This is useful in schemas where some + * subpaths contain literal $ref keys that should not be dereferenced. + */ + excludedPathMatcher?(path: string): boolean; + + /** + * Callback invoked during dereferencing. + * + * @argument {string} path The path being dereferenced (ie. the `$ref` string). + * @argument {JSONSchemaObject} object The JSON-Schema that the `$ref` resolved to. + */ + onDereference?(path: string, value: JSONSchemaObject): void; + }; +} + +const getDefaults = () => { + const defaults = { + /** + * Determines how different types of files will be parsed. + * + * You can add additional parsers of your own, replace an existing one with + * your own implementation, or disable any parser by setting it to false. + */ + parse: { + json: jsonParser, + yaml: yamlParser, + text: textParser, + binary: binaryParser, + }, + + /** + * Determines how JSON References will be resolved. + * + * You can add additional resolvers of your own, replace an existing one with + * your own implementation, or disable any resolver by setting it to false. + */ + resolve: { + file: fileResolver, + http: httpResolver, + + /** + * Determines whether external $ref pointers will be resolved. + * If this option is disabled, then none of above resolvers will be called. + * Instead, external $ref pointers will simply be ignored. + * + * @type {boolean} + */ + external: true, + }, + + /** + * By default, JSON Schema $Ref Parser throws the first error it encounters. Setting `continueOnError` to `true` + * causes it to keep processing as much as possible and then throw a single error that contains all errors + * that were encountered. + */ + continueOnError: false, + + /** + * Determines the types of JSON references that are allowed. + */ + dereference: { + /** + * Dereference circular (recursive) JSON references? + * If false, then a {@link ReferenceError} will be thrown if a circular reference is found. + * If "ignore", then circular references will not be dereferenced. + * + * @type {boolean|string} + */ + circular: true, + + /** + * A function, called for each path, which can return true to stop this path and all + * subpaths from being dereferenced further. This is useful in schemas where some + * subpaths contain literal $ref keys that should not be dereferenced. + * + * @type {function} + */ + excludedPathMatcher: () => false, + }, + }; + return cloneDeep(defaults); +}; + +export const getNewOptions = (options: DeepPartial<$RefParserOptions>): $RefParserOptions => { + const newOptions = getDefaults(); + if (options) { + merge(newOptions, options); + } + return newOptions; +}; +export type Options = $RefParserOptions; +export type ParserOptions = DeepPartial<$RefParserOptions>; +/** + * Merges the properties of the source object into the target object. + * + * @param target - The object that we're populating + * @param source - The options that are being merged + * @returns + */ +function merge(target: any, source: any) { + if (isMergeable(source)) { + const keys = Object.keys(source); + for (let i = 0; i < keys.length; i++) { + const key = keys[i]; + const sourceSetting = source[key]; + const targetSetting = target[key]; + + if (isMergeable(sourceSetting)) { + // It's a nested object, so merge it recursively + target[key] = merge(targetSetting || {}, sourceSetting); + } else if (sourceSetting !== undefined) { + // It's a scalar value, function, or array. No merging necessary. Just overwrite the target value. + target[key] = sourceSetting; + } + } + } + return target; +} +/** + * Determines whether the given value can be merged, + * or if it is a scalar value that should just override the target value. + * + * @param val + * @returns + */ +function isMergeable(val: any) { + return val && typeof val === "object" && !Array.isArray(val) && !(val instanceof RegExp) && !(val instanceof Date); +} +export default $RefParserOptions; diff --git a/lib/parse.js b/lib/parse.js deleted file mode 100644 index bd297294..00000000 --- a/lib/parse.js +++ /dev/null @@ -1,162 +0,0 @@ -import { ono } from "@jsdevtools/ono"; -import * as url from "./util/url.js"; -import * as plugins from "./util/plugins.js"; -import { ResolverError, ParserError, UnmatchedParserError, UnmatchedResolverError, isHandledError } from "./util/errors.js"; - -export default parse; - -/** - * Reads and parses the specified file path or URL. - * - * @param {string} path - This path MUST already be resolved, since `read` doesn't know the resolution context - * @param {$Refs} $refs - * @param {$RefParserOptions} options - * - * @returns {Promise} - * The promise resolves with the parsed file contents, NOT the raw (Buffer) contents. - */ -async function parse (path, $refs, options) { - // Remove the URL fragment, if any - path = url.stripHash(path); - - // Add a new $Ref for this file, even though we don't have the value yet. - // This ensures that we don't simultaneously read & parse the same file multiple times - let $ref = $refs._add(path); - - // This "file object" will be passed to all resolvers and parsers. - let file = { - url: path, - extension: url.getExtension(path), - }; - - // Read the file and then parse the data - try { - const resolver = await readFile(file, options, $refs); - $ref.pathType = resolver.plugin.name; - file.data = resolver.result; - - const parser = await parseFile(file, options, $refs); - $ref.value = parser.result; - - return parser.result; - } - catch (err) { - if (isHandledError(err)) { - $ref.value = err; - } - - throw err; - } -} - -/** - * Reads the given file, using the configured resolver plugins - * - * @param {object} file - An object containing information about the referenced file - * @param {string} file.url - The full URL of the referenced file - * @param {string} file.extension - The lowercased file extension (e.g. ".txt", ".html", etc.) - * @param {$RefParserOptions} options - * - * @returns {Promise} - * The promise resolves with the raw file contents and the resolver that was used. - */ -function readFile (file, options, $refs) { - return new Promise(((resolve, reject) => { - // console.log('Reading %s', file.url); - - // Find the resolvers that can read this file - let resolvers = plugins.all(options.resolve); - resolvers = plugins.filter(resolvers, "canRead", file); - - // Run the resolvers, in order, until one of them succeeds - plugins.sort(resolvers); - plugins.run(resolvers, "read", file, $refs) - .then(resolve, onError); - - function onError (err) { - if (!err && options.continueOnError) { - // No resolver could be matched - reject(new UnmatchedResolverError(file.url)); - } - else if (!err || !("error" in err)) { - // Throw a generic, friendly error. - reject(ono.syntax(`Unable to resolve $ref pointer "${file.url}"`)); - } - // Throw the original error, if it's one of our own (user-friendly) errors. - else if (err.error instanceof ResolverError) { - reject(err.error); - } - else { - reject(new ResolverError(err, file.url)); - } - } - })); -} - -/** - * Parses the given file's contents, using the configured parser plugins. - * - * @param {object} file - An object containing information about the referenced file - * @param {string} file.url - The full URL of the referenced file - * @param {string} file.extension - The lowercased file extension (e.g. ".txt", ".html", etc.) - * @param {*} file.data - The file contents. This will be whatever data type was returned by the resolver - * @param {$RefParserOptions} options - * - * @returns {Promise} - * The promise resolves with the parsed file contents and the parser that was used. - */ -function parseFile (file, options, $refs) { - return new Promise(((resolve, reject) => { - // console.log('Parsing %s', file.url); - - // Find the parsers that can read this file type. - // If none of the parsers are an exact match for this file, then we'll try ALL of them. - // This handles situations where the file IS a supported type, just with an unknown extension. - let allParsers = plugins.all(options.parse); - let filteredParsers = plugins.filter(allParsers, "canParse", file); - let parsers = filteredParsers.length > 0 ? filteredParsers : allParsers; - - // Run the parsers, in order, until one of them succeeds - plugins.sort(parsers); - plugins.run(parsers, "parse", file, $refs) - .then(onParsed, onError); - - function onParsed (parser) { - if (!parser.plugin.allowEmpty && isEmpty(parser.result)) { - reject(ono.syntax(`Error parsing "${file.url}" as ${parser.plugin.name}. \nParsed value is empty`)); - } - else { - resolve(parser); - } - } - - function onError (err) { - if (!err && options.continueOnError) { - // No resolver could be matched - reject(new UnmatchedParserError(file.url)); - } - else if (!err || !("error" in err)) { - reject(ono.syntax(`Unable to parse ${file.url}`)); - } - else if (err.error instanceof ParserError) { - reject(err.error); - } - else { - reject(new ParserError(err.error.message, file.url)); - } - } - })); -} - -/** - * Determines whether the parsed value is "empty". - * - * @param {*} value - * @returns {boolean} - */ -function isEmpty (value) { - return value === undefined || - (typeof value === "object" && Object.keys(value).length === 0) || - (typeof value === "string" && value.trim().length === 0) || - (Buffer.isBuffer(value) && value.length === 0); -} diff --git a/lib/parse.ts b/lib/parse.ts new file mode 100644 index 00000000..2f814217 --- /dev/null +++ b/lib/parse.ts @@ -0,0 +1,153 @@ +import { ono } from "@jsdevtools/ono"; +import * as url from "./util/url.js"; +import * as plugins from "./util/plugins.js"; +import { + ResolverError, + ParserError, + UnmatchedParserError, + UnmatchedResolverError, + isHandledError, +} from "./util/errors.js"; +import type $Refs from "./refs.js"; +import type { Options } from "./options.js"; +import type { FileInfo } from "./types/index.js"; + +export default parse; + +/** + * Reads and parses the specified file path or URL. + */ +async function parse(path: string, $refs: $Refs, options: Options) { + // Remove the URL fragment, if any + path = url.stripHash(path); + + // Add a new $Ref for this file, even though we don't have the value yet. + // This ensures that we don't simultaneously read & parse the same file multiple times + const $ref = $refs._add(path); + + // This "file object" will be passed to all resolvers and parsers. + const file = { + url: path, + extension: url.getExtension(path), + } as FileInfo; + + // Read the file and then parse the data + try { + const resolver = await readFile(file, options, $refs); + $ref.pathType = resolver.plugin.name; + file.data = resolver.result; + + const parser = await parseFile(file, options, $refs); + $ref.value = parser.result; + + return parser.result; + } catch (err) { + if (isHandledError(err)) { + $ref.value = err; + } + + throw err; + } +} + +/** + * Reads the given file, using the configured resolver plugins + * + * @param file - An object containing information about the referenced file + * @param file.url - The full URL of the referenced file + * @param file.extension - The lowercased file extension (e.g. ".txt", ".html", etc.) + * @param options + * + * @returns + * The promise resolves with the raw file contents and the resolver that was used. + */ +async function readFile(file: FileInfo, options: Options, $refs: $Refs): Promise { + // console.log('Reading %s', file.url); + + // Find the resolvers that can read this file + let resolvers = plugins.all(options.resolve); + resolvers = plugins.filter(resolvers, "canRead", file); + + // Run the resolvers, in order, until one of them succeeds + plugins.sort(resolvers); + try { + const data = await plugins.run(resolvers, "read", file, $refs); + return data; + } catch (err: any) { + if (!err && options.continueOnError) { + // No resolver could be matched + throw new UnmatchedResolverError(file.url); + } else if (!err || !("error" in err)) { + // Throw a generic, friendly error. + throw ono.syntax(`Unable to resolve $ref pointer "${file.url}"`); + } + // Throw the original error, if it's one of our own (user-friendly) errors. + else if (err.error instanceof ResolverError) { + throw err.error; + } else { + throw new ResolverError(err, file.url); + } + } +} + +/** + * Parses the given file's contents, using the configured parser plugins. + * + * @param file - An object containing information about the referenced file + * @param file.url - The full URL of the referenced file + * @param file.extension - The lowercased file extension (e.g. ".txt", ".html", etc.) + * @param file.data - The file contents. This will be whatever data type was returned by the resolver + * @param options + * + * @returns + * The promise resolves with the parsed file contents and the parser that was used. + */ +async function parseFile(file: FileInfo, options: Options, $refs: $Refs) { + // console.log('Parsing %s', file.url); + + // Find the parsers that can read this file type. + // If none of the parsers are an exact match for this file, then we'll try ALL of them. + // This handles situations where the file IS a supported type, just with an unknown extension. + const allParsers = plugins.all(options.parse); + const filteredParsers = plugins.filter(allParsers, "canParse", file); + const parsers = filteredParsers.length > 0 ? filteredParsers : allParsers; + + // Run the parsers, in order, until one of them succeeds + plugins.sort(parsers); + try { + const parser = await plugins.run(parsers, "parse", file, $refs); + if (!parser.plugin.allowEmpty && isEmpty(parser.result)) { + throw ono.syntax(`Error parsing "${file.url}" as ${parser.plugin.name}. \nParsed value is empty`); + } else { + return parser; + } + } catch (err: any) { + if (!err && options.continueOnError) { + // No resolver could be matched + throw new UnmatchedParserError(file.url); + } else if (err && err.message && err.message.startsWith("Error parsing")) { + throw err; + } else if (!err || !("error" in err)) { + throw ono.syntax(`Unable to parse ${file.url}`); + } else if (err.error instanceof ParserError) { + throw err.error; + } else { + throw new ParserError(err.error.message, file.url); + } + } +} + +/** + * Determines whether the parsed value is "empty". + * + * @param value + * @returns + */ +function isEmpty(value: any) { + return ( + value === undefined || + (typeof value === "object" && Object.keys(value).length === 0) || + (typeof value === "string" && value.trim().length === 0) || + (Buffer.isBuffer(value) && value.length === 0) + ); +} diff --git a/lib/parsers/binary.js b/lib/parsers/binary.js deleted file mode 100644 index 141fc3a8..00000000 --- a/lib/parsers/binary.js +++ /dev/null @@ -1,53 +0,0 @@ -let BINARY_REGEXP = /\.(jpeg|jpg|gif|png|bmp|ico)$/i; - -export default { - /** - * The order that this parser will run, in relation to other parsers. - * - * @type {number} - */ - order: 400, - - /** - * Whether to allow "empty" files (zero bytes). - * - * @type {boolean} - */ - allowEmpty: true, - - /** - * Determines whether this parser can parse a given file reference. - * Parsers that return true will be tried, in order, until one successfully parses the file. - * Parsers that return false will be skipped, UNLESS all parsers returned false, in which case - * every parser will be tried. - * - * @param {object} file - An object containing information about the referenced file - * @param {string} file.url - The full URL of the referenced file - * @param {string} file.extension - The lowercased file extension (e.g. ".txt", ".html", etc.) - * @param {*} file.data - The file contents. This will be whatever data type was returned by the resolver - * @returns {boolean} - */ - canParse (file) { - // Use this parser if the file is a Buffer, and has a known binary extension - return Buffer.isBuffer(file.data) && BINARY_REGEXP.test(file.url); - }, - - /** - * Parses the given data as a Buffer (byte array). - * - * @param {object} file - An object containing information about the referenced file - * @param {string} file.url - The full URL of the referenced file - * @param {string} file.extension - The lowercased file extension (e.g. ".txt", ".html", etc.) - * @param {*} file.data - The file contents. This will be whatever data type was returned by the resolver - * @returns {Buffer} - */ - parse (file) { - if (Buffer.isBuffer(file.data)) { - return file.data; - } - else { - // This will reject if data is anything other than a string or typed array - return Buffer.from(file.data); - } - } -}; diff --git a/lib/parsers/binary.ts b/lib/parsers/binary.ts new file mode 100644 index 00000000..1dc8a4f9 --- /dev/null +++ b/lib/parsers/binary.ts @@ -0,0 +1,39 @@ +import type { FileInfo } from "../types/index.js"; +import type { Plugin } from "../types/index.js"; + +const BINARY_REGEXP = /\.(jpeg|jpg|gif|png|bmp|ico)$/i; + +export default { + /** + * The order that this parser will run, in relation to other parsers. + */ + order: 400, + + /** + * Whether to allow "empty" files (zero bytes). + */ + allowEmpty: true, + + /** + * Determines whether this parser can parse a given file reference. + * Parsers that return true will be tried, in order, until one successfully parses the file. + * Parsers that return false will be skipped, UNLESS all parsers returned false, in which case + * every parser will be tried. + */ + canParse(file: FileInfo) { + // Use this parser if the file is a Buffer, and has a known binary extension + return Buffer.isBuffer(file.data) && BINARY_REGEXP.test(file.url); + }, + + /** + * Parses the given data as a Buffer (byte array). + */ + parse(file: FileInfo) { + if (Buffer.isBuffer(file.data)) { + return file.data; + } else { + // This will reject if data is anything other than a string or typed array + return Buffer.from(file.data); + } + }, +} as Plugin; diff --git a/lib/parsers/json.js b/lib/parsers/json.ts similarity index 61% rename from lib/parsers/json.js rename to lib/parsers/json.ts index 116ece19..aadfd200 100644 --- a/lib/parsers/json.js +++ b/lib/parsers/json.ts @@ -1,17 +1,15 @@ import { ParserError } from "../util/errors.js"; +import type { FileInfo } from "../types/index.js"; +import type { Plugin } from "../types/index.js"; export default { /** * The order that this parser will run, in relation to other parsers. - * - * @type {number} */ order: 100, /** * Whether to allow "empty" files. This includes zero-byte files, as well as empty JSON objects. - * - * @type {boolean} */ allowEmpty: true, @@ -20,21 +18,13 @@ export default { * Parsers that match will be tried, in order, until one successfully parses the file. * Parsers that don't match will be skipped, UNLESS none of the parsers match, in which case * every parser will be tried. - * - * @type {RegExp|string|string[]|function} */ canParse: ".json", /** * Parses the given file as JSON - * - * @param {object} file - An object containing information about the referenced file - * @param {string} file.url - The full URL of the referenced file - * @param {string} file.extension - The lowercased file extension (e.g. ".txt", ".html", etc.) - * @param {*} file.data - The file contents. This will be whatever data type was returned by the resolver - * @returns {Promise} */ - async parse (file) { // eslint-disable-line require-await + async parse(file: FileInfo): Promise { let data = file.data; if (Buffer.isBuffer(data)) { data = data.toString(); @@ -43,19 +33,16 @@ export default { if (typeof data === "string") { if (data.trim().length === 0) { return; // This mirrors the YAML behavior - } - else { + } else { try { return JSON.parse(data); - } - catch (e) { + } catch (e: any) { throw new ParserError(e.message, file.url); } } - } - else { + } else { // data is already a JavaScript value (object, array, number, null, NaN, etc.) - return data; + return data as object; } - } -}; + }, +} as Plugin; diff --git a/lib/parsers/text.js b/lib/parsers/text.js deleted file mode 100644 index a4975eb8..00000000 --- a/lib/parsers/text.js +++ /dev/null @@ -1,64 +0,0 @@ -import { ParserError } from "../util/errors.js"; - -let TEXT_REGEXP = /\.(txt|htm|html|md|xml|js|min|map|css|scss|less|svg)$/i; - -export default { - /** - * The order that this parser will run, in relation to other parsers. - * - * @type {number} - */ - order: 300, - - /** - * Whether to allow "empty" files (zero bytes). - * - * @type {boolean} - */ - allowEmpty: true, - - /** - * The encoding that the text is expected to be in. - * - * @type {string} - */ - encoding: "utf8", - - /** - * Determines whether this parser can parse a given file reference. - * Parsers that return true will be tried, in order, until one successfully parses the file. - * Parsers that return false will be skipped, UNLESS all parsers returned false, in which case - * every parser will be tried. - * - * @param {object} file - An object containing information about the referenced file - * @param {string} file.url - The full URL of the referenced file - * @param {string} file.extension - The lowercased file extension (e.g. ".txt", ".html", etc.) - * @param {*} file.data - The file contents. This will be whatever data type was returned by the resolver - * @returns {boolean} - */ - canParse (file) { - // Use this parser if the file is a string or Buffer, and has a known text-based extension - return (typeof file.data === "string" || Buffer.isBuffer(file.data)) && TEXT_REGEXP.test(file.url); - }, - - /** - * Parses the given file as text - * - * @param {object} file - An object containing information about the referenced file - * @param {string} file.url - The full URL of the referenced file - * @param {string} file.extension - The lowercased file extension (e.g. ".txt", ".html", etc.) - * @param {*} file.data - The file contents. This will be whatever data type was returned by the resolver - * @returns {string} - */ - parse (file) { - if (typeof file.data === "string") { - return file.data; - } - else if (Buffer.isBuffer(file.data)) { - return file.data.toString(this.encoding); - } - else { - throw new ParserError("data is not text", file.url); - } - } -}; diff --git a/lib/parsers/text.ts b/lib/parsers/text.ts new file mode 100644 index 00000000..19edf8b7 --- /dev/null +++ b/lib/parsers/text.ts @@ -0,0 +1,46 @@ +import { ParserError } from "../util/errors.js"; +import type { FileInfo } from "../types/index.js"; +import type { Plugin } from "../types/index.js"; + +const TEXT_REGEXP = /\.(txt|htm|html|md|xml|js|min|map|css|scss|less|svg)$/i; + +export default { + /** + * The order that this parser will run, in relation to other parsers. + */ + order: 300, + + /** + * Whether to allow "empty" files (zero bytes). + */ + allowEmpty: true, + + /** + * The encoding that the text is expected to be in. + */ + encoding: "utf8" as BufferEncoding, + + /** + * Determines whether this parser can parse a given file reference. + * Parsers that return true will be tried, in order, until one successfully parses the file. + * Parsers that return false will be skipped, UNLESS all parsers returned false, in which case + * every parser will be tried. + */ + canParse(file: FileInfo) { + // Use this parser if the file is a string or Buffer, and has a known text-based extension + return (typeof file.data === "string" || Buffer.isBuffer(file.data)) && TEXT_REGEXP.test(file.url); + }, + + /** + * Parses the given file as text + */ + parse(file: FileInfo) { + if (typeof file.data === "string") { + return file.data; + } else if (Buffer.isBuffer(file.data)) { + return file.data.toString(this.encoding); + } else { + throw new ParserError("data is not text", file.url); + } + }, +} as Plugin; diff --git a/lib/parsers/yaml.js b/lib/parsers/yaml.ts similarity index 60% rename from lib/parsers/yaml.js rename to lib/parsers/yaml.ts index 2c18743e..be440611 100644 --- a/lib/parsers/yaml.js +++ b/lib/parsers/yaml.ts @@ -1,19 +1,17 @@ import { ParserError } from "../util/errors.js"; import yaml from "js-yaml"; import { JSON_SCHEMA } from "js-yaml"; +import type { FileInfo } from "../types/index.js"; +import type { Plugin } from "../types/index.js"; export default { /** * The order that this parser will run, in relation to other parsers. - * - * @type {number} */ order: 200, /** * Whether to allow "empty" files. This includes zero-byte files, as well as empty JSON objects. - * - * @type {boolean} */ allowEmpty: true, @@ -22,21 +20,20 @@ export default { * Parsers that match will be tried, in order, until one successfully parses the file. * Parsers that don't match will be skipped, UNLESS none of the parsers match, in which case * every parser will be tried. - * - * @type {RegExp|string[]|function} */ - canParse: [".yaml", ".yml", ".json"], // JSON is valid YAML + canParse: [".yaml", ".yml", ".json"], // JSON is valid YAML /** * Parses the given file as YAML * - * @param {object} file - An object containing information about the referenced file - * @param {string} file.url - The full URL of the referenced file - * @param {string} file.extension - The lowercased file extension (e.g. ".txt", ".html", etc.) - * @param {*} file.data - The file contents. This will be whatever data type was returned by the resolver - * @returns {Promise} + * @param file - An object containing information about the referenced file + * @param file.url - The full URL of the referenced file + * @param file.extension - The lowercased file extension (e.g. ".txt", ".html", etc.) + * @param file.data - The file contents. This will be whatever data type was returned by the resolver + * @returns */ - async parse (file) { // eslint-disable-line require-await + async parse(file: FileInfo) { + // eslint-disable-line require-await let data = file.data; if (Buffer.isBuffer(data)) { data = data.toString(); @@ -45,14 +42,13 @@ export default { if (typeof data === "string") { try { return yaml.load(data, { schema: JSON_SCHEMA }); - } - catch (e) { + } catch (e) { + // @ts-expect-error TS(2571): Object is of type 'unknown'. throw new ParserError(e.message, file.url); } - } - else { + } else { // data is already a JavaScript value (object, array, number, null, NaN, etc.) return data; } - } -}; + }, +} as Plugin; diff --git a/lib/pointer.js b/lib/pointer.js deleted file mode 100644 index fd34ab9a..00000000 --- a/lib/pointer.js +++ /dev/null @@ -1,293 +0,0 @@ -export default Pointer; - -import $Ref from "./ref.js"; -import * as url from "./util/url.js"; -import { JSONParserError, InvalidPointerError, MissingPointerError, isHandledError } from "./util/errors.js"; -const slashes = /\//g; -const tildes = /~/g; -const escapedSlash = /~1/g; -const escapedTilde = /~0/g; - -/** - * This class represents a single JSON pointer and its resolved value. - * - * @param {$Ref} $ref - * @param {string} path - * @param {string} [friendlyPath] - The original user-specified path (used for error messages) - * @constructor - */ -function Pointer ($ref, path, friendlyPath) { - /** - * The {@link $Ref} object that contains this {@link Pointer} object. - * @type {$Ref} - */ - this.$ref = $ref; - - /** - * The file path or URL, containing the JSON pointer in the hash. - * This path is relative to the path of the main JSON schema file. - * @type {string} - */ - this.path = path; - - /** - * The original path or URL, used for error messages. - * @type {string} - */ - this.originalPath = friendlyPath || path; - - /** - * The value of the JSON pointer. - * Can be any JSON type, not just objects. Unknown file types are represented as Buffers (byte arrays). - * @type {?*} - */ - this.value = undefined; - - /** - * Indicates whether the pointer references itself. - * @type {boolean} - */ - this.circular = false; - - /** - * The number of indirect references that were traversed to resolve the value. - * Resolving a single pointer may require resolving multiple $Refs. - * @type {number} - */ - this.indirections = 0; -} - -/** - * Resolves the value of a nested property within the given object. - * - * @param {*} obj - The object that will be crawled - * @param {$RefParserOptions} options - * @param {string} pathFromRoot - the path of place that initiated resolving - * - * @returns {Pointer} - * Returns a JSON pointer whose {@link Pointer#value} is the resolved value. - * If resolving this value required resolving other JSON references, then - * the {@link Pointer#$ref} and {@link Pointer#path} will reflect the resolution path - * of the resolved value. - */ -Pointer.prototype.resolve = function (obj, options, pathFromRoot) { - let tokens = Pointer.parse(this.path, this.originalPath); - - // Crawl the object, one token at a time - this.value = unwrapOrThrow(obj); - - for (let i = 0; i < tokens.length; i++) { - if (resolveIf$Ref(this, options)) { - // The $ref path has changed, so append the remaining tokens to the path - this.path = Pointer.join(this.path, tokens.slice(i)); - } - - if (typeof this.value === "object" && this.value !== null && "$ref" in this.value) { - return this; - } - - let token = tokens[i]; - if (this.value[token] === undefined || this.value[token] === null) { - this.value = null; - throw new MissingPointerError(token, decodeURI(this.originalPath)); - } - else { - this.value = this.value[token]; - } - } - - // Resolve the final value - if (!this.value || this.value.$ref && url.resolve(this.path, this.value.$ref) !== pathFromRoot) { - resolveIf$Ref(this, options); - } - - return this; -}; - -/** - * Sets the value of a nested property within the given object. - * - * @param {*} obj - The object that will be crawled - * @param {*} value - the value to assign - * @param {$RefParserOptions} options - * - * @returns {*} - * Returns the modified object, or an entirely new object if the entire object is overwritten. - */ -Pointer.prototype.set = function (obj, value, options) { - let tokens = Pointer.parse(this.path); - let token; - - if (tokens.length === 0) { - // There are no tokens, replace the entire object with the new value - this.value = value; - return value; - } - - // Crawl the object, one token at a time - this.value = unwrapOrThrow(obj); - - for (let i = 0; i < tokens.length - 1; i++) { - resolveIf$Ref(this, options); - - token = tokens[i]; - if (this.value && this.value[token] !== undefined) { - // The token exists - this.value = this.value[token]; - } - else { - // The token doesn't exist, so create it - this.value = setValue(this, token, {}); - } - } - - // Set the value of the final token - resolveIf$Ref(this, options); - token = tokens[tokens.length - 1]; - setValue(this, token, value); - - // Return the updated object - return obj; -}; - -/** - * Parses a JSON pointer (or a path containing a JSON pointer in the hash) - * and returns an array of the pointer's tokens. - * (e.g. "schema.json#/definitions/person/name" => ["definitions", "person", "name"]) - * - * The pointer is parsed according to RFC 6901 - * {@link https://tools.ietf.org/html/rfc6901#section-3} - * - * @param {string} path - * @param {string} [originalPath] - * @returns {string[]} - */ -Pointer.parse = function (path, originalPath) { - // Get the JSON pointer from the path's hash - let pointer = url.getHash(path).substr(1); - - // If there's no pointer, then there are no tokens, - // so return an empty array - if (!pointer) { - return []; - } - - // Split into an array - pointer = pointer.split("/"); - - // Decode each part, according to RFC 6901 - for (let i = 0; i < pointer.length; i++) { - pointer[i] = decodeURIComponent(pointer[i].replace(escapedSlash, "/").replace(escapedTilde, "~")); - } - - if (pointer[0] !== "") { - throw new InvalidPointerError(pointer, originalPath === undefined ? path : originalPath); - } - - return pointer.slice(1); -}; - -/** - * Creates a JSON pointer path, by joining one or more tokens to a base path. - * - * @param {string} base - The base path (e.g. "schema.json#/definitions/person") - * @param {string|string[]} tokens - The token(s) to append (e.g. ["name", "first"]) - * @returns {string} - */ -Pointer.join = function (base, tokens) { - // Ensure that the base path contains a hash - if (base.indexOf("#") === -1) { - base += "#"; - } - - // Append each token to the base path - tokens = Array.isArray(tokens) ? tokens : [tokens]; - for (let i = 0; i < tokens.length; i++) { - let token = tokens[i]; - // Encode the token, according to RFC 6901 - base += "/" + encodeURIComponent(token.replace(tildes, "~0").replace(slashes, "~1")); - } - - return base; -}; - -/** - * If the given pointer's {@link Pointer#value} is a JSON reference, - * then the reference is resolved and {@link Pointer#value} is replaced with the resolved value. - * In addition, {@link Pointer#path} and {@link Pointer#$ref} are updated to reflect the - * resolution path of the new value. - * - * @param {Pointer} pointer - * @param {$RefParserOptions} options - * @returns {boolean} - Returns `true` if the resolution path changed - */ -function resolveIf$Ref (pointer, options) { - // Is the value a JSON reference? (and allowed?) - - if ($Ref.isAllowed$Ref(pointer.value, options)) { - let $refPath = url.resolve(pointer.path, pointer.value.$ref); - - if ($refPath === pointer.path) { - // The value is a reference to itself, so there's nothing to do. - pointer.circular = true; - } - else { - let resolved = pointer.$ref.$refs._resolve($refPath, pointer.path, options); - if (resolved === null) { - return false; - } - - pointer.indirections += resolved.indirections + 1; - - if ($Ref.isExtended$Ref(pointer.value)) { - // This JSON reference "extends" the resolved value, rather than simply pointing to it. - // So the resolved path does NOT change. Just the value does. - pointer.value = $Ref.dereference(pointer.value, resolved.value); - return false; - } - else { - // Resolve the reference - pointer.$ref = resolved.$ref; - pointer.path = resolved.path; - pointer.value = resolved.value; - } - - return true; - } - } -} - -/** - * Sets the specified token value of the {@link Pointer#value}. - * - * The token is evaluated according to RFC 6901. - * {@link https://tools.ietf.org/html/rfc6901#section-4} - * - * @param {Pointer} pointer - The JSON Pointer whose value will be modified - * @param {string} token - A JSON Pointer token that indicates how to modify `obj` - * @param {*} value - The value to assign - * @returns {*} - Returns the assigned value - */ -function setValue (pointer, token, value) { - if (pointer.value && typeof pointer.value === "object") { - if (token === "-" && Array.isArray(pointer.value)) { - pointer.value.push(value); - } - else { - pointer.value[token] = value; - } - } - else { - throw new JSONParserError(`Error assigning $ref pointer "${pointer.path}". \nCannot set "${token}" of a non-object.`); - } - return value; -} - - -function unwrapOrThrow (value) { - if (isHandledError(value)) { - throw value; - } - - return value; -} diff --git a/lib/pointer.ts b/lib/pointer.ts new file mode 100644 index 00000000..b2a1e0d2 --- /dev/null +++ b/lib/pointer.ts @@ -0,0 +1,296 @@ +import type $RefParserOptions from "./options.js"; + +import $Ref from "./ref.js"; +import * as url from "./util/url.js"; +import { JSONParserError, InvalidPointerError, MissingPointerError, isHandledError } from "./util/errors.js"; +const slashes = /\//g; +const tildes = /~/g; +const escapedSlash = /~1/g; +const escapedTilde = /~0/g; + +/** + * This class represents a single JSON pointer and its resolved value. + * + * @param $ref + * @param path + * @param [friendlyPath] - The original user-specified path (used for error messages) + * @class + */ +class Pointer { + /** + * The {@link $Ref} object that contains this {@link Pointer} object. + */ + $ref: $Ref; + + /** + * The file path or URL, containing the JSON pointer in the hash. + * This path is relative to the path of the main JSON schema file. + */ + path: string; + + /** + * The original path or URL, used for error messages. + */ + originalPath: string; + + /** + * The value of the JSON pointer. + * Can be any JSON type, not just objects. Unknown file types are represented as Buffers (byte arrays). + */ + + value: any; + /** + * Indicates whether the pointer references itself. + */ + circular: boolean; + /** + * The number of indirect references that were traversed to resolve the value. + * Resolving a single pointer may require resolving multiple $Refs. + */ + indirections: number; + + constructor($ref: any, path: any, friendlyPath: any) { + this.$ref = $ref; + + this.path = path; + + this.originalPath = friendlyPath || path; + + this.value = undefined; + + this.circular = false; + + this.indirections = 0; + } + + /** + * Resolves the value of a nested property within the given object. + * + * @param obj - The object that will be crawled + * @param options + * @param pathFromRoot - the path of place that initiated resolving + * + * @returns + * Returns a JSON pointer whose {@link Pointer#value} is the resolved value. + * If resolving this value required resolving other JSON references, then + * the {@link Pointer#$ref} and {@link Pointer#path} will reflect the resolution path + * of the resolved value. + */ + resolve(obj: any, options: any, pathFromRoot: any) { + const tokens = Pointer.parse(this.path, this.originalPath); + + // Crawl the object, one token at a time + this.value = unwrapOrThrow(obj); + + for (let i = 0; i < tokens.length; i++) { + if (resolveIf$Ref(this, options)) { + // The $ref path has changed, so append the remaining tokens to the path + this.path = Pointer.join(this.path, tokens.slice(i)); + } + + if (typeof this.value === "object" && this.value !== null && "$ref" in this.value) { + return this; + } + + const token = tokens[i]; + if (this.value[token] === undefined || this.value[token] === null) { + this.value = null; + throw new MissingPointerError(token, decodeURI(this.originalPath)); + } else { + this.value = this.value[token]; + } + } + + // Resolve the final value + if (!this.value || (this.value.$ref && url.resolve(this.path, this.value.$ref) !== pathFromRoot)) { + resolveIf$Ref(this, options); + } + + return this; + } + + /** + * Sets the value of a nested property within the given object. + * + * @param obj - The object that will be crawled + * @param value - the value to assign + * @param options + * + * @returns + * Returns the modified object, or an entirely new object if the entire object is overwritten. + */ + set(obj: any, value: any, options?: $RefParserOptions) { + const tokens = Pointer.parse(this.path); + let token; + + if (tokens.length === 0) { + // There are no tokens, replace the entire object with the new value + this.value = value; + return value; + } + + // Crawl the object, one token at a time + this.value = unwrapOrThrow(obj); + + for (let i = 0; i < tokens.length - 1; i++) { + resolveIf$Ref(this, options); + + token = tokens[i]; + if (this.value && this.value[token] !== undefined) { + // The token exists + this.value = this.value[token]; + } else { + // The token doesn't exist, so create it + this.value = setValue(this, token, {}); + } + } + + // Set the value of the final token + resolveIf$Ref(this, options); + token = tokens[tokens.length - 1]; + setValue(this, token, value); + + // Return the updated object + return obj; + } + + /** + * Parses a JSON pointer (or a path containing a JSON pointer in the hash) + * and returns an array of the pointer's tokens. + * (e.g. "schema.json#/definitions/person/name" => ["definitions", "person", "name"]) + * + * The pointer is parsed according to RFC 6901 + * {@link https://tools.ietf.org/html/rfc6901#section-3} + * + * @param path + * @param [originalPath] + * @returns + */ + static parse(path: string, originalPath?: string) { + // Get the JSON pointer from the path's hash + let pointer = url.getHash(path).substr(1); + + // If there's no pointer, then there are no tokens, + // so return an empty array + if (!pointer) { + return []; + } + + // Split into an array + pointer = pointer.split("/"); + + // Decode each part, according to RFC 6901 + for (let i = 0; i < pointer.length; i++) { + pointer[i] = decodeURIComponent(pointer[i].replace(escapedSlash, "/").replace(escapedTilde, "~")); + } + + if (pointer[0] !== "") { + throw new InvalidPointerError(pointer, originalPath === undefined ? path : originalPath); + } + + return pointer.slice(1); + } + + /** + * Creates a JSON pointer path, by joining one or more tokens to a base path. + * + * @param base - The base path (e.g. "schema.json#/definitions/person") + * @param tokens - The token(s) to append (e.g. ["name", "first"]) + * @returns + */ + static join(base: any, tokens: any) { + // Ensure that the base path contains a hash + if (base.indexOf("#") === -1) { + base += "#"; + } + + // Append each token to the base path + tokens = Array.isArray(tokens) ? tokens : [tokens]; + for (let i = 0; i < tokens.length; i++) { + const token = tokens[i]; + // Encode the token, according to RFC 6901 + base += "/" + encodeURIComponent(token.replace(tildes, "~0").replace(slashes, "~1")); + } + + return base; + } +} + +/** + * If the given pointer's {@link Pointer#value} is a JSON reference, + * then the reference is resolved and {@link Pointer#value} is replaced with the resolved value. + * In addition, {@link Pointer#path} and {@link Pointer#$ref} are updated to reflect the + * resolution path of the new value. + * + * @param pointer + * @param options + * @returns - Returns `true` if the resolution path changed + */ +function resolveIf$Ref(pointer: any, options: any) { + // Is the value a JSON reference? (and allowed?) + + if ($Ref.isAllowed$Ref(pointer.value, options)) { + const $refPath = url.resolve(pointer.path, pointer.value.$ref); + + if ($refPath === pointer.path) { + // The value is a reference to itself, so there's nothing to do. + pointer.circular = true; + } else { + const resolved = pointer.$ref.$refs._resolve($refPath, pointer.path, options); + if (resolved === null) { + return false; + } + + pointer.indirections += resolved.indirections + 1; + + if ($Ref.isExtended$Ref(pointer.value)) { + // This JSON reference "extends" the resolved value, rather than simply pointing to it. + // So the resolved path does NOT change. Just the value does. + pointer.value = $Ref.dereference(pointer.value, resolved.value); + return false; + } else { + // Resolve the reference + pointer.$ref = resolved.$ref; + pointer.path = resolved.path; + pointer.value = resolved.value; + } + + return true; + } + } +} +export default Pointer; + +/** + * Sets the specified token value of the {@link Pointer#value}. + * + * The token is evaluated according to RFC 6901. + * {@link https://tools.ietf.org/html/rfc6901#section-4} + * + * @param pointer - The JSON Pointer whose value will be modified + * @param token - A JSON Pointer token that indicates how to modify `obj` + * @param value - The value to assign + * @returns - Returns the assigned value + */ +function setValue(pointer: any, token: any, value: any) { + if (pointer.value && typeof pointer.value === "object") { + if (token === "-" && Array.isArray(pointer.value)) { + pointer.value.push(value); + } else { + pointer.value[token] = value; + } + } else { + throw new JSONParserError( + `Error assigning $ref pointer "${pointer.path}". \nCannot set "${token}" of a non-object.`, + ); + } + return value; +} + +function unwrapOrThrow(value: any) { + if (isHandledError(value)) { + throw value; + } + + return value; +} diff --git a/lib/ref.js b/lib/ref.js deleted file mode 100644 index 8fa6b9ca..00000000 --- a/lib/ref.js +++ /dev/null @@ -1,292 +0,0 @@ -export default $Ref; - -import Pointer from "./pointer.js"; -import { InvalidPointerError, isHandledError, normalizeError } from "./util/errors.js"; -import { safePointerToPath, stripHash, getHash } from "./util/url.js"; - -/** - * This class represents a single JSON reference and its resolved value. - * - * @class - */ -function $Ref () { - /** - * The file path or URL of the referenced file. - * This path is relative to the path of the main JSON schema file. - * - * This path does NOT contain document fragments (JSON pointers). It always references an ENTIRE file. - * Use methods such as {@link $Ref#get}, {@link $Ref#resolve}, and {@link $Ref#exists} to get - * specific JSON pointers within the file. - * - * @type {string} - */ - this.path = undefined; - - /** - * The resolved value of the JSON reference. - * Can be any JSON type, not just objects. Unknown file types are represented as Buffers (byte arrays). - * - * @type {?*} - */ - this.value = undefined; - - /** - * The {@link $Refs} object that contains this {@link $Ref} object. - * - * @type {$Refs} - */ - this.$refs = undefined; - - /** - * Indicates the type of {@link $Ref#path} (e.g. "file", "http", etc.) - * - * @type {?string} - */ - this.pathType = undefined; - - /** - * List of all errors. Undefined if no errors. - * - * @type {Array} - */ - this.errors = undefined; -} - -/** - * Pushes an error to errors array. - * - * @param {Array} err - The error to be pushed - * @returns {void} - */ -$Ref.prototype.addError = function (err) { - if (this.errors === undefined) { - this.errors = []; - } - - const existingErrors = this.errors.map(({ footprint }) => footprint); - - // the path has been almost certainly set at this point, - // but just in case something went wrong, normalizeError injects path if necessary - // moreover, certain errors might point at the same spot, so filter them out to reduce noise - if (Array.isArray(err.errors)) { - this.errors.push(...err.errors - .map(normalizeError) - .filter(({ footprint }) => !existingErrors.includes(footprint)), - ); - } - else if (!existingErrors.includes(err.footprint)) { - this.errors.push(normalizeError(err)); - } -}; - -/** - * Determines whether the given JSON reference exists within this {@link $Ref#value}. - * - * @param {string} path - The full path being resolved, optionally with a JSON pointer in the hash - * @param {$RefParserOptions} options - * @returns {boolean} - */ -$Ref.prototype.exists = function (path, options) { - try { - this.resolve(path, options); - return true; - } - catch (e) { - return false; - } -}; - -/** - * Resolves the given JSON reference within this {@link $Ref#value} and returns the resolved value. - * - * @param {string} path - The full path being resolved, optionally with a JSON pointer in the hash - * @param {$RefParserOptions} options - * @returns {*} - Returns the resolved value - */ -$Ref.prototype.get = function (path, options) { - return this.resolve(path, options).value; -}; - -/** - * Resolves the given JSON reference within this {@link $Ref#value}. - * - * @param {string} path - The full path being resolved, optionally with a JSON pointer in the hash - * @param {$RefParserOptions} options - * @param {string} friendlyPath - The original user-specified path (used for error messages) - * @param {string} pathFromRoot - The path of `obj` from the schema root - * @returns {Pointer | null} - */ -$Ref.prototype.resolve = function (path, options, friendlyPath, pathFromRoot) { - let pointer = new Pointer(this, path, friendlyPath); - try { - return pointer.resolve(this.value, options, pathFromRoot); - } - catch (err) { - if (!options || !options.continueOnError || !isHandledError(err)) { - throw err; - } - - if (err.path === null) { - err.path = safePointerToPath(getHash(pathFromRoot)); - } - - if (err instanceof InvalidPointerError) { - // this is a special case - InvalidPointerError is thrown when dereferencing external file, - // but the issue is caused by the source file that referenced the file that undergoes dereferencing - err.source = decodeURI(stripHash(pathFromRoot)); - } - - this.addError(err); - return null; - } -}; - -/** - * Sets the value of a nested property within this {@link $Ref#value}. - * If the property, or any of its parents don't exist, they will be created. - * - * @param {string} path - The full path of the property to set, optionally with a JSON pointer in the hash - * @param {*} value - The value to assign - */ -$Ref.prototype.set = function (path, value) { - let pointer = new Pointer(this, path); - this.value = pointer.set(this.value, value); -}; - -/** - * Determines whether the given value is a JSON reference. - * - * @param {*} value - The value to inspect - * @returns {boolean} - */ -$Ref.is$Ref = function (value) { - return value && typeof value === "object" && typeof value.$ref === "string" && value.$ref.length > 0; -}; - -/** - * Determines whether the given value is an external JSON reference. - * - * @param {*} value - The value to inspect - * @returns {boolean} - */ -$Ref.isExternal$Ref = function (value) { - return $Ref.is$Ref(value) && value.$ref[0] !== "#"; -}; - -/** - * Determines whether the given value is a JSON reference, and whether it is allowed by the options. - * For example, if it references an external file, then options.resolve.external must be true. - * - * @param {*} value - The value to inspect - * @param {$RefParserOptions} options - * @returns {boolean} - */ -$Ref.isAllowed$Ref = function (value, options) { - if ($Ref.is$Ref(value)) { - if (value.$ref.substr(0, 2) === "#/" || value.$ref === "#") { - // It's a JSON Pointer reference, which is always allowed - return true; - } - else if (value.$ref[0] !== "#" && (!options || options.resolve.external)) { - // It's an external reference, which is allowed by the options - return true; - } - } -}; - -/** - * Determines whether the given value is a JSON reference that "extends" its resolved value. - * That is, it has extra properties (in addition to "$ref"), so rather than simply pointing to - * an existing value, this $ref actually creates a NEW value that is a shallow copy of the resolved - * value, plus the extra properties. - * - * @example: - * { - * person: { - * properties: { - * firstName: { type: string } - * lastName: { type: string } - * } - * } - * employee: { - * properties: { - * $ref: #/person/properties - * salary: { type: number } - * } - * } - * } - * - * In this example, "employee" is an extended $ref, since it extends "person" with an additional - * property (salary). The result is a NEW value that looks like this: - * - * { - * properties: { - * firstName: { type: string } - * lastName: { type: string } - * salary: { type: number } - * } - * } - * - * @param {*} value - The value to inspect - * @returns {boolean} - */ -$Ref.isExtended$Ref = function (value) { - return $Ref.is$Ref(value) && Object.keys(value).length > 1; -}; - -/** - * Returns the resolved value of a JSON Reference. - * If necessary, the resolved value is merged with the JSON Reference to create a new object - * - * @example: - * { - * person: { - * properties: { - * firstName: { type: string } - * lastName: { type: string } - * } - * } - * employee: { - * properties: { - * $ref: #/person/properties - * salary: { type: number } - * } - * } - * } - * - * When "person" and "employee" are merged, you end up with the following object: - * - * { - * properties: { - * firstName: { type: string } - * lastName: { type: string } - * salary: { type: number } - * } - * } - * - * @param {object} $ref - The JSON reference object (the one with the "$ref" property) - * @param {*} resolvedValue - The resolved value, which can be any type - * @returns {*} - Returns the dereferenced value - */ -$Ref.dereference = function ($ref, resolvedValue) { - if (resolvedValue && typeof resolvedValue === "object" && $Ref.isExtended$Ref($ref)) { - let merged = {}; - for (let key of Object.keys($ref)) { - if (key !== "$ref") { - merged[key] = $ref[key]; - } - } - - for (let key of Object.keys(resolvedValue)) { - if (!(key in merged)) { - merged[key] = resolvedValue[key]; - } - } - - return merged; - } - else { - // Completely replace the original reference with the resolved value - return resolvedValue; - } -}; diff --git a/lib/ref.ts b/lib/ref.ts new file mode 100644 index 00000000..f4284718 --- /dev/null +++ b/lib/ref.ts @@ -0,0 +1,288 @@ +import Pointer from "./pointer.js"; +import type { JSONParserError, MissingPointerError, ParserError, ResolverError } from "./util/errors.js"; +import { InvalidPointerError, isHandledError, normalizeError } from "./util/errors.js"; +import { safePointerToPath, stripHash, getHash } from "./util/url.js"; +import type $Refs from "./refs.js"; +import type $RefParserOptions from "./options.js"; +import type { JSONSchema } from "./types/index.js"; + +type $RefError = JSONParserError | ResolverError | ParserError | MissingPointerError; + +/** + * This class represents a single JSON reference and its resolved value. + * + * @class + */ +class $Ref { + /** + * The file path or URL of the referenced file. + * This path is relative to the path of the main JSON schema file. + * + * This path does NOT contain document fragments (JSON pointers). It always references an ENTIRE file. + * Use methods such as {@link $Ref#get}, {@link $Ref#resolve}, and {@link $Ref#exists} to get + * specific JSON pointers within the file. + * + * @type {string} + */ + path: undefined | string; + + /** + * The resolved value of the JSON reference. + * Can be any JSON type, not just objects. Unknown file types are represented as Buffers (byte arrays). + * + * @type {?*} + */ + value: any; + + /** + * The {@link $Refs} object that contains this {@link $Ref} object. + * + * @type {$Refs} + */ + $refs: $Refs; + + /** + * Indicates the type of {@link $Ref#path} (e.g. "file", "http", etc.) + */ + pathType: string | unknown; + + /** + * List of all errors. Undefined if no errors. + */ + errors: Array<$RefError> = []; + + constructor($refs: $Refs) { + this.$refs = $refs; + } + + /** + * Pushes an error to errors array. + * + * @param err - The error to be pushed + * @returns + */ + addError(err: $RefError) { + if (this.errors === undefined) { + this.errors = []; + } + + const existingErrors = this.errors.map(({ footprint }: any) => footprint); + + // the path has been almost certainly set at this point, + // but just in case something went wrong, normalizeError injects path if necessary + // moreover, certain errors might point at the same spot, so filter them out to reduce noise + if ("errors" in err && Array.isArray(err.errors)) { + this.errors.push( + ...err.errors.map(normalizeError).filter(({ footprint }: any) => !existingErrors.includes(footprint)), + ); + } else if (!("footprint" in err) || !existingErrors.includes(err.footprint)) { + this.errors.push(normalizeError(err)); + } + } + + /** + * Determines whether the given JSON reference exists within this {@link $Ref#value}. + * + * @param path - The full path being resolved, optionally with a JSON pointer in the hash + * @param options + * @returns + */ + exists(path: string, options: any) { + try { + this.resolve(path, options); + return true; + } catch (e) { + return false; + } + } + + /** + * Resolves the given JSON reference within this {@link $Ref#value} and returns the resolved value. + * + * @param path - The full path being resolved, optionally with a JSON pointer in the hash + * @param options + * @returns - Returns the resolved value + */ + get(path: any, options: any) { + return this.resolve(path, options)?.value; + } + + /** + * Resolves the given JSON reference within this {@link $Ref#value}. + * + * @param path - The full path being resolved, optionally with a JSON pointer in the hash + * @param options + * @param friendlyPath - The original user-specified path (used for error messages) + * @param pathFromRoot - The path of `obj` from the schema root + * @returns + */ + resolve(path: any, options?: $RefParserOptions, friendlyPath?: string, pathFromRoot?: string) { + const pointer = new Pointer(this, path, friendlyPath); + try { + return pointer.resolve(this.value, options, pathFromRoot); + } catch (err: any) { + if (!options || !options.continueOnError || !isHandledError(err)) { + throw err; + } + + if (err.path === null) { + err.path = safePointerToPath(getHash(pathFromRoot)); + } + + if (err instanceof InvalidPointerError) { + err.source = decodeURI(stripHash(pathFromRoot)); + } + + this.addError(err); + return null; + } + } + + /** + * Sets the value of a nested property within this {@link $Ref#value}. + * If the property, or any of its parents don't exist, they will be created. + * + * @param path - The full path of the property to set, optionally with a JSON pointer in the hash + * @param value - The value to assign + */ + set(path: any, value: any) { + // @ts-expect-error TS(2554): Expected 3 arguments, but got 2. + const pointer = new Pointer(this, path); + this.value = pointer.set(this.value, value); + } + + /** + * Determines whether the given value is a JSON reference. + * + * @param value - The value to inspect + * @returns + */ + static is$Ref(value: any): value is { $ref: string; length?: number } { + return value && typeof value === "object" && typeof value.$ref === "string"; + } + + /** + * Determines whether the given value is an external JSON reference. + * + * @param value - The value to inspect + * @returns + */ + static isExternal$Ref(value: any): value is JSONSchema { + return $Ref.is$Ref(value) && value.$ref![0] !== "#"; + } + + /** + * Determines whether the given value is a JSON reference, and whether it is allowed by the options. + * For example, if it references an external file, then options.resolve.external must be true. + * + * @param value - The value to inspect + * @param options + * @returns + */ + static isAllowed$Ref(value: any, options: any) { + if (this.is$Ref(value)) { + if (value.$ref.substring(0, 2) === "#/" || value.$ref === "#") { + // It's a JSON Pointer reference, which is always allowed + return true; + } else if (value.$ref[0] !== "#" && (!options || options.resolve.external)) { + // It's an external reference, which is allowed by the options + return true; + } + } + } + + /** + * Determines whether the given value is a JSON reference that "extends" its resolved value. + * That is, it has extra properties (in addition to "$ref"), so rather than simply pointing to + * an existing value, this $ref actually creates a NEW value that is a shallow copy of the resolved + * value, plus the extra properties. + * + * @example: { + person: { + properties: { + firstName: { type: string } + lastName: { type: string } + } + } + employee: { + properties: { + $ref: #/person/properties + salary: { type: number } + } + } + } + * In this example, "employee" is an extended $ref, since it extends "person" with an additional + * property (salary). The result is a NEW value that looks like this: + * + * { + * properties: { + * firstName: { type: string } + * lastName: { type: string } + * salary: { type: number } + * } + * } + * + * @param value - The value to inspect + * @returns + */ + static isExtended$Ref(value: any) { + return $Ref.is$Ref(value) && Object.keys(value).length > 1; + } + + /** + * Returns the resolved value of a JSON Reference. + * If necessary, the resolved value is merged with the JSON Reference to create a new object + * + * @example: { + person: { + properties: { + firstName: { type: string } + lastName: { type: string } + } + } + employee: { + properties: { + $ref: #/person/properties + salary: { type: number } + } + } + } When "person" and "employee" are merged, you end up with the following object: + * + * { + * properties: { + * firstName: { type: string } + * lastName: { type: string } + * salary: { type: number } + * } + * } + * + * @param $ref - The JSON reference object (the one with the "$ref" property) + * @param resolvedValue - The resolved value, which can be any type + * @returns - Returns the dereferenced value + */ + static dereference($ref: $Ref, resolvedValue: any) { + if (resolvedValue && typeof resolvedValue === "object" && $Ref.isExtended$Ref($ref)) { + const merged = {}; + for (const key of Object.keys($ref)) { + if (key !== "$ref") { + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message + merged[key] = $ref[key]; + } + } + + for (const key of Object.keys(resolvedValue)) { + if (!(key in merged)) { + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message + merged[key] = resolvedValue[key]; + } + } + + return merged; + } else { + // Completely replace the original reference with the resolved value + return resolvedValue; + } + } +} + +export default $Ref; diff --git a/lib/refs.js b/lib/refs.js deleted file mode 100644 index 96a3b790..00000000 --- a/lib/refs.js +++ /dev/null @@ -1,196 +0,0 @@ -import { ono } from "@jsdevtools/ono"; -import $Ref from "./ref.js"; -import * as url from "./util/url.js"; - -const isWindows = /^win/.test(globalThis.process ? globalThis.process.platform : undefined); -const getPathFromOs = filePath => isWindows ? filePath.replace(/\\/g, "/") : filePath; - -/** - * This class is a map of JSON references and their resolved values. - */ -export default function $Refs () { - /** - * Indicates whether the schema contains any circular references. - * - * @type {boolean} - */ - this.circular = false; - - /** - * A map of paths/urls to {@link $Ref} objects - * - * @type {object} - * @protected - */ - this._$refs = {}; - - /** - * The {@link $Ref} object that is the root of the JSON schema. - * - * @type {$Ref} - * @protected - */ - this._root$Ref = null; -} - -/** - * Returns the paths of all the files/URLs that are referenced by the JSON schema, - * including the schema itself. - * - * @param {...string|string[]} [types] - Only return paths of the given types ("file", "http", etc.) - * @returns {string[]} - */ -$Refs.prototype.paths = function (types) { // eslint-disable-line no-unused-vars - let paths = getPaths(this._$refs, arguments); - return paths.map((path) => { - return getPathFromOs(path.decoded); - }); -}; - -/** - * Returns the map of JSON references and their resolved values. - * - * @param {...string|string[]} [types] - Only return references of the given types ("file", "http", etc.) - * @returns {object} - */ -$Refs.prototype.values = function (types) { // eslint-disable-line no-unused-vars - let $refs = this._$refs; - let paths = getPaths($refs, arguments); - return paths.reduce((obj, path) => { - obj[getPathFromOs(path.decoded)] = $refs[path.encoded].value; - return obj; - }, {}); -}; - -/** - * Returns a POJO (plain old JavaScript object) for serialization as JSON. - * - * @returns {object} - */ -$Refs.prototype.toJSON = $Refs.prototype.values; - -/** - * Determines whether the given JSON reference exists. - * - * @param {string} path - The path being resolved, optionally with a JSON pointer in the hash - * @param {$RefParserOptions} [options] - * @returns {boolean} - */ -$Refs.prototype.exists = function (path, options) { - try { - this._resolve(path, "", options); - return true; - } - catch (e) { - return false; - } -}; - -/** - * Resolves the given JSON reference and returns the resolved value. - * - * @param {string} path - The path being resolved, with a JSON pointer in the hash - * @param {$RefParserOptions} [options] - * @returns {*} - Returns the resolved value - */ -$Refs.prototype.get = function (path, options) { - return this._resolve(path, "", options).value; -}; - -/** - * Sets the value of a nested property within this {@link $Ref#value}. - * If the property, or any of its parents don't exist, they will be created. - * - * @param {string} path - The path of the property to set, optionally with a JSON pointer in the hash - * @param {*} value - The value to assign - */ -$Refs.prototype.set = function (path, value) { - let absPath = url.resolve(this._root$Ref.path, path); - let withoutHash = url.stripHash(absPath); - let $ref = this._$refs[withoutHash]; - - if (!$ref) { - throw ono(`Error resolving $ref pointer "${path}". \n"${withoutHash}" not found.`); - } - - $ref.set(absPath, value); -}; - -/** - * Creates a new {@link $Ref} object and adds it to this {@link $Refs} object. - * - * @param {string} path - The file path or URL of the referenced file - */ -$Refs.prototype._add = function (path) { - let withoutHash = url.stripHash(path); - - let $ref = new $Ref(); - $ref.path = withoutHash; - $ref.$refs = this; - - this._$refs[withoutHash] = $ref; - this._root$Ref = this._root$Ref || $ref; - - return $ref; -}; - -/** - * Resolves the given JSON reference. - * - * @param {string} path - The path being resolved, optionally with a JSON pointer in the hash - * @param {string} pathFromRoot - The path of `obj` from the schema root - * @param {$RefParserOptions} [options] - * @returns {Pointer} - * @protected - */ -$Refs.prototype._resolve = function (path, pathFromRoot, options) { - let absPath = url.resolve(this._root$Ref.path, path); - let withoutHash = url.stripHash(absPath); - let $ref = this._$refs[withoutHash]; - - if (!$ref) { - throw ono(`Error resolving $ref pointer "${path}". \n"${withoutHash}" not found.`); - } - - return $ref.resolve(absPath, options, path, pathFromRoot); -}; - -/** - * Returns the specified {@link $Ref} object, or undefined. - * - * @param {string} path - The path being resolved, optionally with a JSON pointer in the hash - * @returns {$Ref|undefined} - * @protected - */ -$Refs.prototype._get$Ref = function (path) { - path = url.resolve(this._root$Ref.path, path); - let withoutHash = url.stripHash(path); - return this._$refs[withoutHash]; -}; - -/** - * Returns the encoded and decoded paths keys of the given object. - * - * @param {object} $refs - The object whose keys are URL-encoded paths - * @param {...string|string[]} [types] - Only return paths of the given types ("file", "http", etc.) - * @returns {object[]} - */ -function getPaths ($refs, types) { - let paths = Object.keys($refs); - - // Filter the paths by type - types = Array.isArray(types[0]) ? types[0] : Array.prototype.slice.call(types); - if (types.length > 0 && types[0]) { - paths = paths.filter((key) => { - return types.indexOf($refs[key].pathType) !== -1; - }); - } - - // Decode local filesystem paths - return paths.map((path) => { - return { - encoded: path, - decoded: $refs[path].pathType === "file" ? url.toFileSystemPath(path, true) : path - }; - }); -} diff --git a/lib/refs.ts b/lib/refs.ts new file mode 100644 index 00000000..ec1a5e4b --- /dev/null +++ b/lib/refs.ts @@ -0,0 +1,238 @@ +import { ono } from "@jsdevtools/ono"; +import $Ref from "./ref.js"; +import * as url from "./util/url.js"; +import type { JSONSchema4Type, JSONSchema6Type, JSONSchema7Type } from "json-schema"; +import type { JSONSchema } from "./types/index.js"; +import type $RefParserOptions from "./options.js"; + +const isWindows = /^win/.test(globalThis.process ? globalThis.process.platform : ""); +const getPathFromOs = (filePath: string): string => (isWindows ? filePath.replace(/\\/g, "/") : filePath); + +interface $RefsMap { + [url: string]: $Ref; +} +/** + * When you call the resolve method, the value that gets passed to the callback function (or Promise) is a $Refs object. This same object is accessible via the parser.$refs property of $RefParser objects. + * + * This object is a map of JSON References and their resolved values. It also has several convenient helper methods that make it easy for you to navigate and manipulate the JSON References. + * + * See https://apitools.dev/json-schema-ref-parser/docs/refs.html + */ +export default class $Refs { + /** + * This property is true if the schema contains any circular references. You may want to check this property before serializing the dereferenced schema as JSON, since JSON.stringify() does not support circular references by default. + * + * See https://apitools.dev/json-schema-ref-parser/docs/refs.html#circular + */ + public circular: boolean; + + /** + * Returns the paths/URLs of all the files in your schema (including the main schema file). + * + * See https://apitools.dev/json-schema-ref-parser/docs/refs.html#pathstypes + * + * @param types (optional) Optionally only return certain types of paths ("file", "http", etc.) + */ + paths(...types: string[]): string[] { + const paths = getPaths(this._$refs, types); + return paths.map((path) => { + return getPathFromOs(path.decoded); + }); + } + + /** + * Returns a map of paths/URLs and their correspond values. + * + * See https://apitools.dev/json-schema-ref-parser/docs/refs.html#valuestypes + * + * @param types (optional) Optionally only return values from certain locations ("file", "http", etc.) + */ + values(...types: string[]): JSONSchema { + const $refs = this._$refs; + const paths = getPaths($refs, types); + return paths.reduce>((obj, path) => { + obj[getPathFromOs(path.decoded)] = $refs[path.encoded].value; + return obj; + }, {}); + } + + /** + * Returns `true` if the given path exists in the schema; otherwise, returns `false` + * + * See https://apitools.dev/json-schema-ref-parser/docs/refs.html#existsref + * + * @param $ref The JSON Reference path, optionally with a JSON Pointer in the hash + */ + /** + * Determines whether the given JSON reference exists. + * + * @param path - The path being resolved, optionally with a JSON pointer in the hash + * @param [options] + * @returns + */ + exists(path: string, options: any) { + try { + this._resolve(path, "", options); + return true; + } catch (e) { + return false; + } + } + + /** + * Resolves the given JSON reference and returns the resolved value. + * + * @param path - The path being resolved, with a JSON pointer in the hash + * @param [options] + * @returns - Returns the resolved value + */ + get(path: string, options?: $RefParserOptions): JSONSchema4Type | JSONSchema6Type | JSONSchema7Type { + return this._resolve(path, "", options)!.value; + } + + /** + * Sets the value at the given path in the schema. If the property, or any of its parents, don't exist, they will be created. + * + * @param $ref The JSON Reference path, optionally with a JSON Pointer in the hash + * @param value The value to assign. Can be anything (object, string, number, etc.) + */ + set(path: any, value: JSONSchema4Type | JSONSchema6Type | JSONSchema7Type) { + const absPath = url.resolve(this._root$Ref.path, path); + const withoutHash = url.stripHash(absPath); + const $ref = this._$refs[withoutHash]; + + if (!$ref) { + throw ono(`Error resolving $ref pointer "${path}". \n"${withoutHash}" not found.`); + } + + $ref.set(absPath, value); + } + /** + * Returns the specified {@link $Ref} object, or undefined. + * + * @param path - The path being resolved, optionally with a JSON pointer in the hash + * @returns + * @protected + */ + _get$Ref(path: any) { + path = url.resolve(this._root$Ref.path, path); + const withoutHash = url.stripHash(path); + return this._$refs[withoutHash]; + } + + /** + * Creates a new {@link $Ref} object and adds it to this {@link $Refs} object. + * + * @param path - The file path or URL of the referenced file + */ + _add(path: string) { + const withoutHash = url.stripHash(path); + + const $ref = new $Ref(this); + $ref.path = withoutHash; + + this._$refs[withoutHash] = $ref; + this._root$Ref = this._root$Ref || $ref; + + return $ref; + } + + /** + * Resolves the given JSON reference. + * + * @param path - The path being resolved, optionally with a JSON pointer in the hash + * @param pathFromRoot - The path of `obj` from the schema root + * @param [options] + * @returns + * @protected + */ + _resolve(path: string, pathFromRoot: string, options?: any) { + const absPath = url.resolve(this._root$Ref.path, path); + const withoutHash = url.stripHash(absPath); + const $ref = this._$refs[withoutHash]; + + if (!$ref) { + throw ono(`Error resolving $ref pointer "${path}". \n"${withoutHash}" not found.`); + } + + return $ref.resolve(absPath, options, path, pathFromRoot); + } + + /** + * A map of paths/urls to {@link $Ref} objects + * + * @type {object} + * @protected + */ + _$refs: $RefsMap = {}; + + /** + * The {@link $Ref} object that is the root of the JSON schema. + * + * @type {$Ref} + * @protected + */ + _root$Ref: $Ref; + + constructor() { + /** + * Indicates whether the schema contains any circular references. + * + * @type {boolean} + */ + this.circular = false; + + this._$refs = {}; + + // @ts-ignore + this._root$Ref = null; + } + + /** + * Returns the paths of all the files/URLs that are referenced by the JSON schema, + * including the schema itself. + * + * @param [types] - Only return paths of the given types ("file", "http", etc.) + * @returns + */ + /** + * Returns the map of JSON references and their resolved values. + * + * @param [types] - Only return references of the given types ("file", "http", etc.) + * @returns + */ + + /** + * Returns a POJO (plain old JavaScript object) for serialization as JSON. + * + * @returns {object} + */ + toJSON = this.values; +} + +/** + * Returns the encoded and decoded paths keys of the given object. + * + * @param $refs - The object whose keys are URL-encoded paths + * @param [types] - Only return paths of the given types ("file", "http", etc.) + * @returns + */ +function getPaths($refs: $RefsMap, types: string[]) { + let paths = Object.keys($refs); + + // Filter the paths by type + types = Array.isArray(types[0]) ? types[0] : Array.prototype.slice.call(types); + if (types.length > 0 && types[0]) { + paths = paths.filter((key) => { + return types.includes($refs[key].pathType as string); + }); + } + + // Decode local filesystem paths + return paths.map((path) => { + return { + encoded: path, + decoded: $refs[path].pathType === "file" ? url.toFileSystemPath(path, true) : path, + }; + }); +} diff --git a/lib/resolve-external.js b/lib/resolve-external.ts similarity index 65% rename from lib/resolve-external.js rename to lib/resolve-external.ts index c11adae2..7b9dce63 100644 --- a/lib/resolve-external.js +++ b/lib/resolve-external.ts @@ -3,6 +3,10 @@ import Pointer from "./pointer.js"; import parse from "./parse.js"; import * as url from "./util/url.js"; import { isHandledError } from "./util/errors.js"; +import type $Refs from "./refs.js"; +import type { Options } from "./options.js"; +import type { JSONSchema } from "./types/index.js"; +import type $RefParser from "./index.js"; export default resolveExternal; @@ -12,14 +16,11 @@ export default resolveExternal; * * NOTE: We only care about EXTERNAL references here. INTERNAL references are only relevant when dereferencing. * - * @param {$RefParser} parser - * @param {$RefParserOptions} options - * - * @returns {Promise} + * @returns * The promise resolves once all JSON references in the schema have been resolved, * including nested references that are contained in externally-referenced files. */ -function resolveExternal (parser, options) { +function resolveExternal(parser: $RefParser, options: Options) { if (!options.resolve.external) { // Nothing to resolve, so exit early return Promise.resolve(); @@ -27,10 +28,9 @@ function resolveExternal (parser, options) { try { // console.log('Resolving $ref pointers in %s', parser.$refs._root$Ref.path); - let promises = crawl(parser.schema, parser.$refs._root$Ref.path + "#", parser.$refs, options); + const promises = crawl(parser.schema, parser.$refs._root$Ref.path + "#", parser.$refs, options); return Promise.all(promises); - } - catch (e) { + } catch (e) { return Promise.reject(e); } } @@ -38,36 +38,40 @@ function resolveExternal (parser, options) { /** * Recursively crawls the given value, and resolves any external JSON references. * - * @param {*} obj - The value to crawl. If it's not an object or array, it will be ignored. - * @param {string} path - The full path of `obj`, possibly with a JSON Pointer in the hash - * @param {$Refs} $refs - * @param {$RefParserOptions} options - * @param {Set} seen - Internal. + * @param obj - The value to crawl. If it's not an object or array, it will be ignored. + * @param path - The full path of `obj`, possibly with a JSON Pointer in the hash + * @param $refs + * @param options + * @param seen - Internal. * - * @returns {Promise[]} + * @returns * Returns an array of promises. There will be one promise for each JSON reference in `obj`. * If `obj` does not contain any JSON references, then the array will be empty. * If any of the JSON references point to files that contain additional JSON references, * then the corresponding promise will internally reference an array of promises. */ -function crawl (obj, path, $refs, options, seen) { - seen = seen || new Set(); - let promises = []; +function crawl( + obj: string | Buffer | JSONSchema | undefined | null, + path: string, + $refs: $Refs, + options: Options, + seen?: Set, +) { + seen ||= new Set(); + let promises: any = []; if (obj && typeof obj === "object" && !ArrayBuffer.isView(obj) && !seen.has(obj)) { seen.add(obj); // Track previously seen objects to avoid infinite recursion if ($Ref.isExternal$Ref(obj)) { promises.push(resolve$Ref(obj, path, $refs, options)); - } - else { - for (let key of Object.keys(obj)) { - let keyPath = Pointer.join(path, key); - let value = obj[key]; + } else { + for (const key of Object.keys(obj)) { + const keyPath = Pointer.join(path, key); + const value = obj[key] as string | JSONSchema | Buffer | undefined; if ($Ref.isExternal$Ref(value)) { promises.push(resolve$Ref(value, keyPath, $refs, options)); - } - else { + } else { promises = promises.concat(crawl(value, keyPath, $refs, options, seen)); } } @@ -80,20 +84,20 @@ function crawl (obj, path, $refs, options, seen) { /** * Resolves the given JSON Reference, and then crawls the resulting value. * - * @param {{$ref: string}} $ref - The JSON Reference to resolve - * @param {string} path - The full path of `$ref`, possibly with a JSON Pointer in the hash - * @param {$Refs} $refs - * @param {$RefParserOptions} options + * @param $ref - The JSON Reference to resolve + * @param path - The full path of `$ref`, possibly with a JSON Pointer in the hash + * @param $refs + * @param options * - * @returns {Promise} + * @returns * The promise resolves once all JSON references in the object have been resolved, * including nested references that are contained in externally-referenced files. */ -async function resolve$Ref ($ref, path, $refs, options) { +async function resolve$Ref($ref: JSONSchema, path: string, $refs: $Refs, options: Options) { // console.log('Resolving $ref pointer "%s" at %s', $ref.$ref, path); - let resolvedPath = url.resolve(path, $ref.$ref); - let withoutHash = url.stripHash(resolvedPath); + const resolvedPath = url.resolve(path, $ref.$ref); + const withoutHash = url.stripHash(resolvedPath); // Do we already have this $ref? $ref = $refs._$refs[withoutHash]; @@ -108,12 +112,11 @@ async function resolve$Ref ($ref, path, $refs, options) { // Crawl the parsed value // console.log('Resolving $ref pointers in %s', withoutHash); - let promises = crawl(result, withoutHash + "#", $refs, options); + const promises = crawl(result, withoutHash + "#", $refs, options); return Promise.all(promises); - } - catch (err) { - if (!options.continueOnError || !isHandledError(err)) { + } catch (err) { + if (!options?.continueOnError || !isHandledError(err)) { throw err; } diff --git a/lib/resolvers/file.js b/lib/resolvers/file.js deleted file mode 100644 index 5afb810d..00000000 --- a/lib/resolvers/file.js +++ /dev/null @@ -1,63 +0,0 @@ -import fs from "fs"; -import { ono } from "@jsdevtools/ono"; -import * as url from "../util/url.js"; -import { ResolverError } from "../util/errors.js"; - -export default { - /** - * The order that this resolver will run, in relation to other resolvers. - * - * @type {number} - */ - order: 100, - - /** - * Determines whether this resolver can read a given file reference. - * Resolvers that return true will be tried, in order, until one successfully resolves the file. - * Resolvers that return false will not be given a chance to resolve the file. - * - * @param {object} file - An object containing information about the referenced file - * @param {string} file.url - The full URL of the referenced file - * @param {string} file.extension - The lowercased file extension (e.g. ".txt", ".html", etc.) - * @returns {boolean} - */ - canRead (file) { - return url.isFileSystemPath(file.url); - }, - - /** - * Reads the given file and returns its raw contents as a Buffer. - * - * @param {object} file - An object containing information about the referenced file - * @param {string} file.url - The full URL of the referenced file - * @param {string} file.extension - The lowercased file extension (e.g. ".txt", ".html", etc.) - * @returns {Promise} - */ - read (file) { - return new Promise(((resolve, reject) => { - let path; - try { - path = url.toFileSystemPath(file.url); - } - catch (err) { - reject(new ResolverError(ono.uri(err, `Malformed URI: ${file.url}`), file.url)); - } - - // console.log('Opening file: %s', path); - - try { - fs.readFile(path, (err, data) => { - if (err) { - reject(new ResolverError(ono(err, `Error opening file "${path}"`), path)); - } - else { - resolve(data); - } - }); - } - catch (err) { - reject(new ResolverError(ono(err, `Error opening file "${path}"`), path)); - } - })); - } -}; diff --git a/lib/resolvers/file.ts b/lib/resolvers/file.ts new file mode 100644 index 00000000..c78b267a --- /dev/null +++ b/lib/resolvers/file.ts @@ -0,0 +1,40 @@ +import fs from "fs/promises"; +import { ono } from "@jsdevtools/ono"; +import * as url from "../util/url.js"; +import { ResolverError } from "../util/errors.js"; +import type { ResolverOptions } from "../types/index.js"; +import type { FileInfo } from "../types/index.js"; + +export default { + /** + * The order that this resolver will run, in relation to other resolvers. + */ + order: 100, + + /** + * Determines whether this resolver can read a given file reference. + * Resolvers that return true will be tried, in order, until one successfully resolves the file. + * Resolvers that return false will not be given a chance to resolve the file. + */ + canRead(file: FileInfo) { + return url.isFileSystemPath(file.url); + }, + + /** + * Reads the given file and returns its raw contents as a Buffer. + */ + async read(file: FileInfo): Promise { + let path: string | undefined; + try { + path = url.toFileSystemPath(file.url); + } catch (err: any) { + throw new ResolverError(ono.uri(err, `Malformed URI: ${file.url}`), file.url); + } + try { + const data = await fs.readFile(path); + return data; + } catch (err: any) { + throw new ResolverError(ono(err, `Error opening file "${path}"`), path); + } + }, +} as ResolverOptions; diff --git a/lib/resolvers/http.js b/lib/resolvers/http.js deleted file mode 100644 index 01486e79..00000000 --- a/lib/resolvers/http.js +++ /dev/null @@ -1,155 +0,0 @@ -import { ono } from "@jsdevtools/ono"; -import * as url from "../util/url.js"; -import { ResolverError } from "../util/errors.js"; - -export default { - /** - * The order that this resolver will run, in relation to other resolvers. - * - * @type {number} - */ - order: 200, - - /** - * HTTP headers to send when downloading files. - * - * @example: - * { - * "User-Agent": "JSON Schema $Ref Parser", - * Accept: "application/json" - * } - * - * @type {object} - */ - headers: null, - - /** - * HTTP request timeout (in milliseconds). - * - * @type {number} - */ - timeout: 5000, // 5 seconds - - /** - * The maximum number of HTTP redirects to follow. - * To disable automatic following of redirects, set this to zero. - * - * @type {number} - */ - redirects: 5, - - /** - * The `withCredentials` option of XMLHttpRequest. - * Set this to `true` if you're downloading files from a CORS-enabled server that requires authentication - * - * @type {boolean} - */ - withCredentials: false, - - /** - * Determines whether this resolver can read a given file reference. - * Resolvers that return true will be tried in order, until one successfully resolves the file. - * Resolvers that return false will not be given a chance to resolve the file. - * - * @param {object} file - An object containing information about the referenced file - * @param {string} file.url - The full URL of the referenced file - * @param {string} file.extension - The lowercased file extension (e.g. ".txt", ".html", etc.) - * @returns {boolean} - */ - canRead (file) { - return url.isHttp(file.url); - }, - - /** - * Reads the given URL and returns its raw contents as a Buffer. - * - * @param {object} file - An object containing information about the referenced file - * @param {string} file.url - The full URL of the referenced file - * @param {string} file.extension - The lowercased file extension (e.g. ".txt", ".html", etc.) - * @returns {Promise} - */ - read (file) { - let u = url.parse(file.url); - - if (typeof window !== "undefined" && !u.protocol) { - // Use the protocol of the current page - u.protocol = url.parse(location.href).protocol; - } - - return download(u, this); - } -}; - -/** - * Downloads the given file. - * - * @param {Url|string} u - The url to download (can be a parsed {@link Url} object) - * @param {object} httpOptions - The `options.resolve.http` object - * @param {number} [redirects] - The redirect URLs that have already been followed - * - * @returns {Promise} - * The promise resolves with the raw downloaded data, or rejects if there is an HTTP error. - */ -function download (u, httpOptions, redirects) { - u = url.parse(u); - redirects = redirects || []; - redirects.push(u.href); - - return get(u, httpOptions) - .then((res) => { - if (res.status >= 400) { - throw ono({ status: res.statusCode }, `HTTP ERROR ${res.status}`); - } - else if (res.status >= 300) { - if (redirects.length > httpOptions.redirects) { - throw new ResolverError(ono({ status: res.status }, - `Error downloading ${redirects[0]}. \nToo many redirects: \n ${redirects.join(" \n ")}`)); - } - else if (!res.headers.location) { - throw ono({ status: res.status }, `HTTP ${res.status} redirect with no location header`); - } - else { - // console.log('HTTP %d redirect %s -> %s', res.status, u.href, res.headers.location); - let redirectTo = url.resolve(u, res.headers.location); - return download(redirectTo, httpOptions, redirects); - } - } - else { - return res.body ? res.arrayBuffer().then(buf => Buffer.from(buf)) : Buffer.alloc(0); - } - }) - .catch((err) => { - throw new ResolverError(ono(err, `Error downloading ${u.href}`), u.href); - }); -} - -/** - * Sends an HTTP GET request. - * - * @param {Url} u - A parsed {@link Url} object - * @param {object} httpOptions - The `options.resolve.http` object - * - * @returns {Promise} - * The promise resolves with the HTTP Response object. - */ -function get (u, httpOptions) { - let controller; - let timeoutId; - if (httpOptions.timeout) { - controller = new AbortController(); - timeoutId = setTimeout(() => controller.abort(), httpOptions.timeout); - } - - return fetch(u, { - method: "GET", - headers: httpOptions.headers || {}, - credentials: httpOptions.withCredentials ? "include" : "same-origin", - signal: controller ? controller.signal : null, - }).then(response => { - if (timeoutId) { - clearTimeout(timeoutId); - } - - return response; - }); -} diff --git a/lib/resolvers/http.ts b/lib/resolvers/http.ts new file mode 100644 index 00000000..6fbad467 --- /dev/null +++ b/lib/resolvers/http.ts @@ -0,0 +1,135 @@ +import { ono } from "@jsdevtools/ono"; +import * as url from "../util/url.js"; +import { ResolverError } from "../util/errors.js"; +import type { FileInfo, HTTPResolverOptions } from "../types/index.js"; + +export default { + /** + * The order that this resolver will run, in relation to other resolvers. + */ + order: 200, + + /** + * HTTP headers to send when downloading files. + * + * @example: + * { + * "User-Agent": "JSON Schema $Ref Parser", + * Accept: "application/json" + * } + */ + headers: null, + + /** + * HTTP request timeout (in milliseconds). + */ + timeout: 5000, // 5 seconds + + /** + * The maximum number of HTTP redirects to follow. + * To disable automatic following of redirects, set this to zero. + */ + redirects: 5, + + /** + * The `withCredentials` option of XMLHttpRequest. + * Set this to `true` if you're downloading files from a CORS-enabled server that requires authentication + */ + withCredentials: false, + + /** + * Determines whether this resolver can read a given file reference. + * Resolvers that return true will be tried in order, until one successfully resolves the file. + * Resolvers that return false will not be given a chance to resolve the file. + */ + canRead(file: FileInfo) { + return url.isHttp(file.url); + }, + + /** + * Reads the given URL and returns its raw contents as a Buffer. + */ + read(file: FileInfo) { + const u = url.parse(file.url); + + if (typeof window !== "undefined" && !u.protocol) { + // Use the protocol of the current page + u.protocol = url.parse(location.href).protocol; + } + + return download(u, this); + }, +} as HTTPResolverOptions; + +/** + * Downloads the given file. + * @returns + * The promise resolves with the raw downloaded data, or rejects if there is an HTTP error. + */ +async function download(u: URL | string, httpOptions: HTTPResolverOptions, _redirects?: string[]): Promise { + u = url.parse(u); + const redirects = _redirects || []; + redirects.push(u.href); + + try { + const res = await get(u, httpOptions); + if (res.status >= 400) { + throw ono({ status: res.status }, `HTTP ERROR ${res.status}`); + } else if (res.status >= 300) { + if (!Number.isNaN(httpOptions.redirects) && redirects.length > httpOptions.redirects!) { + throw new ResolverError( + ono( + { status: res.status }, + `Error downloading ${redirects[0]}. \nToo many redirects: \n ${redirects.join(" \n ")}`, + ), + ); + } else if (!("location" in res.headers) || !res.headers.location) { + throw ono({ status: res.status }, `HTTP ${res.status} redirect with no location header`); + } else { + const redirectTo = url.resolve(u, res.headers.location); + return download(redirectTo, httpOptions, redirects); + } + } else { + if (res.body) { + const buf = await res.arrayBuffer(); + return Buffer.from(buf); + } + return Buffer.alloc(0); + } + } catch (err: any) { + throw new ResolverError(ono(err, `Error downloading ${u.href}`), u.href); + } +} + +/** + * Sends an HTTP GET request. + * The promise resolves with the HTTP Response object. + */ +async function get(u: RequestInfo | URL, httpOptions: HTTPResolverOptions) { + let controller: any; + let timeoutId: any; + if (httpOptions.timeout) { + controller = new AbortController(); + timeoutId = setTimeout(() => controller.abort(), httpOptions.timeout); + } + + if (!global.fetch) { + const { default: fetch, Request, Headers } = await import("node-fetch"); + // @ts-ignore + global.fetch = fetch; + // @ts-ignore + global.Request = Request; + global.Headers = Headers; + } + const response = await fetch(u, { + method: "GET", + headers: httpOptions.headers || {}, + credentials: httpOptions.withCredentials ? "include" : "same-origin", + signal: controller ? controller.signal : null, + }); + if (timeoutId) { + clearTimeout(timeoutId); + } + + return response; +} diff --git a/lib/tsconfig.json b/lib/tsconfig.json new file mode 100644 index 00000000..75dcaeac --- /dev/null +++ b/lib/tsconfig.json @@ -0,0 +1,103 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ + + /* Projects */ + // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ + // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ + + /* Language and Environment */ + "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "jsx": "preserve", /* Specify what JSX code is generated. */ + // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ + // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ + // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ + // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ + // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + + /* Modules */ + "module": "commonjs", /* Specify what module code is generated. */ + // "rootDir": "./", /* Specify the root folder within your source files. */ + // "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ + // "types": [], /* Specify type package names to be included without being referenced in a source file. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ + // "resolveJsonModule": true, /* Enable importing .json files. */ + // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ + + /* JavaScript Support */ + // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ + // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + + /* Emit */ + // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + // "declarationMap": true, /* Create sourcemaps for d.ts files. */ + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ + // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ + // "outDir": "./", /* Specify an output folder for all emitted files. */ + // "removeComments": true, /* Disable emitting comments. */ + // "noEmit": true, /* Disable emitting files from a compilation. */ + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ + // "newLine": "crlf", /* Set the newline character for emitting files. */ + // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ + // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ + // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ + // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ + // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ + + /* Interop Constraints */ + // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ + // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ + + /* Type Checking */ + "strict": true, /* Enable all strict type-checking options. */ + // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ + // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ + // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ + // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ + // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ + // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ + // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ + // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ + // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ + // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ + // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ + // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ + + /* Completeness */ + // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */ + } +} diff --git a/lib/types/index.ts b/lib/types/index.ts new file mode 100644 index 00000000..91772c32 --- /dev/null +++ b/lib/types/index.ts @@ -0,0 +1,135 @@ +import type { + JSONSchema4, + JSONSchema4Object, + JSONSchema6, + JSONSchema6Object, + JSONSchema7, + JSONSchema7Object, +} from "json-schema"; +import type $Refs from "../refs.js"; + +export type JSONSchema = JSONSchema4 | JSONSchema6 | JSONSchema7; +export type JSONSchemaObject = JSONSchema4Object | JSONSchema6Object | JSONSchema7Object; +export type SchemaCallback = (err: Error | null, schema?: JSONSchema | object) => any; +export type $RefsCallback = (err: Error | null, $refs?: $Refs) => any; + +/** + * See https://apitools.dev/json-schema-ref-parser/docs/options.html + */ + +export interface HTTPResolverOptions extends Partial { + /** + * You can specify any HTTP headers that should be sent when downloading files. For example, some servers may require you to set the `Accept` or `Referrer` header. + */ + headers?: HeadersInit | null; + + /** + * The amount of time (in milliseconds) to wait for a response from the server when downloading files. The default is 5 seconds. + */ + timeout?: number; + + /** + * The maximum number of HTTP redirects to follow per file. The default is 5. To disable automatic following of redirects, set this to zero. + */ + redirects?: number; + + /** + * Set this to `true` if you're downloading files from a CORS-enabled server that requires authentication + */ + withCredentials?: boolean; +} + +/** + * JSON Schema `$Ref` Parser comes with built-in resolvers for HTTP and HTTPS URLs, as well as local filesystem paths (when running in Node.js). You can add your own custom resolvers to support additional protocols, or even replace any of the built-in resolvers with your own custom implementation. + * + * See https://apitools.dev/json-schema-ref-parser/docs/plugins/resolvers.html + */ +export interface ResolverOptions { + name?: string; + /** + * All resolvers have an order property, even the built-in resolvers. If you don't specify an order property, then your resolver will run last. Specifying `order: 1`, like we did in this example, will make your resolver run first. Or you can squeeze your resolver in-between some of the built-in resolvers. For example, `order: 101` would make it run after the file resolver, but before the HTTP resolver. You can see the order of all the built-in resolvers by looking at their source code. + * + * The order property and canRead property are related to each other. For each file that JSON Schema $Ref Parser needs to resolve, it first determines which resolvers can read that file by checking their canRead property. If only one resolver matches a file, then only that one resolver is called, regardless of its order. If multiple resolvers match a file, then those resolvers are tried in order until one of them successfully reads the file. Once a resolver successfully reads the file, the rest of the resolvers are skipped. + */ + order?: number; + + /** + * The `canRead` property tells JSON Schema `$Ref` Parser what kind of files your resolver can read. In this example, we've simply specified a regular expression that matches "mogodb://" URLs, but we could have used a simple boolean, or even a function with custom logic to determine which files to resolve. Here are examples of each approach: + */ + canRead: boolean | RegExp | string | string[] | ((file: FileInfo) => boolean); + + /** + * This is where the real work of a resolver happens. The `read` method accepts the same file info object as the `canRead` function, but rather than returning a boolean value, the `read` method should return the contents of the file. The file contents should be returned in as raw a form as possible, such as a string or a byte array. Any further parsing or processing should be done by parsers. + * + * Unlike the `canRead` function, the `read` method can also be asynchronous. This might be important if your resolver needs to read data from a database or some other external source. You can return your asynchronous value using either an ES6 Promise or a Node.js-style error-first callback. Of course, if your resolver has the ability to return its data synchronously, then that's fine too. Here are examples of all three approaches: + */ + read: + | string + | object + | (( + file: FileInfo, + callback?: (error: Error | null, data: string | null) => any, + ) => string | Buffer | JSONSchema | Promise); +} + +export interface Plugin { + name?: string; + /** + * Parsers run in a specific order, relative to other parsers. For example, a parser with `order: 5` will run before a parser with `order: 10`. If a parser is unable to successfully parse a file, then the next parser is tried, until one succeeds or they all fail. + * + * You can change the order in which parsers run, which is useful if you know that most of your referenced files will be a certain type, or if you add your own custom parser that you want to run first. + */ + order?: number; + + /** + * All of the built-in parsers allow empty files by default. The JSON and YAML parsers will parse empty files as `undefined`. The text parser will parse empty files as an empty string. The binary parser will parse empty files as an empty byte array. + * + * You can set `allowEmpty: false` on any parser, which will cause an error to be thrown if a file empty. + */ + allowEmpty?: boolean; + + /** + * The encoding that the text is expected to be in. + */ + encoding?: BufferEncoding; + /** + * Determines which parsers will be used for which files. + * + * A regular expression can be used to match files by their full path. A string (or array of strings) can be used to match files by their file extension. Or a function can be used to perform more complex matching logic. See the custom parser docs for details. + */ + canParse?: boolean | RegExp | string | string[] | ((file: FileInfo) => boolean); + + /** + * This is where the real work of a parser happens. The `parse` method accepts the same file info object as the `canParse` function, but rather than returning a boolean value, the `parse` method should return a JavaScript representation of the file contents. For our CSV parser, that is a two-dimensional array of lines and values. For your parser, it might be an object, a string, a custom class, or anything else. + * + * Unlike the `canParse` function, the `parse` method can also be asynchronous. This might be important if your parser needs to retrieve data from a database or if it relies on an external HTTP service to return the parsed value. You can return your asynchronous value via a [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) or a Node.js-style error-first callback. Here are examples of both approaches: + */ + parse: + | ((file: FileInfo, callback?: (error: Error | null, data: string | null) => any) => unknown | Promise) + | number + | string; +} + +/** + * JSON Schema `$Ref` Parser supports plug-ins, such as resolvers and parsers. These plug-ins can have methods such as `canRead()`, `read()`, `canParse()`, and `parse()`. All of these methods accept the same object as their parameter: an object containing information about the file being read or parsed. + * + * The file info object currently only consists of a few properties, but it may grow in the future if plug-ins end up needing more information. + * + * See https://apitools.dev/json-schema-ref-parser/docs/plugins/file-info-object.html + */ +export interface FileInfo { + /** + * The full URL of the file. This could be any type of URL, including "http://", "https://", "file://", "ftp://", "mongodb://", or even a local filesystem path (when running in Node.js). + */ + url: string; + + /** + * The lowercase file extension, such as ".json", ".yaml", ".txt", etc. + */ + extension: string; + + /** + * The raw file contents, in whatever form they were returned by the resolver that read the file. + */ + data: string | Buffer; +} diff --git a/lib/util/errors.js b/lib/util/errors.js deleted file mode 100644 index c557faaa..00000000 --- a/lib/util/errors.js +++ /dev/null @@ -1,134 +0,0 @@ -import { Ono } from "@jsdevtools/ono"; - -import { stripHash, toFileSystemPath } from "./url.js"; - -export const JSONParserError = class JSONParserError extends Error { - constructor (message, source) { - super(); - - this.code = "EUNKNOWN"; - this.message = message; - this.source = source; - this.path = null; - - Ono.extend(this); - } - - get footprint () { - return `${this.path}+${this.source}+${this.code}+${this.message}`; - } -}; - -setErrorName(JSONParserError); - -export const JSONParserErrorGroup = class JSONParserErrorGroup extends Error { - constructor (parser) { - super(); - - this.files = parser; - this.message = `${this.errors.length} error${this.errors.length > 1 ? "s" : ""} occurred while reading '${toFileSystemPath(parser.$refs._root$Ref.path)}'`; - - Ono.extend(this); - } - - static getParserErrors (parser) { - const errors = []; - - for (const $ref of Object.values(parser.$refs._$refs)) { - if ($ref.errors) { - errors.push(...$ref.errors); - } - } - - return errors; - } - - get errors () { - return JSONParserErrorGroup.getParserErrors(this.files); - } -}; - -setErrorName(JSONParserErrorGroup); - -export const ParserError = class ParserError extends JSONParserError { - constructor (message, source) { - super(`Error parsing ${source}: ${message}`, source); - - this.code = "EPARSER"; - } -}; - -setErrorName(ParserError); - -export const UnmatchedParserError = class UnmatchedParserError extends JSONParserError { - constructor (source) { - super(`Could not find parser for "${source}"`, source); - - this.code = "EUNMATCHEDPARSER"; - } -}; - -setErrorName(UnmatchedParserError); - -export const ResolverError = class ResolverError extends JSONParserError { - constructor (ex, source) { - super(ex.message || `Error reading file "${source}"`, source); - - this.code = "ERESOLVER"; - - if ("code" in ex) { - this.ioErrorCode = String(ex.code); - } - } -}; - -setErrorName(ResolverError); - -export const UnmatchedResolverError = class UnmatchedResolverError extends JSONParserError { - constructor (source) { - super(`Could not find resolver for "${source}"`, source); - - this.code = "EUNMATCHEDRESOLVER"; - } -}; - -setErrorName(UnmatchedResolverError); - -export const MissingPointerError = class MissingPointerError extends JSONParserError { - constructor (token, path) { - super(`Token "${token}" does not exist.`, stripHash(path)); - - this.code = "EMISSINGPOINTER"; - } -}; - -setErrorName(MissingPointerError); - -export const InvalidPointerError = class InvalidPointerError extends JSONParserError { - constructor (pointer, path) { - super(`Invalid $ref pointer "${pointer}". Pointers must begin with "#/"`, stripHash(path)); - - this.code = "EINVALIDPOINTER"; - } -}; - -setErrorName(InvalidPointerError); - -function setErrorName (err) { - Object.defineProperty(err.prototype, "name", { - value: err.name, - enumerable: true, - }); -} - -export function isHandledError (err) { - return err instanceof JSONParserError || err instanceof JSONParserErrorGroup; -} - -export function normalizeError (err) { - if (err.path === null) { - err.path = []; - } - - return err; -} diff --git a/lib/util/errors.ts b/lib/util/errors.ts new file mode 100644 index 00000000..6ae62216 --- /dev/null +++ b/lib/util/errors.ts @@ -0,0 +1,141 @@ +import { Ono } from "@jsdevtools/ono"; +import { stripHash, toFileSystemPath } from "./url.js"; +import type $RefParser from "../index.js"; + +export type JSONParserErrorType = + | "EUNKNOWN" + | "EPARSER" + | "EUNMATCHEDPARSER" + | "ERESOLVER" + | "EUNMATCHEDRESOLVER" + | "EMISSINGPOINTER" + | "EINVALIDPOINTER"; +export class JSONParserError extends Error { + public readonly name: string; + public readonly message: string; + public source: string | undefined; + public path: Array | null; + public readonly code: JSONParserErrorType; + public constructor(message: string, source?: string) { + super(); + + this.code = "EUNKNOWN"; + this.name = "JSONParserError"; + this.message = message; + this.source = source; + this.path = null; + + Ono.extend(this); + } + + get footprint() { + return `${this.path}+${this.source}+${this.code}+${this.message}`; + } +} + +export class JSONParserErrorGroup extends Error { + files: $RefParser; + + constructor(parser: $RefParser) { + super(); + + this.files = parser; + this.name = "JSONParserErrorGroup"; + this.message = `${this.errors.length} error${ + this.errors.length > 1 ? "s" : "" + } occurred while reading '${toFileSystemPath(parser.$refs._root$Ref!.path)}'`; + + Ono.extend(this); + } + + static getParserErrors(parser: any) { + const errors = []; + + for (const $ref of Object.values(parser.$refs._$refs)) { + // @ts-expect-error TS(2571): Object is of type 'unknown'. + if ($ref.errors) { + // @ts-expect-error TS(2571): Object is of type 'unknown'. + errors.push(...$ref.errors); + } + } + + return errors; + } + + get errors(): Array< + | JSONParserError + | InvalidPointerError + | ResolverError + | ParserError + | MissingPointerError + | UnmatchedParserError + | UnmatchedResolverError + > { + return JSONParserErrorGroup.getParserErrors(this.files); + } +} + +export class ParserError extends JSONParserError { + code = "EPARSER" as JSONParserErrorType; + name = "ParserError"; + constructor(message: any, source: any) { + super(`Error parsing ${source}: ${message}`, source); + } +} + +export class UnmatchedParserError extends JSONParserError { + code = "EUNMATCHEDPARSER" as JSONParserErrorType; + name = "UnmatchedParserError"; + + constructor(source: string) { + super(`Could not find parser for "${source}"`, source); + } +} + +export class ResolverError extends JSONParserError { + code = "ERESOLVER" as JSONParserErrorType; + name = "ResolverError"; + ioErrorCode?: string; + constructor(ex: Error | any, source?: string) { + super(ex.message || `Error reading file "${source}"`, source); + if ("code" in ex) { + this.ioErrorCode = String(ex.code); + } + } +} + +export class UnmatchedResolverError extends JSONParserError { + code = "EUNMATCHEDRESOLVER" as JSONParserErrorType; + name = "UnmatchedResolverError"; + constructor(source: any) { + super(`Could not find resolver for "${source}"`, source); + } +} + +export class MissingPointerError extends JSONParserError { + code = "EUNMATCHEDRESOLVER" as JSONParserErrorType; + name = "MissingPointerError"; + constructor(token: any, path: any) { + super(`Token "${token}" does not exist.`, stripHash(path)); + } +} + +export class InvalidPointerError extends JSONParserError { + code = "EUNMATCHEDRESOLVER" as JSONParserErrorType; + name = "InvalidPointerError"; + constructor(pointer: any, path: any) { + super(`Invalid $ref pointer "${pointer}". Pointers must begin with "#/"`, stripHash(path)); + } +} + +export function isHandledError(err: any): err is JSONParserError { + return err instanceof JSONParserError || err instanceof JSONParserErrorGroup; +} + +export function normalizeError(err: any) { + if (err.path === null) { + err.path = []; + } + + return err; +} diff --git a/lib/util/maybe.ts b/lib/util/maybe.ts new file mode 100644 index 00000000..5e24ec21 --- /dev/null +++ b/lib/util/maybe.ts @@ -0,0 +1,22 @@ +import next from "./next.js"; + +type MaybeParams = (err: Error | any | null, result?: T) => void; +export default function maybe(cb: MaybeParams | undefined, promise: Promise): Promise | void { + if (cb) { + promise.then( + function (result) { + next(function () { + cb(null, result); + }); + }, + function (err) { + next(function () { + cb(err); + }); + }, + ); + return undefined; + } else { + return promise; + } +} diff --git a/lib/util/next.ts b/lib/util/next.ts new file mode 100644 index 00000000..d460a3fc --- /dev/null +++ b/lib/util/next.ts @@ -0,0 +1,13 @@ +function makeNext() { + if (typeof process === "object" && typeof process.nextTick === "function") { + return process.nextTick; + } else if (typeof setImmediate === "function") { + return setImmediate; + } else { + return function next(f: () => void) { + setTimeout(f, 0); + }; + } +} + +export default makeNext(); diff --git a/lib/util/plugins.js b/lib/util/plugins.ts similarity index 55% rename from lib/util/plugins.js rename to lib/util/plugins.ts index 83f10436..6901d21d 100644 --- a/lib/util/plugins.js +++ b/lib/util/plugins.ts @@ -1,48 +1,53 @@ +import type { FileInfo } from "../types/index.js"; +import type $RefParserOptions from "../options.js"; +import type { ResolverOptions } from "../types/index.js"; +import type $Refs from "../refs.js"; +import type { Plugin } from "../types/index.js"; +import type { JSONSchema } from "../types/index.js"; + /** * Returns the given plugins as an array, rather than an object map. * All other methods in this module expect an array of plugins rather than an object map. * - * @param {object} plugins - A map of plugin objects - * @return {object[]} + * @returns */ -export function all (plugins) { +export function all(plugins: $RefParserOptions["resolve"]): Plugin[] { return Object.keys(plugins) .filter((key) => { return typeof plugins[key] === "object"; }) .map((key) => { - plugins[key].name = key; - return plugins[key]; + (plugins[key] as ResolverOptions)!.name = key; + return plugins[key] as Plugin; }); } /** * Filters the given plugins, returning only the ones return `true` for the given method. - * - * @param {object[]} plugins - An array of plugin objects - * @param {string} method - The name of the filter method to invoke for each plugin - * @param {object} file - A file info object, which will be passed to each method - * @return {object[]} */ -export function filter (plugins, method, file) { - return plugins - .filter((plugin) => { - return !!getResult(plugin, method, file); - }); +export function filter(plugins: Plugin[], method: any, file: any) { + return plugins.filter((plugin: Plugin) => { + return !!getResult(plugin, method, file); + }); } /** * Sorts the given plugins, in place, by their `order` property. - * - * @param {object[]} plugins - An array of plugin objects - * @returns {object[]} */ -export function sort (plugins) { - for (let plugin of plugins) { +export function sort(plugins: Plugin[]) { + for (const plugin of plugins) { plugin.order = plugin.order || Number.MAX_SAFE_INTEGER; } - return plugins.sort((a, b) => { return a.order - b.order; }); + return plugins.sort((a: any, b: any) => { + return a.order - b.order; + }); +} + +export interface PluginResult { + plugin: Plugin; + result?: string | Buffer | JSONSchema; + error?: any; } /** @@ -52,19 +57,21 @@ export function sort (plugins) { * is immediately returned and no further plugins are called. * If the promise rejects, or the callback is called with an error, then the next plugin is called. * If ALL plugins fail, then the last error is thrown. - * - * @param {object[]} plugins - An array of plugin objects - * @param {string} method - The name of the method to invoke for each plugin - * @param {object} file - A file info object, which will be passed to each method - * @returns {Promise} */ -export function run (plugins, method, file, $refs) { - let plugin, lastError, index = 0; +export async function run( + plugins: Plugin[], + method: keyof Plugin | keyof ResolverOptions, + file: FileInfo, + $refs: $Refs, +) { + let plugin: Plugin; + let lastError: PluginResult; + let index = 0; - return new Promise(((resolve, reject) => { + return new Promise((resolve, reject) => { runNextPlugin(); - function runNextPlugin () { + function runNextPlugin() { plugin = plugins[index++]; if (!plugin) { // There are no more functions, so re-throw the last error @@ -73,42 +80,38 @@ export function run (plugins, method, file, $refs) { try { // console.log(' %s', plugin.name); - let result = getResult(plugin, method, file, callback, $refs); + const result = getResult(plugin, method, file, callback, $refs); if (result && typeof result.then === "function") { // A promise was returned result.then(onSuccess, onError); - } - else if (result !== undefined) { + } else if (result !== undefined) { // A synchronous result was returned onSuccess(result); - } - else if (index === plugins.length) { + } else if (index === plugins.length) { throw new Error("No promise has been returned or callback has been called."); } - } - catch (e) { + } catch (e) { onError(e); } } - function callback (err, result) { + function callback(err: PluginResult["error"], result: PluginResult["result"]) { if (err) { onError(err); - } - else { + } else { onSuccess(result); } } - function onSuccess (result) { + function onSuccess(result: PluginResult["result"]) { // console.log(' success'); resolve({ plugin, - result + result, }); } - function onError (error) { + function onError(error: PluginResult["error"]) { // console.log(' %s', err.message || err); lastError = { plugin, @@ -116,23 +119,23 @@ export function run (plugins, method, file, $refs) { }; runNextPlugin(); } - })); + }); } /** * Returns the value of the given property. * If the property is a function, then the result of the function is returned. * If the value is a RegExp, then it will be tested against the file URL. - * If the value is an aray, then it will be compared against the file extension. - * - * @param {object} obj - The object whose property/method is called - * @param {string} prop - The name of the property/method to invoke - * @param {object} file - A file info object, which will be passed to the method - * @param {function} [callback] - A callback function, which will be passed to the method - * @returns {*} + * If the value is an array, then it will be compared against the file extension. */ -function getResult (obj, prop, file, callback, $refs) { - let value = obj[prop]; +function getResult( + obj: Plugin, + prop: keyof Plugin | keyof ResolverOptions, + file: FileInfo, + callback?: (err?: Error, result?: any) => void, + $refs?: any, +) { + const value = obj[prop as keyof typeof obj] as unknown; if (typeof value === "function") { return value.apply(obj, [file, callback, $refs]); @@ -144,11 +147,9 @@ function getResult (obj, prop, file, callback, $refs) { // files by RegExp or by file extension. if (value instanceof RegExp) { return value.test(file.url); - } - else if (typeof value === "string") { + } else if (typeof value === "string") { return value === file.extension; - } - else if (Array.isArray(value)) { + } else if (Array.isArray(value)) { return value.indexOf(file.extension) !== -1; } } diff --git a/lib/util/projectDir.cjs b/lib/util/projectDir.cjs deleted file mode 100644 index 4760a163..00000000 --- a/lib/util/projectDir.cjs +++ /dev/null @@ -1,6 +0,0 @@ -const nodePath = require("path"); - -// Webpack 4 (used by browser tests) can't transpile import.meta.url -// So export the project directory using __dirname from a .cjs module -const projectDir = nodePath.resolve(__dirname, "..", ".."); -module.exports = projectDir diff --git a/lib/util/url.js b/lib/util/url.ts similarity index 71% rename from lib/util/url.js rename to lib/util/url.ts index db6046da..c63974bc 100644 --- a/lib/util/url.js +++ b/lib/util/url.ts @@ -1,38 +1,29 @@ -import projectDir from "./projectDir.cjs"; - -let isWindows = /^win/.test(globalThis.process ? globalThis.process.platform : undefined), - forwardSlashPattern = /\//g, - protocolPattern = /^(\w{2,}):\/\//i, - jsonPointerSlash = /~1/g, - jsonPointerTilde = /~0/g; +const isWindows = /^win/.test(globalThis.process ? globalThis.process.platform : ""), + forwardSlashPattern = /\//g, + protocolPattern = /^(\w{2,}):\/\//i, + jsonPointerSlash = /~1/g, + jsonPointerTilde = /~0/g; +import { join } from "path"; +const projectDir = join(__dirname, "..", ".."); // RegExp patterns to URL-encode special characters in local filesystem paths -let urlEncodePatterns = [ - /\?/g, "%3F", - /\#/g, "%23", -]; +const urlEncodePatterns = [/\?/g, "%3F", /#/g, "%23"]; // RegExp patterns to URL-decode special characters for local filesystem paths -let urlDecodePatterns = [ - /\%23/g, "#", - /\%24/g, "$", - /\%26/g, "&", - /\%2C/g, ",", - /\%40/g, "@" -]; +const urlDecodePatterns = [/%23/g, "#", /%24/g, "$", /%26/g, "&", /%2C/g, ",", /%40/g, "@"]; -export const parse = (u) => new URL(u); +export const parse = (u: any) => new URL(u); /** * Returns resolved target URL relative to a base URL in a manner similar to that of a Web browser resolving an anchor tag HREF. * - * @return {string} + * @returns */ -export function resolve (from, to) { - let resolvedUrl = new URL(to, new URL(from, "resolve://")); +export function resolve(from: any, to: any) { + const resolvedUrl = new URL(to, new URL(from, "resolve://")); if (resolvedUrl.protocol === "resolve:") { // `from` is a relative URL. - let { pathname, search, hash } = resolvedUrl; + const { pathname, search, hash } = resolvedUrl; return pathname + search + hash; } return resolvedUrl.toString(); @@ -41,20 +32,19 @@ export function resolve (from, to) { /** * Returns the current working directory (in Node) or the current page URL (in browsers). * - * @returns {string} + * @returns */ -export function cwd () { +export function cwd() { if (typeof window !== "undefined") { return location.href; } - let path = process.cwd(); + const path = process.cwd(); - let lastChar = path.slice(-1); + const lastChar = path.slice(-1); if (lastChar === "/" || lastChar === "\\") { return path; - } - else { + } else { return path + "/"; } } @@ -62,11 +52,11 @@ export function cwd () { /** * Returns the protocol of the given URL, or `undefined` if it has no protocol. * - * @param {string} path - * @returns {?string} + * @param path + * @returns */ -export function getProtocol (path) { - let match = protocolPattern.exec(path); +export function getProtocol(path: any) { + const match = protocolPattern.exec(path); if (match) { return match[1].toLowerCase(); } @@ -76,11 +66,11 @@ export function getProtocol (path) { * Returns the lowercased file extension of the given URL, * or an empty string if it has no extension. * - * @param {string} path - * @returns {string} + * @param path + * @returns */ -export function getExtension (path) { - let lastDot = path.lastIndexOf("."); +export function getExtension(path: any) { + const lastDot = path.lastIndexOf("."); if (lastDot >= 0) { return stripQuery(path.substr(lastDot).toLowerCase()); } @@ -90,11 +80,11 @@ export function getExtension (path) { /** * Removes the query, if any, from the given path. * - * @param {string} path - * @returns {string} + * @param path + * @returns */ -export function stripQuery (path) { - let queryIndex = path.indexOf("?"); +export function stripQuery(path: any) { + const queryIndex = path.indexOf("?"); if (queryIndex >= 0) { path = path.substr(0, queryIndex); } @@ -105,11 +95,11 @@ export function stripQuery (path) { * Returns the hash (URL fragment), of the given path. * If there is no hash, then the root hash ("#") is returned. * - * @param {string} path - * @returns {string} + * @param path + * @returns */ -export function getHash (path) { - let hashIndex = path.indexOf("#"); +export function getHash(path: any) { + const hashIndex = path.indexOf("#"); if (hashIndex >= 0) { return path.substr(hashIndex); } @@ -119,11 +109,11 @@ export function getHash (path) { /** * Removes the hash (URL fragment), if any, from the given path. * - * @param {string} path - * @returns {string} + * @param path + * @returns */ -export function stripHash (path) { - let hashIndex = path.indexOf("#"); +export function stripHash(path: any) { + const hashIndex = path.indexOf("#"); if (hashIndex >= 0) { path = path.substr(0, hashIndex); } @@ -133,19 +123,17 @@ export function stripHash (path) { /** * Determines whether the given path is an HTTP(S) URL. * - * @param {string} path - * @returns {boolean} + * @param path + * @returns */ -export function isHttp (path) { - let protocol = getProtocol(path); +export function isHttp(path: any) { + const protocol = getProtocol(path); if (protocol === "http" || protocol === "https") { return true; - } - else if (protocol === undefined) { + } else if (protocol === undefined) { // There is no protocol. If we're running in a browser, then assume it's HTTP. return typeof window !== "undefined"; - } - else { + } else { // It's some other protocol, such as "ftp://", "mongodb://", etc. return false; } @@ -155,17 +143,18 @@ export function isHttp (path) { * Determines whether the given path is a filesystem path. * This includes "file://" URLs. * - * @param {string} path - * @returns {boolean} + * @param path + * @returns */ -export function isFileSystemPath (path) { - if (process.browser) { +export function isFileSystemPath(path: any) { + // @ts-ignore + if (typeof window !== "undefined" || process.browser) { // We're running in a browser, so assume that all paths are URLs. // This way, even relative paths will be treated as URLs rather than as filesystem paths return false; } - let protocol = getProtocol(path); + const protocol = getProtocol(path); return protocol === undefined || protocol === "file"; } @@ -182,10 +171,10 @@ export function isFileSystemPath (path) { * C:\\My Documents\\File (1).json ==> C:/My%20Documents/File%20(1).json * file://Project #42/file.json ==> file://Project%20%2342/file.json * - * @param {string} path - * @returns {string} + * @param path + * @returns */ -export function fromFileSystemPath (path) { +export function fromFileSystemPath(path: any) { // Step 1: On Windows, replace backslashes with forward slashes, // rather than encoding them as "%5C" if (isWindows) { @@ -193,8 +182,7 @@ export function fromFileSystemPath (path) { const hasProjectUri = path.toUpperCase().includes(projectDir.replace(/\\/g, "/").toUpperCase()); if (hasProjectDir || hasProjectUri) { path = path.replace(/\\/g, "/"); - } - else { + } else { path = `${projectDir}/${path}`.replace(/\\/g, "/"); } } @@ -214,20 +202,16 @@ export function fromFileSystemPath (path) { /** * Converts a URL to a local filesystem path. - * - * @param {string} path - * @param {boolean} [keepFileProtocol] - If true, then "file://" will NOT be stripped - * @returns {string} */ -export function toFileSystemPath (path, keepFileProtocol) { +export function toFileSystemPath(path: string | undefined, keepFileProtocol?: boolean): string { // Step 1: `decodeURI` will decode characters such as Cyrillic characters, spaces, etc. - path = decodeURI(path); + path = decodeURI(path!); // Step 2: Manually decode characters that are not decoded by `decodeURI`. // This includes characters such as "#" and "?", which have special meaning in URLs, // but are just normal characters in a filesystem path. for (let i = 0; i < urlDecodePatterns.length; i += 2) { - path = path.replace(urlDecodePatterns[i], urlDecodePatterns[i + 1]); + path = path.replace(urlDecodePatterns[i], urlDecodePatterns[i + 1] as string); } // Step 3: If it's a "file://" URL, then format it consistently @@ -245,8 +229,7 @@ export function toFileSystemPath (path, keepFileProtocol) { if (keepFileProtocol) { // Return the consistently-formatted "file://" URL path = "file:///" + path; - } - else { + } else { // Convert the "file://" URL to a local filesystem path. // On Windows, it will start with something like "C:/". // On Posix, it will start with "/" @@ -272,10 +255,10 @@ export function toFileSystemPath (path, keepFileProtocol) { /** * Converts a $ref pointer to a valid JSON Path. * - * @param {string} pointer - * @returns {Array} + * @param pointer + * @returns */ -export function safePointerToPath (pointer) { +export function safePointerToPath(pointer: any) { if (pointer.length <= 1 || pointer[0] !== "#" || pointer[1] !== "/") { return []; } @@ -283,9 +266,7 @@ export function safePointerToPath (pointer) { return pointer .slice(2) .split("/") - .map((value) => { - return decodeURIComponent(value) - .replace(jsonPointerSlash, "/") - .replace(jsonPointerTilde, "~"); + .map((value: any) => { + return decodeURIComponent(value).replace(jsonPointerSlash, "/").replace(jsonPointerTilde, "~"); }); } diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index f303a351..00000000 --- a/package-lock.json +++ /dev/null @@ -1,27202 +0,0 @@ -{ - "name": "@apidevtools/json-schema-ref-parser", - "version": "0.0.0-dev", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "@apidevtools/json-schema-ref-parser", - "version": "0.0.0-dev", - "license": "MIT", - "dependencies": { - "@jsdevtools/ono": "^7.1.3", - "@types/json-schema": "^7.0.6", - "call-me-maybe": "^1.0.1", - "js-yaml": "^4.1.0" - }, - "devDependencies": { - "@babel/polyfill": "^7.12.1", - "@chiragrupani/karma-chromium-edge-launcher": "^2.2.2", - "@jsdevtools/eslint-config": "^1.0.7", - "@jsdevtools/host-environment": "^2.1.2", - "@jsdevtools/karma-config": "^3.1.7", - "@swc/cli": "^0.1.59", - "@swc/core": "^1.3.25", - "@types/node": "^14.14.21", - "c8": "^7.12.0", - "chai": "^4.2.0", - "chai-subset": "^1.6.0", - "chokidar": "^3.5.3", - "copyfiles": "^2.4.1", - "cross-env": "^7.0.3", - "eslint": "^7.18.0", - "isomorphic-fetch": "^3.0.0", - "karma": "^5.0.2", - "karma-cli": "^2.0.0", - "mocha": "^8.2.1", - "node-abort-controller": "^3.0.1", - "npm-check": "^5.9.0", - "shx": "^0.3.2", - "typescript": "^4.0.5" - }, - "engines": { - "node": ">= 17" - }, - "funding": { - "url": "https://github.com/sponsors/philsturgeon" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.10.5.tgz", - "integrity": "sha512-mPVoWNzIpYJHbWje0if7Ck36bpbtTvIxOi9+6WSK9wjGEXearAqlwBoTQvVjsAY2VIwgcs8V940geY3okzRCEw==", - "dev": true, - "dependencies": { - "browserslist": "^4.12.0", - "invariant": "^2.2.4", - "semver": "^5.5.0" - } - }, - "node_modules/@babel/compat-data/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/@babel/core": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.10.5.tgz", - "integrity": "sha512-O34LQooYVDXPl7QWCdW9p4NR+QlzOr7xShPPJz8GsuCU3/8ua/wqTr7gmnxXv+WBESiGU/G5s16i6tUvHkNb+w==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.10.5", - "@babel/helper-module-transforms": "^7.10.5", - "@babel/helpers": "^7.10.4", - "@babel/parser": "^7.10.5", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.5", - "@babel/types": "^7.10.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core/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/@babel/generator": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.5.tgz", - "integrity": "sha512-3vXxr3FEW7E7lJZiWQ3bM4+v/Vyr9C+hpolQ8BGFr9Y8Ri2tFLWTixmwKBafDujO1WVah4fhZBeU1bieKdghig==", - "dev": true, - "dependencies": { - "@babel/types": "^7.10.5", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", - "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.10.4" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", - "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==", - "dev": true, - "dependencies": { - "@babel/helper-explode-assignable-expression": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.4.tgz", - "integrity": "sha512-a3rYhlsGV0UHNDvrtOXBg8/OpfV0OKTkxKPzIplS1zpx7CygDcWWxckxZeDd3gzPzC4kUT0A4nVFDK0wGMh4MQ==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.10.4", - "browserslist": "^4.12.0", - "invariant": "^2.2.4", - "levenary": "^1.1.1", - "semver": "^5.5.0" - } - }, - "node_modules/@babel/helper-compilation-targets/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/@babel/helper-create-class-features-plugin": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz", - "integrity": "sha512-0nkdeijB7VlZoLT3r/mY3bUkw3T8WG/hNw+FATs/6+pG2039IJWjTYL0VTISqsNHMUTEnwbVnc89WIJX9Qed0A==", - "dev": true, - "dependencies": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-member-expression-to-functions": "^7.10.5", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz", - "integrity": "sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-regex": "^7.10.4", - "regexpu-core": "^4.7.0" - } - }, - "node_modules/@babel/helper-define-map": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz", - "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==", - "dev": true, - "dependencies": { - "@babel/helper-function-name": "^7.10.4", - "@babel/types": "^7.10.5", - "lodash": "^4.17.19" - } - }, - "node_modules/@babel/helper-explode-assignable-expression": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.4.tgz", - "integrity": "sha512-4K71RyRQNPRrR85sr5QY4X3VwG4wtVoXZB9+L3r1Gp38DhELyHCtovqydRi7c1Ovb17eRGiQ/FD5s8JdU0Uy5A==", - "dev": true, - "dependencies": { - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "dev": true, - "dependencies": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "node_modules/@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "dev": true, - "dependencies": { - "@babel/types": "^7.10.4" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz", - "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.10.4" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.5.tgz", - "integrity": "sha512-HiqJpYD5+WopCXIAbQDG0zye5XYVvcO9w/DHp5GsaGkRUaamLj2bEtu6i8rnGGprAhHM3qidCMgp71HF4endhA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.10.5" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", - "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.10.4" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.10.5.tgz", - "integrity": "sha512-4P+CWMJ6/j1W915ITJaUkadLObmCRRSC234uctJfn/vHrsLNxsR8dwlcXv9ZhJWzl77awf+mWXSZEKt5t0OnlA==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4", - "@babel/helper-simple-access": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.5", - "lodash": "^4.17.19" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", - "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.10.4" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", - "dev": true - }, - "node_modules/@babel/helper-regex": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.5.tgz", - "integrity": "sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg==", - "dev": true, - "dependencies": { - "lodash": "^4.17.19" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.4.tgz", - "integrity": "sha512-86Lsr6NNw3qTNl+TBcF1oRZMaVzJtbWTyTko+CQL/tvNvcGYEFKbLXDPxtW0HKk3McNOk4KzY55itGWCAGK5tg==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-wrap-function": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz", - "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==", - "dev": true, - "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.10.4", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz", - "integrity": "sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==", - "dev": true, - "dependencies": { - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", - "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.10.4" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", - "dev": true - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz", - "integrity": "sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug==", - "dev": true, - "dependencies": { - "@babel/helper-function-name": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "node_modules/@babel/helpers": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.4.tgz", - "integrity": "sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA==", - "dev": true, - "dependencies": { - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "node_modules/@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", - "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz", - "integrity": "sha512-cNMCVezQbrRGvXJwm9fu/1sJj9bHdGAgKodZdLqOQIpfoH3raqmRPBM17+lh7CzhiKRRBrGtZL9WcjxSoGYUSg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.10.4", - "@babel/plugin-syntax-async-generators": "^7.8.0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz", - "integrity": "sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz", - "integrity": "sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-dynamic-import": "^7.8.0" - } - }, - "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz", - "integrity": "sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.0" - } - }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz", - "integrity": "sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" - } - }, - "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.4.tgz", - "integrity": "sha512-73/G7QoRoeNkLZFxsoCCvlg4ezE4eM+57PnOqgaPOozd5myfj7p0muD1mRVJvbUWbOzD+q3No2bWbaKy+DJ8DA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.4.tgz", - "integrity": "sha512-6vh4SqRuLLarjgeOf4EaROJAHjvu9Gl+/346PbDH9yWbJyfnJ/ah3jmYKYtswEyCoWZiidvVHjHshd4WgjB9BA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.10.4" - } - }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz", - "integrity": "sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" - } - }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.10.4.tgz", - "integrity": "sha512-ZIhQIEeavTgouyMSdZRap4VPPHqJJ3NEs2cuHs5p0erH+iz6khB0qfgU8g7UuJkG88+fBMy23ZiU+nuHvekJeQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-optional-chaining": "^7.8.0" - } - }, - "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz", - "integrity": "sha512-wh5GJleuI8k3emgTg5KkJK6kHNsGEr0uBTDBuQUBJwckk9xs1ez79ioheEVVxMLyPscB0LfkbVHslQqIzWV6Bw==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz", - "integrity": "sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz", - "integrity": "sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz", - "integrity": "sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz", - "integrity": "sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz", - "integrity": "sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.10.4" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz", - "integrity": "sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.5.tgz", - "integrity": "sha512-6Ycw3hjpQti0qssQcA6AMSFDHeNJ++R6dIMnpRqUjFeBBTmTDPa8zgF90OVfTvAo11mXZTlVUViY1g8ffrURLg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz", - "integrity": "sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-define-map": "^7.10.4", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4", - "globals": "^11.1.0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz", - "integrity": "sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz", - "integrity": "sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz", - "integrity": "sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz", - "integrity": "sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz", - "integrity": "sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw==", - "dev": true, - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz", - "integrity": "sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz", - "integrity": "sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg==", - "dev": true, - "dependencies": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz", - "integrity": "sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz", - "integrity": "sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.5.tgz", - "integrity": "sha512-elm5uruNio7CTLFItVC/rIzKLfQ17+fX7EVz5W0TMgIHFo1zY0Ozzx+lgwhL4plzl8OzVn6Qasx5DeEFyoNiRw==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.10.5", - "@babel/helper-plugin-utils": "^7.10.4", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz", - "integrity": "sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-simple-access": "^7.10.4", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.5.tgz", - "integrity": "sha512-f4RLO/OL14/FP1AEbcsWMzpbUz6tssRaeQg11RH1BP/XnPpRoVwgeYViMFacnkaw4k4wjRSjn3ip1Uw9TaXuMw==", - "dev": true, - "dependencies": { - "@babel/helper-hoist-variables": "^7.10.4", - "@babel/helper-module-transforms": "^7.10.5", - "@babel/helper-plugin-utils": "^7.10.4", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz", - "integrity": "sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz", - "integrity": "sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz", - "integrity": "sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz", - "integrity": "sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz", - "integrity": "sha512-xPHwUj5RdFV8l1wuYiu5S9fqWGM2DrYc24TMvUiRrPVm+SM3XeqU9BcokQX/kEUe+p2RBwy+yoiR1w/Blq6ubw==", - "dev": true, - "dependencies": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz", - "integrity": "sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz", - "integrity": "sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw==", - "dev": true, - "dependencies": { - "regenerator-transform": "^0.14.2" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz", - "integrity": "sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz", - "integrity": "sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.10.4.tgz", - "integrity": "sha512-1e/51G/Ni+7uH5gktbWv+eCED9pP8ZpRhZB3jOaI3mmzfvJTWHkuyYTv0Z5PYtyM+Tr2Ccr9kUdQxn60fI5WuQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz", - "integrity": "sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-regex": "^7.10.4" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.5.tgz", - "integrity": "sha512-V/lnPGIb+KT12OQikDvgSuesRX14ck5FfJXt6+tXhdkJ+Vsd0lDCVtF6jcB4rNClYFzaB2jusZ+lNISDk2mMMw==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz", - "integrity": "sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.4.tgz", - "integrity": "sha512-y5XJ9waMti2J+e7ij20e+aH+fho7Wb7W8rNuu72aKRwCHFqQdhkdU2lo3uZ9tQuboEJcUFayXdARhcxLQ3+6Fg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz", - "integrity": "sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "node_modules/@babel/polyfill": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.12.1.tgz", - "integrity": "sha512-X0pi0V6gxLi6lFZpGmeNa4zxtwEmCs42isWLNjZZDE0Y8yVfgu0T2OAHlzBbdYlqbW/YXVvoBHpATEM+goCj8g==", - "dev": true, - "dependencies": { - "core-js": "^2.6.5", - "regenerator-runtime": "^0.13.4" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.10.4.tgz", - "integrity": "sha512-tcmuQ6vupfMZPrLrc38d0sF2OjLT3/bZ0dry5HchNCQbrokoQi4reXqclvkkAT5b+gWc23meVWpve5P/7+w/zw==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.10.4", - "@babel/helper-compilation-targets": "^7.10.4", - "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-proposal-async-generator-functions": "^7.10.4", - "@babel/plugin-proposal-class-properties": "^7.10.4", - "@babel/plugin-proposal-dynamic-import": "^7.10.4", - "@babel/plugin-proposal-json-strings": "^7.10.4", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.4", - "@babel/plugin-proposal-numeric-separator": "^7.10.4", - "@babel/plugin-proposal-object-rest-spread": "^7.10.4", - "@babel/plugin-proposal-optional-catch-binding": "^7.10.4", - "@babel/plugin-proposal-optional-chaining": "^7.10.4", - "@babel/plugin-proposal-private-methods": "^7.10.4", - "@babel/plugin-proposal-unicode-property-regex": "^7.10.4", - "@babel/plugin-syntax-async-generators": "^7.8.0", - "@babel/plugin-syntax-class-properties": "^7.10.4", - "@babel/plugin-syntax-dynamic-import": "^7.8.0", - "@babel/plugin-syntax-json-strings": "^7.8.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.0", - "@babel/plugin-syntax-top-level-await": "^7.10.4", - "@babel/plugin-transform-arrow-functions": "^7.10.4", - "@babel/plugin-transform-async-to-generator": "^7.10.4", - "@babel/plugin-transform-block-scoped-functions": "^7.10.4", - "@babel/plugin-transform-block-scoping": "^7.10.4", - "@babel/plugin-transform-classes": "^7.10.4", - "@babel/plugin-transform-computed-properties": "^7.10.4", - "@babel/plugin-transform-destructuring": "^7.10.4", - "@babel/plugin-transform-dotall-regex": "^7.10.4", - "@babel/plugin-transform-duplicate-keys": "^7.10.4", - "@babel/plugin-transform-exponentiation-operator": "^7.10.4", - "@babel/plugin-transform-for-of": "^7.10.4", - "@babel/plugin-transform-function-name": "^7.10.4", - "@babel/plugin-transform-literals": "^7.10.4", - "@babel/plugin-transform-member-expression-literals": "^7.10.4", - "@babel/plugin-transform-modules-amd": "^7.10.4", - "@babel/plugin-transform-modules-commonjs": "^7.10.4", - "@babel/plugin-transform-modules-systemjs": "^7.10.4", - "@babel/plugin-transform-modules-umd": "^7.10.4", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.10.4", - "@babel/plugin-transform-new-target": "^7.10.4", - "@babel/plugin-transform-object-super": "^7.10.4", - "@babel/plugin-transform-parameters": "^7.10.4", - "@babel/plugin-transform-property-literals": "^7.10.4", - "@babel/plugin-transform-regenerator": "^7.10.4", - "@babel/plugin-transform-reserved-words": "^7.10.4", - "@babel/plugin-transform-shorthand-properties": "^7.10.4", - "@babel/plugin-transform-spread": "^7.10.4", - "@babel/plugin-transform-sticky-regex": "^7.10.4", - "@babel/plugin-transform-template-literals": "^7.10.4", - "@babel/plugin-transform-typeof-symbol": "^7.10.4", - "@babel/plugin-transform-unicode-escapes": "^7.10.4", - "@babel/plugin-transform-unicode-regex": "^7.10.4", - "@babel/preset-modules": "^0.1.3", - "@babel/types": "^7.10.4", - "browserslist": "^4.12.0", - "core-js-compat": "^3.6.2", - "invariant": "^2.2.2", - "levenary": "^1.1.1", - "semver": "^5.5.0" - } - }, - "node_modules/@babel/preset-env/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/@babel/preset-modules": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.3.tgz", - "integrity": "sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "node_modules/@babel/runtime": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.10.5.tgz", - "integrity": "sha512-otddXKhdNn7d0ptoFRHtMLa8LqDxLYwTjB4nYgM1yy5N6gU/MUf8zqyyLltCH3yAVitBzmwK4us+DD0l/MauAg==", - "dev": true, - "dependencies": { - "regenerator-runtime": "^0.13.4" - } - }, - "node_modules/@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "node_modules/@babel/traverse": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.5.tgz", - "integrity": "sha512-yc/fyv2gUjPqzTz0WHeRJH2pv7jA9kA7mBX2tXl/x5iOE81uaVPuGPtaYk7wmkx4b67mQ7NqI8rmT2pF47KYKQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.10.5", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4", - "@babel/parser": "^7.10.5", - "@babel/types": "^7.10.5", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - } - }, - "node_modules/@babel/types": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", - "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "node_modules/@chiragrupani/karma-chromium-edge-launcher": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@chiragrupani/karma-chromium-edge-launcher/-/karma-chromium-edge-launcher-2.2.2.tgz", - "integrity": "sha512-qbe3skHFAANtF/cQdMGVkdq1lZlVXsVuetx7p+RXhSrNiJ6UxRoB/rY0bbvChqSXTSJrWJ2tOjy+wvym+iYHHg==", - "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/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" - } - }, - "node_modules/@eslint/eslintrc/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "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==", - "dev": true, - "dependencies": { - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - } - }, - "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/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@eslint/eslintrc/node_modules/lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", - "dev": true - }, - "node_modules/@eslint/eslintrc/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/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "node_modules/@jsdevtools/coverage-istanbul-loader": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@jsdevtools/coverage-istanbul-loader/-/coverage-istanbul-loader-3.0.5.tgz", - "integrity": "sha512-EUCPEkaRPvmHjWAAZkWMT7JDzpw7FKB00WTISaiXsbNOd5hCHg77XLA8sLYLFDo1zepYLo2w7GstN8YBqRXZfA==", - "dev": true, - "dependencies": { - "convert-source-map": "^1.7.0", - "istanbul-lib-instrument": "^4.0.3", - "loader-utils": "^2.0.0", - "merge-source-map": "^1.1.0", - "schema-utils": "^2.7.0" - } - }, - "node_modules/@jsdevtools/eslint-config": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@jsdevtools/eslint-config/-/eslint-config-1.0.7.tgz", - "integrity": "sha512-agcdIZtwHwZK9PBcW+Bd6/Mj0+DyOdQP1VD7/nRNfR7fBAIfXskv+mf7D4+8dPHfcRH3Fw639Z4trERRhlrodw==", - "dev": true, - "dependencies": { - "@typescript-eslint/eslint-plugin": "^3.6.1", - "@typescript-eslint/parser": "^3.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@jsdevtools/host-environment": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@jsdevtools/host-environment/-/host-environment-2.1.2.tgz", - "integrity": "sha512-9T+w9lWwMExriyAXafL12lPHxOaF7PwSbyf6nCZDpidrXb5r+SiCs6YjsAEOHHdFj7spvNVzEFVT23fDsPbf5Q==", - "dev": true, - "dependencies": { - "@qawolf/ci-info": "^2.1.0" - } - }, - "node_modules/@jsdevtools/karma-config": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/@jsdevtools/karma-config/-/karma-config-3.1.7.tgz", - "integrity": "sha512-cMzopdPqaZEazs/TCfsLUIwLx9jfGZcYnKbx3mPLQ9vlWp4AgR9daJf1GpCtGKJh9C/92kZt0ePV8fut+RnQqQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.10.4", - "@babel/preset-env": "^7.10.4", - "@jsdevtools/coverage-istanbul-loader": "^3.0.4", - "@jsdevtools/host-environment": "^2.0.3", - "@jsdevtools/karma-host-environment": "^3.0.2", - "@jsdevtools/ono": "^7.1.3", - "babel-loader": "^8.1.0", - "karma-chrome-launcher": "^3.1.0", - "karma-coverage-istanbul-reporter": "^3.0.3", - "karma-edge-launcher": "^0.4.2", - "karma-firefox-launcher": "^1.2.0", - "karma-ie-launcher": "^1.0.0", - "karma-mocha": "^2.0.1", - "karma-safari-launcher": "^1.0.0", - "karma-sauce-launcher": "^4.1.5", - "karma-verbose-reporter": "^0.0.6", - "karma-webpack": "^4.0.2", - "webpack": "^4.43.0" - } - }, - "node_modules/@jsdevtools/karma-host-environment": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@jsdevtools/karma-host-environment/-/karma-host-environment-3.0.3.tgz", - "integrity": "sha512-g1xAAidi0xP41Ep7Ddnj34Ld/okIZ6VeRrG0cJHl62g+1bEssyFzCyUFo+G6SYhNFHdcrwfW7AecTYXSx4ZLgA==", - "dev": true, - "dependencies": { - "@jsdevtools/host-environment": "^2.0.4", - "temp": "^0.9.0" - } - }, - "node_modules/@jsdevtools/ono": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", - "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==" - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@qawolf/ci-info": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@qawolf/ci-info/-/ci-info-2.1.0.tgz", - "integrity": "sha512-D5H5RjqqE+YxI2oeTgSRuIjdy/hli90H5mMd81bBrYlOfB/f4TBsKMoaWfzI5E4bmFzLfQJuvvepTaWrxVfBug==", - "dev": true - }, - "node_modules/@sindresorhus/is": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", - "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@swc/cli": { - "version": "0.1.59", - "resolved": "https://registry.npmjs.org/@swc/cli/-/cli-0.1.59.tgz", - "integrity": "sha512-BlX3wIxYTwdtR22dIqZ3FEIOJPqnlByAp4JY46OMZi2UXMB3ZbOzefawD2ZlLafRUWyy5NtiZZty5waKzaYRnA==", - "dev": true, - "dependencies": { - "bin-wrapper": "^4.1.0", - "commander": "^7.1.0", - "fast-glob": "^3.2.5", - "semver": "^7.3.8", - "slash": "3.0.0", - "source-map": "^0.7.3" - }, - "bin": { - "spack": "bin/spack.js", - "swc": "bin/swc.js", - "swcx": "bin/swcx.js" - }, - "engines": { - "node": ">= 12.13" - }, - "peerDependencies": { - "@swc/core": "^1.2.66", - "chokidar": "^3.5.1" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/@swc/cli/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@swc/cli/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@swc/core": { - "version": "1.3.25", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.25.tgz", - "integrity": "sha512-wqzvM/wu6OsTVYPMStOpm7kIQcPX3GoZ0sC85qzDdsCxmJ1rmItLAD91sXPUmmdk0XqPYjLgT9MRDEIP5woz4g==", - "dev": true, - "hasInstallScript": true, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/swc" - }, - "optionalDependencies": { - "@swc/core-darwin-arm64": "1.3.25", - "@swc/core-darwin-x64": "1.3.25", - "@swc/core-linux-arm-gnueabihf": "1.3.25", - "@swc/core-linux-arm64-gnu": "1.3.25", - "@swc/core-linux-arm64-musl": "1.3.25", - "@swc/core-linux-x64-gnu": "1.3.25", - "@swc/core-linux-x64-musl": "1.3.25", - "@swc/core-win32-arm64-msvc": "1.3.25", - "@swc/core-win32-ia32-msvc": "1.3.25", - "@swc/core-win32-x64-msvc": "1.3.25" - } - }, - "node_modules/@swc/core-darwin-arm64": { - "version": "1.3.25", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.25.tgz", - "integrity": "sha512-8PWAVcjTJyj2VrqPBFOIi2w2P0Z8kOCbzHW3+pe+bSXxfGMG0MKPl5U2IXhsEL0ovm4xSFlqW0yygpoP3MmRPw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-darwin-x64": { - "version": "1.3.25", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.25.tgz", - "integrity": "sha512-5DHGiMYFEj5aa208tCjo7Sn5tiG4xPz+4gUiWVlglxqXFptkNim5xu/1G6VYm5Zk7dI5jJkjTU76GQG7IRvPug==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.3.25", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.25.tgz", - "integrity": "sha512-YNfLxv9PhZk+jrJbpR1mMrYBUkufo0hiFv3S1OrX3l8edsIP4wPND5w9ZH0Oi898f6Jg9DBrY2zXJMQ+gWkbvA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.3.25", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.25.tgz", - "integrity": "sha512-kS+spM5/xQ6QvWF1ms3byfjnhUlpjTfFwgCyHnIKgjvsYkDa+vkAIhKq6HuEdaTPaCRCjts0Zarhub1nClUU0g==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.3.25", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.25.tgz", - "integrity": "sha512-vM3D7LWmjotUAJ2D4F+L+dspFeWrcPNVh0o8TCoTOYCt8DPD5YsUKTpIgOsZ+gReeWUAnNTh0Btx5pGGVfajGA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.3.25", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.25.tgz", - "integrity": "sha512-xUCLLMDlYa/zB8BftVa4SrxuVpcDxkltCfmBg5r2pZPVskhC5ZJsQZ/AvWNChoAB11shRhjTaWDlmxJEsa7TIg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-x64-musl": { - "version": "1.3.25", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.25.tgz", - "integrity": "sha512-QzHU3BIaUVRSFNsUn3Qxx1vgtF/f5NqsFMAAPSq9Y8Yq5nrlc2t7cNuOROxHLbUqE+NPUp6+RglleJMoeWz5mA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.3.25", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.25.tgz", - "integrity": "sha512-77VSVtneVOAUL4zkRyQZ6pWVpTsVVdqwly/DKnRnloglGKxYuk5DG5MUBsL72Nnfv4OCHjZ27eI3NUrpLsUb2Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.3.25", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.25.tgz", - "integrity": "sha512-kz0v3K3H6OPEZR3ry72Ad/6C5GrZBRRUk69K58LORQ8tZXQD3UGl85pUbQqyHl8fR5NU76Muxgovj9CI9iTHGA==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.3.25", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.25.tgz", - "integrity": "sha512-nmQOAzIpNRRnupWzkenJmW4i+h1M76cVNUqEU2MjmtesEkRZEGqv//jefXiyCP2zcbeLNLKiB2ptVJhpd1BvRA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@szmarczak/http-timer": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.5.tgz", - "integrity": "sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ==", - "dev": true, - "dependencies": { - "defer-to-connect": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@types/cacheable-request": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.1.tgz", - "integrity": "sha512-ykFq2zmBGOCbpIXtoVbz4SKY5QriWPh3AjyU4G74RYbtt5yOc5OfaY75ftjg7mikMOla1CTGpX3lLbuJh8DTrQ==", - "dev": true, - "dependencies": { - "@types/http-cache-semantics": "*", - "@types/keyv": "*", - "@types/node": "*", - "@types/responselike": "*" - } - }, - "node_modules/@types/color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", - "dev": true - }, - "node_modules/@types/eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==", - "dev": true - }, - "node_modules/@types/http-cache-semantics": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz", - "integrity": "sha512-c3Xy026kOF7QOTn00hbIllV1dLR9hG9NkSrLQgCVs8NF6sBU+VGWjD3wLPhmh1TYAc7ugCFsvHYMN4VcBN1U1A==", - "dev": true - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true - }, - "node_modules/@types/json-schema": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", - "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==" - }, - "node_modules/@types/keyv": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.1.tgz", - "integrity": "sha512-MPtoySlAZQ37VoLaPcTHCu1RWJ4llDkULYZIzOYxlhxBqYPB0RsRlmMU0R6tahtFe27mIdkHV+551ZWV4PLmVw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/node": { - "version": "14.14.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.21.tgz", - "integrity": "sha512-cHYfKsnwllYhjOzuC5q1VpguABBeecUp24yFluHpn/BQaVxB1CuQ1FSRZCzrPxrkIfWISXV2LbeoBthLWg0+0A==", - "dev": true - }, - "node_modules/@types/puppeteer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/puppeteer/-/puppeteer-3.0.1.tgz", - "integrity": "sha512-t03eNKCvWJXhQ8wkc5C6GYuSqMEdKLOX0GLMGtks25YZr38wKZlKTwGM/BoAPVtdysX7Bb9tdwrDS1+NrW3RRA==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/responselike": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", - "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/yauzl": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.1.tgz", - "integrity": "sha512-A1b8SU4D10uoPjwb0lnHmmu8wZhR9d+9o2PKBQT2jU5YPTKsxac6M2qGAdY7VcL+dHHhARVUDmeg0rOrcd9EjA==", - "dev": true, - "optional": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.10.1.tgz", - "integrity": "sha512-PQg0emRtzZFWq6PxBcdxRH3QIQiyFO3WCVpRL3fgj5oQS3CDs3AeAKfv4DxNhzn8ITdNJGJ4D3Qw8eAJf3lXeQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/experimental-utils": "3.10.1", - "debug": "^4.1.1", - "functional-red-black-tree": "^1.0.1", - "regexpp": "^3.0.0", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.1.tgz", - "integrity": "sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/types": "3.10.1", - "@typescript-eslint/typescript-estree": "3.10.1", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-3.10.1.tgz", - "integrity": "sha512-Ug1RcWcrJP02hmtaXVS3axPPTTPnZjupqhgj+NnZ6BCkwSImWk/283347+x9wN+lqOdK9Eo3vsyiyDHgsmiEJw==", - "dev": true, - "dependencies": { - "@types/eslint-visitor-keys": "^1.0.0", - "@typescript-eslint/experimental-utils": "3.10.1", - "@typescript-eslint/types": "3.10.1", - "@typescript-eslint/typescript-estree": "3.10.1", - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-3.10.1.tgz", - "integrity": "sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ==", - "dev": true, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.1.tgz", - "integrity": "sha512-QbcXOuq6WYvnB3XPsZpIwztBoquEYLXh2MtwVU+kO8jgYCiv4G5xrSP/1wg4tkvrEE+esZVquIPX/dxPlePk1w==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "3.10.1", - "@typescript-eslint/visitor-keys": "3.10.1", - "debug": "^4.1.1", - "glob": "^7.1.6", - "is-glob": "^4.0.1", - "lodash": "^4.17.15", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz", - "integrity": "sha512-9JgC82AaQeglebjZMgYR5wgmfUdUc+EitGUUMW8u2nDckaeimzW+VsoLV6FoimPv2id3VQzfjwBxEMVz08ameQ==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - } - }, - "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/@wdio/config": { - "version": "6.1.14", - "resolved": "https://registry.npmjs.org/@wdio/config/-/config-6.1.14.tgz", - "integrity": "sha512-MXHMHwtkAblfnIxONs9aW//T9Fq5XIw3oH+tztcBRvNTTAIXmwHd+4sOjAwjpCdBSGs0C4kM/aTpGfwDZVURvQ==", - "dev": true, - "dependencies": { - "@wdio/logger": "6.0.16", - "deepmerge": "^4.0.0", - "glob": "^7.1.2" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@wdio/logger": { - "version": "6.0.16", - "resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-6.0.16.tgz", - "integrity": "sha512-VbH5UnQIG/3sSMV+Y38+rOdwyK9mVA9vuL7iOngoTafHwUjL1MObfN/Cex84L4mGxIgfxCu6GV48iUmSuQ7sqA==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "loglevel": "^1.6.0", - "loglevel-plugin-prefix": "^0.8.4", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@wdio/logger/node_modules/ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "dependencies": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@wdio/logger/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" - } - }, - "node_modules/@wdio/logger/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/@wdio/logger/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/@wdio/logger/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/@wdio/logger/node_modules/supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@wdio/protocols": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-6.3.0.tgz", - "integrity": "sha512-1GKzfyCTLW5WkFd3W7NLACih+zNWU7c8kFurbCQXDK1ko1obqJEs7ZjBr85q5XqMWburdks5rDjyml2iEB2LBg==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@wdio/repl": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@wdio/repl/-/repl-6.3.0.tgz", - "integrity": "sha512-FT3flKOqNdZNG1uYl+QpOfdZIgKAWhLfoQ0s+wL0crLeDNIFvvM2qSDhRBRDYV7a0IFyBi8Z975WBn0dlH03Ig==", - "dev": true, - "dependencies": { - "@wdio/utils": "6.3.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@wdio/utils": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-6.3.0.tgz", - "integrity": "sha512-PbeC5fpieamgSAHf7S58MAyraGU1qKxnHdfGMG+ZIWiIo73oo4j/57CcH6ZawQ3YC1wEc/5q+VXg7N5hvqhJOQ==", - "dev": true, - "dependencies": { - "@wdio/logger": "6.0.16" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", - "dev": true, - "dependencies": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", - "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-code-frame": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", - "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", - "dev": true, - "dependencies": { - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "node_modules/@webassemblyjs/helper-fsm": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-module-context": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", - "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", - "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", - "dev": true, - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", - "dev": true, - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", - "dev": true - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", - "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", - "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "node_modules/@webassemblyjs/wast-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", - "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/floating-point-hex-parser": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-code-frame": "1.9.0", - "@webassemblyjs/helper-fsm": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "node_modules/accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "dev": true, - "dependencies": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", - "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", - "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 - }, - "node_modules/after": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", - "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", - "dev": true - }, - "node_modules/agent-base": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", - "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==", - "dev": true, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz", - "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==", - "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" - } - }, - "node_modules/ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "dev": true - }, - "node_modules/ajv-keywords": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.1.tgz", - "integrity": "sha512-KWcq3xN8fDjSB+IMoh2VaXVhRI0BBGxoYp3rx7Pkb6z0cFjYR9Q9l4yZqqals0/zsioCmocC5H6UvsGD4MoIBA==", - "dev": true - }, - "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, - "dependencies": { - "string-width": "^2.0.0" - } - }, - "node_modules/ansi-align/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, - "engines": { - "node": ">=4" - } - }, - "node_modules/ansi-align/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, - "engines": { - "node": ">=4" - } - }, - "node_modules/ansi-align/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, - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ansi-align/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, - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "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/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, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "node_modules/arch": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/arch/-/arch-2.1.2.tgz", - "integrity": "sha512-NTBIIbAfkJeIletyABbVtdPgeKfDafR+1mZV/AyyfC1UkVkp9iUjV+wwmqtUgphHYajbI86jejBJp5e+jkGTiQ==", - "dev": true - }, - "node_modules/archive-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz", - "integrity": "sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA=", - "dev": true, - "dependencies": { - "file-type": "^4.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/archive-type/node_modules/file-type": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz", - "integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/archiver": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-4.0.2.tgz", - "integrity": "sha512-B9IZjlGwaxF33UN4oPbfBkyA4V1SxNLeIhR1qY8sRXSsbdUkEHrrOvwlYFPx+8uQeCe9M+FG6KgO+imDmQ79CQ==", - "dev": true, - "dependencies": { - "archiver-utils": "^2.1.0", - "async": "^3.2.0", - "buffer-crc32": "^0.2.1", - "glob": "^7.1.6", - "readable-stream": "^3.6.0", - "tar-stream": "^2.1.2", - "zip-stream": "^3.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/archiver-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", - "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", - "dev": true, - "dependencies": { - "glob": "^7.1.4", - "graceful-fs": "^4.2.0", - "lazystream": "^1.0.0", - "lodash.defaults": "^4.2.0", - "lodash.difference": "^4.5.0", - "lodash.flatten": "^4.4.0", - "lodash.isplainobject": "^4.0.6", - "lodash.union": "^4.6.0", - "normalize-path": "^3.0.0", - "readable-stream": "^2.0.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/archiver/node_modules/bl": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz", - "integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==", - "dev": true, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/archiver/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, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/archiver/node_modules/tar-stream": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.3.tgz", - "integrity": "sha512-Z9yri56Dih8IaK8gncVPx4Wqt86NDmQTSh49XLZgjWpGZL9GK9HKParS2scqHCC4w6X9Gh2jwaU45V47XTKwVA==", - "dev": true, - "dependencies": { - "bl": "^4.0.1", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arraybuffer.slice": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", - "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", - "dev": true - }, - "node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", - "dev": true, - "dependencies": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/asn1.js/node_modules/bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - }, - "node_modules/assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", - "dev": true, - "dependencies": { - "object-assign": "^4.1.1", - "util": "0.10.3" - } - }, - "node_modules/assert/node_modules/inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - }, - "node_modules/assert/node_modules/util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dev": true, - "dependencies": { - "inherits": "2.0.1" - } - }, - "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/async": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", - "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", - "dev": true - }, - "node_modules/async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true, - "optional": true - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true, - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/babel-loader": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz", - "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==", - "dev": true, - "dependencies": { - "find-cache-dir": "^2.1.0", - "loader-utils": "^1.4.0", - "mkdirp": "^0.5.3", - "pify": "^4.0.1", - "schema-utils": "^2.6.5" - }, - "engines": { - "node": ">= 6.9" - } - }, - "node_modules/babel-loader/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/babel-loader/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dev": true, - "dependencies": { - "object.assign": "^4.1.0" - } - }, - "node_modules/babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, - "dependencies": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - } - }, - "node_modules/babel-runtime/node_modules/regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "dev": true - }, - "node_modules/backo2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", - "dev": true - }, - "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 - }, - "node_modules/base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "dependencies": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base64-arraybuffer": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", - "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/base64-js": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", - "dev": true - }, - "node_modules/base64id": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", - "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", - "dev": true, - "engines": { - "node": "^4.5.0 || >= 5.9" - } - }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/bin-check": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bin-check/-/bin-check-4.1.0.tgz", - "integrity": "sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==", - "dev": true, - "dependencies": { - "execa": "^0.7.0", - "executable": "^4.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/bin-version": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-3.1.0.tgz", - "integrity": "sha512-Mkfm4iE1VFt4xd4vH+gx+0/71esbfus2LsnCGe8Pi4mndSPyT+NGES/Eg99jx8/lUGWfu3z2yuB/bt5UB+iVbQ==", - "dev": true, - "dependencies": { - "execa": "^1.0.0", - "find-versions": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/bin-version-check": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-4.0.0.tgz", - "integrity": "sha512-sR631OrhC+1f8Cvs8WyVWOA33Y8tgwjETNPyyD/myRBXLkfS/vl74FmH/lFcRl9KY3zwGh7jFhvyk9vV3/3ilQ==", - "dev": true, - "dependencies": { - "bin-version": "^3.0.0", - "semver": "^5.6.0", - "semver-truncate": "^1.1.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/bin-version-check/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/bin-version/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/bin-version/node_modules/execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "dependencies": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/bin-version/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, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/bin-version/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/bin-wrapper": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bin-wrapper/-/bin-wrapper-4.1.0.tgz", - "integrity": "sha512-hfRmo7hWIXPkbpi0ZltboCMVrU+0ClXR/JgbCKKjlDjQf6igXa7OwdqNcFWQZPZTgiY7ZpzE3+LjjkLiTN2T7Q==", - "dev": true, - "dependencies": { - "bin-check": "^4.1.0", - "bin-version-check": "^4.0.0", - "download": "^7.1.0", - "import-lazy": "^3.1.0", - "os-filter-obj": "^2.0.0", - "pify": "^4.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/binary-extensions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", - "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "optional": true, - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, - "node_modules/bl": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", - "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", - "dev": true, - "dependencies": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/blob": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", - "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", - "dev": true - }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "node_modules/bn.js": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.2.tgz", - "integrity": "sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA==", - "dev": true - }, - "node_modules/body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "dev": true, - "dependencies": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/boolean": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.0.1.tgz", - "integrity": "sha512-HRZPIjPcbwAVQvOTxR4YE3o8Xs98NqbbL1iEZDCz7CL8ql0Lt5iOyJFxfnAB0oFs8Oh02F/lLlg30Mexv46LjA==", - "dev": true - }, - "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, - "dependencies": { - "ansi-align": "^2.0.0", - "camelcase": "^4.0.0", - "chalk": "^2.0.1", - "cli-boxes": "^1.0.0", - "string-width": "^2.0.0", - "term-size": "^1.2.0", - "widest-line": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/boxen/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, - "engines": { - "node": ">=4" - } - }, - "node_modules/boxen/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, - "engines": { - "node": ">=4" - } - }, - "node_modules/boxen/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, - "engines": { - "node": ">=4" - } - }, - "node_modules/boxen/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, - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/boxen/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, - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "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, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "dev": true - }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "node_modules/browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, - "dependencies": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "node_modules/browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, - "dependencies": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/browserify-rsa": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "randombytes": "^2.0.1" - } - }, - "node_modules/browserify-rsa/node_modules/bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - }, - "node_modules/browserify-sign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.0.tgz", - "integrity": "sha512-hEZC1KEeYuoHRqhGhTy6gWrpJA3ZDjFWv0DE61643ZnOXAKJb3u7yWcrU0mMc9SwAqK1n7myPGndkp0dFG7NFA==", - "dev": true, - "dependencies": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.2", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "node_modules/browserify-sign/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, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/browserify-sign/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 - }, - "node_modules/browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dev": true, - "dependencies": { - "pako": "~1.0.5" - } - }, - "node_modules/browserslist": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.13.0.tgz", - "integrity": "sha512-MINatJ5ZNrLnQ6blGvePd/QOz9Xtu+Ne+x29iQSCHfkU5BugKVJwZKn/iiL8UbpIpa3JhviKjz+XxMo0m2caFQ==", - "dev": true, - "dependencies": { - "caniuse-lite": "^1.0.30001093", - "electron-to-chromium": "^1.3.488", - "escalade": "^3.0.1", - "node-releases": "^1.1.58" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", - "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", - "dev": true, - "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - }, - "node_modules/buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", - "dev": true, - "dependencies": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" - } - }, - "node_modules/buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", - "dev": true - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", - "dev": true - }, - "node_modules/buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "node_modules/buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true - }, - "node_modules/builtin-modules": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.1.0.tgz", - "integrity": "sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", - "dev": true - }, - "node_modules/bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/c8": { - "version": "7.12.0", - "resolved": "https://registry.npmjs.org/c8/-/c8-7.12.0.tgz", - "integrity": "sha512-CtgQrHOkyxr5koX1wEUmN/5cfDa2ckbHRA4Gy5LAL0zaCFtVWJS5++n+w4/sr2GWGerBxgTjpKeDclk/Qk6W/A==", - "dev": true, - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@istanbuljs/schema": "^0.1.3", - "find-up": "^5.0.0", - "foreground-child": "^2.0.0", - "istanbul-lib-coverage": "^3.2.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-reports": "^3.1.4", - "rimraf": "^3.0.2", - "test-exclude": "^6.0.0", - "v8-to-istanbul": "^9.0.0", - "yargs": "^16.2.0", - "yargs-parser": "^20.2.9" - }, - "bin": { - "c8": "bin/c8.js" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/c8/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/c8/node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/c8/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/c8/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/c8/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/c8/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/c8/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/c8/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/c8/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/c8/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/c8/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/c8/node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/c8/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/c8/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "dev": true, - "dependencies": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - } - }, - "node_modules/cacache/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, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/cacache/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "node_modules/cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "dependencies": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cacheable-lookup": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.3.tgz", - "integrity": "sha512-W+JBqF9SWe18A72XFzN/V/CULFzPm7sBXzzR6ekkE+3tLG72wFZrBiBZhrZuDoYexop4PHJVdFAKb/Nj9+tm9w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/cacheable-request": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", - "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=", - "dev": true, - "dependencies": { - "clone-response": "1.0.2", - "get-stream": "3.0.0", - "http-cache-semantics": "3.8.1", - "keyv": "3.0.0", - "lowercase-keys": "1.0.0", - "normalize-url": "2.0.1", - "responselike": "1.0.2" - } - }, - "node_modules/cacheable-request/node_modules/lowercase-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", - "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/call-me-maybe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=" - }, - "node_modules/callsite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", - "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/callsite-record": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/callsite-record/-/callsite-record-3.2.2.tgz", - "integrity": "sha1-mgOQZC5D/ou4I5ReUUZPafQWQ94=", - "dev": true, - "dependencies": { - "callsite": "^1.0.0", - "chalk": "^1.1.1", - "error-stack-parser": "^1.3.3", - "highlight-es": "^1.0.0", - "lodash": "4.6.1 || ^4.16.1", - "pinkie-promise": "^2.0.0" - } - }, - "node_modules/callsite-record/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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/callsite-record/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/callsite-record/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/callsite-record/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, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/callsite-record/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camel-case": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.1.tgz", - "integrity": "sha512-7fa2WcG4fYFkclIvEmxBbTvmibwF2/agfEBc6q3lOpVu0A13ltLsA+Hr/8Hp6kp5f+G7hKi6t8lys6XxP+1K6Q==", - "dev": true, - "dependencies": { - "pascal-case": "^3.1.1", - "tslib": "^1.10.0" - } - }, - "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, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", - "dev": true, - "dependencies": { - "camelcase": "^2.0.0", - "map-obj": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/camelcase-keys/node_modules/camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001103", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001103.tgz", - "integrity": "sha512-EJkTPrZrgy712tjZ7GQDye5A67SQOyNS6X9b6GS/e5QFu5Renv5qfkx3GHq1S+vObxKzbWWYuPO/7nt4kYW/gA==", - "dev": true - }, - "node_modules/capital-case": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/capital-case/-/capital-case-1.0.3.tgz", - "integrity": "sha512-OlUSJpUr7SY0uZFOxcwnDOU7/MpHlKTZx2mqnDYQFrDudXLFm0JJ9wr/l4csB+rh2Ug0OPuoSO53PqiZBqno9A==", - "dev": true, - "dependencies": { - "no-case": "^3.0.3", - "tslib": "^1.10.0", - "upper-case-first": "^2.0.1" - } - }, - "node_modules/capture-stack-trace": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", - "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/caw": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/caw/-/caw-2.0.1.tgz", - "integrity": "sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==", - "dev": true, - "dependencies": { - "get-proxy": "^2.0.0", - "isurl": "^1.0.0-alpha5", - "tunnel-agent": "^0.6.0", - "url-to-options": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chai": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", - "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", - "dev": true, - "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "pathval": "^1.1.0", - "type-detect": "^4.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chai-subset": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/chai-subset/-/chai-subset-1.6.0.tgz", - "integrity": "sha1-pdDKFOMpp5WW7XAFi2ZGvWmIz+k=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "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==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/change-case": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/change-case/-/change-case-4.1.1.tgz", - "integrity": "sha512-qRlUWn/hXnX1R1LBDF/RelJLiqNjKjUqlmuBVSEIyye8kq49CXqkZWKmi8XeUAdDXWFOcGLUMZ+aHn3Q5lzUXw==", - "dev": true, - "dependencies": { - "camel-case": "^4.1.1", - "capital-case": "^1.0.3", - "constant-case": "^3.0.3", - "dot-case": "^3.0.3", - "header-case": "^2.0.3", - "no-case": "^3.0.3", - "param-case": "^3.0.3", - "pascal-case": "^3.1.1", - "path-case": "^3.0.3", - "sentence-case": "^3.0.3", - "snake-case": "^3.0.3", - "tslib": "^1.10.0" - } - }, - "node_modules/check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chokidar/node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/chokidar/node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/chokidar/node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/chokidar/node_modules/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, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/chokidar/node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "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 - }, - "node_modules/chrome-launcher": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.13.4.tgz", - "integrity": "sha512-nnzXiDbGKjDSK6t2I+35OAPBy5Pw/39bgkb/ZAFwMhwJbdYBp6aH+vW28ZgtjdU890Q7D+3wN/tB8N66q5Gi2A==", - "dev": true, - "dependencies": { - "@types/node": "*", - "escape-string-regexp": "^1.0.5", - "is-wsl": "^2.2.0", - "lighthouse-logger": "^1.0.0", - "mkdirp": "^0.5.3", - "rimraf": "^3.0.2" - } - }, - "node_modules/chrome-launcher/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" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", - "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", - "dev": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "node": ">=6.0" - } - }, - "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 - }, - "node_modules/cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cli-spinners": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-0.1.2.tgz", - "integrity": "sha1-u3ZNiOGF+54eaiofGXcjGPYF4xw=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "dev": true, - "dependencies": { - "mimic-response": "^1.0.0" - } - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true, - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "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 - }, - "node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", - "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", - "dev": true, - "dependencies": { - "graceful-readlink": ">= 1.0.0" - }, - "engines": { - "node": ">= 0.6.x" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "node_modules/component-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", - "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", - "dev": true - }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "node_modules/component-inherit": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", - "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", - "dev": true - }, - "node_modules/compress-commons": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-3.0.0.tgz", - "integrity": "sha512-FyDqr8TKX5/X0qo+aVfaZ+PVmNJHJeckFBlq8jZGSJOgnynhfifoyl24qaqdUdDIBe0EVTHByN6NAkqYvE/2Xg==", - "dev": true, - "dependencies": { - "buffer-crc32": "^0.2.13", - "crc32-stream": "^3.0.1", - "normalize-path": "^3.0.0", - "readable-stream": "^2.3.7" - }, - "engines": { - "node": ">= 8" - } - }, - "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 - }, - "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": [ - "node >= 0.8" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "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, - "dependencies": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "node_modules/configstore": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", - "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", - "dev": true, - "dependencies": { - "dot-prop": "^4.1.0", - "graceful-fs": "^4.1.2", - "make-dir": "^1.0.0", - "unique-string": "^1.0.0", - "write-file-atomic": "^2.0.0", - "xdg-basedir": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/configstore/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, - "dependencies": { - "pify": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/configstore/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, - "engines": { - "node": ">=4" - } - }, - "node_modules/connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/connect/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/connect/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", - "dev": true - }, - "node_modules/constant-case": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-3.0.3.tgz", - "integrity": "sha512-FXtsSnnrFYpzDmvwDGQW+l8XK3GV1coLyBN0eBz16ZUzGaZcT2ANVCJmLeuw2GQgxKHQIe9e0w2dzkSfaRlUmA==", - "dev": true, - "dependencies": { - "no-case": "^3.0.3", - "tslib": "^1.10.0", - "upper-case": "^2.0.1" - } - }, - "node_modules/constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", - "dev": true - }, - "node_modules/content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "dev": true, - "dependencies": { - "safe-buffer": "5.1.2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "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, - "dependencies": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - } - }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/copyfiles": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/copyfiles/-/copyfiles-2.4.1.tgz", - "integrity": "sha512-fereAvAvxDrQDOXybk3Qu3dPbOoKoysFMWtkY3mv5BsL8//OSZVL5DCLYqgRfY5cWirgRzlC+WSrxp6Bo3eNZg==", - "dev": true, - "dependencies": { - "glob": "^7.0.5", - "minimatch": "^3.0.3", - "mkdirp": "^1.0.4", - "noms": "0.0.0", - "through2": "^2.0.1", - "untildify": "^4.0.0", - "yargs": "^16.1.0" - }, - "bin": { - "copyfiles": "copyfiles", - "copyup": "copyfiles" - } - }, - "node_modules/copyfiles/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/copyfiles/node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/copyfiles/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/copyfiles/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/copyfiles/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/copyfiles/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/copyfiles/node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/copyfiles/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/copyfiles/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/core-js": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", - "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==", - "dev": true - }, - "node_modules/core-js-compat": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz", - "integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==", - "dev": true, - "dependencies": { - "browserslist": "^4.8.5", - "semver": "7.0.0" - } - }, - "node_modules/core-js-compat/node_modules/semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "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 - }, - "node_modules/crc": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", - "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", - "dev": true, - "dependencies": { - "buffer": "^5.1.0" - } - }, - "node_modules/crc32-stream": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-3.0.1.tgz", - "integrity": "sha512-mctvpXlbzsvK+6z8kJwSJ5crm7yBwrQMTybJzMw1O4lLGJqjlDCXY2Zw7KheiA6XBEcBmfLx1D88mjRGVJtY9w==", - "dev": true, - "dependencies": { - "crc": "^3.4.4", - "readable-stream": "^3.4.0" - }, - "engines": { - "node": ">= 6.9.0" - } - }, - "node_modules/crc32-stream/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, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/create-ecdh": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", - "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", - "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "elliptic": "^6.0.0" - } - }, - "node_modules/create-ecdh/node_modules/bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - }, - "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, - "dependencies": { - "capture-stack-trace": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "node_modules/cross-env": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", - "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.1" - }, - "bin": { - "cross-env": "src/bin/cross-env.js", - "cross-env-shell": "src/bin/cross-env-shell.js" - }, - "engines": { - "node": ">=10.14", - "npm": ">=6", - "yarn": ">=1" - } - }, - "node_modules/cross-env/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==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/cross-env/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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/cross-env/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==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cross-env/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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/cross-env/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "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, - "dependencies": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "node_modules/cross-spawn-async": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/cross-spawn-async/-/cross-spawn-async-2.2.5.tgz", - "integrity": "sha1-hF/wwINKPe2dFg2sptOQkGuyiMw=", - "dev": true, - "dependencies": { - "lru-cache": "^4.0.0", - "which": "^1.2.8" - } - }, - "node_modules/crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dev": true, - "dependencies": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - }, - "engines": { - "node": "*" - } - }, - "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, - "engines": { - "node": ">=4" - } - }, - "node_modules/css-value": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/css-value/-/css-value-0.0.1.tgz", - "integrity": "sha1-Xv1sLupeof1rasV+wEJ7GEUkJOo=", - "dev": true - }, - "node_modules/currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", - "dev": true, - "dependencies": { - "array-find-index": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/custom-event": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", - "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", - "dev": true - }, - "node_modules/cyclist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", - "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", - "dev": true - }, - "node_modules/date-format": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-3.0.0.tgz", - "integrity": "sha512-eyTcpKOcamdhWJXj56DpQMo1ylSQpcGtGKXcU0Tb97+K56/CF5amAqqqNj0+KvA0iw2ynxtHWFsPDSClCxe48w==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/de-indent": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", - "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=", - "dev": true - }, - "node_modules/debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/decompress": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", - "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", - "dev": true, - "dependencies": { - "decompress-tar": "^4.0.0", - "decompress-tarbz2": "^4.0.0", - "decompress-targz": "^4.0.0", - "decompress-unzip": "^4.0.1", - "graceful-fs": "^4.1.10", - "make-dir": "^1.0.0", - "pify": "^2.3.0", - "strip-dirs": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "dev": true, - "dependencies": { - "mimic-response": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-tar": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", - "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", - "dev": true, - "dependencies": { - "file-type": "^5.2.0", - "is-stream": "^1.1.0", - "tar-stream": "^1.5.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-tar/node_modules/file-type": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-tarbz2": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", - "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", - "dev": true, - "dependencies": { - "decompress-tar": "^4.1.0", - "file-type": "^6.1.0", - "is-stream": "^1.1.0", - "seek-bzip": "^1.0.5", - "unbzip2-stream": "^1.0.9" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-tarbz2/node_modules/file-type": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", - "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-targz": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", - "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", - "dev": true, - "dependencies": { - "decompress-tar": "^4.1.1", - "file-type": "^5.2.0", - "is-stream": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-targz/node_modules/file-type": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-unzip": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", - "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", - "dev": true, - "dependencies": { - "file-type": "^3.8.0", - "get-stream": "^2.2.0", - "pify": "^2.3.0", - "yauzl": "^2.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-unzip/node_modules/file-type": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", - "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decompress-unzip/node_modules/get-stream": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", - "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", - "dev": true, - "dependencies": { - "object-assign": "^4.0.1", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decompress-unzip/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decompress/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, - "dependencies": { - "pify": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress/node_modules/make-dir/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, - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "dev": true, - "dependencies": { - "type-detect": "^4.0.0" - }, - "engines": { - "node": ">=0.12" - } - }, - "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, - "engines": { - "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/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/defer-to-connect": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.0.tgz", - "integrity": "sha512-bYL2d05vOSf1JEZNx5vSAtPuBMkX8K9EUutg7zlKvTqKXHt7RhWJFbmd7qakVuf13i+IkGmp6FwSsONOf6VYIg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "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/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/depcheck": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/depcheck/-/depcheck-0.8.3.tgz", - "integrity": "sha512-xcLTnaovCFFTts5Ge7mUUhMGHSu6eRfftvVvOjN7gXO5EFUhJfX6UQa1b08a0SIwKfzG9eKNn5mzZlXp0mZARA==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.3.1", - "@babel/traverse": "^7.2.3", - "builtin-modules": "^3.0.0", - "deprecate": "^1.0.0", - "deps-regex": "^0.1.4", - "js-yaml": "^3.4.2", - "lodash": "^4.17.11", - "minimatch": "^3.0.2", - "node-sass-tilde-importer": "^1.0.2", - "please-upgrade-node": "^3.1.1", - "require-package-name": "^2.0.1", - "resolve": "^1.10.0", - "vue-template-compiler": "^2.6.10", - "walkdir": "^0.3.2", - "yargs": "^13.2.2" - }, - "bin": { - "depcheck": "bin/depcheck.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/depcheck/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, - "engines": { - "node": ">=6" - } - }, - "node_modules/depcheck/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/depcheck/node_modules/cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "dependencies": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "node_modules/depcheck/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 - }, - "node_modules/depcheck/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, - "engines": { - "node": ">=4" - } - }, - "node_modules/depcheck/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/depcheck/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, - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/depcheck/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, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/depcheck/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, - "dependencies": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/depcheck/node_modules/yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "dependencies": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "node_modules/depcheck/node_modules/yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/deprecate": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deprecate/-/deprecate-1.1.1.tgz", - "integrity": "sha512-ZGDXefq1xknT292LnorMY5s8UVU08/WKdzDZCUT6t9JzsiMSP4uzUhgpqugffNVcT5WC6wMBiSQ+LFjlv3v7iQ==", - "dev": true - }, - "node_modules/deps-regex": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deps-regex/-/deps-regex-0.1.4.tgz", - "integrity": "sha1-UYZnt2kUYKXn4KNBvnbrfOgJAYQ=", - "dev": true - }, - "node_modules/des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/detect-node": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", - "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", - "dev": true - }, - "node_modules/devtools": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/devtools/-/devtools-6.3.3.tgz", - "integrity": "sha512-VHvJH7y2/pHtDzhXF8T9mlT5sqrUl2WSjCWhjvyohTyfMjtIu15p78lx3NowMwfo12N2/3riW9dVGeVOa6WILQ==", - "dev": true, - "dependencies": { - "@wdio/config": "6.1.14", - "@wdio/logger": "6.0.16", - "@wdio/protocols": "6.3.0", - "@wdio/utils": "6.3.0", - "chrome-launcher": "^0.13.1", - "puppeteer-core": "^5.1.0", - "ua-parser-js": "^0.7.21", - "uuid": "^8.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/devtools-protocol": { - "version": "0.0.767361", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.767361.tgz", - "integrity": "sha512-ziRTdhEVQ9jEwedaUaXZ7kl9w9TF/7A3SXQ0XuqrJB+hMS62POHZUWTbumDN2ehRTfvWqTPc2Jw4gUl/jggmHA==", - "dev": true - }, - "node_modules/di": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", - "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", - "dev": true - }, - "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/diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "node_modules/diffie-hellman/node_modules/bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - }, - "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/dom-serialize": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", - "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", - "dev": true, - "dependencies": { - "custom-event": "~1.0.0", - "ent": "~2.2.0", - "extend": "^3.0.0", - "void-elements": "^2.0.0" - } - }, - "node_modules/domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true, - "engines": { - "node": ">=0.4", - "npm": ">=1.2" - } - }, - "node_modules/dot-case": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.3.tgz", - "integrity": "sha512-7hwEmg6RiSQfm/GwPL4AAWXKy3YNNZA3oFv2Pdiey0mwkRCPZ9x6SZbkLcn8Ma5PYeVokzoD4Twv2n7LKp5WeA==", - "dev": true, - "dependencies": { - "no-case": "^3.0.3", - "tslib": "^1.10.0" - } - }, - "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, - "dependencies": { - "is-obj": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/download": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/download/-/download-7.1.0.tgz", - "integrity": "sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ==", - "dev": true, - "dependencies": { - "archive-type": "^4.0.0", - "caw": "^2.0.1", - "content-disposition": "^0.5.2", - "decompress": "^4.2.0", - "ext-name": "^5.0.0", - "file-type": "^8.1.0", - "filenamify": "^2.0.0", - "get-stream": "^3.0.0", - "got": "^8.3.1", - "make-dir": "^1.2.0", - "p-event": "^2.1.0", - "pify": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/download/node_modules/got": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", - "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", - "dev": true, - "dependencies": { - "@sindresorhus/is": "^0.7.0", - "cacheable-request": "^2.1.1", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "into-stream": "^3.1.0", - "is-retry-allowed": "^1.1.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "mimic-response": "^1.0.0", - "p-cancelable": "^0.4.0", - "p-timeout": "^2.0.1", - "pify": "^3.0.0", - "safe-buffer": "^5.1.1", - "timed-out": "^4.0.1", - "url-parse-lax": "^3.0.0", - "url-to-options": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/download/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, - "dependencies": { - "pify": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/download/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, - "engines": { - "node": ">=4" - } - }, - "node_modules/duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true - }, - "node_modules/duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "node_modules/edge-launcher": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/edge-launcher/-/edge-launcher-1.2.2.tgz", - "integrity": "sha1-60Cq+9Bnpup27/+rBke81VCbN7I=", - "dev": true - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "node_modules/electron-to-chromium": { - "version": "1.3.501", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.501.tgz", - "integrity": "sha512-tyzuKaV2POw2mtqBBzQGNBojMZzH0MRu8bT8T/50x+hWeucyG/9pkgAATy+PcM2ySNM9+8eG2VllY9c6j4i+bg==", - "dev": true - }, - "node_modules/elliptic": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", - "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", - "dev": true, - "dependencies": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - } - }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/engine.io": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.5.0.tgz", - "integrity": "sha512-21HlvPUKaitDGE4GXNtQ7PLP0Sz4aWLddMPw2VTyFz1FVZqu/kZsJUO8WNpKuE/OCL7nkfRaOui2ZCJloGznGA==", - "dev": true, - "dependencies": { - "accepts": "~1.3.4", - "base64id": "2.0.0", - "cookie": "~0.4.1", - "debug": "~4.1.0", - "engine.io-parser": "~2.2.0", - "ws": "~7.4.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/engine.io-client": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.5.0.tgz", - "integrity": "sha512-12wPRfMrugVw/DNyJk34GQ5vIVArEcVMXWugQGGuw2XxUSztFNmJggZmv8IZlLyEdnpO1QB9LkcjeWewO2vxtA==", - "dev": true, - "dependencies": { - "component-emitter": "~1.3.0", - "component-inherit": "0.0.3", - "debug": "~3.1.0", - "engine.io-parser": "~2.2.0", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parseqs": "0.0.6", - "parseuri": "0.0.6", - "ws": "~7.4.2", - "xmlhttprequest-ssl": "~1.5.4", - "yeast": "0.1.2" - } - }, - "node_modules/engine.io-client/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, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/engine.io-client/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/engine.io-client/node_modules/ws": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.2.tgz", - "integrity": "sha512-T4tewALS3+qsrpGI/8dqNMLIVdq/g/85U98HPMa6F0m6xTbvhXU6RCQLqPH3+SlomNV/LdY6RXEbBpMH6EOJnA==", - "dev": true, - "engines": { - "node": ">=8.3.0" - } - }, - "node_modules/engine.io-parser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.1.tgz", - "integrity": "sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg==", - "dev": true, - "dependencies": { - "after": "0.8.2", - "arraybuffer.slice": "~0.0.7", - "base64-arraybuffer": "0.1.4", - "blob": "0.0.5", - "has-binary2": "~1.0.2" - } - }, - "node_modules/engine.io/node_modules/ws": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.2.tgz", - "integrity": "sha512-T4tewALS3+qsrpGI/8dqNMLIVdq/g/85U98HPMa6F0m6xTbvhXU6RCQLqPH3+SlomNV/LdY6RXEbBpMH6EOJnA==", - "dev": true, - "engines": { - "node": ">=8.3.0" - } - }, - "node_modules/enhanced-resolve": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz", - "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/enhanced-resolve/node_modules/memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, - "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - }, - "engines": { - "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==", - "dev": true, - "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==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", - "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", - "dev": true - }, - "node_modules/errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", - "dev": true, - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/error-stack-parser": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-1.3.6.tgz", - "integrity": "sha1-4Oc7k+QXE40c18C3RrGkoUhUwpI=", - "dev": true, - "dependencies": { - "stackframe": "^0.3.1" - } - }, - "node_modules/es6-error": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", - "dev": true - }, - "node_modules/es6-object-assign": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", - "integrity": "sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw=", - "dev": true - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true - }, - "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, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/eslint": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.18.0.tgz", - "integrity": "sha512-fbgTiE8BfUJZuBeq2Yi7J3RB3WGUQ9PNuNbmgi6jt9Iv8qrkxfy19Ds3OpL1Pm7zg3BtTVhvcUZbIRQ0wmSjAQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "@eslint/eslintrc": "^0.3.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.2.0", - "esutils": "^2.0.2", - "file-entry-cache": "^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" - } - }, - "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-scope/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/eslint-scope/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/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" - } - }, - "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/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" - } - }, - "node_modules/eslint/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "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" - } - }, - "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/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "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==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/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" - } - }, - "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/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/eslint/node_modules/lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", - "dev": true - }, - "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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "engines": { - "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==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/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/eslint/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "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/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/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, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "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==", - "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.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", - "dev": true, - "dependencies": { - "estraverse": "^4.1.0" - }, - "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/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/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "node_modules/events": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.1.0.tgz", - "integrity": "sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg==", - "dev": true, - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "dev": true, - "dependencies": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/executable": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", - "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", - "dev": true, - "dependencies": { - "pify": "^2.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/executable/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/exit-hook": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", - "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", - "dev": true, - "dependencies": { - "homedir-polyfill": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ext-list": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", - "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", - "dev": true, - "dependencies": { - "mime-db": "^1.28.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ext-name": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", - "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", - "dev": true, - "dependencies": { - "ext-list": "^2.0.0", - "sort-keys-length": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "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 - }, - "node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extend-shallow/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "bin": { - "extract-zip": "cli.js" - }, - "engines": { - "node": ">= 10.17.0" - }, - "optionalDependencies": { - "@types/yauzl": "^2.9.1" - } - }, - "node_modules/extract-zip/node_modules/get-stream": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", - "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fast-glob/node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fast-glob/node_modules/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, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/fast-glob/node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/fast-glob/node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "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.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", - "dev": true, - "dependencies": { - "pend": "~1.2.0" - } - }, - "node_modules/figgy-pudding": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", - "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", - "dev": true - }, - "node_modules/file-entry-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.0.tgz", - "integrity": "sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/file-type": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-8.1.0.tgz", - "integrity": "sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "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", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true - }, - "node_modules/filename-reserved-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", - "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/filenamify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-2.1.0.tgz", - "integrity": "sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA==", - "dev": true, - "dependencies": { - "filename-reserved-regex": "^2.0.0", - "strip-outer": "^1.0.0", - "trim-repeated": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-parent-dir": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/find-parent-dir/-/find-parent-dir-0.3.0.tgz", - "integrity": "sha1-M8RLQpqysvBkYpnF+fcY83b/jVQ=", - "dev": true - }, - "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, - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-versions": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.2.0.tgz", - "integrity": "sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==", - "dev": true, - "dependencies": { - "semver-regex": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true, - "bin": { - "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" - } - }, - "node_modules/flatted": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.0.tgz", - "integrity": "sha512-tW+UkmtNg/jv9CSofAKvgVcO7c2URjhTdW1ZTkcAritblu8tajiYy7YisnIflEwtKssCtOxpnBRoCB7iap0/TA==", - "dev": true - }, - "node_modules/flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - } - }, - "node_modules/follow-redirects": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.1.tgz", - "integrity": "sha512-SSG5xmZh1mkPGyKzjZP8zLjltIfpW32Y5QpdNJyjcfGxK3qo3NDDkZOZSFiGn1A6SclQxY9GzEwAHQ3dmYRWpg==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/foreground-child": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", - "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/foreground-child/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==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/foreground-child/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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/foreground-child/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==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/foreground-child/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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/foreground-child/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/form-data": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.0.tgz", - "integrity": "sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "dependencies": { - "map-cache": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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, - "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, - "node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "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, - "dependencies": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - } - }, - "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 - }, - "node_modules/fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "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/gensync": { - "version": "1.0.0-beta.1", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", - "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "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, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/get-port": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", - "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/get-proxy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz", - "integrity": "sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==", - "dev": true, - "dependencies": { - "npm-conf": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/giturl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/giturl/-/giturl-1.0.1.tgz", - "integrity": "sha512-wQourBdI13n8tbjcZTDl6k+ZrCRMU6p9vfp9jknZq+zfWc8xXNztpZFM4XkPHVzHcMSUZxEMYYKZjIGkPlei6Q==", - "dev": true, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/global-agent": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-2.1.12.tgz", - "integrity": "sha512-caAljRMS/qcDo69X9BfkgrihGUgGx44Fb4QQToNQjsiWh+YlQ66uqYVAdA8Olqit+5Ng0nkz09je3ZzANMZcjg==", - "dev": true, - "dependencies": { - "boolean": "^3.0.1", - "core-js": "^3.6.5", - "es6-error": "^4.1.1", - "matcher": "^3.0.0", - "roarr": "^2.15.3", - "semver": "^7.3.2", - "serialize-error": "^7.0.1" - }, - "engines": { - "node": ">=10.0" - } - }, - "node_modules/global-agent/node_modules/core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==", - "dev": true - }, - "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, - "dependencies": { - "ini": "^1.3.4" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dev": true, - "dependencies": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", - "dev": true, - "dependencies": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/globalthis": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.1.tgz", - "integrity": "sha512-mJPRTc/P39NH/iNG4mXa9aIhNymaQikTrnspeCa2ZuJ+mH2QN/rXwtX3XwKrHqWgUQFbNZKtHM105aHzJalElw==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/got": { - "version": "11.5.1", - "resolved": "https://registry.npmjs.org/got/-/got-11.5.1.tgz", - "integrity": "sha512-reQEZcEBMTGnujmQ+Wm97mJs/OK6INtO6HmLI+xt3+9CvnRwWjXutUvb2mqr+Ao4Lu05Rx6+udx9sOQAmExMxA==", - "dev": true, - "dependencies": { - "@sindresorhus/is": "^3.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.1", - "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.0", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=10.19.0" - } - }, - "node_modules/got/node_modules/@sindresorhus/is": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-3.0.0.tgz", - "integrity": "sha512-kqA5I6Yun7PBHk8WN9BBP1c7FfN2SrD05GuVSEYPqDb4nerv7HqYfgBfMIKmT/EuejURkJKLZuLyGKGs6WEG9w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/got/node_modules/cacheable-request": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.1.tgz", - "integrity": "sha512-lt0mJ6YAnsrBErpTMWeu5kl/tg9xMAWjavYTN6VQXM1A/teBITuNcccXsCxF0tDQQJf9DfAaX5O4e0zp0KlfZw==", - "dev": true, - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/got/node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dev": true, - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/got/node_modules/get-stream": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", - "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/got/node_modules/http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "dev": true - }, - "node_modules/got/node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true - }, - "node_modules/got/node_modules/keyv": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.1.tgz", - "integrity": "sha512-xz6Jv6oNkbhrFCvCP7HQa8AaII8y8LRpoSm661NOKLr4uHuBwhX4epXrPQgF3+xdJnN4Esm5X0xwY4bOlALOtw==", - "dev": true, - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/got/node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/got/node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/got/node_modules/normalize-url": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", - "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/got/node_modules/p-cancelable": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.0.0.tgz", - "integrity": "sha512-wvPXDmbMmu2ksjkB4Z3nZWTSkJEb9lqVdMaCKpZUGJG9TMiNp9XcbG3fn9fPKjem04fJMJnXoyFPk2FmgiaiNg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/got/node_modules/responselike": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", - "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", - "dev": true, - "dependencies": { - "lowercase-keys": "^2.0.0" - } - }, - "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 - }, - "node_modules/graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", - "dev": true - }, - "node_modules/grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true - }, - "node_modules/growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true, - "engines": { - "node": ">=4.x" - } - }, - "node_modules/has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-ansi/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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-binary2": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", - "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", - "dev": true, - "dependencies": { - "isarray": "2.0.1" - } - }, - "node_modules/has-binary2/node_modules/isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", - "dev": true - }, - "node_modules/has-cors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", - "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", - "dev": true - }, - "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, - "engines": { - "node": ">=4" - } - }, - "node_modules/has-symbol-support-x": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", - "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", - "dev": true, - "engines": { - "node": "*" - } - }, - "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" - } - }, - "node_modules/has-to-string-tag-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", - "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", - "dev": true, - "dependencies": { - "has-symbol-support-x": "^1.4.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hash-base/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, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/hash-base/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 - }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "bin": { - "he": "bin/he" - } - }, - "node_modules/header-case": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/header-case/-/header-case-2.0.3.tgz", - "integrity": "sha512-LChe/V32mnUQnTwTxd3aAlNMk8ia9tjCDb/LjYtoMrdAPApxLB+azejUk5ERZIZdIqvinwv6BAUuFXH/tQPdZA==", - "dev": true, - "dependencies": { - "capital-case": "^1.0.3", - "tslib": "^1.10.0" - } - }, - "node_modules/highlight-es": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/highlight-es/-/highlight-es-1.0.3.tgz", - "integrity": "sha512-s/SIX6yp/5S1p8aC/NRDC1fwEb+myGIfp8/TzZz0rtAv8fzsdX7vGl3Q1TrXCsczFq8DI3CBFBCySPClfBSdbg==", - "dev": true, - "dependencies": { - "chalk": "^2.4.0", - "is-es2016-keyword": "^1.0.0", - "js-tokens": "^3.0.0" - } - }, - "node_modules/highlight-es/node_modules/js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dev": true, - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "dev": true, - "dependencies": { - "parse-passwd": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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 - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "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 - }, - "node_modules/http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "dev": true, - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/http-errors/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dev": true, - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http2-wrapper": { - "version": "1.0.0-beta.5.2", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.0-beta.5.2.tgz", - "integrity": "sha512-xYz9goEyBnC8XwXDTuC/MZ6t+MrKVQZOk4s7+PaDkwIsQd8IwqvM+0M6bA/2lvG8GHXcPdf+MejTUeO2LCPCeQ==", - "dev": true, - "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" - }, - "engines": { - "node": ">=10.19.0" - } - }, - "node_modules/https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", - "dev": true - }, - "node_modules/https-proxy-agent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", - "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", - "dev": true, - "dependencies": { - "agent-base": "5", - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", - "dev": true - }, - "node_modules/iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", - "dev": true - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/import-lazy": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-3.1.0.tgz", - "integrity": "sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "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": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "dev": true, - "dependencies": { - "repeating": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", - "dev": true - }, - "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 - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "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 - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/into-stream": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", - "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=", - "dev": true, - "dependencies": { - "from2": "^2.1.1", - "p-is-promise": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dev": true, - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "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, - "dependencies": { - "ci-info": "^1.5.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-docker": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.0.0.tgz", - "integrity": "sha512-pJEdRugimx4fBMra5z2/5iRdZ63OhYV0vr0Dwm5+xtW4D1FvRkB8hamMIhnWfyJeDdyr/aa7BDyNbtG38VxgoQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-es2016-keyword": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-es2016-keyword/-/is-es2016-keyword-1.0.0.tgz", - "integrity": "sha1-9uVOEQxeT40mXmnS7Q6vjPX0dxg=", - "dev": true - }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-finite": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", - "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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/is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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, - "dependencies": { - "global-dirs": "^0.1.0", - "is-path-inside": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/is-natural-number": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", - "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=", - "dev": true - }, - "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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.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-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", - "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=", - "dev": true - }, - "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, - "dependencies": { - "path-is-inside": "^1.0.1" - }, - "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", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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, - "engines": { - "node": ">=0.10.0" - } - }, - "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, - "engines": { - "node": ">=0.10.0" - } - }, - "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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "node_modules/isbinaryfile": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.6.tgz", - "integrity": "sha512-ORrEy+SNVqUhrCaal4hA4fBzhggQQ+BaLntyPOdoEiwlKZW9BZiJXjg3RMiruE4tPEI3pyVPpySHQF/dKWperg==", - "dev": true, - "engines": { - "node": ">= 8.0.0" - } - }, - "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 - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isomorphic-fetch": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz", - "integrity": "sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==", - "dev": true, - "dependencies": { - "node-fetch": "^2.6.1", - "whatwg-fetch": "^3.4.1" - } - }, - "node_modules/isomorphic-fetch/node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dev": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/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/istanbul-lib-report/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/istanbul-lib-report/node_modules/supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", - "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "rimraf": "^2.6.3", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/istanbul-lib-coverage": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", - "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isurl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", - "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", - "dev": true, - "dependencies": { - "has-to-string-tag-x": "^1.2.0", - "is-object": "^1.0.1" - }, - "engines": { - "node": ">= 4" - } - }, - "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": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", - "dev": true - }, - "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 - }, - "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", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "node_modules/json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/karma": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/karma/-/karma-5.2.3.tgz", - "integrity": "sha512-tHdyFADhVVPBorIKCX8A37iLHxc6RBRphkSoQ+MLKdAtFn1k97tD8WUGi1KlEtDZKL3hui0qhsY9HXUfSNDYPQ==", - "dev": true, - "dependencies": { - "body-parser": "^1.19.0", - "braces": "^3.0.2", - "chokidar": "^3.4.2", - "colors": "^1.4.0", - "connect": "^3.7.0", - "di": "^0.0.1", - "dom-serialize": "^2.2.1", - "glob": "^7.1.6", - "graceful-fs": "^4.2.4", - "http-proxy": "^1.18.1", - "isbinaryfile": "^4.0.6", - "lodash": "^4.17.19", - "log4js": "^6.2.1", - "mime": "^2.4.5", - "minimatch": "^3.0.4", - "qjobs": "^1.2.0", - "range-parser": "^1.2.1", - "rimraf": "^3.0.2", - "socket.io": "^2.3.0", - "source-map": "^0.6.1", - "tmp": "0.2.1", - "ua-parser-js": "0.7.22", - "yargs": "^15.3.1" - }, - "bin": { - "karma": "bin/karma" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/karma-chrome-launcher": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.0.tgz", - "integrity": "sha512-3dPs/n7vgz1rxxtynpzZTvb9y/GIaW8xjAwcIGttLbycqoFtI7yo1NGnQi6oFTherRE+GIhCAHZC4vEqWGhNvg==", - "dev": true, - "dependencies": { - "which": "^1.2.1" - } - }, - "node_modules/karma-cli": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/karma-cli/-/karma-cli-2.0.0.tgz", - "integrity": "sha512-1Kb28UILg1ZsfqQmeELbPzuEb5C6GZJfVIk0qOr8LNYQuYWmAaqP16WpbpKEjhejDrDYyYOwwJXSZO6u7q5Pvw==", - "dev": true, - "dependencies": { - "resolve": "^1.3.3" - }, - "bin": { - "karma": "bin/karma" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/karma-coverage-istanbul-reporter": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-3.0.3.tgz", - "integrity": "sha512-wE4VFhG/QZv2Y4CdAYWDbMmcAHeS926ZIji4z+FkB2aF/EposRb6DP6G5ncT/wXhqUfAb/d7kZrNKPonbvsATw==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^3.0.6", - "istanbul-reports": "^3.0.2", - "minimatch": "^3.0.4" - } - }, - "node_modules/karma-edge-launcher": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/karma-edge-launcher/-/karma-edge-launcher-0.4.2.tgz", - "integrity": "sha512-YAJZb1fmRcxNhMIWYsjLuxwODBjh2cSHgTW/jkVmdpGguJjLbs9ZgIK/tEJsMQcBLUkO+yO4LBbqYxqgGW2HIw==", - "dev": true, - "dependencies": { - "edge-launcher": "1.2.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/karma-firefox-launcher": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/karma-firefox-launcher/-/karma-firefox-launcher-1.3.0.tgz", - "integrity": "sha512-Fi7xPhwrRgr+94BnHX0F5dCl1miIW4RHnzjIGxF8GaIEp7rNqX7LSi7ok63VXs3PS/5MQaQMhGxw+bvD+pibBQ==", - "dev": true, - "dependencies": { - "is-wsl": "^2.1.0" - } - }, - "node_modules/karma-ie-launcher": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/karma-ie-launcher/-/karma-ie-launcher-1.0.0.tgz", - "integrity": "sha1-SXmGhCxJAZA0bNifVJTKmDDG1Zw=", - "dev": true, - "dependencies": { - "lodash": "^4.6.1" - } - }, - "node_modules/karma-mocha": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/karma-mocha/-/karma-mocha-2.0.1.tgz", - "integrity": "sha512-Tzd5HBjm8his2OA4bouAsATYEpZrp9vC7z5E5j4C5Of5Rrs1jY67RAwXNcVmd/Bnk1wgvQRou0zGVLey44G4tQ==", - "dev": true, - "dependencies": { - "minimist": "^1.2.3" - } - }, - "node_modules/karma-safari-launcher": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/karma-safari-launcher/-/karma-safari-launcher-1.0.0.tgz", - "integrity": "sha1-lpgqLMR9BmquccVTursoMZEVos4=", - "dev": true - }, - "node_modules/karma-sauce-launcher": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/karma-sauce-launcher/-/karma-sauce-launcher-4.1.5.tgz", - "integrity": "sha512-X6/1IaUTOhbSuw+Y8ea8/1fAHsIbitDosJVnxqC0ZxIlDQMM4/U0WbETtCIbwUDoa89jwM3alfDs5RTRUW5mJw==", - "dev": true, - "dependencies": { - "global-agent": "^2.1.8", - "saucelabs": "^4.3.0", - "webdriverio": "^6.1.9" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/karma-verbose-reporter": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/karma-verbose-reporter/-/karma-verbose-reporter-0.0.6.tgz", - "integrity": "sha1-WQkFJFHGB/Aqx3x2N5Gi/hJRJgw=", - "dev": true, - "dependencies": { - "colors": ">=1.0" - } - }, - "node_modules/karma-webpack": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/karma-webpack/-/karma-webpack-4.0.2.tgz", - "integrity": "sha512-970/okAsdUOmiMOCY8sb17A2I8neS25Ad9uhyK3GHgmRSIFJbDcNEFE8dqqUhNe9OHiCC9k3DMrSmtd/0ymP1A==", - "dev": true, - "dependencies": { - "clone-deep": "^4.0.1", - "loader-utils": "^1.1.0", - "neo-async": "^2.6.1", - "schema-utils": "^1.0.0", - "source-map": "^0.7.3", - "webpack-dev-middleware": "^3.7.0" - }, - "engines": { - "node": ">= 8.9.0" - } - }, - "node_modules/karma-webpack/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/karma-webpack/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/karma-webpack/node_modules/schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "dependencies": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/karma-webpack/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/karma/node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/karma/node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/karma/node_modules/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, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/karma/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" - } - }, - "node_modules/karma/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/karma/node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "dependencies": { - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=8.17.0" - } - }, - "node_modules/karma/node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/karma/node_modules/ua-parser-js": { - "version": "0.7.22", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.22.tgz", - "integrity": "sha512-YUxzMjJ5T71w6a8WWVcMGM6YWOTX27rCoIQgLXiWaxqXSx9D7DNjiGWn1aJIRSQ5qr0xuhra77bSIh6voR/46Q==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/keyv": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", - "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", - "dev": true, - "dependencies": { - "json-buffer": "3.0.0" - } - }, - "node_modules/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, - "engines": { - "node": ">=0.10.0" - } - }, - "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, - "dependencies": { - "package-json": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", - "dev": true, - "dependencies": { - "readable-stream": "^2.0.5" - }, - "engines": { - "node": ">= 0.6.3" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/levenary": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.1.tgz", - "integrity": "sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==", - "dev": true, - "dependencies": { - "leven": "^3.1.0" - }, - "engines": { - "node": ">= 6" - } - }, - "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/lighthouse-logger": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.2.0.tgz", - "integrity": "sha512-wzUvdIeJZhRsG6gpZfmSCfysaxNEr43i+QT+Hie94wvHDKFLi4n7C2GqZ4sTC+PH5b5iktmXJvU87rWvhP3lHw==", - "dev": true, - "dependencies": { - "debug": "^2.6.8", - "marky": "^1.2.0" - } - }, - "node_modules/lighthouse-logger/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/lighthouse-logger/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/load-json-file/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/load-yaml-file": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/load-yaml-file/-/load-yaml-file-0.1.1.tgz", - "integrity": "sha512-G910TofXH7u0NfslAzqv6c9pHpvBzObNOo2hMG0/KUDpdHeFY0wE/fTBMExt0Gb12gg5bXS7Hj6pb0e+xbBXLA==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.5", - "js-yaml": "^3.13.0", - "pify": "^2.3.0", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/load-yaml-file/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/load-yaml-file/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/load-yaml-file/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/load-yaml-file/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", - "dev": true, - "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" - } - }, - "node_modules/loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "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, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/lodash": { - "version": "4.17.19", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", - "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", - "dev": true - }, - "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 - }, - "node_modules/lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", - "dev": true - }, - "node_modules/lodash.difference": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", - "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=", - "dev": true - }, - "node_modules/lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", - "dev": true - }, - "node_modules/lodash.isobject": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-3.0.2.tgz", - "integrity": "sha1-PI+41bW/S/kK4G4U8qUwpO2TXh0=", - "dev": true - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", - "dev": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/lodash.toarray": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz", - "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=", - "dev": true - }, - "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 - }, - "node_modules/lodash.zip": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.zip/-/lodash.zip-4.2.0.tgz", - "integrity": "sha1-7GZi5IlkCO1KtsVCo5kLcswIACA=", - "dev": true - }, - "node_modules/log-symbols": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", - "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/log-symbols/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" - } - }, - "node_modules/log-symbols/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" - } - }, - "node_modules/log-symbols/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-symbols/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-symbols/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/log-symbols/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/log4js": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.3.0.tgz", - "integrity": "sha512-Mc8jNuSFImQUIateBFwdOQcmC6Q5maU0VVvdC2R6XMb66/VnT+7WS4D/0EeNMZu1YODmJe5NIn2XftCzEocUgw==", - "dev": true, - "dependencies": { - "date-format": "^3.0.0", - "debug": "^4.1.1", - "flatted": "^2.0.1", - "rfdc": "^1.1.4", - "streamroller": "^2.2.4" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/log4js/node_modules/flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", - "dev": true - }, - "node_modules/loglevel": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.8.tgz", - "integrity": "sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA==", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/loglevel-plugin-prefix": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz", - "integrity": "sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==", - "dev": true - }, - "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": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", - "dev": true, - "dependencies": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lower-case": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.1.tgz", - "integrity": "sha512-LiWgfDLLb1dwbFQZsSglpRj+1ctGnayXz3Uv0/WO8n558JycT5fg6zkNcnW0G68Nn0aEldTFeEfmjCfmqry/rQ==", - "dev": true, - "dependencies": { - "tslib": "^1.10.0" - } - }, - "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, - "engines": { - "node": ">=0.10.0" - } - }, - "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, - "dependencies": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/make-dir/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/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/marky": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.1.tgz", - "integrity": "sha512-md9k+Gxa3qLH6sUKpeC2CNkJK/Ld+bEz5X96nYwloqphQE0CKCVEKco/6jxEZixinqNdz5RFi/KaCyfbMDMAXQ==", - "dev": true - }, - "node_modules/matcher": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", - "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/matcher/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "dev": true, - "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "node_modules/meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "dev": true, - "dependencies": { - "camelcase-keys": "^2.0.0", - "decamelize": "^1.1.2", - "loud-rejection": "^1.0.0", - "map-obj": "^1.0.1", - "minimist": "^1.1.3", - "normalize-package-data": "^2.3.4", - "object-assign": "^4.0.1", - "read-pkg-up": "^1.0.1", - "redent": "^1.0.0", - "trim-newlines": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/merge-source-map": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", - "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", - "dev": true, - "dependencies": { - "source-map": "^0.6.1" - } - }, - "node_modules/merge-source-map/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "dependencies": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "bin": { - "miller-rabin": "bin/miller-rabin" - } - }, - "node_modules/miller-rabin/node_modules/bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - }, - "node_modules/mime": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", - "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", - "dev": true, - "dependencies": { - "mime-db": "1.44.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "dev": true - }, - "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, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "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 - }, - "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, - "dependencies": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mixin-deep/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true - }, - "node_modules/mocha": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.2.1.tgz", - "integrity": "sha512-cuLBVfyFfFqbNR0uUKbDGXKGk+UDFe6aR4os78XIrMQpZl/nv7JYHcvP5MFIAb374b2zFXsdgEGwmzMtP0Xg8w==", - "dev": true, - "dependencies": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.4.3", - "debug": "4.2.0", - "diff": "4.0.2", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.1.6", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "3.14.0", - "log-symbols": "4.0.0", - "minimatch": "3.0.4", - "ms": "2.1.2", - "nanoid": "3.1.12", - "serialize-javascript": "5.0.1", - "strip-json-comments": "3.1.1", - "supports-color": "7.2.0", - "which": "2.0.2", - "wide-align": "1.1.3", - "workerpool": "6.0.2", - "yargs": "13.3.2", - "yargs-parser": "13.1.2", - "yargs-unparser": "2.0.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha" - }, - "engines": { - "node": ">= 10.12.0" - } - }, - "node_modules/mocha/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==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/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, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/mocha/node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/mocha/node_modules/chokidar": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz", - "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==", - "dev": true, - "dependencies": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.1.2" - } - }, - "node_modules/mocha/node_modules/cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "dependencies": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "node_modules/mocha/node_modules/debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/mocha/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 - }, - "node_modules/mocha/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/mocha/node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/mocha/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mocha/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/mocha/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, - "engines": { - "node": ">=4" - } - }, - "node_modules/mocha/node_modules/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, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/mocha/node_modules/js-yaml": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", - "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/mocha/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mocha/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mocha/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mocha/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/mocha/node_modules/readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/mocha/node_modules/serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/mocha/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, - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/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, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/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/mocha/node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/mocha/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/mocha/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, - "dependencies": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/node_modules/yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "dependencies": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "node_modules/mocha/node_modules/yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "node_modules/mocha/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, - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/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, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/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, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/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, - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/node_modules/yargs/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, - "engines": { - "node": ">=4" - } - }, - "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, - "dependencies": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/nan": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", - "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", - "dev": true, - "optional": true - }, - "node_modules/nanoid": { - "version": "3.1.12", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.12.tgz", - "integrity": "sha512-1qstj9z5+x491jfiC4Nelk+f8XBad7LN20PmyWINJEMRSf3wcAjAWysw1qaA8z6NSKe2sjq1hRSDpBH5paCb6A==", - "dev": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || >=13.7" - } - }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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/negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node_modules/no-case": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.3.tgz", - "integrity": "sha512-ehY/mVQCf9BL0gKfsJBvFJen+1V//U+0HQMPrWct40ixE4jnv0bfvxDbWtAHL9EcaPEOJHVVYKoQn1TlZUB8Tw==", - "dev": true, - "dependencies": { - "lower-case": "^2.0.1", - "tslib": "^1.10.0" - } - }, - "node_modules/node-abort-controller": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.0.1.tgz", - "integrity": "sha512-/ujIVxthRs+7q6hsdjHMaj8hRG9NuWmwrz+JdRwZ14jdFoKSkm+vDsCbF9PLpnSqjaWQJuTmVtcWHNLr+vrOFw==", - "dev": true - }, - "node_modules/node-emoji": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz", - "integrity": "sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==", - "dev": true, - "dependencies": { - "lodash.toarray": "^4.4.0" - } - }, - "node_modules/node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "dev": true, - "dependencies": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - } - }, - "node_modules/node-libs-browser/node_modules/buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dev": true, - "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "node_modules/node-libs-browser/node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - }, - "node_modules/node-releases": { - "version": "1.1.59", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.59.tgz", - "integrity": "sha512-H3JrdUczbdiwxN5FuJPyCHnGHIFqQ0wWxo+9j1kAXAzqNMAHlo+4I/sYYxpyK0irQ73HgdiyzD32oqQDcU2Osw==", - "dev": true - }, - "node_modules/node-sass-tilde-importer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/node-sass-tilde-importer/-/node-sass-tilde-importer-1.0.2.tgz", - "integrity": "sha512-Swcmr38Y7uB78itQeBm3mThjxBy9/Ah/ykPIaURY/L6Nec9AyRoL/jJ7ECfMR+oZeCTVQNxVMu/aHU+TLRVbdg==", - "dev": true, - "dependencies": { - "find-parent-dir": "^0.3.0" - } - }, - "node_modules/noms": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/noms/-/noms-0.0.0.tgz", - "integrity": "sha512-lNDU9VJaOPxUmXcLb+HQFeUgQQPtMI24Gt6hgfuMHRJgMRHMF/qZ4HJD3GDru4sSw9IQl2jPjAYnQrdIeLbwow==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "~1.0.31" - } - }, - "node_modules/noms/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "dev": true - }, - "node_modules/noms/node_modules/readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/noms/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", - "dev": true - }, - "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, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/normalize-package-data/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/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", - "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", - "dev": true, - "dependencies": { - "prepend-http": "^2.0.0", - "query-string": "^5.0.1", - "sort-keys": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/normalize-url/node_modules/sort-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", - "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", - "dev": true, - "dependencies": { - "is-plain-obj": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/npm-check": { - "version": "5.9.2", - "resolved": "https://registry.npmjs.org/npm-check/-/npm-check-5.9.2.tgz", - "integrity": "sha512-YlTZGP1A8+Rad5wldGil9STYxgZpZl18X6GZI03f4Ch6qTI1TLHIYM0ISco19qgg8M3UHfooEqMfYOpOkF3AeA==", - "dev": true, - "dependencies": { - "babel-runtime": "^6.6.1", - "callsite-record": "^3.0.0", - "chalk": "^1.1.3", - "co": "^4.6.0", - "depcheck": "0.8.3", - "execa": "^0.2.2", - "giturl": "^1.0.0", - "global-modules": "^1.0.0", - "globby": "^4.0.0", - "inquirer": "^0.12.0", - "is-ci": "^1.0.8", - "lodash": "^4.17.15", - "meow": "^3.7.0", - "minimatch": "^3.0.2", - "node-emoji": "^1.0.3", - "ora": "^0.2.1", - "package-json": "^4.0.1", - "path-exists": "^2.1.0", - "pkg-dir": "^1.0.0", - "preferred-pm": "^1.0.1", - "semver": "^5.0.1", - "semver-diff": "^2.0.0", - "text-table": "^0.2.0", - "throat": "^2.0.2", - "update-notifier": "^2.1.0", - "xtend": "^4.0.1" - }, - "bin": { - "npm-check": "bin/cli.js" - }, - "engines": { - "node": ">=0.11.0" - } - }, - "node_modules/npm-check/node_modules/ansi-escapes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", - "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-check/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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-check/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-check/node_modules/array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "dependencies": { - "array-uniq": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-check/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-check/node_modules/cli-cursor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", - "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", - "dev": true, - "dependencies": { - "restore-cursor": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-check/node_modules/cli-width": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", - "dev": true - }, - "node_modules/npm-check/node_modules/execa": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.2.2.tgz", - "integrity": "sha1-4urUcsLDGq1vc/GslW7vReEjIMs=", - "dev": true, - "dependencies": { - "cross-spawn-async": "^2.1.1", - "npm-run-path": "^1.0.0", - "object-assign": "^4.0.1", - "path-key": "^1.0.0", - "strip-eof": "^1.0.0" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/npm-check/node_modules/figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-check/node_modules/find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "dependencies": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-check/node_modules/glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", - "dev": true, - "dependencies": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/npm-check/node_modules/globby": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-4.1.0.tgz", - "integrity": "sha1-CA9UVJ7BuCpsYOYx/ILhIR2+lfg=", - "dev": true, - "dependencies": { - "array-union": "^1.0.1", - "arrify": "^1.0.0", - "glob": "^6.0.1", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-check/node_modules/inquirer": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", - "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=", - "dev": true, - "dependencies": { - "ansi-escapes": "^1.1.0", - "ansi-regex": "^2.0.0", - "chalk": "^1.0.0", - "cli-cursor": "^1.0.1", - "cli-width": "^2.0.0", - "figures": "^1.3.5", - "lodash": "^4.3.0", - "readline2": "^1.0.1", - "run-async": "^0.1.0", - "rx-lite": "^3.1.2", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.0", - "through": "^2.3.6" - } - }, - "node_modules/npm-check/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, - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-check/node_modules/npm-run-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-1.0.0.tgz", - "integrity": "sha1-9cMr9ZX+ga6Sfa7FLoL4sACsPI8=", - "dev": true, - "dependencies": { - "path-key": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-check/node_modules/onetime": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-check/node_modules/path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "dependencies": { - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-check/node_modules/path-key": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-1.0.0.tgz", - "integrity": "sha1-XVPVeAGWRsDWiADbThRua9wqx68=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-check/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-check/node_modules/pkg-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", - "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", - "dev": true, - "dependencies": { - "find-up": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-check/node_modules/restore-cursor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", - "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", - "dev": true, - "dependencies": { - "exit-hook": "^1.0.0", - "onetime": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-check/node_modules/run-async": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", - "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", - "dev": true, - "dependencies": { - "once": "^1.3.0" - } - }, - "node_modules/npm-check/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/npm-check/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, - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-check/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, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-check/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/npm-conf": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", - "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", - "dev": true, - "dependencies": { - "config-chain": "^1.1.11", - "pify": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/npm-conf/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, - "engines": { - "node": ">=4" - } - }, - "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, - "dependencies": { - "path-key": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "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, - "engines": { - "node": ">=0.10.0" - } - }, - "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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "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/ora": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/ora/-/ora-0.2.3.tgz", - "integrity": "sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q=", - "dev": true, - "dependencies": { - "chalk": "^1.1.1", - "cli-cursor": "^1.0.2", - "cli-spinners": "^0.1.2", - "object-assign": "^4.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ora/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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ora/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ora/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ora/node_modules/cli-cursor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", - "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", - "dev": true, - "dependencies": { - "restore-cursor": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ora/node_modules/onetime": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ora/node_modules/restore-cursor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", - "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", - "dev": true, - "dependencies": { - "exit-hook": "^1.0.0", - "onetime": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ora/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, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ora/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", - "dev": true - }, - "node_modules/os-filter-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-2.0.0.tgz", - "integrity": "sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg==", - "dev": true, - "dependencies": { - "arch": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-cancelable": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", - "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-event": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-2.3.1.tgz", - "integrity": "sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==", - "dev": true, - "dependencies": { - "p-timeout": "^2.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "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, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-is-promise": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", - "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "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, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "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, - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/p-timeout": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", - "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", - "dev": true, - "dependencies": { - "p-finally": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "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, - "engines": { - "node": ">=6" - } - }, - "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, - "dependencies": { - "got": "^6.7.1", - "registry-auth-token": "^3.0.1", - "registry-url": "^3.0.3", - "semver": "^5.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/package-json/node_modules/got": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", - "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", - "dev": true, - "dependencies": { - "create-error-class": "^3.0.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-redirect": "^1.0.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "lowercase-keys": "^1.0.0", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "unzip-response": "^2.0.1", - "url-parse-lax": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/package-json/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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/package-json/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/package-json/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, - "dependencies": { - "prepend-http": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, - "node_modules/parallel-transform": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", - "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", - "dev": true, - "dependencies": { - "cyclist": "^1.0.1", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - } - }, - "node_modules/param-case": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.3.tgz", - "integrity": "sha512-VWBVyimc1+QrzappRs7waeN2YmoZFCGXWASRYX1/rGHtXqEcrGEIDm+jqIwFa2fRXNgQEwrxaYuIrX0WcAguTA==", - "dev": true, - "dependencies": { - "dot-case": "^3.0.3", - "tslib": "^1.10.0" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-asn1": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz", - "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==", - "dev": true, - "dependencies": { - "asn1.js": "^4.0.0", - "browserify-aes": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "dependencies": { - "error-ex": "^1.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/parseqs": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", - "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==", - "dev": true - }, - "node_modules/parseuri": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", - "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==", - "dev": true - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/pascal-case": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.1.tgz", - "integrity": "sha512-XIeHKqIrsquVTQL2crjq3NfJUxmdLasn3TYOU0VBM+UX2a6ztAWBlJQBePLGY7VHW8+2dRadeIPK5+KImwTxQA==", - "dev": true, - "dependencies": { - "no-case": "^3.0.3", - "tslib": "^1.10.0" - } - }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", - "dev": true - }, - "node_modules/path-case": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/path-case/-/path-case-3.0.3.tgz", - "integrity": "sha512-UMFU6UETFpCNWbIWNczshPrnK/7JAXBP2NYw80ojElbQ2+JYxdqWDBkvvqM93u4u6oLmuJ/tPOf2tM8KtXv4eg==", - "dev": true, - "dependencies": { - "dot-case": "^3.0.3", - "tslib": "^1.10.0" - } - }, - "node_modules/path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true, - "optional": true - }, - "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, - "engines": { - "node": ">=4" - } - }, - "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, - "engines": { - "node": ">=0.10.0" - } - }, - "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 - }, - "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, - "engines": { - "node": ">=4" - } - }, - "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 - }, - "node_modules/pathval": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", - "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/pbkdf2": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", - "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", - "dev": true, - "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "dependencies": { - "pinkie": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "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/posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/preferred-pm": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/preferred-pm/-/preferred-pm-1.0.1.tgz", - "integrity": "sha512-9Uxgin5Xnsl67DBvlNFsmDIlBuG9/XKK2cVBTj//7/7wW6ZY+IC9/GlLqxyHABpoasAsJ1MARFOdYPxMUtndxA==", - "dev": true, - "dependencies": { - "path-exists": "^3.0.0", - "which-pm": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "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/prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "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/promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", - "dev": true - }, - "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 - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true - }, - "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 - }, - "node_modules/pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, - "node_modules/public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/public-encrypt/node_modules/bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - }, - "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, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, - "dependencies": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - } - }, - "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, - "dependencies": { - "end-of-stream": "^1.1.0", - "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/puppeteer-core": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-5.2.0.tgz", - "integrity": "sha512-+gG1mW4ve7e4f1H18KWyEdbSc5Sb9+zxGBlb6CCclCf5rDsuPhYubTfOWJZB4L759D4XDtf04GOp+lmTmd61Nw==", - "dev": true, - "dependencies": { - "debug": "^4.1.0", - "devtools-protocol": "0.0.767361", - "extract-zip": "^2.0.0", - "https-proxy-agent": "^4.0.0", - "mime": "^2.0.3", - "pkg-dir": "^4.2.0", - "progress": "^2.0.1", - "proxy-from-env": "^1.0.0", - "rimraf": "^3.0.2", - "tar-fs": "^2.0.0", - "unbzip2-stream": "^1.3.3", - "ws": "^7.2.3" - }, - "engines": { - "node": ">=10.18.1" - } - }, - "node_modules/puppeteer-core/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/puppeteer-core/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/puppeteer-core/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/puppeteer-core/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/puppeteer-core/node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/puppeteer-core/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" - } - }, - "node_modules/qjobs": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", - "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", - "dev": true, - "engines": { - "node": ">=0.9" - } - }, - "node_modules/qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/query-string": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", - "dev": true, - "dependencies": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true, - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", - "dev": true, - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, - "dependencies": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", - "dev": true, - "dependencies": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "dependencies": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "dependencies": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read-pkg-up/node_modules/find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "dependencies": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read-pkg-up/node_modules/path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "dependencies": { - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read-pkg/node_modules/path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read-pkg/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/readline2": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", - "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=", - "dev": true, - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "mute-stream": "0.0.5" - } - }, - "node_modules/readline2/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, - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/readline2/node_modules/mute-stream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", - "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=", - "dev": true - }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true, - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", - "dev": true, - "dependencies": { - "indent-string": "^2.1.0", - "strip-indent": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regenerate": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz", - "integrity": "sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A==", - "dev": true - }, - "node_modules/regenerate-unicode-properties": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", - "dev": true, - "dependencies": { - "regenerate": "^1.4.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.5", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", - "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==", - "dev": true - }, - "node_modules/regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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" - } - }, - "node_modules/regexpu-core": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz", - "integrity": "sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==", - "dev": true, - "dependencies": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.2.0", - "regjsgen": "^0.5.1", - "regjsparser": "^0.6.4", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "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, - "dependencies": { - "rc": "^1.1.6", - "safe-buffer": "^5.0.1" - } - }, - "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, - "dependencies": { - "rc": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regjsgen": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", - "dev": true - }, - "node_modules/regjsparser": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", - "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", - "dev": true, - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true, - "optional": true - }, - "node_modules/repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "dependencies": { - "is-finite": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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, - "engines": { - "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/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 - }, - "node_modules/require-package-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/require-package-name/-/require-package-name-2.0.1.tgz", - "integrity": "sha1-wR6XJ2tluOKSP3Xav1+y7ww4Qbk=", - "dev": true - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true - }, - "node_modules/resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "dev": true, - "dependencies": { - "path-parse": "^1.0.6" - } - }, - "node_modules/resolve-alpn": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.0.0.tgz", - "integrity": "sha512-rTuiIEqFmGxne4IovivKSDzld2lWW9QCjqv80SYjPgf+gS35eaCAjaP54CCwGAwBtnCsvNLYtqxe1Nw+i6JEmA==", - "dev": true - }, - "node_modules/resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", - "dev": true, - "dependencies": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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, - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "node_modules/responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", - "dev": true, - "dependencies": { - "lowercase-keys": "^1.0.0" - } - }, - "node_modules/resq": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/resq/-/resq-1.7.1.tgz", - "integrity": "sha512-09u9Q5SAuJfAW5UoVAmvRtLvCOMaKP+djiixTXsZvPaojGKhuvc0Nfvp84U1rIfopJWEOXi5ywpCFwCk7mj8Xw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^2.0.1" - } - }, - "node_modules/resq/node_modules/fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rfdc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.2.0.tgz", - "integrity": "sha512-ijLyszTMmUrXvjSooucVQwimGUk84eRcmCuLV8Xghe3UO85mjUtRAHRyoMM6XtyqbECaXuBWx18La3523sXINA==", - "dev": true - }, - "node_modules/rgb2hex": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/rgb2hex/-/rgb2hex-0.2.0.tgz", - "integrity": "sha512-cHdNTwmTMPu/TpP1bJfdApd6MbD+Kzi4GNnM6h35mdFChhQPSi9cAI8J7DMn5kQDKX8NuBaQXAyo360Oa7tOEA==", - "dev": true - }, - "node_modules/rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "node_modules/roarr": { - "version": "2.15.3", - "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.3.tgz", - "integrity": "sha512-AEjYvmAhlyxOeB9OqPUzQCo3kuAkNfuDk/HqWbZdFsqDFpapkTjiw+p4svNEoRLvuqNTxqfL+s+gtD4eDgZ+CA==", - "dev": true, - "dependencies": { - "boolean": "^3.0.0", - "detect-node": "^2.0.4", - "globalthis": "^1.0.1", - "json-stringify-safe": "^5.0.1", - "semver-compare": "^1.0.0", - "sprintf-js": "^1.1.2" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/roarr/node_modules/sprintf-js": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", - "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", - "dev": true - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "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, - "dependencies": { - "aproba": "^1.1.1" - } - }, - "node_modules/rx-lite": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", - "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=", - "dev": true - }, - "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 - }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "dependencies": { - "ret": "~0.1.10" - } - }, - "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 - }, - "node_modules/saucelabs": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-4.4.3.tgz", - "integrity": "sha512-CA+p+P4a8yNIXerJ2HPFNkkmkblENL5CKWjjk0OqNfHVDAxfDoq6CJKeJByBTNOu90OtqA2sWAji9PsH/XoBEg==", - "dev": true, - "dependencies": { - "bin-wrapper": "^4.1.0", - "change-case": "^4.1.1", - "form-data": "^3.0.0", - "got": "^11.1.4", - "hash.js": "^1.1.7", - "tunnel": "0.0.6", - "yargs": "^15.3.1" - }, - "bin": { - "sl": "bin/sl" - } - }, - "node_modules/schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - }, - "engines": { - "node": ">= 8.9.0" - } - }, - "node_modules/seek-bzip": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz", - "integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=", - "dev": true, - "dependencies": { - "commander": "~2.8.1" - }, - "bin": { - "seek-bunzip": "bin/seek-bunzip", - "seek-table": "bin/seek-bzip-table" - } - }, - "node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "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": "2.1.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", - "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", - "dev": true, - "dependencies": { - "semver": "^5.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/semver-diff/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/semver-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz", - "integrity": "sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/semver-truncate": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-1.1.2.tgz", - "integrity": "sha1-V/Qd5pcHpicJp+AQS6IRcQnqR+g=", - "dev": true, - "dependencies": { - "semver": "^5.3.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/semver-truncate/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/semver/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/sentence-case": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-3.0.3.tgz", - "integrity": "sha512-ZPr4dgTcNkEfcGOMFQyDdJrTU9uQO1nb1cjf+nuzb6FxgMDgKddZOM29qEsB7jvsZSMruLRcL2KfM4ypKpa0LA==", - "dev": true, - "dependencies": { - "no-case": "^3.0.3", - "tslib": "^1.10.0", - "upper-case-first": "^2.0.1" - } - }, - "node_modules/serialize-error": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", - "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", - "dev": true, - "dependencies": { - "type-fest": "^0.13.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/serialize-javascript": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-3.1.0.tgz", - "integrity": "sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "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 - }, - "node_modules/set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", - "dev": true - }, - "node_modules/setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", - "dev": true - }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "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, - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shelljs": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", - "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", - "dev": true, - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/shx": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/shx/-/shx-0.3.2.tgz", - "integrity": "sha512-aS0mWtW3T2sHAenrSrip2XGv39O9dXIFUqxAEWHEOS1ePtGIBavdPJY1kE2IHl14V/4iCbUiNDPGdyYTtmhSoA==", - "dev": true, - "dependencies": { - "es6-object-assign": "^1.0.3", - "minimist": "^1.2.0", - "shelljs": "^0.8.1" - }, - "bin": { - "shx": "lib/cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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" - } - }, - "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" - } - }, - "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/snake-case": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.3.tgz", - "integrity": "sha512-WM1sIXEO+rsAHBKjGf/6R1HBBcgbncKS08d2Aqec/mrDSpU80SiOU41hO7ny6DToHSyrlwTYzQBIK1FPSx4Y3Q==", - "dev": true, - "dependencies": { - "dot-case": "^3.0.3", - "tslib": "^1.10.0" - } - }, - "node_modules/snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "dependencies": { - "kind-of": "^3.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/snapdragon/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/socket.io": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.4.1.tgz", - "integrity": "sha512-Si18v0mMXGAqLqCVpTxBa8MGqriHGQh8ccEOhmsmNS3thNCGBwO8WGrwMibANsWtQQ5NStdZwHqZR3naJVFc3w==", - "dev": true, - "dependencies": { - "debug": "~4.1.0", - "engine.io": "~3.5.0", - "has-binary2": "~1.0.2", - "socket.io-adapter": "~1.1.0", - "socket.io-client": "2.4.0", - "socket.io-parser": "~3.4.0" - } - }, - "node_modules/socket.io-adapter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz", - "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==", - "dev": true - }, - "node_modules/socket.io-client": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.4.0.tgz", - "integrity": "sha512-M6xhnKQHuuZd4Ba9vltCLT9oa+YvTsP8j9NcEiLElfIg8KeYPyhWOes6x4t+LTAC8enQbE/995AdTem2uNyKKQ==", - "dev": true, - "dependencies": { - "backo2": "1.0.2", - "component-bind": "1.0.0", - "component-emitter": "~1.3.0", - "debug": "~3.1.0", - "engine.io-client": "~3.5.0", - "has-binary2": "~1.0.2", - "indexof": "0.0.1", - "parseqs": "0.0.6", - "parseuri": "0.0.6", - "socket.io-parser": "~3.3.0", - "to-array": "0.1.4" - } - }, - "node_modules/socket.io-client/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, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/socket.io-client/node_modules/isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", - "dev": true - }, - "node_modules/socket.io-client/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/socket.io-client/node_modules/socket.io-parser": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.2.tgz", - "integrity": "sha512-FJvDBuOALxdCI9qwRrO/Rfp9yfndRtc1jSgVgV8FDraihmSP/MLGD5PEuJrNfjALvcQ+vMDM/33AWOYP/JSjDg==", - "dev": true, - "dependencies": { - "component-emitter": "~1.3.0", - "debug": "~3.1.0", - "isarray": "2.0.1" - } - }, - "node_modules/socket.io-parser": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.4.1.tgz", - "integrity": "sha512-11hMgzL+WCLWf1uFtHSNvliI++tcRUWdoeYuwIl+Axvwy9z2gQM+7nJyN3STj1tLj5JyIUH8/gpDGxzAlDdi0A==", - "dev": true, - "dependencies": { - "component-emitter": "1.2.1", - "debug": "~4.1.0", - "isarray": "2.0.1" - } - }, - "node_modules/socket.io-parser/node_modules/component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, - "node_modules/socket.io-parser/node_modules/isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", - "dev": true - }, - "node_modules/sort-keys": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", - "dev": true, - "dependencies": { - "is-plain-obj": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sort-keys-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", - "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=", - "dev": true, - "dependencies": { - "sort-keys": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "dev": true - }, - "node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, - "node_modules/spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "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 - }, - "node_modules/split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "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, - "dependencies": { - "figgy-pudding": "^3.5.1" - } - }, - "node_modules/stackframe": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-0.3.1.tgz", - "integrity": "sha1-M6qE8Rd6VUjIk1Uzy/6zQgl19aQ=", - "dev": true - }, - "node_modules/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "dev": true, - "dependencies": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "node_modules/stream-each": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" - } - }, - "node_modules/stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "dev": true, - "dependencies": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "node_modules/stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", - "dev": true - }, - "node_modules/streamroller": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-2.2.4.tgz", - "integrity": "sha512-OG79qm3AujAM9ImoqgWEY1xG4HX+Lw+yY6qZj9R1K2mhF5bEmQ849wvrb+4vt4jLMLzwXttJlQbOdPOQVRv7DQ==", - "dev": true, - "dependencies": { - "date-format": "^2.1.0", - "debug": "^4.1.1", - "fs-extra": "^8.1.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/streamroller/node_modules/date-format": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.1.0.tgz", - "integrity": "sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "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/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/strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "dependencies": { - "is-utf8": "^0.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-dirs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", - "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", - "dev": true, - "dependencies": { - "is-natural-number": "^4.0.1" - } - }, - "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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "dev": true, - "dependencies": { - "get-stdin": "^4.0.1" - }, - "bin": { - "strip-indent": "cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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" - } - }, - "node_modules/strip-outer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", - "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "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.0.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.0.3.tgz", - "integrity": "sha512-R50QRlXSxqXcQP5SvKUrw8VZeypvo12i2IX0EeR5PiZ7bEKeHWgzgo264LDadUsCU42lTJVhFikTqJwNeH34gQ==", - "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" - } - }, - "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/lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", - "dev": true - }, - "node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar-fs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.0.tgz", - "integrity": "sha512-9uW5iDvrIMCVpvasdFHW0wJPez0K4JnMZtsuIeDI7HyMGJNxmDZDOCQROr7lXyS+iL/QMpj07qcjGYTSdRFXUg==", - "dev": true, - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.0.0" - } - }, - "node_modules/tar-fs/node_modules/bl": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz", - "integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==", - "dev": true, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/tar-fs/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, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/tar-fs/node_modules/tar-stream": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.3.tgz", - "integrity": "sha512-Z9yri56Dih8IaK8gncVPx4Wqt86NDmQTSh49XLZgjWpGZL9GK9HKParS2scqHCC4w6X9Gh2jwaU45V47XTKwVA==", - "dev": true, - "dependencies": { - "bl": "^4.0.1", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", - "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", - "dev": true, - "dependencies": { - "bl": "^1.0.0", - "buffer-alloc": "^1.2.0", - "end-of-stream": "^1.0.0", - "fs-constants": "^1.0.0", - "readable-stream": "^2.3.0", - "to-buffer": "^1.1.1", - "xtend": "^4.0.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/temp": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/temp/-/temp-0.9.1.tgz", - "integrity": "sha512-WMuOgiua1xb5R56lE0eH6ivpVmg/lq2OHm4+LtT/xtEtPQ+sz6N3bBM6WZ5FvO1lO4IKIOb43qnhoc4qxP5OeA==", - "dev": true, - "dependencies": { - "rimraf": "~2.6.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "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, - "dependencies": { - "execa": "^0.7.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/terser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", - "dev": true, - "dependencies": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.4.tgz", - "integrity": "sha512-U4mACBHIegmfoEe5fdongHESNJWqsGU+W0S/9+BmYGVQDw1+c2Ow05TpMhxjPK1sRb7cuYq1BPl1e5YHJMTCqA==", - "dev": true, - "dependencies": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^3.1.0", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" - }, - "engines": { - "node": ">= 6.9.0" - } - }, - "node_modules/terser-webpack-plugin/node_modules/is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "dependencies": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/terser-webpack-plugin/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/terser/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/terser/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "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/throat": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/throat/-/throat-2.0.2.tgz", - "integrity": "sha1-qfzoCLaeEzpjJZB4DzQsMKYkmwI=", - "dev": true - }, - "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 - }, - "node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/timers-browserify": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", - "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", - "dev": true, - "dependencies": { - "setimmediate": "^1.0.4" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/to-array": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", - "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", - "dev": true - }, - "node_modules/to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", - "dev": true - }, - "node_modules/to-buffer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", - "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-object-path/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true - }, - "node_modules/trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/trim-repeated": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", - "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==", - "dev": true - }, - "node_modules/tsutils": { - "version": "3.19.1", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.19.1.tgz", - "integrity": "sha512-GEdoBf5XI324lu7ycad7s6laADfnAqCw6wLGI+knxvw9vsIYBaJfYdmeCEG3FMMUiSm3OGgNb+m6utsWf5h9Vw==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", - "dev": true - }, - "node_modules/tunnel": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", - "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", - "dev": true, - "engines": { - "node": ">=0.6.11 <=0.7.0 || >=0.7.3" - } - }, - "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, - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "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-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", - "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "node_modules/typescript": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.5.tgz", - "integrity": "sha512-ywmr/VrTVCmNTJ6iV2LwIrfG1P+lv6luD8sUJs+2eI9NLGigaN+nUQc13iHqisq7bra9lnmUSYqbJvegraBOPQ==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/ua-parser-js": { - "version": "0.7.21", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.21.tgz", - "integrity": "sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/unbzip2-stream": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", - "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", - "dev": true, - "dependencies": { - "buffer": "^5.2.1", - "through": "^2.3.8" - } - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", - "dev": true, - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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, - "dependencies": { - "unique-slug": "^2.0.0" - } - }, - "node_modules/unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4" - } - }, - "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, - "dependencies": { - "crypto-random-string": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/untildify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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, - "engines": { - "node": ">=4" - } - }, - "node_modules/upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=4", - "yarn": "*" - } - }, - "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, - "dependencies": { - "boxen": "^1.2.1", - "chalk": "^2.0.1", - "configstore": "^3.0.0", - "import-lazy": "^2.1.0", - "is-ci": "^1.0.10", - "is-installed-globally": "^0.1.0", - "is-npm": "^1.0.0", - "latest-version": "^3.0.0", - "semver-diff": "^2.0.0", - "xdg-basedir": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/update-notifier/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, - "engines": { - "node": ">=4" - } - }, - "node_modules/upper-case": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-2.0.1.tgz", - "integrity": "sha512-laAsbea9SY5osxrv7S99vH9xAaJKrw5Qpdh4ENRLcaxipjKsiaBwiAsxfa8X5mObKNTQPsupSq0J/VIxsSJe3A==", - "dev": true, - "dependencies": { - "tslib": "^1.10.0" - } - }, - "node_modules/upper-case-first": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-2.0.1.tgz", - "integrity": "sha512-105J8XqQ+9RxW3l9gHZtgve5oaiR9TIwvmZAMAIZWRHe00T21cdvewKORTlOJf/zXW6VukuTshM+HXZNWz7N5w==", - "dev": true, - "dependencies": { - "tslib": "^1.10.0" - } - }, - "node_modules/uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "node_modules/url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dev": true, - "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "node_modules/url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", - "dev": true, - "dependencies": { - "prepend-http": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/url-to-options": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", - "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/url/node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - }, - "node_modules/use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "dev": true, - "dependencies": { - "inherits": "2.0.3" - } - }, - "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 - }, - "node_modules/util/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.2.0.tgz", - "integrity": "sha512-CYpGiFTUrmI6OBMkAdjSDM0k5h8SkkiTP4WAjQgDgNB1S3Ou9VBEvr6q0Kv2H1mMk7IWfxYGpMH5sd5AvcIV2Q==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "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/v8-to-istanbul": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz", - "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "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, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", - "dev": true - }, - "node_modules/void-elements": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", - "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/vue-template-compiler": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.11.tgz", - "integrity": "sha512-KIq15bvQDrcCjpGjrAhx4mUlyyHfdmTaoNfeoATHLAiWB+MU3cx4lOzMwrnUh9cCxy0Lt1T11hAFY6TQgroUAA==", - "dev": true, - "dependencies": { - "de-indent": "^1.0.2", - "he": "^1.1.0" - } - }, - "node_modules/walkdir": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.3.2.tgz", - "integrity": "sha512-0Twghia4Z5wDGDYWURlhZmI47GvERMCsXIu0QZWVVZyW9ZjpbbZvD9Zy9M6cWiQQRRbAcYajIyKNavaZZDt1Uw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/watchpack": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.2.tgz", - "integrity": "sha512-ymVbbQP40MFTp+cNMvpyBpBtygHnPzPkHqoIwRRj/0B8KhqQwV8LaKjtbaxF2lK4vl8zN9wCxS46IFCU5K4W0g==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0" - }, - "optionalDependencies": { - "chokidar": "^3.4.0", - "watchpack-chokidar2": "^2.0.0" - } - }, - "node_modules/watchpack-chokidar2": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz", - "integrity": "sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==", - "dev": true, - "optional": true, - "dependencies": { - "chokidar": "^2.1.8" - }, - "engines": { - "node": "<8.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "optional": true, - "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "node_modules/watchpack-chokidar2/node_modules/anymatch/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "optional": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, - "optional": true, - "dependencies": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "node_modules/watchpack-chokidar2/node_modules/fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "dependencies": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "optional": true, - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/glob-parent/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "optional": true, - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "optional": true, - "dependencies": { - "binary-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "optional": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/webdriver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-6.3.0.tgz", - "integrity": "sha512-osHp5DX8eQ76Sy6/UYoECmDnUXwLhy5tlBeJh86er7S04FLAlmEqCvYXgxTSb8YtDjh9Xt9gP768RGhxR7ik5A==", - "dev": true, - "dependencies": { - "@wdio/config": "6.1.14", - "@wdio/logger": "6.0.16", - "@wdio/protocols": "6.3.0", - "@wdio/utils": "6.3.0", - "got": "^11.0.2", - "lodash.merge": "^4.6.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/webdriverio": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-6.3.3.tgz", - "integrity": "sha512-/ahCs6sna4M+/GZ5RPh5LLTEzfh5+gJD0vOpmA4nmarpKjqnfuwtqTETjmQCfqKTjiLVwzqShnsAedbYuw9Q2g==", - "dev": true, - "dependencies": { - "@types/puppeteer": "^3.0.1", - "@wdio/config": "6.1.14", - "@wdio/logger": "6.0.16", - "@wdio/repl": "6.3.0", - "@wdio/utils": "6.3.0", - "archiver": "^4.0.1", - "atob": "^2.1.2", - "css-value": "^0.0.1", - "devtools": "6.3.3", - "get-port": "^5.1.1", - "grapheme-splitter": "^1.0.2", - "lodash.clonedeep": "^4.5.0", - "lodash.isobject": "^3.0.2", - "lodash.isplainobject": "^4.0.6", - "lodash.zip": "^4.2.0", - "minimatch": "^3.0.4", - "puppeteer-core": "^5.1.0", - "resq": "^1.6.0", - "rgb2hex": "^0.2.0", - "serialize-error": "^7.0.0", - "webdriver": "6.3.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true - }, - "node_modules/webpack": { - "version": "4.43.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.43.0.tgz", - "integrity": "sha512-GW1LjnPipFW2Y78OOab8NJlCflB7EFskMih2AHdvjbpKMeDJqEgSx24cXXXiPS65+WSwVyxtDsJH6jGX2czy+g==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/wasm-edit": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "^6.4.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.1.0", - "eslint-scope": "^4.0.3", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.3", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.6.1", - "webpack-sources": "^1.4.1" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/webpack-dev-middleware": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz", - "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==", - "dev": true, - "dependencies": { - "memory-fs": "^0.4.1", - "mime": "^2.4.4", - "mkdirp": "^0.5.1", - "range-parser": "^1.2.1", - "webpack-log": "^2.0.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/webpack-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", - "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", - "dev": true, - "dependencies": { - "ansi-colors": "^3.0.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/webpack-log/node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true, - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dev": true, - "dependencies": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, - "node_modules/webpack-sources/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "dev": true, - "dependencies": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/webpack/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/webpack/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "dependencies": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/whatwg-fetch": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", - "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==", - "dev": true - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "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 - }, - "node_modules/which-pm": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/which-pm/-/which-pm-1.1.0.tgz", - "integrity": "sha512-7GHHJQpALk7BWMD8I+xSILSbHyngvBlfSXlwGpdRFY2voFwVCx+eJAybXTzTnUYmt7zio6B9SEdI81T0fBjxNA==", - "dev": true, - "dependencies": { - "load-yaml-file": "^0.1.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "dependencies": { - "string-width": "^1.0.2 || 2" - } - }, - "node_modules/wide-align/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, - "engines": { - "node": ">=4" - } - }, - "node_modules/wide-align/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, - "engines": { - "node": ">=4" - } - }, - "node_modules/wide-align/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, - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/wide-align/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, - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "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, - "dependencies": { - "string-width": "^2.1.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/widest-line/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, - "engines": { - "node": ">=4" - } - }, - "node_modules/widest-line/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, - "engines": { - "node": ">=4" - } - }, - "node_modules/widest-line/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, - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/widest-line/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, - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "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/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, - "dependencies": { - "errno": "~0.1.7" - } - }, - "node_modules/workerpool": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.0.2.tgz", - "integrity": "sha512-DSNyvOpFKrNusaaUwk+ej6cBj1bmhLcBfj80elGk+ZIo5JSkq+unB1dLKEOcNfJDZgjGICfhQ0Q5TbP0PvF4+Q==", - "dev": true - }, - "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" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "dependencies": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-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/wrap-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/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "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, - "dependencies": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "node_modules/ws": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.3.1.tgz", - "integrity": "sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA==", - "dev": true, - "engines": { - "node": ">=8.3.0" - } - }, - "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, - "engines": { - "node": ">=4" - } - }, - "node_modules/xmlhttprequest-ssl": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", - "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "engines": { - "node": ">=0.4" - } - }, - "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 - }, - "node_modules/yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - }, - "node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "dependencies": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-unparser/node_modules/camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-unparser/node_modules/decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-unparser/node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", - "dev": true, - "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, - "node_modules/yeast": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", - "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", - "dev": true - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/zip-stream": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-3.0.1.tgz", - "integrity": "sha512-r+JdDipt93ttDjsOVPU5zaq5bAyY+3H19bDrThkvuVxC0xMQzU1PJcS6D+KrP3u96gH9XLomcHPb+2skoDjulQ==", - "dev": true, - "dependencies": { - "archiver-utils": "^2.1.0", - "compress-commons": "^3.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/zip-stream/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, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - } - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/compat-data": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.10.5.tgz", - "integrity": "sha512-mPVoWNzIpYJHbWje0if7Ck36bpbtTvIxOi9+6WSK9wjGEXearAqlwBoTQvVjsAY2VIwgcs8V940geY3okzRCEw==", - "dev": true, - "requires": { - "browserslist": "^4.12.0", - "invariant": "^2.2.4", - "semver": "^5.5.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "@babel/core": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.10.5.tgz", - "integrity": "sha512-O34LQooYVDXPl7QWCdW9p4NR+QlzOr7xShPPJz8GsuCU3/8ua/wqTr7gmnxXv+WBESiGU/G5s16i6tUvHkNb+w==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.10.5", - "@babel/helper-module-transforms": "^7.10.5", - "@babel/helpers": "^7.10.4", - "@babel/parser": "^7.10.5", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.5", - "@babel/types": "^7.10.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.5.tgz", - "integrity": "sha512-3vXxr3FEW7E7lJZiWQ3bM4+v/Vyr9C+hpolQ8BGFr9Y8Ri2tFLWTixmwKBafDujO1WVah4fhZBeU1bieKdghig==", - "dev": true, - "requires": { - "@babel/types": "^7.10.5", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", - "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", - "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==", - "dev": true, - "requires": { - "@babel/helper-explode-assignable-expression": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.4.tgz", - "integrity": "sha512-a3rYhlsGV0UHNDvrtOXBg8/OpfV0OKTkxKPzIplS1zpx7CygDcWWxckxZeDd3gzPzC4kUT0A4nVFDK0wGMh4MQ==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.10.4", - "browserslist": "^4.12.0", - "invariant": "^2.2.4", - "levenary": "^1.1.1", - "semver": "^5.5.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz", - "integrity": "sha512-0nkdeijB7VlZoLT3r/mY3bUkw3T8WG/hNw+FATs/6+pG2039IJWjTYL0VTISqsNHMUTEnwbVnc89WIJX9Qed0A==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-member-expression-to-functions": "^7.10.5", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4" - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz", - "integrity": "sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-regex": "^7.10.4", - "regexpu-core": "^4.7.0" - } - }, - "@babel/helper-define-map": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz", - "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/types": "^7.10.5", - "lodash": "^4.17.19" - } - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.4.tgz", - "integrity": "sha512-4K71RyRQNPRrR85sr5QY4X3VwG4wtVoXZB9+L3r1Gp38DhELyHCtovqydRi7c1Ovb17eRGiQ/FD5s8JdU0Uy5A==", - "dev": true, - "requires": { - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz", - "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.5.tgz", - "integrity": "sha512-HiqJpYD5+WopCXIAbQDG0zye5XYVvcO9w/DHp5GsaGkRUaamLj2bEtu6i8rnGGprAhHM3qidCMgp71HF4endhA==", - "dev": true, - "requires": { - "@babel/types": "^7.10.5" - } - }, - "@babel/helper-module-imports": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", - "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-module-transforms": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.10.5.tgz", - "integrity": "sha512-4P+CWMJ6/j1W915ITJaUkadLObmCRRSC234uctJfn/vHrsLNxsR8dwlcXv9ZhJWzl77awf+mWXSZEKt5t0OnlA==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4", - "@babel/helper-simple-access": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.5", - "lodash": "^4.17.19" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", - "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", - "dev": true - }, - "@babel/helper-regex": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.5.tgz", - "integrity": "sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg==", - "dev": true, - "requires": { - "lodash": "^4.17.19" - } - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.4.tgz", - "integrity": "sha512-86Lsr6NNw3qTNl+TBcF1oRZMaVzJtbWTyTko+CQL/tvNvcGYEFKbLXDPxtW0HKk3McNOk4KzY55itGWCAGK5tg==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-wrap-function": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-replace-supers": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz", - "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.10.4", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-simple-access": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz", - "integrity": "sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==", - "dev": true, - "requires": { - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", - "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", - "dev": true - }, - "@babel/helper-wrap-function": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz", - "integrity": "sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helpers": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.4.tgz", - "integrity": "sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA==", - "dev": true, - "requires": { - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", - "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==", - "dev": true - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz", - "integrity": "sha512-cNMCVezQbrRGvXJwm9fu/1sJj9bHdGAgKodZdLqOQIpfoH3raqmRPBM17+lh7CzhiKRRBrGtZL9WcjxSoGYUSg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.10.4", - "@babel/plugin-syntax-async-generators": "^7.8.0" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz", - "integrity": "sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz", - "integrity": "sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-dynamic-import": "^7.8.0" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz", - "integrity": "sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.0" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz", - "integrity": "sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.4.tgz", - "integrity": "sha512-73/G7QoRoeNkLZFxsoCCvlg4ezE4eM+57PnOqgaPOozd5myfj7p0muD1mRVJvbUWbOzD+q3No2bWbaKy+DJ8DA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.4.tgz", - "integrity": "sha512-6vh4SqRuLLarjgeOf4EaROJAHjvu9Gl+/346PbDH9yWbJyfnJ/ah3jmYKYtswEyCoWZiidvVHjHshd4WgjB9BA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.10.4" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz", - "integrity": "sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.10.4.tgz", - "integrity": "sha512-ZIhQIEeavTgouyMSdZRap4VPPHqJJ3NEs2cuHs5p0erH+iz6khB0qfgU8g7UuJkG88+fBMy23ZiU+nuHvekJeQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-optional-chaining": "^7.8.0" - } - }, - "@babel/plugin-proposal-private-methods": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz", - "integrity": "sha512-wh5GJleuI8k3emgTg5KkJK6kHNsGEr0uBTDBuQUBJwckk9xs1ez79ioheEVVxMLyPscB0LfkbVHslQqIzWV6Bw==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz", - "integrity": "sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz", - "integrity": "sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz", - "integrity": "sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz", - "integrity": "sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz", - "integrity": "sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.10.4" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz", - "integrity": "sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.5.tgz", - "integrity": "sha512-6Ycw3hjpQti0qssQcA6AMSFDHeNJ++R6dIMnpRqUjFeBBTmTDPa8zgF90OVfTvAo11mXZTlVUViY1g8ffrURLg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz", - "integrity": "sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-define-map": "^7.10.4", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz", - "integrity": "sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz", - "integrity": "sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz", - "integrity": "sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz", - "integrity": "sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz", - "integrity": "sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw==", - "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz", - "integrity": "sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz", - "integrity": "sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz", - "integrity": "sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz", - "integrity": "sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.5.tgz", - "integrity": "sha512-elm5uruNio7CTLFItVC/rIzKLfQ17+fX7EVz5W0TMgIHFo1zY0Ozzx+lgwhL4plzl8OzVn6Qasx5DeEFyoNiRw==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.10.5", - "@babel/helper-plugin-utils": "^7.10.4", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz", - "integrity": "sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-simple-access": "^7.10.4", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.5.tgz", - "integrity": "sha512-f4RLO/OL14/FP1AEbcsWMzpbUz6tssRaeQg11RH1BP/XnPpRoVwgeYViMFacnkaw4k4wjRSjn3ip1Uw9TaXuMw==", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.10.4", - "@babel/helper-module-transforms": "^7.10.5", - "@babel/helper-plugin-utils": "^7.10.4", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz", - "integrity": "sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz", - "integrity": "sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz", - "integrity": "sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz", - "integrity": "sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz", - "integrity": "sha512-xPHwUj5RdFV8l1wuYiu5S9fqWGM2DrYc24TMvUiRrPVm+SM3XeqU9BcokQX/kEUe+p2RBwy+yoiR1w/Blq6ubw==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz", - "integrity": "sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz", - "integrity": "sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw==", - "dev": true, - "requires": { - "regenerator-transform": "^0.14.2" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz", - "integrity": "sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz", - "integrity": "sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.10.4.tgz", - "integrity": "sha512-1e/51G/Ni+7uH5gktbWv+eCED9pP8ZpRhZB3jOaI3mmzfvJTWHkuyYTv0Z5PYtyM+Tr2Ccr9kUdQxn60fI5WuQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz", - "integrity": "sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-regex": "^7.10.4" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.5.tgz", - "integrity": "sha512-V/lnPGIb+KT12OQikDvgSuesRX14ck5FfJXt6+tXhdkJ+Vsd0lDCVtF6jcB4rNClYFzaB2jusZ+lNISDk2mMMw==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz", - "integrity": "sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.4.tgz", - "integrity": "sha512-y5XJ9waMti2J+e7ij20e+aH+fho7Wb7W8rNuu72aKRwCHFqQdhkdU2lo3uZ9tQuboEJcUFayXdARhcxLQ3+6Fg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz", - "integrity": "sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/polyfill": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.12.1.tgz", - "integrity": "sha512-X0pi0V6gxLi6lFZpGmeNa4zxtwEmCs42isWLNjZZDE0Y8yVfgu0T2OAHlzBbdYlqbW/YXVvoBHpATEM+goCj8g==", - "dev": true, - "requires": { - "core-js": "^2.6.5", - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/preset-env": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.10.4.tgz", - "integrity": "sha512-tcmuQ6vupfMZPrLrc38d0sF2OjLT3/bZ0dry5HchNCQbrokoQi4reXqclvkkAT5b+gWc23meVWpve5P/7+w/zw==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.10.4", - "@babel/helper-compilation-targets": "^7.10.4", - "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-proposal-async-generator-functions": "^7.10.4", - "@babel/plugin-proposal-class-properties": "^7.10.4", - "@babel/plugin-proposal-dynamic-import": "^7.10.4", - "@babel/plugin-proposal-json-strings": "^7.10.4", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.4", - "@babel/plugin-proposal-numeric-separator": "^7.10.4", - "@babel/plugin-proposal-object-rest-spread": "^7.10.4", - "@babel/plugin-proposal-optional-catch-binding": "^7.10.4", - "@babel/plugin-proposal-optional-chaining": "^7.10.4", - "@babel/plugin-proposal-private-methods": "^7.10.4", - "@babel/plugin-proposal-unicode-property-regex": "^7.10.4", - "@babel/plugin-syntax-async-generators": "^7.8.0", - "@babel/plugin-syntax-class-properties": "^7.10.4", - "@babel/plugin-syntax-dynamic-import": "^7.8.0", - "@babel/plugin-syntax-json-strings": "^7.8.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.0", - "@babel/plugin-syntax-top-level-await": "^7.10.4", - "@babel/plugin-transform-arrow-functions": "^7.10.4", - "@babel/plugin-transform-async-to-generator": "^7.10.4", - "@babel/plugin-transform-block-scoped-functions": "^7.10.4", - "@babel/plugin-transform-block-scoping": "^7.10.4", - "@babel/plugin-transform-classes": "^7.10.4", - "@babel/plugin-transform-computed-properties": "^7.10.4", - "@babel/plugin-transform-destructuring": "^7.10.4", - "@babel/plugin-transform-dotall-regex": "^7.10.4", - "@babel/plugin-transform-duplicate-keys": "^7.10.4", - "@babel/plugin-transform-exponentiation-operator": "^7.10.4", - "@babel/plugin-transform-for-of": "^7.10.4", - "@babel/plugin-transform-function-name": "^7.10.4", - "@babel/plugin-transform-literals": "^7.10.4", - "@babel/plugin-transform-member-expression-literals": "^7.10.4", - "@babel/plugin-transform-modules-amd": "^7.10.4", - "@babel/plugin-transform-modules-commonjs": "^7.10.4", - "@babel/plugin-transform-modules-systemjs": "^7.10.4", - "@babel/plugin-transform-modules-umd": "^7.10.4", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.10.4", - "@babel/plugin-transform-new-target": "^7.10.4", - "@babel/plugin-transform-object-super": "^7.10.4", - "@babel/plugin-transform-parameters": "^7.10.4", - "@babel/plugin-transform-property-literals": "^7.10.4", - "@babel/plugin-transform-regenerator": "^7.10.4", - "@babel/plugin-transform-reserved-words": "^7.10.4", - "@babel/plugin-transform-shorthand-properties": "^7.10.4", - "@babel/plugin-transform-spread": "^7.10.4", - "@babel/plugin-transform-sticky-regex": "^7.10.4", - "@babel/plugin-transform-template-literals": "^7.10.4", - "@babel/plugin-transform-typeof-symbol": "^7.10.4", - "@babel/plugin-transform-unicode-escapes": "^7.10.4", - "@babel/plugin-transform-unicode-regex": "^7.10.4", - "@babel/preset-modules": "^0.1.3", - "@babel/types": "^7.10.4", - "browserslist": "^4.12.0", - "core-js-compat": "^3.6.2", - "invariant": "^2.2.2", - "levenary": "^1.1.1", - "semver": "^5.5.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "@babel/preset-modules": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.3.tgz", - "integrity": "sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "@babel/runtime": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.10.5.tgz", - "integrity": "sha512-otddXKhdNn7d0ptoFRHtMLa8LqDxLYwTjB4nYgM1yy5N6gU/MUf8zqyyLltCH3yAVitBzmwK4us+DD0l/MauAg==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/traverse": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.5.tgz", - "integrity": "sha512-yc/fyv2gUjPqzTz0WHeRJH2pv7jA9kA7mBX2tXl/x5iOE81uaVPuGPtaYk7wmkx4b67mQ7NqI8rmT2pF47KYKQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.10.5", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4", - "@babel/parser": "^7.10.5", - "@babel/types": "^7.10.5", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - } - }, - "@babel/types": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", - "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "@chiragrupani/karma-chromium-edge-launcher": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@chiragrupani/karma-chromium-edge-launcher/-/karma-chromium-edge-launcher-2.2.2.tgz", - "integrity": "sha512-qbe3skHFAANtF/cQdMGVkdq1lZlVXsVuetx7p+RXhSrNiJ6UxRoB/rY0bbvChqSXTSJrWJ2tOjy+wvym+iYHHg==", - "dev": true - }, - "@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": { - "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" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "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" - } - }, - "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 - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", - "dev": true - }, - "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 - } - } - }, - "@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "@jsdevtools/coverage-istanbul-loader": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@jsdevtools/coverage-istanbul-loader/-/coverage-istanbul-loader-3.0.5.tgz", - "integrity": "sha512-EUCPEkaRPvmHjWAAZkWMT7JDzpw7FKB00WTISaiXsbNOd5hCHg77XLA8sLYLFDo1zepYLo2w7GstN8YBqRXZfA==", - "dev": true, - "requires": { - "convert-source-map": "^1.7.0", - "istanbul-lib-instrument": "^4.0.3", - "loader-utils": "^2.0.0", - "merge-source-map": "^1.1.0", - "schema-utils": "^2.7.0" - } - }, - "@jsdevtools/eslint-config": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@jsdevtools/eslint-config/-/eslint-config-1.0.7.tgz", - "integrity": "sha512-agcdIZtwHwZK9PBcW+Bd6/Mj0+DyOdQP1VD7/nRNfR7fBAIfXskv+mf7D4+8dPHfcRH3Fw639Z4trERRhlrodw==", - "dev": true, - "requires": { - "@typescript-eslint/eslint-plugin": "^3.6.1", - "@typescript-eslint/parser": "^3.6.1" - } - }, - "@jsdevtools/host-environment": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@jsdevtools/host-environment/-/host-environment-2.1.2.tgz", - "integrity": "sha512-9T+w9lWwMExriyAXafL12lPHxOaF7PwSbyf6nCZDpidrXb5r+SiCs6YjsAEOHHdFj7spvNVzEFVT23fDsPbf5Q==", - "dev": true, - "requires": { - "@qawolf/ci-info": "^2.1.0" - } - }, - "@jsdevtools/karma-config": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/@jsdevtools/karma-config/-/karma-config-3.1.7.tgz", - "integrity": "sha512-cMzopdPqaZEazs/TCfsLUIwLx9jfGZcYnKbx3mPLQ9vlWp4AgR9daJf1GpCtGKJh9C/92kZt0ePV8fut+RnQqQ==", - "dev": true, - "requires": { - "@babel/core": "^7.10.4", - "@babel/preset-env": "^7.10.4", - "@jsdevtools/coverage-istanbul-loader": "^3.0.4", - "@jsdevtools/host-environment": "^2.0.3", - "@jsdevtools/karma-host-environment": "^3.0.2", - "@jsdevtools/ono": "^7.1.3", - "babel-loader": "^8.1.0", - "karma-chrome-launcher": "^3.1.0", - "karma-coverage-istanbul-reporter": "^3.0.3", - "karma-edge-launcher": "^0.4.2", - "karma-firefox-launcher": "^1.2.0", - "karma-ie-launcher": "^1.0.0", - "karma-mocha": "^2.0.1", - "karma-safari-launcher": "^1.0.0", - "karma-sauce-launcher": "^4.1.5", - "karma-verbose-reporter": "^0.0.6", - "karma-webpack": "^4.0.2", - "webpack": "^4.43.0" - } - }, - "@jsdevtools/karma-host-environment": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@jsdevtools/karma-host-environment/-/karma-host-environment-3.0.3.tgz", - "integrity": "sha512-g1xAAidi0xP41Ep7Ddnj34Ld/okIZ6VeRrG0cJHl62g+1bEssyFzCyUFo+G6SYhNFHdcrwfW7AecTYXSx4ZLgA==", - "dev": true, - "requires": { - "@jsdevtools/host-environment": "^2.0.4", - "temp": "^0.9.0" - } - }, - "@jsdevtools/ono": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", - "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==" - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@qawolf/ci-info": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@qawolf/ci-info/-/ci-info-2.1.0.tgz", - "integrity": "sha512-D5H5RjqqE+YxI2oeTgSRuIjdy/hli90H5mMd81bBrYlOfB/f4TBsKMoaWfzI5E4bmFzLfQJuvvepTaWrxVfBug==", - "dev": true - }, - "@sindresorhus/is": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", - "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", - "dev": true - }, - "@swc/cli": { - "version": "0.1.59", - "resolved": "https://registry.npmjs.org/@swc/cli/-/cli-0.1.59.tgz", - "integrity": "sha512-BlX3wIxYTwdtR22dIqZ3FEIOJPqnlByAp4JY46OMZi2UXMB3ZbOzefawD2ZlLafRUWyy5NtiZZty5waKzaYRnA==", - "dev": true, - "requires": { - "bin-wrapper": "^4.1.0", - "commander": "^7.1.0", - "fast-glob": "^3.2.5", - "semver": "^7.3.8", - "slash": "3.0.0", - "source-map": "^0.7.3" - }, - "dependencies": { - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true - }, - "source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true - } - } - }, - "@swc/core": { - "version": "1.3.25", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.25.tgz", - "integrity": "sha512-wqzvM/wu6OsTVYPMStOpm7kIQcPX3GoZ0sC85qzDdsCxmJ1rmItLAD91sXPUmmdk0XqPYjLgT9MRDEIP5woz4g==", - "dev": true, - "requires": { - "@swc/core-darwin-arm64": "1.3.25", - "@swc/core-darwin-x64": "1.3.25", - "@swc/core-linux-arm-gnueabihf": "1.3.25", - "@swc/core-linux-arm64-gnu": "1.3.25", - "@swc/core-linux-arm64-musl": "1.3.25", - "@swc/core-linux-x64-gnu": "1.3.25", - "@swc/core-linux-x64-musl": "1.3.25", - "@swc/core-win32-arm64-msvc": "1.3.25", - "@swc/core-win32-ia32-msvc": "1.3.25", - "@swc/core-win32-x64-msvc": "1.3.25" - } - }, - "@swc/core-darwin-arm64": { - "version": "1.3.25", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.25.tgz", - "integrity": "sha512-8PWAVcjTJyj2VrqPBFOIi2w2P0Z8kOCbzHW3+pe+bSXxfGMG0MKPl5U2IXhsEL0ovm4xSFlqW0yygpoP3MmRPw==", - "dev": true, - "optional": true - }, - "@swc/core-darwin-x64": { - "version": "1.3.25", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.25.tgz", - "integrity": "sha512-5DHGiMYFEj5aa208tCjo7Sn5tiG4xPz+4gUiWVlglxqXFptkNim5xu/1G6VYm5Zk7dI5jJkjTU76GQG7IRvPug==", - "dev": true, - "optional": true - }, - "@swc/core-linux-arm-gnueabihf": { - "version": "1.3.25", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.25.tgz", - "integrity": "sha512-YNfLxv9PhZk+jrJbpR1mMrYBUkufo0hiFv3S1OrX3l8edsIP4wPND5w9ZH0Oi898f6Jg9DBrY2zXJMQ+gWkbvA==", - "dev": true, - "optional": true - }, - "@swc/core-linux-arm64-gnu": { - "version": "1.3.25", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.25.tgz", - "integrity": "sha512-kS+spM5/xQ6QvWF1ms3byfjnhUlpjTfFwgCyHnIKgjvsYkDa+vkAIhKq6HuEdaTPaCRCjts0Zarhub1nClUU0g==", - "dev": true, - "optional": true - }, - "@swc/core-linux-arm64-musl": { - "version": "1.3.25", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.25.tgz", - "integrity": "sha512-vM3D7LWmjotUAJ2D4F+L+dspFeWrcPNVh0o8TCoTOYCt8DPD5YsUKTpIgOsZ+gReeWUAnNTh0Btx5pGGVfajGA==", - "dev": true, - "optional": true - }, - "@swc/core-linux-x64-gnu": { - "version": "1.3.25", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.25.tgz", - "integrity": "sha512-xUCLLMDlYa/zB8BftVa4SrxuVpcDxkltCfmBg5r2pZPVskhC5ZJsQZ/AvWNChoAB11shRhjTaWDlmxJEsa7TIg==", - "dev": true, - "optional": true - }, - "@swc/core-linux-x64-musl": { - "version": "1.3.25", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.25.tgz", - "integrity": "sha512-QzHU3BIaUVRSFNsUn3Qxx1vgtF/f5NqsFMAAPSq9Y8Yq5nrlc2t7cNuOROxHLbUqE+NPUp6+RglleJMoeWz5mA==", - "dev": true, - "optional": true - }, - "@swc/core-win32-arm64-msvc": { - "version": "1.3.25", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.25.tgz", - "integrity": "sha512-77VSVtneVOAUL4zkRyQZ6pWVpTsVVdqwly/DKnRnloglGKxYuk5DG5MUBsL72Nnfv4OCHjZ27eI3NUrpLsUb2Q==", - "dev": true, - "optional": true - }, - "@swc/core-win32-ia32-msvc": { - "version": "1.3.25", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.25.tgz", - "integrity": "sha512-kz0v3K3H6OPEZR3ry72Ad/6C5GrZBRRUk69K58LORQ8tZXQD3UGl85pUbQqyHl8fR5NU76Muxgovj9CI9iTHGA==", - "dev": true, - "optional": true - }, - "@swc/core-win32-x64-msvc": { - "version": "1.3.25", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.25.tgz", - "integrity": "sha512-nmQOAzIpNRRnupWzkenJmW4i+h1M76cVNUqEU2MjmtesEkRZEGqv//jefXiyCP2zcbeLNLKiB2ptVJhpd1BvRA==", - "dev": true, - "optional": true - }, - "@szmarczak/http-timer": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.5.tgz", - "integrity": "sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ==", - "dev": true, - "requires": { - "defer-to-connect": "^2.0.0" - } - }, - "@types/cacheable-request": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.1.tgz", - "integrity": "sha512-ykFq2zmBGOCbpIXtoVbz4SKY5QriWPh3AjyU4G74RYbtt5yOc5OfaY75ftjg7mikMOla1CTGpX3lLbuJh8DTrQ==", - "dev": true, - "requires": { - "@types/http-cache-semantics": "*", - "@types/keyv": "*", - "@types/node": "*", - "@types/responselike": "*" - } - }, - "@types/color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", - "dev": true - }, - "@types/eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==", - "dev": true - }, - "@types/http-cache-semantics": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz", - "integrity": "sha512-c3Xy026kOF7QOTn00hbIllV1dLR9hG9NkSrLQgCVs8NF6sBU+VGWjD3wLPhmh1TYAc7ugCFsvHYMN4VcBN1U1A==", - "dev": true - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true - }, - "@types/json-schema": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", - "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==" - }, - "@types/keyv": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.1.tgz", - "integrity": "sha512-MPtoySlAZQ37VoLaPcTHCu1RWJ4llDkULYZIzOYxlhxBqYPB0RsRlmMU0R6tahtFe27mIdkHV+551ZWV4PLmVw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/node": { - "version": "14.14.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.21.tgz", - "integrity": "sha512-cHYfKsnwllYhjOzuC5q1VpguABBeecUp24yFluHpn/BQaVxB1CuQ1FSRZCzrPxrkIfWISXV2LbeoBthLWg0+0A==", - "dev": true - }, - "@types/puppeteer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/puppeteer/-/puppeteer-3.0.1.tgz", - "integrity": "sha512-t03eNKCvWJXhQ8wkc5C6GYuSqMEdKLOX0GLMGtks25YZr38wKZlKTwGM/BoAPVtdysX7Bb9tdwrDS1+NrW3RRA==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/responselike": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", - "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/yauzl": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.1.tgz", - "integrity": "sha512-A1b8SU4D10uoPjwb0lnHmmu8wZhR9d+9o2PKBQT2jU5YPTKsxac6M2qGAdY7VcL+dHHhARVUDmeg0rOrcd9EjA==", - "dev": true, - "optional": true, - "requires": { - "@types/node": "*" - } - }, - "@typescript-eslint/eslint-plugin": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.10.1.tgz", - "integrity": "sha512-PQg0emRtzZFWq6PxBcdxRH3QIQiyFO3WCVpRL3fgj5oQS3CDs3AeAKfv4DxNhzn8ITdNJGJ4D3Qw8eAJf3lXeQ==", - "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "3.10.1", - "debug": "^4.1.1", - "functional-red-black-tree": "^1.0.1", - "regexpp": "^3.0.0", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - } - }, - "@typescript-eslint/experimental-utils": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.1.tgz", - "integrity": "sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/types": "3.10.1", - "@typescript-eslint/typescript-estree": "3.10.1", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" - } - }, - "@typescript-eslint/parser": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-3.10.1.tgz", - "integrity": "sha512-Ug1RcWcrJP02hmtaXVS3axPPTTPnZjupqhgj+NnZ6BCkwSImWk/283347+x9wN+lqOdK9Eo3vsyiyDHgsmiEJw==", - "dev": true, - "requires": { - "@types/eslint-visitor-keys": "^1.0.0", - "@typescript-eslint/experimental-utils": "3.10.1", - "@typescript-eslint/types": "3.10.1", - "@typescript-eslint/typescript-estree": "3.10.1", - "eslint-visitor-keys": "^1.1.0" - } - }, - "@typescript-eslint/types": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-3.10.1.tgz", - "integrity": "sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.1.tgz", - "integrity": "sha512-QbcXOuq6WYvnB3XPsZpIwztBoquEYLXh2MtwVU+kO8jgYCiv4G5xrSP/1wg4tkvrEE+esZVquIPX/dxPlePk1w==", - "dev": true, - "requires": { - "@typescript-eslint/types": "3.10.1", - "@typescript-eslint/visitor-keys": "3.10.1", - "debug": "^4.1.1", - "glob": "^7.1.6", - "is-glob": "^4.0.1", - "lodash": "^4.17.15", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz", - "integrity": "sha512-9JgC82AaQeglebjZMgYR5wgmfUdUc+EitGUUMW8u2nDckaeimzW+VsoLV6FoimPv2id3VQzfjwBxEMVz08ameQ==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.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 - }, - "@wdio/config": { - "version": "6.1.14", - "resolved": "https://registry.npmjs.org/@wdio/config/-/config-6.1.14.tgz", - "integrity": "sha512-MXHMHwtkAblfnIxONs9aW//T9Fq5XIw3oH+tztcBRvNTTAIXmwHd+4sOjAwjpCdBSGs0C4kM/aTpGfwDZVURvQ==", - "dev": true, - "requires": { - "@wdio/logger": "6.0.16", - "deepmerge": "^4.0.0", - "glob": "^7.1.2" - } - }, - "@wdio/logger": { - "version": "6.0.16", - "resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-6.0.16.tgz", - "integrity": "sha512-VbH5UnQIG/3sSMV+Y38+rOdwyK9mVA9vuL7iOngoTafHwUjL1MObfN/Cex84L4mGxIgfxCu6GV48iUmSuQ7sqA==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "loglevel": "^1.6.0", - "loglevel-plugin-prefix": "^0.8.4", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "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 - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@wdio/protocols": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-6.3.0.tgz", - "integrity": "sha512-1GKzfyCTLW5WkFd3W7NLACih+zNWU7c8kFurbCQXDK1ko1obqJEs7ZjBr85q5XqMWburdks5rDjyml2iEB2LBg==", - "dev": true - }, - "@wdio/repl": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@wdio/repl/-/repl-6.3.0.tgz", - "integrity": "sha512-FT3flKOqNdZNG1uYl+QpOfdZIgKAWhLfoQ0s+wL0crLeDNIFvvM2qSDhRBRDYV7a0IFyBi8Z975WBn0dlH03Ig==", - "dev": true, - "requires": { - "@wdio/utils": "6.3.0" - } - }, - "@wdio/utils": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-6.3.0.tgz", - "integrity": "sha512-PbeC5fpieamgSAHf7S58MAyraGU1qKxnHdfGMG+ZIWiIo73oo4j/57CcH6ZawQ3YC1wEc/5q+VXg7N5hvqhJOQ==", - "dev": true, - "requires": { - "@wdio/logger": "6.0.16" - } - }, - "@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", - "dev": true, - "requires": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", - "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", - "dev": true - }, - "@webassemblyjs/helper-code-frame": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", - "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", - "dev": true, - "requires": { - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "@webassemblyjs/helper-fsm": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", - "dev": true - }, - "@webassemblyjs/helper-module-context": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", - "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", - "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", - "dev": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", - "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", - "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wast-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", - "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/floating-point-hex-parser": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-code-frame": "1.9.0", - "@webassemblyjs/helper-fsm": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "dev": true, - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } - }, - "acorn": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", - "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", - "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 - }, - "after": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", - "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", - "dev": true - }, - "agent-base": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", - "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==", - "dev": true - }, - "ajv": { - "version": "6.12.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz", - "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==", - "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" - } - }, - "ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "dev": true - }, - "ajv-keywords": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.1.tgz", - "integrity": "sha512-KWcq3xN8fDjSB+IMoh2VaXVhRI0BBGxoYp3rx7Pkb6z0cFjYR9Q9l4yZqqals0/zsioCmocC5H6UvsGD4MoIBA==", - "dev": true - }, - "ansi-align": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", - "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", - "dev": true, - "requires": { - "string-width": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "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=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", - "dev": true - }, - "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": "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, - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "arch": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/arch/-/arch-2.1.2.tgz", - "integrity": "sha512-NTBIIbAfkJeIletyABbVtdPgeKfDafR+1mZV/AyyfC1UkVkp9iUjV+wwmqtUgphHYajbI86jejBJp5e+jkGTiQ==", - "dev": true - }, - "archive-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz", - "integrity": "sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA=", - "dev": true, - "requires": { - "file-type": "^4.2.0" - }, - "dependencies": { - "file-type": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz", - "integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU=", - "dev": true - } - } - }, - "archiver": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-4.0.2.tgz", - "integrity": "sha512-B9IZjlGwaxF33UN4oPbfBkyA4V1SxNLeIhR1qY8sRXSsbdUkEHrrOvwlYFPx+8uQeCe9M+FG6KgO+imDmQ79CQ==", - "dev": true, - "requires": { - "archiver-utils": "^2.1.0", - "async": "^3.2.0", - "buffer-crc32": "^0.2.1", - "glob": "^7.1.6", - "readable-stream": "^3.6.0", - "tar-stream": "^2.1.2", - "zip-stream": "^3.0.1" - }, - "dependencies": { - "bl": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz", - "integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "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, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "tar-stream": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.3.tgz", - "integrity": "sha512-Z9yri56Dih8IaK8gncVPx4Wqt86NDmQTSh49XLZgjWpGZL9GK9HKParS2scqHCC4w6X9Gh2jwaU45V47XTKwVA==", - "dev": true, - "requires": { - "bl": "^4.0.1", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - } - } - } - }, - "archiver-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", - "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", - "dev": true, - "requires": { - "glob": "^7.1.4", - "graceful-fs": "^4.2.0", - "lazystream": "^1.0.0", - "lodash.defaults": "^4.2.0", - "lodash.difference": "^4.5.0", - "lodash.flatten": "^4.4.0", - "lodash.isplainobject": "^4.0.6", - "lodash.union": "^4.6.0", - "normalize-path": "^3.0.0", - "readable-stream": "^2.0.0" - } - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", - "dev": true - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "arraybuffer.slice": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", - "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", - "dev": true - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - }, - "asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } - } - }, - "assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", - "dev": true, - "requires": { - "object-assign": "^4.1.1", - "util": "0.10.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dev": true, - "requires": { - "inherits": "2.0.1" - } - } - } - }, - "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, - "async": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", - "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", - "dev": true - }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true, - "optional": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "babel-loader": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz", - "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==", - "dev": true, - "requires": { - "find-cache-dir": "^2.1.0", - "loader-utils": "^1.4.0", - "mkdirp": "^0.5.3", - "pify": "^4.0.1", - "schema-utils": "^2.6.5" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - } - } - }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dev": true, - "requires": { - "object.assign": "^4.1.0" - } - }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, - "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "dev": true - } - } - }, - "backo2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "base64-arraybuffer": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", - "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=", - "dev": true - }, - "base64-js": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", - "dev": true - }, - "base64id": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", - "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", - "dev": true - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "bin-check": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bin-check/-/bin-check-4.1.0.tgz", - "integrity": "sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==", - "dev": true, - "requires": { - "execa": "^0.7.0", - "executable": "^4.1.0" - } - }, - "bin-version": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-3.1.0.tgz", - "integrity": "sha512-Mkfm4iE1VFt4xd4vH+gx+0/71esbfus2LsnCGe8Pi4mndSPyT+NGES/Eg99jx8/lUGWfu3z2yuB/bt5UB+iVbQ==", - "dev": true, - "requires": { - "execa": "^1.0.0", - "find-versions": "^3.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "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, - "requires": { - "pump": "^3.0.0" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "bin-version-check": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-4.0.0.tgz", - "integrity": "sha512-sR631OrhC+1f8Cvs8WyVWOA33Y8tgwjETNPyyD/myRBXLkfS/vl74FmH/lFcRl9KY3zwGh7jFhvyk9vV3/3ilQ==", - "dev": true, - "requires": { - "bin-version": "^3.0.0", - "semver": "^5.6.0", - "semver-truncate": "^1.1.2" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "bin-wrapper": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bin-wrapper/-/bin-wrapper-4.1.0.tgz", - "integrity": "sha512-hfRmo7hWIXPkbpi0ZltboCMVrU+0ClXR/JgbCKKjlDjQf6igXa7OwdqNcFWQZPZTgiY7ZpzE3+LjjkLiTN2T7Q==", - "dev": true, - "requires": { - "bin-check": "^4.1.0", - "bin-version-check": "^4.0.0", - "download": "^7.1.0", - "import-lazy": "^3.1.0", - "os-filter-obj": "^2.0.0", - "pify": "^4.0.1" - } - }, - "binary-extensions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", - "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", - "dev": true - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "optional": true, - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "bl": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", - "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", - "dev": true, - "requires": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - } - }, - "blob": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", - "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", - "dev": true - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "bn.js": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.2.tgz", - "integrity": "sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA==", - "dev": true - }, - "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "dev": true, - "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "boolean": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.0.1.tgz", - "integrity": "sha512-HRZPIjPcbwAVQvOTxR4YE3o8Xs98NqbbL1iEZDCz7CL8ql0Lt5iOyJFxfnAB0oFs8Oh02F/lLlg30Mexv46LjA==", - "dev": true - }, - "boxen": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", - "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", - "dev": true, - "requires": { - "ansi-align": "^2.0.0", - "camelcase": "^4.0.0", - "chalk": "^2.0.1", - "cli-boxes": "^1.0.0", - "string-width": "^2.0.0", - "term-size": "^1.2.0", - "widest-line": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "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=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "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, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "dev": true - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-rsa": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "randombytes": "^2.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } - } - }, - "browserify-sign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.0.tgz", - "integrity": "sha512-hEZC1KEeYuoHRqhGhTy6gWrpJA3ZDjFWv0DE61643ZnOXAKJb3u7yWcrU0mMc9SwAqK1n7myPGndkp0dFG7NFA==", - "dev": true, - "requires": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.2", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "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, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "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 - } - } - }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dev": true, - "requires": { - "pako": "~1.0.5" - } - }, - "browserslist": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.13.0.tgz", - "integrity": "sha512-MINatJ5ZNrLnQ6blGvePd/QOz9Xtu+Ne+x29iQSCHfkU5BugKVJwZKn/iiL8UbpIpa3JhviKjz+XxMo0m2caFQ==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001093", - "electron-to-chromium": "^1.3.488", - "escalade": "^3.0.1", - "node-releases": "^1.1.58" - } - }, - "buffer": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", - "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - }, - "buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", - "dev": true, - "requires": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" - } - }, - "buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", - "dev": true - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", - "dev": true - }, - "buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", - "dev": true - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true - }, - "builtin-modules": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.1.0.tgz", - "integrity": "sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==", - "dev": true - }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", - "dev": true - }, - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true - }, - "c8": { - "version": "7.12.0", - "resolved": "https://registry.npmjs.org/c8/-/c8-7.12.0.tgz", - "integrity": "sha512-CtgQrHOkyxr5koX1wEUmN/5cfDa2ckbHRA4Gy5LAL0zaCFtVWJS5++n+w4/sr2GWGerBxgTjpKeDclk/Qk6W/A==", - "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@istanbuljs/schema": "^0.1.3", - "find-up": "^5.0.0", - "foreground-child": "^2.0.0", - "istanbul-lib-coverage": "^3.2.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-reports": "^3.1.4", - "rimraf": "^3.0.2", - "test-exclude": "^6.0.0", - "v8-to-istanbul": "^9.0.0", - "yargs": "^16.2.0", - "yargs-parser": "^20.2.9" - }, - "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" - } - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.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 - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "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" - } - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true - } - } - }, - "cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "dev": true, - "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - }, - "dependencies": { - "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, - "requires": { - "yallist": "^3.0.2" - } - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } - } - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "cacheable-lookup": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.3.tgz", - "integrity": "sha512-W+JBqF9SWe18A72XFzN/V/CULFzPm7sBXzzR6ekkE+3tLG72wFZrBiBZhrZuDoYexop4PHJVdFAKb/Nj9+tm9w==", - "dev": true - }, - "cacheable-request": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", - "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=", - "dev": true, - "requires": { - "clone-response": "1.0.2", - "get-stream": "3.0.0", - "http-cache-semantics": "3.8.1", - "keyv": "3.0.0", - "lowercase-keys": "1.0.0", - "normalize-url": "2.0.1", - "responselike": "1.0.2" - }, - "dependencies": { - "lowercase-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", - "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", - "dev": true - } - } - }, - "call-me-maybe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=" - }, - "callsite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", - "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", - "dev": true - }, - "callsite-record": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/callsite-record/-/callsite-record-3.2.2.tgz", - "integrity": "sha1-mgOQZC5D/ou4I5ReUUZPafQWQ94=", - "dev": true, - "requires": { - "callsite": "^1.0.0", - "chalk": "^1.1.1", - "error-stack-parser": "^1.3.3", - "highlight-es": "^1.0.0", - "lodash": "4.6.1 || ^4.16.1", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "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, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camel-case": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.1.tgz", - "integrity": "sha512-7fa2WcG4fYFkclIvEmxBbTvmibwF2/agfEBc6q3lOpVu0A13ltLsA+Hr/8Hp6kp5f+G7hKi6t8lys6XxP+1K6Q==", - "dev": true, - "requires": { - "pascal-case": "^3.1.1", - "tslib": "^1.10.0" - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", - "dev": true, - "requires": { - "camelcase": "^2.0.0", - "map-obj": "^1.0.0" - }, - "dependencies": { - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "dev": true - } - } - }, - "caniuse-lite": { - "version": "1.0.30001103", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001103.tgz", - "integrity": "sha512-EJkTPrZrgy712tjZ7GQDye5A67SQOyNS6X9b6GS/e5QFu5Renv5qfkx3GHq1S+vObxKzbWWYuPO/7nt4kYW/gA==", - "dev": true - }, - "capital-case": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/capital-case/-/capital-case-1.0.3.tgz", - "integrity": "sha512-OlUSJpUr7SY0uZFOxcwnDOU7/MpHlKTZx2mqnDYQFrDudXLFm0JJ9wr/l4csB+rh2Ug0OPuoSO53PqiZBqno9A==", - "dev": true, - "requires": { - "no-case": "^3.0.3", - "tslib": "^1.10.0", - "upper-case-first": "^2.0.1" - } - }, - "capture-stack-trace": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", - "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==", - "dev": true - }, - "caw": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/caw/-/caw-2.0.1.tgz", - "integrity": "sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==", - "dev": true, - "requires": { - "get-proxy": "^2.0.0", - "isurl": "^1.0.0-alpha5", - "tunnel-agent": "^0.6.0", - "url-to-options": "^1.0.1" - } - }, - "chai": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", - "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", - "dev": true, - "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "pathval": "^1.1.0", - "type-detect": "^4.0.5" - } - }, - "chai-subset": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/chai-subset/-/chai-subset-1.6.0.tgz", - "integrity": "sha1-pdDKFOMpp5WW7XAFi2ZGvWmIz+k=", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "change-case": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/change-case/-/change-case-4.1.1.tgz", - "integrity": "sha512-qRlUWn/hXnX1R1LBDF/RelJLiqNjKjUqlmuBVSEIyye8kq49CXqkZWKmi8XeUAdDXWFOcGLUMZ+aHn3Q5lzUXw==", - "dev": true, - "requires": { - "camel-case": "^4.1.1", - "capital-case": "^1.0.3", - "constant-case": "^3.0.3", - "dot-case": "^3.0.3", - "header-case": "^2.0.3", - "no-case": "^3.0.3", - "param-case": "^3.0.3", - "pascal-case": "^3.1.1", - "path-case": "^3.0.3", - "sentence-case": "^3.0.3", - "snake-case": "^3.0.3", - "tslib": "^1.10.0" - } - }, - "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", - "dev": true - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "dependencies": { - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": 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 - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - } - } - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "chrome-launcher": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.13.4.tgz", - "integrity": "sha512-nnzXiDbGKjDSK6t2I+35OAPBy5Pw/39bgkb/ZAFwMhwJbdYBp6aH+vW28ZgtjdU890Q7D+3wN/tB8N66q5Gi2A==", - "dev": true, - "requires": { - "@types/node": "*", - "escape-string-regexp": "^1.0.5", - "is-wsl": "^2.2.0", - "lighthouse-logger": "^1.0.0", - "mkdirp": "^0.5.3", - "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" - } - } - } - }, - "chrome-trace-event": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", - "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "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 - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "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 - }, - "cli-spinners": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-0.1.2.tgz", - "integrity": "sha1-u3ZNiOGF+54eaiofGXcjGPYF4xw=", - "dev": true - }, - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - } - }, - "clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "dev": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "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 - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.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==", - "dev": true, - "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=", - "dev": true - }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", - "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", - "dev": true, - "requires": { - "graceful-readlink": ">= 1.0.0" - } - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "component-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", - "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", - "dev": true - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "component-inherit": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", - "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", - "dev": true - }, - "compress-commons": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-3.0.0.tgz", - "integrity": "sha512-FyDqr8TKX5/X0qo+aVfaZ+PVmNJHJeckFBlq8jZGSJOgnynhfifoyl24qaqdUdDIBe0EVTHByN6NAkqYvE/2Xg==", - "dev": true, - "requires": { - "buffer-crc32": "^0.2.13", - "crc32-stream": "^3.0.1", - "normalize-path": "^3.0.0", - "readable-stream": "^2.3.7" - } - }, - "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 - }, - "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, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "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, - "requires": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "configstore": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", - "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", - "dev": true, - "requires": { - "dot-prop": "^4.1.0", - "graceful-fs": "^4.1.2", - "make-dir": "^1.0.0", - "unique-string": "^1.0.0", - "write-file-atomic": "^2.0.0", - "xdg-basedir": "^3.0.0" - }, - "dependencies": { - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", - "dev": true, - "requires": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", - "dev": true - }, - "constant-case": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-3.0.3.tgz", - "integrity": "sha512-FXtsSnnrFYpzDmvwDGQW+l8XK3GV1coLyBN0eBz16ZUzGaZcT2ANVCJmLeuw2GQgxKHQIe9e0w2dzkSfaRlUmA==", - "dev": true, - "requires": { - "no-case": "^3.0.3", - "tslib": "^1.10.0", - "upper-case": "^2.0.1" - } - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", - "dev": true - }, - "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "dev": true, - "requires": { - "safe-buffer": "5.1.2" - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true - }, - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", - "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==", - "dev": true, - "requires": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "copyfiles": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/copyfiles/-/copyfiles-2.4.1.tgz", - "integrity": "sha512-fereAvAvxDrQDOXybk3Qu3dPbOoKoysFMWtkY3mv5BsL8//OSZVL5DCLYqgRfY5cWirgRzlC+WSrxp6Bo3eNZg==", - "dev": true, - "requires": { - "glob": "^7.0.5", - "minimatch": "^3.0.3", - "mkdirp": "^1.0.4", - "noms": "0.0.0", - "through2": "^2.0.1", - "untildify": "^4.0.0", - "yargs": "^16.1.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" - } - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.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 - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true - } - } - }, - "core-js": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", - "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==", - "dev": true - }, - "core-js-compat": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz", - "integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==", - "dev": true, - "requires": { - "browserslist": "^4.8.5", - "semver": "7.0.0" - }, - "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true - } - } - }, - "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 - }, - "crc": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", - "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", - "dev": true, - "requires": { - "buffer": "^5.1.0" - } - }, - "crc32-stream": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-3.0.1.tgz", - "integrity": "sha512-mctvpXlbzsvK+6z8kJwSJ5crm7yBwrQMTybJzMw1O4lLGJqjlDCXY2Zw7KheiA6XBEcBmfLx1D88mjRGVJtY9w==", - "dev": true, - "requires": { - "crc": "^3.4.4", - "readable-stream": "^3.4.0" - }, - "dependencies": { - "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, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "create-ecdh": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", - "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "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=", - "dev": true, - "requires": { - "capture-stack-trace": "^1.0.0" - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "cross-env": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", - "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.1" - }, - "dependencies": { - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "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==", - "dev": true, - "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==", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "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, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "cross-spawn-async": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/cross-spawn-async/-/cross-spawn-async-2.2.5.tgz", - "integrity": "sha1-hF/wwINKPe2dFg2sptOQkGuyiMw=", - "dev": true, - "requires": { - "lru-cache": "^4.0.0", - "which": "^1.2.8" - } - }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dev": true, - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - } - }, - "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 - }, - "css-value": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/css-value/-/css-value-0.0.1.tgz", - "integrity": "sha1-Xv1sLupeof1rasV+wEJ7GEUkJOo=", - "dev": true - }, - "currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", - "dev": true, - "requires": { - "array-find-index": "^1.0.1" - } - }, - "custom-event": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", - "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", - "dev": true - }, - "cyclist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", - "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", - "dev": true - }, - "date-format": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-3.0.0.tgz", - "integrity": "sha512-eyTcpKOcamdhWJXj56DpQMo1ylSQpcGtGKXcU0Tb97+K56/CF5amAqqqNj0+KvA0iw2ynxtHWFsPDSClCxe48w==", - "dev": true - }, - "de-indent": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", - "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=", - "dev": true - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "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=", - "dev": true - }, - "decompress": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", - "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", - "dev": true, - "requires": { - "decompress-tar": "^4.0.0", - "decompress-tarbz2": "^4.0.0", - "decompress-targz": "^4.0.0", - "decompress-unzip": "^4.0.1", - "graceful-fs": "^4.1.10", - "make-dir": "^1.0.0", - "pify": "^2.3.0", - "strip-dirs": "^2.0.0" - }, - "dependencies": { - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, - "requires": { - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "dev": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, - "decompress-tar": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", - "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", - "dev": true, - "requires": { - "file-type": "^5.2.0", - "is-stream": "^1.1.0", - "tar-stream": "^1.5.2" - }, - "dependencies": { - "file-type": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", - "dev": true - } - } - }, - "decompress-tarbz2": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", - "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", - "dev": true, - "requires": { - "decompress-tar": "^4.1.0", - "file-type": "^6.1.0", - "is-stream": "^1.1.0", - "seek-bzip": "^1.0.5", - "unbzip2-stream": "^1.0.9" - }, - "dependencies": { - "file-type": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", - "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==", - "dev": true - } - } - }, - "decompress-targz": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", - "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", - "dev": true, - "requires": { - "decompress-tar": "^4.1.1", - "file-type": "^5.2.0", - "is-stream": "^1.1.0" - }, - "dependencies": { - "file-type": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", - "dev": true - } - } - }, - "decompress-unzip": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", - "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", - "dev": true, - "requires": { - "file-type": "^3.8.0", - "get-stream": "^2.2.0", - "pify": "^2.3.0", - "yauzl": "^2.4.2" - }, - "dependencies": { - "file-type": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", - "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", - "dev": true - }, - "get-stream": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", - "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", - "dev": true, - "requires": { - "object-assign": "^4.0.1", - "pinkie-promise": "^2.0.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "dev": true, - "requires": { - "type-detect": "^4.0.0" - } - }, - "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 - }, - "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 - }, - "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true - }, - "defer-to-connect": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.0.tgz", - "integrity": "sha512-bYL2d05vOSf1JEZNx5vSAtPuBMkX8K9EUutg7zlKvTqKXHt7RhWJFbmd7qakVuf13i+IkGmp6FwSsONOf6VYIg==", - "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" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "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 - }, - "depcheck": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/depcheck/-/depcheck-0.8.3.tgz", - "integrity": "sha512-xcLTnaovCFFTts5Ge7mUUhMGHSu6eRfftvVvOjN7gXO5EFUhJfX6UQa1b08a0SIwKfzG9eKNn5mzZlXp0mZARA==", - "dev": true, - "requires": { - "@babel/parser": "^7.3.1", - "@babel/traverse": "^7.2.3", - "builtin-modules": "^3.0.0", - "deprecate": "^1.0.0", - "deps-regex": "^0.1.4", - "js-yaml": "^3.4.2", - "lodash": "^4.17.11", - "minimatch": "^3.0.2", - "node-sass-tilde-importer": "^1.0.2", - "please-upgrade-node": "^3.1.1", - "require-package-name": "^2.0.1", - "resolve": "^1.10.0", - "vue-template-compiler": "^2.6.10", - "walkdir": "^0.3.2", - "yargs": "^13.2.2" - }, - "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==", - "dev": true - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "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 - }, - "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 - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "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, - "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", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "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, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true - }, - "deprecate": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deprecate/-/deprecate-1.1.1.tgz", - "integrity": "sha512-ZGDXefq1xknT292LnorMY5s8UVU08/WKdzDZCUT6t9JzsiMSP4uzUhgpqugffNVcT5WC6wMBiSQ+LFjlv3v7iQ==", - "dev": true - }, - "deps-regex": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deps-regex/-/deps-regex-0.1.4.tgz", - "integrity": "sha1-UYZnt2kUYKXn4KNBvnbrfOgJAYQ=", - "dev": true - }, - "des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "detect-node": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", - "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", - "dev": true - }, - "devtools": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/devtools/-/devtools-6.3.3.tgz", - "integrity": "sha512-VHvJH7y2/pHtDzhXF8T9mlT5sqrUl2WSjCWhjvyohTyfMjtIu15p78lx3NowMwfo12N2/3riW9dVGeVOa6WILQ==", - "dev": true, - "requires": { - "@wdio/config": "6.1.14", - "@wdio/logger": "6.0.16", - "@wdio/protocols": "6.3.0", - "@wdio/utils": "6.3.0", - "chrome-launcher": "^0.13.1", - "puppeteer-core": "^5.1.0", - "ua-parser-js": "^0.7.21", - "uuid": "^8.0.0" - } - }, - "devtools-protocol": { - "version": "0.0.767361", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.767361.tgz", - "integrity": "sha512-ziRTdhEVQ9jEwedaUaXZ7kl9w9TF/7A3SXQ0XuqrJB+hMS62POHZUWTbumDN2ehRTfvWqTPc2Jw4gUl/jggmHA==", - "dev": true - }, - "di": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", - "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", - "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 - }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } - } - }, - "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" - } - }, - "dom-serialize": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", - "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", - "dev": true, - "requires": { - "custom-event": "~1.0.0", - "ent": "~2.2.0", - "extend": "^3.0.0", - "void-elements": "^2.0.0" - } - }, - "domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true - }, - "dot-case": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.3.tgz", - "integrity": "sha512-7hwEmg6RiSQfm/GwPL4AAWXKy3YNNZA3oFv2Pdiey0mwkRCPZ9x6SZbkLcn8Ma5PYeVokzoD4Twv2n7LKp5WeA==", - "dev": true, - "requires": { - "no-case": "^3.0.3", - "tslib": "^1.10.0" - } - }, - "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, - "requires": { - "is-obj": "^1.0.0" - } - }, - "download": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/download/-/download-7.1.0.tgz", - "integrity": "sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ==", - "dev": true, - "requires": { - "archive-type": "^4.0.0", - "caw": "^2.0.1", - "content-disposition": "^0.5.2", - "decompress": "^4.2.0", - "ext-name": "^5.0.0", - "file-type": "^8.1.0", - "filenamify": "^2.0.0", - "get-stream": "^3.0.0", - "got": "^8.3.1", - "make-dir": "^1.2.0", - "p-event": "^2.1.0", - "pify": "^3.0.0" - }, - "dependencies": { - "got": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", - "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", - "dev": true, - "requires": { - "@sindresorhus/is": "^0.7.0", - "cacheable-request": "^2.1.1", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "into-stream": "^3.1.0", - "is-retry-allowed": "^1.1.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "mimic-response": "^1.0.0", - "p-cancelable": "^0.4.0", - "p-timeout": "^2.0.1", - "pify": "^3.0.0", - "safe-buffer": "^5.1.1", - "timed-out": "^4.0.1", - "url-parse-lax": "^3.0.0", - "url-to-options": "^1.0.1" - } - }, - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true - }, - "duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "dev": true, - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "edge-launcher": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/edge-launcher/-/edge-launcher-1.2.2.tgz", - "integrity": "sha1-60Cq+9Bnpup27/+rBke81VCbN7I=", - "dev": true - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "electron-to-chromium": { - "version": "1.3.501", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.501.tgz", - "integrity": "sha512-tyzuKaV2POw2mtqBBzQGNBojMZzH0MRu8bT8T/50x+hWeucyG/9pkgAATy+PcM2ySNM9+8eG2VllY9c6j4i+bg==", - "dev": true - }, - "elliptic": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", - "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", - "dev": true, - "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } - } - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "engine.io": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.5.0.tgz", - "integrity": "sha512-21HlvPUKaitDGE4GXNtQ7PLP0Sz4aWLddMPw2VTyFz1FVZqu/kZsJUO8WNpKuE/OCL7nkfRaOui2ZCJloGznGA==", - "dev": true, - "requires": { - "accepts": "~1.3.4", - "base64id": "2.0.0", - "cookie": "~0.4.1", - "debug": "~4.1.0", - "engine.io-parser": "~2.2.0", - "ws": "~7.4.2" - }, - "dependencies": { - "ws": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.2.tgz", - "integrity": "sha512-T4tewALS3+qsrpGI/8dqNMLIVdq/g/85U98HPMa6F0m6xTbvhXU6RCQLqPH3+SlomNV/LdY6RXEbBpMH6EOJnA==", - "dev": true - } - } - }, - "engine.io-client": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.5.0.tgz", - "integrity": "sha512-12wPRfMrugVw/DNyJk34GQ5vIVArEcVMXWugQGGuw2XxUSztFNmJggZmv8IZlLyEdnpO1QB9LkcjeWewO2vxtA==", - "dev": true, - "requires": { - "component-emitter": "~1.3.0", - "component-inherit": "0.0.3", - "debug": "~3.1.0", - "engine.io-parser": "~2.2.0", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parseqs": "0.0.6", - "parseuri": "0.0.6", - "ws": "~7.4.2", - "xmlhttprequest-ssl": "~1.5.4", - "yeast": "0.1.2" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "ws": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.2.tgz", - "integrity": "sha512-T4tewALS3+qsrpGI/8dqNMLIVdq/g/85U98HPMa6F0m6xTbvhXU6RCQLqPH3+SlomNV/LdY6RXEbBpMH6EOJnA==", - "dev": true - } - } - }, - "engine.io-parser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.1.tgz", - "integrity": "sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg==", - "dev": true, - "requires": { - "after": "0.8.2", - "arraybuffer.slice": "~0.0.7", - "base64-arraybuffer": "0.1.4", - "blob": "0.0.5", - "has-binary2": "~1.0.2" - } - }, - "enhanced-resolve": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz", - "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - }, - "dependencies": { - "memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - } - } - }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "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==", - "dev": true - } - } - }, - "ent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", - "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", - "dev": true - }, - "errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", - "dev": true, - "requires": { - "prr": "~1.0.1" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "error-stack-parser": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-1.3.6.tgz", - "integrity": "sha1-4Oc7k+QXE40c18C3RrGkoUhUwpI=", - "dev": true, - "requires": { - "stackframe": "^0.3.1" - } - }, - "es6-error": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", - "dev": true - }, - "es6-object-assign": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", - "integrity": "sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw=", - "dev": true - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true - }, - "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 - }, - "eslint": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.18.0.tgz", - "integrity": "sha512-fbgTiE8BfUJZuBeq2Yi7J3RB3WGUQ9PNuNbmgi6jt9Iv8qrkxfy19Ds3OpL1Pm7zg3BtTVhvcUZbIRQ0wmSjAQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@eslint/eslintrc": "^0.3.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.2.0", - "esutils": "^2.0.2", - "file-entry-cache": "^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-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" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "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 - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "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==", - "dev": true - }, - "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" - } - }, - "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 - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "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==", - "dev": true, - "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==", - "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" - } - }, - "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 - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "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" - }, - "dependencies": { - "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 - } - } - } - } - }, - "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" - } - }, - "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 - }, - "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": { - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "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.3.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", - "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", - "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.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", - "dev": true, - "requires": { - "estraverse": "^4.1.0" - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "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 - }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "events": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.1.0.tgz", - "integrity": "sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg==", - "dev": true - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "dev": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "executable": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", - "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", - "dev": true, - "requires": { - "pify": "^2.2.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "exit-hook": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", - "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", - "dev": true - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, - "ext-list": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", - "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", - "dev": true, - "requires": { - "mime-db": "^1.28.0" - } - }, - "ext-name": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", - "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", - "dev": true, - "requires": { - "ext-list": "^2.0.0", - "sort-keys-length": "^1.0.0" - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, - "requires": { - "@types/yauzl": "^2.9.1", - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "dependencies": { - "get-stream": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", - "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - } - } - }, - "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.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "dependencies": { - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "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 - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - } - } - }, - "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.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", - "dev": true, - "requires": { - "pend": "~1.2.0" - } - }, - "figgy-pudding": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", - "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", - "dev": true - }, - "file-entry-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.0.tgz", - "integrity": "sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "file-type": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-8.1.0.tgz", - "integrity": "sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ==", - "dev": true - }, - "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", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true - }, - "filename-reserved-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", - "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=", - "dev": true - }, - "filenamify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-2.1.0.tgz", - "integrity": "sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA==", - "dev": true, - "requires": { - "filename-reserved-regex": "^2.0.0", - "strip-outer": "^1.0.0", - "trim-repeated": "^1.0.0" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - } - }, - "find-parent-dir": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/find-parent-dir/-/find-parent-dir-0.3.0.tgz", - "integrity": "sha1-M8RLQpqysvBkYpnF+fcY83b/jVQ=", - "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==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "find-versions": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.2.0.tgz", - "integrity": "sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==", - "dev": true, - "requires": { - "semver-regex": "^2.0.0" - } - }, - "flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "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.0", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.0.tgz", - "integrity": "sha512-tW+UkmtNg/jv9CSofAKvgVcO7c2URjhTdW1ZTkcAritblu8tajiYy7YisnIflEwtKssCtOxpnBRoCB7iap0/TA==", - "dev": true - }, - "flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - } - }, - "follow-redirects": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.1.tgz", - "integrity": "sha512-SSG5xmZh1mkPGyKzjZP8zLjltIfpW32Y5QpdNJyjcfGxK3qo3NDDkZOZSFiGn1A6SclQxY9GzEwAHQ3dmYRWpg==", - "dev": true - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "foreground-child": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", - "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "signal-exit": "^3.0.2" - }, - "dependencies": { - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "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==", - "dev": true, - "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==", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "form-data": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.0.tgz", - "integrity": "sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "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, - "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "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 - }, - "gensync": { - "version": "1.0.0-beta.1", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", - "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==", - "dev": true - }, - "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 - }, - "get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", - "dev": true - }, - "get-port": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", - "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", - "dev": true - }, - "get-proxy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz", - "integrity": "sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==", - "dev": true, - "requires": { - "npm-conf": "^1.1.0" - } - }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "giturl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/giturl/-/giturl-1.0.1.tgz", - "integrity": "sha512-wQourBdI13n8tbjcZTDl6k+ZrCRMU6p9vfp9jknZq+zfWc8xXNztpZFM4XkPHVzHcMSUZxEMYYKZjIGkPlei6Q==", - "dev": true - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "global-agent": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-2.1.12.tgz", - "integrity": "sha512-caAljRMS/qcDo69X9BfkgrihGUgGx44Fb4QQToNQjsiWh+YlQ66uqYVAdA8Olqit+5Ng0nkz09je3ZzANMZcjg==", - "dev": true, - "requires": { - "boolean": "^3.0.1", - "core-js": "^3.6.5", - "es6-error": "^4.1.1", - "matcher": "^3.0.0", - "roarr": "^2.15.3", - "semver": "^7.3.2", - "serialize-error": "^7.0.1" - }, - "dependencies": { - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==", - "dev": true - } - } - }, - "global-dirs": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", - "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", - "dev": true, - "requires": { - "ini": "^1.3.4" - } - }, - "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dev": true, - "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - } - }, - "global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", - "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "globalthis": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.1.tgz", - "integrity": "sha512-mJPRTc/P39NH/iNG4mXa9aIhNymaQikTrnspeCa2ZuJ+mH2QN/rXwtX3XwKrHqWgUQFbNZKtHM105aHzJalElw==", - "dev": true, - "requires": { - "define-properties": "^1.1.3" - } - }, - "got": { - "version": "11.5.1", - "resolved": "https://registry.npmjs.org/got/-/got-11.5.1.tgz", - "integrity": "sha512-reQEZcEBMTGnujmQ+Wm97mJs/OK6INtO6HmLI+xt3+9CvnRwWjXutUvb2mqr+Ao4Lu05Rx6+udx9sOQAmExMxA==", - "dev": true, - "requires": { - "@sindresorhus/is": "^3.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.1", - "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.0", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" - }, - "dependencies": { - "@sindresorhus/is": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-3.0.0.tgz", - "integrity": "sha512-kqA5I6Yun7PBHk8WN9BBP1c7FfN2SrD05GuVSEYPqDb4nerv7HqYfgBfMIKmT/EuejURkJKLZuLyGKGs6WEG9w==", - "dev": true - }, - "cacheable-request": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.1.tgz", - "integrity": "sha512-lt0mJ6YAnsrBErpTMWeu5kl/tg9xMAWjavYTN6VQXM1A/teBITuNcccXsCxF0tDQQJf9DfAaX5O4e0zp0KlfZw==", - "dev": true, - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^2.0.0" - } - }, - "decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dev": true, - "requires": { - "mimic-response": "^3.1.0" - } - }, - "get-stream": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", - "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "dev": true - }, - "json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true - }, - "keyv": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.1.tgz", - "integrity": "sha512-xz6Jv6oNkbhrFCvCP7HQa8AaII8y8LRpoSm661NOKLr4uHuBwhX4epXrPQgF3+xdJnN4Esm5X0xwY4bOlALOtw==", - "dev": true, - "requires": { - "json-buffer": "3.0.1" - } - }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true - }, - "mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "dev": true - }, - "normalize-url": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", - "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", - "dev": true - }, - "p-cancelable": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.0.0.tgz", - "integrity": "sha512-wvPXDmbMmu2ksjkB4Z3nZWTSkJEb9lqVdMaCKpZUGJG9TMiNp9XcbG3fn9fPKjem04fJMJnXoyFPk2FmgiaiNg==", - "dev": true - }, - "responselike": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", - "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", - "dev": true, - "requires": { - "lowercase-keys": "^2.0.0" - } - } - } - }, - "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 - }, - "graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", - "dev": true - }, - "grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - } - } - }, - "has-binary2": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", - "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", - "dev": true, - "requires": { - "isarray": "2.0.1" - }, - "dependencies": { - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", - "dev": true - } - } - }, - "has-cors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", - "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", - "dev": true - }, - "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-symbol-support-x": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", - "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", - "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-to-string-tag-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", - "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", - "dev": true, - "requires": { - "has-symbol-support-x": "^1.4.1" - } - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dev": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "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, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "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 - } - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, - "header-case": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/header-case/-/header-case-2.0.3.tgz", - "integrity": "sha512-LChe/V32mnUQnTwTxd3aAlNMk8ia9tjCDb/LjYtoMrdAPApxLB+azejUk5ERZIZdIqvinwv6BAUuFXH/tQPdZA==", - "dev": true, - "requires": { - "capital-case": "^1.0.3", - "tslib": "^1.10.0" - } - }, - "highlight-es": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/highlight-es/-/highlight-es-1.0.3.tgz", - "integrity": "sha512-s/SIX6yp/5S1p8aC/NRDC1fwEb+myGIfp8/TzZz0rtAv8fzsdX7vGl3Q1TrXCsczFq8DI3CBFBCySPClfBSdbg==", - "dev": true, - "requires": { - "chalk": "^2.4.0", - "is-es2016-keyword": "^1.0.0", - "js-tokens": "^3.0.0" - }, - "dependencies": { - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - } - } - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dev": true, - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "dev": true, - "requires": { - "parse-passwd": "^1.0.0" - } - }, - "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 - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "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==", - "dev": true - }, - "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - } - } - }, - "http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dev": true, - "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - } - }, - "http2-wrapper": { - "version": "1.0.0-beta.5.2", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.0-beta.5.2.tgz", - "integrity": "sha512-xYz9goEyBnC8XwXDTuC/MZ6t+MrKVQZOk4s7+PaDkwIsQd8IwqvM+0M6bA/2lvG8GHXcPdf+MejTUeO2LCPCeQ==", - "dev": true, - "requires": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" - } - }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", - "dev": true - }, - "https-proxy-agent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", - "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", - "dev": true, - "requires": { - "agent-base": "5", - "debug": "4" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", - "dev": true - }, - "iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "import-lazy": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-3.1.0.tgz", - "integrity": "sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ==", - "dev": true - }, - "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": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "dev": true, - "requires": { - "repeating": "^2.0.0" - } - }, - "indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", - "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==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true - }, - "into-stream": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", - "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=", - "dev": true, - "requires": { - "from2": "^2.1.1", - "p-is-promise": "^1.1.0" - } - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dev": true, - "requires": { - "loose-envify": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "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==", - "dev": true, - "requires": { - "ci-info": "^1.5.0" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "is-docker": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.0.0.tgz", - "integrity": "sha512-pJEdRugimx4fBMra5z2/5iRdZ63OhYV0vr0Dwm5+xtW4D1FvRkB8hamMIhnWfyJeDdyr/aa7BDyNbtG38VxgoQ==", - "dev": true - }, - "is-es2016-keyword": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-es2016-keyword/-/is-es2016-keyword-1.0.0.tgz", - "integrity": "sha1-9uVOEQxeT40mXmnS7Q6vjPX0dxg=", - "dev": true - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-finite": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", - "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", - "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 - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "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, - "requires": { - "global-dirs": "^0.1.0", - "is-path-inside": "^1.0.0" - } - }, - "is-natural-number": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", - "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=", - "dev": true - }, - "is-npm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", - "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "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-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", - "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=", - "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=", - "dev": true, - "requires": { - "path-is-inside": "^1.0.1" - } - }, - "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-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "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 - }, - "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 - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "requires": { - "is-docker": "^2.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isbinaryfile": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.6.tgz", - "integrity": "sha512-ORrEy+SNVqUhrCaal4hA4fBzhggQQ+BaLntyPOdoEiwlKZW9BZiJXjg3RMiruE4tPEI3pyVPpySHQF/dKWperg==", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "isomorphic-fetch": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz", - "integrity": "sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==", - "dev": true, - "requires": { - "node-fetch": "^2.6.1", - "whatwg-fetch": "^3.4.1" - }, - "dependencies": { - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dev": true, - "requires": { - "whatwg-url": "^5.0.0" - } - } - } - }, - "istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", - "dev": true, - "requires": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "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 - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", - "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "rimraf": "^2.6.3", - "source-map": "^0.6.1" - }, - "dependencies": { - "istanbul-lib-coverage": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", - "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "isurl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", - "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", - "dev": true, - "requires": { - "has-to-string-tag-x": "^1.2.0", - "is-object": "^1.0.1" - } - }, - "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": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "requires": { - "argparse": "^2.0.1" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", - "dev": true - }, - "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 - }, - "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", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "karma": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/karma/-/karma-5.2.3.tgz", - "integrity": "sha512-tHdyFADhVVPBorIKCX8A37iLHxc6RBRphkSoQ+MLKdAtFn1k97tD8WUGi1KlEtDZKL3hui0qhsY9HXUfSNDYPQ==", - "dev": true, - "requires": { - "body-parser": "^1.19.0", - "braces": "^3.0.2", - "chokidar": "^3.4.2", - "colors": "^1.4.0", - "connect": "^3.7.0", - "di": "^0.0.1", - "dom-serialize": "^2.2.1", - "glob": "^7.1.6", - "graceful-fs": "^4.2.4", - "http-proxy": "^1.18.1", - "isbinaryfile": "^4.0.6", - "lodash": "^4.17.19", - "log4js": "^6.2.1", - "mime": "^2.4.5", - "minimatch": "^3.0.4", - "qjobs": "^1.2.0", - "range-parser": "^1.2.1", - "rimraf": "^3.0.2", - "socket.io": "^2.3.0", - "source-map": "^0.6.1", - "tmp": "0.2.1", - "ua-parser-js": "0.7.22", - "yargs": "^15.3.1" - }, - "dependencies": { - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "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 - }, - "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" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "requires": { - "rimraf": "^3.0.0" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "ua-parser-js": { - "version": "0.7.22", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.22.tgz", - "integrity": "sha512-YUxzMjJ5T71w6a8WWVcMGM6YWOTX27rCoIQgLXiWaxqXSx9D7DNjiGWn1aJIRSQ5qr0xuhra77bSIh6voR/46Q==", - "dev": true - } - } - }, - "karma-chrome-launcher": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.0.tgz", - "integrity": "sha512-3dPs/n7vgz1rxxtynpzZTvb9y/GIaW8xjAwcIGttLbycqoFtI7yo1NGnQi6oFTherRE+GIhCAHZC4vEqWGhNvg==", - "dev": true, - "requires": { - "which": "^1.2.1" - } - }, - "karma-cli": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/karma-cli/-/karma-cli-2.0.0.tgz", - "integrity": "sha512-1Kb28UILg1ZsfqQmeELbPzuEb5C6GZJfVIk0qOr8LNYQuYWmAaqP16WpbpKEjhejDrDYyYOwwJXSZO6u7q5Pvw==", - "dev": true, - "requires": { - "resolve": "^1.3.3" - } - }, - "karma-coverage-istanbul-reporter": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-3.0.3.tgz", - "integrity": "sha512-wE4VFhG/QZv2Y4CdAYWDbMmcAHeS926ZIji4z+FkB2aF/EposRb6DP6G5ncT/wXhqUfAb/d7kZrNKPonbvsATw==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^3.0.6", - "istanbul-reports": "^3.0.2", - "minimatch": "^3.0.4" - } - }, - "karma-edge-launcher": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/karma-edge-launcher/-/karma-edge-launcher-0.4.2.tgz", - "integrity": "sha512-YAJZb1fmRcxNhMIWYsjLuxwODBjh2cSHgTW/jkVmdpGguJjLbs9ZgIK/tEJsMQcBLUkO+yO4LBbqYxqgGW2HIw==", - "dev": true, - "requires": { - "edge-launcher": "1.2.2" - } - }, - "karma-firefox-launcher": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/karma-firefox-launcher/-/karma-firefox-launcher-1.3.0.tgz", - "integrity": "sha512-Fi7xPhwrRgr+94BnHX0F5dCl1miIW4RHnzjIGxF8GaIEp7rNqX7LSi7ok63VXs3PS/5MQaQMhGxw+bvD+pibBQ==", - "dev": true, - "requires": { - "is-wsl": "^2.1.0" - } - }, - "karma-ie-launcher": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/karma-ie-launcher/-/karma-ie-launcher-1.0.0.tgz", - "integrity": "sha1-SXmGhCxJAZA0bNifVJTKmDDG1Zw=", - "dev": true, - "requires": { - "lodash": "^4.6.1" - } - }, - "karma-mocha": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/karma-mocha/-/karma-mocha-2.0.1.tgz", - "integrity": "sha512-Tzd5HBjm8his2OA4bouAsATYEpZrp9vC7z5E5j4C5Of5Rrs1jY67RAwXNcVmd/Bnk1wgvQRou0zGVLey44G4tQ==", - "dev": true, - "requires": { - "minimist": "^1.2.3" - } - }, - "karma-safari-launcher": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/karma-safari-launcher/-/karma-safari-launcher-1.0.0.tgz", - "integrity": "sha1-lpgqLMR9BmquccVTursoMZEVos4=", - "dev": true - }, - "karma-sauce-launcher": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/karma-sauce-launcher/-/karma-sauce-launcher-4.1.5.tgz", - "integrity": "sha512-X6/1IaUTOhbSuw+Y8ea8/1fAHsIbitDosJVnxqC0ZxIlDQMM4/U0WbETtCIbwUDoa89jwM3alfDs5RTRUW5mJw==", - "dev": true, - "requires": { - "global-agent": "^2.1.8", - "saucelabs": "^4.3.0", - "webdriverio": "^6.1.9" - } - }, - "karma-verbose-reporter": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/karma-verbose-reporter/-/karma-verbose-reporter-0.0.6.tgz", - "integrity": "sha1-WQkFJFHGB/Aqx3x2N5Gi/hJRJgw=", - "dev": true, - "requires": { - "colors": ">=1.0" - } - }, - "karma-webpack": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/karma-webpack/-/karma-webpack-4.0.2.tgz", - "integrity": "sha512-970/okAsdUOmiMOCY8sb17A2I8neS25Ad9uhyK3GHgmRSIFJbDcNEFE8dqqUhNe9OHiCC9k3DMrSmtd/0ymP1A==", - "dev": true, - "requires": { - "clone-deep": "^4.0.1", - "loader-utils": "^1.1.0", - "neo-async": "^2.6.1", - "schema-utils": "^1.0.0", - "source-map": "^0.7.3", - "webpack-dev-middleware": "^3.7.0" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - }, - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - } - } - }, - "keyv": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", - "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", - "dev": true, - "requires": { - "json-buffer": "3.0.0" - } - }, - "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 - }, - "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, - "requires": { - "package-json": "^4.0.0" - } - }, - "lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", - "dev": true, - "requires": { - "readable-stream": "^2.0.5" - } - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true - }, - "levenary": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.1.tgz", - "integrity": "sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==", - "dev": true, - "requires": { - "leven": "^3.1.0" - } - }, - "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" - } - }, - "lighthouse-logger": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.2.0.tgz", - "integrity": "sha512-wzUvdIeJZhRsG6gpZfmSCfysaxNEr43i+QT+Hie94wvHDKFLi4n7C2GqZ4sTC+PH5b5iktmXJvU87rWvhP3lHw==", - "dev": true, - "requires": { - "debug": "^2.6.8", - "marky": "^1.2.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "load-yaml-file": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/load-yaml-file/-/load-yaml-file-0.1.1.tgz", - "integrity": "sha512-G910TofXH7u0NfslAzqv6c9pHpvBzObNOo2hMG0/KUDpdHeFY0wE/fTBMExt0Gb12gg5bXS7Hj6pb0e+xbBXLA==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.5", - "js-yaml": "^3.13.0", - "pify": "^2.3.0", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - } - } - }, - "loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", - "dev": true - }, - "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "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, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.19", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", - "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", - "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=", - "dev": true - }, - "lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", - "dev": true - }, - "lodash.difference": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", - "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=", - "dev": true - }, - "lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", - "dev": true - }, - "lodash.isobject": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-3.0.2.tgz", - "integrity": "sha1-PI+41bW/S/kK4G4U8qUwpO2TXh0=", - "dev": true - }, - "lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", - "dev": true - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "lodash.toarray": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz", - "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=", - "dev": true - }, - "lodash.union": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", - "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=", - "dev": true - }, - "lodash.zip": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.zip/-/lodash.zip-4.2.0.tgz", - "integrity": "sha1-7GZi5IlkCO1KtsVCo5kLcswIACA=", - "dev": true - }, - "log-symbols": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", - "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", - "dev": true, - "requires": { - "chalk": "^4.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 - }, - "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" - } - } - } - }, - "log4js": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.3.0.tgz", - "integrity": "sha512-Mc8jNuSFImQUIateBFwdOQcmC6Q5maU0VVvdC2R6XMb66/VnT+7WS4D/0EeNMZu1YODmJe5NIn2XftCzEocUgw==", - "dev": true, - "requires": { - "date-format": "^3.0.0", - "debug": "^4.1.1", - "flatted": "^2.0.1", - "rfdc": "^1.1.4", - "streamroller": "^2.2.4" - }, - "dependencies": { - "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", - "dev": true - } - } - }, - "loglevel": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.8.tgz", - "integrity": "sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA==", - "dev": true - }, - "loglevel-plugin-prefix": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz", - "integrity": "sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==", - "dev": true - }, - "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": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", - "dev": true, - "requires": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.0" - } - }, - "lower-case": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.1.tgz", - "integrity": "sha512-LiWgfDLLb1dwbFQZsSglpRj+1ctGnayXz3Uv0/WO8n558JycT5fg6zkNcnW0G68Nn0aEldTFeEfmjCfmqry/rQ==", - "dev": true, - "requires": { - "tslib": "^1.10.0" - } - }, - "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 - }, - "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, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "marky": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.1.tgz", - "integrity": "sha512-md9k+Gxa3qLH6sUKpeC2CNkJK/Ld+bEz5X96nYwloqphQE0CKCVEKco/6jxEZixinqNdz5RFi/KaCyfbMDMAXQ==", - "dev": true - }, - "matcher": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", - "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", - "dev": true, - "requires": { - "escape-string-regexp": "^4.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - } - } - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true - }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "dev": true, - "requires": { - "camelcase-keys": "^2.0.0", - "decamelize": "^1.1.2", - "loud-rejection": "^1.0.0", - "map-obj": "^1.0.1", - "minimist": "^1.1.3", - "normalize-package-data": "^2.3.4", - "object-assign": "^4.0.1", - "read-pkg-up": "^1.0.1", - "redent": "^1.0.0", - "trim-newlines": "^1.0.0" - } - }, - "merge-source-map": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", - "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", - "dev": true, - "requires": { - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } - } - }, - "mime": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", - "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==", - "dev": true - }, - "mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", - "dev": true - }, - "mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", - "dev": true, - "requires": { - "mime-db": "1.44.0" - } - }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "dev": true, - "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - } - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "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, - "requires": { - "minimist": "^1.2.5" - } - }, - "mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true - }, - "mocha": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.2.1.tgz", - "integrity": "sha512-cuLBVfyFfFqbNR0uUKbDGXKGk+UDFe6aR4os78XIrMQpZl/nv7JYHcvP5MFIAb374b2zFXsdgEGwmzMtP0Xg8w==", - "dev": true, - "requires": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.4.3", - "debug": "4.2.0", - "diff": "4.0.2", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.1.6", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "3.14.0", - "log-symbols": "4.0.0", - "minimatch": "3.0.4", - "ms": "2.1.2", - "nanoid": "3.1.12", - "serialize-javascript": "5.0.1", - "strip-json-comments": "3.1.1", - "supports-color": "7.2.0", - "which": "2.0.2", - "wide-align": "1.1.3", - "workerpool": "6.0.2", - "yargs": "13.3.2", - "yargs-parser": "13.1.2", - "yargs-unparser": "2.0.0" - }, - "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==", - "dev": true - }, - "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 - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "chokidar": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz", - "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==", - "dev": true, - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.1.2", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" - } - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "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 - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "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 - }, - "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 - }, - "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 - }, - "js-yaml": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", - "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "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, - "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", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.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==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "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, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - }, - "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==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "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, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "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, - "requires": { - "p-try": "^2.0.0" - } - }, - "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, - "requires": { - "p-limit": "^2.0.0" - } - }, - "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 - } - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", - "dev": true, - "requires": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "nan": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", - "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", - "dev": true, - "optional": true - }, - "nanoid": { - "version": "3.1.12", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.12.tgz", - "integrity": "sha512-1qstj9z5+x491jfiC4Nelk+f8XBad7LN20PmyWINJEMRSf3wcAjAWysw1qaA8z6NSKe2sjq1hRSDpBH5paCb6A==", - "dev": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } - }, - "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 - }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", - "dev": true - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "no-case": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.3.tgz", - "integrity": "sha512-ehY/mVQCf9BL0gKfsJBvFJen+1V//U+0HQMPrWct40ixE4jnv0bfvxDbWtAHL9EcaPEOJHVVYKoQn1TlZUB8Tw==", - "dev": true, - "requires": { - "lower-case": "^2.0.1", - "tslib": "^1.10.0" - } - }, - "node-abort-controller": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.0.1.tgz", - "integrity": "sha512-/ujIVxthRs+7q6hsdjHMaj8hRG9NuWmwrz+JdRwZ14jdFoKSkm+vDsCbF9PLpnSqjaWQJuTmVtcWHNLr+vrOFw==", - "dev": true - }, - "node-emoji": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz", - "integrity": "sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==", - "dev": true, - "requires": { - "lodash.toarray": "^4.4.0" - } - }, - "node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "dev": true, - "requires": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - }, - "dependencies": { - "buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - } - } - }, - "node-releases": { - "version": "1.1.59", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.59.tgz", - "integrity": "sha512-H3JrdUczbdiwxN5FuJPyCHnGHIFqQ0wWxo+9j1kAXAzqNMAHlo+4I/sYYxpyK0irQ73HgdiyzD32oqQDcU2Osw==", - "dev": true - }, - "node-sass-tilde-importer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/node-sass-tilde-importer/-/node-sass-tilde-importer-1.0.2.tgz", - "integrity": "sha512-Swcmr38Y7uB78itQeBm3mThjxBy9/Ah/ykPIaURY/L6Nec9AyRoL/jJ7ECfMR+oZeCTVQNxVMu/aHU+TLRVbdg==", - "dev": true, - "requires": { - "find-parent-dir": "^0.3.0" - } - }, - "noms": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/noms/-/noms-0.0.0.tgz", - "integrity": "sha512-lNDU9VJaOPxUmXcLb+HQFeUgQQPtMI24Gt6hgfuMHRJgMRHMF/qZ4HJD3GDru4sSw9IQl2jPjAYnQrdIeLbwow==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "~1.0.31" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", - "dev": true - } - } - }, - "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, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "normalize-url": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", - "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", - "dev": true, - "requires": { - "prepend-http": "^2.0.0", - "query-string": "^5.0.1", - "sort-keys": "^2.0.0" - }, - "dependencies": { - "sort-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", - "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", - "dev": true, - "requires": { - "is-plain-obj": "^1.0.0" - } - } - } - }, - "npm-check": { - "version": "5.9.2", - "resolved": "https://registry.npmjs.org/npm-check/-/npm-check-5.9.2.tgz", - "integrity": "sha512-YlTZGP1A8+Rad5wldGil9STYxgZpZl18X6GZI03f4Ch6qTI1TLHIYM0ISco19qgg8M3UHfooEqMfYOpOkF3AeA==", - "dev": true, - "requires": { - "babel-runtime": "^6.6.1", - "callsite-record": "^3.0.0", - "chalk": "^1.1.3", - "co": "^4.6.0", - "depcheck": "0.8.3", - "execa": "^0.2.2", - "giturl": "^1.0.0", - "global-modules": "^1.0.0", - "globby": "^4.0.0", - "inquirer": "^0.12.0", - "is-ci": "^1.0.8", - "lodash": "^4.17.15", - "meow": "^3.7.0", - "minimatch": "^3.0.2", - "node-emoji": "^1.0.3", - "ora": "^0.2.1", - "package-json": "^4.0.1", - "path-exists": "^2.1.0", - "pkg-dir": "^1.0.0", - "preferred-pm": "^1.0.1", - "semver": "^5.0.1", - "semver-diff": "^2.0.0", - "text-table": "^0.2.0", - "throat": "^2.0.2", - "update-notifier": "^2.1.0", - "xtend": "^4.0.1" - }, - "dependencies": { - "ansi-escapes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", - "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", - "dev": true - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "^1.0.1" - } - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "cli-cursor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", - "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", - "dev": true, - "requires": { - "restore-cursor": "^1.0.1" - } - }, - "cli-width": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", - "dev": true - }, - "execa": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.2.2.tgz", - "integrity": "sha1-4urUcsLDGq1vc/GslW7vReEjIMs=", - "dev": true, - "requires": { - "cross-spawn-async": "^2.1.1", - "npm-run-path": "^1.0.0", - "object-assign": "^4.0.1", - "path-key": "^1.0.0", - "strip-eof": "^1.0.0" - } - }, - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" - } - }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", - "dev": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "globby": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-4.1.0.tgz", - "integrity": "sha1-CA9UVJ7BuCpsYOYx/ILhIR2+lfg=", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "arrify": "^1.0.0", - "glob": "^6.0.1", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "inquirer": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", - "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=", - "dev": true, - "requires": { - "ansi-escapes": "^1.1.0", - "ansi-regex": "^2.0.0", - "chalk": "^1.0.0", - "cli-cursor": "^1.0.1", - "cli-width": "^2.0.0", - "figures": "^1.3.5", - "lodash": "^4.3.0", - "readline2": "^1.0.1", - "run-async": "^0.1.0", - "rx-lite": "^3.1.2", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.0", - "through": "^2.3.6" - } - }, - "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, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "npm-run-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-1.0.0.tgz", - "integrity": "sha1-9cMr9ZX+ga6Sfa7FLoL4sACsPI8=", - "dev": true, - "requires": { - "path-key": "^1.0.0" - } - }, - "onetime": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", - "dev": true - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "path-key": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-1.0.0.tgz", - "integrity": "sha1-XVPVeAGWRsDWiADbThRua9wqx68=", - "dev": true - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "pkg-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", - "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", - "dev": true, - "requires": { - "find-up": "^1.0.0" - } - }, - "restore-cursor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", - "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", - "dev": true, - "requires": { - "exit-hook": "^1.0.0", - "onetime": "^1.0.0" - } - }, - "run-async": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", - "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", - "dev": true, - "requires": { - "once": "^1.3.0" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "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, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "npm-conf": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", - "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", - "dev": true, - "requires": { - "config-chain": "^1.1.11", - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "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, - "requires": { - "path-key": "^2.0.0" - } - }, - "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 - }, - "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 - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "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-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "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" - } - }, - "ora": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/ora/-/ora-0.2.3.tgz", - "integrity": "sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q=", - "dev": true, - "requires": { - "chalk": "^1.1.1", - "cli-cursor": "^1.0.2", - "cli-spinners": "^0.1.2", - "object-assign": "^4.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "cli-cursor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", - "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", - "dev": true, - "requires": { - "restore-cursor": "^1.0.1" - } - }, - "onetime": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", - "dev": true - }, - "restore-cursor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", - "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", - "dev": true, - "requires": { - "exit-hook": "^1.0.0", - "onetime": "^1.0.0" - } - }, - "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, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", - "dev": true - }, - "os-filter-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-2.0.0.tgz", - "integrity": "sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg==", - "dev": true, - "requires": { - "arch": "^2.1.0" - } - }, - "p-cancelable": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", - "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==", - "dev": true - }, - "p-event": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-2.3.1.tgz", - "integrity": "sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==", - "dev": true, - "requires": { - "p-timeout": "^2.0.1" - } - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-is-promise": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", - "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", - "dev": true - }, - "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, - "requires": { - "p-try": "^2.0.0" - } - }, - "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, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-timeout": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", - "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", - "dev": true, - "requires": { - "p-finally": "^1.0.0" - } - }, - "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 - }, - "package-json": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", - "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", - "dev": true, - "requires": { - "got": "^6.7.1", - "registry-auth-token": "^3.0.1", - "registry-url": "^3.0.3", - "semver": "^5.1.0" - }, - "dependencies": { - "got": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", - "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", - "dev": true, - "requires": { - "create-error-class": "^3.0.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-redirect": "^1.0.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "lowercase-keys": "^1.0.0", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "unzip-response": "^2.0.1", - "url-parse-lax": "^1.0.0" - } - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "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, - "requires": { - "prepend-http": "^1.0.1" - } - } - } - }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, - "parallel-transform": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", - "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", - "dev": true, - "requires": { - "cyclist": "^1.0.1", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - } - }, - "param-case": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.3.tgz", - "integrity": "sha512-VWBVyimc1+QrzappRs7waeN2YmoZFCGXWASRYX1/rGHtXqEcrGEIDm+jqIwFa2fRXNgQEwrxaYuIrX0WcAguTA==", - "dev": true, - "requires": { - "dot-case": "^3.0.3", - "tslib": "^1.10.0" - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-asn1": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz", - "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==", - "dev": true, - "requires": { - "asn1.js": "^4.0.0", - "browserify-aes": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", - "dev": true - }, - "parseqs": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", - "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==", - "dev": true - }, - "parseuri": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", - "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==", - "dev": true - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true - }, - "pascal-case": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.1.tgz", - "integrity": "sha512-XIeHKqIrsquVTQL2crjq3NfJUxmdLasn3TYOU0VBM+UX2a6ztAWBlJQBePLGY7VHW8+2dRadeIPK5+KImwTxQA==", - "dev": true, - "requires": { - "no-case": "^3.0.3", - "tslib": "^1.10.0" - } - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", - "dev": true - }, - "path-case": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/path-case/-/path-case-3.0.3.tgz", - "integrity": "sha512-UMFU6UETFpCNWbIWNczshPrnK/7JAXBP2NYw80ojElbQ2+JYxdqWDBkvvqM93u4u6oLmuJ/tPOf2tM8KtXv4eg==", - "dev": true, - "requires": { - "dot-case": "^3.0.3", - "tslib": "^1.10.0" - } - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true, - "optional": true - }, - "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 - }, - "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 - }, - "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 - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "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==", - "dev": true - }, - "pathval": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", - "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", - "dev": true - }, - "pbkdf2": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", - "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", - "dev": true, - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.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" - } - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "preferred-pm": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/preferred-pm/-/preferred-pm-1.0.1.tgz", - "integrity": "sha512-9Uxgin5Xnsl67DBvlNFsmDIlBuG9/XKK2cVBTj//7/7wW6ZY+IC9/GlLqxyHABpoasAsJ1MARFOdYPxMUtndxA==", - "dev": true, - "requires": { - "path-exists": "^3.0.0", - "which-pm": "^1.0.1" - } - }, - "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 - }, - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", - "dev": true - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "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 - }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", - "dev": true - }, - "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 - }, - "proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "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==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, - "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - }, - "dependencies": { - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "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 - }, - "puppeteer-core": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-5.2.0.tgz", - "integrity": "sha512-+gG1mW4ve7e4f1H18KWyEdbSc5Sb9+zxGBlb6CCclCf5rDsuPhYubTfOWJZB4L759D4XDtf04GOp+lmTmd61Nw==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "devtools-protocol": "0.0.767361", - "extract-zip": "^2.0.0", - "https-proxy-agent": "^4.0.0", - "mime": "^2.0.3", - "pkg-dir": "^4.2.0", - "progress": "^2.0.1", - "proxy-from-env": "^1.0.0", - "rimraf": "^3.0.2", - "tar-fs": "^2.0.0", - "unbzip2-stream": "^1.3.3", - "ws": "^7.2.3" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "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" - } - } - } - }, - "qjobs": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", - "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", - "dev": true - }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "dev": true - }, - "query-string": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", - "dev": true, - "requires": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - } - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true - }, - "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", - "dev": true, - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "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 - } - } - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - }, - "dependencies": { - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - }, - "dependencies": { - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - } - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "readline2": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", - "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "mute-stream": "0.0.5" - }, - "dependencies": { - "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, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "mute-stream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", - "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=", - "dev": true - } - } - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true, - "requires": { - "resolve": "^1.1.6" - } - }, - "redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", - "dev": true, - "requires": { - "indent-string": "^2.1.0", - "strip-indent": "^1.0.1" - } - }, - "regenerate": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz", - "integrity": "sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A==", - "dev": true - }, - "regenerate-unicode-properties": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", - "dev": true, - "requires": { - "regenerate": "^1.4.0" - } - }, - "regenerator-runtime": { - "version": "0.13.5", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", - "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==", - "dev": true - }, - "regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.8.4" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", - "dev": true - }, - "regexpu-core": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz", - "integrity": "sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==", - "dev": true, - "requires": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.2.0", - "regjsgen": "^0.5.1", - "regjsparser": "^0.6.4", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.2.0" - } - }, - "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, - "requires": { - "rc": "^1.1.6", - "safe-buffer": "^5.0.1" - } - }, - "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, - "requires": { - "rc": "^1.0.1" - } - }, - "regjsgen": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", - "dev": true - }, - "regjsparser": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", - "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - } - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true, - "optional": true - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "requires": { - "is-finite": "^1.0.0" - } - }, - "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 - }, - "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 - }, - "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 - }, - "require-package-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/require-package-name/-/require-package-name-2.0.1.tgz", - "integrity": "sha1-wR6XJ2tluOKSP3Xav1+y7ww4Qbk=", - "dev": true - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true - }, - "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - }, - "resolve-alpn": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.0.0.tgz", - "integrity": "sha512-rTuiIEqFmGxne4IovivKSDzld2lWW9QCjqv80SYjPgf+gS35eaCAjaP54CCwGAwBtnCsvNLYtqxe1Nw+i6JEmA==", - "dev": true - }, - "resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", - "dev": true, - "requires": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - } - }, - "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 - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", - "dev": true, - "requires": { - "lowercase-keys": "^1.0.0" - } - }, - "resq": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/resq/-/resq-1.7.1.tgz", - "integrity": "sha512-09u9Q5SAuJfAW5UoVAmvRtLvCOMaKP+djiixTXsZvPaojGKhuvc0Nfvp84U1rIfopJWEOXi5ywpCFwCk7mj8Xw==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1" - }, - "dependencies": { - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - } - } - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rfdc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.2.0.tgz", - "integrity": "sha512-ijLyszTMmUrXvjSooucVQwimGUk84eRcmCuLV8Xghe3UO85mjUtRAHRyoMM6XtyqbECaXuBWx18La3523sXINA==", - "dev": true - }, - "rgb2hex": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/rgb2hex/-/rgb2hex-0.2.0.tgz", - "integrity": "sha512-cHdNTwmTMPu/TpP1bJfdApd6MbD+Kzi4GNnM6h35mdFChhQPSi9cAI8J7DMn5kQDKX8NuBaQXAyo360Oa7tOEA==", - "dev": true - }, - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "roarr": { - "version": "2.15.3", - "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.3.tgz", - "integrity": "sha512-AEjYvmAhlyxOeB9OqPUzQCo3kuAkNfuDk/HqWbZdFsqDFpapkTjiw+p4svNEoRLvuqNTxqfL+s+gtD4eDgZ+CA==", - "dev": true, - "requires": { - "boolean": "^3.0.0", - "detect-node": "^2.0.4", - "globalthis": "^1.0.1", - "json-stringify-safe": "^5.0.1", - "semver-compare": "^1.0.0", - "sprintf-js": "^1.1.2" - }, - "dependencies": { - "sprintf-js": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", - "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", - "dev": true - } - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", - "dev": true, - "requires": { - "aproba": "^1.1.1" - } - }, - "rx-lite": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", - "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=", - "dev": true - }, - "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 - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "saucelabs": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-4.4.3.tgz", - "integrity": "sha512-CA+p+P4a8yNIXerJ2HPFNkkmkblENL5CKWjjk0OqNfHVDAxfDoq6CJKeJByBTNOu90OtqA2sWAji9PsH/XoBEg==", - "dev": true, - "requires": { - "bin-wrapper": "^4.1.0", - "change-case": "^4.1.1", - "form-data": "^3.0.0", - "got": "^11.1.4", - "hash.js": "^1.1.7", - "tunnel": "0.0.6", - "yargs": "^15.3.1" - } - }, - "schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - } - }, - "seek-bzip": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz", - "integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=", - "dev": true, - "requires": { - "commander": "~2.8.1" - } - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "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": "2.1.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", - "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", - "dev": true, - "requires": { - "semver": "^5.0.3" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "semver-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz", - "integrity": "sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==", - "dev": true - }, - "semver-truncate": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-1.1.2.tgz", - "integrity": "sha1-V/Qd5pcHpicJp+AQS6IRcQnqR+g=", - "dev": true, - "requires": { - "semver": "^5.3.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "sentence-case": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-3.0.3.tgz", - "integrity": "sha512-ZPr4dgTcNkEfcGOMFQyDdJrTU9uQO1nb1cjf+nuzb6FxgMDgKddZOM29qEsB7jvsZSMruLRcL2KfM4ypKpa0LA==", - "dev": true, - "requires": { - "no-case": "^3.0.3", - "tslib": "^1.10.0", - "upper-case-first": "^2.0.1" - } - }, - "serialize-error": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", - "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", - "dev": true, - "requires": { - "type-fest": "^0.13.1" - } - }, - "serialize-javascript": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-3.1.0.tgz", - "integrity": "sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "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 - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", - "dev": true - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", - "dev": true - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "requires": { - "kind-of": "^6.0.2" - } - }, - "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, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "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 - }, - "shelljs": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", - "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", - "dev": true, - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - } - }, - "shx": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/shx/-/shx-0.3.2.tgz", - "integrity": "sha512-aS0mWtW3T2sHAenrSrip2XGv39O9dXIFUqxAEWHEOS1ePtGIBavdPJY1kE2IHl14V/4iCbUiNDPGdyYTtmhSoA==", - "dev": true, - "requires": { - "es6-object-assign": "^1.0.3", - "minimist": "^1.2.0", - "shelljs": "^0.8.1" - } - }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "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" - }, - "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 - } - } - }, - "snake-case": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.3.tgz", - "integrity": "sha512-WM1sIXEO+rsAHBKjGf/6R1HBBcgbncKS08d2Aqec/mrDSpU80SiOU41hO7ny6DToHSyrlwTYzQBIK1FPSx4Y3Q==", - "dev": true, - "requires": { - "dot-case": "^3.0.3", - "tslib": "^1.10.0" - } - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "socket.io": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.4.1.tgz", - "integrity": "sha512-Si18v0mMXGAqLqCVpTxBa8MGqriHGQh8ccEOhmsmNS3thNCGBwO8WGrwMibANsWtQQ5NStdZwHqZR3naJVFc3w==", - "dev": true, - "requires": { - "debug": "~4.1.0", - "engine.io": "~3.5.0", - "has-binary2": "~1.0.2", - "socket.io-adapter": "~1.1.0", - "socket.io-client": "2.4.0", - "socket.io-parser": "~3.4.0" - } - }, - "socket.io-adapter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz", - "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==", - "dev": true - }, - "socket.io-client": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.4.0.tgz", - "integrity": "sha512-M6xhnKQHuuZd4Ba9vltCLT9oa+YvTsP8j9NcEiLElfIg8KeYPyhWOes6x4t+LTAC8enQbE/995AdTem2uNyKKQ==", - "dev": true, - "requires": { - "backo2": "1.0.2", - "component-bind": "1.0.0", - "component-emitter": "~1.3.0", - "debug": "~3.1.0", - "engine.io-client": "~3.5.0", - "has-binary2": "~1.0.2", - "indexof": "0.0.1", - "parseqs": "0.0.6", - "parseuri": "0.0.6", - "socket.io-parser": "~3.3.0", - "to-array": "0.1.4" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "socket.io-parser": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.2.tgz", - "integrity": "sha512-FJvDBuOALxdCI9qwRrO/Rfp9yfndRtc1jSgVgV8FDraihmSP/MLGD5PEuJrNfjALvcQ+vMDM/33AWOYP/JSjDg==", - "dev": true, - "requires": { - "component-emitter": "~1.3.0", - "debug": "~3.1.0", - "isarray": "2.0.1" - } - } - } - }, - "socket.io-parser": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.4.1.tgz", - "integrity": "sha512-11hMgzL+WCLWf1uFtHSNvliI++tcRUWdoeYuwIl+Axvwy9z2gQM+7nJyN3STj1tLj5JyIUH8/gpDGxzAlDdi0A==", - "dev": true, - "requires": { - "component-emitter": "1.2.1", - "debug": "~4.1.0", - "isarray": "2.0.1" - }, - "dependencies": { - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", - "dev": true - } - } - }, - "sort-keys": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", - "dev": true, - "requires": { - "is-plain-obj": "^1.0.0" - } - }, - "sort-keys-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", - "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=", - "dev": true, - "requires": { - "sort-keys": "^1.0.0" - } - }, - "source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "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 - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "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, - "requires": { - "figgy-pudding": "^3.5.1" - } - }, - "stackframe": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-0.3.1.tgz", - "integrity": "sha1-M6qE8Rd6VUjIk1Uzy/6zQgl19aQ=", - "dev": true - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true - }, - "stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "dev": true, - "requires": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "stream-each": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" - } - }, - "stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "dev": true, - "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", - "dev": true - }, - "streamroller": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-2.2.4.tgz", - "integrity": "sha512-OG79qm3AujAM9ImoqgWEY1xG4HX+Lw+yY6qZj9R1K2mhF5bEmQ849wvrb+4vt4jLMLzwXttJlQbOdPOQVRv7DQ==", - "dev": true, - "requires": { - "date-format": "^2.1.0", - "debug": "^4.1.1", - "fs-extra": "^8.1.0" - }, - "dependencies": { - "date-format": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.1.0.tgz", - "integrity": "sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==", - "dev": true - } - } - }, - "strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", - "dev": true - }, - "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, - "requires": { - "safe-buffer": "~5.1.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" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } - }, - "strip-dirs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", - "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", - "dev": true, - "requires": { - "is-natural-number": "^4.0.1" - } - }, - "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 - }, - "strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "dev": true, - "requires": { - "get-stdin": "^4.0.1" - } - }, - "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 - }, - "strip-outer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", - "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.2" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "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.0.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.0.3.tgz", - "integrity": "sha512-R50QRlXSxqXcQP5SvKUrw8VZeypvo12i2IX0EeR5PiZ7bEKeHWgzgo264LDadUsCU42lTJVhFikTqJwNeH34gQ==", - "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" - } - }, - "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 - }, - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", - "dev": true - } - } - }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true - }, - "tar-fs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.0.tgz", - "integrity": "sha512-9uW5iDvrIMCVpvasdFHW0wJPez0K4JnMZtsuIeDI7HyMGJNxmDZDOCQROr7lXyS+iL/QMpj07qcjGYTSdRFXUg==", - "dev": true, - "requires": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.0.0" - }, - "dependencies": { - "bl": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz", - "integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "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, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "tar-stream": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.3.tgz", - "integrity": "sha512-Z9yri56Dih8IaK8gncVPx4Wqt86NDmQTSh49XLZgjWpGZL9GK9HKParS2scqHCC4w6X9Gh2jwaU45V47XTKwVA==", - "dev": true, - "requires": { - "bl": "^4.0.1", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - } - } - } - }, - "tar-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", - "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", - "dev": true, - "requires": { - "bl": "^1.0.0", - "buffer-alloc": "^1.2.0", - "end-of-stream": "^1.0.0", - "fs-constants": "^1.0.0", - "readable-stream": "^2.3.0", - "to-buffer": "^1.1.1", - "xtend": "^4.0.0" - } - }, - "temp": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/temp/-/temp-0.9.1.tgz", - "integrity": "sha512-WMuOgiua1xb5R56lE0eH6ivpVmg/lq2OHm4+LtT/xtEtPQ+sz6N3bBM6WZ5FvO1lO4IKIOb43qnhoc4qxP5OeA==", - "dev": true, - "requires": { - "rimraf": "~2.6.2" - } - }, - "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, - "requires": { - "execa": "^0.7.0" - } - }, - "terser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "dependencies": { - "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 - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "terser-webpack-plugin": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.4.tgz", - "integrity": "sha512-U4mACBHIegmfoEe5fdongHESNJWqsGU+W0S/9+BmYGVQDw1+c2Ow05TpMhxjPK1sRb7cuYq1BPl1e5YHJMTCqA==", - "dev": true, - "requires": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^3.1.0", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" - }, - "dependencies": { - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - } - }, - "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 - }, - "throat": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/throat/-/throat-2.0.2.tgz", - "integrity": "sha1-qfzoCLaeEzpjJZB4DzQsMKYkmwI=", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "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 - }, - "timers-browserify": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", - "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", - "dev": true, - "requires": { - "setimmediate": "^1.0.4" - } - }, - "to-array": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", - "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", - "dev": true - }, - "to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", - "dev": true - }, - "to-buffer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", - "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", - "dev": true - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true - }, - "trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", - "dev": true - }, - "trim-repeated": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", - "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.2" - } - }, - "tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==", - "dev": true - }, - "tsutils": { - "version": "3.19.1", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.19.1.tgz", - "integrity": "sha512-GEdoBf5XI324lu7ycad7s6laADfnAqCw6wLGI+knxvw9vsIYBaJfYdmeCEG3FMMUiSm3OGgNb+m6utsWf5h9Vw==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, - "tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", - "dev": true - }, - "tunnel": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", - "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", - "dev": true - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "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-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - }, - "type-fest": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", - "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", - "dev": true - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "typescript": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.5.tgz", - "integrity": "sha512-ywmr/VrTVCmNTJ6iV2LwIrfG1P+lv6luD8sUJs+2eI9NLGigaN+nUQc13iHqisq7bra9lnmUSYqbJvegraBOPQ==", - "dev": true - }, - "ua-parser-js": { - "version": "0.7.21", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.21.tgz", - "integrity": "sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ==", - "dev": true - }, - "unbzip2-stream": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", - "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", - "dev": true, - "requires": { - "buffer": "^5.2.1", - "through": "^2.3.8" - } - }, - "unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", - "dev": true - }, - "unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", - "dev": true, - "requires": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", - "dev": true - }, - "unicode-property-aliases-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", - "dev": true - }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, - "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, - "requires": { - "unique-slug": "^2.0.0" - } - }, - "unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "unique-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", - "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", - "dev": true, - "requires": { - "crypto-random-string": "^1.0.0" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - } - } - }, - "untildify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", - "dev": true - }, - "unzip-response": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", - "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", - "dev": true - }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true, - "optional": 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==", - "dev": true, - "requires": { - "boxen": "^1.2.1", - "chalk": "^2.0.1", - "configstore": "^3.0.0", - "import-lazy": "^2.1.0", - "is-ci": "^1.0.10", - "is-installed-globally": "^0.1.0", - "is-npm": "^1.0.0", - "latest-version": "^3.0.0", - "semver-diff": "^2.0.0", - "xdg-basedir": "^3.0.0" - }, - "dependencies": { - "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 - } - } - }, - "upper-case": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-2.0.1.tgz", - "integrity": "sha512-laAsbea9SY5osxrv7S99vH9xAaJKrw5Qpdh4ENRLcaxipjKsiaBwiAsxfa8X5mObKNTQPsupSq0J/VIxsSJe3A==", - "dev": true, - "requires": { - "tslib": "^1.10.0" - } - }, - "upper-case-first": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-2.0.1.tgz", - "integrity": "sha512-105J8XqQ+9RxW3l9gHZtgve5oaiR9TIwvmZAMAIZWRHe00T21cdvewKORTlOJf/zXW6VukuTshM+HXZNWz7N5w==", - "dev": true, - "requires": { - "tslib": "^1.10.0" - } - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dev": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - } - } - }, - "url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", - "dev": true, - "requires": { - "prepend-http": "^2.0.0" - } - }, - "url-to-options": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", - "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=", - "dev": true - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "dev": true, - "requires": { - "inherits": "2.0.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - } - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true - }, - "uuid": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.2.0.tgz", - "integrity": "sha512-CYpGiFTUrmI6OBMkAdjSDM0k5h8SkkiTP4WAjQgDgNB1S3Ou9VBEvr6q0Kv2H1mMk7IWfxYGpMH5sd5AvcIV2Q==", - "dev": true - }, - "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 - }, - "v8-to-istanbul": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz", - "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" - } - }, - "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, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", - "dev": true - }, - "void-elements": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", - "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", - "dev": true - }, - "vue-template-compiler": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.11.tgz", - "integrity": "sha512-KIq15bvQDrcCjpGjrAhx4mUlyyHfdmTaoNfeoATHLAiWB+MU3cx4lOzMwrnUh9cCxy0Lt1T11hAFY6TQgroUAA==", - "dev": true, - "requires": { - "de-indent": "^1.0.2", - "he": "^1.1.0" - } - }, - "walkdir": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.3.2.tgz", - "integrity": "sha512-0Twghia4Z5wDGDYWURlhZmI47GvERMCsXIu0QZWVVZyW9ZjpbbZvD9Zy9M6cWiQQRRbAcYajIyKNavaZZDt1Uw==", - "dev": true - }, - "watchpack": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.2.tgz", - "integrity": "sha512-ymVbbQP40MFTp+cNMvpyBpBtygHnPzPkHqoIwRRj/0B8KhqQwV8LaKjtbaxF2lK4vl8zN9wCxS46IFCU5K4W0g==", - "dev": true, - "requires": { - "chokidar": "^3.4.0", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0", - "watchpack-chokidar2": "^2.0.0" - } - }, - "watchpack-chokidar2": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz", - "integrity": "sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==", - "dev": true, - "optional": true, - "requires": { - "chokidar": "^2.1.8" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "optional": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "optional": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true, - "optional": true - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, - "optional": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "optional": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "optional": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "optional": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "optional": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - } - } - }, - "webdriver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-6.3.0.tgz", - "integrity": "sha512-osHp5DX8eQ76Sy6/UYoECmDnUXwLhy5tlBeJh86er7S04FLAlmEqCvYXgxTSb8YtDjh9Xt9gP768RGhxR7ik5A==", - "dev": true, - "requires": { - "@wdio/config": "6.1.14", - "@wdio/logger": "6.0.16", - "@wdio/protocols": "6.3.0", - "@wdio/utils": "6.3.0", - "got": "^11.0.2", - "lodash.merge": "^4.6.1" - } - }, - "webdriverio": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-6.3.3.tgz", - "integrity": "sha512-/ahCs6sna4M+/GZ5RPh5LLTEzfh5+gJD0vOpmA4nmarpKjqnfuwtqTETjmQCfqKTjiLVwzqShnsAedbYuw9Q2g==", - "dev": true, - "requires": { - "@types/puppeteer": "^3.0.1", - "@wdio/config": "6.1.14", - "@wdio/logger": "6.0.16", - "@wdio/repl": "6.3.0", - "@wdio/utils": "6.3.0", - "archiver": "^4.0.1", - "atob": "^2.1.2", - "css-value": "^0.0.1", - "devtools": "6.3.3", - "get-port": "^5.1.1", - "grapheme-splitter": "^1.0.2", - "lodash.clonedeep": "^4.5.0", - "lodash.isobject": "^3.0.2", - "lodash.isplainobject": "^4.0.6", - "lodash.zip": "^4.2.0", - "minimatch": "^3.0.4", - "puppeteer-core": "^5.1.0", - "resq": "^1.6.0", - "rgb2hex": "^0.2.0", - "serialize-error": "^7.0.0", - "webdriver": "6.3.0" - } - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true - }, - "webpack": { - "version": "4.43.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.43.0.tgz", - "integrity": "sha512-GW1LjnPipFW2Y78OOab8NJlCflB7EFskMih2AHdvjbpKMeDJqEgSx24cXXXiPS65+WSwVyxtDsJH6jGX2czy+g==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/wasm-edit": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "^6.4.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.1.0", - "eslint-scope": "^4.0.3", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.3", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.6.1", - "webpack-sources": "^1.4.1" - }, - "dependencies": { - "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - } - } - }, - "webpack-dev-middleware": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz", - "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==", - "dev": true, - "requires": { - "memory-fs": "^0.4.1", - "mime": "^2.4.4", - "mkdirp": "^0.5.1", - "range-parser": "^1.2.1", - "webpack-log": "^2.0.0" - } - }, - "webpack-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", - "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", - "dev": true, - "requires": { - "ansi-colors": "^3.0.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - } - } - }, - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dev": true, - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "whatwg-fetch": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", - "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==", - "dev": true - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "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 - }, - "which-pm": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/which-pm/-/which-pm-1.1.0.tgz", - "integrity": "sha512-7GHHJQpALk7BWMD8I+xSILSbHyngvBlfSXlwGpdRFY2voFwVCx+eJAybXTzTnUYmt7zio6B9SEdI81T0fBjxNA==", - "dev": true, - "requires": { - "load-yaml-file": "^0.1.0", - "path-exists": "^3.0.0" - } - }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "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=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "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, - "requires": { - "string-width": "^2.1.1" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "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=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "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 - }, - "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, - "requires": { - "errno": "~0.1.7" - } - }, - "workerpool": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.0.2.tgz", - "integrity": "sha512-DSNyvOpFKrNusaaUwk+ej6cBj1bmhLcBfj80elGk+ZIo5JSkq+unB1dLKEOcNfJDZgjGICfhQ0Q5TbP0PvF4+Q==", - "dev": true - }, - "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" - }, - "dependencies": { - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "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 - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "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==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "ws": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.3.1.tgz", - "integrity": "sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA==", - "dev": true - }, - "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 - }, - "xmlhttprequest-ssl": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", - "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", - "dev": true - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "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==", - "dev": true - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - }, - "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - } - } - }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "requires": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "dependencies": { - "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "dev": true - }, - "decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true - }, - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true - } - } - }, - "yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", - "dev": true, - "requires": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, - "yeast": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", - "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", - "dev": true - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true - }, - "zip-stream": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-3.0.1.tgz", - "integrity": "sha512-r+JdDipt93ttDjsOVPU5zaq5bAyY+3H19bDrThkvuVxC0xMQzU1PJcS6D+KrP3u96gH9XLomcHPb+2skoDjulQ==", - "dev": true, - "requires": { - "archiver-utils": "^2.1.0", - "compress-commons": "^3.0.0", - "readable-stream": "^3.6.0" - }, - "dependencies": { - "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, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - } - } -} diff --git a/package.json b/package.json index e40ec1ce..433c32dc 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,10 @@ { "name": "Jakub Rożek", "email": "jakub@stoplight.io" + }, + { + "name": "JonLuca DeCaro", + "email": "apis@jonlu.ca" } ], "homepage": "https://apitools.dev/json-schema-ref-parser/", @@ -37,67 +41,62 @@ }, "license": "MIT", "funding": "https://github.com/sponsors/philsturgeon", - "main": "lib/index.js", - "typings": "lib/index.d.ts", - "exports": { - "types": "./lib/index.d.ts", - "require": "./cjs/index.js", - "default": "./lib/index.js" - }, + "types": "dist/lib/index.d.ts", + "main": "dist/lib/index.js", "browser": { "fs": false }, "engines": { - "node": ">= 17" + "node": ">= 16" }, "files": [ "lib", + "dist", "cjs" ], - "type": "module", "scripts": { - "build": "swc ./lib/*.js -d ./cjs && swc ./lib/**/*.js -d ./cjs && copyfiles ./lib/**/*.cjs -u 1 ./cjs && node ./scripts/writeCJSPackageJSON.cjs", - "clean": "shx rm -rf coverage cjs", - "lint": "eslint lib test/fixtures test/specs", - "test": "npm run test:node && npm run test:typescript && npm run test:browser && npm run lint", - "test:node": "mocha", - "test:browser": "cross-env NODE_OPTIONS=--openssl-legacy-provider karma start karma.conf.cjs --single-run", - "test:typescript": "tsc --noEmit --strict --lib esnext,dom test/specs/typescript-definition.spec.ts", - "coverage": "npm run coverage:node && npm run coverage:browser", - "coverage:node": "c8 node_modules/mocha/bin/mocha", - "coverage:browser": "npm run test:browser -- --coverage", - "upgrade": "npm-check -u && npm audit fix" + "prepublishOnly": "yarn build", + "lint": "eslint lib", + "build": "rm -fr dist/* && tsc", + "typecheck": "tsc --noEmit", + "prettier": "prettier --write \"**/*.+(js|jsx|ts|tsx|har||json|css|md)\"", + "test": "vitest --coverage", + "test:node": "yarn test", + "test:browser": "cross-env BROWSER=\"true\" yarn test", + "test:update": "vitest -u", + "test:watch": "vitest -w" }, "devDependencies": { - "@babel/polyfill": "^7.12.1", - "@chiragrupani/karma-chromium-edge-launcher": "^2.2.2", - "@jsdevtools/eslint-config": "^1.0.7", - "@jsdevtools/host-environment": "^2.1.2", - "@jsdevtools/karma-config": "^3.1.7", - "@swc/cli": "^0.1.59", - "@swc/core": "^1.3.25", - "@types/node": "^14.14.21", + "@types/eslint": "8.4.10", + "@types/js-yaml": "^4.0.5", + "@types/node": "^18.11.18", + "@typescript-eslint/eslint-plugin": "^5.48.2", + "@typescript-eslint/eslint-plugin-tslint": "^5.48.2", + "@typescript-eslint/parser": "^5.48.2", + "@vitest/coverage-c8": "^0.28.1", + "abortcontroller-polyfill": "^1.7.5", "c8": "^7.12.0", - "chai": "^4.2.0", - "chai-subset": "^1.6.0", - "chokidar": "^3.5.3", - "copyfiles": "^2.4.1", "cross-env": "^7.0.3", - "eslint": "^7.18.0", - "isomorphic-fetch": "^3.0.0", - "karma": "^5.0.2", - "karma-cli": "^2.0.0", - "mocha": "^8.2.1", - "node-abort-controller": "^3.0.1", - "npm-check": "^5.9.0", - "shx": "^0.3.2", - "typescript": "^4.0.5" + "eslint": "^8.32.0", + "eslint-config-prettier": "^8.6.0", + "eslint-config-standard": "^17.0.0", + "eslint-plugin-import": "^2.27.5", + "eslint-plugin-prettier": "^4.2.1", + "eslint-plugin-promise": "^6.1.1", + "eslint-plugin-unused-imports": "^2.0.0", + "jsdom": "^21.1.0", + "lint-staged": "^13.1.0", + "node-fetch": "^3.3.0", + "prettier": "^2.8.3", + "typescript": "^4.9.4", + "vitest": "^0.28.1" }, "dependencies": { "@jsdevtools/ono": "^7.1.3", - "@types/json-schema": "^7.0.6", - "call-me-maybe": "^1.0.1", - "js-yaml": "^4.1.0" + "@types/json-schema": "^7.0.11", + "@types/lodash.clonedeep": "^4.5.7", + "js-yaml": "^4.1.0", + "lodash.clonedeep": "^4.5.0" }, "release": { "branches": [ diff --git a/scripts/writeCJSPackageJSON.cjs b/scripts/writeCJSPackageJSON.cjs deleted file mode 100644 index 893c80aa..00000000 --- a/scripts/writeCJSPackageJSON.cjs +++ /dev/null @@ -1,7 +0,0 @@ -const { mkdirSync, writeFileSync } = require("fs"); -const { resolve } = require("path"); - -mkdirSync(resolve(__dirname, "../cjs"), { recursive: true }); - -const data = JSON.stringify({ type: "commonjs" }, null, " ") -writeFileSync(resolve(__dirname, "../cjs/package.json"), data, { encoding: "utf-8" }); diff --git a/test/specs/__({[ % & $ # @ ` ~ ,)}]__/__({[ % & $ # @ ` ~ ,)}]__.yaml b/test/__IGNORED__/__({[ % & $ # @ ` ~ ,)}]__/__({[ % & $ # @ ` ~ ,)}]__.yaml similarity index 100% rename from test/specs/__({[ % & $ # @ ` ~ ,)}]__/__({[ % & $ # @ ` ~ ,)}]__.yaml rename to test/__IGNORED__/__({[ % & $ # @ ` ~ ,)}]__/__({[ % & $ # @ ` ~ ,)}]__.yaml diff --git a/test/specs/__({[ % & $ # @ ` ~ ,)}]__/__({[ % & $ # @ ` ~ ,)}]__/__({[ % & $ # @ ` ~ ,)}]__.json b/test/__IGNORED__/__({[ % & $ # @ ` ~ ,)}]__/__({[ % & $ # @ ` ~ ,)}]__/__({[ % & $ # @ ` ~ ,)}]__.json similarity index 100% rename from test/specs/__({[ % & $ # @ ` ~ ,)}]__/__({[ % & $ # @ ` ~ ,)}]__/__({[ % & $ # @ ` ~ ,)}]__.json rename to test/__IGNORED__/__({[ % & $ # @ ` ~ ,)}]__/__({[ % & $ # @ ` ~ ,)}]__/__({[ % & $ # @ ` ~ ,)}]__.json diff --git a/test/specs/__({[ % & $ # @ ` ~ ,)}]__/dereferenced.js b/test/__IGNORED__/__({[ % & $ # @ ` ~ ,)}]__/dereferenced.ts similarity index 85% rename from test/specs/__({[ % & $ # @ ` ~ ,)}]__/dereferenced.js rename to test/__IGNORED__/__({[ % & $ # @ ` ~ ,)}]__/dereferenced.ts index f1bd33b5..d3419816 100644 --- a/test/specs/__({[ % & $ # @ ` ~ ,)}]__/dereferenced.js +++ b/test/__IGNORED__/__({[ % & $ # @ ` ~ ,)}]__/dereferenced.ts @@ -2,11 +2,11 @@ export default { definitions: { foo: { type: "object", - description: "Testing file/folder names with spaces and special characters" + description: "Testing file/folder names with spaces and special characters", }, "__<({[ % & $ # @ + = ? \\ / \" ' ' ` ~ , ; : >)}]__": { type: "object", - description: "Testing internal $refs with spaces and special characters" - } - } + description: "Testing internal $refs with spaces and special characters", + }, + }, }; diff --git a/test/specs/__({[ % & $ # @ ` ~ ,)}]__/parsed.js b/test/__IGNORED__/__({[ % & $ # @ ` ~ ,)}]__/parsed.ts similarity index 83% rename from test/specs/__({[ % & $ # @ ` ~ ,)}]__/parsed.js rename to test/__IGNORED__/__({[ % & $ # @ ` ~ ,)}]__/parsed.ts index 327c1a50..41316fab 100644 --- a/test/specs/__({[ % & $ # @ ` ~ ,)}]__/parsed.js +++ b/test/__IGNORED__/__({[ % & $ # @ ` ~ ,)}]__/parsed.ts @@ -2,24 +2,24 @@ export default { schema: { definitions: { foo: { - $ref: "__(%7B%5B%20%25%20%26%20%24%20%23%20%40%20%60%20~%20%2C)%7D%5D__/__(%7B%5B%20%25%20%26%20%24%20%23%20%40%20%60%20~%20%2C)%7D%5D__.json#/definitions/foo" + $ref: "__(%7B%5B%20%25%20%26%20%24%20%23%20%40%20%60%20~%20%2C)%7D%5D__/__(%7B%5B%20%25%20%26%20%24%20%23%20%40%20%60%20~%20%2C)%7D%5D__.json#/definitions/foo", }, "__<({[ % & $ # @ + = ? \\ / \" ' ' ` ~ , ; : >)}]__": { - $ref: "__(%7B%5B%20%25%20%26%20%24%20%23%20%40%20%60%20~%20%2C)%7D%5D__/__(%7B%5B%20%25%20%26%20%24%20%23%20%40%20%60%20~%20%2C)%7D%5D__.json#/definitions/__%3C(%7B%5B%20%25%20%26%20%24%20%23%20%40%20%2B%20%3D%20%3F%20%5C%20%2F%20%22%20'%20'%20%60%20~%20%2C%20%3B%20%3A%20%3E)%7D%5D__" - } - } + $ref: "__(%7B%5B%20%25%20%26%20%24%20%23%20%40%20%60%20~%20%2C)%7D%5D__/__(%7B%5B%20%25%20%26%20%24%20%23%20%40%20%60%20~%20%2C)%7D%5D__.json#/definitions/__%3C(%7B%5B%20%25%20%26%20%24%20%23%20%40%20%2B%20%3D%20%3F%20%5C%20%2F%20%22%20'%20'%20%60%20~%20%2C%20%3B%20%3A%20%3E)%7D%5D__", + }, + }, }, file: { definitions: { foo: { type: "object", - description: "Testing file/folder names with spaces and special characters" + description: "Testing file/folder names with spaces and special characters", }, "__<({[ % & $ # @ + = ? \\ / \" ' ' ` ~ , ; : >)}]__": { type: "object", - description: "Testing internal $refs with spaces and special characters" - } - } - } + description: "Testing internal $refs with spaces and special characters", + }, + }, + }, }; diff --git a/test/__IGNORED__/__({[ % & $ # @ ` ~ ,)}]__/special-characters.spec.ts b/test/__IGNORED__/__({[ % & $ # @ ` ~ ,)}]__/special-characters.spec.ts new file mode 100644 index 00000000..9f39c344 --- /dev/null +++ b/test/__IGNORED__/__({[ % & $ # @ ` ~ ,)}]__/special-characters.spec.ts @@ -0,0 +1,53 @@ +import $RefParser from "../../../lib"; +import helper from "../../utils/helper"; +import path from "../../utils/path"; +import { describe, it } from "vitest"; +import parsedSchema from "./parsed"; +import dereferencedSchema from "./dereferenced"; + +import { expect } from "vitest"; + +describe("File names with special characters", () => { + it("should parse successfully", async () => { + const parser = new $RefParser(); + const schema = await parser.parse( + path.rel("test/specs/__({[ % & $ # @ ` ~ ,)}]__/__({[ % & $ # @ ` ~ ,)}]__.yaml"), + ); + expect(schema).to.equal(parser.schema); + expect(schema).to.deep.equal(parsedSchema.schema); + expect(parser.$refs.paths()).to.deep.equal([ + path.abs("test/specs/__({[ % & $ # @ ` ~ ,)}]__/__({[ % & $ # @ ` ~ ,)}]__.yaml"), + ]); + }); + + it( + "should resolve successfully", + helper.testResolve( + path.rel("test/specs/__({[ % & $ # @ ` ~ ,)}]__/__({[ % & $ # @ ` ~ ,)}]__.yaml"), + path.abs("test/specs/__({[ % & $ # @ ` ~ ,)}]__/__({[ % & $ # @ ` ~ ,)}]__.yaml"), + parsedSchema.schema, + path.abs("test/specs/__({[ % & $ # @ ` ~ ,)}]__/__({[ % & $ # @ ` ~ ,)}]__/__({[ % & $ # @ ` ~ ,)}]__.json"), + parsedSchema.file, + ), + ); + + it("should dereference successfully", async () => { + const parser = new $RefParser(); + const schema = await parser.dereference( + path.rel("test/specs/__({[ % & $ # @ ` ~ ,)}]__/__({[ % & $ # @ ` ~ ,)}]__.yaml"), + ); + expect(schema).to.equal(parser.schema); + expect(schema).to.deep.equal(dereferencedSchema); + // The "circular" flag should NOT be set + expect(parser.$refs.circular).to.equal(false); + }); + + it("should bundle successfully", async () => { + const parser = new $RefParser(); + const schema = await parser.bundle( + path.rel("test/specs/__({[ % & $ # @ ` ~ ,)}]__/__({[ % & $ # @ ` ~ ,)}]__.yaml"), + ); + expect(schema).to.equal(parser.schema); + expect(schema).to.deep.equal(dereferencedSchema); + }); +}); diff --git a/test/fixtures/mocha.js b/test/fixtures/mocha.js deleted file mode 100644 index 5e758542..00000000 --- a/test/fixtures/mocha.js +++ /dev/null @@ -1,20 +0,0 @@ -const { host } = require("@jsdevtools/host-environment"); - -// Mocha configuration -if (host.browser) { - mocha.setup("bdd"); - mocha.fullTrace(); - mocha.asyncOnly(); - mocha.checkLeaks(); - mocha.globals(["$0", "$1", "$2", "$3", "$4", "$5"]); -} - -beforeEach(function () { - // Flag TravisCI and SauceLabs as being very slow environments - let isSlowEnvironment = host.ci || host.karma; - - // Most of our tests perform multiple AJAX requests, - // so we need to increase the timeouts to allow for that - this.currentTest.timeout(isSlowEnvironment ? 40000 : 4000); - this.currentTest.slow(1000); -}); diff --git a/test/fixtures/polyfill.js b/test/fixtures/polyfill.js deleted file mode 100644 index a252eec7..00000000 --- a/test/fixtures/polyfill.js +++ /dev/null @@ -1,18 +0,0 @@ -import { host } from "@jsdevtools/host-environment"; - -// Load the Babel Polyfills for old browsers. -// NOTE: It's important that we ONLY do this when needed, -// to ensure that our code works _without_ polyfills everywhere else -if (host.browser.IE) { - require("@babel/polyfill"); -} - -import("isomorphic-fetch").then(({ default: fetch }) => { - if (!globalThis.fetch) { - globalThis.fetch = fetch; - } -}); - -if (!globalThis.AbortController) { - globalThis.AbortController = require("node-abort-controller").AbortController; -} diff --git a/test/fixtures/polyfill.ts b/test/fixtures/polyfill.ts new file mode 100644 index 00000000..8b616b9a --- /dev/null +++ b/test/fixtures/polyfill.ts @@ -0,0 +1,10 @@ +import _fetch from "node-fetch"; +// @ts-ignore +import { AbortController, abortableFetch } from "abortcontroller-polyfill/dist/cjs-ponyfill"; + +const { fetch, Request } = abortableFetch(_fetch); + +global.fetch = fetch; +global.Request = Request; +// @ts-ignore +global.AbortController = AbortController; diff --git a/test/fixtures/server.ts b/test/fixtures/server.ts new file mode 100644 index 00000000..f0fd2881 --- /dev/null +++ b/test/fixtures/server.ts @@ -0,0 +1,68 @@ +console.log(` + +Setting up vitest in browser env... + +`); +import { dirname, join } from "path"; +import http from "http"; +import fs from "fs"; +import path from "path"; + +const __dirname = dirname(__filename); +const root = path.join(__dirname, "..", ".."); +const setup = async () => { + const server = http + .createServer(function (request, response) { + const filePath = "." + request.url; + + const extname = path.extname(filePath); + let contentType = "text/html"; + switch (extname) { + case ".js": + contentType = "text/javascript"; + break; + case ".css": + contentType = "text/css"; + break; + case ".json": + contentType = "application/json"; + break; + case ".png": + contentType = "image/png"; + break; + case ".jpg": + contentType = "image/jpg"; + break; + case ".wav": + contentType = "audio/wav"; + break; + } + + fs.readFile(join(root, filePath), function (error, content) { + if (error) { + if (error.code == "ENOENT") { + response.writeHead(404); + response.end("Sorry, check with the site admin for error: " + error.code + " ..\n"); + response.end(); + } else { + response.writeHead(500); + response.end("Sorry, check with the site admin for error: " + error.code + " ..\n"); + response.end(); + } + } else { + response.writeHead(200, { "Content-Type": contentType }); + response.end(content, "utf-8"); + } + }); + }) + .listen(3000); + + return () => { + // teardown + if (server) { + server.close(); + } + }; +}; + +export default setup; diff --git a/test/specs/__({[ % & $ # @ ` ~ ,)}]__/special-characters.spec.js b/test/specs/__({[ % & $ # @ ` ~ ,)}]__/special-characters.spec.js deleted file mode 100644 index b59c4afa..00000000 --- a/test/specs/__({[ % & $ # @ ` ~ ,)}]__/special-characters.spec.js +++ /dev/null @@ -1,40 +0,0 @@ -import $RefParser from "../../../lib/index.js"; -import helper from "../../utils/helper.js"; -import path from "../../utils/path.js"; -import chai from "chai"; -import parsedSchema from "./parsed.js"; -import dereferencedSchema from "./dereferenced.js"; - -const { expect } = chai; - -describe("File names with special characters", () => { - it("should parse successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.parse(path.rel("specs/__({[ % & $ # @ ` ~ ,)}]__/__({[ % & $ # @ ` ~ ,)}]__.yaml")); - expect(schema).to.equal(parser.schema); - expect(schema).to.deep.equal(parsedSchema.schema); - expect(parser.$refs.paths()).to.deep.equal([path.abs("specs/__({[ % & $ # @ ` ~ ,)}]__/__({[ % & $ # @ ` ~ ,)}]__.yaml")]); - }); - - it("should resolve successfully", helper.testResolve( - path.rel("specs/__({[ % & $ # @ ` ~ ,)}]__/__({[ % & $ # @ ` ~ ,)}]__.yaml"), - path.abs("specs/__({[ % & $ # @ ` ~ ,)}]__/__({[ % & $ # @ ` ~ ,)}]__.yaml"), parsedSchema.schema, - path.abs("specs/__({[ % & $ # @ ` ~ ,)}]__/__({[ % & $ # @ ` ~ ,)}]__/__({[ % & $ # @ ` ~ ,)}]__.json"), parsedSchema.file - )); - - it("should dereference successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.dereference(path.rel("specs/__({[ % & $ # @ ` ~ ,)}]__/__({[ % & $ # @ ` ~ ,)}]__.yaml")); - expect(schema).to.equal(parser.schema); - expect(schema).to.deep.equal(dereferencedSchema); - // The "circular" flag should NOT be set - expect(parser.$refs.circular).to.equal(false); - }); - - it("should bundle successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.bundle(path.rel("specs/__({[ % & $ # @ ` ~ ,)}]__/__({[ % & $ # @ ` ~ ,)}]__.yaml")); - expect(schema).to.equal(parser.schema); - expect(schema).to.deep.equal(dereferencedSchema); - }); -}); diff --git a/test/specs/absolute-root/absolute-root.spec.js b/test/specs/absolute-root/absolute-root.spec.js deleted file mode 100644 index 7380081a..00000000 --- a/test/specs/absolute-root/absolute-root.spec.js +++ /dev/null @@ -1,108 +0,0 @@ -import chai from "chai"; -import { resolve } from "path"; -import $RefParser from "../../../lib/index.js"; -import path from "../../utils/path.js"; -import helper from "../../utils/helper.js"; -import * as urlModule from "../../../lib/util/url.js"; -import parsedSchema from "./parsed.js"; -import dereferencedSchema from "./dereferenced.js"; -import bundledSchema from "./bundled.js"; - -const { expect } = chai; -const url = { cwd: urlModule.cwd }; - -describe("When executed in the context of root directory", () => { - // Store the OS root directory - const root = resolve("/"); - - // Store references to the original methods - const originalProcessCwd = process.cwd; - const originalUrlCwd = url.cwd; - - /** - * A mock `process.cwd()` implementation that always returns the root diretory - */ - function mockProcessCwd () { - return root; - } - - /** - * Temporarily mocks `process.cwd()` while calling the real `url.cwd()` implemenation - */ - function mockUrlCwd () { - try { - process.cwd = mockProcessCwd; - return originalUrlCwd.apply(null, arguments); - } - finally { - process.cwd = originalProcessCwd; - } - } - - beforeEach("Mock process.cwd and url.cwd", () => { - url.cwd = mockUrlCwd; - }); - - afterEach("Restore process.cwd and url.cwd", () => { - url.cwd = originalUrlCwd; - process.cwd = originalProcessCwd; // already restored by the finally block above, but just in case - }); - - - it("should parse successfully from an absolute path", async () => { - let parser = new $RefParser(); - const schema = await parser.parse(path.abs("specs/absolute-root/absolute-root.yaml")); - expect(schema).to.equal(parser.schema); - expect(schema).to.deep.equal(parsedSchema.schema); - expect(parser.$refs.paths()).to.deep.equal([ - path.abs("specs/absolute-root/absolute-root.yaml") - ]); - }); - - it("should parse successfully from a url", async () => { - let parser = new $RefParser(); - const schema = await parser.parse(path.url("specs/absolute-root/absolute-root.yaml")); - expect(schema).to.equal(parser.schema); - expect(schema).to.deep.equal(parsedSchema.schema); - expect(parser.$refs.paths()).to.deep.equal([path.url("specs/absolute-root/absolute-root.yaml")]); - }); - - it("should resolve successfully from an absolute path", helper.testResolve( - path.abs("specs/absolute-root/absolute-root.yaml"), - path.abs("specs/absolute-root/absolute-root.yaml"), parsedSchema.schema, - path.abs("specs/absolute-root/definitions/definitions.json"), parsedSchema.definitions, - path.abs("specs/absolute-root/definitions/name.yaml"), parsedSchema.name, - path.abs("specs/absolute-root/definitions/required-string.yaml"), parsedSchema.requiredString - )); - - it("should resolve successfully from a url", helper.testResolve( - path.url("specs/absolute-root/absolute-root.yaml"), - path.url("specs/absolute-root/absolute-root.yaml"), parsedSchema.schema, - path.url("specs/absolute-root/definitions/definitions.json"), parsedSchema.definitions, - path.url("specs/absolute-root/definitions/name.yaml"), parsedSchema.name, - path.url("specs/absolute-root/definitions/required-string.yaml"), parsedSchema.requiredString - )); - - it("should dereference successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.dereference(path.abs("specs/absolute-root/absolute-root.yaml")); - expect(schema).to.equal(parser.schema); - expect(schema).to.deep.equal(dereferencedSchema); - // Reference equality - expect(schema.properties.name).to.equal(schema.definitions.name); - expect(schema.definitions["required string"]) - .to.equal(schema.definitions.name.properties.first) - .to.equal(schema.definitions.name.properties.last) - .to.equal(schema.properties.name.properties.first) - .to.equal(schema.properties.name.properties.last); - // The "circular" flag should NOT be set - expect(parser.$refs.circular).to.equal(false); - }); - - it("should bundle successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.bundle(path.abs("specs/absolute-root/absolute-root.yaml")); - expect(schema).to.equal(parser.schema); - expect(schema).to.deep.equal(bundledSchema); - }); -}); diff --git a/test/specs/absolute-root/absolute-root.spec.ts b/test/specs/absolute-root/absolute-root.spec.ts new file mode 100644 index 00000000..60143914 --- /dev/null +++ b/test/specs/absolute-root/absolute-root.spec.ts @@ -0,0 +1,125 @@ +import { describe, it, beforeEach, afterEach } from "vitest"; +import { resolve } from "path"; +import $RefParser from "../../../lib/index.js"; +import path from "../../utils/path.js"; +import helper from "../../utils/helper.js"; +import * as urlModule from "../../../lib/util/url.js"; +import parsedSchema from "./parsed.js"; +import dereferencedSchema from "./dereferenced.js"; +import bundledSchema from "./bundled.js"; + +import { expect } from "vitest"; +const url = { cwd: urlModule.cwd }; + +describe("When executed in the context of root directory", () => { + // Store the OS root directory + const root = resolve("/"); + + // Store references to the original methods + const originalProcessCwd = process.cwd; + const originalUrlCwd = url.cwd; + + /** + * A mock `process.cwd()` implementation that always returns the root diretory + */ + function mockProcessCwd() { + return root; + } + + /** + * Temporarily mocks `process.cwd()` while calling the real `url.cwd()` implemenation + */ + function mockUrlCwd() { + try { + process.cwd = mockProcessCwd; + // @ts-expect-error TS(2345): Argument of type 'IArguments' is not assignable to... Remove this comment to see the full error message + return originalUrlCwd.apply(null, arguments); + } finally { + process.cwd = originalProcessCwd; + } + } + + beforeEach(() => { + url.cwd = mockUrlCwd; + }); + + afterEach(() => { + url.cwd = originalUrlCwd; + process.cwd = originalProcessCwd; // already restored by the finally block above, but just in case + }); + + it("should parse successfully from an absolute path", async () => { + const parser = new $RefParser(); + const schema = await parser.parse(path.abs("test/specs/absolute-root/absolute-root.yaml")); + expect(schema).to.equal(parser.schema); + expect(schema).to.deep.equal(parsedSchema.schema); + expect(parser.$refs.paths()).to.deep.equal([path.abs("test/specs/absolute-root/absolute-root.yaml")]); + }); + + it("should parse successfully from a url", async () => { + const parser = new $RefParser(); + const schema = await parser.parse(path.url("test/specs/absolute-root/absolute-root.yaml")); + expect(schema).to.equal(parser.schema); + expect(schema).to.deep.equal(parsedSchema.schema); + expect(parser.$refs.paths()).to.deep.equal([path.url("test/specs/absolute-root/absolute-root.yaml")]); + }); + + it( + "should resolve successfully from an absolute path", + helper.testResolve( + path.abs("test/specs/absolute-root/absolute-root.yaml"), + path.abs("test/specs/absolute-root/absolute-root.yaml"), + parsedSchema.schema, + path.abs("test/specs/absolute-root/definitions/definitions.json"), + parsedSchema.definitions, + path.abs("test/specs/absolute-root/definitions/name.yaml"), + parsedSchema.name, + path.abs("test/specs/absolute-root/definitions/required-string.yaml"), + parsedSchema.requiredString, + ), + ); + + it( + "should resolve successfully from a url", + helper.testResolve( + path.url("test/specs/absolute-root/absolute-root.yaml"), + path.url("test/specs/absolute-root/absolute-root.yaml"), + parsedSchema.schema, + path.url("test/specs/absolute-root/definitions/definitions.json"), + parsedSchema.definitions, + path.url("test/specs/absolute-root/definitions/name.yaml"), + parsedSchema.name, + path.url("test/specs/absolute-root/definitions/required-string.yaml"), + parsedSchema.requiredString, + ), + ); + + it("should dereference successfully", async () => { + const parser = new $RefParser(); + const schema = await parser.dereference(path.abs("test/specs/absolute-root/absolute-root.yaml")); + expect(schema).to.equal(parser.schema); + expect(schema).to.deep.equal(dereferencedSchema); + // Reference equality + // @ts-expect-error TS(2532): Object is possibly 'undefined'. + expect(schema.properties.name).to.equal(schema.definitions.name); + // @ts-expect-error TS(2532): Object is possibly 'undefined'. + expect(schema.definitions["required string"]) + // @ts-expect-error TS(2532): Object is possibly 'undefined'. + .to.equal(schema.definitions.name.properties.first) + // @ts-expect-error TS(2532): Object is possibly 'undefined'. + .to.equal(schema.definitions.name.properties.last) + // @ts-expect-error TS(2532): Object is possibly 'undefined'. + .to.equal(schema.properties.name.properties.first) + // @ts-expect-error TS(2532): Object is possibly 'undefined'. + .to.equal(schema.properties.name.properties.last); + // The "circular" flag should NOT be set + expect(parser.$refs.circular).to.equal(false); + }); + + it("should bundle successfully", async () => { + const parser = new $RefParser(); + const schema = await parser.bundle(path.abs("test/specs/absolute-root/absolute-root.yaml")); + expect(schema).to.equal(parser.schema); + expect(schema).to.deep.equal(bundledSchema); + }); +}); diff --git a/test/specs/external/bundled.js b/test/specs/absolute-root/bundled.ts similarity index 54% rename from test/specs/external/bundled.js rename to test/specs/absolute-root/bundled.ts index 33e08de9..950730a1 100644 --- a/test/specs/external/bundled.js +++ b/test/specs/absolute-root/bundled.ts @@ -1,66 +1,58 @@ export default { title: "Person", type: "object", - required: [ - "name" - ], + required: ["name"], properties: { name: { - $ref: "#/definitions/name" + $ref: "#/definitions/name", }, age: { type: "integer", - minimum: 0 + minimum: 0, }, gender: { type: "string", - enum: [ - "male", - "female" - ] - } + enum: ["male", "female"], + }, }, definitions: { "required string": { title: "required string", type: "string", - minLength: 1 + minLength: 1, }, string: { - $ref: "#/definitions/required%20string/type" + $ref: "#/definitions/required%20string/type", }, name: { title: "name", type: "object", - required: [ - "first", - "last" - ], + required: ["first", "last"], properties: { first: { - $ref: "#/definitions/required%20string" + $ref: "#/definitions/required%20string", }, last: { - $ref: "#/definitions/required%20string" + $ref: "#/definitions/required%20string", }, middle: { type: { - $ref: "#/definitions/required%20string/type" + $ref: "#/definitions/required%20string/type", }, minLength: { - $ref: "#/definitions/required%20string/minLength" - } + $ref: "#/definitions/required%20string/minLength", + }, }, prefix: { $ref: "#/definitions/required%20string", - minLength: 3 + minLength: 3, }, suffix: { $ref: "#/definitions/name/properties/prefix", type: "string", - maxLength: 3 - } - } - } - } + maxLength: 3, + }, + }, + }, + }, }; diff --git a/test/specs/external/dereferenced.js b/test/specs/absolute-root/dereferenced.ts similarity index 71% rename from test/specs/external/dereferenced.js rename to test/specs/absolute-root/dereferenced.ts index 1237ce69..08a960f7 100644 --- a/test/specs/external/dereferenced.js +++ b/test/specs/absolute-root/dereferenced.ts @@ -1,98 +1,87 @@ export default { title: "Person", type: "object", - required: [ - "name" - ], + required: ["name"], properties: { name: { title: "name", type: "object", - required: [ - "first", - "last" - ], + required: ["first", "last"], properties: { first: { title: "required string", type: "string", - minLength: 1 + minLength: 1, }, last: { title: "required string", type: "string", - minLength: 1 + minLength: 1, }, middle: { type: "string", - minLength: 1 + minLength: 1, }, prefix: { title: "required string", type: "string", - minLength: 3 + minLength: 3, }, suffix: { title: "required string", type: "string", minLength: 3, - maxLength: 3 - } - } + maxLength: 3, + }, + }, }, age: { type: "integer", - minimum: 0 + minimum: 0, }, gender: { type: "string", - enum: [ - "male", - "female" - ] - } + enum: ["male", "female"], + }, }, definitions: { "required string": { title: "required string", type: "string", - minLength: 1 + minLength: 1, }, string: "string", name: { title: "name", type: "object", - required: [ - "first", - "last" - ], + required: ["first", "last"], properties: { first: { title: "required string", type: "string", - minLength: 1 + minLength: 1, }, last: { title: "required string", type: "string", - minLength: 1 + minLength: 1, }, middle: { type: "string", - minLength: 1 + minLength: 1, }, prefix: { title: "required string", type: "string", - minLength: 3 + minLength: 3, }, suffix: { title: "required string", type: "string", minLength: 3, - maxLength: 3 - } - } - } - } + maxLength: 3, + }, + }, + }, + }, }; diff --git a/test/specs/external/parsed.js b/test/specs/absolute-root/parsed.ts similarity index 51% rename from test/specs/external/parsed.js rename to test/specs/absolute-root/parsed.ts index c5a664f1..982658ff 100644 --- a/test/specs/external/parsed.js +++ b/test/specs/absolute-root/parsed.ts @@ -1,80 +1,72 @@ export default { schema: { definitions: { - $ref: "definitions/definitions.json" + $ref: "definitions/definitions.json", }, - required: [ - "name" - ], + required: ["name"], type: "object", properties: { gender: { - enum: [ - "male", - "female" - ], - type: "string" + enum: ["male", "female"], + type: "string", }, age: { minimum: 0, - type: "integer" + type: "integer", }, name: { - $ref: "#/definitions/name" - } + $ref: "#/definitions/name", + }, }, - title: "Person" + title: "Person", }, definitions: { "required string": { - $ref: "required-string.yaml" + $ref: "required-string.yaml", }, string: { - $ref: "#/required%20string/type" + $ref: "#/required%20string/type", }, name: { - $ref: "../definitions/name.yaml" - } + $ref: "../definitions/name.yaml", + }, }, name: { - required: [ - "first", - "last" - ], + required: ["first", "last"], type: "object", properties: { middle: { minLength: { - $ref: "#/properties/first/minLength" + $ref: "#/properties/first/minLength", }, type: { - $ref: "#/properties/first/type" - } + $ref: "#/properties/first/type", + }, }, prefix: { minLength: 3, - $ref: "#/properties/last" + $ref: "#/properties/last", }, last: { - $ref: "./required-string.yaml" + $ref: "./required-string.yaml", }, suffix: { $ref: "#/properties/prefix", type: "string", - maxLength: 3 + maxLength: 3, }, first: { - $ref: "../definitions/definitions.json#/required string" - } + $ref: "../definitions/definitions.json#/required string", + }, }, - title: "name" + title: "name", }, requiredString: { minLength: 1, type: "string", - title: "required string" - } + title: "required string", + }, }; diff --git a/test/specs/blank/blank.spec.js b/test/specs/blank/blank.spec.js deleted file mode 100644 index 1388e49e..00000000 --- a/test/specs/blank/blank.spec.js +++ /dev/null @@ -1,107 +0,0 @@ -import { host } from "@jsdevtools/host-environment"; -import chai from "chai"; -import $RefParser from "../../../lib/index.js"; -import helper from "../../utils/helper.js"; -import path from "../../utils/path.js"; -import parsedSchema from "./parsed.js"; -import dereferencedSchema from "./dereferenced.js"; - -const { expect } = chai; - -describe("Blank files", () => { - let windowOnError, testDone; - - beforeEach(() => { - // Some old Webkit browsers throw an error when downloading zero-byte files. - windowOnError = host.global.onerror; - host.global.onerror = function () { - testDone(); - return true; - }; - }); - - afterEach(() => { - host.global.onerror = windowOnError; - }); - - describe("main file", () => { - it("should throw an error for a blank YAML file", async () => { - try { - await $RefParser.parse(path.rel("specs/blank/files/blank.yaml")); - helper.shouldNotGetCalled(); - } - catch (err) { - expect(err).to.be.an.instanceOf(SyntaxError); - expect(err.message).to.contain("blank/files/blank.yaml"); - expect(err.message).to.contain("is not a valid JSON Schema"); - } - }); - - it('should throw a different error if "parse.yaml.allowEmpty" is disabled', async () => { - try { - await $RefParser.parse(path.rel("specs/blank/files/blank.yaml"), { parse: { yaml: { allowEmpty: false }}}); - helper.shouldNotGetCalled(); - } - catch (err) { - expect(err).to.be.an.instanceOf(SyntaxError); - expect(err.message).to.contain("Error parsing "); - expect(err.message).to.contain("blank/files/blank.yaml"); - expect(err.message).to.contain("Parsed value is empty"); - } - }); - - it("should throw an error for a blank JSON file", async () => { - try { - await $RefParser.parse(path.rel("specs/blank/files/blank.json"), { parse: { json: { allowEmpty: false }}}); - helper.shouldNotGetCalled(); - } - catch (err) { - expect(err).to.be.an.instanceOf(SyntaxError); - expect(err.message).to.contain("Error parsing "); - expect(err.message).to.contain("blank/files/blank.json"); - } - }); - }); - - describe("referenced files", () => { - it("should parse successfully", async () => { - let schema = await $RefParser.parse(path.rel("specs/blank/blank.yaml")); - expect(schema).to.deep.equal(parsedSchema.schema); - }); - - it("should resolve successfully", helper.testResolve( - path.rel("specs/blank/blank.yaml"), - path.abs("specs/blank/blank.yaml"), parsedSchema.schema, - path.abs("specs/blank/files/blank.yaml"), parsedSchema.yaml, - path.abs("specs/blank/files/blank.json"), parsedSchema.json, - path.abs("specs/blank/files/blank.txt"), parsedSchema.text, - path.abs("specs/blank/files/blank.png"), parsedSchema.binary, - path.abs("specs/blank/files/blank.foo"), parsedSchema.unknown - )); - - it("should dereference successfully", async () => { - let schema = await $RefParser.dereference(path.rel("specs/blank/blank.yaml")); - schema.binary = helper.convertNodeBuffersToPOJOs(schema.binary); - expect(schema).to.deep.equal(dereferencedSchema); - }); - - it("should bundle successfully", async () => { - let schema = await $RefParser.bundle(path.rel("specs/blank/blank.yaml")); - schema.binary = helper.convertNodeBuffersToPOJOs(schema.binary); - expect(schema).to.deep.equal(dereferencedSchema); - }); - - it('should throw an error if "allowEmpty" is disabled', async () => { - try { - await $RefParser.dereference(path.rel("specs/blank/blank.yaml"), { parse: { binary: { allowEmpty: false }}}); - helper.shouldNotGetCalled(); - } - catch (err) { - expect(err).to.be.an.instanceOf(SyntaxError); - expect(err.message).to.contain("Error parsing "); - expect(err.message).to.contain("blank/files/blank.png"); - expect(err.message).to.contain("Parsed value is empty"); - } - }); - }); -}); diff --git a/test/specs/blank/blank.spec.ts b/test/specs/blank/blank.spec.ts new file mode 100644 index 00000000..eea6e27f --- /dev/null +++ b/test/specs/blank/blank.spec.ts @@ -0,0 +1,114 @@ +import { describe, it } from "vitest"; +import $RefParser from "../../../lib/index.js"; +import helper from "../../utils/helper.js"; +import path from "../../utils/path.js"; +import parsedSchema from "./parsed.js"; +import dereferencedSchema from "./dereferenced.js"; + +import { expect } from "vitest"; + +describe("Blank files", () => { + describe("main file", () => { + it("should throw an error for a blank YAML file", async () => { + try { + await $RefParser.parse(path.rel("test/specs/blank/files/blank.yaml")); + helper.shouldNotGetCalled(); + } catch (err) { + expect(err).to.be.an.instanceOf(SyntaxError); + // @ts-expect-error TS(2571): Object is of type 'unknown'. + expect(err.message).to.contain("blank/files/blank.yaml"); + // @ts-expect-error TS(2571): Object is of type 'unknown'. + expect(err.message).to.contain("is not a valid JSON Schema"); + } + }); + + it('should throw a different error if "parse.yaml.allowEmpty" is disabled', async () => { + try { + await $RefParser.parse(path.rel("test/specs/blank/files/blank.yaml"), { + parse: { yaml: { allowEmpty: false } }, + }); + helper.shouldNotGetCalled(); + } catch (err) { + expect(err).to.be.an.instanceOf(SyntaxError); + // @ts-expect-error TS(2571): Object is of type 'unknown'. + expect(err.message).to.contain("Error parsing "); + // @ts-expect-error TS(2571): Object is of type 'unknown'. + expect(err.message).to.contain("blank/files/blank.yaml"); + // @ts-expect-error TS(2571): Object is of type 'unknown'. + expect(err.message).to.contain("Parsed value is empty"); + } + }); + + it("should throw an error for a blank JSON file", async () => { + try { + await $RefParser.parse(path.rel("test/specs/blank/files/blank.json"), { + parse: { json: { allowEmpty: false } }, + }); + helper.shouldNotGetCalled(); + } catch (err) { + expect(err).to.be.an.instanceOf(SyntaxError); + // @ts-expect-error TS(2571): Object is of type 'unknown'. + expect(err.message).to.contain("Error parsing "); + // @ts-expect-error TS(2571): Object is of type 'unknown'. + expect(err.message).to.contain("blank/files/blank.json"); + } + }); + }); + + describe("referenced files", () => { + it("should parse successfully", async () => { + const schema = await $RefParser.parse(path.rel("test/specs/blank/blank.yaml")); + expect(schema).to.deep.equal(parsedSchema.schema); + }); + + it( + "should resolve successfully", + helper.testResolve( + path.rel("test/specs/blank/blank.yaml"), + path.abs("test/specs/blank/blank.yaml"), + parsedSchema.schema, + path.abs("test/specs/blank/files/blank.yaml"), + parsedSchema.yaml, + path.abs("test/specs/blank/files/blank.json"), + parsedSchema.json, + path.abs("test/specs/blank/files/blank.txt"), + parsedSchema.text, + path.abs("test/specs/blank/files/blank.png"), + parsedSchema.binary, + path.abs("test/specs/blank/files/blank.foo"), + parsedSchema.unknown, + ), + ); + + it("should dereference successfully", async () => { + const schema = await $RefParser.dereference(path.rel("test/specs/blank/blank.yaml")); + // @ts-expect-error TS(2339): Property 'binary' does not exist on type 'JSONSche... Remove this comment to see the full error message + schema.binary = helper.convertNodeBuffersToPOJOs(schema.binary); + expect(schema).to.deep.equal(dereferencedSchema); + }); + + it("should bundle successfully", async () => { + const schema = await $RefParser.bundle(path.rel("test/specs/blank/blank.yaml")); + // @ts-expect-error TS(2339): Property 'binary' does not exist on type 'JSONSche... Remove this comment to see the full error message + schema.binary = helper.convertNodeBuffersToPOJOs(schema.binary); + expect(schema).to.deep.equal(dereferencedSchema); + }); + + it('should throw an error if "allowEmpty" is disabled', async () => { + try { + await $RefParser.dereference(path.rel("test/specs/blank/blank.yaml"), { + parse: { binary: { allowEmpty: false } }, + }); + helper.shouldNotGetCalled(); + } catch (err) { + expect(err).to.be.an.instanceOf(SyntaxError); + // @ts-expect-error TS(2571): Object is of type 'unknown'. + expect(err.message).to.contain("Error parsing "); + // @ts-expect-error TS(2571): Object is of type 'unknown'. + expect(err.message).to.contain("blank/files/blank.png"); + // @ts-expect-error TS(2571): Object is of type 'unknown'. + expect(err.message).to.contain("Parsed value is empty"); + } + }); + }); +}); diff --git a/test/specs/blank/dereferenced.js b/test/specs/blank/dereferenced.ts similarity index 53% rename from test/specs/blank/dereferenced.js rename to test/specs/blank/dereferenced.ts index 4f1e934a..c94cb4ab 100644 --- a/test/specs/blank/dereferenced.js +++ b/test/specs/blank/dereferenced.ts @@ -2,6 +2,6 @@ export default { json: undefined, yaml: undefined, text: "", - binary: { type: "Buffer", data: []}, - unknown: undefined + binary: { type: "Buffer", data: [] }, + unknown: undefined, }; diff --git a/test/specs/blank/parsed.js b/test/specs/blank/parsed.js deleted file mode 100644 index 3a27353c..00000000 --- a/test/specs/blank/parsed.js +++ /dev/null @@ -1,29 +0,0 @@ -export default { - schema: { - yaml: { - $ref: "files/blank.yaml" - }, - json: { - $ref: "files/blank.json" - }, - text: { - $ref: "files/blank.txt" - }, - binary: { - $ref: "files/blank.png" - }, - unknown: { - $ref: "files/blank.foo" - }, - }, - - yaml: undefined, - - json: undefined, - - text: "", - - binary: { type: "Buffer", data: []}, - - unknown: undefined -}; diff --git a/test/specs/blank/parsed.ts b/test/specs/blank/parsed.ts new file mode 100644 index 00000000..7c43ecf0 --- /dev/null +++ b/test/specs/blank/parsed.ts @@ -0,0 +1,29 @@ +export default { + schema: { + yaml: { + $ref: "files/blank.yaml", + }, + json: { + $ref: "files/blank.json", + }, + text: { + $ref: "files/blank.txt", + }, + binary: { + $ref: "files/blank.png", + }, + unknown: { + $ref: "files/blank.foo", + }, + }, + + yaml: undefined, + + json: undefined, + + text: "", + + binary: { type: "Buffer", data: [] }, + + unknown: undefined, +}; diff --git a/test/specs/callbacks.spec.js b/test/specs/callbacks.spec.js deleted file mode 100644 index cf4d0aa3..00000000 --- a/test/specs/callbacks.spec.js +++ /dev/null @@ -1,83 +0,0 @@ -import chai from "chai"; -import $RefParser from "../../lib/index.js"; -import helper from "../utils/helper.js"; -import path from "../utils/path.js"; -import { ParserError } from "../../lib/util/errors.js"; - -const { expect } = chai; - -describe("Callback & Promise syntax", () => { - for (let method of ["parse", "resolve", "dereference", "bundle"]) { - describe(method + " method", () => { - it("should call the callback function upon success", testCallbackSuccess(method)); - it("should call the callback function upon failure", testCallbackError(method)); - it("should resolve the Promise upon success", testPromiseSuccess(method)); - it("should reject the Promise upon failure", testPromiseError(method)); - }); - } - - function testCallbackSuccess (method) { - return function (done) { - let parser = new $RefParser(); - parser[method](path.rel("specs/internal/internal.yaml"), (err, result) => { - try { - expect(err).to.equal(null); - expect(result).to.be.an("object"); - - if (method === "resolve") { - expect(result).to.equal(parser.$refs); - } - else { - expect(result).to.equal(parser.schema); - } - done(); - } - catch (e) { - done(e); - } - }); - }; - } - - function testCallbackError (method) { - return function (done) { - $RefParser[method](path.rel("specs/invalid/invalid.yaml"), (err, result) => { - try { - expect(err).to.be.an.instanceOf(ParserError); - expect(result).to.equal(undefined); - done(); - } - catch (e) { - done(e); - } - }); - }; - } - - function testPromiseSuccess (method) { - return function () { - let parser = new $RefParser(); - return parser[method](path.rel("specs/internal/internal.yaml")) - .then((result) => { - expect(result).to.be.an("object"); - - if (method === "resolve") { - expect(result).to.equal(parser.$refs); - } - else { - expect(result).to.equal(parser.schema); - } - }); - }; - } - - function testPromiseError (method) { - return function () { - return $RefParser[method](path.rel("specs/invalid/invalid.yaml")) - .then(helper.shouldNotGetCalled) - .catch((err) => { - expect(err).to.be.an.instanceOf(ParserError); - }); - }; - } -}); diff --git a/test/specs/callbacks.spec.ts b/test/specs/callbacks.spec.ts new file mode 100644 index 00000000..571d83d2 --- /dev/null +++ b/test/specs/callbacks.spec.ts @@ -0,0 +1,82 @@ +import { describe, it } from "vitest"; +import $RefParser from "../../lib/index.js"; +import helper from "../utils/helper.js"; +import path from "../utils/path.js"; +import { ParserError } from "../../lib/util/errors.js"; + +import { expect } from "vitest"; + +describe("Callback & Promise syntax", () => { + const methods = ["parse", "resolve", "dereference", "bundle"] as const; + for (const method of methods) { + describe(method + " method", () => { + it("should call the callback function upon success", testCallbackSuccess(method)); + it("should call the callback function upon failure", testCallbackError(method)); + it("should resolve the Promise upon success", testPromiseSuccess(method)); + it("should reject the Promise upon failure", testPromiseError(method)); + }); + } + + function testCallbackSuccess(method: typeof methods[number]) { + return () => + new Promise((resolve, reject) => { + const parser = new $RefParser(); + parser[method](path.rel("test/specs/internal/internal.yaml"), (err: any, result: any) => { + try { + expect(err).to.equal(null); + expect(result).to.be.an("object"); + + if (method === "resolve") { + expect(result).to.equal(parser.$refs); + } else { + expect(result).to.equal(parser.schema); + } + resolve(); + } catch (e) { + reject(e); + } + }); + }); + } + + function testCallbackError(method: typeof methods[number]) { + return () => + new Promise((resolve, reject) => { + $RefParser[method](path.rel("test/specs/invalid/invalid.yaml"), (err: any, result: any) => { + try { + expect(err).to.be.an.instanceOf(ParserError); + expect(result).to.equal(undefined); + resolve(); + } catch (e) { + reject(e); + } + }); + }); + } + + function testPromiseSuccess(method: typeof methods[number]) { + return function () { + const parser = new $RefParser(); + return parser[method](path.rel("test/specs/internal/internal.yaml")).then((result: any) => { + expect(result).to.be.an("object"); + + if (method === "resolve") { + expect(result).to.equal(parser.$refs); + } else { + expect(result).to.equal(parser.schema); + } + }); + }; + } + + function testPromiseError(method: typeof methods[number]) { + return async function () { + try { + await $RefParser[method](path.rel("test/specs/invalid/invalid.yaml")); + helper.shouldNotGetCalled; + } catch (err: any) { + expect(err).to.be.an.instanceOf(ParserError); + } + }; + } +}); diff --git a/test/specs/circular-extended/bundled.js b/test/specs/circular-extended/bundled.js deleted file mode 100644 index 504f56a1..00000000 --- a/test/specs/circular-extended/bundled.js +++ /dev/null @@ -1,140 +0,0 @@ -const bundledSchema = { - self: { - definitions: { - thing: { - title: "thing", - $ref: "#/definitions/thing", - description: "This JSON Reference has additional properties (other than $ref). Normally, this creates a new type that extends the referenced type, but since this reference points to ITSELF, it doesn't do that.\n", - } - } - }, - - pet: { - title: "pet", - type: "object", - properties: { - age: { - type: "number" - }, - name: { - type: "string" - }, - species: { - type: "string", - enum: [ - "cat", - "dog", - "bird", - "fish" - ], - }, - }, - }, - - ancestor: { - definitions: { - person: { - title: "person", - properties: { - spouse: { - $ref: "#/definitions/person", - description: 'This JSON Reference has additional properties (other than $ref). This creates a new type that extends "person".\n', - }, - pet: { - $ref: "#/definitions/pet", - description: 'This JSON Reference has additional properties (other than $ref). This creates a new type that extends "pet".\n' - }, - name: { - type: "string" - } - } - }, - pet: null - } - }, - - indirect: { - definitions: { - parent: { - title: "parent", - properties: { - name: { - type: "string" - }, - children: { - items: { - $ref: "#/definitions/child", - description: 'This JSON Reference has additional properties (other than $ref). This creates a new type that extends "child".\n', - }, - type: "array" - } - } - }, - child: { - title: "child", - properties: { - parents: { - items: { - $ref: "#/definitions/parent", - description: 'This JSON Reference has additional properties (other than $ref). This creates a new type that extends "parent".\n', - }, - type: "array" - }, - pet: { - $ref: "#/definitions/pet", - description: 'This JSON Reference has additional properties (other than $ref). This creates a new type that extends "pet".\n', - }, - name: { - type: "string" - } - } - }, - pet: null - } - }, - - indirectAncestor: { - definitions: { - pet: null, - parent: { - title: "parent", - properties: { - name: { - type: "string" - }, - child: { - $ref: "#/definitions/child", - description: 'This JSON Reference has additional properties (other than $ref). This creates a new type that extends "child".\n', - } - }, - }, - child: { - title: "child", - properties: { - pet: { - $ref: "#/definitions/pet", - description: 'This JSON Reference has additional properties (other than $ref). This creates a new type that extends "pet".\n', - }, - name: { - type: "string" - }, - children: { - items: { - $ref: "#/definitions/child", - description: 'This JSON Reference has additional properties (other than $ref). This creates a new type that extends "child".\n', - }, - type: "array", - description: "children" - } - }, - } - } - } -}; - -bundledSchema.ancestor.definitions.pet = - bundledSchema.indirect.definitions.pet = - bundledSchema.indirectAncestor.definitions.pet = - bundledSchema.pet; - -export default bundledSchema; diff --git a/test/specs/circular-extended/bundled.ts b/test/specs/circular-extended/bundled.ts new file mode 100644 index 00000000..edfad057 --- /dev/null +++ b/test/specs/circular-extended/bundled.ts @@ -0,0 +1,147 @@ +const bundledSchema = { + self: { + definitions: { + thing: { + title: "thing", + $ref: "#/definitions/thing", + description: + "This JSON Reference has additional properties (other than $ref). Normally, this creates a new type that extends the referenced type, but since this reference points to ITSELF, it doesn't do that.\n", + }, + }, + }, + + pet: { + title: "pet", + type: "object", + properties: { + age: { + type: "number", + }, + name: { + type: "string", + }, + species: { + type: "string", + enum: ["cat", "dog", "bird", "fish"], + }, + }, + }, + + ancestor: { + definitions: { + person: { + title: "person", + properties: { + spouse: { + $ref: "#/definitions/person", + description: + 'This JSON Reference has additional properties (other than $ref). This creates a new type that extends "person".\n', + }, + pet: { + $ref: "#/definitions/pet", + description: + 'This JSON Reference has additional properties (other than $ref). This creates a new type that extends "pet".\n', + }, + name: { + type: "string", + }, + }, + }, + pet: null, + }, + }, + + indirect: { + definitions: { + parent: { + title: "parent", + properties: { + name: { + type: "string", + }, + children: { + items: { + $ref: "#/definitions/child", + description: + 'This JSON Reference has additional properties (other than $ref). This creates a new type that extends "child".\n', + }, + type: "array", + }, + }, + }, + child: { + title: "child", + properties: { + parents: { + items: { + $ref: "#/definitions/parent", + description: + 'This JSON Reference has additional properties (other than $ref). This creates a new type that extends "parent".\n', + }, + type: "array", + }, + pet: { + $ref: "#/definitions/pet", + description: + 'This JSON Reference has additional properties (other than $ref). This creates a new type that extends "pet".\n', + }, + name: { + type: "string", + }, + }, + }, + pet: null, + }, + }, + + indirectAncestor: { + definitions: { + pet: null, + parent: { + title: "parent", + properties: { + name: { + type: "string", + }, + child: { + $ref: "#/definitions/child", + description: + 'This JSON Reference has additional properties (other than $ref). This creates a new type that extends "child".\n', + }, + }, + }, + child: { + title: "child", + properties: { + pet: { + $ref: "#/definitions/pet", + description: + 'This JSON Reference has additional properties (other than $ref). This creates a new type that extends "pet".\n', + }, + name: { + type: "string", + }, + children: { + items: { + $ref: "#/definitions/child", + description: + 'This JSON Reference has additional properties (other than $ref). This creates a new type that extends "child".\n', + }, + type: "array", + description: "children", + }, + }, + }, + }, + }, +}; + +// @ts-expect-error TS(2322): Type '{ title: string; type: string; properties: {... Remove this comment to see the full error message +bundledSchema.ancestor.definitions.pet = + // @ts-expect-error TS(2322): Type '{ title: string; type: string; properties: {... Remove this comment to see the full error message + bundledSchema.indirect.definitions.pet = + // @ts-expect-error TS(2322): Type '{ title: string; type: string; properties: {... Remove this comment to see the full error message + bundledSchema.indirectAncestor.definitions.pet = + bundledSchema.pet; + +export default bundledSchema; diff --git a/test/specs/circular-extended/circular-extended.spec.js b/test/specs/circular-extended/circular-extended.spec.js deleted file mode 100644 index 4fda375e..00000000 --- a/test/specs/circular-extended/circular-extended.spec.js +++ /dev/null @@ -1,299 +0,0 @@ -import chai from "chai"; -import $RefParser from "../../../lib/index.js"; -import helper from "../../utils/helper.js"; -import path from "../../utils/path.js"; -import parsedSchema from "./parsed.js"; -import dereferencedSchema from "./dereferenced.js"; -import bundledSchema from "./bundled.js"; - -const { expect } = chai; - -describe("Schema with circular $refs that extend each other", () => { - describe("$ref to self", () => { - it("should parse successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.parse(path.rel("specs/circular-extended/circular-extended-self.yaml")); - expect(schema).to.equal(parser.schema); - expect(schema).to.deep.equal(parsedSchema.self); - expect(parser.$refs.paths()).to.deep.equal([path.abs("specs/circular-extended/circular-extended-self.yaml")]); - // The "circular" flag should NOT be set - // (it only gets set by `dereference`) - expect(parser.$refs.circular).to.equal(false); - }); - - it("should resolve successfully", helper.testResolve( - path.rel("specs/circular-extended/circular-extended-self.yaml"), - path.abs("specs/circular-extended/circular-extended-self.yaml"), parsedSchema.self, - path.abs("specs/circular-extended/definitions/thing.yaml"), parsedSchema.thing - )); - - it("should dereference successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.dereference(path.rel("specs/circular-extended/circular-extended-self.yaml")); - expect(schema).to.equal(parser.schema); - expect(schema).to.deep.equal(dereferencedSchema.self); - // The "circular" flag should be set - expect(parser.$refs.circular).to.equal(true); - }); - - it('should not dereference circular $refs if "options.$refs.circular" is "ignore"', async () => { - let parser = new $RefParser(); - const schema = await parser.dereference(path.rel("specs/circular-extended/circular-extended-self.yaml"), { dereference: { circular: "ignore" }}); - expect(schema).to.equal(parser.schema); - expect(schema).to.deep.equal(dereferencedSchema.self); - // The "circular" flag should be set - expect(parser.$refs.circular).to.equal(true); - }); - - it('should throw an error if "options.$refs.circular" is false', async () => { - let parser = new $RefParser(); - - try { - await parser.dereference(path.rel("specs/circular-extended/circular-extended-self.yaml"), { dereference: { circular: false }}); - helper.shouldNotGetCalled(); - } - catch (err) { - // A ReferenceError should have been thrown - expect(err).to.be.an.instanceOf(ReferenceError); - expect(err.message).to.contain("Circular $ref pointer found at "); - expect(err.message).to.contain("specs/circular-extended/circular-extended-self.yaml#/definitions/thing"); - - // $Refs.circular should be true - expect(parser.$refs.circular).to.equal(true); - } - }); - - it("should bundle successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.bundle(path.rel("specs/circular-extended/circular-extended-self.yaml")); - expect(schema).to.equal(parser.schema); - expect(schema).to.deep.equal(bundledSchema.self); - // The "circular" flag should NOT be set - // (it only gets set by `dereference`) - expect(parser.$refs.circular).to.equal(false); - }); - }); - - describe("$ref to ancestor", () => { - it("should parse successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.parse(path.rel("specs/circular-extended/circular-extended-ancestor.yaml")); - expect(schema).to.equal(parser.schema); - expect(schema).to.deep.equal(parsedSchema.ancestor); - expect(parser.$refs.paths()).to.deep.equal([path.abs("specs/circular-extended/circular-extended-ancestor.yaml")]); - // The "circular" flag should NOT be set - // (it only gets set by `dereference`) - expect(parser.$refs.circular).to.equal(false); - }); - - it("should resolve successfully", helper.testResolve( - path.rel("specs/circular-extended/circular-extended-ancestor.yaml"), - path.abs("specs/circular-extended/circular-extended-ancestor.yaml"), parsedSchema.ancestor, - path.abs("specs/circular-extended/definitions/person-with-spouse.yaml"), parsedSchema.personWithSpouse, - path.abs("specs/circular-extended/definitions/pet.yaml"), parsedSchema.pet, - path.abs("specs/circular-extended/definitions/animals.yaml"), parsedSchema.animals - )); - - it("should dereference successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.dereference(path.rel("specs/circular-extended/circular-extended-ancestor.yaml")); - expect(schema).to.equal(parser.schema); - expect(schema).to.deep.equal(dereferencedSchema.ancestor.fullyDereferenced); - // The "circular" flag should be set - expect(parser.$refs.circular).to.equal(true); - // Reference equality - expect(schema.definitions.person.properties.spouse.properties) - .to.equal(schema.definitions.person.properties); - expect(schema.definitions.person.properties.pet.properties) - .to.equal(schema.definitions.pet.properties); - }); - - it('should not dereference circular $refs if "options.$refs.circular" is "ignore"', async () => { - let parser = new $RefParser(); - const schema = await parser.dereference(path.rel("specs/circular-extended/circular-extended-ancestor.yaml"), { dereference: { circular: "ignore" }}); - expect(schema).to.equal(parser.schema); - expect(schema).to.deep.equal(dereferencedSchema.ancestor.ignoreCircular$Refs); - // The "circular" flag should be set - expect(parser.$refs.circular).to.equal(true); - }); - - it('should throw an error if "options.$refs.circular" is false', async () => { - let parser = new $RefParser(); - - try { - await parser.dereference(path.rel("specs/circular-extended/circular-extended-ancestor.yaml"), { dereference: { circular: false }}); - helper.shouldNotGetCalled(); - } - catch (err) { - // A ReferenceError should have been thrown - expect(err).to.be.an.instanceOf(ReferenceError); - expect(err.message).to.contain("Circular $ref pointer found at "); - expect(err.message).to.contain("specs/circular-extended/definitions/person-with-spouse.yaml#/properties/spouse"); - - // $Refs.circular should be true - expect(parser.$refs.circular).to.equal(true); - } - }); - - it("should bundle successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.bundle(path.rel("specs/circular-extended/circular-extended-ancestor.yaml")); - expect(schema).to.equal(parser.schema); - expect(schema).to.deep.equal(bundledSchema.ancestor); - // The "circular" flag should NOT be set - // (it only gets set by `dereference`) - expect(parser.$refs.circular).to.equal(false); - }); - }); - - describe("indirect circular $refs", () => { - it("should parse successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.parse(path.rel("specs/circular-extended/circular-extended-indirect.yaml")); - expect(schema).to.equal(parser.schema); - expect(schema).to.deep.equal(parsedSchema.indirect); - expect(parser.$refs.paths()).to.deep.equal([path.abs("specs/circular-extended/circular-extended-indirect.yaml")]); - // The "circular" flag should NOT be set - // (it only gets set by `dereference`) - expect(parser.$refs.circular).to.equal(false); - }); - - it("should resolve successfully", helper.testResolve( - path.rel("specs/circular-extended/circular-extended-indirect.yaml"), - path.abs("specs/circular-extended/circular-extended-indirect.yaml"), parsedSchema.indirect, - path.abs("specs/circular-extended/definitions/parent-with-children.yaml"), parsedSchema.parentWithChildren, - path.abs("specs/circular-extended/definitions/child-with-parents.yaml"), parsedSchema.childWithParents, - path.abs("specs/circular-extended/definitions/pet.yaml"), parsedSchema.pet, - path.abs("specs/circular-extended/definitions/animals.yaml"), parsedSchema.animals - )); - - it("should dereference successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.dereference(path.rel("specs/circular-extended/circular-extended-indirect.yaml")); - expect(schema).to.equal(parser.schema); - expect(schema).to.deep.equal(dereferencedSchema.indirect.fullyDereferenced); - // The "circular" flag should be set - expect(parser.$refs.circular).to.equal(true); - // Reference equality - expect(schema.definitions.parent.properties.children.items.properties) - .to.equal(schema.definitions.child.properties); - expect(schema.definitions.child.properties.parents.items.properties) - .to.equal(schema.definitions.parent.properties); - expect(schema.definitions.child.properties.pet.properties) - .to.equal(schema.definitions.pet.properties); - }); - - it('should not dereference circular $refs if "options.$refs.circular" is "ignore"', async () => { - let parser = new $RefParser(); - const schema = await parser.dereference(path.rel("specs/circular-extended/circular-extended-indirect.yaml"), { dereference: { circular: "ignore" }}); - expect(schema).to.equal(parser.schema); - expect(schema).to.deep.equal(dereferencedSchema.indirect.ignoreCircular$Refs); - // The "circular" flag should be set - expect(parser.$refs.circular).to.equal(true); - }); - - it('should throw an error if "options.$refs.circular" is false', async () => { - let parser = new $RefParser(); - - try { - await parser.dereference(path.rel("specs/circular-extended/circular-extended-indirect.yaml"), { dereference: { circular: false }}); - helper.shouldNotGetCalled(); - } - catch (err) { - // A ReferenceError should have been thrown - expect(err).to.be.an.instanceOf(ReferenceError); - expect(err.message).to.contain("Circular $ref pointer found at "); - expect(err.message).to.contain("specs/circular-extended/definitions/child-with-parents.yaml#/properties/parents/items"); - - // $Refs.circular should be true - expect(parser.$refs.circular).to.equal(true); - } - }); - - it("should bundle successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.bundle(path.rel("specs/circular-extended/circular-extended-indirect.yaml")); - expect(schema).to.equal(parser.schema); - expect(schema).to.deep.equal(bundledSchema.indirect); - // The "circular" flag should NOT be set - // (it only gets set by `dereference`) - expect(parser.$refs.circular).to.equal(false); - }); - }); - - describe("indirect circular and ancestor $refs", () => { - it("should parse successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.parse(path.rel("specs/circular-extended/circular-extended-indirect-ancestor.yaml")); - expect(schema).to.equal(parser.schema); - expect(schema).to.deep.equal(parsedSchema.indirectAncestor); - expect(parser.$refs.paths()).to.deep.equal([path.abs("specs/circular-extended/circular-extended-indirect-ancestor.yaml")]); - // The "circular" flag should NOT be set - // (it only gets set by `dereference`) - expect(parser.$refs.circular).to.equal(false); - }); - - it("should resolve successfully", helper.testResolve( - path.rel("specs/circular-extended/circular-extended-indirect-ancestor.yaml"), - path.abs("specs/circular-extended/circular-extended-indirect-ancestor.yaml"), parsedSchema.indirectAncestor, - path.abs("specs/circular-extended/definitions/parent-with-child.yaml"), parsedSchema.parentWithChild, - path.abs("specs/circular-extended/definitions/child-with-children.yaml"), parsedSchema.childWithChildren, - path.abs("specs/circular-extended/definitions/pet.yaml"), parsedSchema.pet, - path.abs("specs/circular-extended/definitions/animals.yaml"), parsedSchema.animals - )); - - it("should dereference successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.dereference(path.rel("specs/circular-extended/circular-extended-indirect-ancestor.yaml")); - expect(schema).to.equal(parser.schema); - expect(schema).to.deep.equal(dereferencedSchema.indirectAncestor.fullyDereferenced); - // The "circular" flag should be set - expect(parser.$refs.circular).to.equal(true); - // Reference equality - expect(schema.definitions.parent.properties.child.properties) - .to.equal(schema.definitions.child.properties); - expect(schema.definitions.child.properties.children.items.properties) - .to.equal(schema.definitions.child.properties); - expect(schema.definitions.pet.properties) - .to.equal(schema.definitions.child.properties.pet.properties); - }); - - it('should not dereference circular $refs if "options.$refs.circular" is "ignore"', async () => { - let parser = new $RefParser(); - const schema = await parser.dereference(path.rel("specs/circular-extended/circular-extended-indirect-ancestor.yaml"), { dereference: { circular: "ignore" }}); - expect(schema).to.equal(parser.schema); - expect(schema).to.deep.equal(dereferencedSchema.indirectAncestor.ignoreCircular$Refs); - // The "circular" flag should be set - expect(parser.$refs.circular).to.equal(true); - }); - - it('should throw an error if "options.$refs.circular" is false', async () => { - let parser = new $RefParser(); - - try { - await parser.dereference(path.rel("specs/circular-extended/circular-extended-indirect-ancestor.yaml"), { dereference: { circular: false }}); - helper.shouldNotGetCalled(); - } - catch (err) { - // A ReferenceError should have been thrown - expect(err).to.be.an.instanceOf(ReferenceError); - expect(err.message).to.contain("Circular $ref pointer found at "); - expect(err.message).to.contain("specs/circular-extended/definitions/child-with-children.yaml#/properties"); - - // $Refs.circular should be true - expect(parser.$refs.circular).to.equal(true); - } - }); - - it("should bundle successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.bundle(path.rel("specs/circular-extended/circular-extended-indirect-ancestor.yaml")); - expect(schema).to.equal(parser.schema); - expect(schema).to.deep.equal(bundledSchema.indirectAncestor); - // The "circular" flag should NOT be set - // (it only gets set by `dereference`) - expect(parser.$refs.circular).to.equal(false); - }); - }); - -}); diff --git a/test/specs/circular-extended/circular-extended.spec.ts b/test/specs/circular-extended/circular-extended.spec.ts new file mode 100644 index 00000000..a8949c66 --- /dev/null +++ b/test/specs/circular-extended/circular-extended.spec.ts @@ -0,0 +1,384 @@ +import { describe, it } from "vitest"; +import $RefParser from "../../../lib/index.js"; +import helper from "../../utils/helper.js"; +import path from "../../utils/path.js"; +import parsedSchema from "./parsed.js"; +import dereferencedSchema from "./dereferenced.js"; +import bundledSchema from "./bundled.js"; + +import { expect } from "vitest"; + +describe("Schema with circular $refs that extend each other", () => { + describe("$ref to self", () => { + it("should parse successfully", async () => { + const parser = new $RefParser(); + const schema = await parser.parse(path.rel("test/specs/circular-extended/circular-extended-self.yaml")); + expect(schema).to.equal(parser.schema); + expect(schema).to.deep.equal(parsedSchema.self); + expect(parser.$refs.paths()).to.deep.equal([ + path.abs("test/specs/circular-extended/circular-extended-self.yaml"), + ]); + // The "circular" flag should NOT be set + // (it only gets set by `dereference`) + expect(parser.$refs.circular).to.equal(false); + }); + + it( + "should resolve successfully", + helper.testResolve( + path.rel("test/specs/circular-extended/circular-extended-self.yaml"), + path.abs("test/specs/circular-extended/circular-extended-self.yaml"), + parsedSchema.self, + path.abs("test/specs/circular-extended/definitions/thing.yaml"), + parsedSchema.thing, + ), + ); + + it("should dereference successfully", async () => { + const parser = new $RefParser(); + const schema = await parser.dereference(path.rel("test/specs/circular-extended/circular-extended-self.yaml")); + expect(schema).to.equal(parser.schema); + expect(schema).to.deep.equal(dereferencedSchema.self); + // The "circular" flag should be set + expect(parser.$refs.circular).to.equal(true); + }); + + it('should not dereference circular $refs if "options.$refs.circular" is "ignore"', async () => { + const parser = new $RefParser(); + + const schema = await parser.dereference(path.rel("test/specs/circular-extended/circular-extended-self.yaml"), { + dereference: { circular: "ignore" }, + }); + expect(schema).to.equal(parser.schema); + expect(schema).to.deep.equal(dereferencedSchema.self); + // The "circular" flag should be set + expect(parser.$refs.circular).to.equal(true); + }); + + it('should throw an error if "options.$refs.circular" is false', async () => { + const parser = new $RefParser(); + + try { + await parser.dereference(path.rel("test/specs/circular-extended/circular-extended-self.yaml"), { + dereference: { circular: false }, + }); + helper.shouldNotGetCalled(); + } catch (err) { + // A ReferenceError should have been thrown + expect(err).to.be.an.instanceOf(ReferenceError); + // @ts-expect-error TS(2571): Object is of type 'unknown'. + expect(err.message).to.contain("Circular $ref pointer found at "); + // @ts-expect-error TS(2571): Object is of type 'unknown'. + expect(err.message).to.contain("specs/circular-extended/circular-extended-self.yaml#/definitions/thing"); + + // $Refs.circular should be true + expect(parser.$refs.circular).to.equal(true); + } + }); + + it("should bundle successfully", async () => { + const parser = new $RefParser(); + const schema = await parser.bundle(path.rel("test/specs/circular-extended/circular-extended-self.yaml")); + expect(schema).to.equal(parser.schema); + expect(schema).to.deep.equal(bundledSchema.self); + // The "circular" flag should NOT be set + // (it only gets set by `dereference`) + expect(parser.$refs.circular).to.equal(false); + }); + }); + + describe("$ref to ancestor", () => { + it("should parse successfully", async () => { + const parser = new $RefParser(); + const schema = await parser.parse(path.rel("test/specs/circular-extended/circular-extended-ancestor.yaml")); + expect(schema).to.equal(parser.schema); + expect(schema).to.deep.equal(parsedSchema.ancestor); + expect(parser.$refs.paths()).to.deep.equal([ + path.abs("test/specs/circular-extended/circular-extended-ancestor.yaml"), + ]); + // The "circular" flag should NOT be set + // (it only gets set by `dereference`) + expect(parser.$refs.circular).to.equal(false); + }); + + it( + "should resolve successfully", + helper.testResolve( + path.rel("test/specs/circular-extended/circular-extended-ancestor.yaml"), + path.abs("test/specs/circular-extended/circular-extended-ancestor.yaml"), + parsedSchema.ancestor, + path.abs("test/specs/circular-extended/definitions/person-with-spouse.yaml"), + parsedSchema.personWithSpouse, + path.abs("test/specs/circular-extended/definitions/pet.yaml"), + parsedSchema.pet, + path.abs("test/specs/circular-extended/definitions/animals.yaml"), + parsedSchema.animals, + ), + ); + + it("should dereference successfully", async () => { + const parser = new $RefParser(); + const schema = await parser.dereference(path.rel("test/specs/circular-extended/circular-extended-ancestor.yaml")); + expect(schema).to.equal(parser.schema); + expect(schema).to.deep.equal(dereferencedSchema.ancestor.fullyDereferenced); + // The "circular" flag should be set + expect(parser.$refs.circular).to.equal(true); + // Reference equality + // @ts-expect-error TS(2532): Object is possibly 'undefined'. + expect(schema.definitions.person.properties.spouse.properties).to.equal(schema.definitions.person.properties); + // @ts-expect-error TS(2532): Object is possibly 'undefined'. + expect(schema.definitions.person.properties.pet.properties).to.equal(schema.definitions.pet.properties); + }); + + it('should not dereference circular $refs if "options.$refs.circular" is "ignore"', async () => { + const parser = new $RefParser(); + + const schema = await parser.dereference( + path.rel("test/specs/circular-extended/circular-extended-ancestor.yaml"), + { + dereference: { circular: "ignore" }, + }, + ); + expect(schema).to.equal(parser.schema); + expect(schema).to.deep.equal(dereferencedSchema.ancestor.ignoreCircular$Refs); + // The "circular" flag should be set + expect(parser.$refs.circular).to.equal(true); + }); + + it('should throw an error if "options.$refs.circular" is false', async () => { + const parser = new $RefParser(); + + try { + await parser.dereference(path.rel("test/specs/circular-extended/circular-extended-ancestor.yaml"), { + dereference: { circular: false }, + }); + helper.shouldNotGetCalled(); + } catch (err) { + // A ReferenceError should have been thrown + expect(err).to.be.an.instanceOf(ReferenceError); + // @ts-expect-error TS(2571): Object is of type 'unknown'. + expect(err.message).to.contain("Circular $ref pointer found at "); + // @ts-expect-error TS(2571): Object is of type 'unknown'. + expect(err.message).to.contain( + "specs/circular-extended/definitions/person-with-spouse.yaml#/properties/spouse", + ); + + // $Refs.circular should be true + expect(parser.$refs.circular).to.equal(true); + } + }); + + it("should bundle successfully", async () => { + const parser = new $RefParser(); + const schema = await parser.bundle(path.rel("test/specs/circular-extended/circular-extended-ancestor.yaml")); + expect(schema).to.equal(parser.schema); + expect(schema).to.deep.equal(bundledSchema.ancestor); + // The "circular" flag should NOT be set + // (it only gets set by `dereference`) + expect(parser.$refs.circular).to.equal(false); + }); + }); + + describe("indirect circular $refs", () => { + it("should parse successfully", async () => { + const parser = new $RefParser(); + const schema = await parser.parse(path.rel("test/specs/circular-extended/circular-extended-indirect.yaml")); + expect(schema).to.equal(parser.schema); + expect(schema).to.deep.equal(parsedSchema.indirect); + expect(parser.$refs.paths()).to.deep.equal([ + path.abs("test/specs/circular-extended/circular-extended-indirect.yaml"), + ]); + // The "circular" flag should NOT be set + // (it only gets set by `dereference`) + expect(parser.$refs.circular).to.equal(false); + }); + + it( + "should resolve successfully", + helper.testResolve( + path.rel("test/specs/circular-extended/circular-extended-indirect.yaml"), + path.abs("test/specs/circular-extended/circular-extended-indirect.yaml"), + parsedSchema.indirect, + path.abs("test/specs/circular-extended/definitions/parent-with-children.yaml"), + parsedSchema.parentWithChildren, + path.abs("test/specs/circular-extended/definitions/child-with-parents.yaml"), + parsedSchema.childWithParents, + path.abs("test/specs/circular-extended/definitions/pet.yaml"), + parsedSchema.pet, + path.abs("test/specs/circular-extended/definitions/animals.yaml"), + parsedSchema.animals, + ), + ); + + it("should dereference successfully", async () => { + const parser = new $RefParser(); + const schema = await parser.dereference(path.rel("test/specs/circular-extended/circular-extended-indirect.yaml")); + expect(schema).to.equal(parser.schema); + expect(schema).to.deep.equal(dereferencedSchema.indirect.fullyDereferenced); + // The "circular" flag should be set + expect(parser.$refs.circular).to.equal(true); + // Reference equality + // @ts-expect-error TS(2532): Object is possibly 'undefined'. + expect(schema.definitions.parent.properties.children.items.properties).to.equal( + // @ts-expect-error TS(2532): Object is possibly 'undefined'. + schema.definitions.child.properties, + ); + // @ts-expect-error TS(2532): Object is possibly 'undefined'. + expect(schema.definitions.child.properties.parents.items.properties).to.equal( + // @ts-expect-error TS(2532): Object is possibly 'undefined'. + schema.definitions.parent.properties, + ); + // @ts-expect-error TS(2532): Object is possibly 'undefined'. + expect(schema.definitions.child.properties.pet.properties).to.equal(schema.definitions.pet.properties); + }); + + it('should not dereference circular $refs if "options.$refs.circular" is "ignore"', async () => { + const parser = new $RefParser(); + + const schema = await parser.dereference( + path.rel("test/specs/circular-extended/circular-extended-indirect.yaml"), + { + dereference: { circular: "ignore" }, + }, + ); + expect(schema).to.equal(parser.schema); + expect(schema).to.deep.equal(dereferencedSchema.indirect.ignoreCircular$Refs); + // The "circular" flag should be set + expect(parser.$refs.circular).to.equal(true); + }); + + it('should throw an error if "options.$refs.circular" is false', async () => { + const parser = new $RefParser(); + + try { + await parser.dereference(path.rel("test/specs/circular-extended/circular-extended-indirect.yaml"), { + dereference: { circular: false }, + }); + helper.shouldNotGetCalled(); + } catch (err) { + // A ReferenceError should have been thrown + expect(err).to.be.an.instanceOf(ReferenceError); + // @ts-expect-error TS(2571): Object is of type 'unknown'. + expect(err.message).to.contain("Circular $ref pointer found at "); + // @ts-expect-error TS(2571): Object is of type 'unknown'. + expect(err.message).to.contain( + "specs/circular-extended/definitions/child-with-parents.yaml#/properties/parents/items", + ); + + // $Refs.circular should be true + expect(parser.$refs.circular).to.equal(true); + } + }); + + it("should bundle successfully", async () => { + const parser = new $RefParser(); + const schema = await parser.bundle(path.rel("test/specs/circular-extended/circular-extended-indirect.yaml")); + expect(schema).to.equal(parser.schema); + expect(schema).to.deep.equal(bundledSchema.indirect); + // The "circular" flag should NOT be set + // (it only gets set by `dereference`) + expect(parser.$refs.circular).to.equal(false); + }); + }); + + describe("indirect circular and ancestor $refs", () => { + it("should parse successfully", async () => { + const parser = new $RefParser(); + const schema = await parser.parse( + path.rel("test/specs/circular-extended/circular-extended-indirect-ancestor.yaml"), + ); + expect(schema).to.equal(parser.schema); + expect(schema).to.deep.equal(parsedSchema.indirectAncestor); + expect(parser.$refs.paths()).to.deep.equal([ + path.abs("test/specs/circular-extended/circular-extended-indirect-ancestor.yaml"), + ]); + // The "circular" flag should NOT be set + // (it only gets set by `dereference`) + expect(parser.$refs.circular).to.equal(false); + }); + + it( + "should resolve successfully", + helper.testResolve( + path.rel("test/specs/circular-extended/circular-extended-indirect-ancestor.yaml"), + path.abs("test/specs/circular-extended/circular-extended-indirect-ancestor.yaml"), + parsedSchema.indirectAncestor, + path.abs("test/specs/circular-extended/definitions/parent-with-child.yaml"), + parsedSchema.parentWithChild, + path.abs("test/specs/circular-extended/definitions/child-with-children.yaml"), + parsedSchema.childWithChildren, + path.abs("test/specs/circular-extended/definitions/pet.yaml"), + parsedSchema.pet, + path.abs("test/specs/circular-extended/definitions/animals.yaml"), + parsedSchema.animals, + ), + ); + + it("should dereference successfully", async () => { + const parser = new $RefParser(); + const schema = await parser.dereference( + path.rel("test/specs/circular-extended/circular-extended-indirect-ancestor.yaml"), + ); + expect(schema).to.equal(parser.schema); + expect(schema).to.deep.equal(dereferencedSchema.indirectAncestor.fullyDereferenced); + // The "circular" flag should be set + expect(parser.$refs.circular).to.equal(true); + // Reference equality + // @ts-expect-error TS(2532): Object is possibly 'undefined'. + expect(schema.definitions.parent.properties.child.properties).to.equal(schema.definitions.child.properties); + // @ts-expect-error TS(2532): Object is possibly 'undefined'. + expect(schema.definitions.child.properties.children.items.properties).to.equal( + // @ts-expect-error TS(2532): Object is possibly 'undefined'. + schema.definitions.child.properties, + ); + // @ts-expect-error TS(2532): Object is possibly 'undefined'. + expect(schema.definitions.pet.properties).to.equal(schema.definitions.child.properties.pet.properties); + }); + + it('should not dereference circular $refs if "options.$refs.circular" is "ignore"', async () => { + const parser = new $RefParser(); + + const schema = await parser.dereference( + path.rel("test/specs/circular-extended/circular-extended-indirect-ancestor.yaml"), + { dereference: { circular: "ignore" } }, + ); + expect(schema).to.equal(parser.schema); + expect(schema).to.deep.equal(dereferencedSchema.indirectAncestor.ignoreCircular$Refs); + // The "circular" flag should be set + expect(parser.$refs.circular).to.equal(true); + }); + + it('should throw an error if "options.$refs.circular" is false', async () => { + const parser = new $RefParser(); + + try { + await parser.dereference(path.rel("test/specs/circular-extended/circular-extended-indirect-ancestor.yaml"), { + dereference: { circular: false }, + }); + helper.shouldNotGetCalled(); + } catch (err) { + // A ReferenceError should have been thrown + expect(err).to.be.an.instanceOf(ReferenceError); + // @ts-expect-error TS(2571): Object is of type 'unknown'. + expect(err.message).to.contain("Circular $ref pointer found at "); + // @ts-expect-error TS(2571): Object is of type 'unknown'. + expect(err.message).to.contain("specs/circular-extended/definitions/child-with-children.yaml#/properties"); + + // $Refs.circular should be true + expect(parser.$refs.circular).to.equal(true); + } + }); + + it("should bundle successfully", async () => { + const parser = new $RefParser(); + const schema = await parser.bundle( + path.rel("test/specs/circular-extended/circular-extended-indirect-ancestor.yaml"), + ); + expect(schema).to.equal(parser.schema); + expect(schema).to.deep.equal(bundledSchema.indirectAncestor); + // The "circular" flag should NOT be set + // (it only gets set by `dereference`) + expect(parser.$refs.circular).to.equal(false); + }); + }); +}); diff --git a/test/specs/circular-extended/definitions/pet.yaml b/test/specs/circular-extended/definitions/pet.yaml index 16565ecf..204f5c95 100644 --- a/test/specs/circular-extended/definitions/pet.yaml +++ b/test/specs/circular-extended/definitions/pet.yaml @@ -1,11 +1,11 @@ title: pet type: - $ref: "animals.yaml#/definitions/cat/type" # <-- deep linking into an extended object + $ref: "animals.yaml#/definitions/cat/type" # <-- deep linking into an extended object properties: name: - $ref: "animals.yaml#/definitions/dog/properties/name" # <-- deep linking into an extended object + $ref: "animals.yaml#/definitions/dog/properties/name" # <-- deep linking into an extended object age: - $ref: "animals.yaml#/definitions/bird/properties/age" # <-- deep linking into an extended object + $ref: "animals.yaml#/definitions/bird/properties/age" # <-- deep linking into an extended object species: type: string enum: diff --git a/test/specs/circular-extended/dereferenced.js b/test/specs/circular-extended/dereferenced.js deleted file mode 100644 index 32867989..00000000 --- a/test/specs/circular-extended/dereferenced.js +++ /dev/null @@ -1,212 +0,0 @@ -const dereferencedSchema = { - self: { - definitions: { - thing: { - title: "thing", - $ref: "#/definitions/thing", - description: "This JSON Reference has additional properties (other than $ref). Normally, this creates a new type that extends the referenced type, but since this reference points to ITSELF, it doesn't do that.\n", - } - } - }, - - pet: { - title: "pet", - type: "object", - properties: { - age: { - type: "number" - }, - name: { - type: "string" - }, - species: { - type: "string", - enum: [ - "cat", - "dog", - "bird", - "fish" - ], - }, - }, - }, - - ancestor: { - fullyDereferenced: { - definitions: { - person: { - title: "person", - properties: { - spouse: { - title: "person", - description: 'This JSON Reference has additional properties (other than $ref). This creates a new type that extends "person".\n', - properties: null - }, - pet: { - description: 'This JSON Reference has additional properties (other than $ref). This creates a new type that extends "pet".\n', - title: "pet", - type: "object", - properties: null, - }, - name: { - type: "string" - } - } - }, - pet: null - } - }, - - ignoreCircular$Refs: { - definitions: { - person: { - $ref: "definitions/person-with-spouse.yaml" - }, - pet: null - } - } - }, - - indirect: { - fullyDereferenced: { - definitions: { - parent: { - title: "parent", - properties: { - name: { - type: "string" - }, - children: { - items: { - title: "child", - description: 'This JSON Reference has additional properties (other than $ref). This creates a new type that extends "child".\n', - properties: null - }, - type: "array" - } - } - }, - child: { - title: "child", - properties: { - parents: { - items: { - title: "parent", - description: 'This JSON Reference has additional properties (other than $ref). This creates a new type that extends "parent".\n', - properties: null - }, - type: "array" - }, - pet: { - description: 'This JSON Reference has additional properties (other than $ref). This creates a new type that extends "pet".\n', - title: "pet", - type: "object", - properties: null, - }, - name: { - type: "string" - } - } - }, - pet: null - } - }, - - ignoreCircular$Refs: { - definitions: { - parent: { - $ref: "definitions/parent-with-children.yaml" - }, - child: { - $ref: "definitions/child-with-parents.yaml" - }, - pet: null - } - } - }, - - indirectAncestor: { - fullyDereferenced: { - definitions: { - pet: null, - parent: { - title: "parent", - properties: { - name: { - type: "string" - }, - child: { - description: 'This JSON Reference has additional properties (other than $ref). This creates a new type that extends "child".\n', - title: "child", - properties: null - } - }, - }, - child: { - title: "child", - properties: { - pet: { - description: 'This JSON Reference has additional properties (other than $ref). This creates a new type that extends "pet".\n', - title: "pet", - type: "object", - properties: null, - }, - name: { - type: "string" - }, - children: { - items: { - description: 'This JSON Reference has additional properties (other than $ref). This creates a new type that extends "child".\n', - title: "child", - properties: null - }, - type: "array", - description: "children" - } - }, - } - } - }, - - ignoreCircular$Refs: { - definitions: { - pet: null, - parent: { - $ref: "definitions/parent-with-child.yaml" - }, - child: { - $ref: "definitions/child-with-children.yaml" - } - } - } - } -}; -dereferencedSchema.ancestor.fullyDereferenced.definitions.pet = - dereferencedSchema.ancestor.ignoreCircular$Refs.definitions.pet = - dereferencedSchema.indirect.fullyDereferenced.definitions.pet = - dereferencedSchema.indirect.ignoreCircular$Refs.definitions.pet = - dereferencedSchema.indirectAncestor.fullyDereferenced.definitions.pet = - dereferencedSchema.indirectAncestor.ignoreCircular$Refs.definitions.pet = - dereferencedSchema.pet; - -dereferencedSchema.ancestor.fullyDereferenced.definitions.person.properties.pet.properties = - dereferencedSchema.indirect.fullyDereferenced.definitions.child.properties.pet.properties = - dereferencedSchema.indirectAncestor.fullyDereferenced.definitions.child.properties.pet.properties = - dereferencedSchema.ancestor.fullyDereferenced.definitions.pet.properties; - -dereferencedSchema.ancestor.fullyDereferenced.definitions.person.properties.spouse.properties = - dereferencedSchema.ancestor.fullyDereferenced.definitions.person.properties; - -dereferencedSchema.indirect.fullyDereferenced.definitions.parent.properties.children.items.properties = - dereferencedSchema.indirect.fullyDereferenced.definitions.child.properties; - -dereferencedSchema.indirect.fullyDereferenced.definitions.child.properties.parents.items.properties = - dereferencedSchema.indirect.fullyDereferenced.definitions.parent.properties; - -dereferencedSchema.indirectAncestor.fullyDereferenced.definitions.parent.properties.child.properties = - dereferencedSchema.indirectAncestor.fullyDereferenced.definitions.child.properties; - -dereferencedSchema.indirectAncestor.fullyDereferenced.definitions.child.properties.children.items.properties = - dereferencedSchema.indirectAncestor.fullyDereferenced.definitions.child.properties; - -export default dereferencedSchema; diff --git a/test/specs/circular-extended/dereferenced.ts b/test/specs/circular-extended/dereferenced.ts new file mode 100644 index 00000000..9e14550c --- /dev/null +++ b/test/specs/circular-extended/dereferenced.ts @@ -0,0 +1,228 @@ +const dereferencedSchema = { + self: { + definitions: { + thing: { + title: "thing", + $ref: "#/definitions/thing", + description: + "This JSON Reference has additional properties (other than $ref). Normally, this creates a new type that extends the referenced type, but since this reference points to ITSELF, it doesn't do that.\n", + }, + }, + }, + + pet: { + title: "pet", + type: "object", + properties: { + age: { + type: "number", + }, + name: { + type: "string", + }, + species: { + type: "string", + enum: ["cat", "dog", "bird", "fish"], + }, + }, + }, + + ancestor: { + fullyDereferenced: { + definitions: { + person: { + title: "person", + properties: { + spouse: { + title: "person", + description: + 'This JSON Reference has additional properties (other than $ref). This creates a new type that extends "person".\n', + properties: null, + }, + pet: { + description: + 'This JSON Reference has additional properties (other than $ref). This creates a new type that extends "pet".\n', + title: "pet", + type: "object", + properties: null, + }, + name: { + type: "string", + }, + }, + }, + pet: null, + }, + }, + + ignoreCircular$Refs: { + definitions: { + person: { + $ref: "definitions/person-with-spouse.yaml", + }, + pet: null, + }, + }, + }, + + indirect: { + fullyDereferenced: { + definitions: { + parent: { + title: "parent", + properties: { + name: { + type: "string", + }, + children: { + items: { + title: "child", + description: + 'This JSON Reference has additional properties (other than $ref). This creates a new type that extends "child".\n', + properties: null, + }, + type: "array", + }, + }, + }, + child: { + title: "child", + properties: { + parents: { + items: { + title: "parent", + description: + 'This JSON Reference has additional properties (other than $ref). This creates a new type that extends "parent".\n', + properties: null, + }, + type: "array", + }, + pet: { + description: + 'This JSON Reference has additional properties (other than $ref). This creates a new type that extends "pet".\n', + title: "pet", + type: "object", + properties: null, + }, + name: { + type: "string", + }, + }, + }, + pet: null, + }, + }, + + ignoreCircular$Refs: { + definitions: { + parent: { + $ref: "definitions/parent-with-children.yaml", + }, + child: { + $ref: "definitions/child-with-parents.yaml", + }, + pet: null, + }, + }, + }, + + indirectAncestor: { + fullyDereferenced: { + definitions: { + pet: null, + parent: { + title: "parent", + properties: { + name: { + type: "string", + }, + child: { + description: + 'This JSON Reference has additional properties (other than $ref). This creates a new type that extends "child".\n', + title: "child", + properties: null, + }, + }, + }, + child: { + title: "child", + properties: { + pet: { + description: + 'This JSON Reference has additional properties (other than $ref). This creates a new type that extends "pet".\n', + title: "pet", + type: "object", + properties: null, + }, + name: { + type: "string", + }, + children: { + items: { + description: + 'This JSON Reference has additional properties (other than $ref). This creates a new type that extends "child".\n', + title: "child", + properties: null, + }, + type: "array", + description: "children", + }, + }, + }, + }, + }, + + ignoreCircular$Refs: { + definitions: { + pet: null, + parent: { + $ref: "definitions/parent-with-child.yaml", + }, + child: { + $ref: "definitions/child-with-children.yaml", + }, + }, + }, + }, +}; +// @ts-expect-error TS(2322): Type '{ title: string; type: string; properties: {... Remove this comment to see the full error message +dereferencedSchema.ancestor.fullyDereferenced.definitions.pet = + // @ts-expect-error TS(2322): Type '{ title: string; type: string; properties: {... Remove this comment to see the full error message + dereferencedSchema.ancestor.ignoreCircular$Refs.definitions.pet = + // @ts-expect-error TS(2322): Type '{ title: string; type: string; properties: {... Remove this comment to see the full error message + dereferencedSchema.indirect.fullyDereferenced.definitions.pet = + // @ts-expect-error TS(2322): Type '{ title: string; type: string; properties: {... Remove this comment to see the full error message + dereferencedSchema.indirect.ignoreCircular$Refs.definitions.pet = + // @ts-expect-error TS(2322): Type '{ title: string; type: string; properties: {... Remove this comment to see the full error message + dereferencedSchema.indirectAncestor.fullyDereferenced.definitions.pet = + // @ts-expect-error TS(2322): Type '{ title: string; type: string; properties: {... Remove this comment to see the full error message + dereferencedSchema.indirectAncestor.ignoreCircular$Refs.definitions.pet = + dereferencedSchema.pet; + +dereferencedSchema.ancestor.fullyDereferenced.definitions.person.properties.pet.properties = + dereferencedSchema.indirect.fullyDereferenced.definitions.child.properties.pet.properties = + dereferencedSchema.indirectAncestor.fullyDereferenced.definitions.child.properties.pet.properties = + // @ts-expect-error TS(2531): Object is possibly 'null'. + dereferencedSchema.ancestor.fullyDereferenced.definitions.pet.properties; + +// @ts-expect-error TS(2322): Type '{ spouse: { title: string; description: stri... Remove this comment to see the full error message +dereferencedSchema.ancestor.fullyDereferenced.definitions.person.properties.spouse.properties = + dereferencedSchema.ancestor.fullyDereferenced.definitions.person.properties; + +// @ts-expect-error TS(2322): Type '{ parents: { items: { title: string; descrip... Remove this comment to see the full error message +dereferencedSchema.indirect.fullyDereferenced.definitions.parent.properties.children.items.properties = + dereferencedSchema.indirect.fullyDereferenced.definitions.child.properties; + +// @ts-expect-error TS(2322): Type '{ name: { type: string; }; children: { items... Remove this comment to see the full error message +dereferencedSchema.indirect.fullyDereferenced.definitions.child.properties.parents.items.properties = + dereferencedSchema.indirect.fullyDereferenced.definitions.parent.properties; + +// @ts-expect-error TS(2322): Type '{ pet: { description: string; title: string;... Remove this comment to see the full error message +dereferencedSchema.indirectAncestor.fullyDereferenced.definitions.parent.properties.child.properties = + dereferencedSchema.indirectAncestor.fullyDereferenced.definitions.child.properties; + +// @ts-expect-error TS(2322): Type '{ pet: { description: string; title: string;... Remove this comment to see the full error message +dereferencedSchema.indirectAncestor.fullyDereferenced.definitions.child.properties.children.items.properties = + dereferencedSchema.indirectAncestor.fullyDereferenced.definitions.child.properties; + +export default dereferencedSchema; diff --git a/test/specs/circular-extended/parsed.js b/test/specs/circular-extended/parsed.js deleted file mode 100644 index dc5740e0..00000000 --- a/test/specs/circular-extended/parsed.js +++ /dev/null @@ -1,198 +0,0 @@ -export default { - self: { - definitions: { - thing: { - $ref: "definitions/thing.yaml" - } - } - }, - - thing: { - title: "thing", - $ref: "thing.yaml", - description: "This JSON Reference has additional properties (other than $ref). Normally, this creates a new type that extends the referenced type, but since this reference points to ITSELF, it doesn't do that.\n", - }, - - ancestor: { - definitions: { - person: { - $ref: "definitions/person-with-spouse.yaml" - }, - pet: { - $ref: "definitions/pet.yaml" - } - } - }, - - personWithSpouse: { - title: "person", - properties: { - spouse: { - description: 'This JSON Reference has additional properties (other than $ref). This creates a new type that extends "person".\n', - $ref: "person-with-spouse.yaml" - }, - pet: { - description: 'This JSON Reference has additional properties (other than $ref). This creates a new type that extends "pet".\n', - $ref: "pet.yaml" - }, - name: { - type: "string" - } - } - }, - - animals: { - definitions: { - fish: { - title: "fish", - $ref: "#/definitions/animal" - }, - cat: { - title: "cat", - $ref: "#/definitions/animal" - }, - bird: { - title: "bird", - $ref: "#/definitions/animal" - }, - animal: { - type: "object", - properties: { - age: { - type: "number" - }, - name: { - type: "string" - } - }, - title: "animal" - }, - dog: { - title: "dog", - $ref: "#/definitions/animal" - } - } - }, - - pet: { - title: "pet", - type: { - $ref: "animals.yaml#/definitions/cat/type" - }, - properties: { - age: { - $ref: "animals.yaml#/definitions/bird/properties/age" - }, - name: { - $ref: "animals.yaml#/definitions/dog/properties/name" - }, - species: { - type: "string", - enum: [ - "cat", - "dog", - "bird", - "fish" - ], - }, - }, - }, - - indirect: { - definitions: { - parent: { - $ref: "definitions/parent-with-children.yaml" - }, - child: { - $ref: "definitions/child-with-parents.yaml" - }, - pet: { - $ref: "definitions/pet.yaml" - } - } - }, - - parentWithChildren: { - title: "parent", - properties: { - name: { - type: "string" - }, - children: { - items: { - description: 'This JSON Reference has additional properties (other than $ref). This creates a new type that extends "child".\n', - $ref: "child-with-parents.yaml" - }, - type: "array" - } - } - }, - - childWithParents: { - title: "child", - properties: { - parents: { - items: { - description: 'This JSON Reference has additional properties (other than $ref). This creates a new type that extends "parent".\n', - $ref: "parent-with-children.yaml" - }, - type: "array" - }, - pet: { - description: 'This JSON Reference has additional properties (other than $ref). This creates a new type that extends "pet".\n', - $ref: "pet.yaml" - }, - name: { - type: "string" - } - } - }, - - indirectAncestor: { - definitions: { - pet: { - $ref: "definitions/pet.yaml" - }, - parent: { - $ref: "definitions/parent-with-child.yaml" - }, - child: { - $ref: "definitions/child-with-children.yaml" - } - } - }, - - parentWithChild: { - title: "parent", - properties: { - name: { - type: "string" - }, - child: { - description: 'This JSON Reference has additional properties (other than $ref). This creates a new type that extends "child".\n', - $ref: "child-with-children.yaml" - } - }, - }, - - childWithChildren: { - title: "child", - properties: { - pet: { - description: 'This JSON Reference has additional properties (other than $ref). This creates a new type that extends "pet".\n', - $ref: "pet.yaml" - }, - name: { - type: "string" - }, - children: { - items: { - description: 'This JSON Reference has additional properties (other than $ref). This creates a new type that extends "child".\n', - $ref: "child-with-children.yaml" - }, - type: "array", - description: "children" - } - }, - } -}; diff --git a/test/specs/circular-extended/parsed.ts b/test/specs/circular-extended/parsed.ts new file mode 100644 index 00000000..582d34ad --- /dev/null +++ b/test/specs/circular-extended/parsed.ts @@ -0,0 +1,202 @@ +export default { + self: { + definitions: { + thing: { + $ref: "definitions/thing.yaml", + }, + }, + }, + + thing: { + title: "thing", + $ref: "thing.yaml", + description: + "This JSON Reference has additional properties (other than $ref). Normally, this creates a new type that extends the referenced type, but since this reference points to ITSELF, it doesn't do that.\n", + }, + + ancestor: { + definitions: { + person: { + $ref: "definitions/person-with-spouse.yaml", + }, + pet: { + $ref: "definitions/pet.yaml", + }, + }, + }, + + personWithSpouse: { + title: "person", + properties: { + spouse: { + description: + 'This JSON Reference has additional properties (other than $ref). This creates a new type that extends "person".\n', + $ref: "person-with-spouse.yaml", + }, + pet: { + description: + 'This JSON Reference has additional properties (other than $ref). This creates a new type that extends "pet".\n', + $ref: "pet.yaml", + }, + name: { + type: "string", + }, + }, + }, + + animals: { + definitions: { + fish: { + title: "fish", + $ref: "#/definitions/animal", + }, + cat: { + title: "cat", + $ref: "#/definitions/animal", + }, + bird: { + title: "bird", + $ref: "#/definitions/animal", + }, + animal: { + type: "object", + properties: { + age: { + type: "number", + }, + name: { + type: "string", + }, + }, + title: "animal", + }, + dog: { + title: "dog", + $ref: "#/definitions/animal", + }, + }, + }, + + pet: { + title: "pet", + type: { + $ref: "animals.yaml#/definitions/cat/type", + }, + properties: { + age: { + $ref: "animals.yaml#/definitions/bird/properties/age", + }, + name: { + $ref: "animals.yaml#/definitions/dog/properties/name", + }, + species: { + type: "string", + enum: ["cat", "dog", "bird", "fish"], + }, + }, + }, + + indirect: { + definitions: { + parent: { + $ref: "definitions/parent-with-children.yaml", + }, + child: { + $ref: "definitions/child-with-parents.yaml", + }, + pet: { + $ref: "definitions/pet.yaml", + }, + }, + }, + + parentWithChildren: { + title: "parent", + properties: { + name: { + type: "string", + }, + children: { + items: { + description: + 'This JSON Reference has additional properties (other than $ref). This creates a new type that extends "child".\n', + $ref: "child-with-parents.yaml", + }, + type: "array", + }, + }, + }, + + childWithParents: { + title: "child", + properties: { + parents: { + items: { + description: + 'This JSON Reference has additional properties (other than $ref). This creates a new type that extends "parent".\n', + $ref: "parent-with-children.yaml", + }, + type: "array", + }, + pet: { + description: + 'This JSON Reference has additional properties (other than $ref). This creates a new type that extends "pet".\n', + $ref: "pet.yaml", + }, + name: { + type: "string", + }, + }, + }, + + indirectAncestor: { + definitions: { + pet: { + $ref: "definitions/pet.yaml", + }, + parent: { + $ref: "definitions/parent-with-child.yaml", + }, + child: { + $ref: "definitions/child-with-children.yaml", + }, + }, + }, + + parentWithChild: { + title: "parent", + properties: { + name: { + type: "string", + }, + child: { + description: + 'This JSON Reference has additional properties (other than $ref). This creates a new type that extends "child".\n', + $ref: "child-with-children.yaml", + }, + }, + }, + + childWithChildren: { + title: "child", + properties: { + pet: { + description: + 'This JSON Reference has additional properties (other than $ref). This creates a new type that extends "pet".\n', + $ref: "pet.yaml", + }, + name: { + type: "string", + }, + children: { + items: { + description: + 'This JSON Reference has additional properties (other than $ref). This creates a new type that extends "child".\n', + $ref: "child-with-children.yaml", + }, + type: "array", + description: "children", + }, + }, + }, +}; diff --git a/test/specs/circular-external-direct/circular-external-direct.spec.js b/test/specs/circular-external-direct/circular-external-direct.spec.ts similarity index 58% rename from test/specs/circular-external-direct/circular-external-direct.spec.js rename to test/specs/circular-external-direct/circular-external-direct.spec.ts index 8b6ab881..4e724372 100644 --- a/test/specs/circular-external-direct/circular-external-direct.spec.js +++ b/test/specs/circular-external-direct/circular-external-direct.spec.ts @@ -1,7 +1,5 @@ -import chai from "chai"; -import chaiSubset from "chai-subset"; -chai.use(chaiSubset); -const { expect } = chai; +import { describe, it } from "vitest"; +import { expect } from "vitest"; import $RefParser from "../../../lib/index.js"; import path from "../../utils/path.js"; import parsedSchema from "./parsed.js"; @@ -9,19 +7,25 @@ import dereferencedSchema from "./dereferenced.js"; describe("Schema with direct circular (recursive) external $refs", () => { it("should parse successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.parse(path.rel("specs/circular-external-direct/circular-external-direct-root.yaml")); + const parser = new $RefParser(); + const schema = await parser.parse( + path.rel("test/specs/circular-external-direct/circular-external-direct-root.yaml"), + ); expect(schema).to.equal(parser.schema); expect(schema).to.deep.equal(parsedSchema.schema); - expect(parser.$refs.paths()).to.deep.equal([path.abs("specs/circular-external-direct/circular-external-direct-root.yaml")]); + expect(parser.$refs.paths()).to.deep.equal([ + path.abs("test/specs/circular-external-direct/circular-external-direct-root.yaml"), + ]); // The "circular" flag should NOT be set // (it only gets set by `dereference`) expect(parser.$refs.circular).to.equal(false); }); it("should dereference successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.dereference(path.rel("specs/circular-external-direct/circular-external-direct-root.yaml")); + const parser = new $RefParser(); + const schema = await parser.dereference( + path.rel("test/specs/circular-external-direct/circular-external-direct-root.yaml"), + ); expect(schema).to.equal(parser.schema); expect(schema).to.deep.equal(dereferencedSchema); // The "circular" flag should be set diff --git a/test/specs/circular-external-direct/dereferenced.js b/test/specs/circular-external-direct/dereferenced.ts similarity index 100% rename from test/specs/circular-external-direct/dereferenced.js rename to test/specs/circular-external-direct/dereferenced.ts diff --git a/test/specs/circular-external-direct/parsed.js b/test/specs/circular-external-direct/parsed.ts similarity index 100% rename from test/specs/circular-external-direct/parsed.js rename to test/specs/circular-external-direct/parsed.ts diff --git a/test/specs/circular-external/bundled.js b/test/specs/circular-external/bundled.ts similarity index 55% rename from test/specs/circular-external/bundled.js rename to test/specs/circular-external/bundled.ts index 492d1a2b..e11d3ff8 100644 --- a/test/specs/circular-external/bundled.js +++ b/test/specs/circular-external/bundled.ts @@ -5,51 +5,46 @@ export default { type: "object", properties: { age: { - type: "number" + type: "number", }, name: { - type: "string" + type: "string", }, species: { - enum: [ - "cat", - "dog", - "bird", - "fish" - ], - type: "string" - } + enum: ["cat", "dog", "bird", "fish"], + type: "string", + }, }, }, thing: { - $ref: "#/definitions/thing" + $ref: "#/definitions/thing", }, person: { title: "person", type: "object", properties: { spouse: { - $ref: "#/definitions/person" + $ref: "#/definitions/person", }, name: { - type: "string" - } - } + type: "string", + }, + }, }, parent: { title: "parent", type: "object", properties: { name: { - type: "string" + type: "string", }, children: { items: { - $ref: "#/definitions/child" + $ref: "#/definitions/child", }, - type: "array" - } - } + type: "array", + }, + }, }, child: { title: "child", @@ -57,14 +52,14 @@ export default { properties: { parents: { items: { - $ref: "#/definitions/parent" + $ref: "#/definitions/parent", }, - type: "array" + type: "array", }, name: { - type: "string" - } - } - } - } + type: "string", + }, + }, + }, + }, }; diff --git a/test/specs/circular-external/circular-external.spec.js b/test/specs/circular-external/circular-external.spec.ts similarity index 53% rename from test/specs/circular-external/circular-external.spec.js rename to test/specs/circular-external/circular-external.spec.ts index d84418c9..528f731d 100644 --- a/test/specs/circular-external/circular-external.spec.js +++ b/test/specs/circular-external/circular-external.spec.ts @@ -1,4 +1,4 @@ -import chai from "chai"; +import { describe, it } from "vitest"; import $RefParser from "../../../lib/index.js"; import helper from "../../utils/helper.js"; import path from "../../utils/path.js"; @@ -6,53 +6,68 @@ import parsedSchema from "./parsed.js"; import dereferencedSchema from "./dereferenced.js"; import bundledSchema from "./bundled.js"; -const { expect } = chai; +import { expect } from "vitest"; describe("Schema with circular (recursive) external $refs", () => { it("should parse successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.parse(path.rel("specs/circular-external/circular-external.yaml")); + const parser = new $RefParser(); + const schema = await parser.parse(path.rel("test/specs/circular-external/circular-external.yaml")); expect(schema).to.equal(parser.schema); expect(schema).to.deep.equal(parsedSchema.schema); - expect(parser.$refs.paths()).to.deep.equal([path.abs("specs/circular-external/circular-external.yaml")]); + expect(parser.$refs.paths()).to.deep.equal([path.abs("test/specs/circular-external/circular-external.yaml")]); // The "circular" flag should NOT be set // (it only gets set by `dereference`) expect(parser.$refs.circular).to.equal(false); }); - it("should resolve successfully", helper.testResolve( - path.rel("specs/circular-external/circular-external.yaml"), - path.abs("specs/circular-external/circular-external.yaml"), parsedSchema.schema, - path.abs("specs/circular-external/definitions/pet.yaml"), parsedSchema.pet, - path.abs("specs/circular-external/definitions/child.yaml"), parsedSchema.child, - path.abs("specs/circular-external/definitions/parent.yaml"), parsedSchema.parent, - path.abs("specs/circular-external/definitions/person.yaml"), parsedSchema.person - )); + it( + "should resolve successfully", + helper.testResolve( + path.rel("test/specs/circular-external/circular-external.yaml"), + path.abs("test/specs/circular-external/circular-external.yaml"), + // @ts-expect-error TS(2554): Expected 2 arguments, but got 11. + parsedSchema.schema, + path.abs("test/specs/circular-external/definitions/pet.yaml"), + parsedSchema.pet, + path.abs("test/specs/circular-external/definitions/child.yaml"), + parsedSchema.child, + path.abs("test/specs/circular-external/definitions/parent.yaml"), + parsedSchema.parent, + path.abs("test/specs/circular-external/definitions/person.yaml"), + parsedSchema.person, + ), + ); it("should dereference successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.dereference(path.rel("specs/circular-external/circular-external.yaml")); + const parser = new $RefParser(); + const schema = await parser.dereference(path.rel("test/specs/circular-external/circular-external.yaml")); expect(schema).to.equal(parser.schema); expect(schema).to.deep.equal(dereferencedSchema); // The "circular" flag should be set expect(parser.$refs.circular).to.equal(true); // Reference equality + // @ts-expect-error TS(2532): Object is possibly 'undefined'. expect(schema.definitions.person.properties.spouse).to.equal(schema.definitions.person); + // @ts-expect-error TS(2532): Object is possibly 'undefined'. expect(schema.definitions.parent.properties.children.items).to.equal(schema.definitions.child); + // @ts-expect-error TS(2532): Object is possibly 'undefined'. expect(schema.definitions.child.properties.parents.items).to.equal(schema.definitions.parent); }); it('should throw an error if "options.$refs.circular" is false', async () => { - let parser = new $RefParser(); + const parser = new $RefParser(); try { - await parser.dereference(path.rel("specs/circular-external/circular-external.yaml"), { dereference: { circular: false }}); + await parser.dereference(path.rel("test/specs/circular-external/circular-external.yaml"), { + dereference: { circular: false }, + }); helper.shouldNotGetCalled(); - } - catch (err) { + } catch (err) { // A ReferenceError should have been thrown expect(err).to.be.an.instanceOf(ReferenceError); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.message).to.contain("Circular $ref pointer found at "); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.message).to.contain("specs/circular-external/circular-external.yaml#/definitions/thing"); // $Refs.circular should be true @@ -61,8 +76,8 @@ describe("Schema with circular (recursive) external $refs", () => { }); it("should bundle successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.bundle(path.rel("specs/circular-external/circular-external.yaml")); + const parser = new $RefParser(); + const schema = await parser.bundle(path.rel("test/specs/circular-external/circular-external.yaml")); expect(schema).to.equal(parser.schema); expect(schema).to.deep.equal(bundledSchema); // The "circular" flag should NOT be set diff --git a/test/specs/circular-external/circular-external.yaml b/test/specs/circular-external/circular-external.yaml index 30f98a54..0ae1d369 100644 --- a/test/specs/circular-external/circular-external.yaml +++ b/test/specs/circular-external/circular-external.yaml @@ -1,15 +1,15 @@ definitions: pet: - $ref: definitions/pet.yaml # <--- not circular + $ref: definitions/pet.yaml # <--- not circular thing: - $ref: 'circular-external.yaml#/definitions/thing' # <--- circular reference to self + $ref: "circular-external.yaml#/definitions/thing" # <--- circular reference to self person: - $ref: definitions/person.yaml # <--- circular reference to ancestor + $ref: definitions/person.yaml # <--- circular reference to ancestor parent: - $ref: definitions/parent.yaml # <--- indirect circular reference + $ref: definitions/parent.yaml # <--- indirect circular reference child: - $ref: definitions/child.yaml # <--- indirect circular reference + $ref: definitions/child.yaml # <--- indirect circular reference diff --git a/test/specs/circular-external/definitions/child.yaml b/test/specs/circular-external/definitions/child.yaml index ffa8635a..0030b774 100644 --- a/test/specs/circular-external/definitions/child.yaml +++ b/test/specs/circular-external/definitions/child.yaml @@ -6,4 +6,4 @@ properties: parents: type: array items: - $ref: parent.yaml # indirect circular reference + $ref: parent.yaml # indirect circular reference diff --git a/test/specs/circular-external/definitions/parent.yaml b/test/specs/circular-external/definitions/parent.yaml index 1b4b4123..17d64e75 100644 --- a/test/specs/circular-external/definitions/parent.yaml +++ b/test/specs/circular-external/definitions/parent.yaml @@ -6,4 +6,4 @@ properties: children: type: array items: - $ref: child.yaml # indirect circular reference + $ref: child.yaml # indirect circular reference diff --git a/test/specs/circular-external/dereferenced.js b/test/specs/circular-external/dereferenced.ts similarity index 55% rename from test/specs/circular-external/dereferenced.js rename to test/specs/circular-external/dereferenced.ts index 4fa347de..5bf9eef4 100644 --- a/test/specs/circular-external/dereferenced.js +++ b/test/specs/circular-external/dereferenced.ts @@ -5,24 +5,19 @@ const dereferencedSchema = { type: "object", properties: { age: { - type: "number" + type: "number", }, name: { - type: "string" + type: "string", }, species: { - enum: [ - "cat", - "dog", - "bird", - "fish" - ], - type: "string" - } + enum: ["cat", "dog", "bird", "fish"], + type: "string", + }, }, }, thing: { - $ref: "circular-external.yaml#/definitions/thing" + $ref: "circular-external.yaml#/definitions/thing", }, person: { title: "person", @@ -30,22 +25,22 @@ const dereferencedSchema = { properties: { spouse: null, name: { - type: "string" - } - } + type: "string", + }, + }, }, parent: { title: "parent", type: "object", properties: { name: { - type: "string" + type: "string", }, children: { items: null, - type: "array" - } - } + type: "array", + }, + }, }, child: { title: "child", @@ -53,18 +48,21 @@ const dereferencedSchema = { properties: { parents: { items: null, - type: "array" + type: "array", }, name: { - type: "string" - } - } - } - } + type: "string", + }, + }, + }, + }, }; +// @ts-expect-error TS(2322): Type '{ title: string; type: string; properties: {... Remove this comment to see the full error message dereferencedSchema.definitions.person.properties.spouse = dereferencedSchema.definitions.person; +// @ts-expect-error TS(2322): Type '{ title: string; type: string; properties: {... Remove this comment to see the full error message dereferencedSchema.definitions.parent.properties.children.items = dereferencedSchema.definitions.child; +// @ts-expect-error TS(2322): Type '{ title: string; type: string; properties: {... Remove this comment to see the full error message dereferencedSchema.definitions.child.properties.parents.items = dereferencedSchema.definitions.parent; export default dereferencedSchema; diff --git a/test/specs/circular-external/parsed.js b/test/specs/circular-external/parsed.js deleted file mode 100644 index e8a99c77..00000000 --- a/test/specs/circular-external/parsed.js +++ /dev/null @@ -1,88 +0,0 @@ -export default { - schema: { - definitions: { - pet: { - $ref: "definitions/pet.yaml" - }, - thing: { - $ref: "circular-external.yaml#/definitions/thing" - }, - person: { - $ref: "definitions/person.yaml" - }, - parent: { - $ref: "definitions/parent.yaml" - }, - child: { - $ref: "definitions/child.yaml" - } - } - }, - - pet: { - title: "pet", - type: "object", - properties: { - age: { - type: "number" - }, - name: { - type: "string" - }, - species: { - enum: [ - "cat", - "dog", - "bird", - "fish" - ], - type: "string" - } - }, - }, - - child: { - type: "object", - properties: { - parents: { - items: { - $ref: "parent.yaml" - }, - type: "array" - }, - name: { - type: "string" - } - }, - title: "child" - }, - - parent: { - type: "object", - properties: { - name: { - type: "string" - }, - children: { - items: { - $ref: "child.yaml" - }, - type: "array" - } - }, - title: "parent" - }, - - person: { - type: "object", - properties: { - spouse: { - $ref: "person.yaml" - }, - name: { - type: "string" - } - }, - title: "person" - } -}; diff --git a/test/specs/circular-external/parsed.ts b/test/specs/circular-external/parsed.ts new file mode 100644 index 00000000..091ecc63 --- /dev/null +++ b/test/specs/circular-external/parsed.ts @@ -0,0 +1,83 @@ +export default { + schema: { + definitions: { + pet: { + $ref: "definitions/pet.yaml", + }, + thing: { + $ref: "circular-external.yaml#/definitions/thing", + }, + person: { + $ref: "definitions/person.yaml", + }, + parent: { + $ref: "definitions/parent.yaml", + }, + child: { + $ref: "definitions/child.yaml", + }, + }, + }, + + pet: { + title: "pet", + type: "object", + properties: { + age: { + type: "number", + }, + name: { + type: "string", + }, + species: { + enum: ["cat", "dog", "bird", "fish"], + type: "string", + }, + }, + }, + + child: { + type: "object", + properties: { + parents: { + items: { + $ref: "parent.yaml", + }, + type: "array", + }, + name: { + type: "string", + }, + }, + title: "child", + }, + + parent: { + type: "object", + properties: { + name: { + type: "string", + }, + children: { + items: { + $ref: "child.yaml", + }, + type: "array", + }, + }, + title: "parent", + }, + + person: { + type: "object", + properties: { + spouse: { + $ref: "person.yaml", + }, + name: { + type: "string", + }, + }, + title: "person", + }, +}; diff --git a/test/specs/circular-multi/bundled.js b/test/specs/circular-multi/bundled.ts similarity index 72% rename from test/specs/circular-multi/bundled.js rename to test/specs/circular-multi/bundled.ts index 56c8e798..aec083f5 100644 --- a/test/specs/circular-multi/bundled.js +++ b/test/specs/circular-multi/bundled.ts @@ -5,10 +5,10 @@ export default { type: "object", properties: { affirmativeAction: { - $ref: "#/properties/actions/properties/prevAction" + $ref: "#/properties/actions/properties/prevAction", }, negativeAction: { - $ref: "#/properties/actions/properties/prevAction" + $ref: "#/properties/actions/properties/prevAction", }, prevAction: { type: "object", @@ -16,34 +16,34 @@ export default { $id: "text_assets", oneOf: [ { - $ref: "#/properties/actions/properties/prevAction/properties/definitions/asset" + $ref: "#/properties/actions/properties/prevAction/properties/definitions/asset", }, { - $ref: "#/properties/actions/properties/prevAction/properties/definitions/asset" - } + $ref: "#/properties/actions/properties/prevAction/properties/definitions/asset", + }, ], definitions: { switchWrapper: { type: "object", - $ref: "#/properties/actions/properties/prevAction/properties/definitions/switch" + $ref: "#/properties/actions/properties/prevAction/properties/definitions/switch", }, asset: { type: "object", $id: "asset_action", properties: { label: { - $ref: "#/properties/actions/properties/prevAction/properties" - } - } + $ref: "#/properties/actions/properties/prevAction/properties", + }, + }, }, switch: { type: "array", - $ref: "#/properties/actions/properties/prevAction/properties/definitions/asset" - } - } - } - } - } - } - } + $ref: "#/properties/actions/properties/prevAction/properties/definitions/asset", + }, + }, + }, + }, + }, + }, + }, }; diff --git a/test/specs/circular-multi/circular-multi.spec.js b/test/specs/circular-multi/circular-multi.spec.ts similarity index 63% rename from test/specs/circular-multi/circular-multi.spec.js rename to test/specs/circular-multi/circular-multi.spec.ts index e215fb04..0dc19c00 100644 --- a/test/specs/circular-multi/circular-multi.spec.js +++ b/test/specs/circular-multi/circular-multi.spec.ts @@ -1,15 +1,15 @@ -import chai from "chai"; +import { describe, it } from "vitest"; import $RefParser from "../../../lib/index.js"; import path from "../../utils/path.js"; import bundledSchema from "./bundled.js"; -const { expect } = chai; +import { expect } from "vitest"; describe("multiple circular $refs at the same depth in the schema", () => { it("should bundle successfully", async () => { - let parser = new $RefParser(); + const parser = new $RefParser(); - const schema = await parser.bundle(path.rel("specs/circular-multi/definitions/root.json")); + const schema = await parser.bundle(path.rel("test/specs/circular-multi/definitions/root.json")); expect(schema).to.deep.equal(parser.schema); expect(schema).to.deep.equal(bundledSchema); }); diff --git a/test/specs/circular-multi/definitions/action.json b/test/specs/circular-multi/definitions/action.json index 3796ef95..e018f4ba 100644 --- a/test/specs/circular-multi/definitions/action.json +++ b/test/specs/circular-multi/definitions/action.json @@ -1,8 +1,8 @@ { - "$id": "asset_action", - "properties": { - "label": { - "$ref": "text_assets.json" - } + "$id": "asset_action", + "properties": { + "label": { + "$ref": "text_assets.json" } -} \ No newline at end of file + } +} diff --git a/test/specs/circular-multi/definitions/def.json b/test/specs/circular-multi/definitions/def.json index 8f2dc2dd..9e3b7650 100644 --- a/test/specs/circular-multi/definitions/def.json +++ b/test/specs/circular-multi/definitions/def.json @@ -1,29 +1,29 @@ { - "$id": "def", - "definitions": { - "container": { - "properties": { - "actions": { - "type": "object", - "properties": { - "affirmativeAction": { - "$ref": "#/definitions/actions" - }, - "negativeAction": { - "$ref": "#/definitions/actions" - }, - "prevAction": { - "$ref": "#/definitions/actions" - } - } - } - } - }, + "$id": "def", + "definitions": { + "container": { + "properties": { "actions": { - "type": "object", - "properties": { - "$ref": "text_assets.json" + "type": "object", + "properties": { + "affirmativeAction": { + "$ref": "#/definitions/actions" + }, + "negativeAction": { + "$ref": "#/definitions/actions" + }, + "prevAction": { + "$ref": "#/definitions/actions" } + } } + } + }, + "actions": { + "type": "object", + "properties": { + "$ref": "text_assets.json" + } } -} \ No newline at end of file + } +} diff --git a/test/specs/circular-multi/definitions/root.json b/test/specs/circular-multi/definitions/root.json index 75f606e9..93bcfe66 100644 --- a/test/specs/circular-multi/definitions/root.json +++ b/test/specs/circular-multi/definitions/root.json @@ -1,4 +1,4 @@ { - "$schema": "http://json-schema.org/draft-07/schema#", - "$ref": "def.json#/definitions/container" -} \ No newline at end of file + "$schema": "http://json-schema.org/draft-07/schema#", + "$ref": "def.json#/definitions/container" +} diff --git a/test/specs/circular-multi/definitions/text_assets.json b/test/specs/circular-multi/definitions/text_assets.json index 4e2506b0..4b27355d 100644 --- a/test/specs/circular-multi/definitions/text_assets.json +++ b/test/specs/circular-multi/definitions/text_assets.json @@ -1,26 +1,25 @@ { - "$id": "text_assets", - "oneOf": [ - { - "$ref": "#/definitions/asset" - }, - { - "$ref": "#/definitions/asset" - } - ], - "definitions": { - "switchWrapper": { - "type": "object", - "$ref": "#/definitions/switch" - }, - "asset": { - "type": "object", - "$ref": "action.json" - }, - "switch": { - "type": "array", - "$ref": "#/definitions/asset" - } + "$id": "text_assets", + "oneOf": [ + { + "$ref": "#/definitions/asset" + }, + { + "$ref": "#/definitions/asset" + } + ], + "definitions": { + "switchWrapper": { + "type": "object", + "$ref": "#/definitions/switch" + }, + "asset": { + "type": "object", + "$ref": "action.json" + }, + "switch": { + "type": "array", + "$ref": "#/definitions/asset" } } - \ No newline at end of file +} diff --git a/test/specs/circular/circular-ancestor.yaml b/test/specs/circular/circular-ancestor.yaml index f7b76f5b..771f87a7 100644 --- a/test/specs/circular/circular-ancestor.yaml +++ b/test/specs/circular/circular-ancestor.yaml @@ -5,9 +5,9 @@ definitions: name: type: string pet: - $ref: '#/definitions/pet' + $ref: "#/definitions/pet" spouse: - $ref: "#/definitions/person" # <--- circular reference to ancestor + $ref: "#/definitions/person" # <--- circular reference to ancestor age: type: number diff --git a/test/specs/circular/circular-indirect-ancestor.yaml b/test/specs/circular/circular-indirect-ancestor.yaml index 24f2f44c..1b8736af 100644 --- a/test/specs/circular/circular-indirect-ancestor.yaml +++ b/test/specs/circular/circular-indirect-ancestor.yaml @@ -5,7 +5,7 @@ definitions: name: type: string child: - $ref: '#/definitions/child' # <--- indirect circular reference + $ref: "#/definitions/child" # <--- indirect circular reference child: title: child @@ -13,12 +13,12 @@ definitions: name: type: string pet: - $ref: '#/definitions/pet' + $ref: "#/definitions/pet" children: description: children type: array items: - $ref: '#/definitions/child' # <--- circular reference to ancestor + $ref: "#/definitions/child" # <--- circular reference to ancestor pet: title: pet diff --git a/test/specs/circular/circular-indirect.yaml b/test/specs/circular/circular-indirect.yaml index 306ba2a5..d70b73d0 100644 --- a/test/specs/circular/circular-indirect.yaml +++ b/test/specs/circular/circular-indirect.yaml @@ -7,7 +7,7 @@ definitions: children: type: array items: - $ref: "#/definitions/child" # <--- indirect circular reference + $ref: "#/definitions/child" # <--- indirect circular reference child: title: child @@ -15,11 +15,11 @@ definitions: name: type: string pet: - $ref: '#/definitions/pet' + $ref: "#/definitions/pet" parents: type: array items: - $ref: "#/definitions/parent" # <--- indirect circular reference + $ref: "#/definitions/parent" # <--- indirect circular reference pet: title: pet diff --git a/test/specs/circular/circular-self.yaml b/test/specs/circular/circular-self.yaml index 5bc7c5fa..473bb0e7 100644 --- a/test/specs/circular/circular-self.yaml +++ b/test/specs/circular/circular-self.yaml @@ -6,10 +6,10 @@ definitions: name: type: string pet: - $ref: '#/definitions/pet' + $ref: "#/definitions/pet" thing: - $ref: "#/definitions/thing" # <--- circular reference to self + $ref: "#/definitions/thing" # <--- circular reference to self pet: title: pet diff --git a/test/specs/circular/circular.spec.js b/test/specs/circular/circular.spec.ts similarity index 58% rename from test/specs/circular/circular.spec.js rename to test/specs/circular/circular.spec.ts index b6ebc81f..7c416287 100644 --- a/test/specs/circular/circular.spec.js +++ b/test/specs/circular/circular.spec.ts @@ -1,56 +1,65 @@ -import chai from "chai"; +import { describe, it } from "vitest"; import $RefParser from "../../../lib/index.js"; import helper from "../../utils/helper.js"; import path from "../../utils/path.js"; import parsedSchema from "./parsed.js"; import dereferencedSchema from "./dereferenced.js"; -const { expect } = chai; +import { expect } from "vitest"; describe("Schema with circular (recursive) $refs", () => { describe("$ref to self", () => { it("should parse successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.parse(path.rel("specs/circular/circular-self.yaml")); + const parser = new $RefParser(); + const schema = await parser.parse(path.rel("test/specs/circular/circular-self.yaml")); expect(schema).to.equal(parser.schema); expect(schema).to.deep.equal(parsedSchema.self); - expect(parser.$refs.paths()).to.deep.equal([path.abs("specs/circular/circular-self.yaml")]); + expect(parser.$refs.paths()).to.deep.equal([path.abs("test/specs/circular/circular-self.yaml")]); // The "circular" flag should NOT be set // (it only gets set by `dereference`) expect(parser.$refs.circular).to.equal(false); }); - it("should resolve successfully", helper.testResolve( - path.rel("specs/circular/circular-self.yaml"), - path.abs("specs/circular/circular-self.yaml"), parsedSchema.self - )); + it( + "should resolve successfully", + helper.testResolve( + path.rel("test/specs/circular/circular-self.yaml"), + path.abs("test/specs/circular/circular-self.yaml"), + parsedSchema.self, + ), + ); it("should dereference successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.dereference(path.rel("specs/circular/circular-self.yaml")); + const parser = new $RefParser(); + const schema = await parser.dereference(path.rel("test/specs/circular/circular-self.yaml")); expect(schema).to.equal(parser.schema); expect(schema).to.deep.equal(dereferencedSchema.self); // The "circular" flag should be set expect(parser.$refs.circular).to.equal(true); // Reference equality + // @ts-expect-error TS(2532): Object is possibly 'undefined'. expect(schema.definitions.child.properties.pet).to.equal(schema.definitions.pet); }); it("should double dereference successfully", async () => { - const firstPassSchema = await $RefParser.dereference(path.rel("specs/circular/circular-self.yaml")); - let parser = new $RefParser(); + const firstPassSchema = await $RefParser.dereference(path.rel("test/specs/circular/circular-self.yaml")); + const parser = new $RefParser(); const schema = await parser.dereference(firstPassSchema); expect(schema).to.equal(parser.schema); expect(schema).to.deep.equal(dereferencedSchema.self); // The "circular" flag should be set expect(parser.$refs.circular).to.equal(true); // Reference equality + // @ts-expect-error TS(2532): Object is possibly 'undefined'. expect(schema.definitions.child.properties.pet).to.equal(schema.definitions.pet); }); it('should produce the same results if "options.$refs.circular" is "ignore"', async () => { - let parser = new $RefParser(); - const schema = await parser.dereference(path.rel("specs/circular/circular-self.yaml"), { dereference: { circular: "ignore" }}); + const parser = new $RefParser(); + + const schema = await parser.dereference(path.rel("test/specs/circular/circular-self.yaml"), { + dereference: { circular: "ignore" }, + }); expect(schema).to.equal(parser.schema); expect(schema).to.deep.equal(dereferencedSchema.self); // The "circular" flag should be set @@ -58,16 +67,19 @@ describe("Schema with circular (recursive) $refs", () => { }); it('should throw an error if "options.$refs.circular" is false', async () => { - let parser = new $RefParser(); + const parser = new $RefParser(); try { - await parser.dereference(path.rel("specs/circular/circular-self.yaml"), { dereference: { circular: false }}); + await parser.dereference(path.rel("test/specs/circular/circular-self.yaml"), { + dereference: { circular: false }, + }); helper.shouldNotGetCalled(); - } - catch (err) { + } catch (err) { // A ReferenceError should have been thrown expect(err).to.be.an.instanceOf(ReferenceError); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.message).to.contain("Circular $ref pointer found at "); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.message).to.contain("specs/circular/circular-self.yaml#/definitions/thing"); // $Refs.circular should be true @@ -76,8 +88,8 @@ describe("Schema with circular (recursive) $refs", () => { }); it("should bundle successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.bundle(path.rel("specs/circular/circular-self.yaml")); + const parser = new $RefParser(); + const schema = await parser.bundle(path.rel("test/specs/circular/circular-self.yaml")); expect(schema).to.equal(parser.schema); expect(schema).to.deep.equal(parsedSchema.self); // The "circular" flag should NOT be set @@ -88,68 +100,84 @@ describe("Schema with circular (recursive) $refs", () => { describe("$ref to ancestor", () => { it("should parse successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.parse(path.rel("specs/circular/circular-ancestor.yaml")); + const parser = new $RefParser(); + const schema = await parser.parse(path.rel("test/specs/circular/circular-ancestor.yaml")); expect(schema).to.equal(parser.schema); expect(schema).to.deep.equal(parsedSchema.ancestor); - expect(parser.$refs.paths()).to.deep.equal([path.abs("specs/circular/circular-ancestor.yaml")]); + expect(parser.$refs.paths()).to.deep.equal([path.abs("test/specs/circular/circular-ancestor.yaml")]); // The "circular" flag should NOT be set // (it only gets set by `dereference`) expect(parser.$refs.circular).to.equal(false); }); - it("should resolve successfully", helper.testResolve( - path.rel("specs/circular/circular-ancestor.yaml"), - path.abs("specs/circular/circular-ancestor.yaml"), parsedSchema.ancestor - )); + it( + "should resolve successfully", + helper.testResolve( + path.rel("test/specs/circular/circular-ancestor.yaml"), + path.abs("test/specs/circular/circular-ancestor.yaml"), + + parsedSchema.ancestor, + ), + ); it("should dereference successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.dereference(path.rel("specs/circular/circular-ancestor.yaml")); + const parser = new $RefParser(); + const schema = await parser.dereference(path.rel("test/specs/circular/circular-ancestor.yaml")); expect(schema).to.equal(parser.schema); expect(schema).to.deep.equal(dereferencedSchema.ancestor.fullyDereferenced); // The "circular" flag should be set expect(parser.$refs.circular).to.equal(true); // Reference equality + // @ts-expect-error TS(2532): Object is possibly 'undefined'. expect(schema.definitions.person.properties.spouse).to.equal(schema.definitions.person); + // @ts-expect-error TS(2532): Object is possibly 'undefined'. expect(schema.definitions.person.properties.pet).to.equal(schema.definitions.pet); }); it("should double dereference successfully", async () => { - let parser = new $RefParser(); - const firstPassSchema = await $RefParser.dereference(path.rel("specs/circular/circular-ancestor.yaml")); + const parser = new $RefParser(); + const firstPassSchema = await $RefParser.dereference(path.rel("test/specs/circular/circular-ancestor.yaml")); const schema = await parser.dereference(firstPassSchema); expect(schema).to.equal(parser.schema); expect(schema).to.deep.equal(dereferencedSchema.ancestor.fullyDereferenced); // The "circular" flag should be set expect(parser.$refs.circular).to.equal(true); // Reference equality + // @ts-expect-error TS(2532): Object is possibly 'undefined'. expect(schema.definitions.person.properties.spouse).to.equal(schema.definitions.person); + // @ts-expect-error TS(2532): Object is possibly 'undefined'. expect(schema.definitions.person.properties.pet).to.equal(schema.definitions.pet); }); it('should not dereference circular $refs if "options.$refs.circular" is "ignore"', async () => { - let parser = new $RefParser(); - const schema = await parser.dereference(path.rel("specs/circular/circular-ancestor.yaml"), { dereference: { circular: "ignore" }}); + const parser = new $RefParser(); + + const schema = await parser.dereference(path.rel("test/specs/circular/circular-ancestor.yaml"), { + dereference: { circular: "ignore" }, + }); expect(schema).to.equal(parser.schema); expect(schema).to.deep.equal(dereferencedSchema.ancestor.ignoreCircular$Refs); // The "circular" flag should be set expect(parser.$refs.circular).to.equal(true); // Reference equality + // @ts-expect-error TS(2339): Property 'definitions' does not exist on type 'voi... Remove this comment to see the full error message expect(schema.definitions.person.properties.pet).to.equal(schema.definitions.pet); }); it('should throw an error if "options.$refs.circular" is false', async () => { - let parser = new $RefParser(); + const parser = new $RefParser(); try { - await parser.dereference(path.rel("specs/circular/circular-ancestor.yaml"), { dereference: { circular: false }}); + await parser.dereference(path.rel("test/specs/circular/circular-ancestor.yaml"), { + dereference: { circular: false }, + }); helper.shouldNotGetCalled(); - } - catch (err) { + } catch (err) { // A ReferenceError should have been thrown expect(err).to.be.an.instanceOf(ReferenceError); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.message).to.contain("Circular $ref pointer found at "); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.message).to.contain("specs/circular/circular-ancestor.yaml#/definitions/person/properties/spouse"); // $Refs.circular should be true @@ -158,8 +186,8 @@ describe("Schema with circular (recursive) $refs", () => { }); it("should bundle successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.bundle(path.rel("specs/circular/circular-ancestor.yaml")); + const parser = new $RefParser(); + const schema = await parser.bundle(path.rel("test/specs/circular/circular-ancestor.yaml")); expect(schema).to.equal(parser.schema); expect(schema).to.deep.equal(parsedSchema.ancestor); // The "circular" flag should NOT be set @@ -170,73 +198,87 @@ describe("Schema with circular (recursive) $refs", () => { describe("indirect circular $refs", () => { it("should parse successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.parse(path.rel("specs/circular/circular-indirect.yaml")); + const parser = new $RefParser(); + const schema = await parser.parse(path.rel("test/specs/circular/circular-indirect.yaml")); expect(schema).to.equal(parser.schema); expect(schema).to.deep.equal(parsedSchema.indirect); - expect(parser.$refs.paths()).to.deep.equal([path.abs("specs/circular/circular-indirect.yaml")]); + expect(parser.$refs.paths()).to.deep.equal([path.abs("test/specs/circular/circular-indirect.yaml")]); // The "circular" flag should NOT be set // (it only gets set by `dereference`) expect(parser.$refs.circular).to.equal(false); }); - it("should resolve successfully", helper.testResolve( - path.rel("specs/circular/circular-indirect.yaml"), - path.abs("specs/circular/circular-indirect.yaml"), parsedSchema.indirect - )); + it( + "should resolve successfully", + helper.testResolve( + path.rel("test/specs/circular/circular-indirect.yaml"), + path.abs("test/specs/circular/circular-indirect.yaml"), + + parsedSchema.indirect, + ), + ); it("should dereference successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.dereference(path.rel("specs/circular/circular-indirect.yaml")); + const parser = new $RefParser(); + const schema = await parser.dereference(path.rel("test/specs/circular/circular-indirect.yaml")); expect(schema).to.equal(parser.schema); expect(schema).to.deep.equal(dereferencedSchema.indirect.fullyDereferenced); // The "circular" flag should be set expect(parser.$refs.circular).to.equal(true); // Reference equality - expect(schema.definitions.parent.properties.children.items) - .to.equal(schema.definitions.child); - expect(schema.definitions.child.properties.parents.items) - .to.equal(schema.definitions.parent); + // @ts-expect-error TS(2532): Object is possibly 'undefined'. + expect(schema.definitions.parent.properties.children.items).to.equal(schema.definitions.child); + // @ts-expect-error TS(2532): Object is possibly 'undefined'. + expect(schema.definitions.child.properties.parents.items).to.equal(schema.definitions.parent); }); it("should double dereference successfully", async () => { - let parser = new $RefParser(); - const firstPassSchema = await $RefParser.dereference(path.rel("specs/circular/circular-indirect.yaml")); + const parser = new $RefParser(); + const firstPassSchema = await $RefParser.dereference(path.rel("test/specs/circular/circular-indirect.yaml")); const schema = await parser.dereference(firstPassSchema); expect(schema).to.equal(parser.schema); expect(schema).to.deep.equal(dereferencedSchema.indirect.fullyDereferenced); // The "circular" flag should be set expect(parser.$refs.circular).to.equal(true); // Reference equality - expect(schema.definitions.parent.properties.children.items) - .to.equal(schema.definitions.child); - expect(schema.definitions.child.properties.parents.items) - .to.equal(schema.definitions.parent); + // @ts-expect-error TS(2532): Object is possibly 'undefined'. + expect(schema.definitions.parent.properties.children.items).to.equal(schema.definitions.child); + // @ts-expect-error TS(2532): Object is possibly 'undefined'. + expect(schema.definitions.child.properties.parents.items).to.equal(schema.definitions.parent); }); it('should not dereference circular $refs if "options.$refs.circular" is "ignore"', async () => { - let parser = new $RefParser(); - const schema = await parser.dereference(path.rel("specs/circular/circular-indirect.yaml"), { dereference: { circular: "ignore" }}); + const parser = new $RefParser(); + + const schema = await parser.dereference(path.rel("test/specs/circular/circular-indirect.yaml"), { + dereference: { circular: "ignore" }, + }); expect(schema).to.equal(parser.schema); expect(schema).to.deep.equal(dereferencedSchema.indirect.ignoreCircular$Refs); // The "circular" flag should be set expect(parser.$refs.circular).to.equal(true); // Reference equality + // @ts-expect-error TS(2339): Property 'definitions' does not exist on type 'voi... Remove this comment to see the full error message expect(schema.definitions.child.properties.pet).to.equal(schema.definitions.pet); }); it('should throw an error if "options.$refs.circular" is false', async () => { - let parser = new $RefParser(); + const parser = new $RefParser(); try { - await parser.dereference(path.rel("specs/circular/circular-indirect.yaml"), { dereference: { circular: false }}); + await parser.dereference(path.rel("test/specs/circular/circular-indirect.yaml"), { + dereference: { circular: false }, + }); helper.shouldNotGetCalled(); - } - catch (err) { + } catch (err) { // A ReferenceError should have been thrown expect(err).to.be.an.instanceOf(ReferenceError); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.message).to.contain("Circular $ref pointer found at "); - expect(err.message).to.contain("specs/circular/circular-indirect.yaml#/definitions/child/properties/parents/items"); + // @ts-expect-error TS(2571): Object is of type 'unknown'. + expect(err.message).to.contain( + "specs/circular/circular-indirect.yaml#/definitions/child/properties/parents/items", + ); // $Refs.circular should be true expect(parser.$refs.circular).to.equal(true); @@ -244,8 +286,8 @@ describe("Schema with circular (recursive) $refs", () => { }); it("should bundle successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.bundle(path.rel("specs/circular/circular-indirect.yaml")); + const parser = new $RefParser(); + const schema = await parser.bundle(path.rel("test/specs/circular/circular-indirect.yaml")); expect(schema).to.equal(parser.schema); expect(schema).to.deep.equal(parsedSchema.indirect); // The "circular" flag should NOT be set @@ -256,72 +298,84 @@ describe("Schema with circular (recursive) $refs", () => { describe("indirect circular and ancestor $refs", () => { it("should parse successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.parse(path.rel("specs/circular/circular-indirect-ancestor.yaml")); + const parser = new $RefParser(); + const schema = await parser.parse(path.rel("test/specs/circular/circular-indirect-ancestor.yaml")); expect(schema).to.equal(parser.schema); expect(schema).to.deep.equal(parsedSchema.indirectAncestor); - expect(parser.$refs.paths()).to.deep.equal([path.abs("specs/circular/circular-indirect-ancestor.yaml")]); + expect(parser.$refs.paths()).to.deep.equal([path.abs("test/specs/circular/circular-indirect-ancestor.yaml")]); // The "circular" flag should NOT be set // (it only gets set by `dereference`) expect(parser.$refs.circular).to.equal(false); }); - it("should resolve successfully", helper.testResolve( - path.rel("specs/circular/circular-indirect-ancestor.yaml"), - path.abs("specs/circular/circular-indirect-ancestor.yaml"), parsedSchema.indirectAncestor - )); + it( + "should resolve successfully", + helper.testResolve( + path.rel("test/specs/circular/circular-indirect-ancestor.yaml"), + path.abs("test/specs/circular/circular-indirect-ancestor.yaml"), + + parsedSchema.indirectAncestor, + ), + ); it("should dereference successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.dereference(path.rel("specs/circular/circular-indirect-ancestor.yaml")); + const parser = new $RefParser(); + const schema = await parser.dereference(path.rel("test/specs/circular/circular-indirect-ancestor.yaml")); expect(schema).to.equal(parser.schema); expect(schema).to.deep.equal(dereferencedSchema.indirectAncestor.fullyDereferenced); // The "circular" flag should be set expect(parser.$refs.circular).to.equal(true); // Reference equality - expect(schema.definitions.parent.properties.child) - .to.equal(schema.definitions.child); - expect(schema.definitions.child.properties.children.items) - .to.equal(schema.definitions.child); + // @ts-expect-error TS(2532): Object is possibly 'undefined'. + expect(schema.definitions.parent.properties.child).to.equal(schema.definitions.child); + // @ts-expect-error TS(2532): Object is possibly 'undefined'. + expect(schema.definitions.child.properties.children.items).to.equal(schema.definitions.child); }); it("should double dereference successfully", async () => { - let parser = new $RefParser(); - const firstPassSchema = await parser.dereference(path.rel("specs/circular/circular-indirect-ancestor.yaml")); + const parser = new $RefParser(); + const firstPassSchema = await parser.dereference(path.rel("test/specs/circular/circular-indirect-ancestor.yaml")); const schema = await parser.dereference(firstPassSchema); expect(schema).to.equal(parser.schema); expect(schema).to.deep.equal(dereferencedSchema.indirectAncestor.fullyDereferenced); // The "circular" flag should be set expect(parser.$refs.circular).to.equal(true); // Reference equality - expect(schema.definitions.parent.properties.child) - .to.equal(schema.definitions.child); - expect(schema.definitions.child.properties.children.items) - .to.equal(schema.definitions.child); + // @ts-expect-error TS(2532): Object is possibly 'undefined'. + expect(schema.definitions.parent.properties.child).to.equal(schema.definitions.child); + // @ts-expect-error TS(2532): Object is possibly 'undefined'. + expect(schema.definitions.child.properties.children.items).to.equal(schema.definitions.child); }); it('should not dereference circular $refs if "options.$refs.circular" is "ignore"', async () => { - let parser = new $RefParser(); - const schema = await parser.dereference(path.rel("specs/circular/circular-indirect-ancestor.yaml"), { dereference: { circular: "ignore" }}); + const parser = new $RefParser(); + + const schema = await parser.dereference(path.rel("test/specs/circular/circular-indirect-ancestor.yaml"), { + dereference: { circular: "ignore" }, + }); expect(schema).to.equal(parser.schema); expect(schema).to.deep.equal(dereferencedSchema.indirectAncestor.ignoreCircular$Refs); // The "circular" flag should be set expect(parser.$refs.circular).to.equal(true); // Reference equality + // @ts-expect-error TS(2339): Property 'definitions' does not exist on type 'voi... Remove this comment to see the full error message expect(schema.definitions.child.properties.pet).to.equal(schema.definitions.pet); }); it('should throw an error if "options.$refs.circular" is false', async () => { - let parser = new $RefParser(); + const parser = new $RefParser(); try { - await parser.dereference(path.rel("specs/circular/circular-indirect-ancestor.yaml"), { dereference: { circular: false }}); + await parser.dereference(path.rel("test/specs/circular/circular-indirect-ancestor.yaml"), { + dereference: { circular: false }, + }); helper.shouldNotGetCalled(); - } - catch (err) { + } catch (err) { // A ReferenceError should have been thrown expect(err).to.be.an.instanceOf(ReferenceError); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.message).to.contain("Circular $ref pointer found at "); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.message).to.contain("specs/circular/circular-indirect-ancestor.yaml#/definitions/child/properties"); // $Refs.circular should be true @@ -330,8 +384,8 @@ describe("Schema with circular (recursive) $refs", () => { }); it("should bundle successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.bundle(path.rel("specs/circular/circular-indirect-ancestor.yaml")); + const parser = new $RefParser(); + const schema = await parser.bundle(path.rel("test/specs/circular/circular-indirect-ancestor.yaml")); expect(schema).to.equal(parser.schema); expect(schema).to.deep.equal(parsedSchema.indirectAncestor); // The "circular" flag should NOT be set @@ -339,5 +393,4 @@ describe("Schema with circular (recursive) $refs", () => { expect(parser.$refs.circular).to.equal(false); }); }); - }); diff --git a/test/specs/circular/dereferenced.js b/test/specs/circular/dereferenced.ts similarity index 57% rename from test/specs/circular/dereferenced.js rename to test/specs/circular/dereferenced.ts index f77e47ce..f2ec9ba2 100644 --- a/test/specs/circular/dereferenced.js +++ b/test/specs/circular/dereferenced.ts @@ -5,25 +5,20 @@ const dereferencedSchema = { type: "object", properties: { age: { - type: "number" + type: "number", }, name: { - type: "string" + type: "string", }, species: { - enum: [ - "cat", - "dog", - "bird", - "fish" - ], - type: "string" - } + enum: ["cat", "dog", "bird", "fish"], + type: "string", + }, }, - title: "pet" + title: "pet", }, thing: { - $ref: "#/definitions/thing" + $ref: "#/definitions/thing", }, child: { type: "object", @@ -32,30 +27,25 @@ const dereferencedSchema = { type: "object", properties: { age: { - type: "number" + type: "number", }, name: { - type: "string" + type: "string", }, species: { - enum: [ - "cat", - "dog", - "bird", - "fish" - ], - type: "string" - } - }, - title: "pet" + enum: ["cat", "dog", "bird", "fish"], + type: "string", + }, + }, + title: "pet", }, name: { - type: "string" - } + type: "string", + }, }, - title: "child" - } - } + title: "child", + }, + }, }, ancestor: { @@ -67,35 +57,30 @@ const dereferencedSchema = { spouse: null, pet: null, name: { - type: "string" + type: "string", }, age: { - type: "number" - } - } + type: "number", + }, + }, }, pet: { type: "object", properties: { age: { - type: "number" + type: "number", }, name: { - type: "string" + type: "string", }, species: { - enum: [ - "cat", - "dog", - "bird", - "fish" - ], - type: "string" - } + enum: ["cat", "dog", "bird", "fish"], + type: "string", + }, }, - title: "pet" - } - } + title: "pet", + }, + }, }, ignoreCircular$Refs: { @@ -104,40 +89,35 @@ const dereferencedSchema = { title: "person", properties: { spouse: { - $ref: "#/definitions/person" + $ref: "#/definitions/person", }, pet: null, name: { - type: "string" + type: "string", }, age: { - type: "number" - } - } + type: "number", + }, + }, }, pet: { type: "object", properties: { age: { - type: "number" + type: "number", }, name: { - type: "string" + type: "string", }, species: { - enum: [ - "cat", - "dog", - "bird", - "fish" - ], - type: "string" - } + enum: ["cat", "dog", "bird", "fish"], + type: "string", + }, }, - title: "pet" - } - } - } + title: "pet", + }, + }, + }, }, indirect: { @@ -147,49 +127,44 @@ const dereferencedSchema = { title: "parent", properties: { name: { - type: "string" + type: "string", }, children: { items: null, - type: "array" - } - } + type: "array", + }, + }, }, child: { title: "child", properties: { parents: { items: null, - type: "array" + type: "array", }, pet: null, name: { - type: "string" - } - } + type: "string", + }, + }, }, pet: { type: "object", properties: { age: { - type: "number" + type: "number", }, name: { - type: "string" + type: "string", }, species: { - enum: [ - "cat", - "dog", - "bird", - "fish" - ], - type: "string" - } + enum: ["cat", "dog", "bird", "fish"], + type: "string", + }, }, - title: "pet" - } - } + title: "pet", + }, + }, }, ignoreCircular$Refs: { @@ -198,54 +173,49 @@ const dereferencedSchema = { title: "parent", properties: { name: { - type: "string" + type: "string", }, children: { items: { - $ref: "#/definitions/child" + $ref: "#/definitions/child", }, - type: "array" - } - } + type: "array", + }, + }, }, child: { title: "child", properties: { parents: { items: { - $ref: "#/definitions/parent" + $ref: "#/definitions/parent", }, - type: "array" + type: "array", }, pet: null, name: { - type: "string" - } - } + type: "string", + }, + }, }, pet: { type: "object", properties: { age: { - type: "number" + type: "number", }, name: { - type: "string" + type: "string", }, species: { - enum: [ - "cat", - "dog", - "bird", - "fish" - ], - type: "string" - } + enum: ["cat", "dog", "bird", "fish"], + type: "string", + }, }, - title: "pet" - } - } - } + title: "pet", + }, + }, + }, }, indirectAncestor: { @@ -255,47 +225,42 @@ const dereferencedSchema = { title: "parent", properties: { name: { - type: "string" + type: "string", }, - child: null + child: null, }, }, child: { title: "child", properties: { name: { - type: "string" + type: "string", }, pet: null, children: { items: null, type: "array", - description: "children" - } + description: "children", + }, }, }, pet: { type: "object", properties: { age: { - type: "number" + type: "number", }, name: { - type: "string" + type: "string", }, species: { - enum: [ - "cat", - "dog", - "bird", - "fish" - ], - type: "string" - } + enum: ["cat", "dog", "bird", "fish"], + type: "string", + }, }, - title: "pet" - } - } + title: "pet", + }, + }, }, ignoreCircular$Refs: { @@ -304,85 +269,91 @@ const dereferencedSchema = { title: "parent", properties: { name: { - type: "string" + type: "string", }, child: { - $ref: "#/definitions/child" - } + $ref: "#/definitions/child", + }, }, }, child: { title: "child", properties: { name: { - type: "string" + type: "string", }, pet: null, children: { items: { - $ref: "#/definitions/child" + $ref: "#/definitions/child", }, type: "array", - description: "children" - } + description: "children", + }, }, }, pet: { type: "object", properties: { age: { - type: "number" + type: "number", }, name: { - type: "string" + type: "string", }, species: { - enum: [ - "cat", - "dog", - "bird", - "fish" - ], - type: "string" - } + enum: ["cat", "dog", "bird", "fish"], + type: "string", + }, }, - title: "pet" - } - } - } - } + title: "pet", + }, + }, + }, + }, }; +// @ts-expect-error TS(2322): Type '{ title: string; properties: { spouse: null;... Remove this comment to see the full error message dereferencedSchema.ancestor.fullyDereferenced.definitions.person.properties.spouse = dereferencedSchema.ancestor.fullyDereferenced.definitions.person; +// @ts-expect-error TS(2322): Type '{ type: string; properties: { age: { type: s... Remove this comment to see the full error message dereferencedSchema.ancestor.fullyDereferenced.definitions.person.properties.pet = dereferencedSchema.ancestor.fullyDereferenced.definitions.pet; +// @ts-expect-error TS(2322): Type '{ type: string; properties: { age: { type: s... Remove this comment to see the full error message dereferencedSchema.ancestor.ignoreCircular$Refs.definitions.person.properties.pet = dereferencedSchema.ancestor.ignoreCircular$Refs.definitions.pet; +// @ts-expect-error TS(2322): Type '{ title: string; properties: { parents: { it... Remove this comment to see the full error message dereferencedSchema.indirect.fullyDereferenced.definitions.parent.properties.children.items = dereferencedSchema.indirect.fullyDereferenced.definitions.child; +// @ts-expect-error TS(2322): Type '{ title: string; properties: { name: { type:... Remove this comment to see the full error message dereferencedSchema.indirect.fullyDereferenced.definitions.child.properties.parents.items = dereferencedSchema.indirect.fullyDereferenced.definitions.parent; +// @ts-expect-error TS(2322): Type '{ type: string; properties: { age: { type: s... Remove this comment to see the full error message dereferencedSchema.indirect.fullyDereferenced.definitions.child.properties.pet = dereferencedSchema.indirect.fullyDereferenced.definitions.pet; +// @ts-expect-error TS(2322): Type '{ type: string; properties: { age: { type: s... Remove this comment to see the full error message dereferencedSchema.indirect.ignoreCircular$Refs.definitions.child.properties.pet = dereferencedSchema.indirect.ignoreCircular$Refs.definitions.pet; +// @ts-expect-error TS(2322): Type '{ title: string; properties: { name: { type:... Remove this comment to see the full error message dereferencedSchema.indirectAncestor.fullyDereferenced.definitions.parent.properties.child = dereferencedSchema.indirectAncestor.fullyDereferenced.definitions.child; +// @ts-expect-error TS(2322): Type '{ title: string; properties: { name: { type:... Remove this comment to see the full error message dereferencedSchema.indirectAncestor.fullyDereferenced.definitions.child.properties.children.items = dereferencedSchema.indirectAncestor.fullyDereferenced.definitions.child; +// @ts-expect-error TS(2322): Type '{ type: string; properties: { age: { type: s... Remove this comment to see the full error message dereferencedSchema.indirectAncestor.fullyDereferenced.definitions.child.properties.pet = dereferencedSchema.indirectAncestor.fullyDereferenced.definitions.pet; +// @ts-expect-error TS(2322): Type '{ type: string; properties: { age: { type: s... Remove this comment to see the full error message dereferencedSchema.indirectAncestor.ignoreCircular$Refs.definitions.child.properties.pet = dereferencedSchema.indirectAncestor.ignoreCircular$Refs.definitions.pet; diff --git a/test/specs/circular/parsed.js b/test/specs/circular/parsed.ts similarity index 51% rename from test/specs/circular/parsed.js rename to test/specs/circular/parsed.ts index 9fe14037..a2a68de8 100644 --- a/test/specs/circular/parsed.js +++ b/test/specs/circular/parsed.ts @@ -5,39 +5,34 @@ export default { type: "object", properties: { age: { - type: "number" + type: "number", }, name: { - type: "string" + type: "string", }, species: { - enum: [ - "cat", - "dog", - "bird", - "fish" - ], - type: "string" - } + enum: ["cat", "dog", "bird", "fish"], + type: "string", + }, }, - title: "pet" + title: "pet", }, thing: { - $ref: "#/definitions/thing" + $ref: "#/definitions/thing", }, child: { type: "object", properties: { pet: { - $ref: "#/definitions/pet" + $ref: "#/definitions/pet", }, name: { - type: "string" - } + type: "string", + }, }, - title: "child" - } - } + title: "child", + }, + }, }, ancestor: { @@ -46,41 +41,36 @@ export default { title: "person", properties: { spouse: { - $ref: "#/definitions/person" + $ref: "#/definitions/person", }, pet: { - $ref: "#/definitions/pet" + $ref: "#/definitions/pet", }, name: { - type: "string" + type: "string", }, age: { - type: "number" - } - } + type: "number", + }, + }, }, pet: { type: "object", properties: { age: { - type: "number" + type: "number", }, name: { - type: "string" + type: "string", }, species: { - enum: [ - "cat", - "dog", - "bird", - "fish" - ], - type: "string" - } + enum: ["cat", "dog", "bird", "fish"], + type: "string", + }, }, - title: "pet" - } - } + title: "pet", + }, + }, }, indirect: { @@ -89,55 +79,50 @@ export default { title: "parent", properties: { name: { - type: "string" + type: "string", }, children: { items: { - $ref: "#/definitions/child" + $ref: "#/definitions/child", }, - type: "array" - } - } + type: "array", + }, + }, }, child: { title: "child", properties: { parents: { items: { - $ref: "#/definitions/parent" + $ref: "#/definitions/parent", }, - type: "array" + type: "array", }, pet: { - $ref: "#/definitions/pet" + $ref: "#/definitions/pet", }, name: { - type: "string" - } - } + type: "string", + }, + }, }, pet: { type: "object", properties: { age: { - type: "number" + type: "number", }, name: { - type: "string" + type: "string", }, species: { - enum: [ - "cat", - "dog", - "bird", - "fish" - ], - type: "string" - } + enum: ["cat", "dog", "bird", "fish"], + type: "string", + }, }, - title: "pet" - } - } + title: "pet", + }, + }, }, indirectAncestor: { @@ -146,29 +131,29 @@ export default { title: "parent", properties: { name: { - type: "string" + type: "string", }, child: { - $ref: "#/definitions/child" - } + $ref: "#/definitions/child", + }, }, }, child: { title: "child", properties: { name: { - type: "string" + type: "string", }, pet: { - $ref: "#/definitions/pet" + $ref: "#/definitions/pet", }, children: { items: { - $ref: "#/definitions/child" + $ref: "#/definitions/child", }, type: "array", - description: "children" - } + description: "children", + }, }, }, pet: { @@ -176,22 +161,17 @@ export default { type: "object", properties: { age: { - type: "number" + type: "number", }, name: { - type: "string" + type: "string", }, species: { - enum: [ - "cat", - "dog", - "bird", - "fish" - ], - type: "string" - } + enum: ["cat", "dog", "bird", "fish"], + type: "string", + }, }, - } - } - } + }, + }, + }, }; diff --git a/test/specs/date-strings/date-strings.spec.js b/test/specs/date-strings/date-strings.spec.js deleted file mode 100644 index 244ecfd1..00000000 --- a/test/specs/date-strings/date-strings.spec.js +++ /dev/null @@ -1,22 +0,0 @@ -import chai from "chai"; -import $RefParser from "../../../lib/index.js"; -import helper from "../../utils/helper.js"; -import path from "../../utils/path.js"; -import parsedSchema from "./parsed.js"; - -const { expect } = chai; - -describe("Schema with date strings", () => { - it("should parse successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.parse(path.rel("specs/date-strings/date-strings.yaml")); - expect(schema).to.equal(parser.schema); - expect(schema).to.deep.equal(parsedSchema.schema); - expect(parser.$refs.paths()).to.deep.equal([path.abs("specs/date-strings/date-strings.yaml")]); - }); - - it("should resolve successfully", helper.testResolve( - path.rel("specs/date-strings/date-strings.yaml"), - path.abs("specs/date-strings/date-strings.yaml"), parsedSchema.schema, - )); -}); diff --git a/test/specs/date-strings/date-strings.spec.ts b/test/specs/date-strings/date-strings.spec.ts new file mode 100644 index 00000000..c5e8a13a --- /dev/null +++ b/test/specs/date-strings/date-strings.spec.ts @@ -0,0 +1,27 @@ +import { describe, it } from "vitest"; +import $RefParser from "../../../lib/index.js"; +import helper from "../../utils/helper.js"; +import path from "../../utils/path.js"; +import parsedSchema from "./parsed.js"; + +import { expect } from "vitest"; + +describe("Schema with date strings", () => { + it("should parse successfully", async () => { + const parser = new $RefParser(); + const schema = await parser.parse(path.rel("test/specs/date-strings/date-strings.yaml")); + expect(schema).to.equal(parser.schema); + expect(schema).to.deep.equal(parsedSchema.schema); + expect(parser.$refs.paths()).to.deep.equal([path.abs("test/specs/date-strings/date-strings.yaml")]); + }); + + it( + "should resolve successfully", + helper.testResolve( + path.rel("test/specs/date-strings/date-strings.yaml"), + path.abs("test/specs/date-strings/date-strings.yaml"), + // @ts-expect-error TS(2554): Expected 2 arguments, but got 3. + parsedSchema.schema, + ), + ); +}); diff --git a/test/specs/date-strings/parsed.js b/test/specs/date-strings/parsed.ts similarity index 78% rename from test/specs/date-strings/parsed.js rename to test/specs/date-strings/parsed.ts index 3cd46b9f..dc794739 100644 --- a/test/specs/date-strings/parsed.js +++ b/test/specs/date-strings/parsed.ts @@ -5,8 +5,8 @@ export default { properties: { name: { description: "2015-04-22T10:03:19.323-07:00", - type: "string" - } - } - } + type: "string", + }, + }, + }, }; diff --git a/test/specs/deep-circular/bundled.js b/test/specs/deep-circular/bundled.ts similarity index 71% rename from test/specs/deep-circular/bundled.js rename to test/specs/deep-circular/bundled.ts index 297505a1..b2af0547 100644 --- a/test/specs/deep-circular/bundled.js +++ b/test/specs/deep-circular/bundled.ts @@ -4,365 +4,323 @@ export default { definitions: { name: { title: "name", - required: [ - "first", - "last" - ], + required: ["first", "last"], type: "object", properties: { middle: { minLength: { - $ref: "#/definitions/name/properties/last/minLength" + $ref: "#/definitions/name/properties/last/minLength", }, type: { - $ref: "#/definitions/name/properties/last/type" - } + $ref: "#/definitions/name/properties/last/type", + }, }, prefix: { minLength: 3, - $ref: "#/definitions/name/properties/last" + $ref: "#/definitions/name/properties/last", }, last: { minLength: 1, type: "string", - title: "requiredString" + title: "requiredString", }, suffix: { $ref: "#/definitions/name/properties/prefix", type: "string", - maxLength: 3 + maxLength: 3, }, first: { - $ref: "#/definitions/name/properties/last" - } + $ref: "#/definitions/name/properties/last", + }, }, - } + }, }, properties: { level1: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { level2: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { level3: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { level4: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { name: { - $ref: "#/definitions/name" + $ref: "#/definitions/name", }, level5: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { name: { - $ref: "#/definitions/name" + $ref: "#/definitions/name", }, level6: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { name: { - $ref: "#/definitions/name" + $ref: "#/definitions/name", }, level7: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { level8: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { level9: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { level10: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { level11: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { level12: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { level13: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { name: { - $ref: "#/definitions/name" + $ref: "#/definitions/name", }, level14: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { name: { - $ref: "#/definitions/name" + $ref: "#/definitions/name", }, level15: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { level16: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { name: { - $ref: "#/definitions/name" + $ref: "#/definitions/name", }, level17: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { level18: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { level19: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { level20: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { level21: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { level22: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { level23: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { name: { - $ref: "#/definitions/name" + $ref: "#/definitions/name", }, level24: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { name: { - $ref: "#/definitions/name" + $ref: "#/definitions/name", }, level25: { required: [ - "name" + "name", ], type: "object", properties: { name: { - $ref: "#/definitions/name" + $ref: "#/definitions/name", }, level26: { required: [ - "name" + "name", ], type: "object", properties: { level27: { - required: [ - "name" - ], + required: + [ + "name", + ], type: "object", - properties: { - level28: { - required: [ - "name" - ], - type: "object", - properties: { - level29: { - required: [ - "name" - ], + properties: + { + level28: + { + required: + [ + "name", + ], type: "object", - properties: { - level30: { - $ref: "#" + properties: + { + level29: + { + required: + [ + "name", + ], + type: "object", + properties: + { + level30: + { + $ref: "#", + }, + name: { + $ref: "#/definitions/name", + }, + }, + }, + name: { + $ref: "#/definitions/name", + }, }, - name: { - $ref: "#/definitions/name" - } - } }, - name: { - $ref: "#/definitions/name" - } - } + name: { + $ref: "#/definitions/name", + }, }, - name: { - $ref: "#/definitions/name" - } - } }, name: { - $ref: "#/definitions/name" - } - } - } - } - } - } - } - } + $ref: "#/definitions/name", + }, + }, + }, + }, + }, + }, + }, + }, }, name: { - $ref: "#/definitions/name" - } - } + $ref: "#/definitions/name", + }, + }, }, name: { - $ref: "#/definitions/name" - } - } + $ref: "#/definitions/name", + }, + }, }, name: { - $ref: "#/definitions/name" - } - } + $ref: "#/definitions/name", + }, + }, }, name: { - $ref: "#/definitions/name" - } - } + $ref: "#/definitions/name", + }, + }, }, name: { - $ref: "#/definitions/name" - } - } + $ref: "#/definitions/name", + }, + }, }, name: { - $ref: "#/definitions/name" - } - } - } - } + $ref: "#/definitions/name", + }, + }, + }, + }, }, name: { - $ref: "#/definitions/name" - } - } - } - } - } - } + $ref: "#/definitions/name", + }, + }, + }, + }, + }, + }, }, name: { - $ref: "#/definitions/name" - } - } + $ref: "#/definitions/name", + }, + }, }, name: { - $ref: "#/definitions/name" - } - } + $ref: "#/definitions/name", + }, + }, }, name: { - $ref: "#/definitions/name" - } - } + $ref: "#/definitions/name", + }, + }, }, name: { - $ref: "#/definitions/name" - } - } + $ref: "#/definitions/name", + }, + }, }, name: { - $ref: "#/definitions/name" - } - } + $ref: "#/definitions/name", + }, + }, }, name: { - $ref: "#/definitions/name" - } - } - } - } - } - } - } - } + $ref: "#/definitions/name", + }, + }, + }, + }, + }, + }, + }, + }, }, name: { - $ref: "#/definitions/name" - } - } + $ref: "#/definitions/name", + }, + }, }, name: { - $ref: "#/definitions/name" - } - } + $ref: "#/definitions/name", + }, + }, }, name: { - $ref: "#/definitions/name" - } - } + $ref: "#/definitions/name", + }, + }, }, name: { - $ref: "#/definitions/name" - } + $ref: "#/definitions/name", + }, }, }; diff --git a/test/specs/deep-circular/deep-circular.spec.js b/test/specs/deep-circular/deep-circular.spec.js deleted file mode 100644 index 061ce178..00000000 --- a/test/specs/deep-circular/deep-circular.spec.js +++ /dev/null @@ -1,80 +0,0 @@ -import chai from "chai"; -import $RefParser from "../../../lib/index.js"; -import helper from "../../utils/helper.js"; -import path from "../../utils/path.js"; -import parsedSchema from "./parsed.js"; -import dereferencedSchema from "./dereferenced.js"; -import bundledSchema from "./bundled.js"; - -const { expect } = chai; - -describe("Schema with deeply-nested circular $refs", () => { - it("should parse successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.parse(path.rel("specs/deep-circular/deep-circular.yaml")); - expect(schema).to.equal(parser.schema); - expect(schema).to.deep.equal(parsedSchema.schema); - expect(parser.$refs.paths()).to.deep.equal([path.abs("specs/deep-circular/deep-circular.yaml")]); - // The "circular" flag should NOT be set - // (it only gets set by `dereference`) - expect(parser.$refs.circular).to.equal(false); - }); - - it("should resolve successfully", helper.testResolve( - path.rel("specs/deep-circular/deep-circular.yaml"), - path.abs("specs/deep-circular/deep-circular.yaml"), parsedSchema.schema, - path.abs("specs/deep-circular/definitions/name.yaml"), parsedSchema.name, - path.abs("specs/deep-circular/definitions/required-string.yaml"), parsedSchema.requiredString - )); - - it("should dereference successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.dereference(path.rel("specs/deep-circular/deep-circular.yaml")); - expect(schema).to.equal(parser.schema); - expect(schema).to.deep.equal(dereferencedSchema); - // The "circular" flag should be set - expect(parser.$refs.circular).to.equal(true); - // Reference equality - expect(schema.definitions.name) - .to.equal(schema.properties.name) - .to.equal(schema.properties.level1.properties.name) - .to.equal(schema.properties.level1.properties.level2.properties.name) - .to.equal(schema.properties.level1.properties.level2.properties.level3.properties.name) - .to.equal(schema.properties.level1.properties.level2.properties.level3.properties.level4.properties.name); - }); - - it('should throw an error if "options.$refs.circular" is false', async () => { - let parser = new $RefParser(); - - try { - await parser.dereference(path.rel("specs/deep-circular/deep-circular.yaml"), { dereference: { circular: false }}); - helper.shouldNotGetCalled(); - } - catch (err) { - // A ReferenceError should have been thrown - expect(err).to.be.an.instanceOf(ReferenceError); - expect(err.message).to.contain("Circular $ref pointer found at "); - expect(err.message).to.contain( - "specs/deep-circular/deep-circular.yaml#/properties/level1/properties/level2/properties/" + - "level3/properties/level4/properties/level5/properties/level6/properties/level7/properties/" + - "level8/properties/level9/properties/level10/properties/level11/properties/level12/properties/" + - "level13/properties/level14/properties/level15/properties/level16/properties/level17/properties/" + - "level18/properties/level19/properties/level20/properties/level21/properties/level22/properties/" + - "level23/properties/level24/properties/level25/properties/level26/properties/level27/properties/" + - "level28/properties/level29/properties/level30"); - - // $Refs.circular should be true - expect(parser.$refs.circular).to.equal(true); - } - }); - - it("should bundle successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.bundle(path.rel("specs/deep-circular/deep-circular.yaml")); - expect(schema).to.equal(parser.schema); - expect(schema).to.deep.equal(bundledSchema); - // The "circular" flag should NOT be set - // (it only gets set by `dereference`) - expect(parser.$refs.circular).to.equal(false); - }); -}); diff --git a/test/specs/deep-circular/deep-circular.spec.ts b/test/specs/deep-circular/deep-circular.spec.ts new file mode 100644 index 00000000..3dc9c78f --- /dev/null +++ b/test/specs/deep-circular/deep-circular.spec.ts @@ -0,0 +1,97 @@ +import { describe, it } from "vitest"; +import $RefParser from "../../../lib/index.js"; +import helper from "../../utils/helper.js"; +import path from "../../utils/path.js"; +import parsedSchema from "./parsed.js"; +import dereferencedSchema from "./dereferenced.js"; +import bundledSchema from "./bundled.js"; + +import { expect } from "vitest"; + +describe("Schema with deeply-nested circular $refs", () => { + it("should parse successfully", async () => { + const parser = new $RefParser(); + const schema = await parser.parse(path.rel("test/specs/deep-circular/deep-circular.yaml")); + expect(schema).to.equal(parser.schema); + expect(schema).to.deep.equal(parsedSchema.schema); + expect(parser.$refs.paths()).to.deep.equal([path.abs("test/specs/deep-circular/deep-circular.yaml")]); + // The "circular" flag should NOT be set + // (it only gets set by `dereference`) + expect(parser.$refs.circular).to.equal(false); + }); + + it( + "should resolve successfully", + helper.testResolve( + path.rel("test/specs/deep-circular/deep-circular.yaml"), + path.abs("test/specs/deep-circular/deep-circular.yaml"), + // @ts-expect-error TS(2554): Expected 2 arguments, but got 7. + parsedSchema.schema, + path.abs("test/specs/deep-circular/definitions/name.yaml"), + parsedSchema.name, + path.abs("test/specs/deep-circular/definitions/required-string.yaml"), + parsedSchema.requiredString, + ), + ); + + it("should dereference successfully", async () => { + const parser = new $RefParser(); + const schema = await parser.dereference(path.rel("test/specs/deep-circular/deep-circular.yaml")); + expect(schema).to.equal(parser.schema); + expect(schema).to.deep.equal(dereferencedSchema); + // The "circular" flag should be set + expect(parser.$refs.circular).to.equal(true); + // Reference equality + // @ts-expect-error TS(2532): Object is possibly 'undefined'. + expect(schema.definitions.name) + // @ts-expect-error TS(2532): Object is possibly 'undefined'. + .to.equal(schema.properties.name) + // @ts-expect-error TS(2532): Object is possibly 'undefined'. + .to.equal(schema.properties.level1.properties.name) + // @ts-expect-error TS(2532): Object is possibly 'undefined'. + .to.equal(schema.properties.level1.properties.level2.properties.name) + // @ts-expect-error TS(2532): Object is possibly 'undefined'. + .to.equal(schema.properties.level1.properties.level2.properties.level3.properties.name) + // @ts-expect-error TS(2532): Object is possibly 'undefined'. + .to.equal(schema.properties.level1.properties.level2.properties.level3.properties.level4.properties.name); + }); + + it('should throw an error if "options.$refs.circular" is false', async () => { + const parser = new $RefParser(); + + try { + await parser.dereference(path.rel("test/specs/deep-circular/deep-circular.yaml"), { + dereference: { circular: false }, + }); + helper.shouldNotGetCalled(); + } catch (err) { + // A ReferenceError should have been thrown + expect(err).to.be.an.instanceOf(ReferenceError); + // @ts-expect-error TS(2571): Object is of type 'unknown'. + expect(err.message).to.contain("Circular $ref pointer found at "); + // @ts-expect-error TS(2571): Object is of type 'unknown'. + expect(err.message).to.contain( + "specs/deep-circular/deep-circular.yaml#/properties/level1/properties/level2/properties/" + + "level3/properties/level4/properties/level5/properties/level6/properties/level7/properties/" + + "level8/properties/level9/properties/level10/properties/level11/properties/level12/properties/" + + "level13/properties/level14/properties/level15/properties/level16/properties/level17/properties/" + + "level18/properties/level19/properties/level20/properties/level21/properties/level22/properties/" + + "level23/properties/level24/properties/level25/properties/level26/properties/level27/properties/" + + "level28/properties/level29/properties/level30", + ); + + // $Refs.circular should be true + expect(parser.$refs.circular).to.equal(true); + } + }); + + it("should bundle successfully", async () => { + const parser = new $RefParser(); + const schema = await parser.bundle(path.rel("test/specs/deep-circular/deep-circular.yaml")); + expect(schema).to.equal(parser.schema); + expect(schema).to.deep.equal(bundledSchema); + // The "circular" flag should NOT be set + // (it only gets set by `dereference`) + expect(parser.$refs.circular).to.equal(false); + }); +}); diff --git a/test/specs/deep-circular/deep-circular.yaml b/test/specs/deep-circular/deep-circular.yaml index 9924c7b9..ce4c3406 100644 --- a/test/specs/deep-circular/deep-circular.yaml +++ b/test/specs/deep-circular/deep-circular.yaml @@ -2,7 +2,7 @@ title: Deep Schema type: object properties: name: - $ref: '#/definitions/name' + $ref: "#/definitions/name" level1: type: object required: @@ -23,7 +23,7 @@ properties: - name properties: name: - $ref: '#/definitions/name' + $ref: "#/definitions/name" level4: type: object required: @@ -44,7 +44,7 @@ properties: - name properties: name: - $ref: '#/definitions/name' + $ref: "#/definitions/name" level7: type: object required: @@ -86,14 +86,14 @@ properties: - name properties: name: - $ref: '#/definitions/name' + $ref: "#/definitions/name" level13: type: object required: - name properties: name: - $ref: '#/definitions/name' + $ref: "#/definitions/name" level14: type: object required: @@ -184,7 +184,7 @@ properties: - name properties: name: - $ref: '#/definitions/name' + $ref: "#/definitions/name" level27: type: object required: diff --git a/test/specs/deep-circular/dereferenced.js b/test/specs/deep-circular/dereferenced.ts similarity index 67% rename from test/specs/deep-circular/dereferenced.js rename to test/specs/deep-circular/dereferenced.ts index 7a4a62de..667146c1 100644 --- a/test/specs/deep-circular/dereferenced.js +++ b/test/specs/deep-circular/dereferenced.ts @@ -1,341 +1,270 @@ -let name = { - required: [ - "first", - "last" - ], +const name = { + required: ["first", "last"], type: "object", properties: { middle: { minLength: 1, - type: "string" + type: "string", }, prefix: { minLength: 3, type: "string", - title: "requiredString" + title: "requiredString", }, last: { minLength: 1, type: "string", - title: "requiredString" + title: "requiredString", }, suffix: { minLength: 3, maxLength: 3, type: "string", - title: "requiredString" + title: "requiredString", }, first: { minLength: 1, type: "string", - title: "requiredString" - } + title: "requiredString", + }, }, - title: "name" + title: "name", }; const dereferencedSchema = { title: "Deep Schema", type: "object", definitions: { - name + name, }, properties: { level1: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { level2: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { level3: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { level4: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { name, level5: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { name, level6: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { name, level7: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { level8: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { level9: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { level10: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { level11: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { level12: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { level13: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { name, level14: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { name, level15: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { level16: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { name, level17: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { level18: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { level19: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { level20: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { level21: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { level22: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { level23: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { name, level24: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { name, level25: { required: [ - "name" + "name", ], type: "object", properties: { name, level26: { required: [ - "name" + "name", ], type: "object", properties: { level27: { - required: [ - "name" - ], + required: + [ + "name", + ], type: "object", - properties: { - level28: { - required: [ - "name" - ], - type: "object", - properties: { - level29: { - required: [ - "name" - ], + properties: + { + level28: + { + required: + [ + "name", + ], type: "object", - properties: { - name - } + properties: + { + level29: + { + required: + [ + "name", + ], + type: "object", + properties: + { + name, + }, + }, + name, + }, }, - name - } + name, }, - name - } }, - name - } - } - } - } - } - } - } + name, + }, + }, + }, + }, + }, + }, + }, }, - name - } + name, + }, }, - name - } + name, + }, }, - name - } + name, + }, }, - name - } + name, + }, }, - name - } + name, + }, }, - name - } - } - } + name, + }, + }, + }, }, - name - } - } - } - } - } + name, + }, + }, + }, + }, + }, }, - name - } + name, + }, }, - name - } + name, + }, }, - name - } + name, + }, }, - name - } + name, + }, }, - name - } + name, + }, }, - name - } - } - } - } - } - } - } + name, + }, + }, + }, + }, + }, + }, + }, }, - name - } + name, + }, }, - name - } + name, + }, }, - name - } + name, + }, }, - name + name, }, }; -dereferencedSchema - .properties.level1 - .properties.level2 - .properties.level3 - .properties.level4 - .properties.level5 - .properties.level6 - .properties.level7 - .properties.level8 - .properties.level9 - .properties.level10 - .properties.level11 - .properties.level12 - .properties.level13 - .properties.level14 - .properties.level15 - .properties.level16 - .properties.level17 - .properties.level18 - .properties.level19 - .properties.level20 - .properties.level21 - .properties.level22 - .properties.level23 - .properties.level24 - .properties.level25 - .properties.level26 - .properties.level27 - .properties.level28 - .properties.level29 - .properties.level30 = dereferencedSchema; +// @ts-expect-error TS(2339): Property 'level30' does not exist on type '{ name:... Remove this comment to see the full error message +dereferencedSchema.properties.level1.properties.level2.properties.level3.properties.level4.properties.level5.properties.level6.properties.level7.properties.level8.properties.level9.properties.level10.properties.level11.properties.level12.properties.level13.properties.level14.properties.level15.properties.level16.properties.level17.properties.level18.properties.level19.properties.level20.properties.level21.properties.level22.properties.level23.properties.level24.properties.level25.properties.level26.properties.level27.properties.level28.properties.level29.properties.level30 = + dereferencedSchema; export default dereferencedSchema; diff --git a/test/specs/deep-circular/parsed.js b/test/specs/deep-circular/parsed.ts similarity index 69% rename from test/specs/deep-circular/parsed.js rename to test/specs/deep-circular/parsed.ts index 75edc598..eac6c21e 100644 --- a/test/specs/deep-circular/parsed.js +++ b/test/specs/deep-circular/parsed.ts @@ -3,376 +3,336 @@ export default { title: "Deep Schema", definitions: { name: { - $ref: "definitions/name.yaml" - } + $ref: "definitions/name.yaml", + }, }, type: "object", properties: { level1: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { level2: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { level3: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { level4: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { name: { - $ref: "definitions/name.yaml" + $ref: "definitions/name.yaml", }, level5: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { name: { - $ref: "definitions/name.yaml" + $ref: "definitions/name.yaml", }, level6: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { name: { - $ref: "#/definitions/name" + $ref: "#/definitions/name", }, level7: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { level8: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { level9: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { level10: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { level11: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { level12: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { level13: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { name: { - $ref: "#/definitions/name" + $ref: "#/definitions/name", }, level14: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { name: { - $ref: "definitions/name.yaml" + $ref: "definitions/name.yaml", }, level15: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { level16: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { name: { - $ref: "definitions/name.yaml" + $ref: "definitions/name.yaml", }, level17: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { level18: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { level19: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { level20: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { level21: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { level22: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { level23: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { name: { - $ref: "definitions/name.yaml" + $ref: "definitions/name.yaml", }, level24: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { name: { - $ref: "definitions/name.yaml" + $ref: "definitions/name.yaml", }, level25: { required: [ - "name" + "name", ], type: "object", properties: { name: { - $ref: "definitions/name.yaml" + $ref: "definitions/name.yaml", }, level26: { required: [ - "name" + "name", ], type: "object", - properties: { - level27: { - required: [ - "name" - ], - type: "object", - properties: { - level28: { - required: [ - "name" - ], + properties: + { + level27: + { + required: + [ + "name", + ], type: "object", - properties: { - level29: { - required: [ - "name" - ], - type: "object", - properties: { - level30: { - $ref: "#" + properties: + { + level28: + { + required: + [ + "name", + ], + type: "object", + properties: + { + level29: + { + required: + [ + "name", + ], + type: "object", + properties: + { + level30: + { + $ref: "#", + }, + name: { + $ref: "definitions/name.yaml", + }, + }, + }, + name: { + $ref: "definitions/name.yaml", + }, + }, }, - name: { - $ref: "definitions/name.yaml" - } - } + name: { + $ref: "definitions/name.yaml", + }, }, - name: { - $ref: "definitions/name.yaml" - } - } }, - name: { - $ref: "definitions/name.yaml" - } - } + name: { + $ref: "#/definitions/name", + }, }, - name: { - $ref: "#/definitions/name" - } - } - } - } - } - } - } - } + }, + }, + }, + }, + }, + }, }, name: { - $ref: "definitions/name.yaml" - } - } + $ref: "definitions/name.yaml", + }, + }, }, name: { - $ref: "definitions/name.yaml" - } - } + $ref: "definitions/name.yaml", + }, + }, }, name: { - $ref: "definitions/name.yaml" - } - } + $ref: "definitions/name.yaml", + }, + }, }, name: { - $ref: "definitions/name.yaml" - } - } + $ref: "definitions/name.yaml", + }, + }, }, name: { - $ref: "definitions/name.yaml" - } - } + $ref: "definitions/name.yaml", + }, + }, }, name: { - $ref: "definitions/name.yaml" - } - } - } - } + $ref: "definitions/name.yaml", + }, + }, + }, + }, }, name: { - $ref: "definitions/name.yaml" - } - } - } - } - } - } + $ref: "definitions/name.yaml", + }, + }, + }, + }, + }, + }, }, name: { - $ref: "#/definitions/name" - } - } + $ref: "#/definitions/name", + }, + }, }, name: { - $ref: "definitions/name.yaml" - } - } + $ref: "definitions/name.yaml", + }, + }, }, name: { - $ref: "definitions/name.yaml" - } - } + $ref: "definitions/name.yaml", + }, + }, }, name: { - $ref: "definitions/name.yaml" - } - } + $ref: "definitions/name.yaml", + }, + }, }, name: { - $ref: "definitions/name.yaml" - } - } + $ref: "definitions/name.yaml", + }, + }, }, name: { - $ref: "definitions/name.yaml" - } - } - } - } - } - } - } - } + $ref: "definitions/name.yaml", + }, + }, + }, + }, + }, + }, + }, + }, }, name: { - $ref: "#/definitions/name" - } - } + $ref: "#/definitions/name", + }, + }, }, name: { - $ref: "definitions/name.yaml" - } - } + $ref: "definitions/name.yaml", + }, + }, }, name: { - $ref: "definitions/name.yaml" - } - } + $ref: "definitions/name.yaml", + }, + }, }, name: { - $ref: "#/definitions/name" - } - } + $ref: "#/definitions/name", + }, + }, }, name: { - required: [ - "first", - "last" - ], + required: ["first", "last"], type: "object", properties: { middle: { minLength: { - $ref: "#/properties/first/minLength" + $ref: "#/properties/first/minLength", }, type: { - $ref: "#/properties/first/type" - } + $ref: "#/properties/first/type", + }, }, prefix: { minLength: 3, - $ref: "#/properties/last" + $ref: "#/properties/last", }, last: { - $ref: "./required-string.yaml" + $ref: "./required-string.yaml", }, suffix: { $ref: "#/properties/prefix", type: "string", - maxLength: 3 + maxLength: 3, }, first: { - $ref: "../definitions/required-string.yaml" - } + $ref: "../definitions/required-string.yaml", + }, }, - title: "name" + title: "name", }, requiredString: { minLength: 1, type: "string", - title: "requiredString" - } + title: "requiredString", + }, }; diff --git a/test/specs/deep-external/bundled.js b/test/specs/deep-external/bundled.ts similarity index 58% rename from test/specs/deep-external/bundled.js rename to test/specs/deep-external/bundled.ts index 0e9ecb96..01d622d7 100644 --- a/test/specs/deep-external/bundled.js +++ b/test/specs/deep-external/bundled.ts @@ -1,6 +1,6 @@ export default { info: { - title: "Main" + title: "Main", }, paths: { "/test/add-test": { @@ -9,18 +9,18 @@ export default { content: { "application/json": { schema: { - $ref: "#/components/schemas/Test1" - } - } - } + $ref: "#/components/schemas/Test1", + }, + }, + }, }, responses: { 204: { description: "No Content", - } - } - } - } + }, + }, + }, + }, }, components: { schemas: { @@ -35,49 +35,45 @@ export default { items: { properties: { type: { - enum: [ - "VALUE1", - "VALUE2", - "VALUE3" - ] + enum: ["VALUE1", "VALUE2", "VALUE3"], }, value: { format: "double", - type: "number" - } - } - } - } - } + type: "number", + }, + }, + }, + }, + }, }, test5B: { properties: { test6: { items: { - $ref: "#/components/schemas/Common.Test3/properties/test5/items/properties/test5A/properties/test6/items" - } - } - } - } - } - } - } - } + $ref: "#/components/schemas/Common.Test3/properties/test5/items/properties/test5A/properties/test6/items", + }, + }, + }, + }, + }, + }, + }, + }, }, Test1: { properties: { test2: { - $ref: "#/components/schemas/Test2" - } - } + $ref: "#/components/schemas/Test2", + }, + }, }, Test2: { properties: { test3: { - $ref: "#/components/schemas/Common.Test3" - } - } - } - } - } + $ref: "#/components/schemas/Common.Test3", + }, + }, + }, + }, + }, }; diff --git a/test/specs/deep-external/deep.spec.js b/test/specs/deep-external/deep.spec.ts similarity index 61% rename from test/specs/deep-external/deep.spec.js rename to test/specs/deep-external/deep.spec.ts index a61e5ca2..e29052da 100644 --- a/test/specs/deep-external/deep.spec.js +++ b/test/specs/deep-external/deep.spec.ts @@ -1,14 +1,14 @@ -import chai from "chai"; +import { describe, it } from "vitest"; import $RefParser from "../../../lib/index.js"; import path from "../../utils/path.js"; import bundledSchema from "./bundled.js"; -const { expect } = chai; +import { expect } from "vitest"; describe("Schema with deeply-nested external $refs", () => { it("should bundle successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.bundle(path.rel("specs/deep-external/definitions/Main-spec.yaml")); + const parser = new $RefParser(); + const schema = await parser.bundle(path.rel("test/specs/deep-external/definitions/Main-spec.yaml")); expect(schema).to.equal(parser.schema); expect(schema).to.deep.equal(bundledSchema); }); diff --git a/test/specs/deep-external/definitions/Main-spec.yaml b/test/specs/deep-external/definitions/Main-spec.yaml index 22f1153e..13886934 100644 --- a/test/specs/deep-external/definitions/Main-spec.yaml +++ b/test/specs/deep-external/definitions/Main-spec.yaml @@ -1,5 +1,5 @@ info: - title: Main + title: Main paths: /test/add-test: post: @@ -9,7 +9,7 @@ paths: schema: $ref: "#/components/schemas/Test1" responses: - '204': + "204": description: No Content components: @@ -21,6 +21,6 @@ components: Test2: properties: test3: - $ref: '#/components/schemas/Common.Test3' + $ref: "#/components/schemas/Common.Test3" Common.Test3: - $ref: '../definitions/Shared.yaml#/components/schemas/Test4' + $ref: "../definitions/Shared.yaml#/components/schemas/Test4" diff --git a/test/specs/deep-external/definitions/Shared.yaml b/test/specs/deep-external/definitions/Shared.yaml index 5b166389..c0b265cc 100644 --- a/test/specs/deep-external/definitions/Shared.yaml +++ b/test/specs/deep-external/definitions/Shared.yaml @@ -1,38 +1,37 @@ info: - title: Shared - + title: Shared + components: schemas: - Test4: properties: test5: items: - $ref: '#/components/schemas/Test5' - + $ref: "#/components/schemas/Test5" + Test5: properties: test5A: - $ref: '#/components/schemas/Test5A' + $ref: "#/components/schemas/Test5A" test5B: - $ref: '#/components/schemas/Test5B' + $ref: "#/components/schemas/Test5B" Test5A: properties: test6: items: - $ref: '#/components/schemas/Test6' - + $ref: "#/components/schemas/Test6" + Test5B: properties: test6: items: - $ref: '#/components/schemas/Test6' - + $ref: "#/components/schemas/Test6" + Test6: properties: type: - $ref: '#/components/schemas/Test7Type' + $ref: "#/components/schemas/Test7Type" value: format: double type: number diff --git a/test/specs/deep-internal/Full-spec.yaml b/test/specs/deep-internal/Full-spec.yaml index 6810f551..46a74aef 100644 --- a/test/specs/deep-internal/Full-spec.yaml +++ b/test/specs/deep-internal/Full-spec.yaml @@ -1,5 +1,5 @@ info: - title: Main + title: Main paths: /test/add-test: post: @@ -9,7 +9,7 @@ paths: schema: $ref: "#/components/schemas/Test1" responses: - '204': + "204": description: No Content components: @@ -18,44 +18,44 @@ components: properties: test2: $ref: "#/components/schemas/Test2" - + Test2: properties: test3: - $ref: '#/components/schemas/Common.Test3' - + $ref: "#/components/schemas/Common.Test3" + Common.Test3: - $ref: '#/components/schemas/Test4' - + $ref: "#/components/schemas/Test4" + Test4: properties: test5: items: - $ref: '#/components/schemas/Test5' - + $ref: "#/components/schemas/Test5" + Test5: properties: test5A: - $ref: '#/components/schemas/Test5A' + $ref: "#/components/schemas/Test5A" test5B: - $ref: '#/components/schemas/Test5B' + $ref: "#/components/schemas/Test5B" Test5A: properties: test6: items: - $ref: '#/components/schemas/Test6' - + $ref: "#/components/schemas/Test6" + Test5B: properties: test6: items: - $ref: '#/components/schemas/Test6' - + $ref: "#/components/schemas/Test6" + Test6: properties: type: - $ref: '#/components/schemas/Test7Type' + $ref: "#/components/schemas/Test7Type" value: format: double type: number diff --git a/test/specs/deep-internal/bundled.js b/test/specs/deep-internal/bundled.ts similarity index 51% rename from test/specs/deep-internal/bundled.js rename to test/specs/deep-internal/bundled.ts index 860a75a4..43bdaa4d 100644 --- a/test/specs/deep-internal/bundled.js +++ b/test/specs/deep-internal/bundled.ts @@ -1,6 +1,6 @@ export default { info: { - title: "Main" + title: "Main", }, paths: { "/test/add-test": { @@ -9,93 +9,89 @@ export default { content: { "application/json": { schema: { - $ref: "#/components/schemas/Test1" - } - } - } + $ref: "#/components/schemas/Test1", + }, + }, + }, }, responses: { 204: { description: "No Content", - } - } - } - } + }, + }, + }, + }, }, components: { schemas: { "Common.Test3": { - $ref: "#/components/schemas/Test4" + $ref: "#/components/schemas/Test4", }, Test1: { properties: { test2: { - $ref: "#/components/schemas/Test2" - } - } + $ref: "#/components/schemas/Test2", + }, + }, }, Test2: { properties: { test3: { - $ref: "#/components/schemas/Test4" - } - } + $ref: "#/components/schemas/Test4", + }, + }, }, Test4: { properties: { test5: { items: { - $ref: "#/components/schemas/Test5" - } - } - } + $ref: "#/components/schemas/Test5", + }, + }, + }, }, Test5: { properties: { test5A: { - $ref: "#/components/schemas/Test5A" + $ref: "#/components/schemas/Test5A", }, test5B: { - $ref: "#/components/schemas/Test5B" - } - } + $ref: "#/components/schemas/Test5B", + }, + }, }, Test5A: { properties: { test6: { items: { - $ref: "#/components/schemas/Test6" - } - } - } + $ref: "#/components/schemas/Test6", + }, + }, + }, }, Test5B: { properties: { test6: { items: { - $ref: "#/components/schemas/Test6" - } - } - } + $ref: "#/components/schemas/Test6", + }, + }, + }, }, Test6: { properties: { type: { - $ref: "#/components/schemas/Test7Type" + $ref: "#/components/schemas/Test7Type", }, value: { format: "double", - type: "number" - } - } + type: "number", + }, + }, }, Test7Type: { - enum: [ - "VALUE1", - "VALUE2", - "VALUE3" - ] - } - } - } + enum: ["VALUE1", "VALUE2", "VALUE3"], + }, + }, + }, }; diff --git a/test/specs/deep-internal/deep.spec.js b/test/specs/deep-internal/deep.spec.ts similarity index 63% rename from test/specs/deep-internal/deep.spec.js rename to test/specs/deep-internal/deep.spec.ts index e34a483b..d30cac1d 100644 --- a/test/specs/deep-internal/deep.spec.js +++ b/test/specs/deep-internal/deep.spec.ts @@ -1,14 +1,14 @@ -import chai from "chai"; +import { describe, it } from "vitest"; import $RefParser from "../../../lib/index.js"; import path from "../../utils/path.js"; import bundledSchema from "./bundled.js"; -const { expect } = chai; +import { expect } from "vitest"; describe("Schema with deeply-nested internal $refs", () => { it("should bundle successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.bundle(path.rel("specs/deep-internal/Full-spec.yaml")); + const parser = new $RefParser(); + const schema = await parser.bundle(path.rel("test/specs/deep-internal/Full-spec.yaml")); expect(schema).to.equal(parser.schema); expect(schema).to.deep.equal(bundledSchema); }); diff --git a/test/specs/deep/bundled.js b/test/specs/deep/bundled.ts similarity index 72% rename from test/specs/deep/bundled.js rename to test/specs/deep/bundled.ts index 1aedcc66..d83845bd 100644 --- a/test/specs/deep/bundled.js +++ b/test/specs/deep/bundled.ts @@ -2,419 +2,377 @@ export default { type: "object", properties: { "level 1": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { "level 2": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { "level 3": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { "level 4": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { name: { type: { - $ref: "#/properties/name/type" - } + $ref: "#/properties/name/type", + }, }, "level 5": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { name: { type: { - $ref: "#/properties/name/type" - } + $ref: "#/properties/name/type", + }, }, "level 6": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { name: { type: { - $ref: "#/properties/name/type" - } + $ref: "#/properties/name/type", + }, }, "level 7": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { "level 8": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { "level 9": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { "level 10": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { "level 11": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { "level 12": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { "level 13": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { name: { type: { - $ref: "#/properties/name/type" - } + $ref: "#/properties/name/type", + }, }, "level 14": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { name: { type: { - $ref: "#/properties/name/type" - } + $ref: "#/properties/name/type", + }, }, "level 15": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { "level 16": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { name: { type: { - $ref: "#/properties/name/type" - } + $ref: "#/properties/name/type", + }, }, "level 17": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { "level 18": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { "level 19": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { "level 20": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { "level 21": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { "level 22": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { "level 23": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { name: { type: { - $ref: "#/properties/name/type" - } + $ref: "#/properties/name/type", + }, }, "level 24": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { name: { type: { - $ref: "#/properties/name/type" - } + $ref: "#/properties/name/type", + }, }, "level 25": { required: [ - "name" + "name", ], type: "object", properties: { name: { type: { - $ref: "#/properties/name/type" - } + $ref: "#/properties/name/type", + }, }, "level 26": { required: [ - "name" + "name", ], type: "object", properties: { - "level 27": { - required: [ - "name" - ], - type: "object", - properties: { - "level 28": { - required: [ - "name" + "level 27": + { + required: + [ + "name", ], - type: "object", - properties: { - "level 29": { - required: [ - "name" - ], - type: "object", - properties: { - name: { - type: { - $ref: "#/properties/name/type" - } - } - } - }, + type: "object", + properties: + { + "level 28": + { + required: + [ + "name", + ], + type: "object", + properties: + { + "level 29": + { + required: + [ + "name", + ], + type: "object", + properties: + { + name: { + type: { + $ref: "#/properties/name/type", + }, + }, + }, + }, + name: { + type: { + $ref: "#/properties/name/type", + }, + }, + }, + }, name: { type: { - $ref: "#/properties/name/type" - } - } - } - }, - name: { - type: { - $ref: "#/properties/name/type" - } - } - } - }, + $ref: "#/properties/name/type", + }, + }, + }, + }, name: { type: { - $ref: "#/properties/name/type" - } - } - } - } - } - } - } - } - } + $ref: "#/properties/name/type", + }, + }, + }, + }, + }, + }, + }, + }, + }, }, name: { type: { - $ref: "#/properties/name/type" - } - } - } + $ref: "#/properties/name/type", + }, + }, + }, }, name: { type: { - $ref: "#/properties/name/type" - } - } - } + $ref: "#/properties/name/type", + }, + }, + }, }, name: { type: { - $ref: "#/properties/name/type" - } - } - } + $ref: "#/properties/name/type", + }, + }, + }, }, name: { type: { - $ref: "#/properties/name/type" - } - } - } + $ref: "#/properties/name/type", + }, + }, + }, }, name: { type: { - $ref: "#/properties/name/type" - } - } - } + $ref: "#/properties/name/type", + }, + }, + }, }, name: { type: { - $ref: "#/properties/name/type" - } - } - } - } - } + $ref: "#/properties/name/type", + }, + }, + }, + }, + }, }, name: { type: { - $ref: "#/properties/name/type" - } - } - } - } - } - } - } + $ref: "#/properties/name/type", + }, + }, + }, + }, + }, + }, + }, }, name: { type: { - $ref: "#/properties/name/type" - } - } - } + $ref: "#/properties/name/type", + }, + }, + }, }, name: { type: { - $ref: "#/properties/name/type" - } - } - } + $ref: "#/properties/name/type", + }, + }, + }, }, name: { type: { - $ref: "#/properties/name/type" - } - } - } + $ref: "#/properties/name/type", + }, + }, + }, }, name: { type: { - $ref: "#/properties/name/type" - } - } - } + $ref: "#/properties/name/type", + }, + }, + }, }, name: { type: { - $ref: "#/properties/name/type" - } - } - } + $ref: "#/properties/name/type", + }, + }, + }, }, name: { type: { - $ref: "#/properties/name/type" - } - } - } - } - } - } - } - } - } + $ref: "#/properties/name/type", + }, + }, + }, + }, + }, + }, + }, + }, + }, }, name: { type: { - $ref: "#/properties/name/type" - } - } - } + $ref: "#/properties/name/type", + }, + }, + }, }, name: { type: { - $ref: "#/properties/name/type" - } - } - } + $ref: "#/properties/name/type", + }, + }, + }, }, name: { type: { - $ref: "#/properties/name/type" - } - } - } + $ref: "#/properties/name/type", + }, + }, + }, }, name: { type: { - required: [ - "first", - "last" - ], + required: ["first", "last"], type: "object", properties: { middle: { minLength: { - $ref: "#/properties/name/type/properties/last/minLength" + $ref: "#/properties/name/type/properties/last/minLength", }, type: { - $ref: "#/properties/name/type/properties/last/type" - } + $ref: "#/properties/name/type/properties/last/type", + }, }, prefix: { minLength: 3, - $ref: "#/properties/name/type/properties/last" + $ref: "#/properties/name/type/properties/last", }, last: { minLength: 1, type: "string", - title: "requiredString" + title: "requiredString", }, suffix: { $ref: "#/properties/name/type/properties/prefix", type: "string", - maxLength: 3 + maxLength: 3, }, first: { - $ref: "#/properties/name/type/properties/last" - } + $ref: "#/properties/name/type/properties/last", + }, }, - title: "name" - } - } + title: "name", + }, + }, }, - title: "Deep Schema" + title: "Deep Schema", }; diff --git a/test/specs/deep/deep.spec.js b/test/specs/deep/deep.spec.js deleted file mode 100644 index 3dcd3f26..00000000 --- a/test/specs/deep/deep.spec.js +++ /dev/null @@ -1,48 +0,0 @@ -import chai from "chai"; -import $RefParser from "../../../lib/index.js"; -import helper from "../../utils/helper.js"; -import path from "../../utils/path.js"; -import parsedSchema from "./parsed.js"; -import dereferencedSchema from "./dereferenced.js"; -import bundledSchema from "./bundled.js"; - -const { expect } = chai; - -describe("Schema with deeply-nested $refs", () => { - it("should parse successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.parse(path.rel("specs/deep/deep.yaml")); - expect(schema).to.equal(parser.schema); - expect(schema).to.deep.equal(parsedSchema.schema); - expect(parser.$refs.paths()).to.deep.equal([path.abs("specs/deep/deep.yaml")]); - }); - - it("should resolve successfully", helper.testResolve( - path.rel("specs/deep/deep.yaml"), - path.abs("specs/deep/deep.yaml"), parsedSchema.schema, - path.abs("specs/deep/definitions/name.yaml"), parsedSchema.name, - path.abs("specs/deep/definitions/required-string.yaml"), parsedSchema.requiredString - )); - - it("should dereference successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.dereference(path.rel("specs/deep/deep.yaml")); - expect(schema).to.equal(parser.schema); - expect(schema).to.deep.equal(dereferencedSchema); - // Reference equality - expect(schema.properties.name.type) - .to.equal(schema.properties["level 1"].properties.name.type) - .to.equal(schema.properties["level 1"].properties["level 2"].properties.name.type) - .to.equal(schema.properties["level 1"].properties["level 2"].properties["level 3"].properties.name.type) - .to.equal(schema.properties["level 1"].properties["level 2"].properties["level 3"].properties["level 4"].properties.name.type); - // The "circular" flag should NOT be set - expect(parser.$refs.circular).to.equal(false); - }); - - it("should bundle successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.bundle(path.rel("specs/deep/deep.yaml")); - expect(schema).to.equal(parser.schema); - expect(schema).to.deep.equal(bundledSchema); - }); -}); diff --git a/test/specs/deep/deep.spec.ts b/test/specs/deep/deep.spec.ts new file mode 100644 index 00000000..0b7c6eef --- /dev/null +++ b/test/specs/deep/deep.spec.ts @@ -0,0 +1,63 @@ +import { describe, it } from "vitest"; +import $RefParser from "../../../lib/index.js"; +import helper from "../../utils/helper.js"; +import path from "../../utils/path.js"; +import parsedSchema from "./parsed.js"; +import dereferencedSchema from "./dereferenced.js"; +import bundledSchema from "./bundled.js"; + +import { expect } from "vitest"; + +describe("Schema with deeply-nested $refs", () => { + it("should parse successfully", async () => { + const parser = new $RefParser(); + const schema = await parser.parse(path.rel("test/specs/deep/deep.yaml")); + expect(schema).to.equal(parser.schema); + expect(schema).to.deep.equal(parsedSchema.schema); + expect(parser.$refs.paths()).to.deep.equal([path.abs("test/specs/deep/deep.yaml")]); + }); + + it( + "should resolve successfully", + helper.testResolve( + path.rel("test/specs/deep/deep.yaml"), + path.abs("test/specs/deep/deep.yaml"), + // @ts-expect-error TS(2554): Expected 2 arguments, but got 7. + parsedSchema.schema, + path.abs("test/specs/deep/definitions/name.yaml"), + parsedSchema.name, + path.abs("test/specs/deep/definitions/required-string.yaml"), + parsedSchema.requiredString, + ), + ); + + it("should dereference successfully", async () => { + const parser = new $RefParser(); + const schema = await parser.dereference(path.rel("test/specs/deep/deep.yaml")); + expect(schema).to.equal(parser.schema); + expect(schema).to.deep.equal(dereferencedSchema); + // Reference equality + // @ts-expect-error TS(2532): Object is possibly 'undefined'. + expect(schema.properties.name.type) + // @ts-expect-error TS(2532): Object is possibly 'undefined'. + .to.equal(schema.properties["level 1"].properties.name.type) + // @ts-expect-error TS(2532): Object is possibly 'undefined'. + .to.equal(schema.properties["level 1"].properties["level 2"].properties.name.type) + // @ts-expect-error TS(2532): Object is possibly 'undefined'. + .to.equal(schema.properties["level 1"].properties["level 2"].properties["level 3"].properties.name.type) + .to.equal( + // @ts-expect-error TS(2532): Object is possibly 'undefined'. + schema.properties["level 1"].properties["level 2"].properties["level 3"].properties["level 4"].properties.name + .type, + ); + // The "circular" flag should NOT be set + expect(parser.$refs.circular).to.equal(false); + }); + + it("should bundle successfully", async () => { + const parser = new $RefParser(); + const schema = await parser.bundle(path.rel("test/specs/deep/deep.yaml")); + expect(schema).to.equal(parser.schema); + expect(schema).to.deep.equal(bundledSchema); + }); +}); diff --git a/test/specs/deep/dereferenced.js b/test/specs/deep/dereferenced.ts similarity index 71% rename from test/specs/deep/dereferenced.js rename to test/specs/deep/dereferenced.ts index a8b93f01..a389e226 100644 --- a/test/specs/deep/dereferenced.js +++ b/test/specs/deep/dereferenced.ts @@ -1,364 +1,322 @@ -let name = { - required: [ - "first", - "last" - ], +const name = { + required: ["first", "last"], type: "object", properties: { middle: { minLength: 1, - type: "string" + type: "string", }, prefix: { minLength: 3, type: "string", - title: "requiredString" + title: "requiredString", }, last: { minLength: 1, type: "string", - title: "requiredString" + title: "requiredString", }, suffix: { minLength: 3, maxLength: 3, type: "string", - title: "requiredString" + title: "requiredString", }, first: { minLength: 1, type: "string", - title: "requiredString" - } + title: "requiredString", + }, }, - title: "name" + title: "name", }; export default { type: "object", properties: { "level 1": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { "level 2": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { "level 3": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { "level 4": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { name: { - type: name + type: name, }, "level 5": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { name: { - type: name + type: name, }, "level 6": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { name: { - type: name + type: name, }, "level 7": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { "level 8": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { "level 9": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { "level 10": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { "level 11": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { "level 12": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { "level 13": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { name: { - type: name + type: name, }, "level 14": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { name: { - type: name + type: name, }, "level 15": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { "level 16": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { name: { - type: name + type: name, }, "level 17": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { "level 18": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { "level 19": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { "level 20": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { "level 21": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { "level 22": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { "level 23": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { name: { - type: name + type: name, }, "level 24": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { name: { - type: name + type: name, }, "level 25": { required: [ - "name" + "name", ], type: "object", properties: { name: { - type: name + type: name, }, "level 26": { required: [ - "name" + "name", ], type: "object", properties: { - "level 27": { - required: [ - "name" - ], - type: "object", - properties: { - "level 28": { - required: [ - "name" + "level 27": + { + required: + [ + "name", ], - type: "object", - properties: { - "level 29": { - required: [ - "name" - ], - type: "object", - properties: { - name: { - type: name - } - } - }, + type: "object", + properties: + { + "level 28": + { + required: + [ + "name", + ], + type: "object", + properties: + { + "level 29": + { + required: + [ + "name", + ], + type: "object", + properties: + { + name: { + type: name, + }, + }, + }, + name: { + type: name, + }, + }, + }, name: { - type: name - } - } - }, - name: { - type: name - } - } - }, + type: name, + }, + }, + }, name: { - type: name - } - } - } - } - } - } - } - } + type: name, + }, + }, + }, + }, + }, + }, + }, + }, }, name: { - type: name - } - } + type: name, + }, + }, }, name: { - type: name - } - } + type: name, + }, + }, }, name: { - type: name - } - } + type: name, + }, + }, }, name: { - type: name - } - } + type: name, + }, + }, }, name: { - type: name - } - } + type: name, + }, + }, }, name: { - type: name - } - } - } - } + type: name, + }, + }, + }, + }, }, name: { - type: name - } - } - } - } - } - } + type: name, + }, + }, + }, + }, + }, + }, }, name: { - type: name - } - } + type: name, + }, + }, }, name: { - type: name - } - } + type: name, + }, + }, }, name: { - type: name - } - } + type: name, + }, + }, }, name: { - type: name - } - } + type: name, + }, + }, }, name: { - type: name - } - } + type: name, + }, + }, }, name: { - type: name - } - } - } - } - } - } - } - } + type: name, + }, + }, + }, + }, + }, + }, + }, + }, }, name: { - type: name - } - } + type: name, + }, + }, }, name: { - type: name - } - } + type: name, + }, + }, }, name: { - type: name - } - } + type: name, + }, + }, }, name: { - type: name - } + type: name, + }, }, - title: "Deep Schema" + title: "Deep Schema", }; diff --git a/test/specs/deep/parsed.js b/test/specs/deep/parsed.ts similarity index 69% rename from test/specs/deep/parsed.js rename to test/specs/deep/parsed.ts index f48b0877..7aa54c77 100644 --- a/test/specs/deep/parsed.js +++ b/test/specs/deep/parsed.ts @@ -3,428 +3,387 @@ export default { type: "object", properties: { "level 1": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { "level 2": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { "level 3": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { "level 4": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { name: { type: { - $ref: "definitions/name.yaml" - } + $ref: "definitions/name.yaml", + }, }, "level 5": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { name: { type: { - $ref: "definitions/name.yaml" - } + $ref: "definitions/name.yaml", + }, }, "level 6": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { name: { type: { - $ref: "definitions/name.yaml" - } + $ref: "definitions/name.yaml", + }, }, "level 7": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { "level 8": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { "level 9": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { "level 10": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { "level 11": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { "level 12": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { "level 13": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { name: { type: { - $ref: "definitions/name.yaml" - } + $ref: "definitions/name.yaml", + }, }, "level 14": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { name: { type: { - $ref: "definitions/name.yaml" - } + $ref: "definitions/name.yaml", + }, }, "level 15": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { "level 16": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { name: { type: { - $ref: "definitions/name.yaml" - } + $ref: "definitions/name.yaml", + }, }, "level 17": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { "level 18": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { "level 19": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { "level 20": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { "level 21": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { "level 22": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { "level 23": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { name: { type: { - $ref: "definitions/name.yaml" - } + $ref: "definitions/name.yaml", + }, }, "level 24": { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { name: { type: { - $ref: "definitions/name.yaml" - } + $ref: "definitions/name.yaml", + }, }, "level 25": { required: [ - "name" + "name", ], type: "object", properties: { name: { type: { - $ref: "definitions/name.yaml" - } + $ref: "definitions/name.yaml", + }, }, "level 26": { required: [ - "name" + "name", ], type: "object", - properties: { - "level 27": { - required: [ - "name" - ], - type: "object", - properties: { - "level 28": { - required: [ - "name" - ], + properties: + { + "level 27": + { + required: + [ + "name", + ], type: "object", - properties: { - "level 29": { - required: [ - "name" - ], - type: "object", - properties: { - name: { - type: { - $ref: "definitions/name.yaml" - } - } - } + properties: + { + "level 28": + { + required: + [ + "name", + ], + type: "object", + properties: + { + "level 29": + { + required: + [ + "name", + ], + type: "object", + properties: + { + name: { + type: { + $ref: "definitions/name.yaml", + }, + }, + }, + }, + name: { + type: { + $ref: "definitions/name.yaml", + }, + }, + }, + }, + name: { + type: { + $ref: "definitions/name.yaml", + }, + }, }, - name: { - type: { - $ref: "definitions/name.yaml" - } - } - } }, - name: { - type: { - $ref: "definitions/name.yaml" - } - } - } + name: { + type: { + $ref: "definitions/name.yaml", + }, + }, }, - name: { - type: { - $ref: "definitions/name.yaml" - } - } - } - } - } - } - } - } - } + }, + }, + }, + }, + }, + }, }, name: { type: { - $ref: "definitions/name.yaml" - } - } - } + $ref: "definitions/name.yaml", + }, + }, + }, }, name: { type: { - $ref: "definitions/name.yaml" - } - } - } + $ref: "definitions/name.yaml", + }, + }, + }, }, name: { type: { - $ref: "definitions/name.yaml" - } - } - } + $ref: "definitions/name.yaml", + }, + }, + }, }, name: { type: { - $ref: "definitions/name.yaml" - } - } - } + $ref: "definitions/name.yaml", + }, + }, + }, }, name: { type: { - $ref: "definitions/name.yaml" - } - } - } + $ref: "definitions/name.yaml", + }, + }, + }, }, name: { type: { - $ref: "definitions/name.yaml" - } - } - } - } - } + $ref: "definitions/name.yaml", + }, + }, + }, + }, + }, }, name: { type: { - $ref: "definitions/name.yaml" - } - } - } - } - } - } - } + $ref: "definitions/name.yaml", + }, + }, + }, + }, + }, + }, + }, }, name: { type: { - $ref: "definitions/name.yaml" - } - } - } + $ref: "definitions/name.yaml", + }, + }, + }, }, name: { type: { - $ref: "definitions/name.yaml" - } - } - } + $ref: "definitions/name.yaml", + }, + }, + }, }, name: { type: { - $ref: "definitions/name.yaml" - } - } - } + $ref: "definitions/name.yaml", + }, + }, + }, }, name: { type: { - $ref: "definitions/name.yaml" - } - } - } + $ref: "definitions/name.yaml", + }, + }, + }, }, name: { type: { - $ref: "definitions/name.yaml" - } - } - } + $ref: "definitions/name.yaml", + }, + }, + }, }, name: { type: { - $ref: "definitions/name.yaml" - } - } - } - } - } - } - } - } - } + $ref: "definitions/name.yaml", + }, + }, + }, + }, + }, + }, + }, + }, + }, }, name: { type: { - $ref: "definitions/name.yaml" - } - } - } + $ref: "definitions/name.yaml", + }, + }, + }, }, name: { type: { - $ref: "definitions/name.yaml" - } - } - } + $ref: "definitions/name.yaml", + }, + }, + }, }, name: { type: { - $ref: "definitions/name.yaml" - } - } - } + $ref: "definitions/name.yaml", + }, + }, + }, }, name: { type: { - $ref: "definitions/name.yaml" - } - } + $ref: "definitions/name.yaml", + }, + }, }, - title: "Deep Schema" + title: "Deep Schema", }, name: { - required: [ - "first", - "last" - ], + required: ["first", "last"], type: "object", properties: { middle: { minLength: { - $ref: "#/properties/first/minLength" + $ref: "#/properties/first/minLength", }, type: { - $ref: "#/properties/first/type" - } + $ref: "#/properties/first/type", + }, }, prefix: { minLength: 3, - $ref: "#/properties/last" + $ref: "#/properties/last", }, last: { - $ref: "./required-string.yaml" + $ref: "./required-string.yaml", }, suffix: { $ref: "#/properties/prefix", type: "string", - maxLength: 3 + maxLength: 3, }, first: { - $ref: "../definitions/required-string.yaml" - } + $ref: "../definitions/required-string.yaml", + }, }, - title: "name" + title: "name", }, requiredString: { minLength: 1, type: "string", - title: "requiredString" - } + title: "requiredString", + }, }; diff --git a/test/specs/dereference-callback/dereference-callback.spec.js b/test/specs/dereference-callback/dereference-callback.spec.js deleted file mode 100644 index 6678f270..00000000 --- a/test/specs/dereference-callback/dereference-callback.spec.js +++ /dev/null @@ -1,26 +0,0 @@ -import chai from "chai"; -import $RefParser from "../../../lib/index.js"; -import pathUtils from "../../utils/path.js"; - -const { expect } = chai; - -describe("Schema with a $ref", () => { - it("should call onDereference", async () => { - let parser = new $RefParser(); - const calls = []; - await parser.dereference( - pathUtils.rel("specs/dereference-callback/dereference-callback.yaml"), - { - dereference: { - onDereference (path, object) { - calls.push({ path, object }); - }, - }, - } - ); - expect(calls).to.deep.equal([ - { path: "#/definitions/b", object: { $ref: "#/definitions/a" }}, - { path: "#/definitions/a", object: { $ref: "#/definitions/a" }}, - ]); - }); -}); diff --git a/test/specs/dereference-callback/dereference-callback.spec.ts b/test/specs/dereference-callback/dereference-callback.spec.ts new file mode 100644 index 00000000..5e3d74a8 --- /dev/null +++ b/test/specs/dereference-callback/dereference-callback.spec.ts @@ -0,0 +1,26 @@ +import { describe, it } from "vitest"; +import $RefParser from "../../../lib/index.js"; +import pathUtils from "../../utils/path.js"; + +import { expect } from "vitest"; +import type { Options } from "../../../lib/options"; + +describe("Schema with a $ref", () => { + it("should call onDereference", async () => { + const parser = new $RefParser(); + const calls: any = []; + const schema = pathUtils.rel("test/specs/dereference-callback/dereference-callback.yaml"); + const options = { + dereference: { + onDereference(path: any, object: any) { + calls.push({ path, object }); + }, + }, + } as Options; + await parser.dereference(schema, options); + expect(calls).to.deep.equal([ + { path: "#/definitions/b", object: { $ref: "#/definitions/a" } }, + { path: "#/definitions/a", object: { $ref: "#/definitions/a" } }, + ]); + }); +}); diff --git a/test/specs/empty/empty.spec.js b/test/specs/empty/empty.spec.js deleted file mode 100644 index d7914c27..00000000 --- a/test/specs/empty/empty.spec.js +++ /dev/null @@ -1,55 +0,0 @@ -import chai from "chai"; -import $RefParser from "../../../lib/index.js"; -import helper from "../../utils/helper.js"; -import path from "../../utils/path.js"; - -const { expect } = chai; - -describe("Empty schema", () => { - it("should parse successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.parse(path.rel("specs/empty/empty.json")); - expect(schema).to.be.an("object"); - expect(schema).to.be.empty; // eslint-disable-line no-unused-expressions - expect(parser.schema).to.equal(schema); - expect(parser.$refs.paths()).to.deep.equal([path.abs("specs/empty/empty.json")]); - }); - - it("should resolve successfully", helper.testResolve( - path.rel("specs/empty/empty.json"), - path.abs("specs/empty/empty.json"), {} - )); - - it("should dereference successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.dereference(path.rel("specs/empty/empty.json")); - expect(schema).to.be.an("object"); - expect(schema).to.be.empty; // eslint-disable-line no-unused-expressions - expect(parser.schema).to.equal(schema); - expect(parser.$refs.paths()).to.deep.equal([path.abs("specs/empty/empty.json")]); - // The "circular" flag should NOT be set - expect(parser.$refs.circular).to.equal(false); - }); - - it("should bundle successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.bundle(path.rel("specs/empty/empty.json")); - expect(schema).to.be.an("object"); - expect(schema).to.be.empty; // eslint-disable-line no-unused-expressions - expect(parser.schema).to.equal(schema); - expect(parser.$refs.paths()).to.deep.equal([path.abs("specs/empty/empty.json")]); - }); - - it('should throw an error if "parse.json.allowEmpty" is disabled', async () => { - try { - await $RefParser.parse(path.rel("specs/empty/empty.json"), { parse: { json: { allowEmpty: false }}}); - helper.shouldNotGetCalled(); - } - catch (err) { - expect(err).to.be.an.instanceOf(SyntaxError); - expect(err.message).to.contain("Error parsing "); - expect(err.message).to.contain('empty/empty.json"'); - expect(err.message).to.contain("Parsed value is empty"); - } - }); -}); diff --git a/test/specs/empty/empty.spec.ts b/test/specs/empty/empty.spec.ts new file mode 100644 index 00000000..9d932528 --- /dev/null +++ b/test/specs/empty/empty.spec.ts @@ -0,0 +1,57 @@ +import { describe, it } from "vitest"; +import $RefParser from "../../../lib/index.js"; +import helper from "../../utils/helper.js"; +import path from "../../utils/path.js"; + +import { expect } from "vitest"; + +describe("Empty schema", () => { + it("should parse successfully", async () => { + const parser = new $RefParser(); + const schema = await parser.parse(path.rel("test/specs/empty/empty.json")); + expect(schema).to.be.an("object"); + expect(schema).to.be.empty; // eslint-disable-line no-unused-expressions + expect(parser.schema).to.equal(schema); + expect(parser.$refs.paths()).to.deep.equal([path.abs("test/specs/empty/empty.json")]); + }); + + it( + "should resolve successfully", + helper.testResolve(path.rel("test/specs/empty/empty.json"), path.abs("test/specs/empty/empty.json"), {}), + ); + + it("should dereference successfully", async () => { + const parser = new $RefParser(); + const schema = await parser.dereference(path.rel("test/specs/empty/empty.json")); + expect(schema).to.be.an("object"); + expect(schema).to.be.empty; // eslint-disable-line no-unused-expressions + expect(parser.schema).to.equal(schema); + expect(parser.$refs.paths()).to.deep.equal([path.abs("test/specs/empty/empty.json")]); + // The "circular" flag should NOT be set + expect(parser.$refs.circular).to.equal(false); + }); + + it("should bundle successfully", async () => { + const parser = new $RefParser(); + const schema = await parser.bundle(path.rel("test/specs/empty/empty.json")); + expect(schema).to.be.an("object"); + expect(schema).to.be.empty; // eslint-disable-line no-unused-expressions + expect(parser.schema).to.equal(schema); + expect(parser.$refs.paths()).to.deep.equal([path.abs("test/specs/empty/empty.json")]); + }); + + it('should throw an error if "parse.json.allowEmpty" is disabled', async () => { + try { + await $RefParser.parse(path.rel("test/specs/empty/empty.json"), { parse: { json: { allowEmpty: false } } }); + helper.shouldNotGetCalled(); + } catch (err) { + expect(err).to.be.an.instanceOf(SyntaxError); + // @ts-expect-error TS(2571): Object is of type 'unknown'. + expect(err.message).to.contain("Error parsing "); + // @ts-expect-error TS(2571): Object is of type 'unknown'. + expect(err.message).to.contain('empty/empty.json"'); + // @ts-expect-error TS(2571): Object is of type 'unknown'. + expect(err.message).to.contain("Parsed value is empty"); + } + }); +}); diff --git a/test/specs/error-source/error-source.spec.js b/test/specs/error-source/error-source.spec.ts similarity index 54% rename from test/specs/error-source/error-source.spec.js rename to test/specs/error-source/error-source.spec.ts index 2959c60a..29799933 100644 --- a/test/specs/error-source/error-source.spec.js +++ b/test/specs/error-source/error-source.spec.ts @@ -1,28 +1,25 @@ -import chai from "chai"; -import chaiSubset from "chai-subset"; -chai.use(chaiSubset); +import { describe, it } from "vitest"; -const { expect } = chai; +import { expect } from "vitest"; import $RefParser from "../../../lib/index.js"; import helper from "../../utils/helper.js"; import path from "../../utils/path.js"; import { InvalidPointerError, ResolverError, MissingPointerError } from "../../../lib/util/errors.js"; - describe("Report correct error source and path for", () => { it("schema with broken reference", async () => { const parser = new $RefParser(); try { - await parser.dereference({ foo: { bar: { $ref: "I do not exist" }}}, { continueOnError: true }); + await parser.dereference({ foo: { bar: { $ref: "I do not exist" } } }, { continueOnError: true }); helper.shouldNotGetCalled(); - } - catch (err) { + } catch (err) { + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.errors).to.containSubset([ { name: ResolverError.name, - source: source => typeof source === "string", + source: (source: any) => typeof source === "string", path: ["foo", "bar"], - message: message => typeof message === "string", + message: (message: any) => typeof message === "string", }, ]); } @@ -31,16 +28,16 @@ describe("Report correct error source and path for", () => { it("schema with a local reference pointing at property with broken external reference", async () => { const parser = new $RefParser(); try { - await parser.dereference(path.abs("specs/error-source/broken-external.json"), { continueOnError: true }); + await parser.dereference(path.abs("test/specs/error-source/broken-external.json"), { continueOnError: true }); helper.shouldNotGetCalled(); - } - catch (err) { + } catch (err) { + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.errors).to.containSubset([ { name: ResolverError.name, - source: path.unixify(path.abs("specs/error-source/broken-external.json")), + source: path.unixify(path.abs("test/specs/error-source/broken-external.json")), path: ["components", "schemas", "testSchema", "properties", "test"], - message: message => typeof message === "string", + message: (message: any) => typeof message === "string", }, ]); } @@ -49,22 +46,22 @@ describe("Report correct error source and path for", () => { it("schema with a missing local pointer and reference pointing at external file with broken external", async () => { const parser = new $RefParser(); try { - await parser.dereference(path.abs("specs/error-source/invalid-external.json"), { continueOnError: true }); + await parser.dereference(path.abs("test/specs/error-source/invalid-external.json"), { continueOnError: true }); helper.shouldNotGetCalled(); - } - catch (err) { + } catch (err) { + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.errors).to.containSubset([ { name: MissingPointerError.name, - source: path.unixify(path.abs("specs/error-source/invalid-external.json")), + source: path.unixify(path.abs("test/specs/error-source/invalid-external.json")), path: ["foo", "bar"], - message: message => typeof message === "string", + message: (message: any) => typeof message === "string", }, { name: ResolverError.name, - source: path.unixify(path.abs("specs/error-source/broken-external.json")), + source: path.unixify(path.abs("test/specs/error-source/broken-external.json")), path: ["components", "schemas", "testSchema", "properties", "test"], - message: message => typeof message === "string", + message: (message: any) => typeof message === "string", }, ]); } @@ -73,16 +70,16 @@ describe("Report correct error source and path for", () => { it("schema with an invalid pointer", async () => { const parser = new $RefParser(); try { - await parser.dereference(path.abs("specs/error-source/invalid-pointer.json"), { continueOnError: true }); + await parser.dereference(path.abs("test/specs/error-source/invalid-pointer.json"), { continueOnError: true }); helper.shouldNotGetCalled(); - } - catch (err) { + } catch (err) { + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.errors).to.containSubset([ { name: InvalidPointerError.name, - source: path.unixify(path.abs("specs/error-source/invalid-pointer.json")), + source: path.unixify(path.abs("test/specs/error-source/invalid-pointer.json")), path: ["foo", "baz"], - message: message => typeof message === "string", + message: (message: any) => typeof message === "string", }, ]); } diff --git a/test/specs/exports.spec.js b/test/specs/exports.spec.ts similarity index 95% rename from test/specs/exports.spec.js rename to test/specs/exports.spec.ts index da6aa0b4..f8aa43fc 100644 --- a/test/specs/exports.spec.js +++ b/test/specs/exports.spec.ts @@ -1,5 +1,4 @@ -/* eslint-disable require-await */ -import chai from "chai"; +import { describe, it } from "vitest"; import defaultExport from "../../lib/index.js"; import * as namespaceExport from "../../lib/index.js"; import { default as namedDefaultExport } from "../../lib/index.js"; @@ -10,14 +9,13 @@ import { ResolverError, ParserError, UnmatchedParserError, - UnmatchedResolverError + UnmatchedResolverError, } from "../../lib/index.js"; -const { expect } = chai; +import { expect } from "vitest"; describe("json-schema-ref-parser package exports", () => { - - function is$RefParser (parser) { + function is$RefParser(parser: any) { expect(parser).to.be.a("function").with.property("name", "$RefParser"); expect(parser.parse).to.be.a("function").with.property("name", "parse"); expect(parser.prototype.parse).to.be.a("function").with.property("name", "parse"); @@ -79,6 +77,7 @@ describe("json-schema-ref-parser package exports", () => { it("should not export anything else", async () => { expect(namespaceExport).to.have.same.keys( + "$RefParser", "default", "parse", "resolve", @@ -93,5 +92,4 @@ describe("json-schema-ref-parser package exports", () => { "UnmatchedResolverError", ); }); - }); diff --git a/test/specs/external-from-internal/bundled.js b/test/specs/external-from-internal/bundled.js deleted file mode 100644 index 4fb750e6..00000000 --- a/test/specs/external-from-internal/bundled.js +++ /dev/null @@ -1,24 +0,0 @@ -export default { - internal1: { - $ref: "#/external1" - }, - internal2: { - $ref: "#/external1" - }, - internal3: { - $ref: "#/external2" - }, - internal4: { - $ref: "#/external2" - }, - external1: { - test: { - type: "string" - } - }, - external2: { - test: { - $ref: "#/external1/test" // <-- It should point to the most direct reference - } - } -}; diff --git a/test/specs/external-from-internal/bundled.ts b/test/specs/external-from-internal/bundled.ts new file mode 100644 index 00000000..cd89f4c7 --- /dev/null +++ b/test/specs/external-from-internal/bundled.ts @@ -0,0 +1,24 @@ +export default { + internal1: { + $ref: "#/external1", + }, + internal2: { + $ref: "#/external1", + }, + internal3: { + $ref: "#/external2", + }, + internal4: { + $ref: "#/external2", + }, + external1: { + test: { + type: "string", + }, + }, + external2: { + test: { + $ref: "#/external1/test", // <-- It should point to the most direct reference + }, + }, +}; diff --git a/test/specs/external-from-internal/dereferenced.js b/test/specs/external-from-internal/dereferenced.ts similarity index 53% rename from test/specs/external-from-internal/dereferenced.js rename to test/specs/external-from-internal/dereferenced.ts index 7cae505e..eb9ed69d 100644 --- a/test/specs/external-from-internal/dereferenced.js +++ b/test/specs/external-from-internal/dereferenced.ts @@ -1,32 +1,32 @@ export default { internal1: { test: { - type: "string" - } + type: "string", + }, }, internal2: { test: { - type: "string" - } + type: "string", + }, }, internal3: { test: { - type: "string" - } + type: "string", + }, }, internal4: { test: { - type: "string" - } + type: "string", + }, }, external1: { test: { - type: "string" - } + type: "string", + }, }, external2: { test: { - type: "string" - } - } + type: "string", + }, + }, }; diff --git a/test/specs/external-from-internal/external-from-internal.spec.js b/test/specs/external-from-internal/external-from-internal.spec.js deleted file mode 100644 index 01969534..00000000 --- a/test/specs/external-from-internal/external-from-internal.spec.js +++ /dev/null @@ -1,84 +0,0 @@ -import chai from "chai"; -import $RefParser from "../../../lib/index.js"; -import helper from "../../utils/helper.js"; -import path from "../../utils/path.js"; -import parsedSchema from "./parsed.js"; -import dereferencedSchema from "./dereferenced.js"; -import bundledSchema from "./bundled.js"; - -const { expect } = chai; - -/** - * This test is from PR #62 - * https://github.com/APIDevTools/json-schema-ref-parser/pull/62 - */ -describe("Schema with two external refs to the same value and internal ref before", () => { - it("should parse successfully from an absolute path", async () => { - let parser = new $RefParser(); - const schema = await parser.parse(path.abs("specs/external-from-internal/external-from-internal.yaml")); - expect(schema).to.equal(parser.schema); - expect(schema).to.deep.equal(parsedSchema.schema); - expect(parser.$refs.paths()).to.deep.equal([path.abs("specs/external-from-internal/external-from-internal.yaml")]); - }); - - it("should parse successfully from a relative path", async () => { - let parser = new $RefParser(); - const schema = await parser.parse(path.rel("specs/external-from-internal/external-from-internal.yaml")); - expect(schema).to.equal(parser.schema); - expect(schema).to.deep.equal(parsedSchema.schema); - expect(parser.$refs.paths()).to.deep.equal([path.abs("specs/external-from-internal/external-from-internal.yaml")]); - }); - - it("should parse successfully from a url", async () => { - let parser = new $RefParser(); - const schema = await parser.parse(path.url("specs/external-from-internal/external-from-internal.yaml")); - expect(schema).to.equal(parser.schema); - expect(schema).to.deep.equal(parsedSchema.schema); - expect(parser.$refs.paths()).to.deep.equal([path.url("specs/external-from-internal/external-from-internal.yaml")]); - }); - - it("should resolve successfully from an absolute path", helper.testResolve( - path.abs("specs/external-from-internal/external-from-internal.yaml"), - path.abs("specs/external-from-internal/external-from-internal.yaml"), parsedSchema.schema, - path.abs("specs/external-from-internal/definitions.yaml"), parsedSchema.definitions - )); - - it("should resolve successfully from a relative path", helper.testResolve( - path.rel("specs/external-from-internal/external-from-internal.yaml"), - path.abs("specs/external-from-internal/external-from-internal.yaml"), parsedSchema.schema, - path.abs("specs/external-from-internal/definitions.yaml"), parsedSchema.definitions - )); - - it("should resolve successfully from a url", helper.testResolve( - path.url("specs/external-from-internal/external-from-internal.yaml"), - path.url("specs/external-from-internal/external-from-internal.yaml"), parsedSchema.schema, - path.url("specs/external-from-internal/definitions.yaml"), parsedSchema.definitions - )); - - it("should dereference successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.dereference(path.rel("specs/external-from-internal/external-from-internal.yaml")); - expect(schema).to.equal(parser.schema); - expect(schema).to.deep.equal(dereferencedSchema); - // Reference equality - expect(schema.internal1).to.equal(schema.internal2); - expect(schema.internal2).to.equal(schema.external1); - expect(schema.internal3).to.equal(schema.internal4); - expect(schema.internal4).to.equal(schema.external2); - expect(schema.internal1.test) - .to.equal(schema.internal2.test) - .to.equal(schema.internal3.test) - .to.equal(schema.internal4.test) - .to.equal(schema.external1.test) - .to.equal(schema.external2.test); - // The "circular" flag should NOT be set - expect(parser.$refs.circular).to.equal(false); - }); - - it("should bundle successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.bundle(path.rel("specs/external-from-internal/external-from-internal.yaml")); - expect(schema).to.equal(parser.schema); - expect(schema).to.deep.equal(bundledSchema); - }); -}); diff --git a/test/specs/external-from-internal/external-from-internal.spec.ts b/test/specs/external-from-internal/external-from-internal.spec.ts new file mode 100644 index 00000000..1ea300a6 --- /dev/null +++ b/test/specs/external-from-internal/external-from-internal.spec.ts @@ -0,0 +1,115 @@ +import { describe, it } from "vitest"; +import $RefParser from "../../../lib/index.js"; +import helper from "../../utils/helper.js"; +import path from "../../utils/path.js"; +import parsedSchema from "./parsed.js"; +import dereferencedSchema from "./dereferenced.js"; +import bundledSchema from "./bundled.js"; + +import { expect } from "vitest"; + +/** + * This test is from PR #62 + * https://github.com/APIDevTools/json-schema-ref-parser/pull/62 + */ +describe("Schema with two external refs to the same value and internal ref before", () => { + it("should parse successfully from an absolute path", async () => { + const parser = new $RefParser(); + const schema = await parser.parse(path.abs("test/specs/external-from-internal/external-from-internal.yaml")); + expect(schema).to.equal(parser.schema); + expect(schema).to.deep.equal(parsedSchema.schema); + expect(parser.$refs.paths()).to.deep.equal([ + path.abs("test/specs/external-from-internal/external-from-internal.yaml"), + ]); + }); + + it("should parse successfully from a relative path", async () => { + const parser = new $RefParser(); + const schema = await parser.parse(path.rel("test/specs/external-from-internal/external-from-internal.yaml")); + expect(schema).to.equal(parser.schema); + expect(schema).to.deep.equal(parsedSchema.schema); + expect(parser.$refs.paths()).to.deep.equal([ + path.abs("test/specs/external-from-internal/external-from-internal.yaml"), + ]); + }); + + it("should parse successfully from a url", async () => { + const parser = new $RefParser(); + const schema = await parser.parse(path.url("test/specs/external-from-internal/external-from-internal.yaml")); + expect(schema).to.equal(parser.schema); + expect(schema).to.deep.equal(parsedSchema.schema); + expect(parser.$refs.paths()).to.deep.equal([ + path.url("test/specs/external-from-internal/external-from-internal.yaml"), + ]); + }); + + it( + "should resolve successfully from an absolute path", + helper.testResolve( + path.abs("test/specs/external-from-internal/external-from-internal.yaml"), + path.abs("test/specs/external-from-internal/external-from-internal.yaml"), + parsedSchema.schema, + path.abs("test/specs/external-from-internal/definitions.yaml"), + parsedSchema.definitions, + ), + ); + + it( + "should resolve successfully from a relative path", + helper.testResolve( + path.rel("test/specs/external-from-internal/external-from-internal.yaml"), + path.abs("test/specs/external-from-internal/external-from-internal.yaml"), + parsedSchema.schema, + path.abs("test/specs/external-from-internal/definitions.yaml"), + parsedSchema.definitions, + ), + ); + + it( + "should resolve successfully from a url", + helper.testResolve( + path.url("test/specs/external-from-internal/external-from-internal.yaml"), + path.url("test/specs/external-from-internal/external-from-internal.yaml"), + parsedSchema.schema, + path.url("test/specs/external-from-internal/definitions.yaml"), + parsedSchema.definitions, + ), + ); + + it("should dereference successfully", async () => { + const parser = new $RefParser(); + const schema = await parser.dereference(path.rel("test/specs/external-from-internal/external-from-internal.yaml")); + expect(schema).to.equal(parser.schema); + expect(schema).to.deep.equal(dereferencedSchema); + // Reference equality + // @ts-expect-error TS(2339): Property 'internal1' does not exist on type 'JSONS... Remove this comment to see the full error message + expect(schema.internal1).to.equal(schema.internal2); + // @ts-expect-error TS(2339): Property 'internal2' does not exist on type 'JSONS... Remove this comment to see the full error message + expect(schema.internal2).to.equal(schema.external1); + // @ts-expect-error TS(2339): Property 'internal3' does not exist on type 'JSONS... Remove this comment to see the full error message + expect(schema.internal3).to.equal(schema.internal4); + // @ts-expect-error TS(2339): Property 'internal4' does not exist on type 'JSONS... Remove this comment to see the full error message + expect(schema.internal4).to.equal(schema.external2); + // @ts-expect-error TS(2339): Property 'internal1' does not exist on type 'JSONS... Remove this comment to see the full error message + expect(schema.internal1.test) + // @ts-expect-error TS(2339): Property 'internal2' does not exist on type 'JSONS... Remove this comment to see the full error message + .to.equal(schema.internal2.test) + // @ts-expect-error TS(2339): Property 'internal3' does not exist on type 'JSONS... Remove this comment to see the full error message + .to.equal(schema.internal3.test) + // @ts-expect-error TS(2339): Property 'internal4' does not exist on type 'JSONS... Remove this comment to see the full error message + .to.equal(schema.internal4.test) + // @ts-expect-error TS(2339): Property 'external1' does not exist on type 'JSONS... Remove this comment to see the full error message + .to.equal(schema.external1.test) + // @ts-expect-error TS(2339): Property 'external2' does not exist on type 'JSONS... Remove this comment to see the full error message + .to.equal(schema.external2.test); + // The "circular" flag should NOT be set + expect(parser.$refs.circular).to.equal(false); + }); + + it("should bundle successfully", async () => { + const parser = new $RefParser(); + const schema = await parser.bundle(path.rel("test/specs/external-from-internal/external-from-internal.yaml")); + expect(schema).to.equal(parser.schema); + expect(schema).to.deep.equal(bundledSchema); + }); +}); diff --git a/test/specs/external-from-internal/external-from-internal.yaml b/test/specs/external-from-internal/external-from-internal.yaml index 28727558..6ae56892 100644 --- a/test/specs/external-from-internal/external-from-internal.yaml +++ b/test/specs/external-from-internal/external-from-internal.yaml @@ -1,14 +1,14 @@ internal1: - $ref: '#/internal2' + $ref: "#/internal2" internal2: - $ref: '#/external1' + $ref: "#/external1" internal3: - $ref: '#/internal4' + $ref: "#/internal4" internal4: - $ref: '#/external2' + $ref: "#/external2" external1: test: - $ref: 'definitions.yaml#/thing' + $ref: "definitions.yaml#/thing" external2: test: - $ref: 'definitions.yaml#/thing' + $ref: "definitions.yaml#/thing" diff --git a/test/specs/external-from-internal/parsed.js b/test/specs/external-from-internal/parsed.js deleted file mode 100644 index 1559f800..00000000 --- a/test/specs/external-from-internal/parsed.js +++ /dev/null @@ -1,32 +0,0 @@ -export default { - schema: { - internal1: { - $ref: "#/internal2" - }, - internal2: { - $ref: "#/external1" - }, - internal3: { - $ref: "#/internal4" - }, - internal4: { - $ref: "#/external2" - }, - external1: { - test: { - $ref: "definitions.yaml#/thing" - } - }, - external2: { - test: { - $ref: "definitions.yaml#/thing" - } - }, - }, - - definitions: { - thing: { - type: "string" - } - } -}; diff --git a/test/specs/external-from-internal/parsed.ts b/test/specs/external-from-internal/parsed.ts new file mode 100644 index 00000000..44419f83 --- /dev/null +++ b/test/specs/external-from-internal/parsed.ts @@ -0,0 +1,32 @@ +export default { + schema: { + internal1: { + $ref: "#/internal2", + }, + internal2: { + $ref: "#/external1", + }, + internal3: { + $ref: "#/internal4", + }, + internal4: { + $ref: "#/external2", + }, + external1: { + test: { + $ref: "definitions.yaml#/thing", + }, + }, + external2: { + test: { + $ref: "definitions.yaml#/thing", + }, + }, + }, + + definitions: { + thing: { + type: "string", + }, + }, +}; diff --git a/test/specs/external-multiple/bundled.js b/test/specs/external-multiple/bundled.ts similarity index 64% rename from test/specs/external-multiple/bundled.js rename to test/specs/external-multiple/bundled.ts index 8f3bfa8d..60b17f9b 100644 --- a/test/specs/external-multiple/bundled.js +++ b/test/specs/external-multiple/bundled.ts @@ -3,25 +3,25 @@ export default { required: ["user", "token"], properties: { token: { - type: "string" + type: "string", }, user: { type: "object", required: ["name"], properties: { name: { - type: "string" - } + type: "string", + }, }, example: { - name: "Homer" - } - } + name: "Homer", + }, + }, }, example: { token: "11111111", user: { - $ref: "#/properties/user/example" - } - } + $ref: "#/properties/user/example", + }, + }, }; diff --git a/test/specs/external-multiple/definitions.yaml b/test/specs/external-multiple/definitions.yaml index 6bfa390f..9ccfa790 100644 --- a/test/specs/external-multiple/definitions.yaml +++ b/test/specs/external-multiple/definitions.yaml @@ -5,4 +5,4 @@ User: name: type: string example: - name: 'Homer' + name: "Homer" diff --git a/test/specs/external-multiple/dereferenced.js b/test/specs/external-multiple/dereferenced.ts similarity index 68% rename from test/specs/external-multiple/dereferenced.js rename to test/specs/external-multiple/dereferenced.ts index a142cf55..1d517a7c 100644 --- a/test/specs/external-multiple/dereferenced.js +++ b/test/specs/external-multiple/dereferenced.ts @@ -3,25 +3,25 @@ export default { required: ["user", "token"], properties: { token: { - type: "string" + type: "string", }, user: { type: "object", required: ["name"], properties: { name: { - type: "string" - } + type: "string", + }, }, example: { - name: "Homer" - } - } + name: "Homer", + }, + }, }, example: { token: "11111111", user: { - name: "Homer" - } - } + name: "Homer", + }, + }, }; diff --git a/test/specs/external-multiple/external-multiple.spec.js b/test/specs/external-multiple/external-multiple.spec.ts similarity index 50% rename from test/specs/external-multiple/external-multiple.spec.js rename to test/specs/external-multiple/external-multiple.spec.ts index fce4fe6e..f3acf838 100644 --- a/test/specs/external-multiple/external-multiple.spec.js +++ b/test/specs/external-multiple/external-multiple.spec.ts @@ -1,4 +1,4 @@ -import chai from "chai"; +import { describe, it } from "vitest"; import $RefParser from "../../../lib/index.js"; import helper from "../../utils/helper.js"; import path from "../../utils/path.js"; @@ -6,37 +6,44 @@ import parsedSchema from "./parsed.js"; import dereferencedSchema from "./dereferenced.js"; import bundledSchema from "./bundled.js"; -const { expect } = chai; +import { expect } from "vitest"; describe("Schema with multiple external $refs to different parts of a file", () => { it("should parse successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.parse(path.abs("specs/external-multiple/external-multiple.yaml")); + const parser = new $RefParser(); + const schema = await parser.parse(path.abs("test/specs/external-multiple/external-multiple.yaml")); expect(schema).to.equal(parser.schema); expect(schema).to.deep.equal(parsedSchema.schema); - expect(parser.$refs.paths()).to.deep.equal([path.abs("specs/external-multiple/external-multiple.yaml")]); + expect(parser.$refs.paths()).to.deep.equal([path.abs("test/specs/external-multiple/external-multiple.yaml")]); }); - it("should resolve successfully", helper.testResolve( - path.rel("specs/external-multiple/external-multiple.yaml"), - path.abs("specs/external-multiple/external-multiple.yaml"), parsedSchema.schema, - path.abs("specs/external-multiple/definitions.yaml"), parsedSchema.definitions - )); + it( + "should resolve successfully", + helper.testResolve( + path.rel("test/specs/external-multiple/external-multiple.yaml"), + path.abs("test/specs/external-multiple/external-multiple.yaml"), + // @ts-expect-error TS(2554): Expected 2 arguments, but got 5. + parsedSchema.schema, + path.abs("test/specs/external-multiple/definitions.yaml"), + parsedSchema.definitions, + ), + ); it("should dereference successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.dereference(path.rel("specs/external-multiple/external-multiple.yaml")); + const parser = new $RefParser(); + const schema = await parser.dereference(path.rel("test/specs/external-multiple/external-multiple.yaml")); expect(schema).to.equal(parser.schema); expect(schema).to.deep.equal(dereferencedSchema); // Reference equality + // @ts-expect-error TS(2532): Object is possibly 'undefined'. expect(schema.properties.user.example).to.equal(schema.example.user); // The "circular" flag should NOT be set expect(parser.$refs.circular).to.equal(false); }); it("should bundle successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.bundle(path.rel("specs/external-multiple/external-multiple.yaml")); + const parser = new $RefParser(); + const schema = await parser.bundle(path.rel("test/specs/external-multiple/external-multiple.yaml")); expect(schema).to.equal(parser.schema); expect(schema).to.deep.equal(bundledSchema); }); diff --git a/test/specs/external-multiple/external-multiple.yaml b/test/specs/external-multiple/external-multiple.yaml index cfe0423e..5db3a226 100644 --- a/test/specs/external-multiple/external-multiple.yaml +++ b/test/specs/external-multiple/external-multiple.yaml @@ -4,8 +4,8 @@ properties: token: type: string user: - $ref: 'definitions.yaml#/User' + $ref: "definitions.yaml#/User" example: - token: '11111111' + token: "11111111" user: - $ref: 'definitions.yaml#/User/example' + $ref: "definitions.yaml#/User/example" diff --git a/test/specs/external-multiple/parsed.js b/test/specs/external-multiple/parsed.ts similarity index 61% rename from test/specs/external-multiple/parsed.js rename to test/specs/external-multiple/parsed.ts index 52f5b3b0..d308586f 100644 --- a/test/specs/external-multiple/parsed.js +++ b/test/specs/external-multiple/parsed.ts @@ -4,18 +4,18 @@ export default { required: ["user", "token"], properties: { token: { - type: "string" + type: "string", }, user: { - $ref: "definitions.yaml#/User" - } + $ref: "definitions.yaml#/User", + }, }, example: { token: "11111111", user: { - $ref: "definitions.yaml#/User/example" - } - } + $ref: "definitions.yaml#/User/example", + }, + }, }, definitions: { @@ -24,12 +24,12 @@ export default { required: ["name"], properties: { name: { - type: "string" - } + type: "string", + }, }, example: { - name: "Homer" - } - } - } + name: "Homer", + }, + }, + }, }; diff --git a/test/specs/external-partial/bundled.js b/test/specs/external-partial/bundled.ts similarity index 57% rename from test/specs/external-partial/bundled.js rename to test/specs/external-partial/bundled.ts index ab847be2..19cbcf59 100644 --- a/test/specs/external-partial/bundled.js +++ b/test/specs/external-partial/bundled.ts @@ -1,55 +1,47 @@ export default { title: "Person", type: "object", - required: [ - "name" - ], + required: ["name"], properties: { name: { title: "name", type: "object", - required: [ - "first", - "last" - ], + required: ["first", "last"], properties: { first: { - $ref: "#/properties/name/properties/last" + $ref: "#/properties/name/properties/last", }, last: { title: "required string", type: "string", - minLength: 1 + minLength: 1, }, middle: { type: { - $ref: "#/properties/name/properties/last/type" + $ref: "#/properties/name/properties/last/type", }, minLength: { - $ref: "#/properties/name/properties/last/minLength" - } + $ref: "#/properties/name/properties/last/minLength", + }, }, prefix: { $ref: "#/properties/name/properties/last", - minLength: 3 + minLength: 3, }, suffix: { $ref: "#/properties/name/properties/prefix", type: "string", - maxLength: 3 - } - } + maxLength: 3, + }, + }, }, age: { type: "integer", - minimum: 0 + minimum: 0, }, gender: { type: "string", - enum: [ - "male", - "female" - ] - } - } + enum: ["male", "female"], + }, + }, }; diff --git a/test/specs/external-partial/dereferenced.js b/test/specs/external-partial/dereferenced.ts similarity index 68% rename from test/specs/external-partial/dereferenced.js rename to test/specs/external-partial/dereferenced.ts index 0ebe4312..13a0b95b 100644 --- a/test/specs/external-partial/dereferenced.js +++ b/test/specs/external-partial/dereferenced.ts @@ -1,55 +1,47 @@ export default { title: "Person", type: "object", - required: [ - "name" - ], + required: ["name"], properties: { name: { title: "name", type: "object", - required: [ - "first", - "last" - ], + required: ["first", "last"], properties: { first: { title: "required string", type: "string", - minLength: 1 + minLength: 1, }, last: { title: "required string", type: "string", - minLength: 1 + minLength: 1, }, middle: { type: "string", - minLength: 1 + minLength: 1, }, prefix: { title: "required string", type: "string", - minLength: 3 + minLength: 3, }, suffix: { title: "required string", type: "string", minLength: 3, - maxLength: 3 - } - } + maxLength: 3, + }, + }, }, age: { type: "integer", - minimum: 0 + minimum: 0, }, gender: { type: "string", - enum: [ - "male", - "female" - ] - } - } + enum: ["male", "female"], + }, + }, }; diff --git a/test/specs/external-partial/external-partial.spec.js b/test/specs/external-partial/external-partial.spec.js deleted file mode 100644 index d3859665..00000000 --- a/test/specs/external-partial/external-partial.spec.js +++ /dev/null @@ -1,46 +0,0 @@ -import chai from "chai"; -import $RefParser from "../../../lib/index.js"; -import helper from "../../utils/helper.js"; -import path from "../../utils/path.js"; -import parsedSchema from "./parsed.js"; -import dereferencedSchema from "./dereferenced.js"; -import bundledSchema from "./bundled.js"; - -const { expect } = chai; - -describe("Schema with $refs to parts of external files", () => { - it("should parse successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.parse(path.rel("specs/external-partial/external-partial.yaml")); - expect(schema).to.equal(parser.schema); - expect(schema).to.deep.equal(parsedSchema.schema); - expect(parser.$refs.paths()).to.deep.equal([path.abs("specs/external-partial/external-partial.yaml")]); - }); - - it("should resolve successfully", helper.testResolve( - path.rel("specs/external-partial/external-partial.yaml"), - path.abs("specs/external-partial/external-partial.yaml"), parsedSchema.schema, - path.abs("specs/external-partial/definitions/definitions.json"), parsedSchema.definitions, - path.abs("specs/external-partial/definitions/name.yaml"), parsedSchema.name, - path.abs("specs/external-partial/definitions/required-string.yaml"), parsedSchema.requiredString - )); - - it("should dereference successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.dereference(path.rel("specs/external-partial/external-partial.yaml")); - expect(schema).to.equal(parser.schema); - expect(schema).to.deep.equal(dereferencedSchema); - // Reference equality - expect(schema.properties.name.properties.first) - .to.equal(schema.properties.name.properties.last); - // The "circular" flag should NOT be set - expect(parser.$refs.circular).to.equal(false); - }); - - it("should bundle successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.bundle(path.rel("specs/external-partial/external-partial.yaml")); - expect(schema).to.equal(parser.schema); - expect(schema).to.deep.equal(bundledSchema); - }); -}); diff --git a/test/specs/external-partial/external-partial.spec.ts b/test/specs/external-partial/external-partial.spec.ts new file mode 100644 index 00000000..a35e2e8a --- /dev/null +++ b/test/specs/external-partial/external-partial.spec.ts @@ -0,0 +1,54 @@ +import { describe, it } from "vitest"; +import $RefParser from "../../../lib/index.js"; +import helper from "../../utils/helper.js"; +import path from "../../utils/path.js"; +import parsedSchema from "./parsed.js"; +import dereferencedSchema from "./dereferenced.js"; +import bundledSchema from "./bundled.js"; + +import { expect } from "vitest"; + +describe("Schema with $refs to parts of external files", () => { + it("should parse successfully", async () => { + const parser = new $RefParser(); + const schema = await parser.parse(path.rel("test/specs/external-partial/external-partial.yaml")); + expect(schema).to.equal(parser.schema); + expect(schema).to.deep.equal(parsedSchema.schema); + expect(parser.$refs.paths()).to.deep.equal([path.abs("test/specs/external-partial/external-partial.yaml")]); + }); + + it( + "should resolve successfully", + helper.testResolve( + path.rel("test/specs/external-partial/external-partial.yaml"), + path.abs("test/specs/external-partial/external-partial.yaml"), + // @ts-expect-error TS(2554): Expected 2 arguments, but got 9. + parsedSchema.schema, + path.abs("test/specs/external-partial/definitions/definitions.json"), + parsedSchema.definitions, + path.abs("test/specs/external-partial/definitions/name.yaml"), + parsedSchema.name, + path.abs("test/specs/external-partial/definitions/required-string.yaml"), + parsedSchema.requiredString, + ), + ); + + it("should dereference successfully", async () => { + const parser = new $RefParser(); + const schema = await parser.dereference(path.rel("test/specs/external-partial/external-partial.yaml")); + expect(schema).to.equal(parser.schema); + expect(schema).to.deep.equal(dereferencedSchema); + // Reference equality + // @ts-expect-error TS(2532): Object is possibly 'undefined'. + expect(schema.properties.name.properties.first).to.equal(schema.properties.name.properties.last); + // The "circular" flag should NOT be set + expect(parser.$refs.circular).to.equal(false); + }); + + it("should bundle successfully", async () => { + const parser = new $RefParser(); + const schema = await parser.bundle(path.rel("test/specs/external-partial/external-partial.yaml")); + expect(schema).to.equal(parser.schema); + expect(schema).to.deep.equal(bundledSchema); + }); +}); diff --git a/test/specs/external-partial/parsed.js b/test/specs/external-partial/parsed.ts similarity index 58% rename from test/specs/external-partial/parsed.js rename to test/specs/external-partial/parsed.ts index 82bf923c..cde54891 100644 --- a/test/specs/external-partial/parsed.js +++ b/test/specs/external-partial/parsed.ts @@ -1,80 +1,75 @@ export default { schema: { - required: [ - "name" - ], + required: ["name"], type: "object", properties: { gender: { - $ref: "definitions/definitions.json#/gender" + $ref: "definitions/definitions.json#/gender", }, age: { - $ref: "definitions/definitions.json#/age" + $ref: "definitions/definitions.json#/age", }, name: { - $ref: "definitions/definitions.json#/name" - } + $ref: "definitions/definitions.json#/name", + }, }, - title: "Person" + title: "Person", }, definitions: { "required string": { - $ref: "required-string.yaml" + $ref: "required-string.yaml", }, string: { - $ref: "#/required%20string/type" + $ref: "#/required%20string/type", }, name: { - $ref: "../definitions/name.yaml" + $ref: "../definitions/name.yaml", }, age: { type: "integer", - minimum: 0 + minimum: 0, }, gender: { type: "string", - enum: ["male", "female"] - } + enum: ["male", "female"], + }, }, name: { - required: [ - "first", - "last" - ], + required: ["first", "last"], type: "object", properties: { middle: { minLength: { - $ref: "definitions.json#/name/properties/first/minLength" + $ref: "definitions.json#/name/properties/first/minLength", }, type: { - $ref: "definitions.json#/name/properties/first/type" - } + $ref: "definitions.json#/name/properties/first/type", + }, }, prefix: { minLength: 3, - $ref: "../definitions/definitions.json#/name/properties/last" + $ref: "../definitions/definitions.json#/name/properties/last", }, last: { - $ref: "./required-string.yaml" + $ref: "./required-string.yaml", }, suffix: { $ref: "definitions.json#/name/properties/prefix", type: "string", - maxLength: 3 + maxLength: 3, }, first: { - $ref: "../definitions/definitions.json#/required string" - } + $ref: "../definitions/definitions.json#/required string", + }, }, - title: "name" + title: "name", }, requiredString: { minLength: 1, type: "string", - title: "required string" - } + title: "required string", + }, }; diff --git a/test/specs/absolute-root/bundled.js b/test/specs/external/bundled.ts similarity index 54% rename from test/specs/absolute-root/bundled.js rename to test/specs/external/bundled.ts index 33e08de9..950730a1 100644 --- a/test/specs/absolute-root/bundled.js +++ b/test/specs/external/bundled.ts @@ -1,66 +1,58 @@ export default { title: "Person", type: "object", - required: [ - "name" - ], + required: ["name"], properties: { name: { - $ref: "#/definitions/name" + $ref: "#/definitions/name", }, age: { type: "integer", - minimum: 0 + minimum: 0, }, gender: { type: "string", - enum: [ - "male", - "female" - ] - } + enum: ["male", "female"], + }, }, definitions: { "required string": { title: "required string", type: "string", - minLength: 1 + minLength: 1, }, string: { - $ref: "#/definitions/required%20string/type" + $ref: "#/definitions/required%20string/type", }, name: { title: "name", type: "object", - required: [ - "first", - "last" - ], + required: ["first", "last"], properties: { first: { - $ref: "#/definitions/required%20string" + $ref: "#/definitions/required%20string", }, last: { - $ref: "#/definitions/required%20string" + $ref: "#/definitions/required%20string", }, middle: { type: { - $ref: "#/definitions/required%20string/type" + $ref: "#/definitions/required%20string/type", }, minLength: { - $ref: "#/definitions/required%20string/minLength" - } + $ref: "#/definitions/required%20string/minLength", + }, }, prefix: { $ref: "#/definitions/required%20string", - minLength: 3 + minLength: 3, }, suffix: { $ref: "#/definitions/name/properties/prefix", type: "string", - maxLength: 3 - } - } - } - } + maxLength: 3, + }, + }, + }, + }, }; diff --git a/test/specs/absolute-root/dereferenced.js b/test/specs/external/dereferenced.ts similarity index 71% rename from test/specs/absolute-root/dereferenced.js rename to test/specs/external/dereferenced.ts index 1237ce69..08a960f7 100644 --- a/test/specs/absolute-root/dereferenced.js +++ b/test/specs/external/dereferenced.ts @@ -1,98 +1,87 @@ export default { title: "Person", type: "object", - required: [ - "name" - ], + required: ["name"], properties: { name: { title: "name", type: "object", - required: [ - "first", - "last" - ], + required: ["first", "last"], properties: { first: { title: "required string", type: "string", - minLength: 1 + minLength: 1, }, last: { title: "required string", type: "string", - minLength: 1 + minLength: 1, }, middle: { type: "string", - minLength: 1 + minLength: 1, }, prefix: { title: "required string", type: "string", - minLength: 3 + minLength: 3, }, suffix: { title: "required string", type: "string", minLength: 3, - maxLength: 3 - } - } + maxLength: 3, + }, + }, }, age: { type: "integer", - minimum: 0 + minimum: 0, }, gender: { type: "string", - enum: [ - "male", - "female" - ] - } + enum: ["male", "female"], + }, }, definitions: { "required string": { title: "required string", type: "string", - minLength: 1 + minLength: 1, }, string: "string", name: { title: "name", type: "object", - required: [ - "first", - "last" - ], + required: ["first", "last"], properties: { first: { title: "required string", type: "string", - minLength: 1 + minLength: 1, }, last: { title: "required string", type: "string", - minLength: 1 + minLength: 1, }, middle: { type: "string", - minLength: 1 + minLength: 1, }, prefix: { title: "required string", type: "string", - minLength: 3 + minLength: 3, }, suffix: { title: "required string", type: "string", minLength: 3, - maxLength: 3 - } - } - } - } + maxLength: 3, + }, + }, + }, + }, }; diff --git a/test/specs/external/external.spec.js b/test/specs/external/external.spec.js deleted file mode 100644 index faf28429..00000000 --- a/test/specs/external/external.spec.js +++ /dev/null @@ -1,82 +0,0 @@ -import chai from "chai"; -import $RefParser from "../../../lib/index.js"; -import helper from "../../utils/helper.js"; -import path from "../../utils/path.js"; -import parsedSchema from "./parsed.js"; -import dereferencedSchema from "./dereferenced.js"; -import bundledSchema from "./bundled.js"; - -const { expect } = chai; - -describe("Schema with external $refs", () => { - it("should parse successfully from an absolute path", async () => { - let parser = new $RefParser(); - const schema = await parser.parse(path.abs("specs/external/external.yaml")); - expect(schema).to.equal(parser.schema); - expect(schema).to.deep.equal(parsedSchema.schema); - expect(parser.$refs.paths()).to.deep.equal([path.abs("specs/external/external.yaml")]); - }); - - it("should parse successfully from a relative path", async () => { - let parser = new $RefParser(); - const schema = await parser.parse(path.rel("specs/external/external.yaml")); - expect(schema).to.equal(parser.schema); - expect(schema).to.deep.equal(parsedSchema.schema); - expect(parser.$refs.paths()).to.deep.equal([path.abs("specs/external/external.yaml")]); - }); - - it("should parse successfully from a url", async () => { - let parser = new $RefParser(); - const schema = await parser.parse(path.url("specs/external/external.yaml")); - expect(schema).to.equal(parser.schema); - expect(schema).to.deep.equal(parsedSchema.schema); - expect(parser.$refs.paths()).to.deep.equal([path.url("specs/external/external.yaml")]); - }); - - it("should resolve successfully from an absolute path", helper.testResolve( - path.abs("specs/external/external.yaml"), - path.abs("specs/external/external.yaml"), parsedSchema.schema, - path.abs("specs/external/definitions/definitions.json"), parsedSchema.definitions, - path.abs("specs/external/definitions/name.yaml"), parsedSchema.name, - path.abs("specs/external/definitions/required-string.yaml"), parsedSchema.requiredString - )); - - it("should resolve successfully from a relative path", helper.testResolve( - path.rel("specs/external/external.yaml"), - path.abs("specs/external/external.yaml"), parsedSchema.schema, - path.abs("specs/external/definitions/definitions.json"), parsedSchema.definitions, - path.abs("specs/external/definitions/name.yaml"), parsedSchema.name, - path.abs("specs/external/definitions/required-string.yaml"), parsedSchema.requiredString - )); - - it("should resolve successfully from a url", helper.testResolve( - path.url("specs/external/external.yaml"), - path.url("specs/external/external.yaml"), parsedSchema.schema, - path.url("specs/external/definitions/definitions.json"), parsedSchema.definitions, - path.url("specs/external/definitions/name.yaml"), parsedSchema.name, - path.url("specs/external/definitions/required-string.yaml"), parsedSchema.requiredString - )); - - it("should dereference successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.dereference(path.rel("specs/external/external.yaml")); - expect(schema).to.equal(parser.schema); - expect(schema).to.deep.equal(dereferencedSchema); - // Reference equality - expect(schema.properties.name).to.equal(schema.definitions.name); - expect(schema.definitions["required string"]) - .to.equal(schema.definitions.name.properties.first) - .to.equal(schema.definitions.name.properties.last) - .to.equal(schema.properties.name.properties.first) - .to.equal(schema.properties.name.properties.last); - // The "circular" flag should NOT be set - expect(parser.$refs.circular).to.equal(false); - }); - - it("should bundle successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.bundle(path.rel("specs/external/external.yaml")); - expect(schema).to.equal(parser.schema); - expect(schema).to.deep.equal(bundledSchema); - }); -}); diff --git a/test/specs/external/external.spec.ts b/test/specs/external/external.spec.ts new file mode 100644 index 00000000..172b300d --- /dev/null +++ b/test/specs/external/external.spec.ts @@ -0,0 +1,109 @@ +import { describe, it } from "vitest"; +import $RefParser from "../../../lib/index.js"; +import helper from "../../utils/helper.js"; +import path from "../../utils/path.js"; +import parsedSchema from "./parsed.js"; +import dereferencedSchema from "./dereferenced.js"; +import bundledSchema from "./bundled.js"; + +import { expect } from "vitest"; + +describe("Schema with external $refs", () => { + it("should parse successfully from an absolute path", async () => { + const parser = new $RefParser(); + const schema = await parser.parse(path.abs("test/specs/external/external.yaml")); + expect(schema).to.equal(parser.schema); + expect(schema).to.deep.equal(parsedSchema.schema); + expect(parser.$refs.paths()).to.deep.equal([path.abs("test/specs/external/external.yaml")]); + }); + + it("should parse successfully from a relative path", async () => { + const parser = new $RefParser(); + const schema = await parser.parse(path.rel("test/specs/external/external.yaml")); + expect(schema).to.equal(parser.schema); + expect(schema).to.deep.equal(parsedSchema.schema); + expect(parser.$refs.paths()).to.deep.equal([path.abs("test/specs/external/external.yaml")]); + }); + + it("should parse successfully from a url", async () => { + const parser = new $RefParser(); + const schema = await parser.parse(path.url("test/specs/external/external.yaml")); + expect(schema).to.equal(parser.schema); + expect(schema).to.deep.equal(parsedSchema.schema); + expect(parser.$refs.paths()).to.deep.equal([path.url("test/specs/external/external.yaml")]); + }); + + it( + "should resolve successfully from an absolute path", + helper.testResolve( + path.abs("test/specs/external/external.yaml"), + path.abs("test/specs/external/external.yaml"), + parsedSchema.schema, + path.abs("test/specs/external/definitions/definitions.json"), + parsedSchema.definitions, + path.abs("test/specs/external/definitions/name.yaml"), + parsedSchema.name, + path.abs("test/specs/external/definitions/required-string.yaml"), + parsedSchema.requiredString, + ), + ); + + it( + "should resolve successfully from a relative path", + helper.testResolve( + path.rel("test/specs/external/external.yaml"), + path.abs("test/specs/external/external.yaml"), + parsedSchema.schema, + path.abs("test/specs/external/definitions/definitions.json"), + parsedSchema.definitions, + path.abs("test/specs/external/definitions/name.yaml"), + parsedSchema.name, + path.abs("test/specs/external/definitions/required-string.yaml"), + parsedSchema.requiredString, + ), + ); + + it( + "should resolve successfully from a url", + helper.testResolve( + path.url("test/specs/external/external.yaml"), + path.url("test/specs/external/external.yaml"), + parsedSchema.schema, + path.url("test/specs/external/definitions/definitions.json"), + parsedSchema.definitions, + path.url("test/specs/external/definitions/name.yaml"), + parsedSchema.name, + path.url("test/specs/external/definitions/required-string.yaml"), + parsedSchema.requiredString, + ), + ); + + it("should dereference successfully", async () => { + const parser = new $RefParser(); + const schema = await parser.dereference(path.rel("test/specs/external/external.yaml")); + expect(schema).to.equal(parser.schema); + expect(schema).to.deep.equal(dereferencedSchema); + // Reference equality + // @ts-expect-error TS(2532): Object is possibly 'undefined'. + expect(schema.properties.name).to.equal(schema.definitions.name); + // @ts-expect-error TS(2532): Object is possibly 'undefined'. + expect(schema.definitions["required string"]) + // @ts-expect-error TS(2532): Object is possibly 'undefined'. + .to.equal(schema.definitions.name.properties.first) + // @ts-expect-error TS(2532): Object is possibly 'undefined'. + .to.equal(schema.definitions.name.properties.last) + // @ts-expect-error TS(2532): Object is possibly 'undefined'. + .to.equal(schema.properties.name.properties.first) + // @ts-expect-error TS(2532): Object is possibly 'undefined'. + .to.equal(schema.properties.name.properties.last); + // The "circular" flag should NOT be set + expect(parser.$refs.circular).to.equal(false); + }); + + it("should bundle successfully", async () => { + const parser = new $RefParser(); + const schema = await parser.bundle(path.rel("test/specs/external/external.yaml")); + expect(schema).to.equal(parser.schema); + expect(schema).to.deep.equal(bundledSchema); + }); +}); diff --git a/test/specs/absolute-root/parsed.js b/test/specs/external/parsed.ts similarity index 51% rename from test/specs/absolute-root/parsed.js rename to test/specs/external/parsed.ts index c5a664f1..982658ff 100644 --- a/test/specs/absolute-root/parsed.js +++ b/test/specs/external/parsed.ts @@ -1,80 +1,72 @@ export default { schema: { definitions: { - $ref: "definitions/definitions.json" + $ref: "definitions/definitions.json", }, - required: [ - "name" - ], + required: ["name"], type: "object", properties: { gender: { - enum: [ - "male", - "female" - ], - type: "string" + enum: ["male", "female"], + type: "string", }, age: { minimum: 0, - type: "integer" + type: "integer", }, name: { - $ref: "#/definitions/name" - } + $ref: "#/definitions/name", + }, }, - title: "Person" + title: "Person", }, definitions: { "required string": { - $ref: "required-string.yaml" + $ref: "required-string.yaml", }, string: { - $ref: "#/required%20string/type" + $ref: "#/required%20string/type", }, name: { - $ref: "../definitions/name.yaml" - } + $ref: "../definitions/name.yaml", + }, }, name: { - required: [ - "first", - "last" - ], + required: ["first", "last"], type: "object", properties: { middle: { minLength: { - $ref: "#/properties/first/minLength" + $ref: "#/properties/first/minLength", }, type: { - $ref: "#/properties/first/type" - } + $ref: "#/properties/first/type", + }, }, prefix: { minLength: 3, - $ref: "#/properties/last" + $ref: "#/properties/last", }, last: { - $ref: "./required-string.yaml" + $ref: "./required-string.yaml", }, suffix: { $ref: "#/properties/prefix", type: "string", - maxLength: 3 + maxLength: 3, }, first: { - $ref: "../definitions/definitions.json#/required string" - } + $ref: "../definitions/definitions.json#/required string", + }, }, - title: "name" + title: "name", }, requiredString: { minLength: 1, type: "string", - title: "required string" - } + title: "required string", + }, }; diff --git a/test/specs/http.spec.js b/test/specs/http.spec.js deleted file mode 100644 index ac30e611..00000000 --- a/test/specs/http.spec.js +++ /dev/null @@ -1,215 +0,0 @@ -import { host } from "@jsdevtools/host-environment"; -import chai from "chai"; -import $RefParser from "../../lib/index.js"; - -const { expect } = chai; - -const isWindows = /^win/.test(globalThis.process ? globalThis.process.platform : undefined); - -describe("HTTP options", () => { - let windowOnError, testDone; - - beforeEach(() => { - // Some browsers throw global errors on XHR errors - windowOnError = host.global.onerror; - host.global.onerror = function () { - testDone(); - return true; - }; - }); - - afterEach(() => { - host.global.onerror = windowOnError; - }); - - describe("http.headers", () => { - it("should override default HTTP headers", async () => { - if (isWindows) { - return; - } - - let parser = new $RefParser(); - - let schema = await parser.parse("https://httpbin.org/headers", { - resolve: { http: { headers: { - accept: "application/json" - }}} - }); - - expect(schema.headers).to.have.property("Accept", "application/json"); - }); - - // Old versions of IE don't allow setting custom headers - if (!(host.browser && host.browser.IE)) { - it("should set custom HTTP headers", async () => { - if (isWindows) { - return; - } - - let parser = new $RefParser(); - - let schema = await parser.parse("https://httpbin.org/headers", { - resolve: { http: { headers: { - "my-custom-header": "hello, world" - }}} - }); - - expect(schema.headers).to.have.property("My-Custom-Header", "hello, world"); - }); - } - }); - - // 2020-07-08 - The HTTPBin redirect endpoints are suddenly returning 404 errors. Not sure why 🤷‍♂️ - // TODO: Re-enable these tests once HTTPBin is working again - describe.skip("http.redirect", () => { - if (host.browser.safari && host.karma && host.karma.ci) { - // These tests fail in Safari when running on Sauce Labs (they pass when running on Safari locally). - // It gets an XHR error when trying to reach httpbin.org. - return; - } - - beforeEach(function () { - // Increase the timeout for these tests, to allow for multiple redirects - this.currentTest.timeout(30000); - this.currentTest.slow(3000); - }); - - it("should follow 5 redirects by default", async () => { - let parser = new $RefParser(); - - let schema = await parser.parse("https://httpbin.org/redirect/5"); - expect(schema.url).to.equal("https://httpbin.org/get"); - }); - - it("should not follow 6 redirects by default", async () => { - try { - let parser = new $RefParser(); - let schema = await parser.parse("https://httpbin.org/redirect/6"); - - if (host.node) { - throw new Error("All 6 redirects were followed. That should NOT have happened!"); - } - else { - // Some web browsers will automatically follow redirects. - // Nothing we can do about that. - expect(schema.url).to.equal("https://httpbin.org/get"); - } - } - catch (err) { - expect(err).to.be.an.instanceOf(Error); - expect(err.message).to.contain("Error downloading https://httpbin.org/redirect/6"); - if (host.node) { - expect(err.message).to.equal( - "Error downloading https://httpbin.org/redirect/6. \n" + - "Too many redirects: \n" + - " https://httpbin.org/redirect/6 \n" + - " https://httpbin.org/relative-redirect/5 \n" + - " https://httpbin.org/relative-redirect/4 \n" + - " https://httpbin.org/relative-redirect/3 \n" + - " https://httpbin.org/relative-redirect/2 \n" + - " https://httpbin.org/relative-redirect/1" - ); - } - } - }); - - it("should follow 10 redirects if http.redirects = 10", async () => { - let parser = new $RefParser(); - - let schema = await parser.parse("https://httpbin.org/redirect/10", { - resolve: { http: { redirects: 10 }} - }); - - expect(schema.url).to.equal("https://httpbin.org/get"); - }); - - it("should not follow any redirects if http.redirects = 0", async () => { - try { - let parser = new $RefParser(); - let schema = await parser.parse("https://httpbin.org/redirect/1", { - resolve: { http: { redirects: 0 }} - }); - - if (host.node) { - throw new Error("The redirect was followed. That should NOT have happened!"); - } - else { - // Some web browsers will automatically follow redirects. - // Nothing we can do about that. - expect(schema.url).to.equal("https://httpbin.org/get"); - } - } - catch (err) { - expect(err).to.be.an.instanceOf(Error); - expect(err.message).to.contain("Error downloading https://httpbin.org/redirect/1"); - if (host.node) { - expect(err.message).to.equal( - "Error downloading https://httpbin.org/redirect/1. \n" + - "Too many redirects: \n" + - " https://httpbin.org/redirect/1" - ); - } - } - }); - }); - - describe("http.withCredentials", () => { - if (isWindows) { - return; - } - - if (host.browser.IE && host.karma && host.karma.ci) { - // These tests often fail in Internet Explorer in CI/CD. Not sure why. They pass when run on IE locally. - return; - } - - it('should work by default with CORS "Access-Control-Allow-Origin: *"', async () => { - let parser = new $RefParser(); - - // Swagger.io has CORS enabled, with "Access-Control-Allow-Origin" set to a wildcard ("*"). - // This should work by-default. - let schema = await parser.parse("https://petstore.swagger.io/v2/swagger.json"); - - expect(schema).to.be.an("object"); - expect(schema).not.to.be.empty; // eslint-disable-line no-unused-expressions - expect(parser.schema).to.equal(schema); - }); - - it("should download successfully with http.withCredentials = false (default)", async () => { - let parser = new $RefParser(); - - // Swagger.io has CORS enabled, with "Access-Control-Allow-Origin" set to a wildcard ("*"). - // So, withCredentials MUST be false (this is the default, but we're testing it explicitly here) - let schema = await parser.parse("https://petstore.swagger.io/v2/swagger.json", { - resolve: { http: { withCredentials: false }} - }); - - expect(schema).to.be.an("object"); - expect(schema).not.to.be.empty; // eslint-disable-line no-unused-expressions - expect(parser.schema).to.equal(schema); - }); - - if (host.browser) { - it("should throw error in browser if http.withCredentials = true", async () => { - try { - let parser = new $RefParser(); - - // Swagger.io has CORS enabled, with "Access-Control-Allow-Origin" set to a wildcard ("*"). - // So, withCredentials MUST be false (this is the default, but we're testing it explicitly here) - let schema = await parser.parse("https://petstore.swagger.io/v2/swagger.json", { - resolve: { http: { withCredentials: true }} - }); - - // The request succeeded, which means this browser doesn't support CORS. - expect(schema).to.be.an("object"); - expect(schema).not.to.be.empty; // eslint-disable-line no-unused-expressions - expect(parser.schema).to.equal(schema); - } - catch (err) { - // The request failed, which is expected - expect(err.message).to.contain("Error downloading https://petstore.swagger.io/v2/swagger.json"); - } - }); - } - }); -}); diff --git a/test/specs/http.spec.ts b/test/specs/http.spec.ts new file mode 100644 index 00000000..e3d3fcb3 --- /dev/null +++ b/test/specs/http.spec.ts @@ -0,0 +1,201 @@ +import { describe, it, beforeEach } from "vitest"; +import $RefParser from "../../lib/index.js"; + +import { expect } from "vitest"; + +const isWindows = /^win/.test(globalThis.process ? globalThis.process.platform : ""); +const isBrowser = typeof window !== "undefined"; +describe("HTTP options", () => { + describe("http.headers", () => { + it("should override default HTTP headers", async () => { + if (isWindows || isBrowser) { + return; + } + + const parser = new $RefParser(); + + const schema = await parser.parse("https://httpbin.org/headers", { + resolve: { + http: { + headers: { + accept: "application/json", + }, + }, + }, + }); + + // @ts-expect-error TS(2339): Property 'headers' does not exist on type 'void & ... Remove this comment to see the full error message + expect(schema.headers).to.have.property("Accept", "application/json"); + }); + + // Old versions of IE don't allow setting custom headers + it("should set custom HTTP headers", async () => { + if (isWindows) { + return; + } + + const parser = new $RefParser(); + + const schema = await parser.parse("https://httpbin.org/headers", { + resolve: { + http: { + headers: { + "my-custom-header": "hello, world", + }, + }, + }, + }); + + // @ts-expect-error TS(2339): Property 'headers' does not exist on type 'void & ... Remove this comment to see the full error message + expect(schema.headers).to.have.property("My-Custom-Header", "hello, world"); + }); + }); + + // 2020-07-08 - The HTTPBin redirect endpoints are suddenly returning 404 errors. Not sure why 🤷‍♂️ + // TODO: Re-enable these tests once HTTPBin is working again + describe.skip("http.redirect", () => { + beforeEach(function (this: any) { + // Increase the timeout for these tests, to allow for multiple redirects + this.currentTest.timeout(30000); + this.currentTest.slow(3000); + }); + + it("should follow 5 redirects by default", async () => { + const parser = new $RefParser(); + + const schema = await parser.parse("https://httpbin.org/redirect/5"); + // @ts-expect-error TS(2339): Property 'url' does not exist on type 'JSONSchema'... Remove this comment to see the full error message + expect(schema.url).to.equal("https://httpbin.org/get"); + }); + + it("should not follow 6 redirects by default", async () => { + try { + const parser = new $RefParser(); + const schema = await parser.parse("https://httpbin.org/redirect/6"); + + if (typeof window === "undefined") { + throw new Error("All 6 redirects were followed. That should NOT have happened!"); + } else { + // Some web browsers will automatically follow redirects. + // Nothing we can do about that. + // @ts-expect-error TS(2339): Property 'url' does not exist on type 'JSONSchema'... Remove this comment to see the full error message + expect(schema.url).to.equal("https://httpbin.org/get"); + } + } catch (err) { + expect(err).to.be.an.instanceOf(Error); + // @ts-expect-error TS(2571): Object is of type 'unknown'. + expect(err.message).to.contain("Error downloading https://httpbin.org/redirect/6"); + if (typeof window === "undefined") { + // @ts-expect-error TS(2571): Object is of type 'unknown'. + expect(err.message).to.equal( + "Error downloading https://httpbin.org/redirect/6. \n" + + "Too many redirects: \n" + + " https://httpbin.org/redirect/6 \n" + + " https://httpbin.org/relative-redirect/5 \n" + + " https://httpbin.org/relative-redirect/4 \n" + + " https://httpbin.org/relative-redirect/3 \n" + + " https://httpbin.org/relative-redirect/2 \n" + + " https://httpbin.org/relative-redirect/1", + ); + } + } + }); + + it("should follow 10 redirects if http.redirects = 10", async () => { + const parser = new $RefParser(); + + const schema = await parser.parse("https://httpbin.org/redirect/10", { + resolve: { http: { redirects: 10 } }, + }); + + // @ts-expect-error TS(2339): Property 'url' does not exist on type 'void & Prom... Remove this comment to see the full error message + expect(schema.url).to.equal("https://httpbin.org/get"); + }); + + it("should not follow any redirects if http.redirects = 0", async () => { + try { + const parser = new $RefParser(); + + const schema = await parser.parse("https://httpbin.org/redirect/1", { + resolve: { http: { redirects: 0 } }, + }); + + if (typeof window === "undefined") { + throw new Error("The redirect was followed. That should NOT have happened!"); + } else { + // Some web browsers will automatically follow redirects. + // Nothing we can do about that. + // @ts-expect-error TS(2339): Property 'url' does not exist on type 'void & Prom... Remove this comment to see the full error message + expect(schema.url).to.equal("https://httpbin.org/get"); + } + } catch (err) { + expect(err).to.be.an.instanceOf(Error); + // @ts-expect-error TS(2571): Object is of type 'unknown'. + expect(err.message).to.contain("Error downloading https://httpbin.org/redirect/1"); + if (typeof window === "undefined") { + // @ts-expect-error TS(2571): Object is of type 'unknown'. + expect(err.message).to.equal( + "Error downloading https://httpbin.org/redirect/1. \n" + + "Too many redirects: \n" + + " https://httpbin.org/redirect/1", + ); + } + } + }); + }); + + if (!isWindows) { + describe("http.withCredentials", () => { + it('should work by default with CORS "Access-Control-Allow-Origin: *"', async () => { + const parser = new $RefParser(); + + // Swagger.io has CORS enabled, with "Access-Control-Allow-Origin" set to a wildcard ("*"). + // This should work by-default. + const schema = await parser.parse("https://petstore.swagger.io/v2/swagger.json"); + + expect(schema).to.be.an("object"); + expect(schema).not.to.be.empty; // eslint-disable-line no-unused-expressions + expect(parser.schema).to.equal(schema); + }); + + it("should download successfully with http.withCredentials = false (default)", async () => { + const parser = new $RefParser(); + + // Swagger.io has CORS enabled, with "Access-Control-Allow-Origin" set to a wildcard ("*"). + // So, withCredentials MUST be false (this is the default, but we're testing it explicitly here) + + const schema = await parser.parse("https://petstore.swagger.io/v2/swagger.json", { + resolve: { http: { withCredentials: false } }, + }); + + expect(schema).to.be.an("object"); + expect(schema).not.to.be.empty; // eslint-disable-line no-unused-expressions + expect(parser.schema).to.equal(schema); + }); + + if (isBrowser) { + it("should throw error in browser if http.withCredentials = true", async () => { + try { + const parser = new $RefParser(); + + // Swagger.io has CORS enabled, with "Access-Control-Allow-Origin" set to a wildcard ("*"). + // So, withCredentials MUST be false (this is the default, but we're testing it explicitly here) + + const schema = await parser.parse("https://petstore.swagger.io/v2/swagger.json", { + resolve: { http: { withCredentials: true } }, + }); + + // The request succeeded, which means this browser doesn't support CORS. + expect(schema).to.be.an("object"); + expect(schema).not.to.be.empty; // eslint-disable-line no-unused-expressions + expect(parser.schema).to.equal(schema); + } catch (err) { + // The request failed, which is expected + // @ts-expect-error TS(2571): Object is of type 'unknown'. + expect(err.message).to.contain("Error downloading https://petstore.swagger.io/v2/swagger.json"); + } + }); + } + }); + } +}); diff --git a/test/specs/internal/bundled.js b/test/specs/internal/bundled.ts similarity index 51% rename from test/specs/internal/bundled.js rename to test/specs/internal/bundled.ts index fa1f7e77..6fe2c3aa 100644 --- a/test/specs/internal/bundled.js +++ b/test/specs/internal/bundled.ts @@ -1,68 +1,60 @@ export default { definitions: { fragment: { - $id: "#fragment" + $id: "#fragment", }, requiredString: { title: "requiredString", minLength: 1, - type: "string" + type: "string", }, name: { - required: [ - "first", - "last" - ], + required: ["first", "last"], type: "object", properties: { first: { - $ref: "#/definitions/requiredString" + $ref: "#/definitions/requiredString", }, last: { - $ref: "#/definitions/requiredString" + $ref: "#/definitions/requiredString", }, middle: { type: { - $ref: "#/definitions/requiredString/type" + $ref: "#/definitions/requiredString/type", }, minLength: { - $ref: "#/definitions/requiredString/minLength" - } + $ref: "#/definitions/requiredString/minLength", + }, }, prefix: { $ref: "#/definitions/requiredString", - minLength: 3 + minLength: 3, }, suffix: { type: "string", $ref: "#/definitions/name/properties/prefix", - maxLength: 3 - } - } - } + maxLength: 3, + }, + }, + }, }, - required: [ - "name" - ], + required: ["name"], type: "object", properties: { fragment: { - $ref: "#fragment" + $ref: "#fragment", }, gender: { - enum: [ - "male", - "female" - ], - type: "string" + enum: ["male", "female"], + type: "string", }, age: { minimum: 0, - type: "integer" + type: "integer", }, name: { - $ref: "#/definitions/name" - } + $ref: "#/definitions/name", + }, }, - title: "Person" + title: "Person", }; diff --git a/test/specs/internal/dereferenced.js b/test/specs/internal/dereferenced.ts similarity index 66% rename from test/specs/internal/dereferenced.js rename to test/specs/internal/dereferenced.ts index 952338d8..6ac835d0 100644 --- a/test/specs/internal/dereferenced.js +++ b/test/specs/internal/dereferenced.ts @@ -1,101 +1,90 @@ export default { definitions: { fragment: { - $id: "#fragment" + $id: "#fragment", }, requiredString: { title: "requiredString", minLength: 1, - type: "string" + type: "string", }, name: { - required: [ - "first", - "last" - ], + required: ["first", "last"], type: "object", properties: { first: { title: "requiredString", type: "string", - minLength: 1 + minLength: 1, }, last: { title: "requiredString", type: "string", - minLength: 1 + minLength: 1, }, middle: { type: "string", - minLength: 1 + minLength: 1, }, prefix: { title: "requiredString", type: "string", - minLength: 3 + minLength: 3, }, suffix: { title: "requiredString", type: "string", minLength: 3, - maxLength: 3 - } - } - } + maxLength: 3, + }, + }, + }, }, - required: [ - "name" - ], + required: ["name"], type: "object", properties: { fragment: { - $ref: "#fragment" + $ref: "#fragment", }, gender: { - enum: [ - "male", - "female" - ], - type: "string" + enum: ["male", "female"], + type: "string", }, age: { minimum: 0, - type: "integer" + type: "integer", }, name: { - required: [ - "first", - "last" - ], + required: ["first", "last"], type: "object", properties: { first: { title: "requiredString", type: "string", - minLength: 1 + minLength: 1, }, last: { title: "requiredString", type: "string", - minLength: 1 + minLength: 1, }, middle: { type: "string", - minLength: 1 + minLength: 1, }, prefix: { title: "requiredString", type: "string", - minLength: 3 + minLength: 3, }, suffix: { title: "requiredString", type: "string", minLength: 3, - maxLength: 3 - } - } - } + maxLength: 3, + }, + }, + }, }, - title: "Person" + title: "Person", }; diff --git a/test/specs/internal/internal.spec.js b/test/specs/internal/internal.spec.ts similarity index 51% rename from test/specs/internal/internal.spec.js rename to test/specs/internal/internal.spec.ts index 3cf95b3a..73aa5876 100644 --- a/test/specs/internal/internal.spec.js +++ b/test/specs/internal/internal.spec.ts @@ -1,4 +1,4 @@ -import chai from "chai"; +import { describe, it } from "vitest"; import $RefParser from "../../../lib/index.js"; import helper from "../../utils/helper.js"; import path from "../../utils/path.js"; @@ -6,41 +6,52 @@ import parsedSchema from "./parsed.js"; import dereferencedSchema from "./dereferenced.js"; import bundledSchema from "./bundled.js"; -const { expect } = chai; +import { expect } from "vitest"; describe("Schema with internal $refs", () => { it("should parse successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.parse(path.rel("specs/internal/internal.yaml")); + const parser = new $RefParser(); + const schema = await parser.parse(path.rel("test/specs/internal/internal.yaml")); expect(schema).to.equal(parser.schema); expect(schema).to.deep.equal(parsedSchema); - expect(parser.$refs.paths()).to.deep.equal([path.abs("specs/internal/internal.yaml")]); + expect(parser.$refs.paths()).to.deep.equal([path.abs("test/specs/internal/internal.yaml")]); }); - it("should resolve successfully", helper.testResolve( - path.rel("specs/internal/internal.yaml"), - path.abs("specs/internal/internal.yaml"), parsedSchema - )); + it( + "should resolve successfully", + helper.testResolve( + path.rel("test/specs/internal/internal.yaml"), + path.abs("test/specs/internal/internal.yaml"), + // @ts-expect-error TS(2554): Expected 2 arguments, but got 3. + parsedSchema, + ), + ); it("should dereference successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.dereference(path.rel("specs/internal/internal.yaml")); + const parser = new $RefParser(); + const schema = await parser.dereference(path.rel("test/specs/internal/internal.yaml")); expect(schema).to.equal(parser.schema); expect(schema).to.deep.equal(dereferencedSchema); // Reference equality + // @ts-expect-error TS(2532): Object is possibly 'undefined'. expect(schema.properties.name).to.equal(schema.definitions.name); + // @ts-expect-error TS(2532): Object is possibly 'undefined'. expect(schema.definitions.requiredString) + // @ts-expect-error TS(2532): Object is possibly 'undefined'. .to.equal(schema.definitions.name.properties.first) + // @ts-expect-error TS(2532): Object is possibly 'undefined'. .to.equal(schema.definitions.name.properties.last) + // @ts-expect-error TS(2532): Object is possibly 'undefined'. .to.equal(schema.properties.name.properties.first) + // @ts-expect-error TS(2532): Object is possibly 'undefined'. .to.equal(schema.properties.name.properties.last); // The "circular" flag should NOT be set expect(parser.$refs.circular).to.equal(false); }); it("should bundle successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.bundle(path.rel("specs/internal/internal.yaml")); + const parser = new $RefParser(); + const schema = await parser.bundle(path.rel("test/specs/internal/internal.yaml")); expect(schema).to.equal(parser.schema); expect(schema).to.deep.equal(bundledSchema); }); diff --git a/test/specs/internal/parsed.js b/test/specs/internal/parsed.ts similarity index 56% rename from test/specs/internal/parsed.js rename to test/specs/internal/parsed.ts index 0f8ec8ef..b3cfb6fc 100644 --- a/test/specs/internal/parsed.js +++ b/test/specs/internal/parsed.ts @@ -1,68 +1,60 @@ export default { definitions: { fragment: { - $id: "#fragment" + $id: "#fragment", }, requiredString: { title: "requiredString", minLength: 1, - type: "string" + type: "string", }, name: { - required: [ - "first", - "last" - ], + required: ["first", "last"], type: "object", properties: { first: { - $ref: "#/definitions/requiredString" + $ref: "#/definitions/requiredString", }, last: { - $ref: "#/definitions/name/properties/first" + $ref: "#/definitions/name/properties/first", }, middle: { type: { - $ref: "#/definitions/name/properties/first/type" + $ref: "#/definitions/name/properties/first/type", }, minLength: { - $ref: "#/definitions/name/properties/last/minLength" - } + $ref: "#/definitions/name/properties/last/minLength", + }, }, prefix: { $ref: "#/definitions/name/properties/last", - minLength: 3 + minLength: 3, }, suffix: { type: "string", $ref: "#/definitions/name/properties/prefix", - maxLength: 3 - } - } - } + maxLength: 3, + }, + }, + }, }, - required: [ - "name" - ], + required: ["name"], type: "object", properties: { fragment: { - $ref: "#fragment" + $ref: "#fragment", }, gender: { - enum: [ - "male", - "female" - ], - type: "string" + enum: ["male", "female"], + type: "string", }, age: { minimum: 0, - type: "integer" + type: "integer", }, name: { - $ref: "#/definitions/name" - } + $ref: "#/definitions/name", + }, }, - title: "Person" + title: "Person", }; diff --git a/test/specs/invalid-pointers/invalid-pointers.js b/test/specs/invalid-pointers/invalid-pointers.js deleted file mode 100644 index f20224fa..00000000 --- a/test/specs/invalid-pointers/invalid-pointers.js +++ /dev/null @@ -1,42 +0,0 @@ -const chai = require("chai"); -const chaiSubset = require("chai-subset"); -chai.use(chaiSubset); -const { expect } = chai; -const $RefParser = require("../../../lib"); -const helper = require("../../utils/helper"); -const path = require("../../utils/path"); -const { JSONParserErrorGroup, InvalidPointerError } = require("../../../lib/util/errors"); - -describe("Schema with invalid pointers", () => { - it("should throw an error for an invalid pointer", async () => { - try { - await $RefParser.dereference(path.rel("specs/invalid-pointers/invalid.json")); - helper.shouldNotGetCalled(); - } - catch (err) { - expect(err).to.be.an.instanceOf(InvalidPointerError); - expect(err.message).to.contain("Invalid $ref pointer \"f\". Pointers must begin with \"#/\""); - } - }); - - it("should throw a grouped error for an invalid pointer if continueOnError is true", async () => { - const parser = new $RefParser(); - try { - await parser.dereference(path.rel("specs/invalid-pointers/invalid.json"), { continueOnError: true }); - helper.shouldNotGetCalled(); - } - catch (err) { - expect(err).to.be.instanceof(JSONParserErrorGroup); - expect(err.files).to.equal(parser); - expect(err.message).to.equal(`1 error occurred while reading '${path.abs("specs/invalid-pointers/invalid.json")}'`); - expect(err.errors).to.containSubset([ - { - name: InvalidPointerError.name, - message: "Invalid $ref pointer \"f\". Pointers must begin with \"#/\"", - path: ["foo"], - source: path.unixify(path.abs("specs/invalid-pointers/invalid.json")), - } - ]); - } - }); -}); diff --git a/test/specs/invalid-pointers/invalid-pointers.ts b/test/specs/invalid-pointers/invalid-pointers.ts new file mode 100644 index 00000000..283c1809 --- /dev/null +++ b/test/specs/invalid-pointers/invalid-pointers.ts @@ -0,0 +1,43 @@ +import { expect, describe, it } from "vitest"; +import $RefParser from "../../../lib"; +import helper from "../../utils/helper"; +import path from "../../utils/path"; +import { InvalidPointerError, JSONParserErrorGroup } from "../../../lib/util/errors"; + +describe("Schema with invalid pointers", () => { + it("should throw an error for an invalid pointer", async () => { + try { + await $RefParser.dereference(path.rel("test/specs/invalid-pointers/invalid.json")); + helper.shouldNotGetCalled(); + } catch (err) { + expect(err).to.be.an.instanceOf(InvalidPointerError); + // @ts-expect-error TS(2571): Object is of type 'unknown'. + expect(err.message).to.contain('Invalid $ref pointer "f". Pointers must begin with "#/"'); + } + }); + + it("should throw a grouped error for an invalid pointer if continueOnError is true", async () => { + const parser = new $RefParser(); + try { + await parser.dereference(path.rel("test/specs/invalid-pointers/invalid.json"), { continueOnError: true }); + helper.shouldNotGetCalled(); + } catch (err) { + expect(err).to.be.instanceof(JSONParserErrorGroup); + // @ts-expect-error TS(2571): Object is of type 'unknown'. + expect(err.files).to.equal(parser); + // @ts-expect-error TS(2571): Object is of type 'unknown'. + expect(err.message).to.equal( + `1 error occurred while reading '${path.abs("test/specs/invalid-pointers/invalid.json")}'`, + ); + // @ts-expect-error TS(2571): Object is of type 'unknown'. + expect(err.errors).to.containSubset([ + { + name: InvalidPointerError.name, + message: 'Invalid $ref pointer "f". Pointers must begin with "#/"', + path: ["foo"], + source: path.unixify(path.abs("test/specs/invalid-pointers/invalid.json")), + }, + ]); + } + }); +}); diff --git a/test/specs/invalid/invalid.spec.js b/test/specs/invalid/invalid.spec.ts similarity index 54% rename from test/specs/invalid/invalid.spec.js rename to test/specs/invalid/invalid.spec.ts index 98a85447..ec64ded6 100644 --- a/test/specs/invalid/invalid.spec.js +++ b/test/specs/invalid/invalid.spec.ts @@ -1,15 +1,13 @@ -import { host } from "@jsdevtools/host-environment"; -import chai from "chai"; -import chaiSubset from "chai-subset"; -chai.use(chaiSubset); -const { expect } = chai; +import { describe, it } from "vitest"; +import { expect } from "vitest"; import $RefParser from "../../../lib/index.js"; import helper from "../../utils/helper.js"; import path from "../../utils/path.js"; import { JSONParserErrorGroup, ParserError, ResolverError } from "../../../lib/util/errors.js"; +// @ts-expect-error TS(2345): Argument of type 'string | undefined' is not assig... Remove this comment to see the full error message const isWindows = /^win/.test(globalThis.process ? globalThis.process.platform : undefined); -const getPathFromOs = filePath => isWindows ? filePath.replace(/\\/g, "/") : filePath; +const getPathFromOs = (filePath: any) => (isWindows ? filePath.replace(/\\/g, "/") : filePath); describe("Invalid syntax", () => { describe("in main file", () => { @@ -17,11 +15,12 @@ describe("Invalid syntax", () => { try { await $RefParser.dereference("this file does not exist"); helper.shouldNotGetCalled(); - } - catch (err) { + } catch (err) { expect(err).to.be.an.instanceOf(ResolverError); - if (host.node) { + if (typeof window === "undefined") { + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.ioErrorCode).to.equal("ENOENT"); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.message).to.contain("Error opening file "); } } @@ -29,47 +28,52 @@ describe("Invalid syntax", () => { it("should throw an error for an invalid YAML file", async () => { try { - await $RefParser.dereference(path.rel("specs/invalid/invalid.yaml")); + await $RefParser.dereference(path.rel("test/specs/invalid/invalid.yaml")); helper.shouldNotGetCalled(); - } - catch (err) { + } catch (err) { expect(err).to.be.an.instanceOf(ParserError); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.message).to.contain("Error parsing "); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.message).to.contain("invalid/invalid.yaml"); } }); it("should throw an error for an invalid JSON file", async () => { try { - await $RefParser.dereference(path.rel("specs/invalid/invalid.json")); + await $RefParser.dereference(path.rel("test/specs/invalid/invalid.json")); helper.shouldNotGetCalled(); - } - catch (err) { + } catch (err) { expect(err).to.be.an.instanceOf(ParserError); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.message).to.contain("Error parsing "); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.message).to.contain("invalid/invalid.json"); } }); it("should throw an error for an invalid JSON file with YAML disabled", async () => { try { - await $RefParser.dereference(path.rel("specs/invalid/invalid.json"), { parse: { yaml: false }}); + await $RefParser.dereference(path.rel("test/specs/invalid/invalid.json"), { parse: { yaml: false } }); helper.shouldNotGetCalled(); - } - catch (err) { + } catch (err) { expect(err).to.be.an.instanceOf(ParserError); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.message).to.contain("Error parsing "); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.message).to.contain("invalid/invalid.json"); } }); it("should throw an error for an invalid YAML file with JSON and YAML disabled", async () => { try { - await $RefParser.dereference(path.rel("specs/invalid/invalid.yaml"), { parse: { yaml: false, json: false }}); + await $RefParser.dereference(path.rel("test/specs/invalid/invalid.yaml"), { + parse: { yaml: false, json: false }, + }); helper.shouldNotGetCalled(); - } - catch (err) { + } catch (err) { expect(err).to.be.an.instanceOf(SyntaxError); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.message).to.contain('invalid/invalid.yaml" is not a valid JSON Schema'); } }); @@ -80,20 +84,25 @@ describe("Invalid syntax", () => { try { await parser.dereference("this file does not exist", { continueOnError: true }); helper.shouldNotGetCalled(); - } - catch (err) { + } catch (err) { expect(err).to.be.instanceof(JSONParserErrorGroup); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.files).to.equal(parser); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.message).to.have.string("1 error occurred while reading '"); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.message).to.have.string("this file does not exist'"); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.errors.length).to.equal(1); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.errors).to.containSubset([ { name: ResolverError.name, - message: message => message.startsWith("Error opening file") || message.endsWith("HTTP ERROR 404"), + message: (message: any) => message.startsWith("Error opening file") || message.endsWith("HTTP ERROR 404"), path: [], - source: message => message.endsWith("this file does not exist") || message.startsWith("http://localhost"), - } + source: (message: any) => + message.endsWith("this file does not exist") || message.startsWith("http://localhost"), + }, ]); } }); @@ -101,22 +110,28 @@ describe("Invalid syntax", () => { it("should throw a grouped error for an invalid YAML file", async () => { const parser = new $RefParser(); try { - await parser.dereference(path.rel("specs/invalid/invalid.yaml"), { continueOnError: true }); + await parser.dereference(path.rel("test/specs/invalid/invalid.yaml"), { continueOnError: true }); helper.shouldNotGetCalled(); - } - catch (err) { + } catch (err) { expect(err).to.be.instanceof(JSONParserErrorGroup); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.files).to.equal(parser); - expect(getPathFromOs(err.message)).to.equal(`1 error occurred while reading '${path.abs("specs/invalid/invalid.yaml")}'`); + // @ts-expect-error TS(2571): Object is of type 'unknown'. + expect(getPathFromOs(err.message)).to.equal( + `1 error occurred while reading '${path.abs("test/specs/invalid/invalid.yaml")}'`, + ); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.errors.length).to.equal(1); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.errors).to.containSubset([ { name: ParserError.name, - message: message => ( - message.includes("invalid.yaml: incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line (1:1)") - ), + message: (message: any) => + message.includes( + "invalid.yaml: incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line (1:1)", + ), path: [], - source: message => message.endsWith("test/specs/invalid/invalid.yaml"), + source: (message: any) => message.endsWith("test/specs/invalid/invalid.yaml"), }, ]); } @@ -125,23 +140,27 @@ describe("Invalid syntax", () => { it("should throw a grouped error for an invalid JSON file", async () => { const parser = new $RefParser(); try { - await parser.dereference(path.rel("specs/invalid/invalid.json"), { continueOnError: true }); + await parser.dereference(path.rel("test/specs/invalid/invalid.json"), { continueOnError: true }); helper.shouldNotGetCalled(); - } - catch (err) { + } catch (err) { expect(err).to.be.instanceof(JSONParserErrorGroup); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.files).to.equal(parser); - expect(getPathFromOs(err.message)).to.equal(`1 error occurred while reading '${path.abs("specs/invalid/invalid.json")}'`); + // @ts-expect-error TS(2571): Object is of type 'unknown'. + expect(getPathFromOs(err.message)).to.equal( + `1 error occurred while reading '${path.abs("test/specs/invalid/invalid.json")}'`, + ); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.errors.length).to.equal(1); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.errors).to.containSubset([ { name: ParserError.name, - message: message => ( - message.includes("invalid.json: unexpected end of the stream within a flow collection (2:1)") - ), + message: (message: any) => + message.includes("invalid.json: unexpected end of the stream within a flow collection (2:1)"), path: [], - source: message => message.endsWith("test/specs/invalid/invalid.json"), - } + source: (message: any) => message.endsWith("test/specs/invalid/invalid.json"), + }, ]); } }); @@ -149,36 +168,47 @@ describe("Invalid syntax", () => { it("should throw a grouped error for an invalid JSON file with YAML disabled", async () => { const parser = new $RefParser(); try { - await parser.dereference(path.rel("specs/invalid/invalid.json"), { continueOnError: true, parse: { yaml: false }}); + await parser.dereference(path.rel("test/specs/invalid/invalid.json"), { + continueOnError: true, + parse: { yaml: false }, + }); helper.shouldNotGetCalled(); - } - catch (err) { + } catch (err) { expect(err).to.be.instanceof(JSONParserErrorGroup); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.files).to.equal(parser); - expect(getPathFromOs(err.message)).to.equal(`1 error occurred while reading '${path.abs("specs/invalid/invalid.json")}'`); + // @ts-expect-error TS(2571): Object is of type 'unknown'. + expect(getPathFromOs(err.message)).to.equal( + `1 error occurred while reading '${path.abs("test/specs/invalid/invalid.json")}'`, + ); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.errors.length).to.equal(1); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.errors).to.containSubset([ { name: ParserError.name, - message: message => ( + message: (message: any) => message.includes("invalid.json: Unexpected end of JSON input") || message.includes("invalid.json: Expected property name or '}' in JSON") || - message.includes("invalid.json: JSON.parse: end of data while reading object contents") || // Firefox - message.includes("invalid.json: JSON Parse error: Expected '}'") || // Safari - message.includes("invalid.json: JSON.parse Error: Invalid character") || // Edge - message.includes("invalid.json: Syntax error") || // IE - message.includes("invalid.json: Expected property name or '}' in JSON") // Chrome - ), + message.includes("invalid.json: JSON.parse: end of data while reading object contents") || // Firefox + message.includes("invalid.json: JSON Parse error: Expected '}'") || // Safari + message.includes("invalid.json: JSON.parse Error: Invalid character") || // Edge + message.includes("invalid.json: Syntax error") || // IE + message.includes("invalid.json: Expected property name or '}' in JSON"), // Chrome path: [], - source: message => message.endsWith("test/specs/invalid/invalid.json"), - } + source: (message: any) => message.endsWith("test/specs/invalid/invalid.json"), + }, ]); } }); it("should not throw an error for an invalid YAML file with JSON and YAML disabled", async () => { const parser = new $RefParser(); - const result = await parser.dereference(path.rel("specs/invalid/invalid.yaml"), { continueOnError: true, parse: { yaml: false, json: false }}); + + const result = await parser.dereference(path.rel("test/specs/invalid/invalid.yaml"), { + continueOnError: true, + parse: { yaml: false, json: false }, + }); expect(result).to.equal(null); }); }); @@ -187,51 +217,59 @@ describe("Invalid syntax", () => { describe("in referenced files", () => { it("should throw an error for an invalid YAML file", async () => { try { - await $RefParser.dereference({ foo: { $ref: path.rel("specs/invalid/invalid.yaml") }}); + await $RefParser.dereference({ foo: { $ref: path.rel("test/specs/invalid/invalid.yaml") } }); helper.shouldNotGetCalled(); - } - catch (err) { + } catch (err) { expect(err).to.be.an.instanceOf(ParserError); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.message).to.contain("Error parsing "); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.message).to.contain("invalid/invalid.yaml"); } }); it("should throw an error for an invalid JSON file", async () => { try { - await $RefParser.dereference({ foo: { $ref: path.rel("specs/invalid/invalid.json") }}); + await $RefParser.dereference({ foo: { $ref: path.rel("test/specs/invalid/invalid.json") } }); helper.shouldNotGetCalled(); - } - catch (err) { + } catch (err) { expect(err).to.be.an.instanceOf(ParserError); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.message).to.contain("Error parsing "); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.message).to.contain("invalid/invalid.json"); } }); it("should throw an error for an invalid JSON file with YAML disabled", async () => { try { - await $RefParser.dereference({ foo: { $ref: path.rel("specs/invalid/invalid.json") }}, { - parse: { yaml: false } - }); + await $RefParser.dereference( + { foo: { $ref: path.rel("test/specs/invalid/invalid.json") } }, + { + parse: { yaml: false }, + }, + ); helper.shouldNotGetCalled(); - } - catch (err) { + } catch (err) { expect(err).to.be.an.instanceOf(ParserError); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.message).to.contain("Error parsing "); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.message).to.contain("invalid/invalid.json"); } }); it("should throw a grouped error for an invalid YAML file with JSON and YAML disabled", async () => { - const schema = await $RefParser - .dereference({ foo: { $ref: path.rel("specs/invalid/invalid.yaml") }}, { - parse: { yaml: false, json: false } - }); + const schema = await $RefParser.dereference( + { foo: { $ref: path.rel("test/specs/invalid/invalid.yaml") } }, + { + parse: { yaml: false, json: false }, + }, + ); // Because the JSON and YAML parsers were disabled, the invalid YAML file got parsed as plain text expect(schema).to.deep.equal({ - foo: ":\n" + foo: ":\n", }); }); @@ -239,20 +277,23 @@ describe("Invalid syntax", () => { it("should throw a grouped error for an invalid file path", async () => { try { const parser = new $RefParser(); - await parser.dereference({ foo: { $ref: "this file does not exist" }}, { continueOnError: true }); + + await parser.dereference({ foo: { $ref: "this file does not exist" } }, { continueOnError: true }); helper.shouldNotGetCalled(); - } - catch (err) { + } catch (err) { expect(err).to.be.instanceof(JSONParserErrorGroup); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.files.$refs._root$Ref.value).to.deep.equal({ foo: null }); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.errors.length).to.equal(1); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.errors).to.containSubset([ { name: ResolverError.name, - message: message => message.startsWith("Error opening file") || message.endsWith("HTTP ERROR 404"), + message: (message: any) => message.startsWith("Error opening file") || message.endsWith("HTTP ERROR 404"), path: ["foo"], // source: message => message.endsWith("/test/") || message.startsWith("http://localhost"), - } + }, ]); } }); @@ -260,19 +301,26 @@ describe("Invalid syntax", () => { it("should throw a grouped error for an invalid YAML file", async () => { try { const parser = new $RefParser(); - await parser.dereference({ foo: { $ref: path.rel("specs/invalid/invalid.yaml") }}, { continueOnError: true }); + + await parser.dereference( + { foo: { $ref: path.rel("test/specs/invalid/invalid.yaml") } }, + { continueOnError: true }, + ); helper.shouldNotGetCalled(); - } - catch (err) { + } catch (err) { expect(err).to.be.instanceof(JSONParserErrorGroup); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.files.$refs._root$Ref.value).to.deep.equal({ foo: null }); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.errors.length).to.equal(1); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.errors).to.containSubset([ { name: ParserError.name, - message: message => ( - message.includes("invalid.yaml: incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line (1:1)") - ), + message: (message: any) => + message.includes( + "invalid.yaml: incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line (1:1)", + ), path: ["foo"], // source: message => message.endsWith("/test/") || message.startsWith("http://localhost"), }, @@ -283,22 +331,27 @@ describe("Invalid syntax", () => { it("should throw a grouped error for an invalid JSON file", async () => { try { const parser = new $RefParser(); - await parser.dereference({ foo: { $ref: path.rel("specs/invalid/invalid.json") }}, { continueOnError: true }); + + await parser.dereference( + { foo: { $ref: path.rel("test/specs/invalid/invalid.json") } }, + { continueOnError: true }, + ); helper.shouldNotGetCalled(); - } - catch (err) { + } catch (err) { expect(err).to.be.instanceof(JSONParserErrorGroup); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.files.$refs._root$Ref.value).to.deep.equal({ foo: null }); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.errors.length).to.equal(1); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.errors).to.containSubset([ { name: ParserError.name, - message: message => ( - message.includes("invalid.json: unexpected end of the stream within a flow collection (2:1)") - ), + message: (message: any) => + message.includes("invalid.json: unexpected end of the stream within a flow collection (2:1)"), path: ["foo"], // source: message => message.endsWith("/test/") || message.startsWith("http://localhost"), - } + }, ]); } }); @@ -306,35 +359,44 @@ describe("Invalid syntax", () => { it("should throw a grouped error for an invalid JSON file with YAML disabled", async () => { try { const parser = new $RefParser(); - await parser.dereference({ foo: { $ref: path.rel("specs/invalid/invalid.json") }}, { continueOnError: true, parse: { yaml: false }}); + + await parser.dereference( + { foo: { $ref: path.rel("test/specs/invalid/invalid.json") } }, + { continueOnError: true, parse: { yaml: false } }, + ); helper.shouldNotGetCalled(); - } - catch (err) { + } catch (err) { expect(err).to.be.instanceof(JSONParserErrorGroup); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.files.$refs._root$Ref.value).to.deep.equal({ foo: null }); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.errors.length).to.equal(1); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.errors).to.containSubset([ { name: ParserError.name, - message: message => ( + message: (message: any) => message.includes("invalid.json: Unexpected end of JSON input") || message.includes("invalid.json: Expected property name or '}' in JSON") || - message.includes("invalid.json: JSON.parse: end of data while reading object contents") || // Firefox - message.includes("invalid.json: JSON Parse error: Expected '}'") || // Safari - message.includes("invalid.json: JSON.parse Error: Invalid character") || // Edge - message.includes("invalid.json: Syntax error") || // IE - message.includes("invalid.json: Expected property name or '}' in JSON") // Chrome - ), + message.includes("invalid.json: JSON.parse: end of data while reading object contents") || // Firefox + message.includes("invalid.json: JSON Parse error: Expected '}'") || // Safari + message.includes("invalid.json: JSON.parse Error: Invalid character") || // Edge + message.includes("invalid.json: Syntax error") || // IE + message.includes("invalid.json: Expected property name or '}' in JSON"), // Chrome path: ["foo"], // source: message => message.endsWith("/test/") || message.startsWith("http://localhost"), - } + }, ]); } }); it("should not throw an error for an invalid YAML file with JSON and YAML disabled", async () => { const parser = new $RefParser(); - const result = await parser.dereference({ foo: { $ref: path.rel("specs/invalid/invalid.yaml") }}, { continueOnError: true, parse: { yaml: false, json: false }}); + + const result = await parser.dereference( + { foo: { $ref: path.rel("test/specs/invalid/invalid.yaml") } }, + { continueOnError: true, parse: { yaml: false, json: false } }, + ); expect(result).to.deep.equal({ foo: ":\n" }); }); }); diff --git a/test/specs/missing-pointers/external-from-internal.yaml b/test/specs/missing-pointers/external-from-internal.yaml index e274abf4..855fd49f 100644 --- a/test/specs/missing-pointers/external-from-internal.yaml +++ b/test/specs/missing-pointers/external-from-internal.yaml @@ -1,5 +1,4 @@ internal1: - $ref: '#/internal2' + $ref: "#/internal2" internal2: - $ref: '#/external' - + $ref: "#/external" diff --git a/test/specs/missing-pointers/missing-pointers.spec.js b/test/specs/missing-pointers/missing-pointers.spec.ts similarity index 52% rename from test/specs/missing-pointers/missing-pointers.spec.js rename to test/specs/missing-pointers/missing-pointers.spec.ts index f8f2d822..12b8dd9c 100644 --- a/test/specs/missing-pointers/missing-pointers.spec.js +++ b/test/specs/missing-pointers/missing-pointers.spec.ts @@ -1,7 +1,5 @@ -import chai from "chai"; -import chaiSubset from "chai-subset"; -chai.use(chaiSubset); -const { expect } = chai; +import { describe, it } from "vitest"; +import { expect } from "vitest"; import $RefParser from "../../../lib/index.js"; import { JSONParserErrorGroup, MissingPointerError } from "../../../lib/util/errors.js"; import helper from "../../utils/helper.js"; @@ -10,45 +8,50 @@ import path from "../../utils/path.js"; describe("Schema with missing pointers", () => { it("should throw an error for missing pointer", async () => { try { - await $RefParser.dereference({ foo: { $ref: "#/baz" }}); + await $RefParser.dereference({ foo: { $ref: "#/baz" } }); helper.shouldNotGetCalled(); - } - catch (err) { + } catch (err) { expect(err).to.be.an.instanceOf(MissingPointerError); - expect(err.message).to.contain("Token \"baz\" does not exist."); + // @ts-expect-error TS(2571): Object is of type 'unknown'. + expect(err.message).to.contain('Token "baz" does not exist.'); } }); it("should throw an error for missing pointer in external file", async () => { try { - await $RefParser.dereference({ foo: { $ref: path.abs("specs/missing-pointers/external-from-internal.yaml") }}); + await $RefParser.dereference({ + foo: { $ref: path.abs("test/specs/missing-pointers/external-from-internal.yaml") }, + }); helper.shouldNotGetCalled(); - } - catch (err) { + } catch (err) { expect(err).to.be.an.instanceOf(MissingPointerError); - expect(err.message).to.contain("Token \"external\" does not exist."); + // @ts-expect-error TS(2571): Object is of type 'unknown'. + expect(err.message).to.contain('Token "external" does not exist.'); } }); - context("when continueOnError is true", () => { + describe("when continueOnError is true", () => { it("should throw a grouped error for missing pointer", async () => { const parser = new $RefParser(); try { - await parser.dereference({ foo: { $ref: "#/baz" }}, { continueOnError: true }); + await parser.dereference({ foo: { $ref: "#/baz" } }, { continueOnError: true }); helper.shouldNotGetCalled(); - } - catch (err) { + } catch (err) { expect(err).to.be.instanceof(JSONParserErrorGroup); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.files).to.equal(parser); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.files.$refs._root$Ref.value).to.deep.equal({ foo: null }); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.message).to.have.string("1 error occurred while reading '"); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.errors).to.containSubset([ { name: MissingPointerError.name, - message: "Token \"baz\" does not exist.", + message: 'Token "baz" does not exist.', path: ["foo"], // source: message => message.endsWith("/test/") || message.startsWith("http://localhost"), - } + }, ]); } }); @@ -56,26 +59,34 @@ describe("Schema with missing pointers", () => { it("should throw an error for missing pointer in external file", async () => { const parser = new $RefParser(); try { - await parser.dereference({ foo: { $ref: path.abs("specs/missing-pointers/external-from-internal.yaml") }}, { continueOnError: true }); + await parser.dereference( + { foo: { $ref: path.abs("test/specs/missing-pointers/external-from-internal.yaml") } }, + { continueOnError: true }, + ); helper.shouldNotGetCalled(); - } - catch (err) { + } catch (err) { expect(err).to.be.instanceof(JSONParserErrorGroup); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.files).to.equal(parser); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.files.$refs._root$Ref.value).to.deep.equal({ foo: { internal1: null, internal2: null, - } + }, }); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.message).to.have.string("1 error occurred while reading '"); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.errors).to.containSubset([ { name: MissingPointerError.name, - message: "Token \"external\" does not exist.", + message: 'Token "external" does not exist.', path: ["internal2"], - source: message => message.endsWith("missing-pointers/external-from-internal.yaml") || message.startsWith("http://localhost"), - } + source: (message: any) => + message.endsWith("missing-pointers/external-from-internal.yaml") || + message.startsWith("http://localhost"), + }, ]); } }); diff --git a/test/specs/no-refs/no-refs.spec.js b/test/specs/no-refs/no-refs.spec.ts similarity index 50% rename from test/specs/no-refs/no-refs.spec.js rename to test/specs/no-refs/no-refs.spec.ts index 21055a64..f941b4a5 100644 --- a/test/specs/no-refs/no-refs.spec.js +++ b/test/specs/no-refs/no-refs.spec.ts @@ -1,28 +1,33 @@ -import chai from "chai"; +import { describe, it } from "vitest"; import $RefParser from "../../../lib/index.js"; import helper from "../../utils/helper.js"; import path from "../../utils/path.js"; import parsedSchema from "./parsed.js"; -const { expect } = chai; +import { expect } from "vitest"; describe("Schema without any $refs", () => { it("should parse successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.parse(path.rel("specs/no-refs/no-refs.yaml")); + const parser = new $RefParser(); + const schema = await parser.parse(path.rel("test/specs/no-refs/no-refs.yaml")); expect(schema).to.equal(parser.schema); expect(schema).to.deep.equal(parsedSchema); - expect(parser.$refs.paths()).to.deep.equal([path.abs("specs/no-refs/no-refs.yaml")]); + expect(parser.$refs.paths()).to.deep.equal([path.abs("test/specs/no-refs/no-refs.yaml")]); }); - it("should resolve successfully", helper.testResolve( - path.rel("specs/no-refs/no-refs.yaml"), - path.abs("specs/no-refs/no-refs.yaml"), parsedSchema - )); + it( + "should resolve successfully", + // @ts-expect-error TS(2554): Expected 2 arguments, but got 3. + helper.testResolve( + path.rel("test/specs/no-refs/no-refs.yaml"), + path.abs("test/specs/no-refs/no-refs.yaml"), + parsedSchema, + ), + ); it("should dereference successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.dereference(path.rel("specs/no-refs/no-refs.yaml")); + const parser = new $RefParser(); + const schema = await parser.dereference(path.rel("test/specs/no-refs/no-refs.yaml")); expect(schema).to.equal(parser.schema); expect(schema).to.deep.equal(parsedSchema); // The "circular" flag should NOT be set @@ -30,8 +35,8 @@ describe("Schema without any $refs", () => { }); it("should bundle successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.bundle(path.rel("specs/no-refs/no-refs.yaml")); + const parser = new $RefParser(); + const schema = await parser.bundle(path.rel("test/specs/no-refs/no-refs.yaml")); expect(schema).to.equal(parser.schema); expect(schema).to.deep.equal(parsedSchema); }); diff --git a/test/specs/no-refs/parsed.js b/test/specs/no-refs/parsed.js deleted file mode 100644 index 433d314d..00000000 --- a/test/specs/no-refs/parsed.js +++ /dev/null @@ -1,40 +0,0 @@ -export default { - required: [ - "name" - ], - type: "object", - properties: { - gender: { - enum: [ - "male", - "female" - ], - type: "string" - }, - age: { - minimum: 0, - type: "integer" - }, - name: { - required: [ - "first", - "last" - ], - type: "object", - properties: { - middle: { - type: "string" - }, - last: { - minLength: 1, - type: "string" - }, - first: { - minLength: 1, - type: "string" - } - } - } - }, - title: "Person" -}; diff --git a/test/specs/no-refs/parsed.ts b/test/specs/no-refs/parsed.ts new file mode 100644 index 00000000..a99d2b76 --- /dev/null +++ b/test/specs/no-refs/parsed.ts @@ -0,0 +1,32 @@ +export default { + required: ["name"], + type: "object", + properties: { + gender: { + enum: ["male", "female"], + type: "string", + }, + age: { + minimum: 0, + type: "integer", + }, + name: { + required: ["first", "last"], + type: "object", + properties: { + middle: { + type: "string", + }, + last: { + minLength: 1, + type: "string", + }, + first: { + minLength: 1, + type: "string", + }, + }, + }, + }, + title: "Person", +}; diff --git a/test/specs/object-source-with-path/bundled.js b/test/specs/object-source-with-path/bundled.ts similarity index 54% rename from test/specs/object-source-with-path/bundled.js rename to test/specs/object-source-with-path/bundled.ts index 7dcee054..4dc46a6d 100644 --- a/test/specs/object-source-with-path/bundled.js +++ b/test/specs/object-source-with-path/bundled.ts @@ -1,66 +1,58 @@ export default { title: "Person", type: "object", - required: [ - "name" - ], + required: ["name"], properties: { name: { - $ref: "#/definitions/name" + $ref: "#/definitions/name", }, age: { type: "integer", - minimum: 0 + minimum: 0, }, gender: { type: "string", - enum: [ - "male", - "female" - ] - } + enum: ["male", "female"], + }, }, definitions: { requiredString: { title: "requiredString", type: "string", - minLength: 1 + minLength: 1, }, string: { - $ref: "#/definitions/requiredString/type" + $ref: "#/definitions/requiredString/type", }, name: { title: "name", type: "object", - required: [ - "first", - "last" - ], + required: ["first", "last"], properties: { first: { - $ref: "#/definitions/requiredString" + $ref: "#/definitions/requiredString", }, last: { - $ref: "#/definitions/requiredString" + $ref: "#/definitions/requiredString", }, middle: { type: { - $ref: "#/definitions/requiredString/type" + $ref: "#/definitions/requiredString/type", }, minLength: { - $ref: "#/definitions/requiredString/minLength" - } + $ref: "#/definitions/requiredString/minLength", + }, }, prefix: { $ref: "#/definitions/requiredString", - minLength: 3 + minLength: 3, }, suffix: { $ref: "#/definitions/name/properties/prefix", type: "string", - maxLength: 3 - } - } - } - } + maxLength: 3, + }, + }, + }, + }, }; diff --git a/test/specs/object-source-with-path/dereferenced.js b/test/specs/object-source-with-path/dereferenced.ts similarity index 71% rename from test/specs/object-source-with-path/dereferenced.js rename to test/specs/object-source-with-path/dereferenced.ts index 3b9c8a43..56bb8248 100644 --- a/test/specs/object-source-with-path/dereferenced.js +++ b/test/specs/object-source-with-path/dereferenced.ts @@ -1,98 +1,87 @@ export default { title: "Person", type: "object", - required: [ - "name" - ], + required: ["name"], properties: { name: { title: "name", type: "object", - required: [ - "first", - "last" - ], + required: ["first", "last"], properties: { first: { title: "requiredString", type: "string", - minLength: 1 + minLength: 1, }, last: { title: "requiredString", type: "string", - minLength: 1 + minLength: 1, }, middle: { type: "string", - minLength: 1 + minLength: 1, }, prefix: { title: "requiredString", type: "string", - minLength: 3 + minLength: 3, }, suffix: { title: "requiredString", type: "string", minLength: 3, - maxLength: 3 - } - } + maxLength: 3, + }, + }, }, age: { type: "integer", - minimum: 0 + minimum: 0, }, gender: { type: "string", - enum: [ - "male", - "female" - ] - } + enum: ["male", "female"], + }, }, definitions: { requiredString: { title: "requiredString", type: "string", - minLength: 1 + minLength: 1, }, string: "string", name: { title: "name", type: "object", - required: [ - "first", - "last" - ], + required: ["first", "last"], properties: { first: { title: "requiredString", type: "string", - minLength: 1 + minLength: 1, }, last: { title: "requiredString", type: "string", - minLength: 1 + minLength: 1, }, middle: { type: "string", - minLength: 1 + minLength: 1, }, prefix: { title: "requiredString", type: "string", - minLength: 3 + minLength: 3, }, suffix: { title: "requiredString", type: "string", minLength: 3, - maxLength: 3 - } - } - } - } + maxLength: 3, + }, + }, + }, + }, }; diff --git a/test/specs/object-source-with-path/object-source-with-path.spec.js b/test/specs/object-source-with-path/object-source-with-path.spec.ts similarity index 53% rename from test/specs/object-source-with-path/object-source-with-path.spec.js rename to test/specs/object-source-with-path/object-source-with-path.spec.ts index d30c9539..95f043cd 100644 --- a/test/specs/object-source-with-path/object-source-with-path.spec.js +++ b/test/specs/object-source-with-path/object-source-with-path.spec.ts @@ -1,4 +1,4 @@ -import chai from "chai"; +import { describe, it } from "vitest"; import $RefParser from "../../../lib/index.js"; import helper from "../../utils/helper.js"; import path from "../../utils/path.js"; @@ -8,85 +8,99 @@ import parsedSchema from "./parsed.js"; import dereferencedSchema from "./dereferenced.js"; import bundledSchema from "./bundled.js"; -const { expect } = chai; +import { expect } from "vitest"; +import type { JSONSchema } from "../../../lib/types"; describe("Object sources with file paths", () => { it("should dereference a single object", async () => { - let parser = new $RefParser(); + const parser = new $RefParser(); const schema = await parser.dereference( // This file doesn't actually need to exist. But its path will be used to resolve external $refs path.abs("path/that/does/not/exist.yaml"), // This schema object does not contain any external $refs helper.cloneDeep(internalRefsParsedSchema), // An options object MUST be passed (even if it's empty) - {}); + {}, + ); expect(schema).to.equal(parser.schema); expect(schema).to.deep.equal(internalRefsDereferencedSchema); // The schema path should match the one we pass-in - let expectedPaths = [ - path.abs("path/that/does/not/exist.yaml") - ]; + const expectedPaths = [path.abs("path/that/does/not/exist.yaml")]; expect(parser.$refs.paths()).to.have.same.members(expectedPaths); expect(parser.$refs.values()).to.have.keys(expectedPaths); // Reference equality + // @ts-expect-error TS(2339): Property 'properties' does not exist on type 'void... Remove this comment to see the full error message expect(schema.properties.name).to.equal(schema.definitions.name); + // @ts-expect-error TS(2339): Property 'definitions' does not exist on type 'voi... Remove this comment to see the full error message expect(schema.definitions.requiredString) + // @ts-expect-error TS(2339): Property 'definitions' does not exist on type 'voi... Remove this comment to see the full error message .to.equal(schema.definitions.name.properties.first) + // @ts-expect-error TS(2339): Property 'definitions' does not exist on type 'voi... Remove this comment to see the full error message .to.equal(schema.definitions.name.properties.last) + // @ts-expect-error TS(2339): Property 'properties' does not exist on type 'void... Remove this comment to see the full error message .to.equal(schema.properties.name.properties.first) + // @ts-expect-error TS(2339): Property 'properties' does not exist on type 'void... Remove this comment to see the full error message .to.equal(schema.properties.name.properties.last); }); it("should dereference an object that references external files", async () => { - let parser = new $RefParser(); + const parser = new $RefParser(); const schema = await parser.dereference( // This file doesn't actually need to exist. But its path will be used to resolve external $refs - path.abs("specs/object-source-with-path/schema-file-that-does-not-exist.yaml"), + path.abs("test/specs/object-source-with-path/schema-file-that-does-not-exist.yaml"), // This schema object contains external $refs - helper.cloneDeep(parsedSchema.schema), + helper.cloneDeep(parsedSchema.schema) as JSONSchema, // An options object MUST be passed (even if it's empty) - {}); + {}, + ); expect(schema).to.equal(parser.schema); expect(schema).to.deep.equal(dereferencedSchema); // The schema path should match the one we passed-in. // All other paths should be the actual paths of referenced files. - let expectedPaths = [ - path.abs("specs/object-source-with-path/schema-file-that-does-not-exist.yaml"), - path.abs("specs/object-source-with-path/definitions/definitions.json"), - path.abs("specs/object-source-with-path/definitions/name.yaml"), - path.abs("specs/object-source-with-path/definitions/required-string.yaml") + const expectedPaths = [ + path.abs("test/specs/object-source-with-path/schema-file-that-does-not-exist.yaml"), + path.abs("test/specs/object-source-with-path/definitions/definitions.json"), + path.abs("test/specs/object-source-with-path/definitions/name.yaml"), + path.abs("test/specs/object-source-with-path/definitions/required-string.yaml"), ]; expect(parser.$refs.paths()).to.have.same.members(expectedPaths); expect(parser.$refs.values()).to.have.keys(expectedPaths); // Reference equality + // @ts-expect-error TS(2339): Property 'properties' does not exist on type 'void... Remove this comment to see the full error message expect(schema.properties.name).to.equal(schema.definitions.name); + // @ts-expect-error TS(2339): Property 'definitions' does not exist on type 'voi... Remove this comment to see the full error message expect(schema.definitions.requiredString) + // @ts-expect-error TS(2339): Property 'definitions' does not exist on type 'voi... Remove this comment to see the full error message .to.equal(schema.definitions.name.properties.first) + // @ts-expect-error TS(2339): Property 'definitions' does not exist on type 'voi... Remove this comment to see the full error message .to.equal(schema.definitions.name.properties.last) + // @ts-expect-error TS(2339): Property 'properties' does not exist on type 'void... Remove this comment to see the full error message .to.equal(schema.properties.name.properties.first) + // @ts-expect-error TS(2339): Property 'properties' does not exist on type 'void... Remove this comment to see the full error message .to.equal(schema.properties.name.properties.last); // The "circular" flag should NOT be set expect(parser.$refs.circular).to.equal(false); }); it("should bundle an object that references external files", async () => { - let parser = new $RefParser(); + const parser = new $RefParser(); const schema = await parser.bundle( // This file doesn't actually need to exist. But its path will be used to resolve external $refs - path.rel("specs/object-source-with-path/schema-file-that-does-not-exist.yaml"), + path.rel("test/specs/object-source-with-path/schema-file-that-does-not-exist.yaml"), // This schema object contains external $refs helper.cloneDeep(parsedSchema.schema), // An options object MUST be passed (even if it's empty) - {}); + {}, + ); expect(schema).to.equal(parser.schema); expect(schema).to.deep.equal(bundledSchema); // The schema path should match the one we passed-in. // All other paths should be the actual paths of referenced files. - let expectedPaths = [ - path.abs("specs/object-source-with-path/schema-file-that-does-not-exist.yaml"), - path.abs("specs/object-source-with-path/definitions/definitions.json"), - path.abs("specs/object-source-with-path/definitions/name.yaml"), - path.abs("specs/object-source-with-path/definitions/required-string.yaml") + const expectedPaths = [ + path.abs("test/specs/object-source-with-path/schema-file-that-does-not-exist.yaml"), + path.abs("test/specs/object-source-with-path/definitions/definitions.json"), + path.abs("test/specs/object-source-with-path/definitions/name.yaml"), + path.abs("test/specs/object-source-with-path/definitions/required-string.yaml"), ]; expect(parser.$refs.paths()).to.have.same.members(expectedPaths); expect(parser.$refs.values()).to.have.keys(expectedPaths); diff --git a/test/specs/object-source-with-path/parsed.js b/test/specs/object-source-with-path/parsed.ts similarity index 53% rename from test/specs/object-source-with-path/parsed.js rename to test/specs/object-source-with-path/parsed.ts index 2e4995b4..0d7ed714 100644 --- a/test/specs/object-source-with-path/parsed.js +++ b/test/specs/object-source-with-path/parsed.ts @@ -4,80 +4,72 @@ export default { // Because we've specified the full path to this directory, // this path can simply be relative to the current directory, // rather than having to be relative to the "test" directory - $ref: "definitions/definitions.json" + $ref: "definitions/definitions.json", }, - required: [ - "name" - ], + required: ["name"], type: "object", properties: { gender: { - enum: [ - "male", - "female" - ], - type: "string" + enum: ["male", "female"], + type: "string", }, age: { minimum: 0, - type: "integer" + type: "integer", }, name: { - $ref: "#/definitions/name" - } + $ref: "#/definitions/name", + }, }, - title: "Person" + title: "Person", }, definitions: { requiredString: { - $ref: "required-string.yaml" + $ref: "required-string.yaml", }, string: { - $ref: "#/requiredString/type" + $ref: "#/requiredString/type", }, name: { - $ref: "../definitions/name.yaml" - } + $ref: "../definitions/name.yaml", + }, }, name: { - required: [ - "first", - "last" - ], + required: ["first", "last"], type: "object", properties: { middle: { minLength: { - $ref: "#/properties/first/minLength" + $ref: "#/properties/first/minLength", }, type: { - $ref: "#/properties/first/type" - } + $ref: "#/properties/first/type", + }, }, prefix: { minLength: 3, - $ref: "#/properties/last" + $ref: "#/properties/last", }, last: { - $ref: "./required-string.yaml" + $ref: "./required-string.yaml", }, suffix: { $ref: "#/properties/prefix", type: "string", - maxLength: 3 + maxLength: 3, }, first: { - $ref: "../definitions/definitions.json#/requiredString" - } + $ref: "../definitions/definitions.json#/requiredString", + }, }, - title: "name" + title: "name", }, requiredString: { minLength: 1, type: "string", - title: "requiredString" - } + title: "requiredString", + }, }; diff --git a/test/specs/object-source/bundled.js b/test/specs/object-source/bundled.ts similarity index 54% rename from test/specs/object-source/bundled.js rename to test/specs/object-source/bundled.ts index 7dcee054..4dc46a6d 100644 --- a/test/specs/object-source/bundled.js +++ b/test/specs/object-source/bundled.ts @@ -1,66 +1,58 @@ export default { title: "Person", type: "object", - required: [ - "name" - ], + required: ["name"], properties: { name: { - $ref: "#/definitions/name" + $ref: "#/definitions/name", }, age: { type: "integer", - minimum: 0 + minimum: 0, }, gender: { type: "string", - enum: [ - "male", - "female" - ] - } + enum: ["male", "female"], + }, }, definitions: { requiredString: { title: "requiredString", type: "string", - minLength: 1 + minLength: 1, }, string: { - $ref: "#/definitions/requiredString/type" + $ref: "#/definitions/requiredString/type", }, name: { title: "name", type: "object", - required: [ - "first", - "last" - ], + required: ["first", "last"], properties: { first: { - $ref: "#/definitions/requiredString" + $ref: "#/definitions/requiredString", }, last: { - $ref: "#/definitions/requiredString" + $ref: "#/definitions/requiredString", }, middle: { type: { - $ref: "#/definitions/requiredString/type" + $ref: "#/definitions/requiredString/type", }, minLength: { - $ref: "#/definitions/requiredString/minLength" - } + $ref: "#/definitions/requiredString/minLength", + }, }, prefix: { $ref: "#/definitions/requiredString", - minLength: 3 + minLength: 3, }, suffix: { $ref: "#/definitions/name/properties/prefix", type: "string", - maxLength: 3 - } - } - } - } + maxLength: 3, + }, + }, + }, + }, }; diff --git a/test/specs/object-source/dereferenced.js b/test/specs/object-source/dereferenced.ts similarity index 71% rename from test/specs/object-source/dereferenced.js rename to test/specs/object-source/dereferenced.ts index 3b9c8a43..56bb8248 100644 --- a/test/specs/object-source/dereferenced.js +++ b/test/specs/object-source/dereferenced.ts @@ -1,98 +1,87 @@ export default { title: "Person", type: "object", - required: [ - "name" - ], + required: ["name"], properties: { name: { title: "name", type: "object", - required: [ - "first", - "last" - ], + required: ["first", "last"], properties: { first: { title: "requiredString", type: "string", - minLength: 1 + minLength: 1, }, last: { title: "requiredString", type: "string", - minLength: 1 + minLength: 1, }, middle: { type: "string", - minLength: 1 + minLength: 1, }, prefix: { title: "requiredString", type: "string", - minLength: 3 + minLength: 3, }, suffix: { title: "requiredString", type: "string", minLength: 3, - maxLength: 3 - } - } + maxLength: 3, + }, + }, }, age: { type: "integer", - minimum: 0 + minimum: 0, }, gender: { type: "string", - enum: [ - "male", - "female" - ] - } + enum: ["male", "female"], + }, }, definitions: { requiredString: { title: "requiredString", type: "string", - minLength: 1 + minLength: 1, }, string: "string", name: { title: "name", type: "object", - required: [ - "first", - "last" - ], + required: ["first", "last"], properties: { first: { title: "requiredString", type: "string", - minLength: 1 + minLength: 1, }, last: { title: "requiredString", type: "string", - minLength: 1 + minLength: 1, }, middle: { type: "string", - minLength: 1 + minLength: 1, }, prefix: { title: "requiredString", type: "string", - minLength: 3 + minLength: 3, }, suffix: { title: "requiredString", type: "string", minLength: 3, - maxLength: 3 - } - } - } - } + maxLength: 3, + }, + }, + }, + }, }; diff --git a/test/specs/object-source/object-source.spec.js b/test/specs/object-source/object-source.spec.ts similarity index 64% rename from test/specs/object-source/object-source.spec.js rename to test/specs/object-source/object-source.spec.ts index 3e7ed232..6de136d4 100644 --- a/test/specs/object-source/object-source.spec.js +++ b/test/specs/object-source/object-source.spec.ts @@ -1,4 +1,4 @@ -import chai from "chai"; +import { describe, it } from "vitest"; import $RefParser from "../../../lib/index.js"; import helper from "../../utils/helper.js"; import path from "../../utils/path.js"; @@ -8,71 +8,82 @@ import parsedSchema from "./parsed.js"; import dereferencedSchema from "./dereferenced.js"; import bundledSchema from "./bundled.js"; -const { expect } = chai; +import { expect } from "vitest"; +// @ts-expect-error TS(2345): Argument of type 'string | undefined' is not assig... Remove this comment to see the full error message const isWindows = /^win/.test(globalThis.process ? globalThis.process.platform : undefined); describe("Object sources (instead of file paths)", () => { it("should dereference a single object", async () => { - let parser = new $RefParser(); + const parser = new $RefParser(); const schema = await parser.dereference(helper.cloneDeep(internalRefsParsedSchema)); expect(schema).to.equal(parser.schema); expect(schema).to.deep.equal(internalRefsDereferencedSchema); // The schema path should be the current directory - let expectedPaths = [ - path.cwd() - ]; + const expectedPaths = [path.cwd()]; if (!isWindows) { expect(parser.$refs.paths()).to.have.same.members(expectedPaths); expect(parser.$refs.values()).to.have.keys(expectedPaths); } // Reference equality + // @ts-expect-error TS(2532): Object is possibly 'undefined'. expect(schema.properties.name).to.equal(schema.definitions.name); + // @ts-expect-error TS(2532): Object is possibly 'undefined'. expect(schema.definitions.requiredString) + // @ts-expect-error TS(2532): Object is possibly 'undefined'. .to.equal(schema.definitions.name.properties.first) + // @ts-expect-error TS(2532): Object is possibly 'undefined'. .to.equal(schema.definitions.name.properties.last) + // @ts-expect-error TS(2532): Object is possibly 'undefined'. .to.equal(schema.properties.name.properties.first) + // @ts-expect-error TS(2532): Object is possibly 'undefined'. .to.equal(schema.properties.name.properties.last); }); it("should dereference an object that references external files", async () => { - let parser = new $RefParser(); + const parser = new $RefParser(); const schema = await parser.dereference(helper.cloneDeep(parsedSchema.schema)); expect(schema).to.equal(parser.schema); expect(schema).to.deep.equal(dereferencedSchema); // The schema path should be the current directory, and all other paths should be absolute - let expectedPaths = [ + const expectedPaths = [ path.cwd(), - path.abs("specs/object-source/definitions/definitions.json"), - path.abs("specs/object-source/definitions/name.yaml"), - path.abs("specs/object-source/definitions/required-string.yaml") + path.abs("test/specs/object-source/definitions/definitions.json"), + path.abs("test/specs/object-source/definitions/name.yaml"), + path.abs("test/specs/object-source/definitions/required-string.yaml"), ]; if (!isWindows) { expect(parser.$refs.paths()).to.have.same.members(expectedPaths); expect(parser.$refs.values()).to.have.keys(expectedPaths); } // Reference equality + // @ts-expect-error TS(2532): Object is possibly 'undefined'. expect(schema.properties.name).to.equal(schema.definitions.name); + // @ts-expect-error TS(2532): Object is possibly 'undefined'. expect(schema.definitions.requiredString) + // @ts-expect-error TS(2532): Object is possibly 'undefined'. .to.equal(schema.definitions.name.properties.first) + // @ts-expect-error TS(2532): Object is possibly 'undefined'. .to.equal(schema.definitions.name.properties.last) + // @ts-expect-error TS(2532): Object is possibly 'undefined'. .to.equal(schema.properties.name.properties.first) + // @ts-expect-error TS(2532): Object is possibly 'undefined'. .to.equal(schema.properties.name.properties.last); // The "circular" flag should NOT be set expect(parser.$refs.circular).to.equal(false); }); it("should bundle an object that references external files", async () => { - let parser = new $RefParser(); + const parser = new $RefParser(); const schema = await parser.bundle(helper.cloneDeep(parsedSchema.schema)); expect(schema).to.equal(parser.schema); expect(schema).to.deep.equal(bundledSchema); // The schema path should be the current directory, and all other paths should be absolute - let expectedPaths = [ + const expectedPaths = [ path.cwd(), - path.abs("specs/object-source/definitions/definitions.json"), - path.abs("specs/object-source/definitions/name.yaml"), - path.abs("specs/object-source/definitions/required-string.yaml") + path.abs("test/specs/object-source/definitions/definitions.json"), + path.abs("test/specs/object-source/definitions/name.yaml"), + path.abs("test/specs/object-source/definitions/required-string.yaml"), ]; if (!isWindows) { expect(parser.$refs.paths()).to.have.same.members(expectedPaths); diff --git a/test/specs/object-source/parsed.js b/test/specs/object-source/parsed.ts similarity index 52% rename from test/specs/object-source/parsed.js rename to test/specs/object-source/parsed.ts index 13d7801b..62f94dc6 100644 --- a/test/specs/object-source/parsed.js +++ b/test/specs/object-source/parsed.ts @@ -5,80 +5,72 @@ export default { definitions: { // Because we're not specifying a path, the current directory (the "test" directory) // will be assumed. So this path must be relative to the "test" directory. - $ref: path.rel("specs/object-source/definitions/definitions.json") + $ref: path.rel("test/specs/object-source/definitions/definitions.json"), }, - required: [ - "name" - ], + required: ["name"], type: "object", properties: { gender: { - enum: [ - "male", - "female" - ], - type: "string" + enum: ["male", "female"], + type: "string", }, age: { minimum: 0, - type: "integer" + type: "integer", }, name: { - $ref: "#/definitions/name" - } + $ref: "#/definitions/name", + }, }, - title: "Person" + title: "Person", }, definitions: { requiredString: { - $ref: "required-string.yaml" + $ref: "required-string.yaml", }, string: { - $ref: "#/requiredString/type" + $ref: "#/requiredString/type", }, name: { - $ref: "../definitions/name.yaml" - } + $ref: "../definitions/name.yaml", + }, }, name: { - required: [ - "first", - "last" - ], + required: ["first", "last"], type: "object", properties: { middle: { minLength: { - $ref: "#/properties/first/minLength" + $ref: "#/properties/first/minLength", }, type: { - $ref: "#/properties/first/type" - } + $ref: "#/properties/first/type", + }, }, prefix: { minLength: 3, - $ref: "#/properties/last" + $ref: "#/properties/last", }, last: { - $ref: "./required-string.yaml" + $ref: "./required-string.yaml", }, suffix: { $ref: "#/properties/prefix", type: "string", - maxLength: 3 + maxLength: 3, }, first: { - $ref: "../definitions/definitions.json#/requiredString" - } + $ref: "../definitions/definitions.json#/requiredString", + }, }, - title: "name" + title: "name", }, requiredString: { minLength: 1, type: "string", - title: "requiredString" - } + title: "requiredString", + }, }; diff --git a/test/specs/parsers/dereferenced.js b/test/specs/parsers/dereferenced.js deleted file mode 100644 index 02b79110..00000000 --- a/test/specs/parsers/dereferenced.js +++ /dev/null @@ -1,65 +0,0 @@ -export default { - defaultParsers: { - definitions: { - markdown: "Hello\nWorld:\n", - - html: '\n\n\n \n \n\n\n

Hello World:

\n\n\n', - - css: "html {\n color: #888;\n font-family: sans-serif;\n height: 100%;\n width: 100%;\n}\n", - - binary: { type: "Buffer", data: [137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 32, 0, 0, 0, 32, 8, 6, 0, 0, 0, 115, 122, 122, 244, 0, 0, 0, 4, 115, 66, 73, 84, 8, 8, 8, 8, 124, 8, 100, 136, 0, 0, 0, 25, 116, 69, 88, 116, 83, 111, 102, 116, 119, 97, 114, 101, 0, 119, 119, 119, 46, 105, 110, 107, 115, 99, 97, 112, 101, 46, 111, 114, 103, 155, 238, 60, 26, 0, 0, 9, 170, 73, 68, 65, 84, 88, 133, 197, 151, 125, 76, 84, 103, 22, 198, 127, 247, 206, 64, 7, 44, 227, 0, 149, 15, 97, 176, 34, 139, 174, 182, 86, 49, 46, 69, 148, 197, 80, 234, 118, 73, 181, 49, 213, 38, 146, 172, 218, 221, 86, 151, 98, 106, 218, 198, 212, 102, 179, 180, 221, 173, 154, 102, 187, 182, 113, 171, 181, 113, 165, 145, 138, 41, 152, 173, 160, 130, 73, 149, 116, 23, 131, 34, 42, 203, 48, 128, 195, 135, 128, 200, 200, 71, 103, 24, 6, 24, 135, 59, 115, 239, 187, 127, 32, 179, 69, 112, 179, 127, 108, 178, 111, 114, 63, 222, 251, 158, 155, 243, 188, 207, 121, 206, 57, 247, 74, 66, 8, 254, 159, 67, 63, 211, 195, 95, 231, 189, 149, 168, 73, 186, 95, 161, 73, 166, 255, 181, 67, 73, 214, 106, 131, 252, 35, 167, 143, 30, 61, 234, 3, 144, 30, 102, 96, 123, 222, 158, 143, 146, 147, 158, 124, 119, 237, 154, 52, 121, 254, 188, 120, 38, 215, 255, 125, 157, 60, 129, 16, 26, 2, 129, 16, 160, 169, 26, 154, 208, 208, 84, 13, 191, 234, 71, 211, 52, 132, 166, 161, 106, 19, 207, 84, 77, 195, 229, 114, 209, 216, 210, 70, 75, 235, 237, 65, 191, 207, 187, 234, 216, 231, 127, 110, 151, 127, 236, 124, 199, 142, 119, 103, 199, 205, 141, 126, 107, 99, 78, 150, 92, 114, 170, 136, 47, 142, 28, 102, 206, 19, 145, 220, 106, 105, 102, 87, 254, 27, 92, 175, 187, 70, 76, 244, 28, 244, 122, 153, 195, 135, 255, 194, 167, 159, 30, 100, 86, 104, 40, 67, 78, 7, 123, 246, 188, 195, 217, 242, 50, 226, 226, 98, 145, 16, 252, 225, 195, 15, 248, 246, 219, 191, 49, 47, 193, 76, 92, 92, 44, 229, 101, 223, 114, 170, 248, 107, 150, 36, 63, 201, 218, 213, 63, 155, 51, 236, 246, 252, 94, 146, 164, 160, 41, 0, 20, 89, 125, 33, 115, 117, 170, 225, 240, 225, 195, 188, 252, 242, 203, 132, 133, 133, 81, 89, 89, 201, 234, 213, 171, 201, 201, 201, 161, 181, 181, 21, 33, 4, 37, 37, 37, 44, 90, 180, 136, 212, 212, 84, 10, 11, 11, 73, 78, 78, 102, 199, 142, 29, 180, 180, 180, 32, 132, 32, 46, 46, 142, 221, 187, 119, 211, 212, 212, 132, 170, 170, 88, 44, 22, 70, 71, 71, 217, 185, 115, 39, 199, 142, 29, 35, 121, 193, 60, 34, 35, 35, 54, 0, 115, 166, 0, 64, 150, 12, 115, 99, 162, 25, 24, 24, 32, 41, 41, 137, 212, 212, 84, 110, 222, 188, 137, 78, 167, 99, 246, 236, 217, 1, 179, 186, 186, 58, 150, 46, 93, 202, 138, 21, 43, 104, 105, 105, 65, 146, 36, 34, 35, 35, 145, 36, 41, 16, 174, 240, 240, 112, 36, 73, 66, 85, 85, 26, 26, 26, 152, 55, 111, 30, 209, 209, 209, 184, 92, 46, 244, 122, 61, 225, 225, 70, 3, 16, 63, 21, 0, 32, 73, 18, 70, 163, 17, 69, 81, 232, 233, 233, 33, 33, 33, 1, 33, 196, 20, 45, 44, 88, 176, 128, 190, 190, 62, 238, 222, 189, 139, 217, 108, 158, 178, 174, 170, 42, 170, 170, 162, 105, 26, 154, 166, 161, 170, 42, 137, 137, 137, 220, 187, 119, 143, 251, 247, 239, 19, 18, 18, 50, 225, 72, 32, 1, 97, 211, 0, 8, 33, 216, 186, 117, 43, 123, 247, 238, 165, 170, 170, 138, 180, 180, 52, 26, 26, 26, 40, 42, 42, 162, 162, 162, 130, 154, 154, 26, 54, 111, 222, 76, 97, 97, 33, 95, 125, 245, 21, 25, 25, 25, 216, 237, 118, 62, 249, 228, 19, 234, 234, 234, 40, 43, 43, 195, 233, 116, 178, 127, 255, 126, 154, 154, 154, 56, 125, 250, 52, 75, 150, 44, 193, 102, 179, 81, 80, 80, 192, 154, 53, 107, 16, 98, 194, 251, 180, 44, 216, 254, 198, 158, 109, 239, 228, 255, 166, 112, 241, 162, 159, 160, 40, 10, 30, 143, 7, 163, 209, 136, 16, 130, 193, 193, 65, 52, 77, 35, 56, 56, 24, 163, 209, 136, 170, 170, 184, 92, 46, 194, 195, 195, 3, 235, 62, 159, 15, 89, 150, 49, 26, 141, 56, 28, 14, 198, 199, 199, 17, 66, 96, 50, 153, 240, 249, 124, 252, 240, 195, 15, 1, 118, 75, 206, 92, 240, 237, 255, 96, 239, 11, 211, 24, 0, 24, 24, 24, 160, 178, 178, 18, 175, 215, 139, 16, 2, 167, 211, 73, 109, 109, 45, 138, 162, 96, 52, 26, 1, 184, 121, 243, 38, 253, 253, 253, 8, 33, 80, 85, 21, 187, 221, 78, 111, 111, 47, 70, 163, 145, 177, 177, 49, 234, 235, 235, 233, 239, 239, 39, 60, 60, 28, 175, 215, 203, 149, 43, 87, 232, 233, 233, 153, 72, 79, 33, 224, 129, 94, 166, 21, 34, 33, 4, 109, 109, 109, 156, 62, 125, 154, 129, 129, 1, 94, 125, 245, 85, 58, 59, 59, 57, 119, 238, 28, 54, 155, 141, 221, 187, 119, 83, 81, 81, 193, 213, 171, 87, 113, 56, 28, 228, 228, 228, 96, 48, 24, 40, 43, 43, 67, 175, 215, 99, 179, 217, 120, 246, 217, 103, 169, 175, 175, 167, 173, 173, 141, 131, 7, 15, 50, 54, 54, 134, 205, 102, 163, 166, 166, 134, 67, 135, 14, 77, 145, 220, 140, 12, 164, 165, 165, 145, 153, 153, 25, 0, 180, 124, 249, 114, 214, 173, 91, 135, 36, 73, 8, 33, 168, 170, 170, 98, 195, 134, 13, 228, 229, 229, 113, 233, 210, 37, 170, 171, 171, 201, 202, 202, 34, 47, 47, 143, 234, 234, 106, 162, 162, 162, 216, 178, 101, 11, 122, 253, 196, 254, 34, 34, 34, 200, 205, 205, 37, 56, 56, 24, 89, 150, 209, 233, 116, 129, 140, 153, 145, 129, 71, 29, 147, 235, 62, 159, 15, 189, 94, 143, 166, 105, 0, 248, 253, 126, 244, 122, 61, 63, 214, 211, 228, 189, 78, 167, 67, 211, 52, 100, 121, 98, 175, 65, 65, 65, 83, 236, 102, 236, 5, 253, 253, 253, 220, 190, 125, 27, 33, 4, 46, 151, 11, 159, 207, 71, 91, 91, 27, 118, 187, 157, 193, 193, 65, 178, 178, 178, 40, 46, 46, 70, 150, 101, 82, 82, 82, 136, 141, 141, 165, 180, 180, 148, 184, 184, 56, 86, 172, 88, 129, 162, 40, 88, 173, 86, 156, 78, 39, 118, 187, 157, 152, 152, 24, 44, 22, 11, 110, 183, 27, 187, 221, 78, 84, 84, 212, 100, 57, 151, 166, 3, 16, 130, 209, 209, 81, 162, 162, 162, 240, 249, 124, 116, 117, 117, 17, 25, 25, 73, 72, 72, 8, 102, 179, 153, 206, 206, 78, 178, 179, 179, 209, 233, 116, 8, 33, 88, 185, 114, 37, 161, 161, 161, 8, 33, 112, 56, 28, 164, 167, 167, 163, 105, 26, 125, 125, 125, 100, 100, 100, 208, 218, 218, 74, 76, 76, 12, 221, 221, 221, 100, 103, 103, 99, 179, 217, 136, 141, 141, 125, 180, 8, 17, 130, 249, 243, 231, 147, 151, 151, 55, 133, 246, 215, 95, 127, 61, 160, 120, 33, 4, 153, 153, 153, 83, 66, 147, 154, 154, 58, 133, 218, 109, 219, 182, 5, 52, 51, 57, 159, 180, 31, 25, 25, 9, 216, 77, 19, 161, 42, 84, 206, 159, 63, 79, 118, 118, 54, 101, 101, 101, 8, 33, 176, 90, 173, 236, 218, 181, 139, 157, 59, 119, 50, 48, 48, 192, 245, 235, 215, 121, 229, 149, 87, 56, 114, 228, 8, 0, 125, 125, 125, 188, 253, 246, 219, 228, 231, 231, 211, 217, 217, 201, 216, 216, 24, 123, 246, 236, 97, 215, 174, 93, 52, 54, 54, 162, 170, 42, 239, 189, 247, 30, 111, 190, 249, 38, 181, 181, 181, 19, 34, 124, 20, 0, 159, 79, 37, 45, 45, 141, 141, 27, 55, 226, 112, 56, 80, 85, 149, 83, 167, 78, 177, 101, 203, 22, 114, 114, 114, 40, 47, 47, 103, 249, 242, 229, 188, 246, 218, 107, 140, 140, 140, 32, 73, 18, 151, 46, 93, 34, 61, 61, 157, 252, 252, 124, 138, 139, 139, 185, 118, 237, 26, 79, 63, 253, 52, 7, 14, 28, 160, 168, 168, 8, 171, 213, 138, 217, 108, 230, 208, 161, 67, 156, 60, 121, 18, 157, 78, 247, 104, 6, 252, 126, 63, 189, 189, 189, 56, 157, 78, 250, 250, 250, 232, 234, 234, 162, 181, 181, 21, 163, 209, 72, 84, 84, 20, 237, 237, 237, 140, 143, 143, 35, 203, 50, 170, 170, 226, 247, 251, 185, 117, 235, 22, 102, 179, 153, 196, 196, 68, 236, 118, 59, 237, 237, 237, 36, 36, 36, 48, 103, 206, 28, 28, 14, 71, 64, 7, 161, 161, 161, 120, 189, 94, 84, 85, 13, 164, 225, 244, 16, 168, 234, 148, 249, 248, 248, 56, 115, 231, 206, 165, 173, 173, 141, 198, 198, 70, 18, 18, 18, 80, 20, 37, 144, 130, 178, 44, 243, 204, 51, 207, 208, 221, 221, 77, 71, 71, 7, 11, 23, 46, 100, 217, 178, 101, 116, 116, 116, 4, 154, 85, 74, 74, 10, 157, 157, 157, 184, 221, 110, 194, 195, 195, 9, 10, 10, 66, 25, 191, 63, 246, 72, 0, 22, 139, 133, 171, 87, 175, 114, 249, 242, 101, 26, 27, 27, 217, 180, 105, 19, 103, 207, 158, 165, 185, 185, 153, 244, 244, 116, 186, 186, 186, 40, 45, 45, 197, 98, 177, 112, 241, 226, 69, 94, 124, 241, 69, 44, 22, 11, 37, 37, 37, 172, 95, 191, 158, 244, 244, 116, 250, 251, 251, 249, 236, 179, 207, 216, 188, 121, 51, 75, 151, 46, 5, 224, 253, 247, 223, 39, 55, 55, 151, 214, 142, 46, 173, 185, 229, 86, 51, 224, 159, 214, 140, 182, 110, 94, 95, 24, 246, 120, 8, 138, 162, 4, 118, 104, 48, 24, 208, 235, 245, 72, 146, 132, 193, 96, 32, 40, 40, 8, 77, 211, 208, 235, 245, 4, 7, 7, 19, 18, 18, 130, 78, 167, 67, 85, 213, 128, 157, 36, 73, 244, 245, 15, 210, 216, 98, 67, 211, 38, 178, 199, 167, 40, 184, 71, 70, 208, 84, 149, 130, 130, 223, 125, 120, 175, 167, 187, 112, 90, 26, 170, 154, 138, 215, 235, 165, 188, 188, 156, 152, 152, 24, 50, 50, 50, 240, 251, 253, 156, 57, 115, 6, 147, 201, 196, 134, 13, 27, 16, 66, 112, 246, 236, 89, 36, 73, 34, 55, 55, 151, 193, 193, 65, 138, 138, 138, 88, 182, 108, 89, 160, 100, 215, 92, 187, 65, 66, 124, 28, 191, 200, 250, 57, 138, 162, 160, 40, 10, 67, 67, 67, 12, 13, 13, 113, 178, 164, 236, 238, 189, 158, 238, 6, 160, 111, 90, 8, 52, 77, 112, 226, 196, 9, 162, 163, 163, 169, 171, 171, 163, 161, 161, 129, 210, 210, 82, 130, 131, 131, 233, 232, 232, 224, 226, 197, 139, 84, 86, 86, 226, 114, 185, 240, 120, 60, 20, 21, 21, 97, 48, 24, 48, 155, 205, 84, 84, 84, 160, 105, 26, 150, 70, 43, 79, 68, 68, 144, 248, 100, 66, 64, 43, 99, 99, 99, 184, 221, 110, 46, 215, 222, 240, 254, 245, 139, 67, 71, 129, 118, 33, 132, 119, 70, 13, 220, 185, 115, 135, 37, 75, 150, 176, 118, 237, 90, 234, 235, 235, 177, 90, 173, 172, 92, 185, 146, 117, 235, 214, 81, 95, 95, 79, 93, 93, 29, 233, 233, 233, 188, 244, 210, 75, 220, 184, 113, 3, 147, 201, 68, 74, 74, 10, 178, 44, 99, 179, 217, 248, 190, 186, 134, 159, 46, 76, 194, 239, 247, 163, 170, 42, 195, 195, 195, 12, 13, 13, 113, 171, 237, 182, 246, 241, 254, 253, 135, 93, 46, 231, 101, 224, 22, 204, 80, 9, 39, 227, 40, 203, 50, 110, 183, 155, 176, 176, 48, 102, 205, 154, 133, 223, 239, 199, 237, 118, 51, 123, 246, 108, 124, 62, 31, 30, 143, 135, 225, 225, 97, 34, 34, 34, 2, 239, 78, 126, 152, 184, 221, 110, 252, 126, 63, 66, 8, 220, 110, 247, 68, 79, 232, 27, 96, 223, 190, 253, 197, 119, 239, 220, 174, 2, 174, 11, 33, 148, 25, 1, 104, 154, 198, 154, 53, 107, 56, 126, 252, 56, 35, 35, 35, 228, 230, 230, 146, 152, 152, 72, 97, 97, 33, 0, 155, 54, 109, 194, 100, 50, 241, 229, 151, 95, 98, 50, 153, 120, 254, 249, 231, 113, 56, 28, 124, 243, 205, 55, 88, 173, 86, 146, 147, 147, 209, 52, 13, 69, 81, 240, 122, 189, 56, 157, 78, 122, 122, 239, 241, 241, 159, 62, 173, 104, 184, 121, 237, 28, 112, 85, 8, 49, 58, 233, 111, 10, 0, 73, 104, 98, 204, 115, 159, 172, 172, 44, 22, 46, 92, 136, 36, 73, 196, 199, 199, 19, 28, 28, 76, 82, 82, 18, 154, 166, 145, 152, 152, 200, 99, 143, 61, 70, 65, 65, 1, 163, 163, 163, 44, 94, 188, 24, 77, 211, 120, 238, 185, 231, 200, 204, 204, 164, 187, 187, 27, 167, 219, 131, 199, 227, 193, 229, 114, 81, 223, 216, 172, 126, 180, 239, 192, 137, 166, 127, 214, 93, 0, 170, 133, 16, 142, 31, 251, 156, 2, 64, 136, 160, 191, 55, 217, 58, 68, 210, 124, 179, 20, 31, 31, 63, 1, 234, 65, 67, 137, 137, 137, 33, 40, 40, 8, 89, 150, 17, 66, 16, 21, 21, 69, 92, 92, 28, 178, 44, 163, 215, 235, 89, 181, 106, 21, 146, 36, 113, 229, 202, 21, 122, 7, 38, 212, 126, 161, 234, 31, 99, 31, 239, 251, 227, 231, 247, 122, 123, 190, 7, 106, 133, 16, 206, 135, 25, 159, 246, 107, 182, 237, 183, 239, 156, 95, 185, 252, 169, 95, 62, 181, 104, 1, 179, 66, 67, 144, 36, 41, 240, 21, 35, 203, 114, 224, 120, 120, 62, 9, 246, 194, 119, 85, 154, 226, 23, 52, 53, 183, 180, 125, 125, 252, 104, 225, 232, 168, 251, 202, 131, 152, 123, 30, 118, 62, 35, 128, 237, 219, 63, 48, 12, 221, 239, 202, 55, 24, 12, 219, 141, 70, 99, 164, 52, 67, 181, 124, 212, 240, 249, 125, 227, 157, 29, 237, 214, 27, 181, 151, 191, 27, 25, 30, 106, 5, 58, 152, 72, 55, 223, 163, 222, 153, 6, 224, 193, 78, 116, 128, 9, 136, 3, 30, 255, 111, 1, 60, 24, 42, 208, 11, 12, 76, 42, 253, 63, 141, 127, 1, 173, 193, 47, 22, 232, 14, 87, 117, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130]}, - - unknown: "This is an : unknown : file type", - - empty: undefined - } - }, - - staticParser: { - definitions: { - markdown: "The quick brown fox jumped over the lazy dog", - - html: "The quick brown fox jumped over the lazy dog", - - css: "The quick brown fox jumped over the lazy dog", - - binary: "The quick brown fox jumped over the lazy dog", - - unknown: "The quick brown fox jumped over the lazy dog", - - empty: "The quick brown fox jumped over the lazy dog" - } - }, - - customParser: { - definitions: { - markdown: "Hello\nWorld:\n", - - html: '\n\n\n \n \n\n\n

Hello World:

\n\n\n', - - css: "html {\n color: #888;\n font-family: sans-serif;\n height: 100%;\n width: 100%;\n}\n", - - binary: { type: "Buffer", data: [137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 32, 0, 0, 0, 32, 8, 6, 0, 0, 0, 115, 122, 122, 244, 0, 0, 0, 4, 115, 66, 73, 84, 8, 8, 8, 8, 124, 8, 100, 136, 0, 0, 0, 25, 116, 69, 88, 116, 83, 111, 102, 116, 119, 97, 114, 101, 0, 119, 119, 119, 46, 105, 110, 107, 115, 99, 97, 112, 101, 46, 111, 114, 103, 155, 238, 60, 26, 0, 0, 9, 170, 73, 68, 65, 84, 88, 133, 197, 151, 125, 76, 84, 103, 22, 198, 127, 247, 206, 64, 7, 44, 227, 0, 149, 15, 97, 176, 34, 139, 174, 182, 86, 49, 46, 69, 148, 197, 80, 234, 118, 73, 181, 49, 213, 38, 146, 172, 218, 221, 86, 151, 98, 106, 218, 198, 212, 102, 179, 180, 221, 173, 154, 102, 187, 182, 113, 171, 181, 113, 165, 145, 138, 41, 152, 173, 160, 130, 73, 149, 116, 23, 131, 34, 42, 203, 48, 128, 195, 135, 128, 200, 200, 71, 103, 24, 6, 24, 135, 59, 115, 239, 187, 127, 32, 179, 69, 112, 179, 127, 108, 178, 111, 114, 63, 222, 251, 158, 155, 243, 188, 207, 121, 206, 57, 247, 74, 66, 8, 254, 159, 67, 63, 211, 195, 95, 231, 189, 149, 168, 73, 186, 95, 161, 73, 166, 255, 181, 67, 73, 214, 106, 131, 252, 35, 167, 143, 30, 61, 234, 3, 144, 30, 102, 96, 123, 222, 158, 143, 146, 147, 158, 124, 119, 237, 154, 52, 121, 254, 188, 120, 38, 215, 255, 125, 157, 60, 129, 16, 26, 2, 129, 16, 160, 169, 26, 154, 208, 208, 84, 13, 191, 234, 71, 211, 52, 132, 166, 161, 106, 19, 207, 84, 77, 195, 229, 114, 209, 216, 210, 70, 75, 235, 237, 65, 191, 207, 187, 234, 216, 231, 127, 110, 151, 127, 236, 124, 199, 142, 119, 103, 199, 205, 141, 126, 107, 99, 78, 150, 92, 114, 170, 136, 47, 142, 28, 102, 206, 19, 145, 220, 106, 105, 102, 87, 254, 27, 92, 175, 187, 70, 76, 244, 28, 244, 122, 153, 195, 135, 255, 194, 167, 159, 30, 100, 86, 104, 40, 67, 78, 7, 123, 246, 188, 195, 217, 242, 50, 226, 226, 98, 145, 16, 252, 225, 195, 15, 248, 246, 219, 191, 49, 47, 193, 76, 92, 92, 44, 229, 101, 223, 114, 170, 248, 107, 150, 36, 63, 201, 218, 213, 63, 155, 51, 236, 246, 252, 94, 146, 164, 160, 41, 0, 20, 89, 125, 33, 115, 117, 170, 225, 240, 225, 195, 188, 252, 242, 203, 132, 133, 133, 81, 89, 89, 201, 234, 213, 171, 201, 201, 201, 161, 181, 181, 21, 33, 4, 37, 37, 37, 44, 90, 180, 136, 212, 212, 84, 10, 11, 11, 73, 78, 78, 102, 199, 142, 29, 180, 180, 180, 32, 132, 32, 46, 46, 142, 221, 187, 119, 211, 212, 212, 132, 170, 170, 88, 44, 22, 70, 71, 71, 217, 185, 115, 39, 199, 142, 29, 35, 121, 193, 60, 34, 35, 35, 54, 0, 115, 166, 0, 64, 150, 12, 115, 99, 162, 25, 24, 24, 32, 41, 41, 137, 212, 212, 84, 110, 222, 188, 137, 78, 167, 99, 246, 236, 217, 1, 179, 186, 186, 58, 150, 46, 93, 202, 138, 21, 43, 104, 105, 105, 65, 146, 36, 34, 35, 35, 145, 36, 41, 16, 174, 240, 240, 112, 36, 73, 66, 85, 85, 26, 26, 26, 152, 55, 111, 30, 209, 209, 209, 184, 92, 46, 244, 122, 61, 225, 225, 70, 3, 16, 63, 21, 0, 32, 73, 18, 70, 163, 17, 69, 81, 232, 233, 233, 33, 33, 33, 1, 33, 196, 20, 45, 44, 88, 176, 128, 190, 190, 62, 238, 222, 189, 139, 217, 108, 158, 178, 174, 170, 42, 170, 170, 162, 105, 26, 154, 166, 161, 170, 42, 137, 137, 137, 220, 187, 119, 143, 251, 247, 239, 19, 18, 18, 50, 225, 72, 32, 1, 97, 211, 0, 8, 33, 216, 186, 117, 43, 123, 247, 238, 165, 170, 170, 138, 180, 180, 52, 26, 26, 26, 40, 42, 42, 162, 162, 162, 130, 154, 154, 26, 54, 111, 222, 76, 97, 97, 33, 95, 125, 245, 21, 25, 25, 25, 216, 237, 118, 62, 249, 228, 19, 234, 234, 234, 40, 43, 43, 195, 233, 116, 178, 127, 255, 126, 154, 154, 154, 56, 125, 250, 52, 75, 150, 44, 193, 102, 179, 81, 80, 80, 192, 154, 53, 107, 16, 98, 194, 251, 180, 44, 216, 254, 198, 158, 109, 239, 228, 255, 166, 112, 241, 162, 159, 160, 40, 10, 30, 143, 7, 163, 209, 136, 16, 130, 193, 193, 65, 52, 77, 35, 56, 56, 24, 163, 209, 136, 170, 170, 184, 92, 46, 194, 195, 195, 3, 235, 62, 159, 15, 89, 150, 49, 26, 141, 56, 28, 14, 198, 199, 199, 17, 66, 96, 50, 153, 240, 249, 124, 252, 240, 195, 15, 1, 118, 75, 206, 92, 240, 237, 255, 96, 239, 11, 211, 24, 0, 24, 24, 24, 160, 178, 178, 18, 175, 215, 139, 16, 2, 167, 211, 73, 109, 109, 45, 138, 162, 96, 52, 26, 1, 184, 121, 243, 38, 253, 253, 253, 8, 33, 80, 85, 21, 187, 221, 78, 111, 111, 47, 70, 163, 145, 177, 177, 49, 234, 235, 235, 233, 239, 239, 39, 60, 60, 28, 175, 215, 203, 149, 43, 87, 232, 233, 233, 153, 72, 79, 33, 224, 129, 94, 166, 21, 34, 33, 4, 109, 109, 109, 156, 62, 125, 154, 129, 129, 1, 94, 125, 245, 85, 58, 59, 59, 57, 119, 238, 28, 54, 155, 141, 221, 187, 119, 83, 81, 81, 193, 213, 171, 87, 113, 56, 28, 228, 228, 228, 96, 48, 24, 40, 43, 43, 67, 175, 215, 99, 179, 217, 120, 246, 217, 103, 169, 175, 175, 167, 173, 173, 141, 131, 7, 15, 50, 54, 54, 134, 205, 102, 163, 166, 166, 134, 67, 135, 14, 77, 145, 220, 140, 12, 164, 165, 165, 145, 153, 153, 25, 0, 180, 124, 249, 114, 214, 173, 91, 135, 36, 73, 8, 33, 168, 170, 170, 98, 195, 134, 13, 228, 229, 229, 113, 233, 210, 37, 170, 171, 171, 201, 202, 202, 34, 47, 47, 143, 234, 234, 106, 162, 162, 162, 216, 178, 101, 11, 122, 253, 196, 254, 34, 34, 34, 200, 205, 205, 37, 56, 56, 24, 89, 150, 209, 233, 116, 129, 140, 153, 145, 129, 71, 29, 147, 235, 62, 159, 15, 189, 94, 143, 166, 105, 0, 248, 253, 126, 244, 122, 61, 63, 214, 211, 228, 189, 78, 167, 67, 211, 52, 100, 121, 98, 175, 65, 65, 65, 83, 236, 102, 236, 5, 253, 253, 253, 220, 190, 125, 27, 33, 4, 46, 151, 11, 159, 207, 71, 91, 91, 27, 118, 187, 157, 193, 193, 65, 178, 178, 178, 40, 46, 46, 70, 150, 101, 82, 82, 82, 136, 141, 141, 165, 180, 180, 148, 184, 184, 56, 86, 172, 88, 129, 162, 40, 88, 173, 86, 156, 78, 39, 118, 187, 157, 152, 152, 24, 44, 22, 11, 110, 183, 27, 187, 221, 78, 84, 84, 212, 100, 57, 151, 166, 3, 16, 130, 209, 209, 81, 162, 162, 162, 240, 249, 124, 116, 117, 117, 17, 25, 25, 73, 72, 72, 8, 102, 179, 153, 206, 206, 78, 178, 179, 179, 209, 233, 116, 8, 33, 88, 185, 114, 37, 161, 161, 161, 8, 33, 112, 56, 28, 164, 167, 167, 163, 105, 26, 125, 125, 125, 100, 100, 100, 208, 218, 218, 74, 76, 76, 12, 221, 221, 221, 100, 103, 103, 99, 179, 217, 136, 141, 141, 125, 180, 8, 17, 130, 249, 243, 231, 147, 151, 151, 55, 133, 246, 215, 95, 127, 61, 160, 120, 33, 4, 153, 153, 153, 83, 66, 147, 154, 154, 58, 133, 218, 109, 219, 182, 5, 52, 51, 57, 159, 180, 31, 25, 25, 9, 216, 77, 19, 161, 42, 84, 206, 159, 63, 79, 118, 118, 54, 101, 101, 101, 8, 33, 176, 90, 173, 236, 218, 181, 139, 157, 59, 119, 50, 48, 48, 192, 245, 235, 215, 121, 229, 149, 87, 56, 114, 228, 8, 0, 125, 125, 125, 188, 253, 246, 219, 228, 231, 231, 211, 217, 217, 201, 216, 216, 24, 123, 246, 236, 97, 215, 174, 93, 52, 54, 54, 162, 170, 42, 239, 189, 247, 30, 111, 190, 249, 38, 181, 181, 181, 19, 34, 124, 20, 0, 159, 79, 37, 45, 45, 141, 141, 27, 55, 226, 112, 56, 80, 85, 149, 83, 167, 78, 177, 101, 203, 22, 114, 114, 114, 40, 47, 47, 103, 249, 242, 229, 188, 246, 218, 107, 140, 140, 140, 32, 73, 18, 151, 46, 93, 34, 61, 61, 157, 252, 252, 124, 138, 139, 139, 185, 118, 237, 26, 79, 63, 253, 52, 7, 14, 28, 160, 168, 168, 8, 171, 213, 138, 217, 108, 230, 208, 161, 67, 156, 60, 121, 18, 157, 78, 247, 104, 6, 252, 126, 63, 189, 189, 189, 56, 157, 78, 250, 250, 250, 232, 234, 234, 162, 181, 181, 21, 163, 209, 72, 84, 84, 20, 237, 237, 237, 140, 143, 143, 35, 203, 50, 170, 170, 226, 247, 251, 185, 117, 235, 22, 102, 179, 153, 196, 196, 68, 236, 118, 59, 237, 237, 237, 36, 36, 36, 48, 103, 206, 28, 28, 14, 71, 64, 7, 161, 161, 161, 120, 189, 94, 84, 85, 13, 164, 225, 244, 16, 168, 234, 148, 249, 248, 248, 56, 115, 231, 206, 165, 173, 173, 141, 198, 198, 70, 18, 18, 18, 80, 20, 37, 144, 130, 178, 44, 243, 204, 51, 207, 208, 221, 221, 77, 71, 71, 7, 11, 23, 46, 100, 217, 178, 101, 116, 116, 116, 4, 154, 85, 74, 74, 10, 157, 157, 157, 184, 221, 110, 194, 195, 195, 9, 10, 10, 66, 25, 191, 63, 246, 72, 0, 22, 139, 133, 171, 87, 175, 114, 249, 242, 101, 26, 27, 27, 217, 180, 105, 19, 103, 207, 158, 165, 185, 185, 153, 244, 244, 116, 186, 186, 186, 40, 45, 45, 197, 98, 177, 112, 241, 226, 69, 94, 124, 241, 69, 44, 22, 11, 37, 37, 37, 172, 95, 191, 158, 244, 244, 116, 250, 251, 251, 249, 236, 179, 207, 216, 188, 121, 51, 75, 151, 46, 5, 224, 253, 247, 223, 39, 55, 55, 151, 214, 142, 46, 173, 185, 229, 86, 51, 224, 159, 214, 140, 182, 110, 94, 95, 24, 246, 120, 8, 138, 162, 4, 118, 104, 48, 24, 208, 235, 245, 72, 146, 132, 193, 96, 32, 40, 40, 8, 77, 211, 208, 235, 245, 4, 7, 7, 19, 18, 18, 130, 78, 167, 67, 85, 213, 128, 157, 36, 73, 244, 245, 15, 210, 216, 98, 67, 211, 38, 178, 199, 167, 40, 184, 71, 70, 208, 84, 149, 130, 130, 223, 125, 120, 175, 167, 187, 112, 90, 26, 170, 154, 138, 215, 235, 165, 188, 188, 156, 152, 152, 24, 50, 50, 50, 240, 251, 253, 156, 57, 115, 6, 147, 201, 196, 134, 13, 27, 16, 66, 112, 246, 236, 89, 36, 73, 34, 55, 55, 151, 193, 193, 65, 138, 138, 138, 88, 182, 108, 89, 160, 100, 215, 92, 187, 65, 66, 124, 28, 191, 200, 250, 57, 138, 162, 160, 40, 10, 67, 67, 67, 12, 13, 13, 113, 178, 164, 236, 238, 189, 158, 238, 6, 160, 111, 90, 8, 52, 77, 112, 226, 196, 9, 162, 163, 163, 169, 171, 171, 163, 161, 161, 129, 210, 210, 82, 130, 131, 131, 233, 232, 232, 224, 226, 197, 139, 84, 86, 86, 226, 114, 185, 240, 120, 60, 20, 21, 21, 97, 48, 24, 48, 155, 205, 84, 84, 84, 160, 105, 26, 150, 70, 43, 79, 68, 68, 144, 248, 100, 66, 64, 43, 99, 99, 99, 184, 221, 110, 46, 215, 222, 240, 254, 245, 139, 67, 71, 129, 118, 33, 132, 119, 70, 13, 220, 185, 115, 135, 37, 75, 150, 176, 118, 237, 90, 234, 235, 235, 177, 90, 173, 172, 92, 185, 146, 117, 235, 214, 81, 95, 95, 79, 93, 93, 29, 233, 233, 233, 188, 244, 210, 75, 220, 184, 113, 3, 147, 201, 68, 74, 74, 10, 178, 44, 99, 179, 217, 248, 190, 186, 134, 159, 46, 76, 194, 239, 247, 163, 170, 42, 195, 195, 195, 12, 13, 13, 113, 171, 237, 182, 246, 241, 254, 253, 135, 93, 46, 231, 101, 224, 22, 204, 80, 9, 39, 227, 40, 203, 50, 110, 183, 155, 176, 176, 48, 102, 205, 154, 133, 223, 239, 199, 237, 118, 51, 123, 246, 108, 124, 62, 31, 30, 143, 135, 225, 225, 97, 34, 34, 34, 2, 239, 78, 126, 152, 184, 221, 110, 252, 126, 63, 66, 8, 220, 110, 247, 68, 79, 232, 27, 96, 223, 190, 253, 197, 119, 239, 220, 174, 2, 174, 11, 33, 148, 25, 1, 104, 154, 198, 154, 53, 107, 56, 126, 252, 56, 35, 35, 35, 228, 230, 230, 146, 152, 152, 72, 97, 97, 33, 0, 155, 54, 109, 194, 100, 50, 241, 229, 151, 95, 98, 50, 153, 120, 254, 249, 231, 113, 56, 28, 124, 243, 205, 55, 88, 173, 86, 146, 147, 147, 209, 52, 13, 69, 81, 240, 122, 189, 56, 157, 78, 122, 122, 239, 241, 241, 159, 62, 173, 104, 184, 121, 237, 28, 112, 85, 8, 49, 58, 233, 111, 10, 0, 73, 104, 98, 204, 115, 159, 172, 172, 44, 22, 46, 92, 136, 36, 73, 196, 199, 199, 19, 28, 28, 76, 82, 82, 18, 154, 166, 145, 152, 152, 200, 99, 143, 61, 70, 65, 65, 1, 163, 163, 163, 44, 94, 188, 24, 77, 211, 120, 238, 185, 231, 200, 204, 204, 164, 187, 187, 27, 167, 219, 131, 199, 227, 193, 229, 114, 81, 223, 216, 172, 126, 180, 239, 192, 137, 166, 127, 214, 93, 0, 170, 133, 16, 142, 31, 251, 156, 2, 64, 136, 160, 191, 55, 217, 58, 68, 210, 124, 179, 20, 31, 31, 63, 1, 234, 65, 67, 137, 137, 137, 33, 40, 40, 8, 89, 150, 17, 66, 16, 21, 21, 69, 92, 92, 28, 178, 44, 163, 215, 235, 89, 181, 106, 21, 146, 36, 113, 229, 202, 21, 122, 7, 38, 212, 126, 161, 234, 31, 99, 31, 239, 251, 227, 231, 247, 122, 123, 190, 7, 106, 133, 16, 206, 135, 25, 159, 246, 107, 182, 237, 183, 239, 156, 95, 185, 252, 169, 95, 62, 181, 104, 1, 179, 66, 67, 144, 36, 41, 240, 21, 35, 203, 114, 224, 120, 120, 62, 9, 246, 194, 119, 85, 154, 226, 23, 52, 53, 183, 180, 125, 125, 252, 104, 225, 232, 168, 251, 202, 131, 152, 123, 30, 118, 62, 35, 128, 237, 219, 63, 48, 12, 221, 239, 202, 55, 24, 12, 219, 141, 70, 99, 164, 52, 67, 181, 124, 212, 240, 249, 125, 227, 157, 29, 237, 214, 27, 181, 151, 191, 27, 25, 30, 106, 5, 58, 152, 72, 55, 223, 163, 222, 153, 6, 224, 193, 78, 116, 128, 9, 136, 3, 30, 255, 111, 1, 60, 24, 42, 208, 11, 12, 76, 42, 253, 63, 141, 127, 1, 173, 193, 47, 22, 232, 14, 87, 117, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130]}, - - unknown: "epyt elif : nwonknu : na si sihT", - - empty: undefined - } - }, - - binaryParser: { - definitions: { - markdown: { type: "Buffer", data: [72, 101, 108, 108, 111, 10, 87, 111, 114, 108, 100, 58, 10]}, - - html: { type: "Buffer", data: [60, 33, 100, 111, 99, 116, 121, 112, 101, 32, 104, 116, 109, 108, 62, 10, 60, 104, 116, 109, 108, 32, 108, 97, 110, 103, 61, 34, 101, 110, 34, 62, 10, 60, 104, 101, 97, 100, 62, 10, 32, 32, 32, 32, 60, 109, 101, 116, 97, 32, 99, 104, 97, 114, 115, 101, 116, 61, 34, 117, 116, 102, 45, 56, 34, 62, 10, 32, 32, 32, 32, 60, 108, 105, 110, 107, 32, 114, 101, 108, 61, 34, 115, 116, 121, 108, 101, 115, 104, 101, 101, 116, 34, 32, 104, 114, 101, 102, 61, 34, 115, 116, 121, 108, 101, 46, 99, 115, 115, 34, 62, 10, 60, 47, 104, 101, 97, 100, 62, 10, 60, 98, 111, 100, 121, 62, 10, 32, 32, 32, 32, 60, 104, 49, 62, 72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 58, 32, 60, 47, 104, 49, 62, 10, 60, 47, 98, 111, 100, 121, 62, 10, 60, 47, 104, 116, 109, 108, 62, 10]}, - - css: { type: "Buffer", data: [104, 116, 109, 108, 32, 123, 10, 32, 32, 99, 111, 108, 111, 114, 58, 32, 35, 56, 56, 56, 59, 10, 32, 32, 102, 111, 110, 116, 45, 102, 97, 109, 105, 108, 121, 58, 32, 115, 97, 110, 115, 45, 115, 101, 114, 105, 102, 59, 10, 32, 32, 104, 101, 105, 103, 104, 116, 58, 32, 49, 48, 48, 37, 59, 10, 32, 32, 119, 105, 100, 116, 104, 58, 32, 49, 48, 48, 37, 59, 10, 125, 10]}, - - binary: { type: "Buffer", data: [137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 32, 0, 0, 0, 32, 8, 6, 0, 0, 0, 115, 122, 122, 244, 0, 0, 0, 4, 115, 66, 73, 84, 8, 8, 8, 8, 124, 8, 100, 136, 0, 0, 0, 25, 116, 69, 88, 116, 83, 111, 102, 116, 119, 97, 114, 101, 0, 119, 119, 119, 46, 105, 110, 107, 115, 99, 97, 112, 101, 46, 111, 114, 103, 155, 238, 60, 26, 0, 0, 9, 170, 73, 68, 65, 84, 88, 133, 197, 151, 125, 76, 84, 103, 22, 198, 127, 247, 206, 64, 7, 44, 227, 0, 149, 15, 97, 176, 34, 139, 174, 182, 86, 49, 46, 69, 148, 197, 80, 234, 118, 73, 181, 49, 213, 38, 146, 172, 218, 221, 86, 151, 98, 106, 218, 198, 212, 102, 179, 180, 221, 173, 154, 102, 187, 182, 113, 171, 181, 113, 165, 145, 138, 41, 152, 173, 160, 130, 73, 149, 116, 23, 131, 34, 42, 203, 48, 128, 195, 135, 128, 200, 200, 71, 103, 24, 6, 24, 135, 59, 115, 239, 187, 127, 32, 179, 69, 112, 179, 127, 108, 178, 111, 114, 63, 222, 251, 158, 155, 243, 188, 207, 121, 206, 57, 247, 74, 66, 8, 254, 159, 67, 63, 211, 195, 95, 231, 189, 149, 168, 73, 186, 95, 161, 73, 166, 255, 181, 67, 73, 214, 106, 131, 252, 35, 167, 143, 30, 61, 234, 3, 144, 30, 102, 96, 123, 222, 158, 143, 146, 147, 158, 124, 119, 237, 154, 52, 121, 254, 188, 120, 38, 215, 255, 125, 157, 60, 129, 16, 26, 2, 129, 16, 160, 169, 26, 154, 208, 208, 84, 13, 191, 234, 71, 211, 52, 132, 166, 161, 106, 19, 207, 84, 77, 195, 229, 114, 209, 216, 210, 70, 75, 235, 237, 65, 191, 207, 187, 234, 216, 231, 127, 110, 151, 127, 236, 124, 199, 142, 119, 103, 199, 205, 141, 126, 107, 99, 78, 150, 92, 114, 170, 136, 47, 142, 28, 102, 206, 19, 145, 220, 106, 105, 102, 87, 254, 27, 92, 175, 187, 70, 76, 244, 28, 244, 122, 153, 195, 135, 255, 194, 167, 159, 30, 100, 86, 104, 40, 67, 78, 7, 123, 246, 188, 195, 217, 242, 50, 226, 226, 98, 145, 16, 252, 225, 195, 15, 248, 246, 219, 191, 49, 47, 193, 76, 92, 92, 44, 229, 101, 223, 114, 170, 248, 107, 150, 36, 63, 201, 218, 213, 63, 155, 51, 236, 246, 252, 94, 146, 164, 160, 41, 0, 20, 89, 125, 33, 115, 117, 170, 225, 240, 225, 195, 188, 252, 242, 203, 132, 133, 133, 81, 89, 89, 201, 234, 213, 171, 201, 201, 201, 161, 181, 181, 21, 33, 4, 37, 37, 37, 44, 90, 180, 136, 212, 212, 84, 10, 11, 11, 73, 78, 78, 102, 199, 142, 29, 180, 180, 180, 32, 132, 32, 46, 46, 142, 221, 187, 119, 211, 212, 212, 132, 170, 170, 88, 44, 22, 70, 71, 71, 217, 185, 115, 39, 199, 142, 29, 35, 121, 193, 60, 34, 35, 35, 54, 0, 115, 166, 0, 64, 150, 12, 115, 99, 162, 25, 24, 24, 32, 41, 41, 137, 212, 212, 84, 110, 222, 188, 137, 78, 167, 99, 246, 236, 217, 1, 179, 186, 186, 58, 150, 46, 93, 202, 138, 21, 43, 104, 105, 105, 65, 146, 36, 34, 35, 35, 145, 36, 41, 16, 174, 240, 240, 112, 36, 73, 66, 85, 85, 26, 26, 26, 152, 55, 111, 30, 209, 209, 209, 184, 92, 46, 244, 122, 61, 225, 225, 70, 3, 16, 63, 21, 0, 32, 73, 18, 70, 163, 17, 69, 81, 232, 233, 233, 33, 33, 33, 1, 33, 196, 20, 45, 44, 88, 176, 128, 190, 190, 62, 238, 222, 189, 139, 217, 108, 158, 178, 174, 170, 42, 170, 170, 162, 105, 26, 154, 166, 161, 170, 42, 137, 137, 137, 220, 187, 119, 143, 251, 247, 239, 19, 18, 18, 50, 225, 72, 32, 1, 97, 211, 0, 8, 33, 216, 186, 117, 43, 123, 247, 238, 165, 170, 170, 138, 180, 180, 52, 26, 26, 26, 40, 42, 42, 162, 162, 162, 130, 154, 154, 26, 54, 111, 222, 76, 97, 97, 33, 95, 125, 245, 21, 25, 25, 25, 216, 237, 118, 62, 249, 228, 19, 234, 234, 234, 40, 43, 43, 195, 233, 116, 178, 127, 255, 126, 154, 154, 154, 56, 125, 250, 52, 75, 150, 44, 193, 102, 179, 81, 80, 80, 192, 154, 53, 107, 16, 98, 194, 251, 180, 44, 216, 254, 198, 158, 109, 239, 228, 255, 166, 112, 241, 162, 159, 160, 40, 10, 30, 143, 7, 163, 209, 136, 16, 130, 193, 193, 65, 52, 77, 35, 56, 56, 24, 163, 209, 136, 170, 170, 184, 92, 46, 194, 195, 195, 3, 235, 62, 159, 15, 89, 150, 49, 26, 141, 56, 28, 14, 198, 199, 199, 17, 66, 96, 50, 153, 240, 249, 124, 252, 240, 195, 15, 1, 118, 75, 206, 92, 240, 237, 255, 96, 239, 11, 211, 24, 0, 24, 24, 24, 160, 178, 178, 18, 175, 215, 139, 16, 2, 167, 211, 73, 109, 109, 45, 138, 162, 96, 52, 26, 1, 184, 121, 243, 38, 253, 253, 253, 8, 33, 80, 85, 21, 187, 221, 78, 111, 111, 47, 70, 163, 145, 177, 177, 49, 234, 235, 235, 233, 239, 239, 39, 60, 60, 28, 175, 215, 203, 149, 43, 87, 232, 233, 233, 153, 72, 79, 33, 224, 129, 94, 166, 21, 34, 33, 4, 109, 109, 109, 156, 62, 125, 154, 129, 129, 1, 94, 125, 245, 85, 58, 59, 59, 57, 119, 238, 28, 54, 155, 141, 221, 187, 119, 83, 81, 81, 193, 213, 171, 87, 113, 56, 28, 228, 228, 228, 96, 48, 24, 40, 43, 43, 67, 175, 215, 99, 179, 217, 120, 246, 217, 103, 169, 175, 175, 167, 173, 173, 141, 131, 7, 15, 50, 54, 54, 134, 205, 102, 163, 166, 166, 134, 67, 135, 14, 77, 145, 220, 140, 12, 164, 165, 165, 145, 153, 153, 25, 0, 180, 124, 249, 114, 214, 173, 91, 135, 36, 73, 8, 33, 168, 170, 170, 98, 195, 134, 13, 228, 229, 229, 113, 233, 210, 37, 170, 171, 171, 201, 202, 202, 34, 47, 47, 143, 234, 234, 106, 162, 162, 162, 216, 178, 101, 11, 122, 253, 196, 254, 34, 34, 34, 200, 205, 205, 37, 56, 56, 24, 89, 150, 209, 233, 116, 129, 140, 153, 145, 129, 71, 29, 147, 235, 62, 159, 15, 189, 94, 143, 166, 105, 0, 248, 253, 126, 244, 122, 61, 63, 214, 211, 228, 189, 78, 167, 67, 211, 52, 100, 121, 98, 175, 65, 65, 65, 83, 236, 102, 236, 5, 253, 253, 253, 220, 190, 125, 27, 33, 4, 46, 151, 11, 159, 207, 71, 91, 91, 27, 118, 187, 157, 193, 193, 65, 178, 178, 178, 40, 46, 46, 70, 150, 101, 82, 82, 82, 136, 141, 141, 165, 180, 180, 148, 184, 184, 56, 86, 172, 88, 129, 162, 40, 88, 173, 86, 156, 78, 39, 118, 187, 157, 152, 152, 24, 44, 22, 11, 110, 183, 27, 187, 221, 78, 84, 84, 212, 100, 57, 151, 166, 3, 16, 130, 209, 209, 81, 162, 162, 162, 240, 249, 124, 116, 117, 117, 17, 25, 25, 73, 72, 72, 8, 102, 179, 153, 206, 206, 78, 178, 179, 179, 209, 233, 116, 8, 33, 88, 185, 114, 37, 161, 161, 161, 8, 33, 112, 56, 28, 164, 167, 167, 163, 105, 26, 125, 125, 125, 100, 100, 100, 208, 218, 218, 74, 76, 76, 12, 221, 221, 221, 100, 103, 103, 99, 179, 217, 136, 141, 141, 125, 180, 8, 17, 130, 249, 243, 231, 147, 151, 151, 55, 133, 246, 215, 95, 127, 61, 160, 120, 33, 4, 153, 153, 153, 83, 66, 147, 154, 154, 58, 133, 218, 109, 219, 182, 5, 52, 51, 57, 159, 180, 31, 25, 25, 9, 216, 77, 19, 161, 42, 84, 206, 159, 63, 79, 118, 118, 54, 101, 101, 101, 8, 33, 176, 90, 173, 236, 218, 181, 139, 157, 59, 119, 50, 48, 48, 192, 245, 235, 215, 121, 229, 149, 87, 56, 114, 228, 8, 0, 125, 125, 125, 188, 253, 246, 219, 228, 231, 231, 211, 217, 217, 201, 216, 216, 24, 123, 246, 236, 97, 215, 174, 93, 52, 54, 54, 162, 170, 42, 239, 189, 247, 30, 111, 190, 249, 38, 181, 181, 181, 19, 34, 124, 20, 0, 159, 79, 37, 45, 45, 141, 141, 27, 55, 226, 112, 56, 80, 85, 149, 83, 167, 78, 177, 101, 203, 22, 114, 114, 114, 40, 47, 47, 103, 249, 242, 229, 188, 246, 218, 107, 140, 140, 140, 32, 73, 18, 151, 46, 93, 34, 61, 61, 157, 252, 252, 124, 138, 139, 139, 185, 118, 237, 26, 79, 63, 253, 52, 7, 14, 28, 160, 168, 168, 8, 171, 213, 138, 217, 108, 230, 208, 161, 67, 156, 60, 121, 18, 157, 78, 247, 104, 6, 252, 126, 63, 189, 189, 189, 56, 157, 78, 250, 250, 250, 232, 234, 234, 162, 181, 181, 21, 163, 209, 72, 84, 84, 20, 237, 237, 237, 140, 143, 143, 35, 203, 50, 170, 170, 226, 247, 251, 185, 117, 235, 22, 102, 179, 153, 196, 196, 68, 236, 118, 59, 237, 237, 237, 36, 36, 36, 48, 103, 206, 28, 28, 14, 71, 64, 7, 161, 161, 161, 120, 189, 94, 84, 85, 13, 164, 225, 244, 16, 168, 234, 148, 249, 248, 248, 56, 115, 231, 206, 165, 173, 173, 141, 198, 198, 70, 18, 18, 18, 80, 20, 37, 144, 130, 178, 44, 243, 204, 51, 207, 208, 221, 221, 77, 71, 71, 7, 11, 23, 46, 100, 217, 178, 101, 116, 116, 116, 4, 154, 85, 74, 74, 10, 157, 157, 157, 184, 221, 110, 194, 195, 195, 9, 10, 10, 66, 25, 191, 63, 246, 72, 0, 22, 139, 133, 171, 87, 175, 114, 249, 242, 101, 26, 27, 27, 217, 180, 105, 19, 103, 207, 158, 165, 185, 185, 153, 244, 244, 116, 186, 186, 186, 40, 45, 45, 197, 98, 177, 112, 241, 226, 69, 94, 124, 241, 69, 44, 22, 11, 37, 37, 37, 172, 95, 191, 158, 244, 244, 116, 250, 251, 251, 249, 236, 179, 207, 216, 188, 121, 51, 75, 151, 46, 5, 224, 253, 247, 223, 39, 55, 55, 151, 214, 142, 46, 173, 185, 229, 86, 51, 224, 159, 214, 140, 182, 110, 94, 95, 24, 246, 120, 8, 138, 162, 4, 118, 104, 48, 24, 208, 235, 245, 72, 146, 132, 193, 96, 32, 40, 40, 8, 77, 211, 208, 235, 245, 4, 7, 7, 19, 18, 18, 130, 78, 167, 67, 85, 213, 128, 157, 36, 73, 244, 245, 15, 210, 216, 98, 67, 211, 38, 178, 199, 167, 40, 184, 71, 70, 208, 84, 149, 130, 130, 223, 125, 120, 175, 167, 187, 112, 90, 26, 170, 154, 138, 215, 235, 165, 188, 188, 156, 152, 152, 24, 50, 50, 50, 240, 251, 253, 156, 57, 115, 6, 147, 201, 196, 134, 13, 27, 16, 66, 112, 246, 236, 89, 36, 73, 34, 55, 55, 151, 193, 193, 65, 138, 138, 138, 88, 182, 108, 89, 160, 100, 215, 92, 187, 65, 66, 124, 28, 191, 200, 250, 57, 138, 162, 160, 40, 10, 67, 67, 67, 12, 13, 13, 113, 178, 164, 236, 238, 189, 158, 238, 6, 160, 111, 90, 8, 52, 77, 112, 226, 196, 9, 162, 163, 163, 169, 171, 171, 163, 161, 161, 129, 210, 210, 82, 130, 131, 131, 233, 232, 232, 224, 226, 197, 139, 84, 86, 86, 226, 114, 185, 240, 120, 60, 20, 21, 21, 97, 48, 24, 48, 155, 205, 84, 84, 84, 160, 105, 26, 150, 70, 43, 79, 68, 68, 144, 248, 100, 66, 64, 43, 99, 99, 99, 184, 221, 110, 46, 215, 222, 240, 254, 245, 139, 67, 71, 129, 118, 33, 132, 119, 70, 13, 220, 185, 115, 135, 37, 75, 150, 176, 118, 237, 90, 234, 235, 235, 177, 90, 173, 172, 92, 185, 146, 117, 235, 214, 81, 95, 95, 79, 93, 93, 29, 233, 233, 233, 188, 244, 210, 75, 220, 184, 113, 3, 147, 201, 68, 74, 74, 10, 178, 44, 99, 179, 217, 248, 190, 186, 134, 159, 46, 76, 194, 239, 247, 163, 170, 42, 195, 195, 195, 12, 13, 13, 113, 171, 237, 182, 246, 241, 254, 253, 135, 93, 46, 231, 101, 224, 22, 204, 80, 9, 39, 227, 40, 203, 50, 110, 183, 155, 176, 176, 48, 102, 205, 154, 133, 223, 239, 199, 237, 118, 51, 123, 246, 108, 124, 62, 31, 30, 143, 135, 225, 225, 97, 34, 34, 34, 2, 239, 78, 126, 152, 184, 221, 110, 252, 126, 63, 66, 8, 220, 110, 247, 68, 79, 232, 27, 96, 223, 190, 253, 197, 119, 239, 220, 174, 2, 174, 11, 33, 148, 25, 1, 104, 154, 198, 154, 53, 107, 56, 126, 252, 56, 35, 35, 35, 228, 230, 230, 146, 152, 152, 72, 97, 97, 33, 0, 155, 54, 109, 194, 100, 50, 241, 229, 151, 95, 98, 50, 153, 120, 254, 249, 231, 113, 56, 28, 124, 243, 205, 55, 88, 173, 86, 146, 147, 147, 209, 52, 13, 69, 81, 240, 122, 189, 56, 157, 78, 122, 122, 239, 241, 241, 159, 62, 173, 104, 184, 121, 237, 28, 112, 85, 8, 49, 58, 233, 111, 10, 0, 73, 104, 98, 204, 115, 159, 172, 172, 44, 22, 46, 92, 136, 36, 73, 196, 199, 199, 19, 28, 28, 76, 82, 82, 18, 154, 166, 145, 152, 152, 200, 99, 143, 61, 70, 65, 65, 1, 163, 163, 163, 44, 94, 188, 24, 77, 211, 120, 238, 185, 231, 200, 204, 204, 164, 187, 187, 27, 167, 219, 131, 199, 227, 193, 229, 114, 81, 223, 216, 172, 126, 180, 239, 192, 137, 166, 127, 214, 93, 0, 170, 133, 16, 142, 31, 251, 156, 2, 64, 136, 160, 191, 55, 217, 58, 68, 210, 124, 179, 20, 31, 31, 63, 1, 234, 65, 67, 137, 137, 137, 33, 40, 40, 8, 89, 150, 17, 66, 16, 21, 21, 69, 92, 92, 28, 178, 44, 163, 215, 235, 89, 181, 106, 21, 146, 36, 113, 229, 202, 21, 122, 7, 38, 212, 126, 161, 234, 31, 99, 31, 239, 251, 227, 231, 247, 122, 123, 190, 7, 106, 133, 16, 206, 135, 25, 159, 246, 107, 182, 237, 183, 239, 156, 95, 185, 252, 169, 95, 62, 181, 104, 1, 179, 66, 67, 144, 36, 41, 240, 21, 35, 203, 114, 224, 120, 120, 62, 9, 246, 194, 119, 85, 154, 226, 23, 52, 53, 183, 180, 125, 125, 252, 104, 225, 232, 168, 251, 202, 131, 152, 123, 30, 118, 62, 35, 128, 237, 219, 63, 48, 12, 221, 239, 202, 55, 24, 12, 219, 141, 70, 99, 164, 52, 67, 181, 124, 212, 240, 249, 125, 227, 157, 29, 237, 214, 27, 181, 151, 191, 27, 25, 30, 106, 5, 58, 152, 72, 55, 223, 163, 222, 153, 6, 224, 193, 78, 116, 128, 9, 136, 3, 30, 255, 111, 1, 60, 24, 42, 208, 11, 12, 76, 42, 253, 63, 141, 127, 1, 173, 193, 47, 22, 232, 14, 87, 117, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130]}, - - unknown: { type: "Buffer", data: [84, 104, 105, 115, 32, 105, 115, 32, 97, 110, 32, 58, 32, 117, 110, 107, 110, 111, 119, 110, 32, 58, 32, 102, 105, 108, 101, 32, 116, 121, 112, 101]}, - - empty: { type: "Buffer", data: []} - } - } -}; diff --git a/test/specs/parsers/dereferenced.ts b/test/specs/parsers/dereferenced.ts new file mode 100644 index 00000000..8b76f458 --- /dev/null +++ b/test/specs/parsers/dereferenced.ts @@ -0,0 +1,447 @@ +export default { + defaultParsers: { + definitions: { + markdown: "Hello\nWorld:\n", + + html: ` + + + + + + +

Hello World:

+ + +`, + + css: "html {\n color: #888;\n font-family: sans-serif;\n height: 100%;\n width: 100%;\n}\n", + + binary: { + type: "Buffer", + data: [ + 137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 32, 0, 0, 0, 32, 8, 6, 0, 0, 0, 115, + 122, 122, 244, 0, 0, 0, 4, 115, 66, 73, 84, 8, 8, 8, 8, 124, 8, 100, 136, 0, 0, 0, 25, 116, 69, 88, 116, 83, + 111, 102, 116, 119, 97, 114, 101, 0, 119, 119, 119, 46, 105, 110, 107, 115, 99, 97, 112, 101, 46, 111, 114, + 103, 155, 238, 60, 26, 0, 0, 9, 170, 73, 68, 65, 84, 88, 133, 197, 151, 125, 76, 84, 103, 22, 198, 127, 247, + 206, 64, 7, 44, 227, 0, 149, 15, 97, 176, 34, 139, 174, 182, 86, 49, 46, 69, 148, 197, 80, 234, 118, 73, 181, + 49, 213, 38, 146, 172, 218, 221, 86, 151, 98, 106, 218, 198, 212, 102, 179, 180, 221, 173, 154, 102, 187, 182, + 113, 171, 181, 113, 165, 145, 138, 41, 152, 173, 160, 130, 73, 149, 116, 23, 131, 34, 42, 203, 48, 128, 195, + 135, 128, 200, 200, 71, 103, 24, 6, 24, 135, 59, 115, 239, 187, 127, 32, 179, 69, 112, 179, 127, 108, 178, + 111, 114, 63, 222, 251, 158, 155, 243, 188, 207, 121, 206, 57, 247, 74, 66, 8, 254, 159, 67, 63, 211, 195, 95, + 231, 189, 149, 168, 73, 186, 95, 161, 73, 166, 255, 181, 67, 73, 214, 106, 131, 252, 35, 167, 143, 30, 61, + 234, 3, 144, 30, 102, 96, 123, 222, 158, 143, 146, 147, 158, 124, 119, 237, 154, 52, 121, 254, 188, 120, 38, + 215, 255, 125, 157, 60, 129, 16, 26, 2, 129, 16, 160, 169, 26, 154, 208, 208, 84, 13, 191, 234, 71, 211, 52, + 132, 166, 161, 106, 19, 207, 84, 77, 195, 229, 114, 209, 216, 210, 70, 75, 235, 237, 65, 191, 207, 187, 234, + 216, 231, 127, 110, 151, 127, 236, 124, 199, 142, 119, 103, 199, 205, 141, 126, 107, 99, 78, 150, 92, 114, + 170, 136, 47, 142, 28, 102, 206, 19, 145, 220, 106, 105, 102, 87, 254, 27, 92, 175, 187, 70, 76, 244, 28, 244, + 122, 153, 195, 135, 255, 194, 167, 159, 30, 100, 86, 104, 40, 67, 78, 7, 123, 246, 188, 195, 217, 242, 50, + 226, 226, 98, 145, 16, 252, 225, 195, 15, 248, 246, 219, 191, 49, 47, 193, 76, 92, 92, 44, 229, 101, 223, 114, + 170, 248, 107, 150, 36, 63, 201, 218, 213, 63, 155, 51, 236, 246, 252, 94, 146, 164, 160, 41, 0, 20, 89, 125, + 33, 115, 117, 170, 225, 240, 225, 195, 188, 252, 242, 203, 132, 133, 133, 81, 89, 89, 201, 234, 213, 171, 201, + 201, 201, 161, 181, 181, 21, 33, 4, 37, 37, 37, 44, 90, 180, 136, 212, 212, 84, 10, 11, 11, 73, 78, 78, 102, + 199, 142, 29, 180, 180, 180, 32, 132, 32, 46, 46, 142, 221, 187, 119, 211, 212, 212, 132, 170, 170, 88, 44, + 22, 70, 71, 71, 217, 185, 115, 39, 199, 142, 29, 35, 121, 193, 60, 34, 35, 35, 54, 0, 115, 166, 0, 64, 150, + 12, 115, 99, 162, 25, 24, 24, 32, 41, 41, 137, 212, 212, 84, 110, 222, 188, 137, 78, 167, 99, 246, 236, 217, + 1, 179, 186, 186, 58, 150, 46, 93, 202, 138, 21, 43, 104, 105, 105, 65, 146, 36, 34, 35, 35, 145, 36, 41, 16, + 174, 240, 240, 112, 36, 73, 66, 85, 85, 26, 26, 26, 152, 55, 111, 30, 209, 209, 209, 184, 92, 46, 244, 122, + 61, 225, 225, 70, 3, 16, 63, 21, 0, 32, 73, 18, 70, 163, 17, 69, 81, 232, 233, 233, 33, 33, 33, 1, 33, 196, + 20, 45, 44, 88, 176, 128, 190, 190, 62, 238, 222, 189, 139, 217, 108, 158, 178, 174, 170, 42, 170, 170, 162, + 105, 26, 154, 166, 161, 170, 42, 137, 137, 137, 220, 187, 119, 143, 251, 247, 239, 19, 18, 18, 50, 225, 72, + 32, 1, 97, 211, 0, 8, 33, 216, 186, 117, 43, 123, 247, 238, 165, 170, 170, 138, 180, 180, 52, 26, 26, 26, 40, + 42, 42, 162, 162, 162, 130, 154, 154, 26, 54, 111, 222, 76, 97, 97, 33, 95, 125, 245, 21, 25, 25, 25, 216, + 237, 118, 62, 249, 228, 19, 234, 234, 234, 40, 43, 43, 195, 233, 116, 178, 127, 255, 126, 154, 154, 154, 56, + 125, 250, 52, 75, 150, 44, 193, 102, 179, 81, 80, 80, 192, 154, 53, 107, 16, 98, 194, 251, 180, 44, 216, 254, + 198, 158, 109, 239, 228, 255, 166, 112, 241, 162, 159, 160, 40, 10, 30, 143, 7, 163, 209, 136, 16, 130, 193, + 193, 65, 52, 77, 35, 56, 56, 24, 163, 209, 136, 170, 170, 184, 92, 46, 194, 195, 195, 3, 235, 62, 159, 15, 89, + 150, 49, 26, 141, 56, 28, 14, 198, 199, 199, 17, 66, 96, 50, 153, 240, 249, 124, 252, 240, 195, 15, 1, 118, + 75, 206, 92, 240, 237, 255, 96, 239, 11, 211, 24, 0, 24, 24, 24, 160, 178, 178, 18, 175, 215, 139, 16, 2, 167, + 211, 73, 109, 109, 45, 138, 162, 96, 52, 26, 1, 184, 121, 243, 38, 253, 253, 253, 8, 33, 80, 85, 21, 187, 221, + 78, 111, 111, 47, 70, 163, 145, 177, 177, 49, 234, 235, 235, 233, 239, 239, 39, 60, 60, 28, 175, 215, 203, + 149, 43, 87, 232, 233, 233, 153, 72, 79, 33, 224, 129, 94, 166, 21, 34, 33, 4, 109, 109, 109, 156, 62, 125, + 154, 129, 129, 1, 94, 125, 245, 85, 58, 59, 59, 57, 119, 238, 28, 54, 155, 141, 221, 187, 119, 83, 81, 81, + 193, 213, 171, 87, 113, 56, 28, 228, 228, 228, 96, 48, 24, 40, 43, 43, 67, 175, 215, 99, 179, 217, 120, 246, + 217, 103, 169, 175, 175, 167, 173, 173, 141, 131, 7, 15, 50, 54, 54, 134, 205, 102, 163, 166, 166, 134, 67, + 135, 14, 77, 145, 220, 140, 12, 164, 165, 165, 145, 153, 153, 25, 0, 180, 124, 249, 114, 214, 173, 91, 135, + 36, 73, 8, 33, 168, 170, 170, 98, 195, 134, 13, 228, 229, 229, 113, 233, 210, 37, 170, 171, 171, 201, 202, + 202, 34, 47, 47, 143, 234, 234, 106, 162, 162, 162, 216, 178, 101, 11, 122, 253, 196, 254, 34, 34, 34, 200, + 205, 205, 37, 56, 56, 24, 89, 150, 209, 233, 116, 129, 140, 153, 145, 129, 71, 29, 147, 235, 62, 159, 15, 189, + 94, 143, 166, 105, 0, 248, 253, 126, 244, 122, 61, 63, 214, 211, 228, 189, 78, 167, 67, 211, 52, 100, 121, 98, + 175, 65, 65, 65, 83, 236, 102, 236, 5, 253, 253, 253, 220, 190, 125, 27, 33, 4, 46, 151, 11, 159, 207, 71, 91, + 91, 27, 118, 187, 157, 193, 193, 65, 178, 178, 178, 40, 46, 46, 70, 150, 101, 82, 82, 82, 136, 141, 141, 165, + 180, 180, 148, 184, 184, 56, 86, 172, 88, 129, 162, 40, 88, 173, 86, 156, 78, 39, 118, 187, 157, 152, 152, 24, + 44, 22, 11, 110, 183, 27, 187, 221, 78, 84, 84, 212, 100, 57, 151, 166, 3, 16, 130, 209, 209, 81, 162, 162, + 162, 240, 249, 124, 116, 117, 117, 17, 25, 25, 73, 72, 72, 8, 102, 179, 153, 206, 206, 78, 178, 179, 179, 209, + 233, 116, 8, 33, 88, 185, 114, 37, 161, 161, 161, 8, 33, 112, 56, 28, 164, 167, 167, 163, 105, 26, 125, 125, + 125, 100, 100, 100, 208, 218, 218, 74, 76, 76, 12, 221, 221, 221, 100, 103, 103, 99, 179, 217, 136, 141, 141, + 125, 180, 8, 17, 130, 249, 243, 231, 147, 151, 151, 55, 133, 246, 215, 95, 127, 61, 160, 120, 33, 4, 153, 153, + 153, 83, 66, 147, 154, 154, 58, 133, 218, 109, 219, 182, 5, 52, 51, 57, 159, 180, 31, 25, 25, 9, 216, 77, 19, + 161, 42, 84, 206, 159, 63, 79, 118, 118, 54, 101, 101, 101, 8, 33, 176, 90, 173, 236, 218, 181, 139, 157, 59, + 119, 50, 48, 48, 192, 245, 235, 215, 121, 229, 149, 87, 56, 114, 228, 8, 0, 125, 125, 125, 188, 253, 246, 219, + 228, 231, 231, 211, 217, 217, 201, 216, 216, 24, 123, 246, 236, 97, 215, 174, 93, 52, 54, 54, 162, 170, 42, + 239, 189, 247, 30, 111, 190, 249, 38, 181, 181, 181, 19, 34, 124, 20, 0, 159, 79, 37, 45, 45, 141, 141, 27, + 55, 226, 112, 56, 80, 85, 149, 83, 167, 78, 177, 101, 203, 22, 114, 114, 114, 40, 47, 47, 103, 249, 242, 229, + 188, 246, 218, 107, 140, 140, 140, 32, 73, 18, 151, 46, 93, 34, 61, 61, 157, 252, 252, 124, 138, 139, 139, + 185, 118, 237, 26, 79, 63, 253, 52, 7, 14, 28, 160, 168, 168, 8, 171, 213, 138, 217, 108, 230, 208, 161, 67, + 156, 60, 121, 18, 157, 78, 247, 104, 6, 252, 126, 63, 189, 189, 189, 56, 157, 78, 250, 250, 250, 232, 234, + 234, 162, 181, 181, 21, 163, 209, 72, 84, 84, 20, 237, 237, 237, 140, 143, 143, 35, 203, 50, 170, 170, 226, + 247, 251, 185, 117, 235, 22, 102, 179, 153, 196, 196, 68, 236, 118, 59, 237, 237, 237, 36, 36, 36, 48, 103, + 206, 28, 28, 14, 71, 64, 7, 161, 161, 161, 120, 189, 94, 84, 85, 13, 164, 225, 244, 16, 168, 234, 148, 249, + 248, 248, 56, 115, 231, 206, 165, 173, 173, 141, 198, 198, 70, 18, 18, 18, 80, 20, 37, 144, 130, 178, 44, 243, + 204, 51, 207, 208, 221, 221, 77, 71, 71, 7, 11, 23, 46, 100, 217, 178, 101, 116, 116, 116, 4, 154, 85, 74, 74, + 10, 157, 157, 157, 184, 221, 110, 194, 195, 195, 9, 10, 10, 66, 25, 191, 63, 246, 72, 0, 22, 139, 133, 171, + 87, 175, 114, 249, 242, 101, 26, 27, 27, 217, 180, 105, 19, 103, 207, 158, 165, 185, 185, 153, 244, 244, 116, + 186, 186, 186, 40, 45, 45, 197, 98, 177, 112, 241, 226, 69, 94, 124, 241, 69, 44, 22, 11, 37, 37, 37, 172, 95, + 191, 158, 244, 244, 116, 250, 251, 251, 249, 236, 179, 207, 216, 188, 121, 51, 75, 151, 46, 5, 224, 253, 247, + 223, 39, 55, 55, 151, 214, 142, 46, 173, 185, 229, 86, 51, 224, 159, 214, 140, 182, 110, 94, 95, 24, 246, 120, + 8, 138, 162, 4, 118, 104, 48, 24, 208, 235, 245, 72, 146, 132, 193, 96, 32, 40, 40, 8, 77, 211, 208, 235, 245, + 4, 7, 7, 19, 18, 18, 130, 78, 167, 67, 85, 213, 128, 157, 36, 73, 244, 245, 15, 210, 216, 98, 67, 211, 38, + 178, 199, 167, 40, 184, 71, 70, 208, 84, 149, 130, 130, 223, 125, 120, 175, 167, 187, 112, 90, 26, 170, 154, + 138, 215, 235, 165, 188, 188, 156, 152, 152, 24, 50, 50, 50, 240, 251, 253, 156, 57, 115, 6, 147, 201, 196, + 134, 13, 27, 16, 66, 112, 246, 236, 89, 36, 73, 34, 55, 55, 151, 193, 193, 65, 138, 138, 138, 88, 182, 108, + 89, 160, 100, 215, 92, 187, 65, 66, 124, 28, 191, 200, 250, 57, 138, 162, 160, 40, 10, 67, 67, 67, 12, 13, 13, + 113, 178, 164, 236, 238, 189, 158, 238, 6, 160, 111, 90, 8, 52, 77, 112, 226, 196, 9, 162, 163, 163, 169, 171, + 171, 163, 161, 161, 129, 210, 210, 82, 130, 131, 131, 233, 232, 232, 224, 226, 197, 139, 84, 86, 86, 226, 114, + 185, 240, 120, 60, 20, 21, 21, 97, 48, 24, 48, 155, 205, 84, 84, 84, 160, 105, 26, 150, 70, 43, 79, 68, 68, + 144, 248, 100, 66, 64, 43, 99, 99, 99, 184, 221, 110, 46, 215, 222, 240, 254, 245, 139, 67, 71, 129, 118, 33, + 132, 119, 70, 13, 220, 185, 115, 135, 37, 75, 150, 176, 118, 237, 90, 234, 235, 235, 177, 90, 173, 172, 92, + 185, 146, 117, 235, 214, 81, 95, 95, 79, 93, 93, 29, 233, 233, 233, 188, 244, 210, 75, 220, 184, 113, 3, 147, + 201, 68, 74, 74, 10, 178, 44, 99, 179, 217, 248, 190, 186, 134, 159, 46, 76, 194, 239, 247, 163, 170, 42, 195, + 195, 195, 12, 13, 13, 113, 171, 237, 182, 246, 241, 254, 253, 135, 93, 46, 231, 101, 224, 22, 204, 80, 9, 39, + 227, 40, 203, 50, 110, 183, 155, 176, 176, 48, 102, 205, 154, 133, 223, 239, 199, 237, 118, 51, 123, 246, 108, + 124, 62, 31, 30, 143, 135, 225, 225, 97, 34, 34, 34, 2, 239, 78, 126, 152, 184, 221, 110, 252, 126, 63, 66, 8, + 220, 110, 247, 68, 79, 232, 27, 96, 223, 190, 253, 197, 119, 239, 220, 174, 2, 174, 11, 33, 148, 25, 1, 104, + 154, 198, 154, 53, 107, 56, 126, 252, 56, 35, 35, 35, 228, 230, 230, 146, 152, 152, 72, 97, 97, 33, 0, 155, + 54, 109, 194, 100, 50, 241, 229, 151, 95, 98, 50, 153, 120, 254, 249, 231, 113, 56, 28, 124, 243, 205, 55, 88, + 173, 86, 146, 147, 147, 209, 52, 13, 69, 81, 240, 122, 189, 56, 157, 78, 122, 122, 239, 241, 241, 159, 62, + 173, 104, 184, 121, 237, 28, 112, 85, 8, 49, 58, 233, 111, 10, 0, 73, 104, 98, 204, 115, 159, 172, 172, 44, + 22, 46, 92, 136, 36, 73, 196, 199, 199, 19, 28, 28, 76, 82, 82, 18, 154, 166, 145, 152, 152, 200, 99, 143, 61, + 70, 65, 65, 1, 163, 163, 163, 44, 94, 188, 24, 77, 211, 120, 238, 185, 231, 200, 204, 204, 164, 187, 187, 27, + 167, 219, 131, 199, 227, 193, 229, 114, 81, 223, 216, 172, 126, 180, 239, 192, 137, 166, 127, 214, 93, 0, 170, + 133, 16, 142, 31, 251, 156, 2, 64, 136, 160, 191, 55, 217, 58, 68, 210, 124, 179, 20, 31, 31, 63, 1, 234, 65, + 67, 137, 137, 137, 33, 40, 40, 8, 89, 150, 17, 66, 16, 21, 21, 69, 92, 92, 28, 178, 44, 163, 215, 235, 89, + 181, 106, 21, 146, 36, 113, 229, 202, 21, 122, 7, 38, 212, 126, 161, 234, 31, 99, 31, 239, 251, 227, 231, 247, + 122, 123, 190, 7, 106, 133, 16, 206, 135, 25, 159, 246, 107, 182, 237, 183, 239, 156, 95, 185, 252, 169, 95, + 62, 181, 104, 1, 179, 66, 67, 144, 36, 41, 240, 21, 35, 203, 114, 224, 120, 120, 62, 9, 246, 194, 119, 85, + 154, 226, 23, 52, 53, 183, 180, 125, 125, 252, 104, 225, 232, 168, 251, 202, 131, 152, 123, 30, 118, 62, 35, + 128, 237, 219, 63, 48, 12, 221, 239, 202, 55, 24, 12, 219, 141, 70, 99, 164, 52, 67, 181, 124, 212, 240, 249, + 125, 227, 157, 29, 237, 214, 27, 181, 151, 191, 27, 25, 30, 106, 5, 58, 152, 72, 55, 223, 163, 222, 153, 6, + 224, 193, 78, 116, 128, 9, 136, 3, 30, 255, 111, 1, 60, 24, 42, 208, 11, 12, 76, 42, 253, 63, 141, 127, 1, + 173, 193, 47, 22, 232, 14, 87, 117, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130, + ], + }, + + unknown: "This is an : unknown : file type", + + empty: undefined, + }, + }, + + staticParser: { + definitions: { + markdown: "The quick brown fox jumped over the lazy dog", + + html: "The quick brown fox jumped over the lazy dog", + + css: "The quick brown fox jumped over the lazy dog", + + binary: "The quick brown fox jumped over the lazy dog", + + unknown: "The quick brown fox jumped over the lazy dog", + + empty: "The quick brown fox jumped over the lazy dog", + }, + }, + + customParser: { + definitions: { + markdown: "Hello\nWorld:\n", + + html: + "\n" + + '\n' + + " \n" + + ' \n' + + ' \n' + + " \n" + + " \n" + + "

Hello World:

\n" + + " \n" + + "\n", + + css: "html {\n color: #888;\n font-family: sans-serif;\n height: 100%;\n width: 100%;\n}\n", + + binary: { + type: "Buffer", + data: [ + 137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 32, 0, 0, 0, 32, 8, 6, 0, 0, 0, 115, + 122, 122, 244, 0, 0, 0, 4, 115, 66, 73, 84, 8, 8, 8, 8, 124, 8, 100, 136, 0, 0, 0, 25, 116, 69, 88, 116, 83, + 111, 102, 116, 119, 97, 114, 101, 0, 119, 119, 119, 46, 105, 110, 107, 115, 99, 97, 112, 101, 46, 111, 114, + 103, 155, 238, 60, 26, 0, 0, 9, 170, 73, 68, 65, 84, 88, 133, 197, 151, 125, 76, 84, 103, 22, 198, 127, 247, + 206, 64, 7, 44, 227, 0, 149, 15, 97, 176, 34, 139, 174, 182, 86, 49, 46, 69, 148, 197, 80, 234, 118, 73, 181, + 49, 213, 38, 146, 172, 218, 221, 86, 151, 98, 106, 218, 198, 212, 102, 179, 180, 221, 173, 154, 102, 187, 182, + 113, 171, 181, 113, 165, 145, 138, 41, 152, 173, 160, 130, 73, 149, 116, 23, 131, 34, 42, 203, 48, 128, 195, + 135, 128, 200, 200, 71, 103, 24, 6, 24, 135, 59, 115, 239, 187, 127, 32, 179, 69, 112, 179, 127, 108, 178, + 111, 114, 63, 222, 251, 158, 155, 243, 188, 207, 121, 206, 57, 247, 74, 66, 8, 254, 159, 67, 63, 211, 195, 95, + 231, 189, 149, 168, 73, 186, 95, 161, 73, 166, 255, 181, 67, 73, 214, 106, 131, 252, 35, 167, 143, 30, 61, + 234, 3, 144, 30, 102, 96, 123, 222, 158, 143, 146, 147, 158, 124, 119, 237, 154, 52, 121, 254, 188, 120, 38, + 215, 255, 125, 157, 60, 129, 16, 26, 2, 129, 16, 160, 169, 26, 154, 208, 208, 84, 13, 191, 234, 71, 211, 52, + 132, 166, 161, 106, 19, 207, 84, 77, 195, 229, 114, 209, 216, 210, 70, 75, 235, 237, 65, 191, 207, 187, 234, + 216, 231, 127, 110, 151, 127, 236, 124, 199, 142, 119, 103, 199, 205, 141, 126, 107, 99, 78, 150, 92, 114, + 170, 136, 47, 142, 28, 102, 206, 19, 145, 220, 106, 105, 102, 87, 254, 27, 92, 175, 187, 70, 76, 244, 28, 244, + 122, 153, 195, 135, 255, 194, 167, 159, 30, 100, 86, 104, 40, 67, 78, 7, 123, 246, 188, 195, 217, 242, 50, + 226, 226, 98, 145, 16, 252, 225, 195, 15, 248, 246, 219, 191, 49, 47, 193, 76, 92, 92, 44, 229, 101, 223, 114, + 170, 248, 107, 150, 36, 63, 201, 218, 213, 63, 155, 51, 236, 246, 252, 94, 146, 164, 160, 41, 0, 20, 89, 125, + 33, 115, 117, 170, 225, 240, 225, 195, 188, 252, 242, 203, 132, 133, 133, 81, 89, 89, 201, 234, 213, 171, 201, + 201, 201, 161, 181, 181, 21, 33, 4, 37, 37, 37, 44, 90, 180, 136, 212, 212, 84, 10, 11, 11, 73, 78, 78, 102, + 199, 142, 29, 180, 180, 180, 32, 132, 32, 46, 46, 142, 221, 187, 119, 211, 212, 212, 132, 170, 170, 88, 44, + 22, 70, 71, 71, 217, 185, 115, 39, 199, 142, 29, 35, 121, 193, 60, 34, 35, 35, 54, 0, 115, 166, 0, 64, 150, + 12, 115, 99, 162, 25, 24, 24, 32, 41, 41, 137, 212, 212, 84, 110, 222, 188, 137, 78, 167, 99, 246, 236, 217, + 1, 179, 186, 186, 58, 150, 46, 93, 202, 138, 21, 43, 104, 105, 105, 65, 146, 36, 34, 35, 35, 145, 36, 41, 16, + 174, 240, 240, 112, 36, 73, 66, 85, 85, 26, 26, 26, 152, 55, 111, 30, 209, 209, 209, 184, 92, 46, 244, 122, + 61, 225, 225, 70, 3, 16, 63, 21, 0, 32, 73, 18, 70, 163, 17, 69, 81, 232, 233, 233, 33, 33, 33, 1, 33, 196, + 20, 45, 44, 88, 176, 128, 190, 190, 62, 238, 222, 189, 139, 217, 108, 158, 178, 174, 170, 42, 170, 170, 162, + 105, 26, 154, 166, 161, 170, 42, 137, 137, 137, 220, 187, 119, 143, 251, 247, 239, 19, 18, 18, 50, 225, 72, + 32, 1, 97, 211, 0, 8, 33, 216, 186, 117, 43, 123, 247, 238, 165, 170, 170, 138, 180, 180, 52, 26, 26, 26, 40, + 42, 42, 162, 162, 162, 130, 154, 154, 26, 54, 111, 222, 76, 97, 97, 33, 95, 125, 245, 21, 25, 25, 25, 216, + 237, 118, 62, 249, 228, 19, 234, 234, 234, 40, 43, 43, 195, 233, 116, 178, 127, 255, 126, 154, 154, 154, 56, + 125, 250, 52, 75, 150, 44, 193, 102, 179, 81, 80, 80, 192, 154, 53, 107, 16, 98, 194, 251, 180, 44, 216, 254, + 198, 158, 109, 239, 228, 255, 166, 112, 241, 162, 159, 160, 40, 10, 30, 143, 7, 163, 209, 136, 16, 130, 193, + 193, 65, 52, 77, 35, 56, 56, 24, 163, 209, 136, 170, 170, 184, 92, 46, 194, 195, 195, 3, 235, 62, 159, 15, 89, + 150, 49, 26, 141, 56, 28, 14, 198, 199, 199, 17, 66, 96, 50, 153, 240, 249, 124, 252, 240, 195, 15, 1, 118, + 75, 206, 92, 240, 237, 255, 96, 239, 11, 211, 24, 0, 24, 24, 24, 160, 178, 178, 18, 175, 215, 139, 16, 2, 167, + 211, 73, 109, 109, 45, 138, 162, 96, 52, 26, 1, 184, 121, 243, 38, 253, 253, 253, 8, 33, 80, 85, 21, 187, 221, + 78, 111, 111, 47, 70, 163, 145, 177, 177, 49, 234, 235, 235, 233, 239, 239, 39, 60, 60, 28, 175, 215, 203, + 149, 43, 87, 232, 233, 233, 153, 72, 79, 33, 224, 129, 94, 166, 21, 34, 33, 4, 109, 109, 109, 156, 62, 125, + 154, 129, 129, 1, 94, 125, 245, 85, 58, 59, 59, 57, 119, 238, 28, 54, 155, 141, 221, 187, 119, 83, 81, 81, + 193, 213, 171, 87, 113, 56, 28, 228, 228, 228, 96, 48, 24, 40, 43, 43, 67, 175, 215, 99, 179, 217, 120, 246, + 217, 103, 169, 175, 175, 167, 173, 173, 141, 131, 7, 15, 50, 54, 54, 134, 205, 102, 163, 166, 166, 134, 67, + 135, 14, 77, 145, 220, 140, 12, 164, 165, 165, 145, 153, 153, 25, 0, 180, 124, 249, 114, 214, 173, 91, 135, + 36, 73, 8, 33, 168, 170, 170, 98, 195, 134, 13, 228, 229, 229, 113, 233, 210, 37, 170, 171, 171, 201, 202, + 202, 34, 47, 47, 143, 234, 234, 106, 162, 162, 162, 216, 178, 101, 11, 122, 253, 196, 254, 34, 34, 34, 200, + 205, 205, 37, 56, 56, 24, 89, 150, 209, 233, 116, 129, 140, 153, 145, 129, 71, 29, 147, 235, 62, 159, 15, 189, + 94, 143, 166, 105, 0, 248, 253, 126, 244, 122, 61, 63, 214, 211, 228, 189, 78, 167, 67, 211, 52, 100, 121, 98, + 175, 65, 65, 65, 83, 236, 102, 236, 5, 253, 253, 253, 220, 190, 125, 27, 33, 4, 46, 151, 11, 159, 207, 71, 91, + 91, 27, 118, 187, 157, 193, 193, 65, 178, 178, 178, 40, 46, 46, 70, 150, 101, 82, 82, 82, 136, 141, 141, 165, + 180, 180, 148, 184, 184, 56, 86, 172, 88, 129, 162, 40, 88, 173, 86, 156, 78, 39, 118, 187, 157, 152, 152, 24, + 44, 22, 11, 110, 183, 27, 187, 221, 78, 84, 84, 212, 100, 57, 151, 166, 3, 16, 130, 209, 209, 81, 162, 162, + 162, 240, 249, 124, 116, 117, 117, 17, 25, 25, 73, 72, 72, 8, 102, 179, 153, 206, 206, 78, 178, 179, 179, 209, + 233, 116, 8, 33, 88, 185, 114, 37, 161, 161, 161, 8, 33, 112, 56, 28, 164, 167, 167, 163, 105, 26, 125, 125, + 125, 100, 100, 100, 208, 218, 218, 74, 76, 76, 12, 221, 221, 221, 100, 103, 103, 99, 179, 217, 136, 141, 141, + 125, 180, 8, 17, 130, 249, 243, 231, 147, 151, 151, 55, 133, 246, 215, 95, 127, 61, 160, 120, 33, 4, 153, 153, + 153, 83, 66, 147, 154, 154, 58, 133, 218, 109, 219, 182, 5, 52, 51, 57, 159, 180, 31, 25, 25, 9, 216, 77, 19, + 161, 42, 84, 206, 159, 63, 79, 118, 118, 54, 101, 101, 101, 8, 33, 176, 90, 173, 236, 218, 181, 139, 157, 59, + 119, 50, 48, 48, 192, 245, 235, 215, 121, 229, 149, 87, 56, 114, 228, 8, 0, 125, 125, 125, 188, 253, 246, 219, + 228, 231, 231, 211, 217, 217, 201, 216, 216, 24, 123, 246, 236, 97, 215, 174, 93, 52, 54, 54, 162, 170, 42, + 239, 189, 247, 30, 111, 190, 249, 38, 181, 181, 181, 19, 34, 124, 20, 0, 159, 79, 37, 45, 45, 141, 141, 27, + 55, 226, 112, 56, 80, 85, 149, 83, 167, 78, 177, 101, 203, 22, 114, 114, 114, 40, 47, 47, 103, 249, 242, 229, + 188, 246, 218, 107, 140, 140, 140, 32, 73, 18, 151, 46, 93, 34, 61, 61, 157, 252, 252, 124, 138, 139, 139, + 185, 118, 237, 26, 79, 63, 253, 52, 7, 14, 28, 160, 168, 168, 8, 171, 213, 138, 217, 108, 230, 208, 161, 67, + 156, 60, 121, 18, 157, 78, 247, 104, 6, 252, 126, 63, 189, 189, 189, 56, 157, 78, 250, 250, 250, 232, 234, + 234, 162, 181, 181, 21, 163, 209, 72, 84, 84, 20, 237, 237, 237, 140, 143, 143, 35, 203, 50, 170, 170, 226, + 247, 251, 185, 117, 235, 22, 102, 179, 153, 196, 196, 68, 236, 118, 59, 237, 237, 237, 36, 36, 36, 48, 103, + 206, 28, 28, 14, 71, 64, 7, 161, 161, 161, 120, 189, 94, 84, 85, 13, 164, 225, 244, 16, 168, 234, 148, 249, + 248, 248, 56, 115, 231, 206, 165, 173, 173, 141, 198, 198, 70, 18, 18, 18, 80, 20, 37, 144, 130, 178, 44, 243, + 204, 51, 207, 208, 221, 221, 77, 71, 71, 7, 11, 23, 46, 100, 217, 178, 101, 116, 116, 116, 4, 154, 85, 74, 74, + 10, 157, 157, 157, 184, 221, 110, 194, 195, 195, 9, 10, 10, 66, 25, 191, 63, 246, 72, 0, 22, 139, 133, 171, + 87, 175, 114, 249, 242, 101, 26, 27, 27, 217, 180, 105, 19, 103, 207, 158, 165, 185, 185, 153, 244, 244, 116, + 186, 186, 186, 40, 45, 45, 197, 98, 177, 112, 241, 226, 69, 94, 124, 241, 69, 44, 22, 11, 37, 37, 37, 172, 95, + 191, 158, 244, 244, 116, 250, 251, 251, 249, 236, 179, 207, 216, 188, 121, 51, 75, 151, 46, 5, 224, 253, 247, + 223, 39, 55, 55, 151, 214, 142, 46, 173, 185, 229, 86, 51, 224, 159, 214, 140, 182, 110, 94, 95, 24, 246, 120, + 8, 138, 162, 4, 118, 104, 48, 24, 208, 235, 245, 72, 146, 132, 193, 96, 32, 40, 40, 8, 77, 211, 208, 235, 245, + 4, 7, 7, 19, 18, 18, 130, 78, 167, 67, 85, 213, 128, 157, 36, 73, 244, 245, 15, 210, 216, 98, 67, 211, 38, + 178, 199, 167, 40, 184, 71, 70, 208, 84, 149, 130, 130, 223, 125, 120, 175, 167, 187, 112, 90, 26, 170, 154, + 138, 215, 235, 165, 188, 188, 156, 152, 152, 24, 50, 50, 50, 240, 251, 253, 156, 57, 115, 6, 147, 201, 196, + 134, 13, 27, 16, 66, 112, 246, 236, 89, 36, 73, 34, 55, 55, 151, 193, 193, 65, 138, 138, 138, 88, 182, 108, + 89, 160, 100, 215, 92, 187, 65, 66, 124, 28, 191, 200, 250, 57, 138, 162, 160, 40, 10, 67, 67, 67, 12, 13, 13, + 113, 178, 164, 236, 238, 189, 158, 238, 6, 160, 111, 90, 8, 52, 77, 112, 226, 196, 9, 162, 163, 163, 169, 171, + 171, 163, 161, 161, 129, 210, 210, 82, 130, 131, 131, 233, 232, 232, 224, 226, 197, 139, 84, 86, 86, 226, 114, + 185, 240, 120, 60, 20, 21, 21, 97, 48, 24, 48, 155, 205, 84, 84, 84, 160, 105, 26, 150, 70, 43, 79, 68, 68, + 144, 248, 100, 66, 64, 43, 99, 99, 99, 184, 221, 110, 46, 215, 222, 240, 254, 245, 139, 67, 71, 129, 118, 33, + 132, 119, 70, 13, 220, 185, 115, 135, 37, 75, 150, 176, 118, 237, 90, 234, 235, 235, 177, 90, 173, 172, 92, + 185, 146, 117, 235, 214, 81, 95, 95, 79, 93, 93, 29, 233, 233, 233, 188, 244, 210, 75, 220, 184, 113, 3, 147, + 201, 68, 74, 74, 10, 178, 44, 99, 179, 217, 248, 190, 186, 134, 159, 46, 76, 194, 239, 247, 163, 170, 42, 195, + 195, 195, 12, 13, 13, 113, 171, 237, 182, 246, 241, 254, 253, 135, 93, 46, 231, 101, 224, 22, 204, 80, 9, 39, + 227, 40, 203, 50, 110, 183, 155, 176, 176, 48, 102, 205, 154, 133, 223, 239, 199, 237, 118, 51, 123, 246, 108, + 124, 62, 31, 30, 143, 135, 225, 225, 97, 34, 34, 34, 2, 239, 78, 126, 152, 184, 221, 110, 252, 126, 63, 66, 8, + 220, 110, 247, 68, 79, 232, 27, 96, 223, 190, 253, 197, 119, 239, 220, 174, 2, 174, 11, 33, 148, 25, 1, 104, + 154, 198, 154, 53, 107, 56, 126, 252, 56, 35, 35, 35, 228, 230, 230, 146, 152, 152, 72, 97, 97, 33, 0, 155, + 54, 109, 194, 100, 50, 241, 229, 151, 95, 98, 50, 153, 120, 254, 249, 231, 113, 56, 28, 124, 243, 205, 55, 88, + 173, 86, 146, 147, 147, 209, 52, 13, 69, 81, 240, 122, 189, 56, 157, 78, 122, 122, 239, 241, 241, 159, 62, + 173, 104, 184, 121, 237, 28, 112, 85, 8, 49, 58, 233, 111, 10, 0, 73, 104, 98, 204, 115, 159, 172, 172, 44, + 22, 46, 92, 136, 36, 73, 196, 199, 199, 19, 28, 28, 76, 82, 82, 18, 154, 166, 145, 152, 152, 200, 99, 143, 61, + 70, 65, 65, 1, 163, 163, 163, 44, 94, 188, 24, 77, 211, 120, 238, 185, 231, 200, 204, 204, 164, 187, 187, 27, + 167, 219, 131, 199, 227, 193, 229, 114, 81, 223, 216, 172, 126, 180, 239, 192, 137, 166, 127, 214, 93, 0, 170, + 133, 16, 142, 31, 251, 156, 2, 64, 136, 160, 191, 55, 217, 58, 68, 210, 124, 179, 20, 31, 31, 63, 1, 234, 65, + 67, 137, 137, 137, 33, 40, 40, 8, 89, 150, 17, 66, 16, 21, 21, 69, 92, 92, 28, 178, 44, 163, 215, 235, 89, + 181, 106, 21, 146, 36, 113, 229, 202, 21, 122, 7, 38, 212, 126, 161, 234, 31, 99, 31, 239, 251, 227, 231, 247, + 122, 123, 190, 7, 106, 133, 16, 206, 135, 25, 159, 246, 107, 182, 237, 183, 239, 156, 95, 185, 252, 169, 95, + 62, 181, 104, 1, 179, 66, 67, 144, 36, 41, 240, 21, 35, 203, 114, 224, 120, 120, 62, 9, 246, 194, 119, 85, + 154, 226, 23, 52, 53, 183, 180, 125, 125, 252, 104, 225, 232, 168, 251, 202, 131, 152, 123, 30, 118, 62, 35, + 128, 237, 219, 63, 48, 12, 221, 239, 202, 55, 24, 12, 219, 141, 70, 99, 164, 52, 67, 181, 124, 212, 240, 249, + 125, 227, 157, 29, 237, 214, 27, 181, 151, 191, 27, 25, 30, 106, 5, 58, 152, 72, 55, 223, 163, 222, 153, 6, + 224, 193, 78, 116, 128, 9, 136, 3, 30, 255, 111, 1, 60, 24, 42, 208, 11, 12, 76, 42, 253, 63, 141, 127, 1, + 173, 193, 47, 22, 232, 14, 87, 117, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130, + ], + }, + + unknown: "epyt elif : nwonknu : na si sihT", + + empty: undefined, + }, + }, + + binaryParser: { + definitions: { + markdown: { type: "Buffer", data: [72, 101, 108, 108, 111, 10, 87, 111, 114, 108, 100, 58, 10] }, + + html: { + type: "Buffer", + data: [ + 60, 33, 68, 79, 67, 84, 89, 80, 69, 32, 104, 116, 109, 108, 62, 10, 60, 104, 116, 109, 108, 32, 108, 97, 110, + 103, 61, 34, 101, 110, 34, 62, 10, 32, 32, 60, 104, 101, 97, 100, 62, 10, 32, 32, 32, 32, 60, 109, 101, 116, + 97, 32, 99, 104, 97, 114, 115, 101, 116, 61, 34, 117, 116, 102, 45, 56, 34, 32, 47, 62, 10, 32, 32, 32, 32, + 60, 108, 105, 110, 107, 32, 114, 101, 108, 61, 34, 115, 116, 121, 108, 101, 115, 104, 101, 101, 116, 34, 32, + 104, 114, 101, 102, 61, 34, 115, 116, 121, 108, 101, 46, 99, 115, 115, 34, 32, 47, 62, 10, 32, 32, 60, 47, + 104, 101, 97, 100, 62, 10, 32, 32, 60, 98, 111, 100, 121, 62, 10, 32, 32, 32, 32, 60, 104, 49, 62, 72, 101, + 108, 108, 111, 32, 87, 111, 114, 108, 100, 58, 60, 47, 104, 49, 62, 10, 32, 32, 60, 47, 98, 111, 100, 121, 62, + 10, 60, 47, 104, 116, 109, 108, 62, 10, + ], + }, + + css: { + type: "Buffer", + data: [ + 104, 116, 109, 108, 32, 123, 10, 32, 32, 99, 111, 108, 111, 114, 58, 32, 35, 56, 56, 56, 59, 10, 32, 32, 102, + 111, 110, 116, 45, 102, 97, 109, 105, 108, 121, 58, 32, 115, 97, 110, 115, 45, 115, 101, 114, 105, 102, 59, + 10, 32, 32, 104, 101, 105, 103, 104, 116, 58, 32, 49, 48, 48, 37, 59, 10, 32, 32, 119, 105, 100, 116, 104, 58, + 32, 49, 48, 48, 37, 59, 10, 125, 10, + ], + }, + + binary: { + type: "Buffer", + data: [ + 137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 32, 0, 0, 0, 32, 8, 6, 0, 0, 0, 115, + 122, 122, 244, 0, 0, 0, 4, 115, 66, 73, 84, 8, 8, 8, 8, 124, 8, 100, 136, 0, 0, 0, 25, 116, 69, 88, 116, 83, + 111, 102, 116, 119, 97, 114, 101, 0, 119, 119, 119, 46, 105, 110, 107, 115, 99, 97, 112, 101, 46, 111, 114, + 103, 155, 238, 60, 26, 0, 0, 9, 170, 73, 68, 65, 84, 88, 133, 197, 151, 125, 76, 84, 103, 22, 198, 127, 247, + 206, 64, 7, 44, 227, 0, 149, 15, 97, 176, 34, 139, 174, 182, 86, 49, 46, 69, 148, 197, 80, 234, 118, 73, 181, + 49, 213, 38, 146, 172, 218, 221, 86, 151, 98, 106, 218, 198, 212, 102, 179, 180, 221, 173, 154, 102, 187, 182, + 113, 171, 181, 113, 165, 145, 138, 41, 152, 173, 160, 130, 73, 149, 116, 23, 131, 34, 42, 203, 48, 128, 195, + 135, 128, 200, 200, 71, 103, 24, 6, 24, 135, 59, 115, 239, 187, 127, 32, 179, 69, 112, 179, 127, 108, 178, + 111, 114, 63, 222, 251, 158, 155, 243, 188, 207, 121, 206, 57, 247, 74, 66, 8, 254, 159, 67, 63, 211, 195, 95, + 231, 189, 149, 168, 73, 186, 95, 161, 73, 166, 255, 181, 67, 73, 214, 106, 131, 252, 35, 167, 143, 30, 61, + 234, 3, 144, 30, 102, 96, 123, 222, 158, 143, 146, 147, 158, 124, 119, 237, 154, 52, 121, 254, 188, 120, 38, + 215, 255, 125, 157, 60, 129, 16, 26, 2, 129, 16, 160, 169, 26, 154, 208, 208, 84, 13, 191, 234, 71, 211, 52, + 132, 166, 161, 106, 19, 207, 84, 77, 195, 229, 114, 209, 216, 210, 70, 75, 235, 237, 65, 191, 207, 187, 234, + 216, 231, 127, 110, 151, 127, 236, 124, 199, 142, 119, 103, 199, 205, 141, 126, 107, 99, 78, 150, 92, 114, + 170, 136, 47, 142, 28, 102, 206, 19, 145, 220, 106, 105, 102, 87, 254, 27, 92, 175, 187, 70, 76, 244, 28, 244, + 122, 153, 195, 135, 255, 194, 167, 159, 30, 100, 86, 104, 40, 67, 78, 7, 123, 246, 188, 195, 217, 242, 50, + 226, 226, 98, 145, 16, 252, 225, 195, 15, 248, 246, 219, 191, 49, 47, 193, 76, 92, 92, 44, 229, 101, 223, 114, + 170, 248, 107, 150, 36, 63, 201, 218, 213, 63, 155, 51, 236, 246, 252, 94, 146, 164, 160, 41, 0, 20, 89, 125, + 33, 115, 117, 170, 225, 240, 225, 195, 188, 252, 242, 203, 132, 133, 133, 81, 89, 89, 201, 234, 213, 171, 201, + 201, 201, 161, 181, 181, 21, 33, 4, 37, 37, 37, 44, 90, 180, 136, 212, 212, 84, 10, 11, 11, 73, 78, 78, 102, + 199, 142, 29, 180, 180, 180, 32, 132, 32, 46, 46, 142, 221, 187, 119, 211, 212, 212, 132, 170, 170, 88, 44, + 22, 70, 71, 71, 217, 185, 115, 39, 199, 142, 29, 35, 121, 193, 60, 34, 35, 35, 54, 0, 115, 166, 0, 64, 150, + 12, 115, 99, 162, 25, 24, 24, 32, 41, 41, 137, 212, 212, 84, 110, 222, 188, 137, 78, 167, 99, 246, 236, 217, + 1, 179, 186, 186, 58, 150, 46, 93, 202, 138, 21, 43, 104, 105, 105, 65, 146, 36, 34, 35, 35, 145, 36, 41, 16, + 174, 240, 240, 112, 36, 73, 66, 85, 85, 26, 26, 26, 152, 55, 111, 30, 209, 209, 209, 184, 92, 46, 244, 122, + 61, 225, 225, 70, 3, 16, 63, 21, 0, 32, 73, 18, 70, 163, 17, 69, 81, 232, 233, 233, 33, 33, 33, 1, 33, 196, + 20, 45, 44, 88, 176, 128, 190, 190, 62, 238, 222, 189, 139, 217, 108, 158, 178, 174, 170, 42, 170, 170, 162, + 105, 26, 154, 166, 161, 170, 42, 137, 137, 137, 220, 187, 119, 143, 251, 247, 239, 19, 18, 18, 50, 225, 72, + 32, 1, 97, 211, 0, 8, 33, 216, 186, 117, 43, 123, 247, 238, 165, 170, 170, 138, 180, 180, 52, 26, 26, 26, 40, + 42, 42, 162, 162, 162, 130, 154, 154, 26, 54, 111, 222, 76, 97, 97, 33, 95, 125, 245, 21, 25, 25, 25, 216, + 237, 118, 62, 249, 228, 19, 234, 234, 234, 40, 43, 43, 195, 233, 116, 178, 127, 255, 126, 154, 154, 154, 56, + 125, 250, 52, 75, 150, 44, 193, 102, 179, 81, 80, 80, 192, 154, 53, 107, 16, 98, 194, 251, 180, 44, 216, 254, + 198, 158, 109, 239, 228, 255, 166, 112, 241, 162, 159, 160, 40, 10, 30, 143, 7, 163, 209, 136, 16, 130, 193, + 193, 65, 52, 77, 35, 56, 56, 24, 163, 209, 136, 170, 170, 184, 92, 46, 194, 195, 195, 3, 235, 62, 159, 15, 89, + 150, 49, 26, 141, 56, 28, 14, 198, 199, 199, 17, 66, 96, 50, 153, 240, 249, 124, 252, 240, 195, 15, 1, 118, + 75, 206, 92, 240, 237, 255, 96, 239, 11, 211, 24, 0, 24, 24, 24, 160, 178, 178, 18, 175, 215, 139, 16, 2, 167, + 211, 73, 109, 109, 45, 138, 162, 96, 52, 26, 1, 184, 121, 243, 38, 253, 253, 253, 8, 33, 80, 85, 21, 187, 221, + 78, 111, 111, 47, 70, 163, 145, 177, 177, 49, 234, 235, 235, 233, 239, 239, 39, 60, 60, 28, 175, 215, 203, + 149, 43, 87, 232, 233, 233, 153, 72, 79, 33, 224, 129, 94, 166, 21, 34, 33, 4, 109, 109, 109, 156, 62, 125, + 154, 129, 129, 1, 94, 125, 245, 85, 58, 59, 59, 57, 119, 238, 28, 54, 155, 141, 221, 187, 119, 83, 81, 81, + 193, 213, 171, 87, 113, 56, 28, 228, 228, 228, 96, 48, 24, 40, 43, 43, 67, 175, 215, 99, 179, 217, 120, 246, + 217, 103, 169, 175, 175, 167, 173, 173, 141, 131, 7, 15, 50, 54, 54, 134, 205, 102, 163, 166, 166, 134, 67, + 135, 14, 77, 145, 220, 140, 12, 164, 165, 165, 145, 153, 153, 25, 0, 180, 124, 249, 114, 214, 173, 91, 135, + 36, 73, 8, 33, 168, 170, 170, 98, 195, 134, 13, 228, 229, 229, 113, 233, 210, 37, 170, 171, 171, 201, 202, + 202, 34, 47, 47, 143, 234, 234, 106, 162, 162, 162, 216, 178, 101, 11, 122, 253, 196, 254, 34, 34, 34, 200, + 205, 205, 37, 56, 56, 24, 89, 150, 209, 233, 116, 129, 140, 153, 145, 129, 71, 29, 147, 235, 62, 159, 15, 189, + 94, 143, 166, 105, 0, 248, 253, 126, 244, 122, 61, 63, 214, 211, 228, 189, 78, 167, 67, 211, 52, 100, 121, 98, + 175, 65, 65, 65, 83, 236, 102, 236, 5, 253, 253, 253, 220, 190, 125, 27, 33, 4, 46, 151, 11, 159, 207, 71, 91, + 91, 27, 118, 187, 157, 193, 193, 65, 178, 178, 178, 40, 46, 46, 70, 150, 101, 82, 82, 82, 136, 141, 141, 165, + 180, 180, 148, 184, 184, 56, 86, 172, 88, 129, 162, 40, 88, 173, 86, 156, 78, 39, 118, 187, 157, 152, 152, 24, + 44, 22, 11, 110, 183, 27, 187, 221, 78, 84, 84, 212, 100, 57, 151, 166, 3, 16, 130, 209, 209, 81, 162, 162, + 162, 240, 249, 124, 116, 117, 117, 17, 25, 25, 73, 72, 72, 8, 102, 179, 153, 206, 206, 78, 178, 179, 179, 209, + 233, 116, 8, 33, 88, 185, 114, 37, 161, 161, 161, 8, 33, 112, 56, 28, 164, 167, 167, 163, 105, 26, 125, 125, + 125, 100, 100, 100, 208, 218, 218, 74, 76, 76, 12, 221, 221, 221, 100, 103, 103, 99, 179, 217, 136, 141, 141, + 125, 180, 8, 17, 130, 249, 243, 231, 147, 151, 151, 55, 133, 246, 215, 95, 127, 61, 160, 120, 33, 4, 153, 153, + 153, 83, 66, 147, 154, 154, 58, 133, 218, 109, 219, 182, 5, 52, 51, 57, 159, 180, 31, 25, 25, 9, 216, 77, 19, + 161, 42, 84, 206, 159, 63, 79, 118, 118, 54, 101, 101, 101, 8, 33, 176, 90, 173, 236, 218, 181, 139, 157, 59, + 119, 50, 48, 48, 192, 245, 235, 215, 121, 229, 149, 87, 56, 114, 228, 8, 0, 125, 125, 125, 188, 253, 246, 219, + 228, 231, 231, 211, 217, 217, 201, 216, 216, 24, 123, 246, 236, 97, 215, 174, 93, 52, 54, 54, 162, 170, 42, + 239, 189, 247, 30, 111, 190, 249, 38, 181, 181, 181, 19, 34, 124, 20, 0, 159, 79, 37, 45, 45, 141, 141, 27, + 55, 226, 112, 56, 80, 85, 149, 83, 167, 78, 177, 101, 203, 22, 114, 114, 114, 40, 47, 47, 103, 249, 242, 229, + 188, 246, 218, 107, 140, 140, 140, 32, 73, 18, 151, 46, 93, 34, 61, 61, 157, 252, 252, 124, 138, 139, 139, + 185, 118, 237, 26, 79, 63, 253, 52, 7, 14, 28, 160, 168, 168, 8, 171, 213, 138, 217, 108, 230, 208, 161, 67, + 156, 60, 121, 18, 157, 78, 247, 104, 6, 252, 126, 63, 189, 189, 189, 56, 157, 78, 250, 250, 250, 232, 234, + 234, 162, 181, 181, 21, 163, 209, 72, 84, 84, 20, 237, 237, 237, 140, 143, 143, 35, 203, 50, 170, 170, 226, + 247, 251, 185, 117, 235, 22, 102, 179, 153, 196, 196, 68, 236, 118, 59, 237, 237, 237, 36, 36, 36, 48, 103, + 206, 28, 28, 14, 71, 64, 7, 161, 161, 161, 120, 189, 94, 84, 85, 13, 164, 225, 244, 16, 168, 234, 148, 249, + 248, 248, 56, 115, 231, 206, 165, 173, 173, 141, 198, 198, 70, 18, 18, 18, 80, 20, 37, 144, 130, 178, 44, 243, + 204, 51, 207, 208, 221, 221, 77, 71, 71, 7, 11, 23, 46, 100, 217, 178, 101, 116, 116, 116, 4, 154, 85, 74, 74, + 10, 157, 157, 157, 184, 221, 110, 194, 195, 195, 9, 10, 10, 66, 25, 191, 63, 246, 72, 0, 22, 139, 133, 171, + 87, 175, 114, 249, 242, 101, 26, 27, 27, 217, 180, 105, 19, 103, 207, 158, 165, 185, 185, 153, 244, 244, 116, + 186, 186, 186, 40, 45, 45, 197, 98, 177, 112, 241, 226, 69, 94, 124, 241, 69, 44, 22, 11, 37, 37, 37, 172, 95, + 191, 158, 244, 244, 116, 250, 251, 251, 249, 236, 179, 207, 216, 188, 121, 51, 75, 151, 46, 5, 224, 253, 247, + 223, 39, 55, 55, 151, 214, 142, 46, 173, 185, 229, 86, 51, 224, 159, 214, 140, 182, 110, 94, 95, 24, 246, 120, + 8, 138, 162, 4, 118, 104, 48, 24, 208, 235, 245, 72, 146, 132, 193, 96, 32, 40, 40, 8, 77, 211, 208, 235, 245, + 4, 7, 7, 19, 18, 18, 130, 78, 167, 67, 85, 213, 128, 157, 36, 73, 244, 245, 15, 210, 216, 98, 67, 211, 38, + 178, 199, 167, 40, 184, 71, 70, 208, 84, 149, 130, 130, 223, 125, 120, 175, 167, 187, 112, 90, 26, 170, 154, + 138, 215, 235, 165, 188, 188, 156, 152, 152, 24, 50, 50, 50, 240, 251, 253, 156, 57, 115, 6, 147, 201, 196, + 134, 13, 27, 16, 66, 112, 246, 236, 89, 36, 73, 34, 55, 55, 151, 193, 193, 65, 138, 138, 138, 88, 182, 108, + 89, 160, 100, 215, 92, 187, 65, 66, 124, 28, 191, 200, 250, 57, 138, 162, 160, 40, 10, 67, 67, 67, 12, 13, 13, + 113, 178, 164, 236, 238, 189, 158, 238, 6, 160, 111, 90, 8, 52, 77, 112, 226, 196, 9, 162, 163, 163, 169, 171, + 171, 163, 161, 161, 129, 210, 210, 82, 130, 131, 131, 233, 232, 232, 224, 226, 197, 139, 84, 86, 86, 226, 114, + 185, 240, 120, 60, 20, 21, 21, 97, 48, 24, 48, 155, 205, 84, 84, 84, 160, 105, 26, 150, 70, 43, 79, 68, 68, + 144, 248, 100, 66, 64, 43, 99, 99, 99, 184, 221, 110, 46, 215, 222, 240, 254, 245, 139, 67, 71, 129, 118, 33, + 132, 119, 70, 13, 220, 185, 115, 135, 37, 75, 150, 176, 118, 237, 90, 234, 235, 235, 177, 90, 173, 172, 92, + 185, 146, 117, 235, 214, 81, 95, 95, 79, 93, 93, 29, 233, 233, 233, 188, 244, 210, 75, 220, 184, 113, 3, 147, + 201, 68, 74, 74, 10, 178, 44, 99, 179, 217, 248, 190, 186, 134, 159, 46, 76, 194, 239, 247, 163, 170, 42, 195, + 195, 195, 12, 13, 13, 113, 171, 237, 182, 246, 241, 254, 253, 135, 93, 46, 231, 101, 224, 22, 204, 80, 9, 39, + 227, 40, 203, 50, 110, 183, 155, 176, 176, 48, 102, 205, 154, 133, 223, 239, 199, 237, 118, 51, 123, 246, 108, + 124, 62, 31, 30, 143, 135, 225, 225, 97, 34, 34, 34, 2, 239, 78, 126, 152, 184, 221, 110, 252, 126, 63, 66, 8, + 220, 110, 247, 68, 79, 232, 27, 96, 223, 190, 253, 197, 119, 239, 220, 174, 2, 174, 11, 33, 148, 25, 1, 104, + 154, 198, 154, 53, 107, 56, 126, 252, 56, 35, 35, 35, 228, 230, 230, 146, 152, 152, 72, 97, 97, 33, 0, 155, + 54, 109, 194, 100, 50, 241, 229, 151, 95, 98, 50, 153, 120, 254, 249, 231, 113, 56, 28, 124, 243, 205, 55, 88, + 173, 86, 146, 147, 147, 209, 52, 13, 69, 81, 240, 122, 189, 56, 157, 78, 122, 122, 239, 241, 241, 159, 62, + 173, 104, 184, 121, 237, 28, 112, 85, 8, 49, 58, 233, 111, 10, 0, 73, 104, 98, 204, 115, 159, 172, 172, 44, + 22, 46, 92, 136, 36, 73, 196, 199, 199, 19, 28, 28, 76, 82, 82, 18, 154, 166, 145, 152, 152, 200, 99, 143, 61, + 70, 65, 65, 1, 163, 163, 163, 44, 94, 188, 24, 77, 211, 120, 238, 185, 231, 200, 204, 204, 164, 187, 187, 27, + 167, 219, 131, 199, 227, 193, 229, 114, 81, 223, 216, 172, 126, 180, 239, 192, 137, 166, 127, 214, 93, 0, 170, + 133, 16, 142, 31, 251, 156, 2, 64, 136, 160, 191, 55, 217, 58, 68, 210, 124, 179, 20, 31, 31, 63, 1, 234, 65, + 67, 137, 137, 137, 33, 40, 40, 8, 89, 150, 17, 66, 16, 21, 21, 69, 92, 92, 28, 178, 44, 163, 215, 235, 89, + 181, 106, 21, 146, 36, 113, 229, 202, 21, 122, 7, 38, 212, 126, 161, 234, 31, 99, 31, 239, 251, 227, 231, 247, + 122, 123, 190, 7, 106, 133, 16, 206, 135, 25, 159, 246, 107, 182, 237, 183, 239, 156, 95, 185, 252, 169, 95, + 62, 181, 104, 1, 179, 66, 67, 144, 36, 41, 240, 21, 35, 203, 114, 224, 120, 120, 62, 9, 246, 194, 119, 85, + 154, 226, 23, 52, 53, 183, 180, 125, 125, 252, 104, 225, 232, 168, 251, 202, 131, 152, 123, 30, 118, 62, 35, + 128, 237, 219, 63, 48, 12, 221, 239, 202, 55, 24, 12, 219, 141, 70, 99, 164, 52, 67, 181, 124, 212, 240, 249, + 125, 227, 157, 29, 237, 214, 27, 181, 151, 191, 27, 25, 30, 106, 5, 58, 152, 72, 55, 223, 163, 222, 153, 6, + 224, 193, 78, 116, 128, 9, 136, 3, 30, 255, 111, 1, 60, 24, 42, 208, 11, 12, 76, 42, 253, 63, 141, 127, 1, + 173, 193, 47, 22, 232, 14, 87, 117, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130, + ], + }, + + unknown: { + type: "Buffer", + data: [ + 84, 104, 105, 115, 32, 105, 115, 32, 97, 110, 32, 58, 32, 117, 110, 107, 110, 111, 119, 110, 32, 58, 32, 102, + 105, 108, 101, 32, 116, 121, 112, 101, + ], + }, + + empty: { type: "Buffer", data: [] }, + }, + }, +}; diff --git a/test/specs/parsers/files/page.html b/test/specs/parsers/files/page.html index 33d5f30e..e161b647 100644 --- a/test/specs/parsers/files/page.html +++ b/test/specs/parsers/files/page.html @@ -1,10 +1,10 @@ - + - - - - - -

Hello World:

- + + + + + +

Hello World:

+ diff --git a/test/specs/parsers/parsed.js b/test/specs/parsers/parsed.js deleted file mode 100644 index 90d859ee..00000000 --- a/test/specs/parsers/parsed.js +++ /dev/null @@ -1,24 +0,0 @@ -export default { - schema: { - definitions: { - markdown: { - $ref: "files/README.md" - }, - html: { - $ref: "files/page.html" - }, - css: { - $ref: "files/style.css" - }, - binary: { - $ref: "files/binary.png" - }, - unknown: { - $ref: "files/unknown.foo" - }, - empty: { - $ref: "files/empty" - } - } - }, -}; diff --git a/test/specs/parsers/parsed.ts b/test/specs/parsers/parsed.ts new file mode 100644 index 00000000..4c211f89 --- /dev/null +++ b/test/specs/parsers/parsed.ts @@ -0,0 +1,24 @@ +export default { + schema: { + definitions: { + markdown: { + $ref: "files/README.md", + }, + html: { + $ref: "files/page.html", + }, + css: { + $ref: "files/style.css", + }, + binary: { + $ref: "files/binary.png", + }, + unknown: { + $ref: "files/unknown.foo", + }, + empty: { + $ref: "files/empty", + }, + }, + }, +}; diff --git a/test/specs/parsers/parsers.spec.js b/test/specs/parsers/parsers.spec.ts similarity index 55% rename from test/specs/parsers/parsers.spec.js rename to test/specs/parsers/parsers.spec.ts index 95a62b0a..c76b04fe 100644 --- a/test/specs/parsers/parsers.spec.js +++ b/test/specs/parsers/parsers.spec.ts @@ -1,36 +1,47 @@ -import chai from "chai"; -import chaiSubset from "chai-subset"; -chai.use(chaiSubset); -const { expect } = chai; +import { describe, it } from "vitest"; +import { expect } from "vitest"; import $RefParser from "../../../lib/index.js"; import helper from "../../utils/helper.js"; import path from "../../utils/path.js"; import parsedSchema from "./parsed.js"; import dereferencedSchema from "./dereferenced.js"; import { JSONParserErrorGroup, ParserError, UnmatchedParserError } from "../../../lib/util/errors.js"; +import type { Options } from "../../../lib/options"; +import type { ParserOptions } from "../../../lib/options"; describe("References to non-JSON files", () => { + const baseUrl = path.rel("test/specs/parsers/parsers.yaml"); it("should parse successfully", async () => { - const schema = await $RefParser - .parse(path.rel("specs/parsers/parsers.yaml")); + const schema = await $RefParser.parse(baseUrl); expect(schema).to.deep.equal(parsedSchema.schema); }); - it("should resolve successfully", helper.testResolve( - path.rel("specs/parsers/parsers.yaml"), - path.abs("specs/parsers/parsers.yaml"), parsedSchema.schema, - path.abs("specs/parsers/files/README.md"), dereferencedSchema.defaultParsers.definitions.markdown, - path.abs("specs/parsers/files/page.html"), dereferencedSchema.defaultParsers.definitions.html, - path.abs("specs/parsers/files/style.css"), dereferencedSchema.defaultParsers.definitions.css, - path.abs("specs/parsers/files/binary.png"), dereferencedSchema.defaultParsers.definitions.binary, - path.abs("specs/parsers/files/unknown.foo"), dereferencedSchema.defaultParsers.definitions.unknown, - path.abs("specs/parsers/files/empty"), dereferencedSchema.defaultParsers.definitions.empty - )); + it( + "should resolve successfully", + helper.testResolve( + baseUrl, + path.abs("test/specs/parsers/parsers.yaml"), + parsedSchema.schema, + path.abs("test/specs/parsers/files/README.md"), + dereferencedSchema.defaultParsers.definitions.markdown, + path.abs("test/specs/parsers/files/page.html"), + dereferencedSchema.defaultParsers.definitions.html, + path.abs("test/specs/parsers/files/style.css"), + dereferencedSchema.defaultParsers.definitions.css, + path.abs("test/specs/parsers/files/binary.png"), + dereferencedSchema.defaultParsers.definitions.binary, + path.abs("test/specs/parsers/files/unknown.foo"), + dereferencedSchema.defaultParsers.definitions.unknown, + path.abs("test/specs/parsers/files/empty"), + dereferencedSchema.defaultParsers.definitions.empty, + ), + ); it("should dereference successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.dereference(path.rel("specs/parsers/parsers.yaml")); + const parser = new $RefParser(); + const schema = await parser.dereference(baseUrl); expect(schema).to.equal(parser.schema); + // @ts-expect-error TS(2532): Object is possibly 'undefined'. schema.definitions.binary = helper.convertNodeBuffersToPOJOs(schema.definitions.binary); expect(schema).to.deep.equal(dereferencedSchema.defaultParsers); // The "circular" flag should NOT be set @@ -38,37 +49,38 @@ describe("References to non-JSON files", () => { }); it("should bundle successfully", async () => { - const schema = await $RefParser - .bundle(path.rel("specs/parsers/parsers.yaml")); - schema.definitions.binary = helper.convertNodeBuffersToPOJOs(schema.definitions.binary); + const schema = await $RefParser.bundle(baseUrl); + schema.definitions!.binary = helper.convertNodeBuffersToPOJOs(schema.definitions!.binary); expect(schema).to.deep.equal(dereferencedSchema.defaultParsers); }); it('should parse text as binary if "parse.text" is disabled', async () => { - const schema = await $RefParser.dereference(path.rel("specs/parsers/parsers.yaml"), { + const opts = { parse: { // Disable the text parser text: false, // Parse all non-YAML files as binary binary: { - canParse (file) { + canParse(file: any) { return file.url.substr(-5) !== ".yaml"; - } - } - } - }); - schema.definitions.markdown = helper.convertNodeBuffersToPOJOs(schema.definitions.markdown); - schema.definitions.html = helper.convertNodeBuffersToPOJOs(schema.definitions.html); - schema.definitions.css = helper.convertNodeBuffersToPOJOs(schema.definitions.css); - schema.definitions.binary = helper.convertNodeBuffersToPOJOs(schema.definitions.binary); - schema.definitions.unknown = helper.convertNodeBuffersToPOJOs(schema.definitions.unknown); - schema.definitions.empty = helper.convertNodeBuffersToPOJOs(schema.definitions.empty); + }, + }, + }, + } as Options; + const schema = await $RefParser.dereference(baseUrl, opts); + const definitions = schema.definitions!; + definitions.markdown = helper.convertNodeBuffersToPOJOs(definitions.markdown); + definitions.html = helper.convertNodeBuffersToPOJOs(definitions.html); + definitions.css = helper.convertNodeBuffersToPOJOs(definitions.css); + definitions.binary = helper.convertNodeBuffersToPOJOs(definitions.binary); + definitions.unknown = helper.convertNodeBuffersToPOJOs(definitions.unknown); + definitions.empty = helper.convertNodeBuffersToPOJOs(definitions.empty); expect(schema).to.deep.equal(dereferencedSchema.binaryParser); }); it("should throw an error if no parser can be matched", async () => { try { - await $RefParser.dereference(path.rel("specs/parsers/parsers.yaml"), { + await $RefParser.dereference(baseUrl, { parse: { yaml: false, json: false, @@ -77,22 +89,24 @@ describe("References to non-JSON files", () => { }, }); helper.shouldNotGetCalled(); - } - catch (err) { + } catch (err) { expect(err).to.be.an.instanceOf(SyntaxError); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.message).to.contain("Unable to parse "); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.message).to.contain("parsers/parsers.yaml"); } }); it("should throw an error if no parser returned a result", async () => { try { - await $RefParser.dereference(path.rel("specs/parsers/parsers.yaml"), { + await $RefParser.dereference(baseUrl, { parse: { yaml: { canParse: true, - parse () { - } + parse() { + return; + }, }, json: false, text: false, @@ -100,130 +114,137 @@ describe("References to non-JSON files", () => { }, }); helper.shouldNotGetCalled(); - } - catch (err) { + } catch (err) { // would time out otherwise expect(err).to.be.an.instanceOf(ParserError); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.message).to.contain("No promise has been returned or callback has been called."); } }); it('should throw an error if "parse.text" and "parse.binary" are disabled', async () => { try { - await $RefParser.dereference(path.rel("specs/parsers/parsers.yaml"), { parse: { text: false, binary: false }}); + await $RefParser.dereference(baseUrl, { + parse: { text: false, binary: false }, + }); helper.shouldNotGetCalled(); - } - catch (err) { + } catch (err) { expect(err).to.be.an.instanceOf(ParserError); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.message).to.contain("Error parsing "); } }); it("should use a custom parser with static values", async () => { - const schema = await $RefParser.dereference(path.rel("specs/parsers/parsers.yaml"), { + const schema = await $RefParser.dereference(baseUrl, { parse: { // A custom parser that always returns the same value staticParser: { order: 201, canParse: true, - parse: "The quick brown fox jumped over the lazy dog" - } - } - }); + parse: "The quick brown fox jumped over the lazy dog", + }, + }, + } as ParserOptions); expect(schema).to.deep.equal(dereferencedSchema.staticParser); }); it("should use a custom parser that returns a value", async () => { - const schema = await $RefParser.dereference(path.rel("specs/parsers/parsers.yaml"), { + const schema = await $RefParser.dereference(baseUrl, { parse: { // A custom parser that returns the contents of ".foo" files, in reverse reverseFooParser: { - canParse (file) { + canParse(file: any) { return file.url.substr(-4) === ".foo"; }, - parse (file) { + parse(file: any) { return file.data.toString().split("").reverse().join(""); - } - } - } + }, + }, + }, }); + // @ts-expect-error TS(2339): Property 'definitions' does not exist on type 'voi... Remove this comment to see the full error message schema.definitions.binary = helper.convertNodeBuffersToPOJOs(schema.definitions.binary); expect(schema).to.deep.equal(dereferencedSchema.customParser); }); it("should use a custom parser that calls a callback", async () => { - const schema = await $RefParser.dereference(path.rel("specs/parsers/parsers.yaml"), { + const schema = await $RefParser.dereference(baseUrl, { parse: { // A custom parser that returns the contents of ".foo" files, in reverse reverseFooParser: { canParse: /\.FOO$/i, - parse (file, callback) { - let reversed = file.data.toString().split("").reverse().join(""); + parse(file: any, callback: any) { + const reversed = file.data.toString().split("").reverse().join(""); callback(null, reversed); - } - } - } + }, + }, + }, }); + // @ts-expect-error TS(2339): Property 'definitions' does not exist on type 'voi... Remove this comment to see the full error message schema.definitions.binary = helper.convertNodeBuffersToPOJOs(schema.definitions.binary); expect(schema).to.deep.equal(dereferencedSchema.customParser); }); it("should use a custom parser that returns a promise", async () => { - const schema = await $RefParser.dereference(path.rel("specs/parsers/parsers.yaml"), { + const schema = await $RefParser.dereference(baseUrl, { parse: { // A custom parser that returns the contents of ".foo" files, in reverse reverseFooParser: { canParse: [".foo"], - async parse (file) { - let reversed = await new Promise((resolve) => { + async parse(file: any) { + const reversed = await new Promise((resolve) => { resolve(file.data.toString().split("").reverse().join("")); }); return reversed; - } - } - } + }, + }, + }, }); + // @ts-expect-error TS(2339): Property 'definitions' does not exist on type 'voi... Remove this comment to see the full error message schema.definitions.binary = helper.convertNodeBuffersToPOJOs(schema.definitions.binary); expect(schema).to.deep.equal(dereferencedSchema.customParser); }); it("should continue parsing if a custom parser fails", async () => { - const schema = await $RefParser.dereference(path.rel("specs/parsers/parsers.yaml"), { + const schema = await $RefParser.dereference(baseUrl, { parse: { // A custom parser that always fails, // so the built-in parsers will be used as a fallback badParser: { order: 1, canParse: /\.(md|html|css|png)$/i, - parse (file, callback) { + parse(file: any, callback: any) { callback("BOMB!!!"); - } - } - } + }, + }, + }, }); + // @ts-expect-error TS(2339): Property 'definitions' does not exist on type 'voi... Remove this comment to see the full error message schema.definitions.binary = helper.convertNodeBuffersToPOJOs(schema.definitions.binary); expect(schema).to.deep.equal(dereferencedSchema.defaultParsers); }); it("should normalize errors thrown by parsers", async () => { try { - await $RefParser.dereference(path.rel("specs/parsers/parsers.yaml"), { + await $RefParser.dereference(baseUrl, { parse: { // A custom parser that always fails, // so the built-in parsers will be used as a fallback yaml: { order: 1, - parse () { + parse() { throw new Error("Woops"); - } - } - } + }, + }, + }, }); helper.shouldNotGetCalled(); - } - catch (err) { + } catch (err) { expect(err).to.be.instanceof(ParserError); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.message).to.contain("Error parsing"); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.message).to.contain("arsers/parsers.yaml: Woops"); } }); @@ -231,7 +252,8 @@ describe("References to non-JSON files", () => { it("should throw a grouped error if no parser can be matched and continueOnError is true", async () => { try { const parser = new $RefParser(); - await parser.dereference(path.rel("specs/parsers/parsers.yaml"), { + + await parser.dereference(baseUrl, { parse: { yaml: false, json: false, @@ -241,16 +263,18 @@ describe("References to non-JSON files", () => { continueOnError: true, }); helper.shouldNotGetCalled(); - } - catch (err) { + } catch (err) { expect(err).to.be.instanceof(JSONParserErrorGroup); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.errors.length).to.equal(1); + // @ts-expect-error TS(2571): Object is of type 'unknown'. expect(err.errors).to.containSubset([ { name: UnmatchedParserError.name, - message: message => message.startsWith("Could not find parser for"), + message: (message: any) => message.startsWith("Could not find parser for"), path: [], - source: message => message.endsWith("specs/parsers/parsers.yaml") || message.startsWith("http://localhost"), + source: (message: any) => + message.endsWith("specs/parsers/parsers.yaml") || message.startsWith("http://localhost"), }, ]); } diff --git a/test/specs/parsers/parsers.yaml b/test/specs/parsers/parsers.yaml index c27dfe53..2e0de43b 100644 --- a/test/specs/parsers/parsers.yaml +++ b/test/specs/parsers/parsers.yaml @@ -11,4 +11,3 @@ definitions: $ref: files/unknown.foo empty: $ref: files/empty - diff --git a/test/specs/ref-in-excluded-path/dereferenced.js b/test/specs/ref-in-excluded-path/dereferenced.ts similarity index 57% rename from test/specs/ref-in-excluded-path/dereferenced.js rename to test/specs/ref-in-excluded-path/dereferenced.ts index 6e178abf..c9bfccab 100644 --- a/test/specs/ref-in-excluded-path/dereferenced.js +++ b/test/specs/ref-in-excluded-path/dereferenced.ts @@ -3,34 +3,34 @@ export default { examples: { "confirmation-failure": { value: { - $ref: "#/literal-component-example" - } + $ref: "#/literal-component-example", + }, }, "confirmation-success": { value: { - abc: "def" - } + abc: "def", + }, }, "query-example": { - value: "abc" - } + value: "abc", + }, }, parameters: { a: { example: { - $ref: "#/literal-param-component-example" - } + $ref: "#/literal-param-component-example", + }, }, b: { examples: { example1: { value: { - $ref: "#/literal-param-component-examples1" - } - } - } - } - } + $ref: "#/literal-param-component-examples1", + }, + }, + }, + }, + }, }, paths: { "/x/{id}": { @@ -38,35 +38,35 @@ export default { { example: 123, in: "path", - name: "id" + name: "id", }, { examples: { e1: { value: { - $ref: "#/literal-h1" - } - } + $ref: "#/literal-h1", + }, + }, }, in: "header", - name: "h1" + name: "h1", }, { example: { - $ref: "#/literal-q1" + $ref: "#/literal-q1", }, in: "query", - name: "q1" + name: "q1", }, { examples: { q2: { - value: "abc" - } + value: "abc", + }, }, in: "query", - name: "q2" - } + name: "q2", + }, ], responses: { 200: { @@ -75,34 +75,34 @@ export default { examples: { "confirmation-failure": { value: { - $ref: "#/literal-component-example" - } + $ref: "#/literal-component-example", + }, }, "confirmation-in-progress": { summary: "In progress response", value: { - $ref: "#/abc" - } + $ref: "#/abc", + }, }, "confirmation-success": { value: { - abc: "def" - } - } - } - } - } + abc: "def", + }, + }, + }, + }, + }, }, 400: { content: { "application/json": { example: { - $ref: "#/literal-example" - } - } - } - } - } - } - } + $ref: "#/literal-example", + }, + }, + }, + }, + }, + }, + }, }; diff --git a/test/specs/ref-in-excluded-path/ref-in-excluded-path.spec.js b/test/specs/ref-in-excluded-path/ref-in-excluded-path.spec.ts similarity index 61% rename from test/specs/ref-in-excluded-path/ref-in-excluded-path.spec.js rename to test/specs/ref-in-excluded-path/ref-in-excluded-path.spec.ts index 631743ce..2e55bf16 100644 --- a/test/specs/ref-in-excluded-path/ref-in-excluded-path.spec.js +++ b/test/specs/ref-in-excluded-path/ref-in-excluded-path.spec.ts @@ -1,19 +1,20 @@ -import chai from "chai"; +import { describe, it } from "vitest"; import $RefParser from "../../../lib/index.js"; import path from "../../utils/path.js"; import dereferencedSchema from "./dereferenced.js"; -const { expect } = chai; +import { expect } from "vitest"; describe("Schema with literal $refs in examples", () => { it("should exclude the given paths from dereferencing", async () => { - let parser = new $RefParser(); - const schema = await parser.dereference(path.rel("specs/ref-in-excluded-path/ref-in-excluded-path.yaml"), { + const parser = new $RefParser(); + + const schema = await parser.dereference(path.rel("test/specs/ref-in-excluded-path/ref-in-excluded-path.yaml"), { dereference: { - excludedPathMatcher: (schemaPath) => { + excludedPathMatcher: (schemaPath: any) => { return /\/example(\/|$|s\/[^\/]+\/value(\/|$))/.test(schemaPath); - } - } + }, + }, }); expect(schema).to.equal(parser.schema); expect(schema).to.deep.equal(dereferencedSchema); diff --git a/test/specs/ref-in-excluded-path/ref-in-excluded-path.yaml b/test/specs/ref-in-excluded-path/ref-in-excluded-path.yaml index b1ce0869..284e44d9 100644 --- a/test/specs/ref-in-excluded-path/ref-in-excluded-path.yaml +++ b/test/specs/ref-in-excluded-path/ref-in-excluded-path.yaml @@ -1,44 +1,43 @@ # Minimal parts of an OpenAPI 3.1.0 document, including various examples that should be literal: paths: - '/x/{id}': + "/x/{id}": parameters: - name: id in: path - example: - 123 + example: 123 - name: h1 in: header examples: e1: value: # Literal value - $ref: '#/literal-h1' + $ref: "#/literal-h1" - name: q1 in: query example: - $ref: '#/literal-q1' + $ref: "#/literal-q1" - name: q2 in: query examples: q2: - $ref: '#/components/examples/query-example' + $ref: "#/components/examples/query-example" responses: - '200': + "200": content: application/json: examples: confirmation-success: # Real ref - $ref: '#/components/examples/confirmation-success' + $ref: "#/components/examples/confirmation-success" confirmation-in-progress: summary: In progress response value: # Literal ref! The $ref should not be dereferenced - $ref: '#/abc' + $ref: "#/abc" confirmation-failure: # Real ref to example with literal $ref - $ref: '#/components/examples/confirmation-failure' - '400': + $ref: "#/components/examples/confirmation-failure" + "400": content: application/json: example: - $ref: '#/literal-example' + $ref: "#/literal-example" components: examples: query-example: @@ -48,13 +47,13 @@ components: abc: def confirmation-failure: value: # Literal value! The $ref should not be dereferenced - $ref: '#/literal-component-example' + $ref: "#/literal-component-example" parameters: a: example: - $ref: '#/literal-param-component-example' + $ref: "#/literal-param-component-example" b: examples: example1: value: - $ref: '#/literal-param-component-examples1' + $ref: "#/literal-param-component-examples1" diff --git a/test/specs/refs.spec.js b/test/specs/refs.spec.js deleted file mode 100644 index 6d4dae97..00000000 --- a/test/specs/refs.spec.js +++ /dev/null @@ -1,307 +0,0 @@ -import { host } from "@jsdevtools/host-environment"; -import chai from "chai"; -import $RefParser from "../../lib/index.js"; -import helper from "../utils/helper.js"; -import path from "../utils/path.js"; -import parsedSchema from "./external/parsed.js"; -import dereferencedSchema from "./external/dereferenced.js"; -import bundledSchema from "./external/bundled.js"; - -const { expect } = chai; - -describe("$Refs object", () => { - describe("paths", () => { - it("should only contain the main file when calling `parse()`", async () => { - let parser = new $RefParser(); - await parser.parse(path.abs("specs/external/external.yaml")); - let paths = parser.$refs.paths(); - expect(paths).to.have.same.members([ - path.abs("specs/external/external.yaml") - ]); - }); - - it("should contain all files when calling `resolve()`", async () => { - let parser = new $RefParser(); - const $refs = await parser.resolve(path.abs("specs/external/external.yaml")); - expect($refs).to.equal(parser.$refs); - let paths = $refs.paths(); - expect(paths).to.have.same.members([ - path.abs("specs/external/external.yaml"), - path.abs("specs/external/definitions/definitions.json"), - path.abs("specs/external/definitions/name.yaml"), - path.abs("specs/external/definitions/required-string.yaml") - ]); - }); - - it("should return only local files", async () => { - const $refs = await $RefParser - .resolve(path.abs("specs/external/external.yaml")); - let paths = $refs.paths("file"); - if (host.node) { - expect(paths).to.have.same.members([ - path.abs("specs/external/external.yaml"), - path.abs("specs/external/definitions/definitions.json"), - path.abs("specs/external/definitions/name.yaml"), - path.abs("specs/external/definitions/required-string.yaml") - ]); - } - else { - expect(paths).to.be.an("array").with.lengthOf(0); - } - }); - - it("should return only URLs", async () => { - const $refs = await $RefParser - .resolve(path.abs("specs/external/external.yaml")); - let paths = $refs.paths(["http"]); - if (host.browser) { - expect(paths).to.have.same.members([ - path.url("specs/external/external.yaml"), - path.url("specs/external/definitions/definitions.json"), - path.url("specs/external/definitions/name.yaml"), - path.url("specs/external/definitions/required-string.yaml") - ]); - } - else { - expect(paths).to.be.an("array").with.lengthOf(0); - } - }); - }); - - describe("values", () => { - it("should be the same as `toJSON()`", async () => { - const $refs = await $RefParser - .resolve(path.abs("specs/external/external.yaml")); - expect($refs.values).to.equal($refs.toJSON); - }); - - it("should return the paths and values of all resolved files", async () => { - const $refs = await $RefParser - .resolve(path.abs("specs/external/external.yaml")); - let expected = {}; - expected[path.abs("specs/external/external.yaml")] = parsedSchema.schema; - expected[path.abs("specs/external/definitions/definitions.json")] = parsedSchema.definitions; - expected[path.abs("specs/external/definitions/name.yaml")] = parsedSchema.name; - expected[path.abs("specs/external/definitions/required-string.yaml")] = parsedSchema.requiredString; - let values = $refs.values(); - expect(values).to.deep.equal(expected); - }); - - it("should return the paths and values of all dereferenced files", async () => { - let parser = new $RefParser(); - await parser.dereference(path.abs("specs/external/external.yaml")); - let expected = {}; - expected[path.abs("specs/external/external.yaml")] = dereferencedSchema; - expected[path.abs("specs/external/definitions/definitions.json")] = dereferencedSchema.definitions; - expected[path.abs("specs/external/definitions/name.yaml")] = dereferencedSchema.definitions.name; - expected[path.abs("specs/external/definitions/required-string.yaml")] = dereferencedSchema.definitions["required string"]; - let values = parser.$refs.values(); - expect(values).to.deep.equal(expected); - }); - - it("should return the paths and values of all bundled files", async () => { - let parser = new $RefParser(); - await parser.bundle(path.abs("specs/external/external.yaml")); - let expected = {}; - expected[path.abs("specs/external/external.yaml")] = bundledSchema; - expected[path.abs("specs/external/definitions/definitions.json")] = bundledSchema.definitions; - expected[path.abs("specs/external/definitions/name.yaml")] = bundledSchema.definitions.name; - expected[path.abs("specs/external/definitions/required-string.yaml")] = bundledSchema.definitions["required string"]; - let values = parser.$refs.values(); - expect(values).to.deep.equal(expected); - }); - - it("should return only local files and values", async () => { - const $refs = await $RefParser - .resolve(path.abs("specs/external/external.yaml")); - let values = $refs.values("file"); - if (host.node) { - let expected = {}; - expected[path.abs("specs/external/external.yaml")] = parsedSchema.schema; - expected[path.abs("specs/external/definitions/definitions.json")] = parsedSchema.definitions; - expected[path.abs("specs/external/definitions/name.yaml")] = parsedSchema.name; - expected[path.abs("specs/external/definitions/required-string.yaml")] = parsedSchema.requiredString; - values = $refs.values(); - expect(values).to.deep.equal(expected); - } - else { - expect(values).to.be.an("object").and.empty; // eslint-disable-line no-unused-expressions - } - }); - - it("should return only URLs and values", async () => { - const $refs = await $RefParser - .resolve(path.abs("specs/external/external.yaml")); - let values = $refs.values(["http"]); - if (host.browser) { - let expected = {}; - expected[path.url("specs/external/external.yaml")] = parsedSchema.schema; - expected[path.url("specs/external/definitions/definitions.json")] = parsedSchema.definitions; - expected[path.url("specs/external/definitions/name.yaml")] = parsedSchema.name; - expected[path.url("specs/external/definitions/required-string.yaml")] = parsedSchema.requiredString; - values = $refs.values(); - expect(values).to.deep.equal(expected); - } - else { - expect(values).to.be.an("object").and.empty; // eslint-disable-line no-unused-expressions - } - }); - }); - - describe("exists", () => { - it("should work with absolute paths", async () => { - const $refs = await $RefParser - .resolve(path.abs("specs/external/external.yaml")); - expect($refs.exists(path.abs("specs/external/external.yaml"))).to.equal(true); - expect($refs.exists(path.abs("specs/external/definitions/definitions.json"))).to.equal(true); - expect($refs.exists(path.abs("specs/external/definitions/name.yaml"))).to.equal(true); - expect($refs.exists(path.abs("specs/external/definitions/required-string.yaml"))).to.equal(true); - }); - - it("should work with relative paths", async () => { - const $refs = await $RefParser - .resolve(path.abs("specs/external/external.yaml")); - expect($refs.exists("external.yaml")).to.equal(true); - expect($refs.exists("definitions/definitions.json")).to.equal(true); - expect($refs.exists("definitions/name.yaml")).to.equal(true); - expect($refs.exists("definitions/required-string.yaml")).to.equal(true); - }); - - it("should return false if the $ref does not exist", async () => { - const $refs = await $RefParser - .resolve(path.abs("specs/external/external.yaml")); - expect($refs.exists("foo bar")).to.equal(false); - }); - }); - - describe("get", () => { - it("should work with absolute paths", async () => { - const $refs = await $RefParser - .resolve(path.abs("specs/external/external.yaml")); - expect($refs.get(path.abs("specs/external/external.yaml"))).to.deep.equal(parsedSchema.schema); - expect($refs.get(path.abs("specs/external/definitions/definitions.json"))).to.deep.equal(parsedSchema.definitions); - expect($refs.get(path.abs("specs/external/definitions/name.yaml"))).to.deep.equal(parsedSchema.name); - expect($refs.get(path.abs("specs/external/definitions/required-string.yaml"))).to.deep.equal(parsedSchema.requiredString); - }); - - it("should work with relative paths", async () => { - const $refs = await $RefParser - .resolve(path.abs("specs/external/external.yaml")); - expect($refs.get("external.yaml")).to.deep.equal(parsedSchema.schema); - expect($refs.get("definitions/definitions.json")).to.deep.equal(parsedSchema.definitions); - expect($refs.get("definitions/name.yaml")).to.deep.equal(parsedSchema.name); - expect($refs.get("definitions/required-string.yaml")).to.deep.equal(parsedSchema.requiredString); - }); - - it("should get the entire file if there is no hash", async () => { - const $refs = await $RefParser - .resolve(path.abs("specs/external/external.yaml")); - let value = $refs.get("definitions/name.yaml"); - expect(value).to.deep.equal(parsedSchema.name); - }); - - it("should get the entire file if the hash is empty", async () => { - const $refs = await $RefParser - .resolve(path.abs("specs/external/external.yaml")); - let value = $refs.get("definitions/name.yaml#"); - expect(value).to.deep.equal(parsedSchema.name); - }); - - it('should try to get an empty key if the hash is "#/"', async () => { - const $refs = await $RefParser.resolve(path.abs("specs/external/external.yaml")); - - try { - $refs.get("definitions/name.yaml#/"); - helper.shouldNotGetCalled(); - } - catch (err) { - expect(err).to.be.an.instanceOf(Error); - expect(err.message).to.equal('Token "" does not exist.'); - } - }); - - it("should resolve values across multiple files if necessary", async () => { - const $refs = await $RefParser - .resolve(path.abs("specs/external/external.yaml")); - expect($refs.get("external.yaml#/properties/name/properties/first")).to.deep.equal({ - title: "required string", - type: "string", - minLength: 1 - }); - expect($refs.get("external.yaml#/properties/name/properties/first/title")).to.equal("required string"); - }); - - it("should throw an error if the file does not exist", async () => { - const $refs = await $RefParser.resolve(path.abs("specs/external/external.yaml")); - - try { - $refs.get("foo-bar.yaml#/some/value"); - helper.shouldNotGetCalled(); - } - catch (err) { - expect(err).to.be.an.instanceOf(Error); - expect(err.message).to.contain('Error resolving $ref pointer "foo-bar.yaml#/some/value".'); - expect(err.message).to.contain('foo-bar.yaml" not found.'); - } - }); - - it("should throw an error if the JSON Pointer path does not exist", async () => { - const $refs = await $RefParser.resolve(path.abs("specs/external/external.yaml")); - - try { - $refs.get("external.yaml#/foo/bar"); - helper.shouldNotGetCalled(); - } - catch (err) { - expect(err).to.be.an.instanceOf(Error); - expect(err.message).to.equal('Token "foo" does not exist.'); - } - }); - }); - - describe("set", () => { - it("should work with absolute paths", async () => { - const $refs = await $RefParser - .resolve(path.abs("specs/external/external.yaml")); - let $ref = path.abs("specs/external/external.yaml") + "#/properties/name"; - $refs.set($ref, { foo: "bar" }); - expect($refs.get("external.yaml#/properties/name")).to.deep.equal({ foo: "bar" }); - }); - - it("should work with relative paths", async () => { - const $refs = await $RefParser - .resolve(path.abs("specs/external/external.yaml")); - $refs.set("external.yaml#/properties/name", { foo: "bar" }); - expect($refs.get("external.yaml#/properties/name")).to.deep.equal({ foo: "bar" }); - }); - - it("should resolve values across multiple files if necessary", async () => { - const $refs = await $RefParser - .resolve(path.abs("specs/external/external.yaml")); - $refs.set("external.yaml#/properties/name/properties/first/title", "foo bar"); - expect($refs.get("external.yaml#/properties/name/properties/first/title")).to.equal("foo bar"); - }); - - it("should throw an error if the file does not exist", async () => { - const $refs = await $RefParser.resolve(path.abs("specs/external/external.yaml")); - - try { - $refs.set("foo-bar.yaml#/some/path", "some value"); - helper.shouldNotGetCalled(); - } - catch (err) { - expect(err).to.be.an.instanceOf(Error); - expect(err.message).to.contain('Error resolving $ref pointer "foo-bar.yaml#/some/path".'); - expect(err.message).to.contain('foo-bar.yaml" not found.'); - } - }); - - it("should NOT throw an error if the JSON Pointer path does not exist (it creates the new value instead)", async () => { - const $refs = await $RefParser - .resolve(path.abs("specs/external/external.yaml")); - $refs.set("external.yaml#/foo/bar/baz", { hello: "world" }); - expect($refs.get("external.yaml#/foo/bar/baz")).to.deep.equal({ hello: "world" }); - }); - }); - -}); diff --git a/test/specs/refs.spec.ts b/test/specs/refs.spec.ts new file mode 100644 index 00000000..802f698e --- /dev/null +++ b/test/specs/refs.spec.ts @@ -0,0 +1,322 @@ +import { describe, it } from "vitest"; +import $RefParser from "../../lib/index.js"; +import helper from "../utils/helper.js"; +import path from "../utils/path.js"; +import parsedSchema from "./external/parsed.js"; +import dereferencedSchema from "./external/dereferenced.js"; +import bundledSchema from "./external/bundled.js"; + +import { expect } from "vitest"; + +describe("$Refs object", () => { + const isBrowser = typeof window !== "undefined"; + describe("paths", () => { + it("should only contain the main file when calling `parse()`", async () => { + const parser = new $RefParser(); + await parser.parse(path.abs("test/specs/external/external.yaml")); + const paths = parser.$refs.paths(); + expect(paths).to.have.same.members([path.abs("test/specs/external/external.yaml")]); + }); + + it("should contain all files when calling `resolve()`", async () => { + const parser = new $RefParser(); + const $refs = await parser.resolve(path.abs("test/specs/external/external.yaml")); + expect($refs).to.equal(parser.$refs); + const paths = $refs.paths(); + expect(paths).to.have.same.members([ + path.abs("test/specs/external/external.yaml"), + path.abs("test/specs/external/definitions/definitions.json"), + path.abs("test/specs/external/definitions/name.yaml"), + path.abs("test/specs/external/definitions/required-string.yaml"), + ]); + }); + + it("should return only local files", async () => { + const $refs = await $RefParser.resolve(path.abs("test/specs/external/external.yaml")); + const paths = $refs.paths("file"); + if (!isBrowser) { + expect(paths).to.have.same.members([ + path.abs("test/specs/external/external.yaml"), + path.abs("test/specs/external/definitions/definitions.json"), + path.abs("test/specs/external/definitions/name.yaml"), + path.abs("test/specs/external/definitions/required-string.yaml"), + ]); + } else { + expect(paths).to.be.an("array").with.lengthOf(0); + } + }); + + it("should return only URLs", async () => { + const $refs = await $RefParser.resolve(path.abs("test/specs/external/external.yaml")); + // @ts-expect-error TS(2345): Argument of type 'string[]' is not assignable to p... Remove this comment to see the full error message + const paths = $refs.paths(["http"]); + + if (isBrowser) { + expect(paths).to.have.same.members([ + path.url("test/specs/external/external.yaml"), + path.url("test/specs/external/definitions/definitions.json"), + path.url("test/specs/external/definitions/name.yaml"), + path.url("test/specs/external/definitions/required-string.yaml"), + ]); + } else { + expect(paths).to.be.an("array").with.lengthOf(0); + } + }); + }); + + describe("values", () => { + it("should be the same as `toJSON()`", async () => { + const $refs = await $RefParser.resolve(path.abs("test/specs/external/external.yaml")); + expect($refs.values).to.equal($refs.toJSON); + }); + + it("should return the paths and values of all resolved files", async () => { + const $refs = await $RefParser.resolve(path.abs("test/specs/external/external.yaml")); + const expected = {}; + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message + expected[path.abs("test/specs/external/external.yaml")] = parsedSchema.schema; + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message + expected[path.abs("test/specs/external/definitions/definitions.json")] = parsedSchema.definitions; + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message + expected[path.abs("test/specs/external/definitions/name.yaml")] = parsedSchema.name; + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message + expected[path.abs("test/specs/external/definitions/required-string.yaml")] = parsedSchema.requiredString; + const values = $refs.values(); + expect(values).to.deep.equal(expected); + }); + + it("should return the paths and values of all dereferenced files", async () => { + const parser = new $RefParser(); + await parser.dereference(path.abs("test/specs/external/external.yaml")); + const expected = {}; + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message + expected[path.abs("test/specs/external/external.yaml")] = dereferencedSchema; + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message + expected[path.abs("test/specs/external/definitions/definitions.json")] = dereferencedSchema.definitions; + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message + expected[path.abs("test/specs/external/definitions/name.yaml")] = dereferencedSchema.definitions.name; + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message + expected[path.abs("test/specs/external/definitions/required-string.yaml")] = + dereferencedSchema.definitions["required string"]; + const values = parser.$refs.values(); + expect(values).to.deep.equal(expected); + }); + + it("should return the paths and values of all bundled files", async () => { + const parser = new $RefParser(); + await parser.bundle(path.abs("test/specs/external/external.yaml")); + const expected = {}; + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message + expected[path.abs("test/specs/external/external.yaml")] = bundledSchema; + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message + expected[path.abs("test/specs/external/definitions/definitions.json")] = bundledSchema.definitions; + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message + expected[path.abs("test/specs/external/definitions/name.yaml")] = bundledSchema.definitions.name; + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message + expected[path.abs("test/specs/external/definitions/required-string.yaml")] = + bundledSchema.definitions["required string"]; + const values = parser.$refs.values(); + expect(values).to.deep.equal(expected); + }); + + it("should return only local files and values", async () => { + const $refs = await $RefParser.resolve(path.abs("test/specs/external/external.yaml")); + let values = $refs.values("file"); + if (typeof window === "undefined") { + const expected = {}; + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message + expected[path.abs("test/specs/external/external.yaml")] = parsedSchema.schema; + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message + expected[path.abs("test/specs/external/definitions/definitions.json")] = parsedSchema.definitions; + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message + expected[path.abs("test/specs/external/definitions/name.yaml")] = parsedSchema.name; + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message + expected[path.abs("test/specs/external/definitions/required-string.yaml")] = parsedSchema.requiredString; + values = $refs.values(); + expect(values).to.deep.equal(expected); + } else { + expect(values).to.be.an("object").and.empty; // eslint-disable-line no-unused-expressions + } + }); + + it("should return only URLs and values", async () => { + const $refs = await $RefParser.resolve(path.abs("test/specs/external/external.yaml")); + // @ts-expect-error TS(2345): Argument of type 'string[]' is not assignable to p... Remove this comment to see the full error message + let values = $refs.values(["http"]); + if (isBrowser) { + const expected = {}; + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message + expected[path.url("test/specs/external/external.yaml")] = parsedSchema.schema; + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message + expected[path.url("test/specs/external/definitions/definitions.json")] = parsedSchema.definitions; + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message + expected[path.url("test/specs/external/definitions/name.yaml")] = parsedSchema.name; + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message + expected[path.url("test/specs/external/definitions/required-string.yaml")] = parsedSchema.requiredString; + values = $refs.values(); + expect(values).to.deep.equal(expected); + } else { + expect(values).to.be.an("object").and.empty; // eslint-disable-line no-unused-expressions + } + }); + }); + + describe("exists", () => { + it("should work with absolute paths", async () => { + const $refs = await $RefParser.resolve(path.abs("test/specs/external/external.yaml")); + // @ts-expect-error TS(2554): Expected 2 arguments, but got 1. + expect($refs.exists(path.abs("test/specs/external/external.yaml"))).to.equal(true); + // @ts-expect-error TS(2554): Expected 2 arguments, but got 1. + expect($refs.exists(path.abs("test/specs/external/definitions/definitions.json"))).to.equal(true); + // @ts-expect-error TS(2554): Expected 2 arguments, but got 1. + expect($refs.exists(path.abs("test/specs/external/definitions/name.yaml"))).to.equal(true); + // @ts-expect-error TS(2554): Expected 2 arguments, but got 1. + expect($refs.exists(path.abs("test/specs/external/definitions/required-string.yaml"))).to.equal(true); + }); + + it("should work with relative paths", async () => { + const $refs = await $RefParser.resolve(path.abs("test/specs/external/external.yaml")); + // @ts-expect-error TS(2554): Expected 2 arguments, but got 1. + expect($refs.exists("external.yaml")).to.equal(true); + // @ts-expect-error TS(2554): Expected 2 arguments, but got 1. + expect($refs.exists("definitions/definitions.json")).to.equal(true); + // @ts-expect-error TS(2554): Expected 2 arguments, but got 1. + expect($refs.exists("definitions/name.yaml")).to.equal(true); + // @ts-expect-error TS(2554): Expected 2 arguments, but got 1. + expect($refs.exists("definitions/required-string.yaml")).to.equal(true); + }); + + it("should return false if the $ref does not exist", async () => { + const $refs = await $RefParser.resolve(path.abs("test/specs/external/external.yaml")); + // @ts-expect-error TS(2554): Expected 2 arguments, but got 1. + expect($refs.exists("foo bar")).to.equal(false); + }); + }); + + describe("get", () => { + it("should work with absolute paths", async () => { + const $refs = await $RefParser.resolve(path.abs("test/specs/external/external.yaml")); + expect($refs.get(path.abs("test/specs/external/external.yaml"))).to.deep.equal(parsedSchema.schema); + expect($refs.get(path.abs("test/specs/external/definitions/definitions.json"))).to.deep.equal( + parsedSchema.definitions, + ); + expect($refs.get(path.abs("test/specs/external/definitions/name.yaml"))).to.deep.equal(parsedSchema.name); + expect($refs.get(path.abs("test/specs/external/definitions/required-string.yaml"))).to.deep.equal( + parsedSchema.requiredString, + ); + }); + + it("should work with relative paths", async () => { + const $refs = await $RefParser.resolve(path.abs("test/specs/external/external.yaml")); + expect($refs.get("external.yaml")).to.deep.equal(parsedSchema.schema); + expect($refs.get("definitions/definitions.json")).to.deep.equal(parsedSchema.definitions); + expect($refs.get("definitions/name.yaml")).to.deep.equal(parsedSchema.name); + expect($refs.get("definitions/required-string.yaml")).to.deep.equal(parsedSchema.requiredString); + }); + + it("should get the entire file if there is no hash", async () => { + const $refs = await $RefParser.resolve(path.abs("test/specs/external/external.yaml")); + const value = $refs.get("definitions/name.yaml"); + expect(value).to.deep.equal(parsedSchema.name); + }); + + it("should get the entire file if the hash is empty", async () => { + const $refs = await $RefParser.resolve(path.abs("test/specs/external/external.yaml")); + const value = $refs.get("definitions/name.yaml#"); + expect(value).to.deep.equal(parsedSchema.name); + }); + + it('should try to get an empty key if the hash is "#/"', async () => { + const $refs = await $RefParser.resolve(path.abs("test/specs/external/external.yaml")); + + try { + $refs.get("definitions/name.yaml#/"); + helper.shouldNotGetCalled(); + } catch (err) { + expect(err).to.be.an.instanceOf(Error); + // @ts-expect-error TS(2571): Object is of type 'unknown'. + expect(err.message).to.equal('Token "" does not exist.'); + } + }); + + it("should resolve values across multiple files if necessary", async () => { + const $refs = await $RefParser.resolve(path.abs("test/specs/external/external.yaml")); + expect($refs.get("external.yaml#/properties/name/properties/first")).to.deep.equal({ + title: "required string", + type: "string", + minLength: 1, + }); + expect($refs.get("external.yaml#/properties/name/properties/first/title")).to.equal("required string"); + }); + + it("should throw an error if the file does not exist", async () => { + const $refs = await $RefParser.resolve(path.abs("test/specs/external/external.yaml")); + + try { + $refs.get("foo-bar.yaml#/some/value"); + helper.shouldNotGetCalled(); + } catch (err) { + expect(err).to.be.an.instanceOf(Error); + // @ts-expect-error TS(2571): Object is of type 'unknown'. + expect(err.message).to.contain('Error resolving $ref pointer "foo-bar.yaml#/some/value".'); + // @ts-expect-error TS(2571): Object is of type 'unknown'. + expect(err.message).to.contain('foo-bar.yaml" not found.'); + } + }); + + it("should throw an error if the JSON Pointer path does not exist", async () => { + const $refs = await $RefParser.resolve(path.abs("test/specs/external/external.yaml")); + + try { + $refs.get("external.yaml#/foo/bar"); + helper.shouldNotGetCalled(); + } catch (err) { + expect(err).to.be.an.instanceOf(Error); + // @ts-expect-error TS(2571): Object is of type 'unknown'. + expect(err.message).to.equal('Token "foo" does not exist.'); + } + }); + }); + + describe("set", () => { + it("should work with absolute paths", async () => { + const $refs = await $RefParser.resolve(path.abs("test/specs/external/external.yaml")); + const $ref = path.abs("test/specs/external/external.yaml") + "#/properties/name"; + $refs.set($ref, { foo: "bar" }); + expect($refs.get("external.yaml#/properties/name")).to.deep.equal({ foo: "bar" }); + }); + + it("should work with relative paths", async () => { + const $refs = await $RefParser.resolve(path.abs("test/specs/external/external.yaml")); + $refs.set("external.yaml#/properties/name", { foo: "bar" }); + expect($refs.get("external.yaml#/properties/name")).to.deep.equal({ foo: "bar" }); + }); + + it("should resolve values across multiple files if necessary", async () => { + const $refs = await $RefParser.resolve(path.abs("test/specs/external/external.yaml")); + $refs.set("external.yaml#/properties/name/properties/first/title", "foo bar"); + expect($refs.get("external.yaml#/properties/name/properties/first/title")).to.equal("foo bar"); + }); + + it("should throw an error if the file does not exist", async () => { + const $refs = await $RefParser.resolve(path.abs("test/specs/external/external.yaml")); + + try { + $refs.set("foo-bar.yaml#/some/path", "some value"); + helper.shouldNotGetCalled(); + } catch (err) { + expect(err).to.be.an.instanceOf(Error); + // @ts-expect-error TS(2571): Object is of type 'unknown'. + expect(err.message).to.contain('Error resolving $ref pointer "foo-bar.yaml#/some/path".'); + // @ts-expect-error TS(2571): Object is of type 'unknown'. + expect(err.message).to.contain('foo-bar.yaml" not found.'); + } + }); + + it("should NOT throw an error if the JSON Pointer path does not exist (it creates the new value instead)", async () => { + const $refs = await $RefParser.resolve(path.abs("test/specs/external/external.yaml")); + $refs.set("external.yaml#/foo/bar/baz", { hello: "world" }); + expect($refs.get("external.yaml#/foo/bar/baz")).to.deep.equal({ hello: "world" }); + }); + }); +}); diff --git a/test/specs/resolvers/dereferenced.js b/test/specs/resolvers/dereferenced.js deleted file mode 100644 index 988fbd58..00000000 --- a/test/specs/resolvers/dereferenced.js +++ /dev/null @@ -1,87 +0,0 @@ -export default { - definitions: { - foo: { - bar: { - baz: "hello world" - } - }, - bar: { - Foo: { - Baz: "hello world" - } - }, - name: { - required: [ - "first", - "last" - ], - type: "object", - properties: { - last: { - minLength: 1, - type: "string" - }, - first: { - minLength: 1, - type: "string" - } - } - }, - pet: { - type: "object", - properties: { - age: { - type: "number" - }, - name: { - type: "string" - }, - species: { - enum: [ - "cat", - "dog", - "bird", - "fish" - ], - type: "string" - } - }, - title: "pet" - } - }, - required: [ - "name" - ], - type: "object", - properties: { - gender: { - enum: [ - "male", - "female" - ], - type: "string" - }, - age: { - minimum: 0, - type: "integer" - }, - name: { - required: [ - "first", - "last" - ], - type: "object", - properties: { - last: { - minLength: 1, - type: "string" - }, - first: { - minLength: 1, - type: "string" - } - } - } - }, - title: "Person" -}; diff --git a/test/specs/resolvers/dereferenced.ts b/test/specs/resolvers/dereferenced.ts new file mode 100644 index 00000000..1ee6a9c5 --- /dev/null +++ b/test/specs/resolvers/dereferenced.ts @@ -0,0 +1,71 @@ +export default { + definitions: { + foo: { + bar: { + baz: "hello world", + }, + }, + bar: { + Foo: { + Baz: "hello world", + }, + }, + name: { + required: ["first", "last"], + type: "object", + properties: { + last: { + minLength: 1, + type: "string", + }, + first: { + minLength: 1, + type: "string", + }, + }, + }, + pet: { + type: "object", + properties: { + age: { + type: "number", + }, + name: { + type: "string", + }, + species: { + enum: ["cat", "dog", "bird", "fish"], + type: "string", + }, + }, + title: "pet", + }, + }, + required: ["name"], + type: "object", + properties: { + gender: { + enum: ["male", "female"], + type: "string", + }, + age: { + minimum: 0, + type: "integer", + }, + name: { + required: ["first", "last"], + type: "object", + properties: { + last: { + minLength: 1, + type: "string", + }, + first: { + minLength: 1, + type: "string", + }, + }, + }, + }, + title: "Person", +}; diff --git a/test/specs/resolvers/parsed.js b/test/specs/resolvers/parsed.js deleted file mode 100644 index 33317412..00000000 --- a/test/specs/resolvers/parsed.js +++ /dev/null @@ -1,65 +0,0 @@ -export default { - definitions: { - foo: { - $ref: "foo://bar.baz" - }, - bar: { - $ref: "bar://Foo.Baz" - }, - pet: { - $ref: "definitions/pet.yaml" - }, - name: { - required: [ - "first", - "last" - ], - type: "object", - properties: { - last: { - minLength: 1, - type: "string" - }, - first: { - minLength: 1, - type: "string" - } - } - } - }, - required: [ - "name" - ], - type: "object", - properties: { - gender: { - enum: [ - "male", - "female" - ], - type: "string" - }, - age: { - minimum: 0, - type: "integer" - }, - name: { - required: [ - "first", - "last" - ], - type: "object", - properties: { - last: { - minLength: 1, - type: "string" - }, - first: { - minLength: 1, - type: "string" - } - } - } - }, - title: "Person" -}; diff --git a/test/specs/resolvers/parsed.ts b/test/specs/resolvers/parsed.ts new file mode 100644 index 00000000..6411cf0b --- /dev/null +++ b/test/specs/resolvers/parsed.ts @@ -0,0 +1,54 @@ +export default { + definitions: { + foo: { + $ref: "foo://bar.baz", + }, + bar: { + $ref: "bar://Foo.Baz", + }, + pet: { + $ref: "definitions/pet.yaml", + }, + name: { + required: ["first", "last"], + type: "object", + properties: { + last: { + minLength: 1, + type: "string", + }, + first: { + minLength: 1, + type: "string", + }, + }, + }, + }, + required: ["name"], + type: "object", + properties: { + gender: { + enum: ["male", "female"], + type: "string", + }, + age: { + minimum: 0, + type: "integer", + }, + name: { + required: ["first", "last"], + type: "object", + properties: { + last: { + minLength: 1, + type: "string", + }, + first: { + minLength: 1, + type: "string", + }, + }, + }, + }, + title: "Person", +}; diff --git a/test/specs/resolvers/resolvers.spec.js b/test/specs/resolvers/resolvers.spec.js deleted file mode 100644 index 00364829..00000000 --- a/test/specs/resolvers/resolvers.spec.js +++ /dev/null @@ -1,238 +0,0 @@ -import chai from "chai"; -import chaiSubset from "chai-subset"; -chai.use(chaiSubset); -const { expect } = chai; -import $RefParser from "../../../lib/index.js"; -import helper from "../../utils/helper.js"; -import path from "../../utils/path.js"; -import parsedSchema from "./parsed.js"; -import dereferencedSchema from "./dereferenced.js"; -import { ResolverError, UnmatchedResolverError, JSONParserErrorGroup } from "../../../lib/util/errors.js"; - -describe("options.resolve", () => { - it('should not resolve external links if "resolve.external" is disabled', async () => { - const schema = await $RefParser - .dereference(path.abs("specs/resolvers/resolvers.yaml"), { resolve: { external: false }}); - expect(schema).to.deep.equal(parsedSchema); - }); - - it("should throw an error for unrecognized protocols", async () => { - try { - await $RefParser.dereference(path.abs("specs/resolvers/resolvers.yaml")); - helper.shouldNotGetCalled(); - } - catch (err) { - expect(err).to.be.an.instanceOf(SyntaxError); - expect(err.message).to.equal('Unable to resolve $ref pointer "foo://bar.baz"'); - } - }); - - it("should use a custom resolver with static values", async () => { - const schema = await $RefParser - .dereference(path.abs("specs/resolvers/resolvers.yaml"), { - resolve: { - // A custom resolver for "foo://" URLs - foo: { - canRead: /^foo\:\/\//i, - read: { bar: { baz: "hello world" }} - }, - bar: { - canRead: /^bar\:\/\//i, - read: { Foo: { Baz: "hello world" }} - } - } - }); - - expect(schema).to.deep.equal(dereferencedSchema); - }); - - it("should use a custom resolver that returns a value", async () => { - const schema = await $RefParser - .dereference(path.abs("specs/resolvers/resolvers.yaml"), { - resolve: { - // A custom resolver for "foo://" URLs - foo: { - canRead: /^foo\:\/\//i, - read (_file) { - return { bar: { baz: "hello world" }}; - } - }, - bar: { - canRead: /^bar\:\/\//i, - read (_file) { - return { Foo: { Baz: "hello world" }}; - } - } - } - }); - expect(schema).to.deep.equal(dereferencedSchema); - }); - - it("should return _file url as it's written", async () => { - const schema = await $RefParser - .dereference(path.abs("specs/resolvers/resolvers.yaml"), { - resolve: { - // A custom resolver for "foo://" URLs - foo: { - canRead: /^foo\:\/\//i, - read (_file) { - return { bar: { baz: "hello world" }}; - } - }, - // A custom resolver with uppercase symbols - bar: { - canRead: /^bar\:\/\//i, - read (_file) { - expect(_file.url).to.be.equal("bar://Foo.Baz"); - - return { Foo: { Baz: "hello world" }}; - } - } - } - }); - - expect(schema).to.deep.equal(dereferencedSchema); - }); - - it("should use a custom resolver that calls a callback", async () => { - const schema = await $RefParser - .dereference(path.abs("specs/resolvers/resolvers.yaml"), { - resolve: { - // A custom resolver for "foo://" URLs - foo: { - canRead: /^foo\:\/\//i, - read (_file, callback) { - callback(null, { bar: { baz: "hello world" }}); - } - }, - bar: { - canRead: /^bar\:\/\//i, - read (_file, callback) { - callback(null, { Foo: { Baz: "hello world" }}); - } - } - } - }); - expect(schema).to.deep.equal(dereferencedSchema); - }); - - if (typeof Promise === "function") { - it("should use a custom resolver that returns a promise", async () => { - const schema = await $RefParser - .dereference(path.abs("specs/resolvers/resolvers.yaml"), { - resolve: { - // A custom resolver for "foo://" URLs - foo: { - canRead: /^foo\:\/\//i, - read (_file) { - return Promise.resolve({ bar: { baz: "hello world" }}); - } - }, - bar: { - canRead: /^bar\:\/\//i, - read (_file) { - return Promise.resolve({ Foo: { Baz: "hello world" }}); - } - } - } - }); - expect(schema).to.deep.equal(dereferencedSchema); - }); - } - - it("should continue resolving if a custom resolver fails", async () => { - const schema = await $RefParser - .dereference(path.abs("specs/resolvers/resolvers.yaml"), { - resolve: { - // A custom resolver that always fails - badResolver: { - order: 1, - canRead: true, - read (_file) { - throw new Error("BOMB!!!"); - } - }, - // A custom resolver for "foo://" URLs - foo: { - canRead: /^foo\:\/\//i, - read: { bar: { baz: "hello world" }} - }, - bar: { - canRead: /^bar\:\/\//i, - read: { Foo: { Baz: "hello world" }} - } - } - }); - expect(schema).to.deep.equal(dereferencedSchema); - }); - - it("should normalize errors thrown by resolvers", async () => { - try { - await $RefParser.dereference({ $ref: path.abs("specs/resolvers/resolvers.yaml") }, { - resolve: { - // A custom resolver that always fails - file: { - order: 1, - canRead: true, - parse () { - throw new Error("Woops"); - } - } - } - }); - helper.shouldNotGetCalled(); - } - catch (err) { - expect(err).to.be.instanceof(ResolverError); - expect(err.message).to.contain("Error opening file"); - } - }); - - it("should throw an error if no resolver returned a result", async () => { - try { - await $RefParser.dereference(path.rel("specs/resolvers/resolvers.yaml"), { - resolve: { - http: false, - file: { - order: 1, - canRead: true, - read () { - - } - } - } - }); - helper.shouldNotGetCalled(); - } - catch (err) { - // would time out otherwise - expect(err).to.be.an.instanceOf(ResolverError); - } - }); - - it("should throw a grouped error if no resolver can be matched and continueOnError is true", async () => { - const parser = new $RefParser(); - try { - await parser.dereference(path.abs("specs/resolvers/resolvers.yaml"), { - resolve: { - file: false, - http: false, - }, - continueOnError: true, - }); - helper.shouldNotGetCalled(); - } - catch (err) { - expect(err).to.be.instanceof(JSONParserErrorGroup); - expect(err.errors.length).to.equal(1); - expect(err.errors).to.containSubset([ - { - name: UnmatchedResolverError.name, - message: message => message.startsWith("Could not find resolver for"), - path: [], - source: message => message.endsWith("specs/resolvers/resolvers.yaml"), - } - ]); - } - }); -}); diff --git a/test/specs/resolvers/resolvers.spec.ts b/test/specs/resolvers/resolvers.spec.ts new file mode 100644 index 00000000..71089379 --- /dev/null +++ b/test/specs/resolvers/resolvers.spec.ts @@ -0,0 +1,231 @@ +import { describe, it } from "vitest"; +import { expect } from "vitest"; +import $RefParser from "../../../lib/index.js"; +import helper from "../../utils/helper.js"; +import path from "../../utils/path.js"; +import parsedSchema from "./parsed.js"; +import dereferencedSchema from "./dereferenced.js"; +import { ResolverError, UnmatchedResolverError, JSONParserErrorGroup } from "../../../lib/util/errors.js"; +import type { ParserOptions } from "../../../lib/options"; + +describe("options.resolve", () => { + it('should not resolve external links if "resolve.external" is disabled', async () => { + const schema = await $RefParser.dereference(path.abs("test/specs/resolvers/resolvers.yaml"), { + resolve: { external: false }, + }); + expect(schema).to.deep.equal(parsedSchema); + }); + + it("should throw an error for unrecognized protocols", async () => { + try { + await $RefParser.dereference(path.abs("test/specs/resolvers/resolvers.yaml")); + helper.shouldNotGetCalled(); + } catch (err) { + expect(err).to.be.an.instanceOf(SyntaxError); + expect((err as Error).message).to.equal('Unable to resolve $ref pointer "foo://bar.baz"'); + } + }); + + it("should use a custom resolver with static values", async () => { + const schema = await $RefParser.dereference(path.abs("test/specs/resolvers/resolvers.yaml"), { + resolve: { + // A custom resolver for "foo://" URLs + foo: { + canRead: /^foo:\/\//i, + read: { bar: { baz: "hello world" } }, + }, + bar: { + canRead: /^bar:\/\//i, + read: { Foo: { Baz: "hello world" } }, + }, + }, + } as ParserOptions); + + expect(schema).to.deep.equal(dereferencedSchema); + }); + + it("should use a custom resolver that returns a value", async () => { + const schema = await $RefParser.dereference(path.abs("test/specs/resolvers/resolvers.yaml"), { + resolve: { + // A custom resolver for "foo://" URLs + foo: { + canRead: /^foo:\/\//i, + read(_file: any) { + return { bar: { baz: "hello world" } }; + }, + }, + bar: { + canRead: /^bar:\/\//i, + read(_file: any) { + return { Foo: { Baz: "hello world" } }; + }, + }, + }, + }); + expect(schema).to.deep.equal(dereferencedSchema); + }); + + it("should return _file url as it's written", async () => { + const schema = await $RefParser.dereference(path.abs("test/specs/resolvers/resolvers.yaml"), { + resolve: { + // A custom resolver for "foo://" URLs + foo: { + canRead: /^foo:\/\//i, + read(_file: any) { + return { bar: { baz: "hello world" } }; + }, + }, + // A custom resolver with uppercase symbols + bar: { + canRead: /^bar:\/\//i, + read(_file: any) { + expect(_file.url).to.be.equal("bar://Foo.Baz"); + + return { Foo: { Baz: "hello world" } }; + }, + }, + }, + }); + + expect(schema).to.deep.equal(dereferencedSchema); + }); + + it("should use a custom resolver that calls a callback", async () => { + const schema = await $RefParser.dereference(path.abs("test/specs/resolvers/resolvers.yaml"), { + resolve: { + // A custom resolver for "foo://" URLs + foo: { + canRead: /^foo:\/\//i, + read(_file: any, callback: any) { + callback(null, { bar: { baz: "hello world" } }); + }, + }, + bar: { + canRead: /^bar:\/\//i, + read(_file: any, callback: any) { + callback(null, { Foo: { Baz: "hello world" } }); + }, + }, + }, + }); + expect(schema).to.deep.equal(dereferencedSchema); + }); + + if (typeof Promise === "function") { + it("should use a custom resolver that returns a promise", async () => { + const schema = await $RefParser.dereference(path.abs("test/specs/resolvers/resolvers.yaml"), { + resolve: { + // A custom resolver for "foo://" URLs + foo: { + canRead: /^foo:\/\//i, + read(_file: any) { + return Promise.resolve({ bar: { baz: "hello world" } }); + }, + }, + bar: { + canRead: /^bar:\/\//i, + read(_file: any) { + return Promise.resolve({ Foo: { Baz: "hello world" } }); + }, + }, + }, + }); + expect(schema).to.deep.equal(dereferencedSchema); + }); + } + + it("should continue resolving if a custom resolver fails", async () => { + const schema = await $RefParser.dereference(path.abs("test/specs/resolvers/resolvers.yaml"), { + resolve: { + // A custom resolver that always fails + badResolver: { + order: 1, + canRead: true, + read(_file: any) { + throw new Error("BOMB!!!"); + }, + }, + // A custom resolver for "foo://" URLs + foo: { + canRead: /^foo:\/\//i, + read: { bar: { baz: "hello world" } }, + }, + bar: { + canRead: /^bar:\/\//i, + read: { Foo: { Baz: "hello world" } }, + }, + }, + }); + expect(schema).to.deep.equal(dereferencedSchema); + }); + + it("should normalize errors thrown by resolvers", async () => { + try { + await $RefParser.dereference({ $ref: path.abs("test/specs/resolvers/resolvers.yaml") }, { + resolve: { + // A custom resolver that always fails + file: { + order: 1, + canRead: true, + parse() { + throw new Error("Woops"); + }, + }, + }, + } as ParserOptions); + helper.shouldNotGetCalled(); + } catch (err) { + expect(err).to.be.instanceof(ResolverError); + // @ts-expect-error TS(2571): Object is of type 'unknown'. + expect(err.message).to.contain("Error opening file"); + } + }); + + it("should throw an error if no resolver returned a result", async () => { + try { + await $RefParser.dereference(path.rel("test/specs/resolvers/resolvers.yaml"), { + resolve: { + http: false, + file: { + order: 1, + canRead: true, + read() { + return; + }, + }, + }, + }); + helper.shouldNotGetCalled(); + } catch (err) { + // would time out otherwise + expect(err).to.be.an.instanceOf(ResolverError); + } + }); + + it("should throw a grouped error if no resolver can be matched and continueOnError is true", async () => { + const parser = new $RefParser(); + try { + await parser.dereference(path.abs("test/specs/resolvers/resolvers.yaml"), { + resolve: { + file: false, + http: false, + }, + continueOnError: true, + }); + helper.shouldNotGetCalled(); + } catch (err) { + expect(err).to.be.instanceof(JSONParserErrorGroup); + // @ts-expect-error TS(2571): Object is of type 'unknown'. + expect(err.errors.length).to.equal(1); + // @ts-expect-error TS(2571): Object is of type 'unknown'. + expect(err.errors).to.containSubset([ + { + name: UnmatchedResolverError.name, + message: (message: any) => message.startsWith("Could not find resolver for"), + path: [], + source: (message: any) => message.endsWith("specs/resolvers/resolvers.yaml"), + }, + ]); + } + }); +}); diff --git a/test/specs/root/dereferenced.js b/test/specs/root/bundled.ts similarity index 57% rename from test/specs/root/dereferenced.js rename to test/specs/root/bundled.ts index 81d0f1b6..8ac5913a 100644 --- a/test/specs/root/dereferenced.js +++ b/test/specs/root/bundled.ts @@ -1,16 +1,13 @@ export default { title: "Extending a root $ref", - required: [ - "first", - "last" - ], + required: ["first", "last"], type: "object", properties: { last: { - type: "string" + type: "string", }, first: { - type: "string" - } + type: "string", + }, }, }; diff --git a/test/specs/root/definitions/extended.yaml b/test/specs/root/definitions/extended.yaml index 3a30dffe..c6c18a80 100644 --- a/test/specs/root/definitions/extended.yaml +++ b/test/specs/root/definitions/extended.yaml @@ -1,2 +1,2 @@ title: Extending a root $ref -$ref: name.yaml \ No newline at end of file +$ref: name.yaml diff --git a/test/specs/root/bundled.js b/test/specs/root/dereferenced.ts similarity index 57% rename from test/specs/root/bundled.js rename to test/specs/root/dereferenced.ts index 81d0f1b6..8ac5913a 100644 --- a/test/specs/root/bundled.js +++ b/test/specs/root/dereferenced.ts @@ -1,16 +1,13 @@ export default { title: "Extending a root $ref", - required: [ - "first", - "last" - ], + required: ["first", "last"], type: "object", properties: { last: { - type: "string" + type: "string", }, first: { - type: "string" - } + type: "string", + }, }, }; diff --git a/test/specs/root/parsed.js b/test/specs/root/parsed.js deleted file mode 100644 index 5a235981..00000000 --- a/test/specs/root/parsed.js +++ /dev/null @@ -1,31 +0,0 @@ -export default { - schema: { - $ref: "definitions/root.json" - }, - - root: { - $ref: "../definitions/extended.yaml" - }, - - extended: { - title: "Extending a root $ref", - $ref: "name.yaml" - }, - - name: { - title: "name", - required: [ - "first", - "last" - ], - type: "object", - properties: { - last: { - $ref: "./name.yaml#/properties/first" - }, - first: { - type: "string" - } - }, - } -}; diff --git a/test/specs/root/parsed.ts b/test/specs/root/parsed.ts new file mode 100644 index 00000000..be5b0c3c --- /dev/null +++ b/test/specs/root/parsed.ts @@ -0,0 +1,28 @@ +export default { + schema: { + $ref: "definitions/root.json", + }, + + root: { + $ref: "../definitions/extended.yaml", + }, + + extended: { + title: "Extending a root $ref", + $ref: "name.yaml", + }, + + name: { + title: "name", + required: ["first", "last"], + type: "object", + properties: { + last: { + $ref: "./name.yaml#/properties/first", + }, + first: { + type: "string", + }, + }, + }, +}; diff --git a/test/specs/root/root.spec.js b/test/specs/root/root.spec.js deleted file mode 100644 index 00ef8fa3..00000000 --- a/test/specs/root/root.spec.js +++ /dev/null @@ -1,45 +0,0 @@ -import chai from "chai"; -import $RefParser from "../../../lib/index.js"; -import helper from "../../utils/helper.js"; -import path from "../../utils/path.js"; -import parsedSchema from "./parsed.js"; -import dereferencedSchema from "./dereferenced.js"; -import bundledSchema from "./bundled.js"; - -const { expect } = chai; - -describe("Schema with a top-level (root) $ref", () => { - it("should parse successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.parse(path.rel("specs/root/root.yaml")); - expect(schema).to.equal(parser.schema); - expect(schema).to.deep.equal(parsedSchema.schema); - expect(parser.$refs.paths()).to.deep.equal([path.abs("specs/root/root.yaml")]); - }); - - it("should resolve successfully", helper.testResolve( - path.rel("specs/root/root.yaml"), - path.abs("specs/root/root.yaml"), parsedSchema.schema, - path.abs("specs/root/definitions/root.json"), parsedSchema.root, - path.abs("specs/root/definitions/extended.yaml"), parsedSchema.extended, - path.abs("specs/root/definitions/name.yaml"), parsedSchema.name - )); - - it("should dereference successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.dereference(path.rel("specs/root/root.yaml")); - expect(schema).to.equal(parser.schema); - expect(schema).to.deep.equal(dereferencedSchema); - // Reference equality - expect(schema.properties.first).to.equal(schema.properties.last); - // The "circular" flag should NOT be set - expect(parser.$refs.circular).to.equal(false); - }); - - it("should bundle successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.bundle(path.rel("specs/root/root.yaml")); - expect(schema).to.equal(parser.schema); - expect(schema).to.deep.equal(bundledSchema); - }); -}); diff --git a/test/specs/root/root.spec.ts b/test/specs/root/root.spec.ts new file mode 100644 index 00000000..cf475e4d --- /dev/null +++ b/test/specs/root/root.spec.ts @@ -0,0 +1,53 @@ +import { describe, it } from "vitest"; +import $RefParser from "../../../lib/index.js"; +import helper from "../../utils/helper.js"; +import path from "../../utils/path.js"; +import parsedSchema from "./parsed.js"; +import dereferencedSchema from "./dereferenced.js"; +import bundledSchema from "./bundled.js"; + +import { expect } from "vitest"; + +describe("Schema with a top-level (root) $ref", () => { + it("should parse successfully", async () => { + const parser = new $RefParser(); + const schema = await parser.parse(path.rel("test/specs/root/root.yaml")); + expect(schema).to.equal(parser.schema); + expect(schema).to.deep.equal(parsedSchema.schema); + expect(parser.$refs.paths()).to.deep.equal([path.abs("test/specs/root/root.yaml")]); + }); + + it( + "should resolve successfully", + helper.testResolve( + path.rel("test/specs/root/root.yaml"), + path.abs("test/specs/root/root.yaml"), + parsedSchema.schema, + path.abs("test/specs/root/definitions/root.json"), + parsedSchema.root, + path.abs("test/specs/root/definitions/extended.yaml"), + parsedSchema.extended, + path.abs("test/specs/root/definitions/name.yaml"), + parsedSchema.name, + ), + ); + + it("should dereference successfully", async () => { + const parser = new $RefParser(); + const schema = await parser.dereference(path.rel("test/specs/root/root.yaml")); + expect(schema).to.equal(parser.schema); + expect(schema).to.deep.equal(dereferencedSchema); + // Reference equality + // @ts-expect-error TS(2532): Object is possibly 'undefined'. + expect(schema.properties.first).to.equal(schema.properties.last); + // The "circular" flag should NOT be set + expect(parser.$refs.circular).to.equal(false); + }); + + it("should bundle successfully", async () => { + const parser = new $RefParser(); + const schema = await parser.bundle(path.rel("test/specs/root/root.yaml")); + expect(schema).to.equal(parser.schema); + expect(schema).to.deep.equal(bundledSchema); + }); +}); diff --git a/test/specs/root/root.yaml b/test/specs/root/root.yaml index 7baf90c1..4c4959b2 100644 --- a/test/specs/root/root.yaml +++ b/test/specs/root/root.yaml @@ -1 +1 @@ -$ref: definitions/root.json \ No newline at end of file +$ref: definitions/root.json diff --git a/test/specs/substrings/bundled.js b/test/specs/substrings/bundled.ts similarity index 57% rename from test/specs/substrings/bundled.js rename to test/specs/substrings/bundled.ts index de0ed762..573913fd 100644 --- a/test/specs/substrings/bundled.js +++ b/test/specs/substrings/bundled.ts @@ -3,30 +3,28 @@ export default { definitions: { "name-with-min-length": { "min-length": 1, - type: "string" + type: "string", }, "name-with-min-length-max-length": { "min-length": 1, "max-length": 20, - type: "string" + type: "string", }, name: { - type: "string" - } + type: "string", + }, }, - required: [ - "name" - ], + required: ["name"], type: "object", properties: { middleName: { - $ref: "#/definitions/name-with-min-length" + $ref: "#/definitions/name-with-min-length", }, lastName: { - $ref: "#/definitions/name-with-min-length-max-length" + $ref: "#/definitions/name-with-min-length-max-length", }, firstName: { - $ref: "#/definitions/name" - } + $ref: "#/definitions/name", + }, }, }; diff --git a/test/specs/substrings/dereferenced.js b/test/specs/substrings/dereferenced.ts similarity index 70% rename from test/specs/substrings/dereferenced.js rename to test/specs/substrings/dereferenced.ts index 931f34b6..96d0fe36 100644 --- a/test/specs/substrings/dereferenced.js +++ b/test/specs/substrings/dereferenced.ts @@ -3,33 +3,31 @@ export default { definitions: { "name-with-min-length": { "min-length": 1, - type: "string" + type: "string", }, "name-with-min-length-max-length": { "min-length": 1, "max-length": 20, - type: "string" + type: "string", }, name: { - type: "string" - } + type: "string", + }, }, - required: [ - "name" - ], + required: ["name"], type: "object", properties: { middleName: { "min-length": 1, - type: "string" + type: "string", }, lastName: { "min-length": 1, "max-length": 20, - type: "string" + type: "string", }, firstName: { - type: "string" - } + type: "string", + }, }, }; diff --git a/test/specs/substrings/parsed.js b/test/specs/substrings/parsed.ts similarity index 65% rename from test/specs/substrings/parsed.js rename to test/specs/substrings/parsed.ts index 338e6f6b..e2f32767 100644 --- a/test/specs/substrings/parsed.js +++ b/test/specs/substrings/parsed.ts @@ -1,36 +1,34 @@ export default { schema: { definitions: { - $ref: "definitions/definitions.json" + $ref: "definitions/definitions.json", }, - required: [ - "name" - ], + required: ["name"], type: "object", properties: { middleName: { - $ref: "#/definitions/name-with-min-length" + $ref: "#/definitions/name-with-min-length", }, lastName: { - $ref: "#/definitions/name-with-min-length-max-length" + $ref: "#/definitions/name-with-min-length-max-length", }, firstName: { - $ref: "#/definitions/name" - } + $ref: "#/definitions/name", + }, }, - title: "Person" + title: "Person", }, definitions: { name: { - $ref: "strings.yaml#/definitions/string" + $ref: "strings.yaml#/definitions/string", }, "name-with-min-length": { - $ref: "../definitions/strings.yaml#/definitions/string-with-min-length" + $ref: "../definitions/strings.yaml#/definitions/string-with-min-length", }, "name-with-min-length-max-length": { - $ref: "./strings.yaml#/definitions/string-with-min-length-max-length" - } + $ref: "./strings.yaml#/definitions/string-with-min-length-max-length", + }, }, strings: { @@ -45,8 +43,8 @@ export default { "max-length": 20, }, string: { - type: "string" - } - } - } + type: "string", + }, + }, + }, }; diff --git a/test/specs/substrings/substrings.spec.js b/test/specs/substrings/substrings.spec.ts similarity index 51% rename from test/specs/substrings/substrings.spec.js rename to test/specs/substrings/substrings.spec.ts index 057de458..8eca1faf 100644 --- a/test/specs/substrings/substrings.spec.js +++ b/test/specs/substrings/substrings.spec.ts @@ -1,4 +1,4 @@ -import chai from "chai"; +import { describe, it } from "vitest"; import $RefParser from "../../../lib/index.js"; import helper from "../../utils/helper.js"; import path from "../../utils/path.js"; @@ -6,40 +6,49 @@ import parsedSchema from "./parsed.js"; import dereferencedSchema from "./dereferenced.js"; import bundledSchema from "./bundled.js"; -const { expect } = chai; +import { expect } from "vitest"; describe("$refs that are substrings of each other", () => { it("should parse successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.parse(path.rel("specs/substrings/substrings.yaml")); + const parser = new $RefParser(); + const schema = await parser.parse(path.rel("test/specs/substrings/substrings.yaml")); expect(schema).to.equal(parser.schema); expect(schema).to.deep.equal(parsedSchema.schema); - expect(parser.$refs.paths()).to.deep.equal([path.abs("specs/substrings/substrings.yaml")]); + expect(parser.$refs.paths()).to.deep.equal([path.abs("test/specs/substrings/substrings.yaml")]); }); - it("should resolve successfully", helper.testResolve( - path.rel("specs/substrings/substrings.yaml"), - path.abs("specs/substrings/substrings.yaml"), parsedSchema.schema, - path.abs("specs/substrings/definitions/definitions.json"), parsedSchema.definitions, - path.abs("specs/substrings/definitions/strings.yaml"), parsedSchema.strings - )); + it( + "should resolve successfully", + helper.testResolve( + path.rel("test/specs/substrings/substrings.yaml"), + path.abs("test/specs/substrings/substrings.yaml"), + parsedSchema.schema, + path.abs("test/specs/substrings/definitions/definitions.json"), + parsedSchema.definitions, + path.abs("test/specs/substrings/definitions/strings.yaml"), + parsedSchema.strings, + ), + ); it("should dereference successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.dereference(path.rel("specs/substrings/substrings.yaml")); + const parser = new $RefParser(); + const schema = await parser.dereference(path.rel("test/specs/substrings/substrings.yaml")); expect(schema).to.equal(parser.schema); expect(schema).to.deep.equal(dereferencedSchema); // Reference equality + // @ts-expect-error TS(2532): Object is possibly 'undefined'. expect(schema.properties.firstName).to.equal(schema.definitions.name); + // @ts-expect-error TS(2532): Object is possibly 'undefined'. expect(schema.properties.middleName).to.equal(schema.definitions["name-with-min-length"]); + // @ts-expect-error TS(2532): Object is possibly 'undefined'. expect(schema.properties.lastName).to.equal(schema.definitions["name-with-min-length-max-length"]); // The "circular" flag should NOT be set expect(parser.$refs.circular).to.equal(false); }); it("should bundle successfully", async () => { - let parser = new $RefParser(); - const schema = await parser.bundle(path.rel("specs/substrings/substrings.yaml")); + const parser = new $RefParser(); + const schema = await parser.bundle(path.rel("test/specs/substrings/substrings.yaml")); expect(schema).to.equal(parser.schema); expect(schema).to.deep.equal(bundledSchema); }); diff --git a/test/specs/typescript-definition.spec.ts b/test/specs/typescript-definition.spec.ts deleted file mode 100644 index 5b15d7a1..00000000 --- a/test/specs/typescript-definition.spec.ts +++ /dev/null @@ -1,139 +0,0 @@ -import * as assert from "assert"; -import * as $RefParser from "../../lib"; - -const baseUrl = "http://example.com/schema"; -const schemaPath = "my-schema.json"; -const schemaObject: $RefParser.JSONSchema = { title: "my-schema" }; -const options = {}; -const promiseResolve = (_: object) => undefined; -const promiseReject = (_: Error) => undefined; -const callback = (_err: Error | null, _schema?: object) => undefined; - - -// $RefParser class instance -let parser = new $RefParser(); - - -// $RefParser instance properties -assert(parser.$refs.circular === true); -assert(parser.schema.type === "object"); - - -// $RefParser instance methods (with callbacks) -parser.bundle(schemaPath, callback); -parser.bundle(schemaObject, callback); -parser.bundle(schemaPath, options, callback); -parser.bundle(schemaObject, options, callback); -parser.bundle(baseUrl, schemaPath, options, callback); -parser.bundle(baseUrl, schemaObject, options, callback); - -parser.dereference(schemaPath, callback); -parser.dereference(schemaObject, callback); -parser.dereference(schemaPath, options, callback); -parser.dereference(schemaObject, options, callback); -parser.dereference(baseUrl, schemaPath, options, callback); -parser.dereference(baseUrl, schemaObject, options, callback); - -parser.parse(schemaPath, callback); -parser.parse(schemaObject, callback); -parser.parse(schemaPath, options, callback); -parser.parse(schemaObject, options, callback); -parser.parse(baseUrl, schemaPath, options, callback); -parser.parse(baseUrl, schemaObject, options, callback); - -parser.resolve(schemaPath, callback); -parser.resolve(schemaObject, callback); -parser.resolve(schemaPath, options, callback); -parser.resolve(schemaObject, options, callback); -parser.resolve(baseUrl, schemaPath, options, callback); -parser.resolve(baseUrl, schemaObject, options, callback); - - -// $RefParser instance methods (with Promises) -parser.bundle(schemaPath).then(promiseResolve, promiseReject); -parser.bundle(schemaObject).then(promiseResolve, promiseReject); -parser.bundle(schemaPath, options).then(promiseResolve, promiseReject); -parser.bundle(schemaObject, options).then(promiseResolve, promiseReject); -parser.bundle(baseUrl, schemaPath, options).then(promiseResolve, promiseReject); -parser.bundle(baseUrl, schemaObject, options).then(promiseResolve, promiseReject); - -parser.dereference(schemaPath).then(promiseResolve, promiseReject); -parser.dereference(schemaObject).then(promiseResolve, promiseReject); -parser.dereference(schemaPath, options).then(promiseResolve, promiseReject); -parser.dereference(schemaObject, options).then(promiseResolve, promiseReject); -parser.dereference(baseUrl, schemaPath, options).then(promiseResolve, promiseReject); -parser.dereference(baseUrl, schemaObject, options).then(promiseResolve, promiseReject); - -parser.parse(schemaPath).then(promiseResolve, promiseReject); -parser.parse(schemaObject).then(promiseResolve, promiseReject); -parser.parse(schemaPath, options).then(promiseResolve, promiseReject); -parser.parse(schemaObject, options).then(promiseResolve, promiseReject); -parser.parse(baseUrl, schemaPath, options).then(promiseResolve, promiseReject); -parser.parse(baseUrl, schemaObject, options).then(promiseResolve, promiseReject); - -parser.resolve(schemaPath).then(promiseResolve, promiseReject); -parser.resolve(schemaObject).then(promiseResolve, promiseReject); -parser.resolve(schemaPath, options).then(promiseResolve, promiseReject); -parser.resolve(schemaObject, options).then(promiseResolve, promiseReject); -parser.resolve(baseUrl, schemaPath, options).then(promiseResolve, promiseReject); -parser.resolve(baseUrl, schemaObject, options).then(promiseResolve, promiseReject); - - -// $RefParser static methods (with callbacks) -$RefParser.bundle(schemaPath, callback); -$RefParser.bundle(schemaObject, callback); -$RefParser.bundle(schemaPath, options, callback); -$RefParser.bundle(schemaObject, options, callback); -$RefParser.bundle(baseUrl, schemaPath, options, callback); -$RefParser.bundle(baseUrl, schemaObject, options, callback); - -$RefParser.dereference(schemaPath, callback); -$RefParser.dereference(schemaObject, callback); -$RefParser.dereference(schemaPath, options, callback); -$RefParser.dereference(schemaObject, options, callback); -$RefParser.dereference(baseUrl, schemaPath, options, callback); -$RefParser.dereference(baseUrl, schemaObject, options, callback); - -$RefParser.parse(schemaPath, callback); -$RefParser.parse(schemaObject, callback); -$RefParser.parse(schemaPath, options, callback); -$RefParser.parse(schemaObject, options, callback); -$RefParser.parse(baseUrl, schemaPath, options, callback); -$RefParser.parse(baseUrl, schemaObject, options, callback); - -$RefParser.resolve(schemaPath, callback); -$RefParser.resolve(schemaObject, callback); -$RefParser.resolve(schemaPath, options, callback); -$RefParser.resolve(schemaObject, options, callback); -$RefParser.resolve(baseUrl, schemaPath, options, callback); -$RefParser.resolve(baseUrl, schemaObject, options, callback); - - -// $RefParser static methods (with Promises) -$RefParser.bundle(schemaPath).then(promiseResolve, promiseReject); -$RefParser.bundle(schemaObject).then(promiseResolve, promiseReject); -$RefParser.bundle(schemaPath, options).then(promiseResolve, promiseReject); -$RefParser.bundle(schemaObject, options).then(promiseResolve, promiseReject); -$RefParser.bundle(baseUrl, schemaPath, options).then(promiseResolve, promiseReject); -$RefParser.bundle(baseUrl, schemaObject, options).then(promiseResolve, promiseReject); - -$RefParser.dereference(schemaPath).then(promiseResolve, promiseReject); -$RefParser.dereference(schemaObject).then(promiseResolve, promiseReject); -$RefParser.dereference(schemaPath, options).then(promiseResolve, promiseReject); -$RefParser.dereference(schemaObject, options).then(promiseResolve, promiseReject); -$RefParser.dereference(baseUrl, schemaPath, options).then(promiseResolve, promiseReject); -$RefParser.dereference(baseUrl, schemaObject, options).then(promiseResolve, promiseReject); - -$RefParser.parse(schemaPath).then(promiseResolve, promiseReject); -$RefParser.parse(schemaObject).then(promiseResolve, promiseReject); -$RefParser.parse(schemaPath, options).then(promiseResolve, promiseReject); -$RefParser.parse(schemaObject, options).then(promiseResolve, promiseReject); -$RefParser.parse(baseUrl, schemaPath, options).then(promiseResolve, promiseReject); -$RefParser.parse(baseUrl, schemaObject, options).then(promiseResolve, promiseReject); - -$RefParser.resolve(schemaPath).then(promiseResolve, promiseReject); -$RefParser.resolve(schemaObject).then(promiseResolve, promiseReject); -$RefParser.resolve(schemaPath, options).then(promiseResolve, promiseReject); -$RefParser.resolve(schemaObject, options).then(promiseResolve, promiseReject); -$RefParser.resolve(baseUrl, schemaPath, options).then(promiseResolve, promiseReject); -$RefParser.resolve(baseUrl, schemaObject, options).then(promiseResolve, promiseReject); diff --git a/test/specs/util/url.spec.js b/test/specs/util/url.spec.ts similarity index 84% rename from test/specs/util/url.spec.js rename to test/specs/util/url.spec.ts index dfe2cc85..8500954d 100644 --- a/test/specs/util/url.spec.js +++ b/test/specs/util/url.spec.ts @@ -1,7 +1,5 @@ -import chai from "chai"; -import chaiSubset from "chai-subset"; -chai.use(chaiSubset); -const { expect } = chai; +import { describe, it } from "vitest"; +import { expect } from "vitest"; import * as $url from "../../../lib/util/url.js"; describe("Return the extension of a URL", () => { diff --git a/test/tsconfig.json b/test/tsconfig.json new file mode 100644 index 00000000..e33b316d --- /dev/null +++ b/test/tsconfig.json @@ -0,0 +1,27 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "module": "ESNext", + "target": "ESNext", + "allowJs": true, + "noEmit": true, + "allowSyntheticDefaultImports": true, + "baseUrl": "..", + "declaration": true, + "esModuleInterop": true, + "inlineSourceMap": false, + "lib": ["esnext", "dom"], + "listEmittedFiles": false, + "listFiles": false, + "moduleResolution": "node16", + "noFallthroughCasesInSwitch": true, + "pretty": true, + "resolveJsonModule": true, + "rootDir": "..", + "skipLibCheck": true, + "strict": true + }, + "compileOnSave": false, + "exclude": ["node_modules"], + "include": ["lib/**/*", "test/**/*" , "../vite.config.ts"] +} diff --git a/test/utils/helper.js b/test/utils/helper.ts similarity index 63% rename from test/utils/helper.js rename to test/utils/helper.ts index 3da1b72a..8abb9717 100644 --- a/test/utils/helper.js +++ b/test/utils/helper.ts @@ -1,14 +1,12 @@ import $RefParser from "../../lib/index.js"; -import { host } from "@jsdevtools/host-environment"; -import chai from "chai"; -const { expect } = chai; +import { expect } from "vitest"; const helper = { /** * Throws an error if called. */ - shouldNotGetCalled () { + shouldNotGetCalled() { throw new Error("This function should not have gotten called."); }, @@ -20,9 +18,11 @@ const helper = { * @param {...*} [params] - The expected resolved file paths and values * @returns {Function} */ - testResolve (filePath, params) { - let parsedSchema = arguments[2]; - let expectedFiles = [], messages = [], actualFiles; + testResolve(filePath: string, ...params: (string | undefined | object)[]) { + const parsedSchema = arguments[2]; + const expectedFiles: any = []; + const messages: any = []; + let actualFiles: any; for (let i = 1; i < arguments.length; i += 2) { expectedFiles.push(arguments[i]); @@ -30,8 +30,8 @@ const helper = { } return async () => { - let parser = new $RefParser(); - let $refs = await parser.resolve(filePath); + const parser = new $RefParser(); + const $refs = await parser.resolve(filePath); expect(parser.schema).to.deep.equal(parsedSchema); expect(parser.$refs).to.equal($refs); @@ -39,27 +39,28 @@ const helper = { // Resolved file paths try { expect((actualFiles = $refs.paths())).to.have.same.members(expectedFiles); - if (host.node) { + if (typeof window === "undefined") { + // @ts-expect-error TS(2345): Argument of type 'string[]' is not assignable to p... Remove this comment to see the full error message expect((actualFiles = $refs.paths(["file"]))).to.have.same.members(expectedFiles); expect($refs.paths("http")).to.be.an("array").with.lengthOf(0); - } - else { + } else { + // @ts-expect-error TS(2345): Argument of type 'string[]' is not assignable to p... Remove this comment to see the full error message expect((actualFiles = $refs.paths(["http"]))).to.have.same.members(expectedFiles); expect($refs.paths("file")).to.be.an("array").with.lengthOf(0); } - } - catch (e) { + } catch (e) { console.log("Expected Files:", JSON.stringify(expectedFiles, null, 2)); console.log("Actual Files:", JSON.stringify(actualFiles, null, 2)); throw e; } // Resolved values - let values = $refs.values(); + const values = $refs.values(); expect(values).to.have.keys(expectedFiles); - for (let [i, file] of expectedFiles.entries()) { - let actual = helper.convertNodeBuffersToPOJOs(values[file]); - let expected = messages[i]; + for (const [i, file] of expectedFiles.entries()) { + // @ts-expect-error TS(7053): Element implicitly has an 'any' type because expre... Remove this comment to see the full error message + const actual = helper.convertNodeBuffersToPOJOs(values[file]); + const expected = messages[i]; expect(actual).to.deep.equal(expected, file); } }; @@ -68,15 +69,10 @@ const helper = { /** * Converts Buffer objects to POJOs, so they can be compared using Chai */ - convertNodeBuffersToPOJOs (value) { + convertNodeBuffersToPOJOs(value: any) { if (value && (value._isBuffer || (value.constructor && value.constructor.name === "Buffer"))) { // Convert Buffers to POJOs for comparison value = value.toJSON(); - - if (host.node && host.node.version === 0.1) { - // Node v0.10 serializes buffers differently - value = { type: "Buffer", data: value }; - } } return value; }, @@ -84,11 +80,11 @@ const helper = { /** * Creates a deep clone of the given value. */ - cloneDeep (value) { + cloneDeep(value: any) { let clone = value; - if (value && typeof (value) === "object") { + if (value && typeof value === "object") { clone = value instanceof Array ? [] : {}; - let keys = Object.keys(value); + const keys = Object.keys(value); for (let i = 0; i < keys.length; i++) { clone[keys[i]] = helper.cloneDeep(value[keys[i]]); } diff --git a/test/utils/path.js b/test/utils/path.ts similarity index 56% rename from test/utils/path.js rename to test/utils/path.ts index 6b62c028..829b899e 100644 --- a/test/utils/path.js +++ b/test/utils/path.ts @@ -1,33 +1,25 @@ import nodePath from "path"; import nodeUrl from "url"; -import { host } from "@jsdevtools/host-environment"; -import projectDir from "../../lib/util/projectDir.cjs"; -const isWindows = /^win/.test(globalThis.process ? globalThis.process.platform : undefined); -const getPathFromOs = filePath => isWindows ? filePath.replace(/\\/g, "/") : filePath; +const isWindows = /^win/.test(globalThis.process ? globalThis.process.platform : ""); +const getPathFromOs = (filePath: any) => (isWindows ? filePath.replace(/\\/g, "/") : filePath); +const isDom = typeof window !== "undefined" && typeof window.document !== "undefined"; const pathHelpers = { filesystem: filesystemPathHelpers(), - url: urlPathHelpers() + url: urlPathHelpers(), }; /** * Helper functions for getting local filesystem paths in various formats */ -function filesystemPathHelpers () { - - if (host.node) { - const testsDir = nodePath.resolve(projectDir, "test") - - // Run all tests from the "test" directory - process.chdir(testsDir); - } - +function filesystemPathHelpers() { + // Run all tests from the "test" directory const path = { /** * Returns the relative path of a file in the "test" directory */ - rel (file) { + rel(file: any) { const relativePath = nodePath.normalize(nodePath.join(file)); const filePath = isWindows ? nodePath.resolve(relativePath) : relativePath; return getPathFromOs(filePath); @@ -36,7 +28,7 @@ function filesystemPathHelpers () { /** * Returns the absolute path of a file in the "test" directory */ - abs (file) { + abs(file: any) { const absolutePath = nodePath.resolve(nodePath.join(file || nodePath.sep)); return getPathFromOs(absolutePath); }, @@ -44,25 +36,25 @@ function filesystemPathHelpers () { /** * Returns the path with normalized, UNIX-like, slashes. Disk letter is lower-cased, if present. */ - unixify (file) { - return file.replace(/\\/g, "/").replace(/^[A-Z](?=:\/)/, (letter) => letter.toLowerCase()); + unixify(file: any) { + return file.replace(/\\/g, "/").replace(/^[A-Z](?=:\/)/, (letter: any) => letter.toLowerCase()); }, /** * Returns the path of a file in the "test" directory as a URL. * (e.g. "file://path/to/json-schema-ref-parser/test/files...") */ - url (file) { + url(file: any) { let pathname = path.abs(file); - if (host.os.windows) { - pathname = pathname.replace(/\\/g, "/"); // Convert Windows separators to URL separators + if (isWindows) { + pathname = pathname.replace(/\\/g, "/"); // Convert Windows separators to URL separators } - let url = nodeUrl.format({ + const url = nodeUrl.format({ protocol: "file:", slashes: true, - pathname + pathname, }); return url; @@ -71,9 +63,9 @@ function filesystemPathHelpers () { /** * Returns the absolute path of the current working directory. */ - cwd () { + cwd() { return getPathFromOs(nodePath.join(process.cwd(), nodePath.sep)); - } + }, }; return path; @@ -82,19 +74,18 @@ function filesystemPathHelpers () { /** * Helper functions for getting URLs in various formats */ -function urlPathHelpers () { - if (host.node) { - return +function urlPathHelpers() { + if (!isDom) { + return; } // Get the URL of the "test" directory - let filename = document.querySelector('script[src*="/fixtures/"]').src; - let testsDir = filename.substr(0, filename.indexOf("/fixtures/")) + "/"; + const testsDir = window.location.href; /** * URI-encodes the given file name */ - function encodePath (file) { + function encodePath(file: any) { return encodeURIComponent(file).split("%2F").join("/"); } @@ -104,7 +95,7 @@ function urlPathHelpers () { * * NOTE: When running in Karma the absolute path is returned instead */ - rel (file) { + rel(file: any) { // Encode special characters in paths file = encodePath(file); @@ -112,64 +103,68 @@ function urlPathHelpers () { // We're running from the "/test/index.html" page, directly in a browser. // So return the relative path from the "test" directory. return file; - } - else { + } else { // We're running in Karma, so return an absolute path, // since we don't know the relative path of the "test" directory. - return testsDir.replace(/^https?:\/\/[^\/]+(\/.*)/, "$1" + file); + return testsDir.replace(/^https?:\/\/[^/]+(\/.*)/, "$1" + file); } }, /** * Returns the absolute path of a file in the "test" directory */ - abs (file) { + abs(file: any) { return testsDir + encodePath(file); }, /** * Does nothing. Needed to comply with Filesystem path helpers. */ - unixify (file) { + unixify(file: any) { return file; }, /** * Returns the path of a file in the "test" directory as an absolute URL. * (e.g. "http://localhost/test/files/...") */ - url (file) { + url(file: any) { return path.abs(file); }, /** * Returns the path of the current page. */ - cwd () { + cwd() { return location.href; - } + }, }; return path; } export default { - rel (file) { - return host.node ? pathHelpers.filesystem.rel(...arguments) : pathHelpers.url.rel(...arguments) + rel(file: any) { + // @ts-expect-error TS(2556): A spread argument must either have a tuple type or... Remove this comment to see the full error message + return !isDom ? pathHelpers.filesystem.rel(...arguments) : pathHelpers.url.rel(...arguments); }, - abs (file) { - return host.node ? pathHelpers.filesystem.abs(...arguments) : pathHelpers.url.abs(...arguments) + abs(file: any) { + // @ts-expect-error TS(2556): A spread argument must either have a tuple type or... Remove this comment to see the full error message + return !isDom ? pathHelpers.filesystem.abs(...arguments) : pathHelpers.url.abs(...arguments); }, - unixify (file) { - return host.node ? pathHelpers.filesystem.unixify(...arguments) : pathHelpers.url.unixify(...arguments) + unixify(file: any) { + // @ts-expect-error TS(2556): A spread argument must either have a tuple type or... Remove this comment to see the full error message + return !isDom ? pathHelpers.filesystem.unixify(...arguments) : pathHelpers.url.unixify(...arguments); }, - url (file) { - return host.node ? pathHelpers.filesystem.url(...arguments) : pathHelpers.url.url(...arguments) + url(file: any) { + // @ts-expect-error TS(2556): A spread argument must either have a tuple type or... Remove this comment to see the full error message + return !isDom ? pathHelpers.filesystem.url(...arguments) : pathHelpers.url.url(...arguments); }, - cwd () { - return host.node ? pathHelpers.filesystem.cwd(...arguments) : pathHelpers.url.cwd(...arguments) - } -} + cwd() { + // @ts-expect-error TS(2556): A spread argument must either have a tuple type or... Remove this comment to see the full error message + return !isDom ? pathHelpers.filesystem.cwd(...arguments) : pathHelpers.url.cwd(...arguments); + }, +}; diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 00000000..b8c53a42 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "module": "commonjs", + "outDir": "dist", + "target": "es6", + "allowJs": true, + "allowSyntheticDefaultImports": true, + "baseUrl": "src", + "declaration": true, + "esModuleInterop": true, + "inlineSourceMap": false, + "lib": ["esnext", "dom"], + "listEmittedFiles": false, + "listFiles": false, + "noFallthroughCasesInSwitch": true, + "pretty": true, + "resolveJsonModule": true, + "rootDir": ".", + "skipLibCheck": true, + "strict": true + }, + "compileOnSave": false, + "exclude": ["node_modules", "dist"], + "include": ["lib/**/*", "vite.config.ts"] +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 00000000..d322f4cc --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,22 @@ +import { defineConfig } from "vitest/config"; + +const isBrowser = process.env.BROWSER === "true"; +export default defineConfig({ + test: { + environment: isBrowser ? "jsdom" : "node", + dir: "test", + exclude: ["**/__IGNORED__/**"], + watch: false, + globalSetup: isBrowser ? ["./test/fixtures/server.ts"] : undefined, + setupFiles: isBrowser ? ["./test/fixtures/polyfill.ts"] : undefined, + testTimeout: 5000, + globals: true, + passWithNoTests: true, + reporters: ["verbose"], + coverage: { reporter: ["lcov", "html", "text"] }, + deps: { + fallbackCJS: true, + registerNodeLoader: true, + }, + }, +}); diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 00000000..6ab42892 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,2958 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + +"@esbuild/android-arm64@0.16.17": + version "0.16.17" + resolved "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.17.tgz#cf91e86df127aa3d141744edafcba0abdc577d23" + integrity sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg== + +"@esbuild/android-arm@0.16.17": + version "0.16.17" + resolved "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.17.tgz#025b6246d3f68b7bbaa97069144fb5fb70f2fff2" + integrity sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw== + +"@esbuild/android-x64@0.16.17": + version "0.16.17" + resolved "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.17.tgz#c820e0fef982f99a85c4b8bfdd582835f04cd96e" + integrity sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ== + +"@esbuild/darwin-arm64@0.16.17": + version "0.16.17" + resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.17.tgz#edef4487af6b21afabba7be5132c26d22379b220" + integrity sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w== + +"@esbuild/darwin-x64@0.16.17": + version "0.16.17" + resolved "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.17.tgz#42829168730071c41ef0d028d8319eea0e2904b4" + integrity sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg== + +"@esbuild/freebsd-arm64@0.16.17": + version "0.16.17" + resolved "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.17.tgz#1f4af488bfc7e9ced04207034d398e793b570a27" + integrity sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw== + +"@esbuild/freebsd-x64@0.16.17": + version "0.16.17" + resolved "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.17.tgz#636306f19e9bc981e06aa1d777302dad8fddaf72" + integrity sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug== + +"@esbuild/linux-arm64@0.16.17": + version "0.16.17" + resolved "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.17.tgz#a003f7ff237c501e095d4f3a09e58fc7b25a4aca" + integrity sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g== + +"@esbuild/linux-arm@0.16.17": + version "0.16.17" + resolved "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.17.tgz#b591e6a59d9c4fe0eeadd4874b157ab78cf5f196" + integrity sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ== + +"@esbuild/linux-ia32@0.16.17": + version "0.16.17" + resolved "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.17.tgz#24333a11027ef46a18f57019450a5188918e2a54" + integrity sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg== + +"@esbuild/linux-loong64@0.16.17": + version "0.16.17" + resolved "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.17.tgz#d5ad459d41ed42bbd4d005256b31882ec52227d8" + integrity sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ== + +"@esbuild/linux-mips64el@0.16.17": + version "0.16.17" + resolved "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.17.tgz#4e5967a665c38360b0a8205594377d4dcf9c3726" + integrity sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw== + +"@esbuild/linux-ppc64@0.16.17": + version "0.16.17" + resolved "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.17.tgz#206443a02eb568f9fdf0b438fbd47d26e735afc8" + integrity sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g== + +"@esbuild/linux-riscv64@0.16.17": + version "0.16.17" + resolved "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.17.tgz#c351e433d009bf256e798ad048152c8d76da2fc9" + integrity sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw== + +"@esbuild/linux-s390x@0.16.17": + version "0.16.17" + resolved "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.17.tgz#661f271e5d59615b84b6801d1c2123ad13d9bd87" + integrity sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w== + +"@esbuild/linux-x64@0.16.17": + version "0.16.17" + resolved "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.17.tgz#e4ba18e8b149a89c982351443a377c723762b85f" + integrity sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw== + +"@esbuild/netbsd-x64@0.16.17": + version "0.16.17" + resolved "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.17.tgz#7d4f4041e30c5c07dd24ffa295c73f06038ec775" + integrity sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA== + +"@esbuild/openbsd-x64@0.16.17": + version "0.16.17" + resolved "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.17.tgz#970fa7f8470681f3e6b1db0cc421a4af8060ec35" + integrity sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg== + +"@esbuild/sunos-x64@0.16.17": + version "0.16.17" + resolved "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.17.tgz#abc60e7c4abf8b89fb7a4fe69a1484132238022c" + integrity sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw== + +"@esbuild/win32-arm64@0.16.17": + version "0.16.17" + resolved "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.17.tgz#7b0ff9e8c3265537a7a7b1fd9a24e7bd39fcd87a" + integrity sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw== + +"@esbuild/win32-ia32@0.16.17": + version "0.16.17" + resolved "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.17.tgz#e90fe5267d71a7b7567afdc403dfd198c292eb09" + integrity sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig== + +"@esbuild/win32-x64@0.16.17": + version "0.16.17" + resolved "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.17.tgz#c5a1a4bfe1b57f0c3e61b29883525c6da3e5c091" + integrity sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q== + +"@eslint/eslintrc@^1.4.1": + version "1.4.1" + resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz#af58772019a2d271b7e2d4c23ff4ddcba3ccfb3e" + integrity sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.4.0" + globals "^13.19.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@humanwhocodes/config-array@^0.11.8": + version "0.11.8" + resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz#03595ac2075a4dc0f191cc2131de14fbd7d410b9" + integrity sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g== + dependencies: + "@humanwhocodes/object-schema" "^1.2.1" + debug "^4.1.1" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^1.2.1": + version "1.2.1" + resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + +"@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3": + version "0.1.3" + resolved "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + +"@jridgewell/resolve-uri@3.1.0": + version "3.1.0" + resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + +"@jridgewell/sourcemap-codec@1.4.14": + version "1.4.14" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + +"@jridgewell/trace-mapping@^0.3.12": + version "0.3.17" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" + integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== + dependencies: + "@jridgewell/resolve-uri" "3.1.0" + "@jridgewell/sourcemap-codec" "1.4.14" + +"@jsdevtools/ono@^7.1.3": + version "7.1.3" + resolved "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz#9df03bbd7c696a5c58885c34aa06da41c8543796" + integrity sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": + version "1.2.8" + resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@tootallnate/once@2": + version "2.0.0" + resolved "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" + integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== + +"@types/chai-subset@^1.3.3": + version "1.3.3" + resolved "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.3.tgz#97893814e92abd2c534de422cb377e0e0bdaac94" + integrity sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw== + dependencies: + "@types/chai" "*" + +"@types/chai@*", "@types/chai@^4.3.4": + version "4.3.4" + resolved "https://registry.npmjs.org/@types/chai/-/chai-4.3.4.tgz#e913e8175db8307d78b4e8fa690408ba6b65dee4" + integrity sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw== + +"@types/eslint@8.4.10": + version "8.4.10" + resolved "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz#19731b9685c19ed1552da7052b6f668ed7eb64bb" + integrity sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/estree@*": + version "1.0.0" + resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" + integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== + +"@types/istanbul-lib-coverage@^2.0.1": + version "2.0.4" + resolved "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" + integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + +"@types/js-yaml@^4.0.5": + version "4.0.5" + resolved "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.5.tgz#738dd390a6ecc5442f35e7f03fa1431353f7e138" + integrity sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA== + +"@types/json-schema@*", "@types/json-schema@^7.0.11", "@types/json-schema@^7.0.9": + version "7.0.11" + resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== + +"@types/lodash.clonedeep@^4.5.7": + version "4.5.7" + resolved "https://registry.npmjs.org/@types/lodash.clonedeep/-/lodash.clonedeep-4.5.7.tgz#0e119f582ed6f9e6b373c04a644651763214f197" + integrity sha512-ccNqkPptFIXrpVqUECi60/DFxjNKsfoQxSQsgcBJCX/fuX1wgyQieojkcWH/KpE3xzLoWN/2k+ZeGqIN3paSvw== + dependencies: + "@types/lodash" "*" + +"@types/lodash@*": + version "4.14.191" + resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.191.tgz#09511e7f7cba275acd8b419ddac8da9a6a79e2fa" + integrity sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ== + +"@types/node@*", "@types/node@^18.11.18": + version "18.11.18" + resolved "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz#8dfb97f0da23c2293e554c5a50d61ef134d7697f" + integrity sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA== + +"@types/semver@^7.3.12": + version "7.3.13" + resolved "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" + integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== + +"@typescript-eslint/eslint-plugin-tslint@^5.48.2": + version "5.48.2" + resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin-tslint/-/eslint-plugin-tslint-5.48.2.tgz#f0a9c1747eef61bc08efab73ed5b9c561e66bc35" + integrity sha512-l4McUUSymC4Iq4UBZnaItD/2vXcvV6OoMhdLePqQKN+FPYEGwhMKnGWh60SMFlcakDMGlQYG85+KnomShOazpQ== + dependencies: + "@typescript-eslint/utils" "5.48.2" + lodash "^4.17.21" + +"@typescript-eslint/eslint-plugin@^5.48.2": + version "5.48.2" + resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.48.2.tgz#112e6ae1e23a1dc8333ce82bb9c65c2608b4d8a3" + integrity sha512-sR0Gja9Ky1teIq4qJOl0nC+Tk64/uYdX+mi+5iB//MH8gwyx8e3SOyhEzeLZEFEEfCaLf8KJq+Bd/6je1t+CAg== + dependencies: + "@typescript-eslint/scope-manager" "5.48.2" + "@typescript-eslint/type-utils" "5.48.2" + "@typescript-eslint/utils" "5.48.2" + debug "^4.3.4" + ignore "^5.2.0" + natural-compare-lite "^1.4.0" + regexpp "^3.2.0" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/parser@^5.48.2": + version "5.48.2" + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.48.2.tgz#c9edef2a0922d26a37dba03be20c5fff378313b3" + integrity sha512-38zMsKsG2sIuM5Oi/olurGwYJXzmtdsHhn5mI/pQogP+BjYVkK5iRazCQ8RGS0V+YLk282uWElN70zAAUmaYHw== + dependencies: + "@typescript-eslint/scope-manager" "5.48.2" + "@typescript-eslint/types" "5.48.2" + "@typescript-eslint/typescript-estree" "5.48.2" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@5.48.2": + version "5.48.2" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.48.2.tgz#bb7676cb78f1e94921eaab637a4b5d596f838abc" + integrity sha512-zEUFfonQid5KRDKoI3O+uP1GnrFd4tIHlvs+sTJXiWuypUWMuDaottkJuR612wQfOkjYbsaskSIURV9xo4f+Fw== + dependencies: + "@typescript-eslint/types" "5.48.2" + "@typescript-eslint/visitor-keys" "5.48.2" + +"@typescript-eslint/type-utils@5.48.2": + version "5.48.2" + resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.48.2.tgz#7d3aeca9fa37a7ab7e3d9056a99b42f342c48ad7" + integrity sha512-QVWx7J5sPMRiOMJp5dYshPxABRoZV1xbRirqSk8yuIIsu0nvMTZesKErEA3Oix1k+uvsk8Cs8TGJ6kQ0ndAcew== + dependencies: + "@typescript-eslint/typescript-estree" "5.48.2" + "@typescript-eslint/utils" "5.48.2" + debug "^4.3.4" + tsutils "^3.21.0" + +"@typescript-eslint/types@5.48.2": + version "5.48.2" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.48.2.tgz#635706abb1ec164137f92148f06f794438c97b8e" + integrity sha512-hE7dA77xxu7ByBc6KCzikgfRyBCTst6dZQpwaTy25iMYOnbNljDT4hjhrGEJJ0QoMjrfqrx+j1l1B9/LtKeuqA== + +"@typescript-eslint/typescript-estree@5.48.2": + version "5.48.2" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.48.2.tgz#6e206b462942b32383582a6c9251c05021cc21b0" + integrity sha512-bibvD3z6ilnoVxUBFEgkO0k0aFvUc4Cttt0dAreEr+nrAHhWzkO83PEVVuieK3DqcgL6VAK5dkzK8XUVja5Zcg== + dependencies: + "@typescript-eslint/types" "5.48.2" + "@typescript-eslint/visitor-keys" "5.48.2" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/utils@5.48.2": + version "5.48.2" + resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.48.2.tgz#3777a91dcb22b8499a25519e06eef2e9569295a3" + integrity sha512-2h18c0d7jgkw6tdKTlNaM7wyopbLRBiit8oAxoP89YnuBOzCZ8g8aBCaCqq7h208qUTroL7Whgzam7UY3HVLow== + dependencies: + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.48.2" + "@typescript-eslint/types" "5.48.2" + "@typescript-eslint/typescript-estree" "5.48.2" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + semver "^7.3.7" + +"@typescript-eslint/visitor-keys@5.48.2": + version "5.48.2" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.48.2.tgz#c247582a0bcce467461d7b696513bf9455000060" + integrity sha512-z9njZLSkwmjFWUelGEwEbdf4NwKvfHxvGC0OcGN1Hp/XNDIcJ7D5DpPNPv6x6/mFvc1tQHsaWmpD/a4gOvvCJQ== + dependencies: + "@typescript-eslint/types" "5.48.2" + eslint-visitor-keys "^3.3.0" + +"@vitest/coverage-c8@^0.28.1": + version "0.28.1" + resolved "https://registry.npmjs.org/@vitest/coverage-c8/-/coverage-c8-0.28.1.tgz#07e6938dc9713738e39c866186b2b135de2d1e65" + integrity sha512-h/5Te9wX/GFz5/8ett9bpDqMtV71XwbLc9kFafHBkM8zi5EixdmcTWl5h9JzzGMfdEQfmqIff3C0wzbMldDn7w== + dependencies: + c8 "^7.12.0" + picocolors "^1.0.0" + std-env "^3.3.1" + vitest "0.28.1" + +"@vitest/expect@0.28.1": + version "0.28.1" + resolved "https://registry.npmjs.org/@vitest/expect/-/expect-0.28.1.tgz#75e81973c907fe7516b78bcfdc99c6f6c07bf714" + integrity sha512-BOvWjBoocKrrTTTC0opIvzOEa7WR/Ovx4++QYlbjYKjnQJfWRSEQkTpAIEfOURtZ/ICcaLk5jvsRshXvjarZew== + dependencies: + "@vitest/spy" "0.28.1" + "@vitest/utils" "0.28.1" + chai "^4.3.7" + +"@vitest/runner@0.28.1": + version "0.28.1" + resolved "https://registry.npmjs.org/@vitest/runner/-/runner-0.28.1.tgz#f3c72befec05ef9a3565de7de9974b19f2ff7275" + integrity sha512-kOdmgiNe+mAxZhvj2eUTqKnjfvzzknmrcS+SZXV7j6VgJuWPFAMCv3TWOe03nF9dkqDfVLCDRw/hwFuCzmzlQg== + dependencies: + "@vitest/utils" "0.28.1" + p-limit "^4.0.0" + pathe "^1.1.0" + +"@vitest/spy@0.28.1": + version "0.28.1" + resolved "https://registry.npmjs.org/@vitest/spy/-/spy-0.28.1.tgz#9efdce05273161cd9036f3f520d0e836602b926d" + integrity sha512-XGlD78cG3IxXNnGwEF121l0MfTNlHSdI25gS2ik0z6f/D9wWUOru849QkJbuNl4CMlZCtNkx3b5IS6MRwKGKuA== + dependencies: + tinyspy "^1.0.2" + +"@vitest/utils@0.28.1": + version "0.28.1" + resolved "https://registry.npmjs.org/@vitest/utils/-/utils-0.28.1.tgz#01c347803dff8c02d7b097210f3749987e5b2ce6" + integrity sha512-a7cV1fs5MeU+W+8sn8gM9gV+q7V/wYz3/4y016w/icyJEKm9AMdSHnrzxTWaElJ07X40pwU6m5353Jlw6Rbd8w== + dependencies: + cli-truncate "^3.1.0" + diff "^5.1.0" + loupe "^2.3.6" + picocolors "^1.0.0" + pretty-format "^27.5.1" + +abab@^2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" + integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== + +abortcontroller-polyfill@^1.7.5: + version "1.7.5" + resolved "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz#6738495f4e901fbb57b6c0611d0c75f76c485bed" + integrity sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ== + +acorn-globals@^7.0.0: + version "7.0.1" + resolved "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz#0dbf05c44fa7c94332914c02066d5beff62c40c3" + integrity sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q== + dependencies: + acorn "^8.1.0" + acorn-walk "^8.0.2" + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn-walk@^8.0.2, acorn-walk@^8.2.0: + version "8.2.0" + resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + +acorn@^8.1.0, acorn@^8.8.0, acorn@^8.8.1: + version "8.8.1" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73" + integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== + +agent-base@6: + version "6.0.2" + resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv@^6.10.0, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + 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" + +ansi-escapes@^4.3.0: + version "4.3.2" + resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + +ansi-styles@^6.0.0: + version "6.2.1" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +array-includes@^3.1.6: + version "3.1.6" + resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" + integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + get-intrinsic "^1.1.3" + is-string "^1.0.7" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array.prototype.flat@^1.3.1: + version "1.3.1" + resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" + integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + +array.prototype.flatmap@^1.3.1: + version "1.3.1" + resolved "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" + integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + +assertion-error@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" + integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== + +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +c8@^7.12.0: + version "7.12.0" + resolved "https://registry.npmjs.org/c8/-/c8-7.12.0.tgz#402db1c1af4af5249153535d1c84ad70c5c96b14" + integrity sha512-CtgQrHOkyxr5koX1wEUmN/5cfDa2ckbHRA4Gy5LAL0zaCFtVWJS5++n+w4/sr2GWGerBxgTjpKeDclk/Qk6W/A== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@istanbuljs/schema" "^0.1.3" + find-up "^5.0.0" + foreground-child "^2.0.0" + istanbul-lib-coverage "^3.2.0" + istanbul-lib-report "^3.0.0" + istanbul-reports "^3.1.4" + rimraf "^3.0.2" + test-exclude "^6.0.0" + v8-to-istanbul "^9.0.0" + yargs "^16.2.0" + yargs-parser "^20.2.9" + +cac@^6.7.14: + version "6.7.14" + resolved "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" + integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +chai@^4.3.7: + version "4.3.7" + resolved "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz#ec63f6df01829088e8bf55fca839bcd464a8ec51" + integrity sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A== + dependencies: + assertion-error "^1.1.0" + check-error "^1.0.2" + deep-eql "^4.1.2" + get-func-name "^2.0.0" + loupe "^2.3.1" + pathval "^1.1.1" + type-detect "^4.0.5" + +chalk@^4.0.0: + version "4.1.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +check-error@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" + integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA== + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-truncate@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" + integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== + dependencies: + slice-ansi "^3.0.0" + string-width "^4.2.0" + +cli-truncate@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz#3f23ab12535e3d73e839bb43e73c9de487db1389" + integrity sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA== + dependencies: + slice-ansi "^5.0.0" + string-width "^5.0.0" + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +colorette@^2.0.19: + version "2.0.19" + resolved "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" + integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@^9.4.1: + version "9.5.0" + resolved "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30" + integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +convert-source-map@^1.6.0: + version "1.9.0" + resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" + integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== + +cross-env@^7.0.3: + version "7.0.3" + resolved "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf" + integrity sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw== + dependencies: + cross-spawn "^7.0.1" + +cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +cssom@^0.5.0: + version "0.5.0" + resolved "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz#d254fa92cd8b6fbd83811b9fbaed34663cc17c36" + integrity sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw== + +cssom@~0.3.6: + version "0.3.8" + resolved "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== + +cssstyle@^2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" + integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== + dependencies: + cssom "~0.3.6" + +data-uri-to-buffer@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz#d8feb2b2881e6a4f58c2e08acfd0e2834e26222e" + integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A== + +data-urls@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz#9cf24a477ae22bcef5cd5f6f0bfbc1d2d3be9143" + integrity sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ== + dependencies: + abab "^2.0.6" + whatwg-mimetype "^3.0.0" + whatwg-url "^11.0.0" + +debug@4, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +decimal.js@^10.4.2: + version "10.4.3" + resolved "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" + integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== + +deep-eql@^4.1.2: + version "4.1.3" + resolved "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d" + integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw== + dependencies: + type-detect "^4.0.0" + +deep-is@^0.1.3, deep-is@~0.1.3: + version "0.1.4" + resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +define-properties@^1.1.3, define-properties@^1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" + integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== + dependencies: + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +diff@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz#bc52d298c5ea8df9194800224445ed43ffc87e40" + integrity sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +domexception@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz#4ad1be56ccadc86fc76d033353999a8037d03673" + integrity sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw== + dependencies: + webidl-conversions "^7.0.0" + +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +entities@^4.4.0: + version "4.4.0" + resolved "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz#97bdaba170339446495e653cfd2db78962900174" + integrity sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA== + +es-abstract@^1.19.0, es-abstract@^1.20.4: + version "1.21.1" + resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.1.tgz#e6105a099967c08377830a0c9cb589d570dd86c6" + integrity sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + es-set-tostringtag "^2.0.1" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + function.prototype.name "^1.1.5" + get-intrinsic "^1.1.3" + get-symbol-description "^1.0.0" + globalthis "^1.0.3" + gopd "^1.0.1" + has "^1.0.3" + has-property-descriptors "^1.0.0" + has-proto "^1.0.1" + has-symbols "^1.0.3" + internal-slot "^1.0.4" + is-array-buffer "^3.0.1" + is-callable "^1.2.7" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-typed-array "^1.1.10" + is-weakref "^1.0.2" + object-inspect "^1.12.2" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.4.3" + safe-regex-test "^1.0.0" + string.prototype.trimend "^1.0.6" + string.prototype.trimstart "^1.0.6" + typed-array-length "^1.0.4" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.9" + +es-set-tostringtag@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" + integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== + dependencies: + get-intrinsic "^1.1.3" + has "^1.0.3" + has-tostringtag "^1.0.0" + +es-shim-unscopables@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" + integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== + dependencies: + has "^1.0.3" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +esbuild@^0.16.3: + version "0.16.17" + resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.16.17.tgz#fc2c3914c57ee750635fee71b89f615f25065259" + integrity sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg== + optionalDependencies: + "@esbuild/android-arm" "0.16.17" + "@esbuild/android-arm64" "0.16.17" + "@esbuild/android-x64" "0.16.17" + "@esbuild/darwin-arm64" "0.16.17" + "@esbuild/darwin-x64" "0.16.17" + "@esbuild/freebsd-arm64" "0.16.17" + "@esbuild/freebsd-x64" "0.16.17" + "@esbuild/linux-arm" "0.16.17" + "@esbuild/linux-arm64" "0.16.17" + "@esbuild/linux-ia32" "0.16.17" + "@esbuild/linux-loong64" "0.16.17" + "@esbuild/linux-mips64el" "0.16.17" + "@esbuild/linux-ppc64" "0.16.17" + "@esbuild/linux-riscv64" "0.16.17" + "@esbuild/linux-s390x" "0.16.17" + "@esbuild/linux-x64" "0.16.17" + "@esbuild/netbsd-x64" "0.16.17" + "@esbuild/openbsd-x64" "0.16.17" + "@esbuild/sunos-x64" "0.16.17" + "@esbuild/win32-arm64" "0.16.17" + "@esbuild/win32-ia32" "0.16.17" + "@esbuild/win32-x64" "0.16.17" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +escodegen@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" + integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== + dependencies: + esprima "^4.0.1" + estraverse "^5.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + +eslint-config-prettier@^8.6.0: + version "8.6.0" + resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.6.0.tgz#dec1d29ab728f4fa63061774e1672ac4e363d207" + integrity sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA== + +eslint-config-standard@^17.0.0: + version "17.0.0" + resolved "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.0.0.tgz#fd5b6cf1dcf6ba8d29f200c461de2e19069888cf" + integrity sha512-/2ks1GKyqSOkH7JFvXJicu0iMpoojkwB+f5Du/1SC0PtBL+s8v30k9njRZ21pm2drKYm2342jFnGWzttxPmZVg== + +eslint-import-resolver-node@^0.3.7: + version "0.3.7" + resolved "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz#83b375187d412324a1963d84fa664377a23eb4d7" + integrity sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA== + dependencies: + debug "^3.2.7" + is-core-module "^2.11.0" + resolve "^1.22.1" + +eslint-module-utils@^2.7.4: + version "2.7.4" + resolved "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz#4f3e41116aaf13a20792261e61d3a2e7e0583974" + integrity sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA== + dependencies: + debug "^3.2.7" + +eslint-plugin-import@^2.27.5: + version "2.27.5" + resolved "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz#876a6d03f52608a3e5bb439c2550588e51dd6c65" + integrity sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow== + dependencies: + array-includes "^3.1.6" + array.prototype.flat "^1.3.1" + array.prototype.flatmap "^1.3.1" + debug "^3.2.7" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.7" + eslint-module-utils "^2.7.4" + has "^1.0.3" + is-core-module "^2.11.0" + is-glob "^4.0.3" + minimatch "^3.1.2" + object.values "^1.1.6" + resolve "^1.22.1" + semver "^6.3.0" + tsconfig-paths "^3.14.1" + +eslint-plugin-prettier@^4.2.1: + version "4.2.1" + resolved "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b" + integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ== + dependencies: + prettier-linter-helpers "^1.0.0" + +eslint-plugin-promise@^6.1.1: + version "6.1.1" + resolved "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz#269a3e2772f62875661220631bd4dafcb4083816" + integrity sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig== + +eslint-plugin-unused-imports@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-2.0.0.tgz#d8db8c4d0cfa0637a8b51ce3fd7d1b6bc3f08520" + integrity sha512-3APeS/tQlTrFa167ThtP0Zm0vctjr4M44HMpeg1P4bK6wItarumq0Ma82xorMKdFsWpphQBlRPzw/pxiVELX1A== + dependencies: + eslint-rule-composer "^0.3.0" + +eslint-rule-composer@^0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz#79320c927b0c5c0d3d3d2b76c8b4a488f25bbaf9" + integrity sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg== + +eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-scope@^7.1.1: + version "7.1.1" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" + integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== + dependencies: + eslint-visitor-keys "^2.0.0" + +eslint-visitor-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint-visitor-keys@^3.3.0: + version "3.3.0" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" + integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== + +eslint@^8.32.0: + version "8.32.0" + resolved "https://registry.npmjs.org/eslint/-/eslint-8.32.0.tgz#d9690056bb6f1a302bd991e7090f5b68fbaea861" + integrity sha512-nETVXpnthqKPFyuY2FNjz/bEd6nbosRgKbkgS/y1C7LJop96gYHWpiguLecMHQ2XCPxn77DS0P+68WzG6vkZSQ== + dependencies: + "@eslint/eslintrc" "^1.4.1" + "@humanwhocodes/config-array" "^0.11.8" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.1.1" + eslint-utils "^3.0.0" + eslint-visitor-keys "^3.3.0" + espree "^9.4.0" + esquery "^1.4.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + grapheme-splitter "^1.0.4" + ignore "^5.2.0" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-sdsl "^4.1.4" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.1" + regexpp "^3.2.0" + strip-ansi "^6.0.1" + strip-json-comments "^3.1.0" + text-table "^0.2.0" + +espree@^9.4.0: + version "9.4.1" + resolved "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz#51d6092615567a2c2cff7833445e37c28c0065bd" + integrity sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg== + dependencies: + acorn "^8.8.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.3.0" + +esprima@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +execa@^6.1.0: + version "6.1.0" + resolved "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz#cea16dee211ff011246556388effa0818394fb20" + integrity sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.1" + human-signals "^3.0.1" + is-stream "^3.0.0" + merge-stream "^2.0.0" + npm-run-path "^5.1.0" + onetime "^6.0.0" + signal-exit "^3.0.7" + strip-final-newline "^3.0.0" + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-diff@^1.1.2: + version "1.2.0" + resolved "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" + integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== + +fast-glob@^3.2.9: + version "3.2.12" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" + integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fastq@^1.6.0: + version "1.15.0" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" + integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== + dependencies: + reusify "^1.0.4" + +fetch-blob@^3.1.2, fetch-blob@^3.1.4: + version "3.2.0" + resolved "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz#f09b8d4bbd45adc6f0c20b7e787e793e309dcce9" + integrity sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ== + dependencies: + node-domexception "^1.0.0" + web-streams-polyfill "^3.0.3" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flatted@^3.1.0: + version "3.2.7" + resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" + integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== + +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +foreground-child@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz#71b32800c9f15aa8f2f83f4a6bd9bff35d861a53" + integrity sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^3.0.2" + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +formdata-polyfill@^4.0.10: + version "4.0.10" + resolved "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423" + integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g== + dependencies: + fetch-blob "^3.1.2" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +function.prototype.name@^1.1.5: + version "1.1.5" + resolved "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" + integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.0" + functions-have-names "^1.2.2" + +functions-have-names@^1.2.2: + version "1.2.3" + resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-func-name@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" + integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3: + version "1.2.0" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f" + integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.3" + +get-stream@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +glob-parent@^5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob@^7.1.3, glob@^7.1.4: + version "7.2.3" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^13.19.0: + version "13.19.0" + resolved "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz#7a42de8e6ad4f7242fbcca27ea5b23aca367b5c8" + integrity sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ== + dependencies: + type-fest "^0.20.2" + +globalthis@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" + integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + dependencies: + define-properties "^1.1.3" + +globby@^11.1.0: + version "11.1.0" + resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + +grapheme-splitter@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== + +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" + +has-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + +has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +html-encoding-sniffer@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9" + integrity sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA== + dependencies: + whatwg-encoding "^2.0.0" + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + +http-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" + integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== + dependencies: + "@tootallnate/once" "2" + agent-base "6" + debug "4" + +https-proxy-agent@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +human-signals@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz#c740920859dafa50e5a3222da9d3bf4bb0e5eef5" + integrity sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ== + +iconv-lite@0.6.3: + version "0.6.3" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +ignore@^5.2.0: + version "5.2.4" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" + integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== + +import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.4" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +internal-slot@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz#8551e7baf74a7a6ba5f749cfb16aa60722f0d6f3" + integrity sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ== + dependencies: + get-intrinsic "^1.1.3" + has "^1.0.3" + side-channel "^1.0.4" + +is-array-buffer@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.1.tgz#deb1db4fcae48308d54ef2442706c0393997052a" + integrity sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-typed-array "^1.1.10" + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-core-module@^2.11.0, is-core-module@^2.9.0: + version "2.11.0" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" + integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== + dependencies: + has "^1.0.3" + +is-date-object@^1.0.1: + version "1.0.5" + resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-fullwidth-code-point@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88" + integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: + version "4.0.3" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + has-tostringtag "^1.0.0" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-potential-custom-element-name@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" + integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== + +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-shared-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== + dependencies: + call-bind "^1.0.2" + +is-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" + integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-typed-array@^1.1.10, is-typed-array@^1.1.9: + version "1.1.10" + resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" + integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" + integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== + +istanbul-lib-report@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" + integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^3.0.0" + supports-color "^7.1.0" + +istanbul-reports@^3.1.4: + version "3.1.5" + resolved "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz#cc9a6ab25cb25659810e4785ed9d9fb742578bae" + integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +js-sdsl@^4.1.4: + version "4.3.0" + resolved "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz#aeefe32a451f7af88425b11fdb5f58c90ae1d711" + integrity sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ== + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +jsdom@^21.1.0: + version "21.1.0" + resolved "https://registry.npmjs.org/jsdom/-/jsdom-21.1.0.tgz#d56ba4a84ed478260d83bd53dc181775f2d8e6ef" + integrity sha512-m0lzlP7qOtthD918nenK3hdItSd2I+V3W9IrBcB36sqDwG+KnUs66IF5GY7laGWUnlM9vTsD0W1QwSEBYWWcJg== + dependencies: + abab "^2.0.6" + acorn "^8.8.1" + acorn-globals "^7.0.0" + cssom "^0.5.0" + cssstyle "^2.3.0" + data-urls "^3.0.2" + decimal.js "^10.4.2" + domexception "^4.0.0" + escodegen "^2.0.0" + form-data "^4.0.0" + html-encoding-sniffer "^3.0.0" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.1" + is-potential-custom-element-name "^1.0.1" + nwsapi "^2.2.2" + parse5 "^7.1.1" + saxes "^6.0.0" + symbol-tree "^3.2.4" + tough-cookie "^4.1.2" + w3c-xmlserializer "^4.0.0" + webidl-conversions "^7.0.0" + whatwg-encoding "^2.0.0" + whatwg-mimetype "^3.0.0" + whatwg-url "^11.0.0" + ws "^8.11.0" + xml-name-validator "^4.0.0" + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json5@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== + dependencies: + minimist "^1.2.0" + +jsonc-parser@^3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" + integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +lilconfig@2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz#32a384558bd58af3d4c6e077dd1ad1d397bc69d4" + integrity sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg== + +lint-staged@^13.1.0: + version "13.1.0" + resolved "https://registry.npmjs.org/lint-staged/-/lint-staged-13.1.0.tgz#d4c61aec939e789e489fa51987ec5207b50fd37e" + integrity sha512-pn/sR8IrcF/T0vpWLilih8jmVouMlxqXxKuAojmbiGX5n/gDnz+abdPptlj0vYnbfE0SQNl3CY/HwtM0+yfOVQ== + dependencies: + cli-truncate "^3.1.0" + colorette "^2.0.19" + commander "^9.4.1" + debug "^4.3.4" + execa "^6.1.0" + lilconfig "2.0.6" + listr2 "^5.0.5" + micromatch "^4.0.5" + normalize-path "^3.0.0" + object-inspect "^1.12.2" + pidtree "^0.6.0" + string-argv "^0.3.1" + yaml "^2.1.3" + +listr2@^5.0.5: + version "5.0.7" + resolved "https://registry.npmjs.org/listr2/-/listr2-5.0.7.tgz#de69ccc4caf6bea7da03c74f7a2ffecf3904bd53" + integrity sha512-MD+qXHPmtivrHIDRwPYdfNkrzqDiuaKU/rfBcec3WMyMF3xylQj3jMq344OtvQxz7zaCFViRAeqlr2AFhPvXHw== + dependencies: + cli-truncate "^2.1.0" + colorette "^2.0.19" + log-update "^4.0.0" + p-map "^4.0.0" + rfdc "^1.3.0" + rxjs "^7.8.0" + through "^2.3.8" + wrap-ansi "^7.0.0" + +local-pkg@^0.4.2: + version "0.4.3" + resolved "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz#0ff361ab3ae7f1c19113d9bb97b98b905dbc4963" + integrity sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g== + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.clonedeep@^4.5.0: + version "4.5.0" + resolved "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ== + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-update@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" + integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== + dependencies: + ansi-escapes "^4.3.0" + cli-cursor "^3.1.0" + slice-ansi "^4.0.0" + wrap-ansi "^6.2.0" + +loupe@^2.3.1, loupe@^2.3.6: + version "2.3.6" + resolved "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz#76e4af498103c532d1ecc9be102036a21f787b53" + integrity sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA== + dependencies: + get-func-name "^2.0.0" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +make-dir@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^4.0.4, micromatch@^4.0.5: + version "4.0.5" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +mimic-fn@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" + integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== + +minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.0, minimist@^1.2.6: + version "1.2.7" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" + integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== + +mlly@^1.0.0, mlly@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/mlly/-/mlly-1.1.0.tgz#9e23c5e675ef7b10cc47ee6281795cb1a7aa3aa2" + integrity sha512-cwzBrBfwGC1gYJyfcy8TcZU1f+dbH/T+TuOhtYP2wLv/Fb51/uV7HJQfBPtEupZ2ORLRU1EKFS/QfS3eo9+kBQ== + dependencies: + acorn "^8.8.1" + pathe "^1.0.0" + pkg-types "^1.0.1" + ufo "^1.0.1" + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@^2.1.1: + version "2.1.3" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +nanoid@^3.3.4: + version "3.3.4" + resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" + integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== + +natural-compare-lite@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" + integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +node-domexception@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" + integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== + +node-fetch@^3.3.0: + version "3.3.0" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.0.tgz#37e71db4ecc257057af828d523a7243d651d91e4" + integrity sha512-BKwRP/O0UvoMKp7GNdwPlObhYGB5DQqwhEDQlNKuoqwVYSxkSZCSbHjnFFmUEtwSKRPU4kNK8PbDYYitwaE3QA== + dependencies: + data-uri-to-buffer "^4.0.0" + fetch-blob "^3.1.4" + formdata-polyfill "^4.0.10" + +normalize-path@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +npm-run-path@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00" + integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q== + dependencies: + path-key "^4.0.0" + +nwsapi@^2.2.2: + version "2.2.2" + resolved "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.2.tgz#e5418863e7905df67d51ec95938d67bf801f0bb0" + integrity sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw== + +object-inspect@^1.12.2, object-inspect@^1.9.0: + version "1.12.3" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" + integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.4: + version "4.1.4" + resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" + integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +object.values@^1.1.6: + version "1.1.6" + resolved "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" + integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^5.1.0: + version "5.1.2" + resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +onetime@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" + integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== + dependencies: + mimic-fn "^4.0.0" + +optionator@^0.8.1: + version "0.8.3" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + 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" + +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-limit@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz#914af6544ed32bfa54670b061cafcbd04984b644" + integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== + dependencies: + yocto-queue "^1.0.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse5@^7.1.1: + version "7.1.2" + resolved "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" + integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== + dependencies: + entities "^4.4.0" + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-key@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" + integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +pathe@^1.0.0, pathe@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/pathe/-/pathe-1.1.0.tgz#e2e13f6c62b31a3289af4ba19886c230f295ec03" + integrity sha512-ODbEPR0KKHqECXW1GoxdDb+AZvULmXjVPy4rt+pGo2+TnjJTIPJQSVS6N63n8T2Ip+syHhbn52OewKicV0373w== + +pathval@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" + integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pidtree@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c" + integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g== + +pkg-types@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.1.tgz#25234407f9dc63409af45ced9407625ff446a761" + integrity sha512-jHv9HB+Ho7dj6ItwppRDDl0iZRYBD0jsakHXtFgoLr+cHSF6xC+QL54sJmWxyGxOLYSHm0afhXhXcQDQqH9z8g== + dependencies: + jsonc-parser "^3.2.0" + mlly "^1.0.0" + pathe "^1.0.0" + +postcss@^8.4.20: + version "8.4.21" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz#c639b719a57efc3187b13a1d765675485f4134f4" + integrity sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg== + dependencies: + nanoid "^3.3.4" + picocolors "^1.0.0" + source-map-js "^1.0.2" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== + +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== + dependencies: + fast-diff "^1.1.2" + +prettier@^2.8.3: + version "2.8.3" + resolved "https://registry.npmjs.org/prettier/-/prettier-2.8.3.tgz#ab697b1d3dd46fb4626fbe2f543afe0cc98d8632" + integrity sha512-tJ/oJ4amDihPoufT5sM0Z1SKEuKay8LfVAMlbbhnnkvt6BUserZylqo2PN+p9KeljLr0OHa2rXHU1T8reeoTrw== + +pretty-format@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" + integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== + dependencies: + ansi-regex "^5.0.1" + ansi-styles "^5.0.0" + react-is "^17.0.1" + +psl@^1.1.33: + version "1.9.0" + resolved "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" + integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== + +punycode@^2.1.0, punycode@^2.1.1: + version "2.3.0" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" + integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== + +querystringify@^2.1.1: + version "2.2.0" + resolved "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +react-is@^17.0.1: + version "17.0.2" + resolved "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" + integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== + +regexp.prototype.flags@^1.4.3: + version "1.4.3" + resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" + integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + functions-have-names "^1.2.2" + +regexpp@^3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve@^1.22.1: + version "1.22.1" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rfdc@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" + integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +rollup@^3.7.0: + version "3.10.1" + resolved "https://registry.npmjs.org/rollup/-/rollup-3.10.1.tgz#56278901ed11fc2898421e8e3e2c8155bc7b40b4" + integrity sha512-3Er+yel3bZbZX1g2kjVM+FW+RUWDxbG87fcqFM5/9HbPCTpbVp6JOLn7jlxnNlbu7s/N/uDA4EV/91E2gWnxzw== + optionalDependencies: + fsevents "~2.3.2" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +rxjs@^7.8.0: + version "7.8.0" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz#90a938862a82888ff4c7359811a595e14e1e09a4" + integrity sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg== + dependencies: + tslib "^2.1.0" + +safe-regex-test@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" + integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-regex "^1.1.4" + +"safer-buffer@>= 2.1.2 < 3.0.0": + version "2.1.2" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +saxes@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz#fe5b4a4768df4f14a201b1ba6a65c1f3d9988cc5" + integrity sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA== + dependencies: + xmlchars "^2.2.0" + +semver@^6.0.0, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.3.7: + version "7.3.8" + resolved "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" + integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== + dependencies: + lru-cache "^6.0.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +siginfo@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz#32e76c70b79724e3bb567cb9d543eb858ccfaf30" + integrity sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g== + +signal-exit@^3.0.2, signal-exit@^3.0.7: + version "3.0.7" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slice-ansi@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" + integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +slice-ansi@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a" + integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== + dependencies: + ansi-styles "^6.0.0" + is-fullwidth-code-point "^4.0.0" + +source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + +source-map-support@^0.5.21: + version "0.5.21" + resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +stackback@0.0.2: + version "0.0.2" + resolved "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz#1ac8a0d9483848d1695e418b6d031a3c3ce68e3b" + integrity sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw== + +std-env@^3.3.1: + version "3.3.1" + resolved "https://registry.npmjs.org/std-env/-/std-env-3.3.1.tgz#93a81835815e618c8aa75e7c8a4dc04f7c314e29" + integrity sha512-3H20QlwQsSm2OvAxWIYhs+j01MzzqwMwGiiO1NQaJYZgJZFPuAbf95/DiKRBSTYIJ2FeGUc+B/6mPGcWP9dO3Q== + +string-argv@^0.3.1: + version "0.3.1" + resolved "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" + integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== + +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.3" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^5.0.0: + version "5.1.2" + resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + +string.prototype.trimend@^1.0.6: + version "1.0.6" + resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" + integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +string.prototype.trimstart@^1.0.6: + version "1.0.6" + resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" + integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" + integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== + dependencies: + ansi-regex "^6.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-final-newline@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" + integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== + +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +strip-literal@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/strip-literal/-/strip-literal-1.0.0.tgz#0a484ed5a978cd9d2becf3cf8f4f2cb5ab0e1e74" + integrity sha512-5o4LsH1lzBzO9UFH63AJ2ad2/S2AVx6NtjOcaz+VTT2h1RiRvbipW72z8M/lxEhcPHDBQwpDrnTF7sXy/7OwCQ== + dependencies: + acorn "^8.8.1" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +symbol-tree@^3.2.4: + version "3.2.4" + resolved "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== + +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +through@^2.3.8: + version "2.3.8" + resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + +tinybench@^2.3.1: + version "2.3.1" + resolved "https://registry.npmjs.org/tinybench/-/tinybench-2.3.1.tgz#14f64e6b77d7ef0b1f6ab850c7a808c6760b414d" + integrity sha512-hGYWYBMPr7p4g5IarQE7XhlyWveh1EKhy4wUBS1LrHXCKYgvz+4/jCqgmJqZxxldesn05vccrtME2RLLZNW7iA== + +tinypool@^0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/tinypool/-/tinypool-0.3.0.tgz#c405d8b743509fc28ea4ca358433190be654f819" + integrity sha512-NX5KeqHOBZU6Bc0xj9Vr5Szbb1j8tUHIeD18s41aDJaPeC5QTdEhK0SpdpUrZlj2nv5cctNcSjaKNanXlfcVEQ== + +tinyspy@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/tinyspy/-/tinyspy-1.0.2.tgz#6da0b3918bfd56170fb3cd3a2b5ef832ee1dff0d" + integrity sha512-bSGlgwLBYf7PnUsQ6WOc6SJ3pGOcd+d8AA6EUnLDDM0kWEstC1JIlSZA3UNliDXhd9ABoS7hiRBDCu+XP/sf1Q== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +tough-cookie@^4.1.2: + version "4.1.2" + resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz#e53e84b85f24e0b65dd526f46628db6c85f6b874" + integrity sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ== + dependencies: + psl "^1.1.33" + punycode "^2.1.1" + universalify "^0.2.0" + url-parse "^1.5.3" + +tr46@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz#555c4e297a950617e8eeddef633c87d4d9d6cbf9" + integrity sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA== + dependencies: + punycode "^2.1.1" + +tsconfig-paths@^3.14.1: + version "3.14.1" + resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" + integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.1" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tslib@^1.8.1: + version "1.14.1" + resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.1.0: + version "2.4.1" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e" + integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA== + +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== + dependencies: + prelude-ls "~1.1.2" + +type-detect@^4.0.0, type-detect@^4.0.5: + version "4.0.8" + resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +typed-array-length@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" + integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + is-typed-array "^1.1.9" + +typescript@^4.9.4: + version "4.9.4" + resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz#a2a3d2756c079abda241d75f149df9d561091e78" + integrity sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg== + +ufo@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/ufo/-/ufo-1.0.1.tgz#64ed43b530706bda2e4892f911f568cf4cf67d29" + integrity sha512-boAm74ubXHY7KJQZLlXrtMz52qFvpsbOxDcZOnw/Wf+LS4Mmyu7JxmzD4tDLtUQtmZECypJ0FrCz4QIe6dvKRA== + +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + +universalify@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" + integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +url-parse@^1.5.3: + version "1.5.10" + resolved "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" + integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + +v8-to-istanbul@^9.0.0: + version "9.0.1" + resolved "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz#b6f994b0b5d4ef255e17a0d17dc444a9f5132fa4" + integrity sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w== + dependencies: + "@jridgewell/trace-mapping" "^0.3.12" + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^1.6.0" + +vite-node@0.28.1: + version "0.28.1" + resolved "https://registry.npmjs.org/vite-node/-/vite-node-0.28.1.tgz#e2af53e112e57455a474e9f7a6478b1cdf79a6ab" + integrity sha512-Mmab+cIeElkVn4noScCRjy8nnQdh5LDIR4QCH/pVWtY15zv5Z1J7u6/471B9JZ2r8CEIs42vTbngaamOVkhPLA== + dependencies: + cac "^6.7.14" + debug "^4.3.4" + mlly "^1.1.0" + pathe "^1.1.0" + picocolors "^1.0.0" + source-map "^0.6.1" + source-map-support "^0.5.21" + vite "^3.0.0 || ^4.0.0" + +"vite@^3.0.0 || ^4.0.0": + version "4.0.4" + resolved "https://registry.npmjs.org/vite/-/vite-4.0.4.tgz#4612ce0b47bbb233a887a54a4ae0c6e240a0da31" + integrity sha512-xevPU7M8FU0i/80DMR+YhgrzR5KS2ORy1B4xcX/cXLsvnUWvfHuqMmVU6N0YiJ4JWGRJJsLCgjEzKjG9/GKoSw== + dependencies: + esbuild "^0.16.3" + postcss "^8.4.20" + resolve "^1.22.1" + rollup "^3.7.0" + optionalDependencies: + fsevents "~2.3.2" + +vitest@0.28.1, vitest@^0.28.1: + version "0.28.1" + resolved "https://registry.npmjs.org/vitest/-/vitest-0.28.1.tgz#a87656075e01436c887048efd83a5d32792ce890" + integrity sha512-F6wAO3K5+UqJCCGt0YAl3Ila2f+fpBrJhl9n7qWEhREwfzQeXlMkkCqGqGtzBxCSa8kv5QHrkshX8AaPTXYACQ== + dependencies: + "@types/chai" "^4.3.4" + "@types/chai-subset" "^1.3.3" + "@types/node" "*" + "@vitest/expect" "0.28.1" + "@vitest/runner" "0.28.1" + "@vitest/spy" "0.28.1" + "@vitest/utils" "0.28.1" + acorn "^8.8.1" + acorn-walk "^8.2.0" + cac "^6.7.14" + chai "^4.3.7" + debug "^4.3.4" + local-pkg "^0.4.2" + pathe "^1.1.0" + picocolors "^1.0.0" + source-map "^0.6.1" + std-env "^3.3.1" + strip-literal "^1.0.0" + tinybench "^2.3.1" + tinypool "^0.3.0" + tinyspy "^1.0.2" + vite "^3.0.0 || ^4.0.0" + vite-node "0.28.1" + why-is-node-running "^2.2.2" + +w3c-xmlserializer@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz#aebdc84920d806222936e3cdce408e32488a3073" + integrity sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw== + dependencies: + xml-name-validator "^4.0.0" + +web-streams-polyfill@^3.0.3: + version "3.2.1" + resolved "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz#71c2718c52b45fd49dbeee88634b3a60ceab42a6" + integrity sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q== + +webidl-conversions@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" + integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== + +whatwg-encoding@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz#e7635f597fd87020858626805a2729fa7698ac53" + integrity sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg== + dependencies: + iconv-lite "0.6.3" + +whatwg-mimetype@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7" + integrity sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q== + +whatwg-url@^11.0.0: + version "11.0.0" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz#0a849eebb5faf2119b901bb76fd795c2848d4018" + integrity sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ== + dependencies: + tr46 "^3.0.0" + webidl-conversions "^7.0.0" + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which-typed-array@^1.1.9: + version "1.1.9" + resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" + integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + is-typed-array "^1.1.10" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +why-is-node-running@^2.2.2: + version "2.2.2" + resolved "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz#4185b2b4699117819e7154594271e7e344c9973e" + integrity sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA== + dependencies: + siginfo "^2.0.0" + stackback "0.0.2" + +word-wrap@^1.2.3, word-wrap@~1.2.3: + version "1.2.3" + resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +ws@^8.11.0: + version "8.12.0" + resolved "https://registry.npmjs.org/ws/-/ws-8.12.0.tgz#485074cc392689da78e1828a9ff23585e06cddd8" + integrity sha512-kU62emKIdKVeEIOIKVegvqpXMSTAMLJozpHZaJNDYqBjzlSYXQGviYwN1osDLJ9av68qHd4a2oSjd7yD4pacig== + +xml-name-validator@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835" + integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== + +xmlchars@^2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml@^2.1.3: + version "2.2.1" + resolved "https://registry.npmjs.org/yaml/-/yaml-2.2.1.tgz#3014bf0482dcd15147aa8e56109ce8632cd60ce4" + integrity sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw== + +yargs-parser@^20.2.2, yargs-parser@^20.2.9: + version "20.2.9" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs@^16.2.0: + version "16.2.0" + resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +yocto-queue@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251" + integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==