diff --git a/.eslintrc.json b/.eslintrc.json index 80d2e21..f4e9963 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -21,6 +21,7 @@ "error", { "peerDependencies": true } ], + "import/prefer-default-export": "off", "no-duplicate-imports": "off", "no-restricted-syntax": "off", "no-unused-vars": "off" @@ -31,5 +32,16 @@ "extensions": [".js", ".ts"] } } - } + }, + "overrides": [ + { + "files": ["**/*.test.**"], + "env": { + "mocha": true + }, + "rules": { + "no-unused-expressions": "off" + } + } + ] } diff --git a/.prettierignore b/.prettierignore index 1206160..9b1d5ec 100644 --- a/.prettierignore +++ b/.prettierignore @@ -4,4 +4,5 @@ **/*.txt **/*.css **/*.scss +**/*.yml test/**/*.js \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index ff6ec2b..25bddae 100644 --- a/.travis.yml +++ b/.travis.yml @@ -20,8 +20,6 @@ install: - yarn install --immutable env: - - WEBPACK_VERSION=4 MOCHA_VERSION=4 - - WEBPACK_VERSION=4 MOCHA_VERSION=5 - WEBPACK_VERSION=4 MOCHA_VERSION=6 - WEBPACK_VERSION=4 MOCHA_VERSION=7 diff --git a/package.json b/package.json index cc94945..2dbce34 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ }, "description": "mocha cli with webpack support", "bin": "./bin/mochapack", - "main": "./lib/createMochaWebpack.js", + "main": "./lib/createMochapack.js", "files": [ "*.md", "bin", @@ -21,7 +21,7 @@ "build": "yarn run clean-lib && tsc", "format": "prettier '{src,test}/**/*' ./*.json --write --loglevel warn", "lint": "eslint src/**/*.ts test/**/*.ts --fix", - "test": "yarn run clean-tmp && yarn run build && ts-mocha --timeout 10000 --recursive --require @babel/register --exit \"test/**/*.test.ts\"", + "test": "yarn run clean-tmp && yarn run build && ts-mocha --timeout 10000 --recursive --require @babel/register --exit \"{test,src}/**/*.test.ts\"", "cover": "cross-env BABEL_ENV=coverage nyc --reporter=lcov --reporter=text npm test", "posttest": "yarn run format && yarn run lint", "docs:clean": "del-cli _book", @@ -48,7 +48,7 @@ "author": "Victor Vlasenko ", "license": "MIT", "peerDependencies": { - "mocha": ">=4 <=7", + "mocha": ">=6 <=7", "webpack": "^4.0.0" }, "devDependencies": { @@ -66,7 +66,10 @@ "@types/lodash": "^4.14.149", "@types/mocha": "^5.2.7", "@types/node": "^12.12.17", + "@types/sinon": "^9.0.0", + "@types/sinon-chai": "^3.2.4", "@types/webpack": "^4.41.0", + "@types/yargs": "^15.0.4", "@typescript-eslint/eslint-plugin": "^2.11.0", "@typescript-eslint/parser": "^2.11.0", "anymatch": "3.1.1", @@ -99,11 +102,12 @@ "nyc": "14.1.1", "prettier": "^1.19.1", "sass-loader": "6.0.7", - "sinon": "7.5.0", + "sinon": "^9.0.2", + "sinon-chai": "^3.5.0", "strip-ansi": "^5.2.0", "tiny-worker": "2.3.0", - "ts-mocha": "^6.0.0", - "typescript": "^3.7.3", + "ts-mocha": "^7.0.0", + "typescript": "^3.8.3", "webpack": "4.41.0", "worker-loader": "2.0.0", "write-file-webpack-plugin": "^4.2.0" diff --git a/src/MochaWebpack.ts b/src/MochaWebpack.ts deleted file mode 100644 index 8b5fa3e..0000000 --- a/src/MochaWebpack.ts +++ /dev/null @@ -1,457 +0,0 @@ -import TestRunner from './runner/TestRunner' -import testRunnerReporter from './runner/testRunnerReporter' - -export type MochaWebpackOptions = { - cwd: string - webpackConfig: {} - bail: boolean - reporter: string | ReporterConstructor - reporterOptions: {} - ui: string - fgrep?: string - grep?: string | RegExp - invert: boolean - ignoreLeaks: boolean - fullStackTrace: boolean - colors?: boolean - useInlineDiffs: boolean - timeout: number - retries?: number - slow: number - asyncOnly: boolean - delay: boolean - interactive: boolean - clearTerminal: boolean - quiet: boolean - growl?: boolean - forbidOnly: boolean -} - -export default class MochaWebpack { - /** - * Files to run test against - * - * @private - */ - entries: Array = [] - - /** - * Files to include into the bundle - * - * @private - */ - includes: Array = [] - - /** - * Options - * - * @private - */ - options: MochaWebpackOptions = { - cwd: process.cwd(), - webpackConfig: {}, - bail: false, - reporter: 'spec', - reporterOptions: {}, - ui: 'bdd', - invert: false, - ignoreLeaks: true, - fullStackTrace: false, - useInlineDiffs: false, - timeout: 2000, - slow: 75, - asyncOnly: false, - delay: false, - interactive: !!(process.stdout as any).isTTY, - clearTerminal: false, - quiet: false, - forbidOnly: false - } - - /** - * Add file run test against - * - * @public - * @param {string} file file or glob - * @return {MochaWebpack} - */ - addEntry(file: string): MochaWebpack { - this.entries = [...this.entries, file] - return this - } - - /** - * Add file to include into the test bundle - * - * @public - * @param {string} file absolute path to module - * @return {MochaWebpack} - */ - addInclude(file: string): MochaWebpack { - this.includes = [...this.includes, file] - return this - } - - /** - * Sets the current working directory - * - * @public - * @param {string} cwd absolute working directory path - * @return {MochaWebpack} - */ - cwd(cwd: string): MochaWebpack { - this.options = { - ...this.options, - cwd - } - return this - } - - /** - * Sets the webpack config - * - * @public - * @param {Object} config webpack config - * @return {MochaWebpack} - */ - webpackConfig(config: {} = {}): MochaWebpack { - this.options = { - ...this.options, - webpackConfig: config - } - return this - } - - /** - * Enable or disable bailing on the first failure. - * - * @public - * @param {boolean} [bail] - * @return {MochaWebpack} - */ - bail(bail: boolean = false): MochaWebpack { - this.options = { - ...this.options, - bail - } - return this - } - - /** - * Set reporter to `reporter`, defaults to "spec". - * - * @param {string|Function} reporter name or constructor - * @param {Object} reporterOptions optional options - * @return {MochaWebpack} - */ - reporter( - reporter: string | ReporterConstructor, - reporterOptions: {} - ): MochaWebpack { - this.options = { - ...this.options, - reporter, - reporterOptions - } - return this - } - - /** - * Set test UI, defaults to "bdd". - * - * @public - * @param {string} ui bdd/tdd - * @return {MochaWebpack} - */ - ui(ui: string): MochaWebpack { - this.options = { - ...this.options, - ui - } - return this - } - - /** - * Only run tests containing - * - * @public - * @param {string} str - * @return {MochaWebpack} - */ - fgrep(str: string): MochaWebpack { - this.options = { - ...this.options, - fgrep: str - } - return this - } - - /** - * Only run tests matching - * - * @public - * @param {string|RegExp} pattern - * @return {MochaWebpack} - */ - grep(pattern: string | RegExp): MochaWebpack { - this.options = { - ...this.options, - grep: pattern - } - return this - } - - /** - * Invert `.grep()` matches. - * - * @public - * @return {MochaWebpack} - */ - invert(): MochaWebpack { - this.options = { - ...this.options, - invert: true - } - return this - } - - /** - * Ignore global leaks. - * - * @public - * @param {boolean} ignore - * @return {MochaWebpack} - */ - ignoreLeaks(ignore: boolean): MochaWebpack { - this.options = { - ...this.options, - ignoreLeaks: ignore - } - return this - } - - /** - * Display long stack-trace on failing - * - * @public - * @return {MochaWebpack} - */ - fullStackTrace(): MochaWebpack { - this.options = { - ...this.options, - fullStackTrace: true - } - return this - } - - /** - * Emit color output. - * - * @public - * @param {boolean} colors - * @return {MochaWebpack} - */ - useColors(colors: boolean): MochaWebpack { - this.options = { - ...this.options, - colors - } - return this - } - - /** - * Quiet informational messages. - * - * @public - * @return {MochaWebpack} - */ - quiet(): MochaWebpack { - this.options = { - ...this.options, - quiet: true - } - return this - } - - /** - * Use inline diffs rather than +/-. - * - * @public - * @param {boolean} inlineDiffs - * @return {MochaWebpack} - */ - useInlineDiffs(inlineDiffs: boolean): MochaWebpack { - this.options = { - ...this.options, - useInlineDiffs: inlineDiffs - } - return this - } - - /** - * Set the timeout in milliseconds. Value of 0 disables timeouts - * - * @public - * @param {number} timeout time in ms - * @return {MochaWebpack} - */ - timeout(timeout: number): MochaWebpack { - this.options = { - ...this.options, - timeout - } - return this - } - - /** - * Set the number of times to retry failed tests. - * - * @public - * @param {number} count retry times - * @return {MochaWebpack} - */ - retries(count: number): MochaWebpack { - this.options = { - ...this.options, - retries: count - } - return this - } - - /** - * Set slowness threshold in milliseconds. - * - * @public - * @param {number} threshold time in ms - * @return {MochaWebpack} - */ - slow(threshold: number): MochaWebpack { - this.options = { - ...this.options, - slow: threshold - } - return this - } - - /** - * Makes all tests async (accepting a callback) - * - * @public - * @return {MochaWebpack} - */ - asyncOnly(): MochaWebpack { - this.options = { - ...this.options, - asyncOnly: true - } - return this - } - - /** - * Delay root suite execution. - * - * @public - * @return {MochaWebpack} - */ - delay(): MochaWebpack { - this.options = { - ...this.options, - delay: true - } - return this - } - - /** - * Force interactive mode (default enabled in terminal) - * - * @public - * @param {boolean} interactive - * @return {MochaWebpack} - */ - interactive(interactive: boolean): MochaWebpack { - this.options = { - ...this.options, - interactive - } - return this - } - - /** - * Clear terminal on startup - * - * @public - * @param {boolean} clearTerminal - * @return {MochaWebpack} - */ - clearTerminal(clearTerminal: boolean): MochaWebpack { - this.options = { - ...this.options, - clearTerminal - } - return this - } - - /** - * Enable growl notification support - * - * @public - * @param {boolean} growl - * @return {MochaWebpack} - */ - growl(): MochaWebpack { - this.options = { - ...this.options, - growl: true - } - return this - } - - /** - * Disallow .only in tests - * - * @public - * @param {boolean} forbidOnly - * @return {MochaWebpack} - */ - forbidOnly(): MochaWebpack { - this.options = { - ...this.options, - forbidOnly: true - } - return this - } - - /** - * Run tests - * - * @public - * @return {Promise} a Promise that gets resolved with the number of failed tests or rejected with build error - */ - async run(): Promise { - const runner = new TestRunner(this.entries, this.includes, this.options) - testRunnerReporter({ - eventEmitter: runner, - interactive: this.options.interactive, - quiet: this.options.quiet, - cwd: this.options.cwd, - clearTerminal: this.options.clearTerminal - }) - return runner.run() - } - - /** - * Run tests and rerun them on changes - * @public - */ - async watch(): Promise { - const runner = new TestRunner(this.entries, this.includes, this.options) - testRunnerReporter({ - eventEmitter: runner, - interactive: this.options.interactive, - quiet: this.options.quiet, - cwd: this.options.cwd, - clearTerminal: this.options.clearTerminal - }) - await runner.watch() - } -} diff --git a/src/Mochapack.ts b/src/Mochapack.ts new file mode 100644 index 0000000..09ab7a7 --- /dev/null +++ b/src/Mochapack.ts @@ -0,0 +1,123 @@ +import { defaults as _defaults } from 'lodash' +import TestRunner from './runner/TestRunner' +import testRunnerReporter from './runner/testRunnerReporter' +import { MochapackOptions } from './cli/argsParser/optionsFromParsedArgs/types' + +export default class Mochapack { + private options: MochapackOptions + + constructor(options: MochapackOptions) { + this.options = options + const { webpack } = this.options + this.includes = webpack.include || [] + this.options = _defaults({}, this.options, this.defaultOptions) + } + + /** + * Current working directory of Mochapack when initialized + */ + cwd = process.cwd() + + /** + * Files to run test against + * + * @private + */ + entries: Array = [] + + /** + * Files to include into the bundle + * + * @private + */ + includes: Array = [] + + /** + * Default options + * + * @private + */ + defaultOptions = { + mocha: { + constructor: { + bail: false, + reporter: 'spec', + reporterOptions: {}, + ui: 'bdd', + ignoreLeaks: true, + fullStackTrace: false, + inlineDiffs: false, + timeout: 2000, + slow: 75, + asyncOnly: false, + delay: false, + forbidOnly: false + }, + cli: { + invert: false + } + } + } + + /** + * Add file run test against + * + * @public + * @param {string} file file or glob + * @return {Mochapack} + */ + addEntry(file: string): Mochapack { + this.entries = [...this.entries, file] + return this + } + + /** + * Add file to include into the test bundle + * + * @public + * @param {string} file absolute path to module + * @return {Mochapack} + */ + addInclude(file: string): Mochapack { + this.includes = [...this.includes, file] + return this + } + + /** + * Builds a test runner that can be used for run or watch mode + */ + private buildTestRunner = (): TestRunner => { + const runner = new TestRunner( + this.entries, + this.includes, + this.options, + process.cwd() + ) + testRunnerReporter({ + eventEmitter: runner, + interactive: this.options.mochapack.interactive, + quiet: this.options.mochapack.quiet, + cwd: this.cwd, + clearTerminal: this.options.mochapack.clearTerminal + }) + return runner + } + + /** + * Run tests + * + * @public + * @return {Promise} a Promise that gets resolved with the number of failed tests or rejected with build error + */ + async run(): Promise { + return this.buildTestRunner().run() + } + + /** + * Run tests and rerun them on changes + * @public + */ + async watch(): Promise { + await this.buildTestRunner().watch() + } +} diff --git a/src/cli/argsParser/optionsFromParsedArgs/index.ts b/src/cli/argsParser/optionsFromParsedArgs/index.ts new file mode 100644 index 0000000..6117c90 --- /dev/null +++ b/src/cli/argsParser/optionsFromParsedArgs/index.ts @@ -0,0 +1,20 @@ +import { ParsedArgs } from '../parseArgv/types' +import { MochapackOptions } from './types' +import mochaOptionsFromParsedArgs from './mocha/mochaOptionsFromParsedArgs' +import webpackOptionsFromParsedArgs from './webpack/webpackOptionsFromParsedArgs' +import mochapackOptionsFromParsedArgs from './mochapack/mochapackOptionsFromParsedArgs' + +/** + * Translates parsed arguments into a `MochapackOptions` object + * + * @param parsedArgs Args that have been parsed into a `ParsedArgs` object + */ +const optionsFromParsedArgs = async ( + parsedArgs: ParsedArgs +): Promise => ({ + mocha: mochaOptionsFromParsedArgs(parsedArgs), + webpack: await webpackOptionsFromParsedArgs(parsedArgs), + mochapack: mochapackOptionsFromParsedArgs(parsedArgs) +}) + +export default optionsFromParsedArgs diff --git a/src/cli/argsParser/optionsFromParsedArgs/mocha/mergeMochaConfigWithOptions.ts b/src/cli/argsParser/optionsFromParsedArgs/mocha/mergeMochaConfigWithOptions.ts new file mode 100644 index 0000000..a1577e2 --- /dev/null +++ b/src/cli/argsParser/optionsFromParsedArgs/mocha/mergeMochaConfigWithOptions.ts @@ -0,0 +1,82 @@ +import { defaults as _defaults, omit as _omit, pick as _pick } from 'lodash' +import { loadConfig } from 'mocha/lib/cli/config' +import { MochaOptions } from 'mocha' +import { mochaCliOptionArgs } from './mochaOptionsFromParsedArgs' +import parseMochaOptsFile from './parseMochaOptsFile' +import { MochaCliOptions } from '../types' + +/** + * Don't reinvent the wheel here, use Mocha's config file loading function + * under the hood + */ +const loadMochaConfigFile = (configPath: string): MochaOptions => + loadConfig(configPath) + +/** + * Don't reinvent the wheel here, use Mocha's config file loading function + * under the hood + */ +const loadMochaOptsFile = (optsFilePath: string): MochaOptions => + parseMochaOptsFile(optsFilePath) + +/** + * Merges configuration from config and/or opts file with options from CLI + */ +const mergeMochaConfigWithOptions = < + O extends 'cli' | 'constructor', + T = O extends 'cli' + ? MochaCliOptions + : O extends 'constructor' + ? MochaOptions + : never +>( + options: MochaOptions, + optionsOutputType: O, + configPath?: string, + optsFilePath?: string +): T => { + let configContents: MochaOptions = {} + if (configPath) configContents = loadMochaConfigFile(configPath) + if (optsFilePath) + configContents = _defaults(configContents, loadMochaOptsFile(optsFilePath)) + + if (optionsOutputType === 'cli') { + return _defaults( + {}, + options, + _pick(configContents, mochaCliOptionArgs) + ) as T + } + + return _defaults({}, options, _omit(configContents, mochaCliOptionArgs)) as T +} + +/** + * If a config file is present, the options in it will be merged with those + * provided in the `options`. The values in `options` are preferred over + * those in the config file. + * + * @param options A `MochaOptions` object to extract options from + * @param configPath Path to a Mocha config file + */ +export const mergeMochaConfigWithCliOptions = ( + options: MochaOptions, + configPath?: string, + optsFilePath?: string +): MochaCliOptions => + mergeMochaConfigWithOptions(options, 'cli', configPath, optsFilePath) + +/** + * If a config file is present, the options in it will be merged with those + * provided in the `options`. The values in `options` are preferred over + * those in the config file. + * + * @param options A `MochaOptions` object to extract options from + * @param configPath Path to a Mocha config file + */ +export const mergeMochaConfigWithConstructorOptions = ( + options: MochaOptions, + configPath?: string, + optsFilePath?: string +): MochaOptions => + mergeMochaConfigWithOptions(options, 'constructor', configPath, optsFilePath) diff --git a/src/cli/argsParser/optionsFromParsedArgs/mocha/mochaOptionsFromParsedArgs.ts b/src/cli/argsParser/optionsFromParsedArgs/mocha/mochaOptionsFromParsedArgs.ts new file mode 100644 index 0000000..e6a2236 --- /dev/null +++ b/src/cli/argsParser/optionsFromParsedArgs/mocha/mochaOptionsFromParsedArgs.ts @@ -0,0 +1,178 @@ +import { + camelCase as _camelCase, + cloneDeep as _cloneDeep, + merge as _merge, + omit as _omit, + pick as _pick +} from 'lodash' +import { MochaOptions } from 'mocha' +import { ParsedMochaArgs } from '../../parseArgv/mocha/types' +import { MochaCliOptions, MochapackMochaOptions } from '../types' +import { ParsedArgs } from '../../parseArgv/types' +import { + mergeMochaConfigWithConstructorOptions, + mergeMochaConfigWithCliOptions +} from './mergeMochaConfigWithOptions' +import utils from '../../utils' + +/** + * Keep track of which keys are not applicable to the Mocha constructor here. + */ +export const mochaCliOptionArgs = [ + 'config', + 'exit', + 'extension', + 'file', + 'files', + 'ignore', + 'invert', + 'list-interfaces', + 'list-reporters', + 'package', + 'recursive', + 'require', + 'sort', + 'watch', + 'watch-files', + 'watch-ignore' +] + +/** + * These arguments require some processing in order to be translated into an + * `MochaOptions` object to be used by Mochapack when initializing an + * instance of `Mocha` + */ +const argsThatDoNotDirectlyTranslateToMochaOptions = [ + 'check-leaks', + 'color', + 'diff', + 'full-trace', + 'fgrep', + 'global', + 'grep', + 'no-colors', + 'reporter-option' +] + +/** + * Ensures that any options that are provided as strings but expected as + * numbers are converted to numbers in the output + * + * @param camelizedArgs Arguments that have been parsed and their keys have + * camelized + */ +const ensureNumericOptionsAreNumbers = >( + camelizedArgs: Record +): T => { + const optionsThatShouldBeNumbers = ['slow', 'timeout'] + const output = _cloneDeep(camelizedArgs) + optionsThatShouldBeNumbers.forEach(optionName => { + if (output[optionName]) + output[optionName] = parseInt(output[optionName] as string, 10) + }) + return output as T +} + +const colorsShouldBeUsed = (args: ParsedMochaArgs): boolean => { + if (args['no-colors']) return false + return !!args.color +} + +const grepToUse = (args: ParsedMochaArgs): string | RegExp | undefined => { + if (args.grep) return args.grep + if (args.fgrep) return args.fgrep + return undefined +} + +/** + * Translates camelized arguments into a `MochaOptions` object that can be + * directly provided to a Mocha initializer + */ +const translateObjectIntoMochaOptions = ( + args: ParsedMochaArgs +): MochaOptions => { + const oneToOnes = _omit(args, argsThatDoNotDirectlyTranslateToMochaOptions) + + const ignoreLeaks = !args['check-leaks'] + const useColors = colorsShouldBeUsed(args) + const hideDiff = !args.diff + const fullStackTrace = args['full-trace'] + const globals = args.global + const grep = grepToUse(args) + const reporterOptions = args['reporter-option'] + + const options: Record = _merge( + {}, + utils.camelizeKeys(oneToOnes), + { + ignoreLeaks, + useColors, + hideDiff, + fullStackTrace, + globals, + grep, + reporterOptions + } + ) + + const mochaOptions = ensureNumericOptionsAreNumbers(options) + if (mochaOptions.timeout === 0) mochaOptions.enableTimeouts = false + + return mochaOptions +} + +/** + * Extracts applicable options for Mocha constructor given a `ParsedMochaArgs` + * object + * + * @param parsedMochaArgs A `ParsedMochaArgs` object + */ +const extractMochaConstructorOptions = ( + parsedMochaArgs: ParsedMochaArgs +): MochaOptions => { + const relevantArgs = _omit(parsedMochaArgs, mochaCliOptionArgs) + const mochaOptions = translateObjectIntoMochaOptions( + relevantArgs as ParsedMochaArgs + ) + const mergedOptions = mergeMochaConfigWithConstructorOptions( + mochaOptions as MochaOptions, + parsedMochaArgs.config + ) + + return mergedOptions +} + +/** + * Extracts applicable options for Mocha CLI given a `ParsedMochaArgs` + * object + * + * @param parsedMochaArgs A `ParsedMochaArgs` object + */ +const extractMochaCliOptions = ( + parsedMochaArgs: ParsedMochaArgs +): MochaCliOptions => { + const relevantArgs = _pick(parsedMochaArgs, mochaCliOptionArgs) + const camelizedArgs = utils.camelizeKeys(relevantArgs) + const mergedOptions = mergeMochaConfigWithCliOptions( + (camelizedArgs as unknown) as MochaOptions, + parsedMochaArgs.config, + parsedMochaArgs.opts + ) + + return mergedOptions as MochaCliOptions +} + +/** + * Translates incoming arguments relevant to Mocha into options to be used in + * constructor of Mocha instance and in CLI run by Mochapack + * + * @param parsedArgs Arguments that have been parsed from CLI + */ +const mochaOptionsFromParsedArgs = ( + parsedArgs: ParsedArgs +): MochapackMochaOptions => ({ + constructor: extractMochaConstructorOptions(parsedArgs.mocha), + cli: extractMochaCliOptions(parsedArgs.mocha) +}) + +export default mochaOptionsFromParsedArgs diff --git a/src/cli/parseConfig.ts b/src/cli/argsParser/optionsFromParsedArgs/mocha/parseMochaOptsFile.ts similarity index 84% rename from src/cli/parseConfig.ts rename to src/cli/argsParser/optionsFromParsedArgs/mocha/parseMochaOptsFile.ts index 24b58f6..faf2256 100644 --- a/src/cli/parseConfig.ts +++ b/src/cli/argsParser/optionsFromParsedArgs/mocha/parseMochaOptsFile.ts @@ -1,6 +1,6 @@ import fs from 'fs' -import { existsFileSync } from '../util/exists' -import parseArgv from './parseArgv' +import { existsFileSync } from '../../../../util/exists' +import parseArgv from '../../parseArgv' const defaultConfig = 'mochapack.opts' @@ -36,7 +36,7 @@ const removeSurroundingQuotes = str => { return stripSingleQuotes(str) } -export default function parseConfig(explicitConfig?: any) { +export default function parseMochaOptsFile(explicitConfig?: any) { const config = explicitConfig || defaultConfig if (!existsFileSync(config)) { @@ -50,6 +50,6 @@ export default function parseConfig(explicitConfig?: any) { .filter(Boolean) .map(value => value.replace(/%20/g, ' ')) .map(removeSurroundingQuotes) - const defaultOptions = parseArgv(argv, true) + const defaultOptions = parseArgv(argv) return defaultOptions } diff --git a/src/cli/argsParser/optionsFromParsedArgs/mochapack/mochapackOptionsFromParsedArgs.ts b/src/cli/argsParser/optionsFromParsedArgs/mochapack/mochapackOptionsFromParsedArgs.ts new file mode 100644 index 0000000..2464ee4 --- /dev/null +++ b/src/cli/argsParser/optionsFromParsedArgs/mochapack/mochapackOptionsFromParsedArgs.ts @@ -0,0 +1,19 @@ +import { merge as _merge, pick as _pick } from 'lodash' +import { ParsedArgs } from '../../parseArgv/types' +import { MochapackSpecificOptions } from '../types' +import utils from '../../utils' + +/** + * Translates incoming arguments relevant to Mochapack into options to be used + * when initializing Mochapack + * + * @param parsedArgs Arguments that have been parsed from CLI + */ +const mochapackOptionsFromParsedArgs = ( + parsedArgs: ParsedArgs +): MochapackSpecificOptions => + (utils.camelizeKeys( + parsedArgs.mochapack + ) as unknown) as MochapackSpecificOptions + +export default mochapackOptionsFromParsedArgs diff --git a/src/cli/argsParser/optionsFromParsedArgs/optionsFromParsedArgs.test.ts b/src/cli/argsParser/optionsFromParsedArgs/optionsFromParsedArgs.test.ts new file mode 100644 index 0000000..a50a801 --- /dev/null +++ b/src/cli/argsParser/optionsFromParsedArgs/optionsFromParsedArgs.test.ts @@ -0,0 +1,526 @@ +import { resolve } from 'path' +import { expect } from 'chai' +import { merge as _merge } from 'lodash' +import { MochaOptions } from 'mocha' +import { SinonSandbox, createSandbox } from 'sinon' +import { ParsedArgs } from '../parseArgv/types' +import optionsFromParsedArgs from '.' +import { + MochapackOptions, + MochapackWebpackOptions, + MochapackSpecificOptions +} from './types' +import { ParsedMochaArgs } from '../parseArgv/mocha/types' +import { ParsedWebpackArgs } from '../parseArgv/webpack/types' +import { ParsedMochapackArgs } from '../parseArgv/mochapack/types' + +describe('optionsFromParsedArgs', () => { + const defaultArgs: ParsedArgs = { + mocha: { + diff: true, + files: ['./test'], + reporter: 'spec', + slow: '75', + timeout: '2000', + ui: 'bdd', + extension: ['js', 'cjs', 'mjs'], + 'watch-ignore': ['node_modules', '.git'] + }, + webpack: {}, + mochapack: { + interactive: true, + 'clear-terminal': false + } + } + + const defaultOptions: MochapackOptions = { + mocha: { + cli: { + extension: ['js', 'cjs', 'mjs'], + files: ['./test'], + watchIgnore: ['node_modules', '.git'] + }, + constructor: { + reporter: 'spec', + slow: 75, + timeout: 2000, + ui: 'bdd', + fullStackTrace: undefined, + globals: undefined, + hideDiff: false, + ignoreLeaks: true, + useColors: false, + grep: undefined, + reporterOptions: undefined + } + }, + webpack: { + config: {}, + env: undefined + }, + mochapack: { + interactive: true, + clearTerminal: false + } + } + + const fixturesDir = resolve(__dirname, '../../../..', 'test/unit/cli/fixture') + let sandbox: SinonSandbox + + beforeEach(() => { + sandbox = createSandbox() + }) + + afterEach(() => { + sandbox.restore() + }) + + context('when converting Mocha args to options', () => { + context('when the argument is for a constructor option', () => { + const mochaConstructorArgs: { + argName: string + optionName: string + providedArgs: Partial + expectedOptions: MochaOptions + }[] = [ + { + argName: 'diff', + optionName: 'diff', + providedArgs: { diff: true }, + expectedOptions: { hideDiff: false } + }, + { + argName: 'diff', + optionName: 'diff', + providedArgs: { diff: false }, + expectedOptions: { hideDiff: true } + }, + { + argName: 'include', + optionName: 'allowUncaught', + providedArgs: { 'allow-uncaught': true }, + expectedOptions: { allowUncaught: true } + }, + { + argName: 'async-only', + optionName: 'asyncOnly', + providedArgs: { 'async-only': true }, + expectedOptions: { asyncOnly: true } + }, + { + argName: 'bail', + optionName: 'bail', + providedArgs: { bail: true }, + expectedOptions: { bail: true } + }, + { + argName: 'delay', + optionName: 'delay', + providedArgs: { delay: true }, + expectedOptions: { delay: true } + }, + { + argName: 'forbid-only', + optionName: 'forbidOnly', + providedArgs: { 'forbid-only': true }, + expectedOptions: { forbidOnly: true } + }, + { + argName: 'forbid-pending', + optionName: 'forbidPending', + providedArgs: { 'forbid-pending': true }, + expectedOptions: { forbidPending: true } + }, + { + argName: 'global', + optionName: 'globals', + providedArgs: { global: ['helloWorld'] }, + expectedOptions: { globals: ['helloWorld'] } + }, + { + argName: 'grep', + optionName: 'grep', + providedArgs: { grep: 'helloWorld.js' }, + expectedOptions: { grep: 'helloWorld.js' } + }, + { + argName: 'growl', + optionName: 'growl', + providedArgs: { growl: true }, + expectedOptions: { growl: true } + }, + { + argName: 'inline-diffs', + optionName: 'inlineDiffs', + providedArgs: { 'inline-diffs': false }, + expectedOptions: { inlineDiffs: false } + }, + { + argName: 'reporter', + optionName: 'reporter', + providedArgs: { reporter: 'min' }, + expectedOptions: { reporter: 'min' } + }, + { + argName: 'retries', + optionName: 'retries', + providedArgs: { retries: 7000 }, + expectedOptions: { retries: 7000 } + }, + { + argName: 'slow', + optionName: 'slow', + providedArgs: { slow: '7000' }, + expectedOptions: { slow: 7000 } + }, + { + argName: 'timeout', + optionName: 'timeout', + providedArgs: { timeout: '7000' }, + expectedOptions: { timeout: 7000 } + }, + { + argName: 'timeout', + optionName: 'timeout', + providedArgs: { timeout: '0' }, + expectedOptions: { timeout: 0, enableTimeouts: false } + }, + { + argName: 'ui', + optionName: 'ui', + providedArgs: { ui: 'tdd' }, + expectedOptions: { ui: 'tdd' } + }, + { + argName: 'reporter-option', + optionName: 'reporterOptions', + providedArgs: { 'reporter-option': { hello: 'world' } }, + expectedOptions: { reporterOptions: { hello: 'world' } } + } + ] + + mochaConstructorArgs.forEach(arg => { + it(`places ${arg.argName} under options.mocha.constructor.${arg.optionName}`, async () => { + const providedArgs = _merge({}, defaultArgs, { + mocha: arg.providedArgs + }) + const extractedOptions = await optionsFromParsedArgs(providedArgs) + expect(extractedOptions.mocha.constructor).to.eql( + _merge({}, defaultOptions.mocha.constructor, arg.expectedOptions) + ) + }) + }) + }) + + context('when the argument is for a CLI option', () => { + const mochaCliArgs = [ + { + argName: 'extension', + optionName: 'extension', + providedArgs: { extension: ['ts'] }, + expectedOptions: { extension: ['ts'] } + }, + { + argName: 'no-colors', + optionName: 'no-colors', + providedArgs: { 'no-colors': true }, + expectedOptions: { colors: false } + }, + { + argName: 'file', + optionName: 'file', + providedArgs: { file: ['test.js'] }, + expectedOptions: { file: ['test.js'] } + }, + { + argName: 'fgrep', + optionName: 'fgrep', + providedArgs: { fgrep: '**test.js' }, + expectedOptions: { fgrep: '**test.js' } + }, + { + argname: 'exit', + optionname: 'exit', + providedargs: { exit: true }, + expectedoptions: { exit: true } + }, + { + argName: 'check-leaks', + optionName: 'checkLeaks', + providedArgs: { 'check-leaks': true }, + expectedOptions: { checkLeaks: true } + }, + { + argName: 'package', + optionName: 'package', + providedArgs: { package: 'pkg.json' }, + expectedOptions: { package: 'pkg.json' } + }, + { + argName: 'recursive', + optionName: 'recursive', + providedArgs: { recursive: true }, + expectedOptions: { recursive: true } + }, + { + argName: 'reporter-option', + optionName: 'reporter-option', + providedArgs: { 'reporter-option': { hello: 'world' } }, + expectedOptions: { reporterOption: { hello: 'world' } } + }, + { + argName: 'color', + optionName: 'color', + providedArgs: { color: true }, + expectedOptions: { color: true } + }, + { + argName: 'full-trace', + optionName: 'fullTrace', + providedArgs: { 'full-trace': true }, + expectedOptions: { fullTrace: true } + }, + { + argName: 'ignore', + optionName: 'ignore', + providedArgs: { ignore: ['secret.js'] }, + expectedOptions: { ignore: ['secret.js'] } + }, + { + argName: 'invert', + optionName: 'invert', + providedArgs: { invert: true }, + expectedOptions: { invert: true } + }, + { + argName: 'require', + optionName: 'require', + providedArgs: { require: ['setup.js'] }, + expectedOptions: { require: ['setup.js'] } + }, + { + argName: 'sort', + optionName: 'sort', + providedArgs: { sort: true }, + expectedOptions: { sort: true } + }, + { + argName: 'watch', + optionName: 'watch', + providedArgs: { watch: true }, + expectedOptions: { watch: true } + }, + { + argName: 'watch-files', + optionName: 'watch-files', + providedArgs: { 'watch-files': ['testThis.js'] }, + expectedOptions: { watchFiles: ['testThis.js'] } + }, + { + argName: 'watch-ignore', + optionName: 'watch-ignore', + providedArgs: { 'watch-ignore': ['doNotTestThis.js'] }, + expectedOptions: { watchIgnore: ['doNotTestThis.js'] } + } + ] + + it('places the option under options.mocha.cli', () => { + mochaCliArgs.forEach(arg => { + it(`places ${arg.argName} under options.mocha.constructor.${arg.optionName}`, async () => { + const providedArgs = _merge({}, defaultArgs, { + mocha: arg.providedArgs + }) + const extractedOptions = await optionsFromParsedArgs(providedArgs) + expect(extractedOptions.mocha.cli).to.eql( + _merge({}, defaultOptions.mocha.cli, arg.expectedOptions) + ) + }) + }) + }) + }) + + context('when a config file provides options', () => { + context('when the config options and CLI args do not overlap', () => { + it('properly merges config options with CLI args', async () => { + const providedArgs = _merge({}, defaultArgs, { + mocha: { + config: 'test/fixture/mochaConfigNoOverlap.js', + allowUncaught: true, + ignore: ['**doNotTest.js'] + } + }) + const extractedOptions = await optionsFromParsedArgs(providedArgs) + expect(extractedOptions.mocha).to.eql( + _merge({}, defaultOptions.mocha, { + cli: { + config: 'test/fixture/mochaConfigNoOverlap.js', + ignore: ['**doNotTest.js'], + require: [ + resolve(__dirname, '../../../..', 'test/fixture/required.js') + ] + }, + constructor: { + allowUncaught: true, + asyncOnly: true + } + }) + ) + }) + }) + + context('when the config options and CLI args overlap', () => { + it('prefers the CLI args over config options', async () => { + const providedArgs = _merge({}, defaultArgs, { + mocha: { + config: 'test/fixture/mochaConfigWithOverlap.js', + allowUncaught: true, + ignore: ['**dontTest.js'] + } + }) + const extractedOptions = await optionsFromParsedArgs(providedArgs) + expect(extractedOptions.mocha).to.eql( + _merge({}, defaultOptions.mocha, { + cli: { + config: 'test/fixture/mochaConfigWithOverlap.js', + ignore: ['**dontTest.js'], + require: [ + resolve(__dirname, '../../../..', 'test/fixture/required.js') + ] + }, + constructor: { + allowUncaught: true, + asyncOnly: true + } + }) + ) + }) + }) + }) + }) + + context('when converting Webpack args to options', () => { + const webpackArgs: { + argName: string + optionName: string + providedArgs: Partial + expectedOptions: Partial + }[] = [ + { + argName: 'include', + optionName: 'include', + providedArgs: { include: ['hello.js'] }, + expectedOptions: { include: ['hello.js'] } + }, + { + argName: 'mode', + optionName: 'mode', + providedArgs: { mode: 'development' }, + expectedOptions: { + mode: 'development', + config: { mode: 'development' } + } + }, + { + argName: 'webpack-env', + optionName: 'env', + providedArgs: { 'webpack-env': 'customEnv' }, + expectedOptions: { env: 'customEnv' } + } + ] + + webpackArgs.forEach(arg => { + it(`places ${arg.argName} under options.webpack.${arg.optionName}`, async () => { + const providedArgs = _merge({}, defaultArgs, { + webpack: arg.providedArgs + }) + const extractedOptions = await optionsFromParsedArgs(providedArgs) + expect(extractedOptions.webpack).to.eql( + _merge({}, defaultOptions.webpack, arg.expectedOptions) + ) + }) + }) + + context('when a config file is not specified by the user', () => { + context('when a config file is available in the default location', () => { + it('uses the config file', async () => { + const extractedOptions = await optionsFromParsedArgs(defaultArgs) + expect(extractedOptions.webpack.config).to.eql({}) + }) + }) + + context( + 'when a config file is not available in the default location', + () => { + it('defaults to an empty object', async () => { + const extractedOptions = await optionsFromParsedArgs(defaultArgs) + expect(extractedOptions.webpack.config).to.eql({}) + }) + } + ) + }) + + context('when a webpack config is specified by the user', () => { + it("reads the user's webpack config", async () => { + const providedArgs = _merge({}, defaultArgs, { + webpack: { + 'webpack-config': resolve( + fixturesDir, + 'webpackConfig/webpack.config-test.js' + ) + } + }) + const extractedOptions = await optionsFromParsedArgs(providedArgs) + expect(extractedOptions.webpack.config).to.eql({ + mode: 'development', + target: 'node' + }) + }) + }) + }) + + context('when converting Mochapack args to options', () => { + const mochapackArgs: { + argName: string + optionName: string + providedArgs: Partial + expectedOptions: Partial + }[] = [ + { + argName: 'quiet', + optionName: 'quiet', + providedArgs: { quiet: true }, + expectedOptions: { quiet: true } + }, + { + argName: 'interactive', + optionName: 'interactive', + providedArgs: { interactive: false }, + expectedOptions: { interactive: false } + }, + { + argName: 'clear-terminal', + optionName: 'clearTerminal', + providedArgs: { 'clear-terminal': true }, + expectedOptions: { clearTerminal: true } + }, + { + argName: 'glob', + optionName: 'glob', + providedArgs: { glob: '**findThis**.js' }, + expectedOptions: { glob: '**findThis**.js' } + } + ] + + mochapackArgs.forEach(arg => { + it(`places ${arg.argName} under options.mochapack.${arg.optionName}`, async () => { + const providedArgs = _merge({}, defaultArgs, { + mochapack: arg.providedArgs + }) + const extractedOptions = await optionsFromParsedArgs(providedArgs) + expect(extractedOptions.mochapack).to.eql( + _merge({}, defaultOptions.mochapack, arg.expectedOptions) + ) + }) + }) + }) +}) diff --git a/src/cli/argsParser/optionsFromParsedArgs/types.ts b/src/cli/argsParser/optionsFromParsedArgs/types.ts new file mode 100644 index 0000000..be549c8 --- /dev/null +++ b/src/cli/argsParser/optionsFromParsedArgs/types.ts @@ -0,0 +1,45 @@ +import { MochaOptions } from 'mocha' +import { Configuration } from 'webpack' +import { WebpackMode } from '../parseArgv/webpack/types' + +export interface MochaCliOptions { + config?: string + exit?: boolean + extension: string[] + file?: string[] + files: string[] + ignore?: string[] + invert?: boolean + package?: string + recursive?: boolean + reporterOption?: any + sort?: boolean + watch?: boolean + watchFiles?: string[] + watchIgnore: string[] +} + +export interface MochapackMochaOptions { + constructor: MochaOptions + cli: MochaCliOptions +} + +export interface MochapackWebpackOptions { + include?: string[] + mode?: WebpackMode + config: Configuration + env?: string +} + +export interface MochapackSpecificOptions { + quiet?: boolean + interactive: boolean + clearTerminal: boolean + glob?: string +} + +export interface MochapackOptions { + mocha: MochapackMochaOptions + webpack: MochapackWebpackOptions + mochapack: MochapackSpecificOptions +} diff --git a/src/cli/argsParser/optionsFromParsedArgs/webpack/requireWebpackConfig.ts b/src/cli/argsParser/optionsFromParsedArgs/webpack/requireWebpackConfig.ts new file mode 100644 index 0000000..11d93c0 --- /dev/null +++ b/src/cli/argsParser/optionsFromParsedArgs/webpack/requireWebpackConfig.ts @@ -0,0 +1,152 @@ +import { existsSync } from 'fs' +import { resolve, extname, dirname, basename } from 'path' +import interpret from 'interpret' +import { + isArray as _isArray, + isFunction as _isFunction, + isString as _isString, + isUndefined as _isUndefined +} from 'lodash' +import { Configuration } from 'webpack' +import { + ModuleDescriptor, + WebpackConfig, + WebpackConfigMode +} from '../../../types' + +/** + * Ensures that .js extension comes first, or whichever extension is shorter + */ +const sortExtensions = (ext1: string, ext2: string): number => { + if (ext1 === '.js') return -1 + if (ext2 === '.js') return 1 + return ext1.length - ext2.length +} + +const extensions = Object.keys(interpret.extensions).sort(sortExtensions) + +const findConfigFile = (dirPath: string, baseName: string): string | null => { + for (const extension of extensions) { + const filePath = resolve(dirPath, `${baseName}${extension}`) + if (existsSync(filePath)) return filePath + } + return null +} + +const getConfigExtension = (configPath: string): string => { + for (const extension of extensions.reverse()) { + const configPathIncludesExtension = + configPath.indexOf(extension, configPath.length - extension.length) > -1 + + if (configPathIncludesExtension) return extension + } + return extname(configPath) +} + +/** + * Registers a compiler + */ +const registerCompiler = (moduleDescriptor: ModuleDescriptor): void => { + if (!moduleDescriptor) return + + if (_isString(moduleDescriptor)) { + require(moduleDescriptor) // eslint-disable-line global-require, import/no-dynamic-require + } else if (!_isArray(moduleDescriptor)) { + const module = require(moduleDescriptor.module) // eslint-disable-line global-require, import/no-dynamic-require + moduleDescriptor.register(module) + } else { + for (const descriptor of moduleDescriptor) { + try { + registerCompiler(descriptor) + break + } catch (e) { + if (!e.message.includes('Cannot find module')) throw e + } + } + } +} + +/** + * Determines the path to a config that requires precompile and registers the + * compiler + */ +const requireWithPrecompilerPath = ( + configPath: string, + configExtension: string +): string | undefined => { + const configDirPath = dirname(configPath) + const configBaseName = basename(configPath, configExtension) + const configPathPrecompiled = findConfigFile(configDirPath, configBaseName) + if (configPathPrecompiled != null) { + // Found a config that needs to be precompiled + const configExtensionPrecompiled = getConfigExtension(configPathPrecompiled) + // Register compiler + registerCompiler(interpret.extensions[configExtensionPrecompiled]) + return configPathPrecompiled + } + + return undefined +} + +/** + * Finds the Webpack config if available and registers the compiler according + * to the applicable extension + */ +const findConfig = ( + configPath: string, + configExtension: string +): WebpackConfig | undefined => { + let config: WebpackConfig | undefined + let requirePath: string + let configFound = false + + if (existsSync(configPath)) { + // Config exists, register compiler for non-js extensions + registerCompiler(interpret.extensions[configExtension]) + requirePath = configPath + configFound = true + } else if (configExtension === '.js') { + // Config does not exist, check for config that requires precompile + requirePath = requireWithPrecompilerPath(configPath, configExtension) + configFound = !_isUndefined(requirePath) + } + + if (configFound) { + config = require(requirePath) // eslint-disable-line global-require, import/no-dynamic-require + } + + return config +} + +/** + * Requires in the user's Webpack config + */ +const requireWebpackConfig = async ( + webpackConfig: string, + required?: boolean, + env?: string, + mode?: WebpackConfigMode +): Promise => { + const configPath = resolve(webpackConfig) + const configExtension = getConfigExtension(configPath) + const foundConfig = findConfig(configPath, configExtension) + + if (_isUndefined(foundConfig) && required) + throw new Error(`Webpack config could not be found: ${webpackConfig}`) + + let config: WebpackConfig = foundConfig + ? (foundConfig as { default: WebpackConfig }).default || foundConfig + : {} + if (_isFunction(config)) config = await Promise.resolve(config(env)) + if (_isArray(config)) { + throw new Error( + 'Passing multiple configs as an Array is not supported. Please provide a single config instead.' + ) + } + + if (mode != null) config.mode = mode + + return config +} + +export default requireWebpackConfig diff --git a/src/cli/argsParser/optionsFromParsedArgs/webpack/webpackOptionsFromParsedArgs.ts b/src/cli/argsParser/optionsFromParsedArgs/webpack/webpackOptionsFromParsedArgs.ts new file mode 100644 index 0000000..4f165f1 --- /dev/null +++ b/src/cli/argsParser/optionsFromParsedArgs/webpack/webpackOptionsFromParsedArgs.ts @@ -0,0 +1,66 @@ +import { resolve } from 'path' +import { merge as _merge, pick as _pick } from 'lodash' +import { Configuration } from 'webpack' +import { ParsedArgs } from '../../parseArgv/types' +import { MochapackWebpackOptions } from '../types' +import requireWebpackConfig from './requireWebpackConfig' +import { WebpackMode } from '../../parseArgv/webpack/types' +import { existsFileSync } from '../../../../util/exists' + +const resolveInclude = (mod: string): string => { + const absolute = existsFileSync(mod) || existsFileSync(`${mod}.js`) + const file = absolute ? resolve(mod) : mod + return file +} + +/** + * Reads the user's webpack config based on provided arguments + * + * @param configPath The path to the webpack config provided by the user + * @param env String to represent env provided by the user + * @param mode String to represent mode provided by the user + */ +const readUserWebpackConfig = async ( + configPath?: string, + env?: string, + mode?: WebpackMode +): Promise => { + const configProvidedByUser = !!configPath + const usedConfigPath = configPath || 'webpack.config.js' + + return requireWebpackConfig(usedConfigPath, configProvidedByUser, env, mode) +} + +/** + * Translates incoming arguments relevant to Webpack into options to be used + * when running Webpack within Mochapack + * + * @param parsedArgs Arguments that have been parsed from CLI + */ +const webpackOptionsFromParsedArgs = async ( + parsedArgs: ParsedArgs +): Promise => { + const initialWebpackOptions: Partial = _merge( + _pick(parsedArgs.webpack, 'include', 'mode') + ) + + initialWebpackOptions.env = parsedArgs.webpack['webpack-env'] + + const configPath = parsedArgs.webpack['webpack-config'] + const config = await readUserWebpackConfig( + configPath, + initialWebpackOptions.env, + initialWebpackOptions.mode + ) + const webpackOptions: MochapackWebpackOptions = { + ...initialWebpackOptions, + config + } + + if (webpackOptions.include) + webpackOptions.include = webpackOptions.include.map(resolveInclude) + + return webpackOptions +} + +export default webpackOptionsFromParsedArgs diff --git a/src/cli/argsParser/parseArgv/index.ts b/src/cli/argsParser/parseArgv/index.ts new file mode 100644 index 0000000..dbd1149 --- /dev/null +++ b/src/cli/argsParser/parseArgv/index.ts @@ -0,0 +1,57 @@ +import { cloneDeep as _cloneDeep, pick as _pick } from 'lodash' +import yargs from 'yargs' +import { parseMochaArgs, pruneMochaYargsOutput } from './mocha/parseMochaArgs' +import mochaOptions from './mocha/mochaOptions' +import mochapackOptions from './mochapack/mochapackOptions' +import { ParsedMochapackArgs } from './mochapack/types' +import { ParsedWebpackArgs } from './webpack/types' +import webpackOptions from './webpack/webpackOptions' +import { UndifferentiatedParsedArgs, ParsedArgs } from './types' + +/** + * Picks a subset of parsed arguments that applies to the provided option set + * + * @param parsedArgs Args that have already been parsed + * @param options The set of options to derive a set of keys from to select + * values from the parsed args + */ +const pickParsedArgs = ( + parsedArgs: UndifferentiatedParsedArgs, + options: typeof webpackOptions | typeof mochapackOptions +): T => _pick(parsedArgs, Object.keys(options)) as T + +/** + * Parses the incoming arguments using the options + * @param argv An array of arguments to parse + */ +const parse = (argv: string[]): UndifferentiatedParsedArgs => + (yargs + .help('help') + .alias('help', 'h') + .version() + .options({ ...webpackOptions, ...mochapackOptions /* ...mochaOptions */ }) + .parse(argv) as unknown) as UndifferentiatedParsedArgs + +/** + * Parses arguments passed in via CLI and provides a `MochaCliOptions` object + * as output + * + * @param argv Arguments passed in via CLI + */ +const parseArgv = (argv: string[]): ParsedArgs => { + const parsedArgs = parse(argv) + + const webpack = pickParsedArgs(parsedArgs, webpackOptions) + const mochapack = pickParsedArgs( + parsedArgs, + mochapackOptions + ) + + return { + mocha: pruneMochaYargsOutput(parseMochaArgs(argv)), + webpack, + mochapack + } +} + +export default parseArgv diff --git a/src/cli/argsParser/parseArgv/mocha/mochaOptions.ts b/src/cli/argsParser/parseArgv/mocha/mochaOptions.ts new file mode 100644 index 0000000..42eb7e3 --- /dev/null +++ b/src/cli/argsParser/parseArgv/mocha/mochaOptions.ts @@ -0,0 +1,254 @@ +import defaults from 'mocha/lib/mocharc.json' +import createInvalidArgumentValueError from 'mocha/lib/errors' +import { list } from 'mocha/lib/cli/run-helpers' +import { ONE_AND_DONE_ARGS } from 'mocha/lib/cli/one-and-dones' +import { merge as _merge, omit as _omit } from 'lodash' +import { Options } from 'yargs' + +/** + * Eventually GROUPS and mochaOptions can be done away with when options can be + * directly imported from Mocha + * + * That can be done once this PR is merged: + * https://github.com/mochajs/mocha/pull/4122 + */ +const GROUPS = { + FILES: 'File Handling', + FILTERS: 'Test Filters', + NODEJS: 'Node.js & V8', + OUTPUT: 'Reporting & Output', + RULES: 'Rules & Behavior', + CONFIG: 'Configuration' +} + +const mochaOptions: { [key: string]: Options } = { + 'allow-uncaught': { + description: 'Allow uncaught errors to propagate', + group: GROUPS.RULES + }, + 'async-only': { + description: + 'Require all tests to use a callback (async) or return a Promise', + group: GROUPS.RULES + }, + bail: { + description: 'Abort ("bail") after first test failure', + group: GROUPS.RULES + }, + 'check-leaks': { + description: 'Check for global variable leaks', + group: GROUPS.RULES + }, + color: { + description: 'Force-enable color output', + group: GROUPS.OUTPUT + }, + config: { + config: true, + defaultDescription: '(nearest rc file)', + description: 'Path to config file', + group: GROUPS.CONFIG + }, + delay: { + description: 'Delay initial execution of root suite', + group: GROUPS.RULES + }, + diff: { + default: true, + description: 'Show diff on failure', + group: GROUPS.OUTPUT + }, + exit: { + description: 'Force Mocha to quit after tests complete', + group: GROUPS.RULES + }, + extension: { + default: defaults.extension, + description: 'File extension(s) to load', + group: GROUPS.FILES, + requiresArg: true, + coerce: list + }, + fgrep: { + conflicts: 'grep', + description: 'Only run tests containing this string', + group: GROUPS.FILTERS, + requiresArg: true + }, + file: { + defaultDescription: '(none)', + description: 'Specify file(s) to be loaded prior to root suite execution', + group: GROUPS.FILES, + normalize: true, + requiresArg: true + }, + 'forbid-only': { + description: 'Fail if exclusive test(s) encountered', + group: GROUPS.RULES + }, + 'forbid-pending': { + description: 'Fail if pending test(s) encountered', + group: GROUPS.RULES + }, + 'full-trace': { + description: 'Display full stack traces', + group: GROUPS.OUTPUT + }, + global: { + coerce: list, + description: 'List of allowed global variables', + group: GROUPS.RULES, + requiresArg: true + }, + grep: { + coerce: value => (!value ? null : value), + conflicts: 'fgrep', + description: 'Only run tests matching this string or regexp', + group: GROUPS.FILTERS, + requiresArg: true + }, + growl: { + description: 'Enable Growl notifications', + group: GROUPS.OUTPUT + }, + ignore: { + defaultDescription: '(none)', + description: 'Ignore file(s) or glob pattern(s)', + group: GROUPS.FILES, + requiresArg: true + }, + 'inline-diffs': { + description: + 'Display actual/expected differences inline within each string', + group: GROUPS.OUTPUT + }, + invert: { + description: 'Inverts --grep and --fgrep matches', + group: GROUPS.FILTERS + }, + 'list-interfaces': { + conflicts: Array.from(ONE_AND_DONE_ARGS) as string[], + description: 'List built-in user interfaces & exit' + }, + 'list-reporters': { + conflicts: Array.from(ONE_AND_DONE_ARGS) as string[], + description: 'List built-in reporters & exit' + }, + 'no-colors': { + description: 'Force-disable color output', + group: GROUPS.OUTPUT, + hidden: true + }, + package: { + description: 'Path to package.json for config', + group: GROUPS.CONFIG, + normalize: true, + requiresArg: true + }, + recursive: { + description: 'Look for tests in subdirectories', + group: GROUPS.FILES + }, + reporter: { + default: defaults.reporter, + description: 'Specify reporter to use', + group: GROUPS.OUTPUT, + requiresArg: true + }, + 'reporter-option': { + coerce: opts => + list(opts).reduce((acc, opt) => { + const pair = opt.split('=') + if (pair.length > 2 || !pair.length) { + throw createInvalidArgumentValueError( + `invalid reporter option '${opt}'`, + '--reporter-option', + opt, + 'expected "key=value" format' + ) + } + + acc[pair[0]] = pair.length === 2 ? pair[1] : true + return acc + }, {}), + description: 'Reporter-specific options ()', + group: GROUPS.OUTPUT, + requiresArg: true + }, + require: { + defaultDescription: '(none)', + description: 'Require module', + group: GROUPS.FILES, + requiresArg: true + }, + retries: { + description: 'Retry failed tests this many times', + group: GROUPS.RULES + }, + slow: { + default: defaults.slow, + description: 'Specify "slow" test threshold (in milliseconds)', + group: GROUPS.RULES + }, + sort: { + description: 'Sort test files', + group: GROUPS.FILES + }, + timeout: { + default: defaults.timeout, + description: 'Specify test timeout threshold (in milliseconds)', + group: GROUPS.RULES + }, + ui: { + default: defaults.ui, + description: 'Specify user interface', + group: GROUPS.RULES, + requiresArg: true + }, + watch: { + description: 'Watch files in the current working directory for changes', + group: GROUPS.FILES + }, + 'watch-files': { + description: 'List of paths or globs to watch', + group: GROUPS.FILES, + requiresArg: true, + coerce: list + }, + 'watch-ignore': { + description: 'List of paths or globs to exclude from watching', + group: GROUPS.FILES, + requiresArg: true, + coerce: list, + default: defaults['watch-ignore'] + } +} + +/** + * Cleans up Mocha's Yargs options to provide only those that are relevant to + * running Mochapack + */ +const mochaOptionsForMochapack = _merge( + {}, + // Some options are irrelevant to actually running tests and should be run + // using Mocha from the command line directly + _omit(mochaOptions, 'list-interfaces', 'list-reporters'), + { + opts: { + type: 'string', + describe: 'Path to Mocha options file (no longer supported by Mocha)', + group: GROUPS.CONFIG, + requiresArg: true + } as Options + }, + // Some options need to be adjusted to provide support for different Mocha + // versions + { + // Until Mocha 7.0.1, only js was included in extension + extension: { default: ['js', 'cjs', 'mjs'] }, + // Not present until Mocha 6.2.0 + 'watch-ignore': { default: ['node_modules', '.git'] } + } +) + +export default mochaOptionsForMochapack diff --git a/src/cli/argsParser/parseArgv/mocha/parseMochaArgs.ts b/src/cli/argsParser/parseArgv/mocha/parseMochaArgs.ts new file mode 100644 index 0000000..48ec5ca --- /dev/null +++ b/src/cli/argsParser/parseArgv/mocha/parseMochaArgs.ts @@ -0,0 +1,97 @@ +import { pick as _pick } from 'lodash' +import Mocha from 'mocha' +import { + createMissingArgumentError, + createUnsupportedError +} from 'mocha/lib/errors' +import { ONE_AND_DONES } from 'mocha/lib/cli/one-and-dones' +import { handleRequires, validatePlugin } from 'mocha/lib/cli/run-helpers' +import { aliases, types } from 'mocha/lib/cli/run-option-metadata' +import yargs, { Arguments } from 'yargs' + +import mochaOptions from './mochaOptions' +import { ParsedMochaArgs } from './types' + +// Used to establish parity with Mocha's builder function in lib/cli/run.js +const mochaChecks = (yargsInstance: any, argv: Arguments) => { + // "one-and-dones"; let yargs handle help and version + Object.keys(ONE_AND_DONES).forEach(opt => { + if (argv[opt]) { + ONE_AND_DONES[opt].call(null, yargsInstance) + process.exit() + } + }) + + // yargs.implies() isn't flexible enough to handle this + if (argv.invert && !('fgrep' in argv || 'grep' in argv)) { + throw createMissingArgumentError( + '"--invert" requires one of "--fgrep " or "--grep "', + '--fgrep|--grep', + 'string|regexp' + ) + } + + if (argv.compilers) { + throw createUnsupportedError( + `--compilers is DEPRECATED and no longer supported. + See https://git.io/vdcSr for migration information.` + ) + } + + /** + * Commented out here to provide backward compatibility for now + */ + /* + if (argv.opts) { + throw createUnsupportedError( + `--opts: configuring Mocha via 'mocha.opts' is DEPRECATED and no longer supported. + Please use a configuration file instead.` + ) + } + */ + + // load requires first, because it can impact "plugin" validation + handleRequires(argv.require) + validatePlugin(argv, 'reporter', Mocha.reporters) + validatePlugin(argv, 'ui', Mocha.interfaces) + + return true +} + +/** + * Parses CLI arguments for Mocha using Yargs as closely as possible to how + * Mocha parses arguments when run from their CLI. + * + * This is done to keep Mocha somewhat at arm's length, and not pollute the + * standard Mochapack args parser with Mocha-specific options/settings + * + * Note that some of this correlates with the builder in Mocha's lib/cli/run.js + * + * @param argv Arguments provided via CLI + */ +export const parseMochaArgs = (argv: string[]): ParsedMochaArgs => { + const yargsOutput = yargs + .options(mochaOptions) + .check((args: Arguments) => mochaChecks(yargs, args)) + .alias(aliases) + .array(types.array) + .boolean(types.boolean) + .string(types.string) + .number(types.number) + .parse(argv) + + let files = yargsOutput._ + files = files.length ? files : ['./test'] + // Mocha checks prevent unrecognized UI from being passed along as a string + if (yargsOutput.ui && yargsOutput.ui !== yargsOutput.u) + yargsOutput.ui = yargsOutput.u + return ({ ...yargsOutput, files } as unknown) as ParsedMochaArgs +} + +/** + * Need to ensure any keys unknown to Mocha are not included in Yargs output + */ +export const pruneMochaYargsOutput = ( + yargsOutput: ParsedMochaArgs +): ParsedMochaArgs => + _pick(yargsOutput, [...Object.keys(mochaOptions), 'files']) as ParsedMochaArgs diff --git a/src/cli/argsParser/parseArgv/mocha/types.ts b/src/cli/argsParser/parseArgv/mocha/types.ts new file mode 100644 index 0000000..e9b0c50 --- /dev/null +++ b/src/cli/argsParser/parseArgv/mocha/types.ts @@ -0,0 +1,58 @@ +export type MochaReporter = + | 'base' + | 'doc' + | 'dot' + | 'html' + | 'json' + | 'tap' + | 'list' + | 'spec' + | 'nyan' + | 'min' + | 'xunit' + | 'markdown' + | 'progress' + | 'landing' + | 'jsonstream' + +export type MochaUi = 'bdd' | 'tdd' | 'qunit' | 'exports' + +export interface ParsedMochaArgs { + 'allow-uncaught'?: boolean + 'async-only'?: boolean + bail?: boolean + 'check-leaks'?: boolean + color?: boolean + config?: string + delay?: boolean + diff: boolean + exit?: boolean + extension?: string[] + fgrep?: string + file?: string[] + files: string[] + 'forbid-only'?: boolean + 'forbid-pending'?: boolean + 'full-trace'?: boolean + global?: string[] + grep?: string + growl?: boolean + ignore?: string[] + 'inline-diffs'?: boolean + invert?: boolean + 'no-colors'?: boolean + opts?: string + package?: string + recursive?: boolean + reporter: MochaReporter + 'reporter-option'?: any + require?: string[] + retries?: number + slow: string + sort?: boolean + timeout: string + ui: MochaUi + watch?: boolean + 'watch-files'?: string[] + 'watch-ignore'?: string[] +} diff --git a/src/cli/argsParser/parseArgv/mochapack/mochapackOptions.ts b/src/cli/argsParser/parseArgv/mochapack/mochapackOptions.ts new file mode 100644 index 0000000..6274643 --- /dev/null +++ b/src/cli/argsParser/parseArgv/mochapack/mochapackOptions.ts @@ -0,0 +1,37 @@ +import { Options } from 'yargs' + +const MOCHAPACK_GROUP = 'Mochapack:' + +export const mochapackDefaults = { + interactive: !!process.stdout.isTTY, + 'clear-terminal': false +} + +const mochapackOptions: { [key: string]: Options } = { + quiet: { + alias: 'q', + type: 'boolean', + describe: 'Suppress informational messages', + group: MOCHAPACK_GROUP + }, + interactive: { + type: 'boolean', + default: mochapackDefaults.interactive, + describe: 'Force interactive mode (default enabled in terminal)', + group: MOCHAPACK_GROUP + }, + 'clear-terminal': { + type: 'boolean', + default: mochapackDefaults['clear-terminal'], + describe: 'Clear current terminal, purging its history', + group: MOCHAPACK_GROUP + }, + glob: { + type: 'string', + describe: 'Test files matching (only valid for directory entry)', + group: MOCHAPACK_GROUP, + requiresArg: true + } +} + +export default mochapackOptions diff --git a/src/cli/argsParser/parseArgv/mochapack/types.ts b/src/cli/argsParser/parseArgv/mochapack/types.ts new file mode 100644 index 0000000..eb2965b --- /dev/null +++ b/src/cli/argsParser/parseArgv/mochapack/types.ts @@ -0,0 +1,6 @@ +export interface ParsedMochapackArgs { + quiet?: boolean + interactive: boolean + 'clear-terminal': boolean + glob?: string +} diff --git a/src/cli/argsParser/parseArgv/parseArgv.test.ts b/src/cli/argsParser/parseArgv/parseArgv.test.ts new file mode 100644 index 0000000..2c5aa5d --- /dev/null +++ b/src/cli/argsParser/parseArgv/parseArgv.test.ts @@ -0,0 +1,729 @@ +import { expect } from 'chai' +import { isUndefined as _isUndefined, merge as _merge } from 'lodash' + +import parseArgv from '.' +import mochaOptions from './mocha/mochaOptions' +import mochapackOptions, { + mochapackDefaults +} from './mochapack/mochapackOptions' +import webpackOptions from './webpack/webpackOptions' + +describe('parseArgv', () => { + let argv: string[] + + const mochaDefaults = { + diff: true, + files: ['./test'], + reporter: 'spec', + slow: 75, + timeout: 2000, + ui: 'bdd' + } + + const mochaDefaultExtension = ['js', 'cjs', 'mjs'] + const mochaDefaultWatchIgnore = ['node_modules', '.git'] + const mochaFullDefaults = _merge({}, mochaDefaults, { + extension: mochaDefaultExtension, + 'watch-ignore': mochaDefaultWatchIgnore + }) + + beforeEach(() => { + argv = ['src'] + }) + + context('when handling arguments for Mocha', () => { + context('when no files to test are specified', () => { + it('assumes tests are in `test/`', () => { + const parsedMochaArgs = parseArgv([]).mocha + expect(parsedMochaArgs.files).to.eql(['./test']) + }) + }) + + context('when files to test are specified', () => { + it('properly determines the array of files', () => { + const parsedMochaArgs = parseArgv(['fileA.js', 'fileB.js']).mocha + expect(parsedMochaArgs.files).to.eql(['fileA.js', 'fileB.js']) + }) + }) + + const mochaArgs = [ + { + argumentName: 'allow-uncaught', + scenarios: [ + { + provided: ['--allow-uncaught'], + expected: { mocha: { 'allow-uncaught': true } } + }, + { + provided: ['--allow-uncaught=false'], + expected: { mocha: { 'allow-uncaught': false } } + } + ] + }, + { + argumentName: 'async-only', + scenarios: [ + { + provided: ['--async-only'], + expected: { mocha: { 'async-only': true } } + }, + { + provided: ['-A'], + expected: { mocha: { 'async-only': true } } + }, + { + provided: ['--async-only=false'], + expected: { mocha: { 'async-only': false } } + } + ] + }, + { + argumentName: 'bail', + scenarios: [ + { + provided: ['--bail'], + expected: { mocha: { bail: true } } + }, + { + provided: ['-b'], + expected: { mocha: { bail: true } } + }, + { + provided: ['--bail=false'], + expected: { mocha: { bail: false } } + } + ] + }, + { + argumentName: 'check-leaks', + scenarios: [ + { + provided: ['--check-leaks'], + expected: { mocha: { 'check-leaks': true } } + }, + { + provided: ['--check-leaks=false'], + expected: { mocha: { 'check-leaks': false } } + } + ] + }, + { + argumentName: 'color', + scenarios: [ + { + provided: ['--color'], + expected: { mocha: { color: true } } + }, + { + provided: ['--colors'], + expected: { mocha: { color: true } } + }, + { + provided: ['-c'], + expected: { mocha: { color: true } } + }, + { + provided: ['--color=false'], + expected: { mocha: { color: false } } + } + ] + }, + { + argumentName: 'config', + scenarios: [ + { + provided: ['--config', 'test/fixture/testConfig.json'], + expected: { + mocha: { config: 'test/fixture/testConfig.json' } + } + } + ] + }, + { + argumentName: 'delay', + scenarios: [ + { + provided: ['--delay'], + expected: { mocha: { delay: true } } + }, + { + provided: ['--delay=false'], + expected: { mocha: { delay: false } } + } + ] + }, + { + argumentName: 'diff', + scenarios: [ + { + provided: ['--diff'], + expected: { mocha: { diff: true } } + }, + { + provided: ['--diff=false'], + expected: { mocha: { diff: false } } + } + ] + }, + { + argumentName: 'exit', + scenarios: [ + { + provided: ['--exit'], + expected: { mocha: { exit: true } } + }, + { + provided: ['--exit=false'], + expected: { mocha: { exit: false } } + } + ] + }, + { + argumentName: 'extension', + scenarios: [ + { + provided: ['--extension', 'ts'], + expected: { mocha: { extension: ['ts'] } } + } + ] + }, + { + argumentName: 'fgrep', + scenarios: [ + { + provided: ['--fgrep', 'test.js'], + expected: { mocha: { fgrep: 'test.js' } } + }, + { + provided: ['-f', 'test.js'], + expected: { mocha: { fgrep: 'test.js' } } + } + ] + }, + { + argumentName: 'file', + scenarios: [ + { + provided: ['--file', 'init.js'], + expected: { mocha: { file: ['init.js'] } } + } + ] + }, + { + argumentName: 'forbid-only', + scenarios: [ + { + provided: ['--forbid-only'], + expected: { mocha: { 'forbid-only': true } } + }, + { + provided: ['--forbid-only=false'], + expected: { mocha: { 'forbid-only': false } } + } + ] + }, + { + argumentName: 'forbid-pending', + scenarios: [ + { + provided: ['--forbid-pending'], + expected: { mocha: { 'forbid-pending': true } } + }, + { + provided: ['--forbid-pending=false'], + expected: { mocha: { 'forbid-pending': false } } + } + ] + }, + { + argumentName: 'full-trace', + scenarios: [ + { + provided: ['--full-trace'], + expected: { mocha: { 'full-trace': true } } + }, + { + provided: ['--full-trace=false'], + expected: { mocha: { 'full-trace': false } } + } + ] + }, + { + argumentName: 'global', + scenarios: [ + { + provided: ['--global', 'myGlobal'], + expected: { mocha: { global: ['myGlobal'] } } + }, + { + provided: ['--globals', 'myGlobal'], + expected: { mocha: { global: ['myGlobal'] } } + } + ] + }, + { + argumentName: 'grep', + scenarios: [ + { + provided: ['--grep', 'test.js'], + expected: { mocha: { grep: 'test.js' } } + }, + { + provided: ['-g', 'test.js'], + expected: { mocha: { grep: 'test.js' } } + } + ] + }, + { + argumentName: 'growl', + scenarios: [ + { + provided: ['--growl'], + expected: { mocha: { growl: true } } + }, + { + provided: ['-G'], + expected: { mocha: { growl: true } } + }, + { + provided: ['--growl=false'], + expected: { mocha: { growl: false } } + } + ] + }, + { + argumentName: 'ignore', + scenarios: [ + { + provided: ['--ignore', 'unimportant.js'], + expected: { mocha: { ignore: ['unimportant.js'] } } + }, + { + provided: ['--exclude', 'unimportant.js'], + expected: { mocha: { ignore: ['unimportant.js'] } } + } + ] + }, + { + argumentName: 'inline-diffs', + scenarios: [ + { + provided: ['--inline-diffs'], + expected: { mocha: { 'inline-diffs': true } } + }, + { + provided: ['--inline-diffs=false'], + expected: { mocha: { 'inline-diffs': false } } + } + ] + }, + { + argumentName: 'invert', + scenarios: [ + { + provided: ['--invert', '--grep', 'test.js'], + expected: { mocha: { invert: true, grep: 'test.js' } } + }, + { + provided: ['-i', '--grep', 'test.js'], + expected: { mocha: { invert: true, grep: 'test.js' } } + }, + { + provided: ['--invert=false', '--grep', 'test.js'], + expected: { mocha: { invert: false, grep: 'test.js' } } + } + ] + }, + { + argumentName: 'no-colors', + scenarios: [ + { + provided: ['--no-colors'], + expected: { mocha: { color: false } } + }, + { + provided: ['-C'], + expected: { mocha: { 'no-colors': true } } + }, + { + provided: ['--no-colors=false'], + expected: { mocha: { 'no-colors': false } } + } + ] + }, + { + argumentName: 'package', + scenarios: [ + { + provided: ['--package', 'pkg.json'], + expected: { mocha: { package: 'pkg.json' } } + } + ] + }, + { + argumentName: 'recursive', + scenarios: [ + { + provided: ['--recursive'], + expected: { mocha: { recursive: true } } + }, + { + provided: ['--recursive=false'], + expected: { mocha: { recursive: false } } + } + ] + }, + { + argumentName: 'reporter', + scenarios: [ + { + provided: ['--reporter', 'min'], + expected: { mocha: { reporter: 'min' } } + }, + { + provided: ['-R', 'min'], + expected: { mocha: { reporter: 'min' } } + } + ] + }, + { + argumentName: 'reporter-option', + scenarios: [ + { + provided: ['--reporter-option', 'foo=bar,isLegit,hello=world'], + expected: { + mocha: { + 'reporter-option': { foo: 'bar', isLegit: true, hello: 'world' } + } + } + }, + { + provided: ['--reporter-options', 'foo=bar,isLegit,hello=world'], + expected: { + mocha: { + 'reporter-option': { foo: 'bar', isLegit: true, hello: 'world' } + } + } + }, + { + provided: ['-O', 'foo=bar,isLegit,hello=world'], + expected: { + mocha: { + 'reporter-option': { foo: 'bar', isLegit: true, hello: 'world' } + } + } + } + ] + }, + { + argumentName: 'require', + scenarios: [ + { + provided: ['--require', 'test/fixture/required.js'], + expected: { mocha: { require: ['test/fixture/required.js'] } } + }, + { + provided: ['-r', 'test/fixture/required.js'], + expected: { mocha: { require: ['test/fixture/required.js'] } } + } + ] + }, + { + argumentName: 'retries', + scenarios: [ + { + provided: ['--retries', 700], + expected: { mocha: { retries: 700 } } + } + ] + }, + { + argumentName: 'slow', + scenarios: [ + { + provided: ['--slow', 20000], + expected: { mocha: { slow: '20000' } } + }, + { + provided: ['-s', 20000], + expected: { mocha: { slow: '20000' } } + } + ] + }, + { + argumentName: 'sort', + scenarios: [ + { + provided: ['--sort'], + expected: { mocha: { sort: true } } + }, + { + provided: ['-S'], + expected: { mocha: { sort: true } } + }, + { + provided: ['--sort=false'], + expected: { mocha: { sort: false } } + } + ] + }, + { + argumentName: 'timeout', + scenarios: [ + { + provided: ['--timeout', 3000], + expected: { mocha: { timeout: '3000' } } + }, + { + provided: ['--timeouts', 3000], + expected: { mocha: { timeout: '3000' } } + }, + { + provided: ['-t', 3000], + expected: { mocha: { timeout: '3000' } } + } + ] + }, + { + argumentName: 'ui', + scenarios: [ + { provided: ['--ui', 'tdd'], expected: { mocha: { ui: 'tdd' } } }, + { provided: ['-u', 'tdd'], expected: { mocha: { ui: 'tdd' } } } + ] + }, + { + argumentName: 'watch', + scenarios: [ + { + provided: ['--watch'], + expected: { mocha: { watch: true } } + }, + { + provided: ['-w'], + expected: { mocha: { watch: true } } + }, + { + provided: ['--watch=false'], + expected: { mocha: { watch: false } } + } + ] + }, + { + argumentName: 'watch-files', + scenarios: [ + { + provided: ['--watch-files', '**testable**.js'], + expected: { + mocha: { 'watch-files': ['**testable**.js'] } + } + } + ] + }, + { + argumentName: 'watch-ignore', + scenarios: [ + { + provided: ['--watch-ignore', '**notTestable**.js'], + expected: { mocha: { 'watch-ignore': ['**notTestable**.js'] } } + } + ] + }, + { + argumentName: 'opts', + scenarios: [ + { + provided: ['--opts', 'mochapack.opts'], + expected: { mocha: { opts: 'mochapack.opts' } } + } + ] + } + ] + + mochaArgs.forEach(arg => { + context(`when parsing arguments for ${arg.argumentName}`, () => { + it(`uses the default set by Mocha`, () => { + const defaultMochaOption = mochaOptions[arg.argumentName] + const parsedMochaArgs = parseArgv([]).mocha + if (_isUndefined(parsedMochaArgs)) { + expect(defaultMochaOption.default).to.be.undefined // eslint-disable-line + } else { + expect(parsedMochaArgs[arg.argumentName]).to.eql( + mochaFullDefaults[arg.argumentName] + ) + } + }) + + arg.scenarios.forEach(scenario => { + it(`properly interprets '${scenario.provided.join(' ')}'`, () => { + expect(parseArgv(scenario.provided)).to.eql( + _merge( + {}, + { + mocha: { + ...mochaDefaults, + extension: + scenario.expected.mocha.extension || + mochaDefaultExtension, + 'watch-ignore': + scenario.expected.mocha['watch-ignore'] || + mochaDefaultWatchIgnore + }, + webpack: {}, + mochapack: mochapackDefaults + }, + scenario.expected + ) + ) + }) + }) + }) + }) + }) + + context('when handling arguments for Webpack', () => { + const webpackArgs = [ + { + argumentName: 'include', + scenarios: [ + { + provided: ['--include', 'test.js'], + expected: { webpack: { include: ['test.js'] } } + }, + { + provided: ['--include', 'test-a.js', '--include', 'test-b.js'], + expected: { webpack: { include: ['test-a.js', 'test-b.js'] } } + } + ] + }, + { + argumentName: 'mode', + scenarios: [ + { + provided: ['--mode', 'development'], + expected: { webpack: { mode: 'development' } } + } + ] + }, + { + argumentName: 'webpack-config', + scenarios: [ + { + provided: ['--webpack-config', 'path/to/config.js'], + expected: { webpack: { 'webpack-config': 'path/to/config.js' } } + } + ] + }, + { + argumentName: 'webpack-env', + scenarios: [ + { + provided: ['--webpack-env', 'custom-env'], + expected: { webpack: { 'webpack-env': 'custom-env' } } + } + ] + } + ] + + webpackArgs.forEach(arg => { + context(`when parsing arguments for ${arg.argumentName}`, () => { + it(`uses the default set by Mochapack`, () => { + const defaultWebpackOption = webpackOptions[arg.argumentName] + expect(defaultWebpackOption.default).to.be.undefined // eslint-disable-line + }) + + arg.scenarios.forEach(scenario => { + it(`properly interprets '${scenario.provided.join(' ')}'`, () => { + expect(parseArgv(scenario.provided)).to.eql( + _merge( + {}, + { + mocha: mochaFullDefaults, + webpack: {}, + mochapack: mochapackDefaults + }, + scenario.expected + ) + ) + }) + }) + }) + }) + }) + + context('when handling arguments for Mochapack', () => { + const mochapackArgs = [ + { + argumentName: 'quiet', + scenarios: [ + { + provided: ['--quiet'], + expected: { mochapack: { quiet: true } } + }, + { + provided: ['-q'], + expected: { mochapack: { quiet: true } } + } + ] + }, + { + argumentName: 'interactive', + scenarios: [ + { + provided: ['--interactive'], + expected: { mochapack: { interactive: true } } + } + ] + }, + { + argumentName: 'clear-terminal', + scenarios: [ + { + provided: ['--clear-terminal'], + expected: { mochapack: { 'clear-terminal': true } } + } + ] + }, + { + argumentName: 'glob', + scenarios: [ + { + provided: ['--glob', '**globpattern**.js'], + expected: { mochapack: { glob: '**globpattern**.js' } } + } + ] + } + ] + + mochapackArgs.forEach(arg => { + context(`when parsing arguments for ${arg.argumentName}`, () => { + it(`uses the default set by Mochapack`, () => { + const defaultMochapackOption = mochapackOptions[arg.argumentName] + const parsedMochapackArgs = parseArgv([]).mochapack + if (_isUndefined(parsedMochapackArgs)) { + expect(defaultMochapackOption.default).to.be.undefined // eslint-disable-line + } else { + expect(parsedMochapackArgs[arg.argumentName]).to.eql( + mochapackDefaults[arg.argumentName] + ) + } + }) + + arg.scenarios.forEach(scenario => { + it(`properly interprets '${scenario.provided.join(' ')}'`, () => { + expect(parseArgv(scenario.provided)).to.eql( + _merge( + {}, + { + mocha: mochaFullDefaults, + webpack: {}, + mochapack: mochapackDefaults + }, + scenario.expected + ) + ) + }) + }) + }) + }) + }) +}) diff --git a/src/cli/argsParser/parseArgv/types.ts b/src/cli/argsParser/parseArgv/types.ts new file mode 100644 index 0000000..84e55d0 --- /dev/null +++ b/src/cli/argsParser/parseArgv/types.ts @@ -0,0 +1,13 @@ +import { ParsedMochaArgs } from './mocha/types' +import { ParsedWebpackArgs } from './webpack/types' +import { ParsedMochapackArgs } from './mochapack/types' + +export type UndifferentiatedParsedArgs = ParsedMochaArgs & + ParsedWebpackArgs & + ParsedMochapackArgs + +export interface ParsedArgs { + mocha: ParsedMochaArgs + webpack: ParsedWebpackArgs + mochapack: ParsedMochapackArgs +} diff --git a/src/cli/argsParser/parseArgv/webpack/types.ts b/src/cli/argsParser/parseArgv/webpack/types.ts new file mode 100644 index 0000000..2f24176 --- /dev/null +++ b/src/cli/argsParser/parseArgv/webpack/types.ts @@ -0,0 +1,8 @@ +export type WebpackMode = 'development' | 'production' + +export interface ParsedWebpackArgs { + include?: string[] + mode?: WebpackMode + 'webpack-config'?: string + 'webpack-env'?: string +} diff --git a/src/cli/argsParser/parseArgv/webpack/webpackOptions.ts b/src/cli/argsParser/parseArgv/webpack/webpackOptions.ts new file mode 100644 index 0000000..9b81420 --- /dev/null +++ b/src/cli/argsParser/parseArgv/webpack/webpackOptions.ts @@ -0,0 +1,31 @@ +import { Options } from 'yargs' + +const WEBPACK_GROUP = 'Webpack:' + +const webpackOptions: { [key: string]: Options } = { + include: { + type: 'array', + describe: 'Include the given module into test bundle', + group: WEBPACK_GROUP, + requiresArg: true + }, + mode: { + type: 'string', + choices: ['development', 'production'], + describe: 'Webpack mode to use', + group: WEBPACK_GROUP, + requiresArg: true + }, + 'webpack-config': { + type: 'string', + describe: 'Path to Webpack config file', + group: WEBPACK_GROUP, + requiresArg: true + }, + 'webpack-env': { + type: 'string', + describe: 'Environment passed to the webpack config when it is a function', + group: WEBPACK_GROUP + } +} +export default webpackOptions diff --git a/src/cli/argsParser/utils.ts b/src/cli/argsParser/utils.ts new file mode 100644 index 0000000..a5eb6b9 --- /dev/null +++ b/src/cli/argsParser/utils.ts @@ -0,0 +1,18 @@ +import { camelCase as _camelCase } from 'lodash' + +/** + * Converts top-level keys of an object to camelCase + * + * @param obj An object to convert keys for + */ +const camelizeKeys = (obj: T): T => { + const output: T = {} as T + + Object.keys(obj).forEach(key => { + output[_camelCase(key)] = obj[key] + }) + + return output +} + +export default { camelizeKeys } diff --git a/src/cli/index.ts b/src/cli/index.ts index c7d1ed1..3da77d1 100644 --- a/src/cli/index.ts +++ b/src/cli/index.ts @@ -1,20 +1,11 @@ -import path from 'path' -import _ from 'lodash' +import { get as _get } from 'lodash' -import parseArgv from './parseArgv' -import { existsFileSync } from '../util/exists' -import parseConfig from './parseConfig' -import requireWebpackConfig from './requireWebpackConfig' +import parseArgv from './argsParser/parseArgv' import { ensureGlob, extensionsToGlob } from '../util/glob' -import createMochaWebpack from '../createMochaWebpack' +import createMochapack from '../createMochapack' +import optionsFromParsedArgs from './argsParser/optionsFromParsedArgs' -function resolve(mod) { - const absolute = existsFileSync(mod) || existsFileSync(`${mod}.js`) - const file = absolute ? path.resolve(mod) : mod - return file -} - -function exit(lazy, code) { +const exit = (lazy: boolean, code: number): void => { if (lazy) { process.on('exit', () => { process.exit(code) @@ -25,113 +16,40 @@ function exit(lazy, code) { } async function cli() { - const cliOptions = parseArgv(process.argv.slice(2), true) - const configOptions = parseConfig(cliOptions.opts) - const requiresWebpackConfig = - cliOptions.webpackConfig != null || configOptions.webpackConfig != null - const defaultOptions = parseArgv([]) - - const options = _.defaults({}, cliOptions, configOptions, defaultOptions) - - options.require.forEach(mod => { - require(resolve(mod)) // eslint-disable-line global-require, import/no-dynamic-require - }) - - options.include = options.include.map(resolve) + const cliArgs = parseArgv(process.argv.slice(2)) + const cliOptions = await optionsFromParsedArgs(cliArgs) + const mochaWebpack = createMochapack(cliOptions) - options.webpackConfig = await requireWebpackConfig( - options.webpackConfig, - requiresWebpackConfig, - options.webpackEnv, - options.mode - ) - - const mochaWebpack = createMochaWebpack() - - options.include.forEach(f => mochaWebpack.addInclude(f)) - - const extensions = _.get(options.webpackConfig, 'resolve.extensions', ['.js']) + const extensions = _get(cliOptions.webpack.config, 'resolve.extensions', [ + '.js' + ]) const fallbackFileGlob = extensionsToGlob(extensions) - const fileGlob = options.glob != null ? options.glob : fallbackFileGlob - - options.files.forEach(f => - mochaWebpack.addEntry(ensureGlob(f, options.recursive, fileGlob)) + const fileGlob = + cliOptions.mochapack.glob != null + ? cliOptions.mochapack.glob + : fallbackFileGlob + + cliOptions.mocha.cli.files.forEach(f => + mochaWebpack.addEntry( + ensureGlob(f, cliOptions.mocha.cli.recursive, fileGlob) + ) ) - mochaWebpack.cwd(process.cwd()) - mochaWebpack.webpackConfig(options.webpackConfig) - mochaWebpack.bail(options.bail) - mochaWebpack.reporter(options.reporter, options.reporterOptions) - mochaWebpack.ui(options.ui) - mochaWebpack.interactive(options.interactive) - mochaWebpack.clearTerminal(options.clearTerminal) - - if (options.fgrep) { - mochaWebpack.fgrep(options.fgrep) - } - - if (options.grep) { - mochaWebpack.grep(options.grep) - } - - if (options.invert) { - mochaWebpack.invert() - } - - if (options.checkLeaks) { - mochaWebpack.ignoreLeaks(false) - } - - if (options.fullTrace) { - mochaWebpack.fullStackTrace() - } - - if (options.quiet) { - mochaWebpack.quiet() - } - - mochaWebpack.useColors(options.colors) - mochaWebpack.useInlineDiffs(options.inlineDiffs) - mochaWebpack.timeout(options.timeout) - - if (options.retries) { - mochaWebpack.retries(options.retries) - } - - mochaWebpack.slow(options.slow) - - if (options.asyncOnly) { - mochaWebpack.asyncOnly() - } - - if (options.delay) { - mochaWebpack.delay() - } - - if (options.growl) { - mochaWebpack.growl() - } - - if (options.forbidOnly) { - mochaWebpack.forbidOnly() - } - await Promise.resolve() // @ts-ignore .then(() => { - if (options.watch) { + if (cliOptions.mocha.cli.watch) { return mochaWebpack.watch() } return mochaWebpack.run() }) - .then(failures => { - exit(options.exit, failures) + .then((failures: number) => { + exit(cliOptions.mocha.cli.exit, failures) }) - .catch(e => { - if (e) { - console.error(e.stack) // eslint-disable-line - } - exit(options.exit, 1) + .catch((e: Error) => { + if (e) console.error(e.stack) // eslint-disable-line + + exit(cliOptions.mocha.cli.exit, 1) }) } diff --git a/src/cli/parseArgv.ts b/src/cli/parseArgv.ts deleted file mode 100644 index 39b7187..0000000 --- a/src/cli/parseArgv.ts +++ /dev/null @@ -1,334 +0,0 @@ -import yargs from 'yargs' -import _ from 'lodash' - -const BASIC_GROUP = 'Basic options:' -const OUTPUT_GROUP = 'Output options:' -const ADVANCED_GROUP = 'Advanced options:' - -const options = { - 'async-only': { - alias: 'A', - type: 'boolean', - default: false, - describe: 'force all tests to take a callback (async) or return a promise', - group: ADVANCED_GROUP - }, - colors: { - alias: 'c', - type: 'boolean', - default: undefined, - describe: 'force enabling of colors', - group: OUTPUT_GROUP - }, - quiet: { - alias: 'q', - type: 'boolean', - default: undefined, - describe: 'does not show informational messages', - group: OUTPUT_GROUP - }, - interactive: { - type: 'boolean', - default: !!process.stdout.isTTY, - describe: 'force interactive mode (default enabled in terminal)', - group: OUTPUT_GROUP - }, - 'clear-terminal': { - type: 'boolean', - default: false, - describe: 'clear current terminal, purging its histroy', - group: OUTPUT_GROUP - }, - growl: { - alias: 'G', - type: 'boolean', - default: false, - describe: 'enable growl notification support', - group: OUTPUT_GROUP - }, - recursive: { - type: 'boolean', - default: false, - describe: 'include sub directories', - group: ADVANCED_GROUP - }, - reporter: { - alias: 'R', - type: 'string', - describe: 'specify the reporter to use', - group: OUTPUT_GROUP, - default: 'spec', - requiresArg: true - }, - 'reporter-options': { - alias: 'O', - type: 'string', - describe: 'reporter-specific options, --reporter-options ', - group: OUTPUT_GROUP, - requiresArg: true - }, - bail: { - alias: 'b', - type: 'boolean', - describe: 'bail after first test failure', - group: ADVANCED_GROUP, - default: false - }, - glob: { - type: 'string', - describe: - 'only test files matching (only valid for directory entry)', - group: ADVANCED_GROUP, - requiresArg: true - }, - grep: { - alias: 'g', - type: 'string', - describe: 'only run tests matching ', - group: ADVANCED_GROUP, - requiresArg: true - }, - fgrep: { - alias: 'f', - type: 'string', - describe: 'only run tests containing ', - group: ADVANCED_GROUP, - requiresArg: true - }, - invert: { - alias: 'i', - type: 'boolean', - describe: 'inverts --grep and --fgrep matches', - group: ADVANCED_GROUP, - default: false - }, - require: { - alias: 'r', - type: 'string', - describe: 'require the given module', - group: ADVANCED_GROUP, - requiresArg: true, - multiple: true - }, - include: { - type: 'string', - describe: 'include the given module into test bundle', - group: ADVANCED_GROUP, - requiresArg: true, - multiple: true - }, - slow: { - alias: 's', - describe: '"slow" test threshold in milliseconds', - group: ADVANCED_GROUP, - default: 75, - defaultDescription: '75 ms', - requiresArg: true - }, - timeout: { - alias: 't', - describe: 'set test-case timeout in milliseconds', - group: ADVANCED_GROUP, - default: 2000, - defaultDescription: '2000 ms', - requiresArg: true - }, - ui: { - alias: 'u', - describe: 'specify user-interface (e.g. "bdd", "tdd", "exports", "qunit")', - group: BASIC_GROUP, - default: 'bdd', - requiresArg: true - }, - watch: { - alias: 'w', - type: 'boolean', - describe: 'watch files for changes', - group: BASIC_GROUP, - default: false - }, - 'check-leaks': { - type: 'boolean', - describe: 'check for global variable leaks', - group: ADVANCED_GROUP, - default: false - }, - 'full-trace': { - type: 'boolean', - describe: 'display the full stack trace', - group: ADVANCED_GROUP, - default: false - }, - 'inline-diffs': { - type: 'boolean', - describe: 'display actual/expected differences inline within each string', - group: ADVANCED_GROUP, - default: false - }, - exit: { - type: 'boolean', - describe: - 'require a clean shutdown of the event loop: mocha will not call process.exit', - group: ADVANCED_GROUP, - default: false - }, - retries: { - describe: 'set numbers of time to retry a failed test case', - group: BASIC_GROUP, - requiresArg: true - }, - delay: { - type: 'boolean', - describe: 'wait for async suite definition', - group: ADVANCED_GROUP, - default: false - }, - mode: { - type: 'string', - choices: ['development', 'production'], - describe: 'webpack mode to use', - group: BASIC_GROUP, - requiresArg: true - }, - 'webpack-config': { - type: 'string', - describe: 'path to webpack-config file', - group: BASIC_GROUP, - requiresArg: true, - default: 'webpack.config.js' - }, - 'webpack-env': { - describe: 'environment passed to the webpack-config, when it is a function', - group: BASIC_GROUP - }, - opts: { - type: 'string', - describe: 'path to webpack-mocha options file', - group: BASIC_GROUP, - requiresArg: true - }, - 'forbid-only': { - type: 'boolean', - describe: 'fail if exclusive test(s) encountered', - group: ADVANCED_GROUP, - default: false - } -} - -const paramList = opts => _.map(_.keys(opts), _.camelCase) -const parameters = paramList(options) // camel case parameters -// @ts-ignore -const parametersWithMultipleArgs = paramList( - // @ts-ignore - _.pickBy(_.mapValues(options, v => !!v.requiresArg && v.multiple === true)) -) // eslint-disable-line max-len -// @ts-ignore -const groupedAliases = _.values( - _.mapValues(options, (value, key) => - // @ts-ignore - [_.camelCase(key), key, value.alias].filter(_.identity) - ) -) // eslint-disable-line max-len - -function parse(argv, ignoreDefaults) { - const parsedArgs = yargs - .help('help') - .alias('help', 'h') - .version() - // @ts-ignore - .options(options) - .strict() - .parse(argv) - - let files = parsedArgs._ - - if (!files.length) { - files = ['./test'] - } - - const parsedOptions = _.pick(parsedArgs, parameters) // pick all parameters as new object - const validOptions = _.omitBy(parsedOptions, _.isUndefined) // remove all undefined values - - _.forEach(parametersWithMultipleArgs, key => { - if (_.has(validOptions, key)) { - const value = validOptions[key] - if (!Array.isArray(value)) { - validOptions[key] = [value] - } - } - }) - - _.forOwn(validOptions, (value, key) => { - // validate all non-array options with required arg that it is not duplicated - // see https://github.com/yargs/yargs/issues/229 - if (parametersWithMultipleArgs.indexOf(key) === -1 && _.isArray(value)) { - const arg = _.kebabCase(key) - const provided = value.map(v => `--${arg} ${v}`).join(' ') - const expected = `--${arg} ${value[0]}` - - throw new Error( - `Duplicating arguments for "--${arg}" is not allowed. "${provided}" was provided, but expected "${expected}"` - ) // eslint-disable-line max-len - } - }) - - validOptions.files = files - - const reporterOptions = {} - - if (validOptions.reporterOptions) { - validOptions.reporterOptions.split(',').forEach(opt => { - const L = opt.split('=') - if (L.length > 2 || L.length === 0) { - throw new Error(`invalid reporter option ${opt}`) - } else if (L.length === 2) { - reporterOptions[L[0]] = L[1] // eslint-disable-line prefer-destructuring - } else { - reporterOptions[L[0]] = true - } - }) - } - - validOptions.reporterOptions = reporterOptions - validOptions.require = validOptions.require || [] - validOptions.include = validOptions.include || [] - - if (validOptions.webpackEnv) { - _.mapValues(validOptions.webpackEnv, (value, key) => { - if (Array.isArray(value)) { - const [first] = value - validOptions.webpackEnv[key] = first - } - }) - } - - if (ignoreDefaults) { - const userOptions = yargs(argv).argv - const providedKeys = _.keys(userOptions) - const usedAliases = _.flatten( - _.filter(groupedAliases, aliases => - _.some(aliases, alias => providedKeys.indexOf(alias) !== -1) - ) - ) - - if (parsedArgs._.length) { - usedAliases.push('files') - } - - return _.pick(validOptions, usedAliases) - } - - return validOptions -} - -export default function parseArgv(argv, ignoreDefaults = false) { - const origMainFilename = require.main.filename - try { - // yargs searches for package.json up starting from `require.main.filename` path with `yargs` parser configuration - // it results in finding mocha `package.json` with config for yargs, which is different then we need - require.main.filename = require.resolve('../../bin/_mocha') - return parse(argv, ignoreDefaults) - } finally { - require.main.filename = origMainFilename - } -} diff --git a/src/cli/requireWebpackConfig.ts b/src/cli/requireWebpackConfig.ts deleted file mode 100644 index 6ddf25c..0000000 --- a/src/cli/requireWebpackConfig.ts +++ /dev/null @@ -1,133 +0,0 @@ -import path from 'path' -import fs from 'fs' -import interpret from 'interpret' -import { Configuration as WebpackConfig } from 'webpack' - -type WebpackConfigMode = 'production' | 'development' | 'none' - -function sortExtensions(ext1, ext2) { - if (ext1 === '.js') { - return -1 - } - if (ext2 === '.js') { - return 1 - } - return ext1.length - ext2.length -} - -const extensions = Object.keys(interpret.extensions).sort(sortExtensions) - -function fileExists(filePath) { - try { - return fs.existsSync(filePath) - } catch (e) { - return false - } -} - -function findConfigFile(dirPath, baseName) { - for (let i = 0; i < extensions.length; i += 1) { - const filePath = path.resolve(dirPath, `${baseName}${extensions[i]}`) - if (fileExists(filePath)) { - return filePath - } - } - return null -} - -function getConfigExtension(configPath) { - for (let i = extensions.length - 1; i >= 0; i -= 1) { - const extension = extensions[i] - if ( - configPath.indexOf(extension, configPath.length - extension.length) > -1 - ) { - return extension - } - } - return path.extname(configPath) -} - -function registerCompiler(moduleDescriptor) { - if (!moduleDescriptor) { - return - } - - if (typeof moduleDescriptor === 'string') { - require(moduleDescriptor) // eslint-disable-line global-require, import/no-dynamic-require - } else if (!Array.isArray(moduleDescriptor)) { - const module = require(moduleDescriptor.module) // eslint-disable-line global-require, import/no-dynamic-require - moduleDescriptor.register(module) - } else { - for (let i = 0; i < moduleDescriptor.length; i += 1) { - try { - registerCompiler(moduleDescriptor[i]) - break - } catch (e) { - // do nothing - } - } - } -} - -export default async function requireWebpackConfig( - webpackConfig, - required?: boolean, - env?: string, - mode?: WebpackConfigMode -) { - const configPath = path.resolve(webpackConfig) - const configExtension = getConfigExtension(configPath) - let configFound = false - let config: WebpackConfig | ((...args: any[]) => Promise) = {} - - if (fileExists(configPath)) { - // config exists, register compiler for non-js extensions - registerCompiler(interpret.extensions[configExtension]) - // require config - config = require(configPath) // eslint-disable-line global-require, import/no-dynamic-require - configFound = true - } else if (configExtension === '.js') { - // config path does not exist, try to require it with precompiler - const configDirPath = path.dirname(configPath) - const configBaseName = path.basename(configPath, configExtension) - const configPathPrecompiled = findConfigFile(configDirPath, configBaseName) - if (configPathPrecompiled != null) { - // found a config that needs to be precompiled - const configExtensionPrecompiled = getConfigExtension( - configPathPrecompiled - ) - // register compiler & require config - registerCompiler(interpret.extensions[configExtensionPrecompiled]) - config = require(configPathPrecompiled) // eslint-disable-line global-require, import/no-dynamic-require - configFound = true - } - } - - if (!configFound) { - if (required) { - throw new Error(`Webpack config could not be found: ${webpackConfig}`) - } else if (mode != null) { - ;(config as WebpackConfig).mode = mode - } - return config - } - - // @ts-ignore - config = config.default || config - - if (typeof config === 'function') { - config = await Promise.resolve(config(env)) - } - - if (mode != null) { - config.mode = mode - } - - if (Array.isArray(config)) { - throw new Error( - 'Passing multiple configs as an Array is not supported. Please provide a single config instead.' - ) - } - - return config -} diff --git a/src/cli/types.ts b/src/cli/types.ts new file mode 100644 index 0000000..c525d8d --- /dev/null +++ b/src/cli/types.ts @@ -0,0 +1,12 @@ +import { Configuration } from 'webpack' + +export type WebpackConfigMode = 'production' | 'development' | 'none' + +export type WebpackConfig = + | Configuration + | ((...args: any[]) => Promise) + +export type ModuleDescriptor = + | string + | string[] + | { module: string; register: Function } diff --git a/src/createMochaWebpack.ts b/src/createMochaWebpack.ts deleted file mode 100644 index 3e7af16..0000000 --- a/src/createMochaWebpack.ts +++ /dev/null @@ -1,5 +0,0 @@ -import MochaWebpack from './MochaWebpack' - -export default function createMochaWebpack(): MochaWebpack { - return new MochaWebpack() -} diff --git a/src/createMochapack.ts b/src/createMochapack.ts new file mode 100644 index 0000000..e1ba8eb --- /dev/null +++ b/src/createMochapack.ts @@ -0,0 +1,6 @@ +import Mochapack from './Mochapack' +import { MochapackOptions } from './cli/argsParser/optionsFromParsedArgs/types' + +export default function createMochapack(options: MochapackOptions): Mochapack { + return new Mochapack(options) +} diff --git a/src/runner/TestRunner.ts b/src/runner/TestRunner.ts index 44460c9..677f128 100644 --- a/src/runner/TestRunner.ts +++ b/src/runner/TestRunner.ts @@ -5,19 +5,29 @@ import chokidar from 'chokidar' import minimatch from 'minimatch' import { Configuration as WebpackConfig, Compiler, Stats } from 'webpack' -import { glob } from '../util/glob' import createCompiler from '../webpack/compiler/createCompiler' import createWatchCompiler, { WatchCompiler } from '../webpack/compiler/createWatchCompiler' import registerInMemoryCompiler from '../webpack/compiler/registerInMemoryCompiler' import registerReadyCallback from '../webpack/compiler/registerReadyCallback' -import { EntryConfig } from '../webpack/loader/entryLoader' -import configureMocha from './configureMocha' import getBuildStats, { BuildStats } from '../webpack/util/getBuildStats' -import buildProgressPlugin from '../webpack/plugin/buildProgressPlugin' -import { MochaWebpackOptions } from '../MochaWebpack' +import createWebpackConfig from './runnerUtils/createWebpackConfig' +import { + WEBPACK_START_EVENT, + MOCHAPACK_NAME, + WEBPACK_READY_EVENT, + MOCHA_BEGIN_EVENT, + MOCHA_FINISHED_EVENT, + EXCEPTION_EVENT, + MOCHA_ABORTED_EVENT, + ENTRY_REMOVED_EVENT, + ENTRY_ADDED_EVENT, + UNCAUGHT_EXCEPTION_EVENT +} from '../util/constants' +import initMocha from './runnerUtils/initMocha' +import { MochapackOptions } from '../cli/argsParser/optionsFromParsedArgs/types' const entryPath = path.resolve(__dirname, '../entry.js') const entryLoaderPath = path.resolve( @@ -46,22 +56,24 @@ type Mocha = { export default class TestRunner extends EventEmitter { entries: Array includes: Array - options: MochaWebpackOptions + options: MochapackOptions + cwd: string constructor( entries: Array, includes: Array, - options: MochaWebpackOptions + options: MochapackOptions, + cwd: string ) { super() this.entries = entries this.includes = includes - this.options = options + this.cwd = cwd } prepareMocha(webpackConfig: WebpackConfig, stats: Stats): Mocha { - const mocha: Mocha = configureMocha(this.options) + const mocha: Mocha = initMocha(this.options.mocha, this.cwd) const outputPath = webpackConfig.output.path const buildStats: BuildStats = getBuildStats(stats, outputPath) @@ -82,8 +94,8 @@ export default class TestRunner extends EventEmitter { let failures = 0 const compiler: Compiler = createCompiler(config) - compiler.hooks.run.tapAsync('mochapack', (c, cb) => { - this.emit('webpack:start') + compiler.hooks.run.tapAsync(MOCHAPACK_NAME, (c, cb) => { + this.emit(WEBPACK_START_EVENT) cb() }) @@ -93,21 +105,21 @@ export default class TestRunner extends EventEmitter { registerReadyCallback( compiler, (err: (Error | string) | null, webpackStats: Stats | null) => { - this.emit('webpack:ready', err, webpackStats) + this.emit(WEBPACK_READY_EVENT, err, webpackStats) if (err || !webpackStats) { reject() return } try { const mocha = this.prepareMocha(config, webpackStats) - this.emit('mocha:begin') + this.emit(MOCHA_BEGIN_EVENT) try { mocha.run(fails => { - this.emit('mocha:finished', fails) + this.emit(MOCHA_FINISHED_EVENT, fails) resolve(fails) }) } catch (e) { - this.emit('exception', e) + this.emit(EXCEPTION_EVENT, e) resolve(1) } } catch (e) { @@ -137,48 +149,51 @@ export default class TestRunner extends EventEmitter { const uncaughtExceptionListener = err => { // mocha catches uncaughtException only while tests are running, // that's why we register a custom error handler to keep this process alive - this.emit('uncaughtException', err) + this.emit(UNCAUGHT_EXCEPTION_EVENT, err) } const runMocha = () => { try { const mocha = this.prepareMocha(config, stats) // unregister our custom exception handler (see declaration) - process.removeListener('uncaughtException', uncaughtExceptionListener) + process.removeListener( + UNCAUGHT_EXCEPTION_EVENT, + uncaughtExceptionListener + ) // run tests - this.emit('mocha:begin') + this.emit(MOCHA_BEGIN_EVENT) mochaRunner = mocha.run( _.once(failures => { // register custom exception handler to catch all errors that may happen after mocha think tests are done - process.on('uncaughtException', uncaughtExceptionListener) + process.on(UNCAUGHT_EXCEPTION_EVENT, uncaughtExceptionListener) // need to wait until next tick, otherwise mochaRunner = null doesn't work.. process.nextTick(() => { mochaRunner = null if (compilationScheduler != null) { - this.emit('mocha:aborted') + this.emit(MOCHA_ABORTED_EVENT) compilationScheduler() compilationScheduler = null } else { - this.emit('mocha:finished', failures) + this.emit(MOCHA_FINISHED_EVENT, failures) } }) }) ) } catch (err) { - this.emit('exception', err) + this.emit(EXCEPTION_EVENT, err) } } const compiler = createCompiler(config) registerInMemoryCompiler(compiler) // register webpack start callback - compiler.hooks.watchRun.tapAsync('mochapack', (c, cb) => { + compiler.hooks.watchRun.tapAsync(MOCHAPACK_NAME, (c, cb) => { // check if mocha tests are still running, abort them and start compiling if (mochaRunner) { compilationScheduler = () => { - this.emit('webpack:start') + this.emit(WEBPACK_START_EVENT) cb() } @@ -192,7 +207,7 @@ export default class TestRunner extends EventEmitter { runnable.resetTimeout(1) } } else { - this.emit('webpack:start') + this.emit(WEBPACK_START_EVENT) cb() } }) @@ -200,7 +215,7 @@ export default class TestRunner extends EventEmitter { registerReadyCallback( compiler, (err: (Error | string) | null, webpackStats: Stats | null) => { - this.emit('webpack:ready', err, webpackStats) + this.emit(WEBPACK_READY_EVENT, err, webpackStats) if (err) { // wait for fixed tests return @@ -223,7 +238,7 @@ export default class TestRunner extends EventEmitter { typeof watchOptions.poll === 'number' ? watchOptions.poll : undefined // create own file watcher for entry files to detect created or deleted files const watcher = chokidar.watch(this.entries, { - cwd: this.options.cwd, + cwd: this.cwd, // see https://github.com/webpack/watchpack/blob/e5305b53ac3cf2a70d49a772912b115fa77665c2/lib/DirectoryWatcher.js ignoreInitial: true, persistent: true, @@ -243,12 +258,12 @@ export default class TestRunner extends EventEmitter { const matchesGlob = this.entries.some(pattern => minimatch(file, pattern)) // Chokidar gives files not matching pattern sometimes, prevent this if (matchesGlob) { - const filePath = path.join(this.options.cwd, file) + const filePath = path.join(this.cwd, file) if (deleted) { - this.emit('entry:removed', file) + this.emit(ENTRY_REMOVED_EVENT, file) entryConfig.removeFile(filePath) } else { - this.emit('entry:added', file) + this.emit(ENTRY_ADDED_EVENT, file) entryConfig.addFile(filePath) } @@ -266,73 +281,15 @@ export default class TestRunner extends EventEmitter { return new Promise(() => undefined) // never ending story } - async createWebpackConfig() { - const { webpackConfig } = this.options - - const files = await glob(this.entries, { - cwd: this.options.cwd, - absolute: true + private createWebpackConfig = () => + createWebpackConfig({ + cwd: this.cwd, + entries: this.entries, + entryLoaderPath, + entryPath, + includeLoaderPath, + includes: this.includes, + interactive: this.options.mochapack.interactive, + webpackConfig: this.options.webpack.config }) - - const entryConfig = new EntryConfig() - files.forEach(f => entryConfig.addFile(f)) - - const tmpPath = path.join( - this.options.cwd, - '.tmp', - 'mochapack', - Date.now().toString() - ) - const withCustomPath = _.has(webpackConfig, 'output.path') - const outputPath = path.normalize( - _.get(webpackConfig, 'output.path', tmpPath) - ) - const publicPath = withCustomPath - ? _.get(webpackConfig, 'output.publicPath', undefined) - : outputPath + path.sep - - const plugins = [] - - if (this.options.interactive) { - plugins.push(buildProgressPlugin()) - } - - const userLoaders = _.get(webpackConfig, 'module.rules', []) - userLoaders.unshift({ - test: entryPath, - use: [ - { - loader: includeLoaderPath, - options: { - include: this.includes - } - }, - { - loader: entryLoaderPath, - options: { - entryConfig - } - } - ] - }) - - const config = { - ...webpackConfig, - entry: entryPath, - module: { - ...(webpackConfig as any).module, - rules: userLoaders - }, - output: { - ...(webpackConfig as any).output, - path: outputPath, - publicPath - }, - plugins: [...((webpackConfig as any).plugins || []), ...plugins] - } - return { - webpackConfig: config, - entryConfig - } - } } diff --git a/src/runner/configureMocha.ts b/src/runner/configureMocha.ts deleted file mode 100644 index e784d3d..0000000 --- a/src/runner/configureMocha.ts +++ /dev/null @@ -1,90 +0,0 @@ -import Mocha from 'mocha' -import loadReporter from './loadReporter' -import loadUI from './loadUI' -import { MochaWebpackOptions } from '../MochaWebpack' - -export default function configureMocha(options: MochaWebpackOptions) { - // infinite stack traces - Error.stackTraceLimit = Infinity - - const mochaOptions = { - color: !!options.colors, - inlineDiffs: !!options.useInlineDiffs - } - - // init mocha - const mocha = new Mocha(mochaOptions) - - // reporter - const reporter = loadReporter(options.reporter, options.cwd) - mocha.reporter(reporter, options.reporterOptions) - - // slow - mocha.suite.slow(options.slow) - - // timeout - if (options.timeout === 0) { - mocha.enableTimeouts(false) - } else { - mocha.suite.timeout(options.timeout) - } - - // bail - mocha.suite.bail(options.bail) - - // grep - if (options.grep) { - mocha.grep(new RegExp(options.grep)) - } - - // fgrep - if (options.fgrep) { - mocha.grep(options.fgrep) - } - - // invert - if (options.invert) { - mocha.invert() - } - - // check-leaks - if (options.ignoreLeaks === false) { - mocha.checkLeaks() - } - - // full-trace - if (options.fullStackTrace) { - mocha.fullTrace() - } - - // growl - if (options.growl) { - mocha.growl() - } - - // async-only - if (options.asyncOnly) { - mocha.asyncOnly() - } - - // delay - if (options.delay) { - mocha.delay() - } - - // retries - if (options.retries) { - mocha.suite.retries(options.retries) - } - - // forbid-only - if (options.forbidOnly) { - mocha.forbidOnly() - } - - // interface - const ui = loadUI(options.ui, options.cwd) - mocha.ui(ui) - - return mocha -} diff --git a/src/runner/loadReporter.ts b/src/runner/loadReporter.ts deleted file mode 100644 index 11c7c42..0000000 --- a/src/runner/loadReporter.ts +++ /dev/null @@ -1,28 +0,0 @@ -import path from 'path' -import { reporters } from 'mocha' - -export default function loadReporter( - reporter: string | ReporterConstructor, - cwd?: string -) { - // if reporter is already loaded, just return it - if (typeof reporter === 'function') { - return reporter - } - - // try to load built-in reporter like 'spec' - if (typeof reporters[reporter] !== 'undefined') { - return reporters[reporter] - } - - let loadedReporter = null - try { - // try to load reporter from node_modules - loadedReporter = require(reporter) // eslint-disable-line global-require, import/no-dynamic-require - } catch (e) { - // try to load reporter from cwd - // eslint-disable-next-line global-require, import/no-dynamic-require - loadedReporter = require(path.resolve(cwd, reporter)) - } - return loadedReporter -} diff --git a/src/runner/runnerUtils/createWebpackConfig/createWebpackConfig.test.ts b/src/runner/runnerUtils/createWebpackConfig/createWebpackConfig.test.ts new file mode 100644 index 0000000..7f556a9 --- /dev/null +++ b/src/runner/runnerUtils/createWebpackConfig/createWebpackConfig.test.ts @@ -0,0 +1,246 @@ +import { join, resolve, sep } from 'path' +import { expect } from 'chai' +import { merge as _merge } from 'lodash' +import { SinonSandbox, createSandbox } from 'sinon' +import { ProgressPlugin, LoaderOptionsPlugin } from 'webpack' +import createWebpackConfig from '.' +import { CreateWebpackConfigOptions, MochapackWebpackConfigs } from './types' +import * as mochapackPlugins from '../../../webpack/plugin/buildProgressPlugin' +import { MOCHAPACK_NAME } from '../../../util/constants' + +describe('createWebpackConfig', () => { + const fixturesDir = resolve( + __dirname, + '../../../..', + 'test/fixture/createWebpackConfig' + ) + const cwd = process.cwd() + const dummyProgressPlugin: ProgressPlugin = new ProgressPlugin() + let sandbox: SinonSandbox + let configOptions: CreateWebpackConfigOptions + let createdConfig: MochapackWebpackConfigs + let expectedTempPath: string + + beforeEach(async () => { + sandbox = createSandbox() + sandbox.stub(Date, 'now').returns(12345) + sandbox + .stub(mochapackPlugins, 'buildProgressPlugin') + .returns(dummyProgressPlugin) + configOptions = { + cwd, + entries: ['test/fixture/createWebpackConfig/**.js'], + entryLoaderPath: 'path/to/entry/loader', + entryPath: 'path/to/entry', + includeLoaderPath: 'path/to/include/loader', + includes: ['hello.js', 'world.js'], + interactive: false, + webpackConfig: {} + } + expectedTempPath = join(cwd, '.tmp', MOCHAPACK_NAME, '12345') + createdConfig = await createWebpackConfig(configOptions) + }) + + afterEach(() => { + sandbox.restore() + }) + + it('builds the entry config using the provided options', () => { + expect(createdConfig.entryConfig.files).to.eql([ + resolve(fixturesDir, 'fooBar.js'), + resolve(fixturesDir, 'helloWorld.js') + ]) + }) + + context('when an output path does not exist', () => { + it('uses a temporary path as the output path', () => { + expect(createdConfig.webpackConfig.output.path).to.eql(expectedTempPath) + }) + + it('adds a temporary path to the output path with a separator for the public path', () => { + expect(createdConfig.webpackConfig.output.publicPath).to.eql( + expectedTempPath + sep + ) + }) + }) + + context('when an output path exists', () => { + beforeEach(async () => { + configOptions = _merge({}, configOptions, { + webpackConfig: { output: { path: 'existing/path' } } + }) + + createdConfig = await createWebpackConfig(configOptions) + }) + + it('uses the existing output path', () => { + expect(createdConfig.webpackConfig.output.path).to.eql('existing/path') + }) + + context('when a public path is not provided', () => { + it('is set to undefined', () => { + expect(createdConfig.webpackConfig.output.publicPath).to.be.undefined + }) + }) + + context('when a public path is provided', () => { + beforeEach(async () => { + configOptions = _merge({}, configOptions, { + webpackConfig: { + output: { + path: 'existing/path', + publicPath: 'existing/public/path/' + } + } + }) + + createdConfig = await createWebpackConfig(configOptions) + }) + + it('uses the existing public path', () => { + expect(createdConfig.webpackConfig.output.publicPath).to.eql( + 'existing/public/path/' + ) + }) + }) + }) + + context('when no plugins are present in the provided webpack config', () => { + context('when interactive is false', () => { + it('sets the plugins to an empty array', () => { + expect(createdConfig.webpackConfig.plugins).to.eql([]) + }) + }) + + context('when interactive is true', () => { + it('includes the buildProgressPlugin in the plugins array', async () => { + configOptions = _merge({}, configOptions, { + interactive: true + }) + + createdConfig = await createWebpackConfig(configOptions) + expect(createdConfig.webpackConfig.plugins).to.include( + dummyProgressPlugin + ) + }) + }) + }) + + context('when plugins are present in the provided webpack config', () => { + const dummyProvidedPlugin = new LoaderOptionsPlugin({}) + + beforeEach(async () => { + configOptions = _merge({}, configOptions, { + webpackConfig: { + plugins: [dummyProvidedPlugin] + } + }) + + createdConfig = await createWebpackConfig(configOptions) + }) + + context('when interactive is false', () => { + it('sets the plugins to provided plugins', () => { + expect(createdConfig.webpackConfig.plugins).to.eql([ + dummyProvidedPlugin + ]) + }) + }) + + context('when interactive is true', () => { + it('appends the buildProgressPlugin to the provided plugins', async () => { + configOptions = _merge({}, configOptions, { + interactive: true + }) + + createdConfig = await createWebpackConfig(configOptions) + expect(createdConfig.webpackConfig.plugins).to.eql([ + dummyProvidedPlugin, + dummyProgressPlugin + ]) + }) + }) + }) + + context('when no other loader rules are present', () => { + it('sets loader rules to applicable rules for Mochapack', () => { + // Using stringify to avoid mismatch of EntryConfig object + expect(JSON.stringify(createdConfig.webpackConfig.module.rules)).to.eql( + JSON.stringify([ + { + test: 'path/to/entry', + use: [ + { + loader: 'path/to/include/loader', + options: { + include: ['hello.js', 'world.js'] + } + }, + { + loader: 'path/to/entry/loader', + options: { + entryConfig: { + files: [ + resolve(fixturesDir, 'fooBar.js'), + resolve(fixturesDir, 'helloWorld.js') + ] + } + } + } + ] + } + ]) + ) + }) + }) + + context('when other loader rules are present', () => { + it('adds loader rules applicable to Mochapack to the beginning of the array', async () => { + configOptions = _merge({}, configOptions, { + webpackConfig: { + module: { + rules: [ + { + test: 'some/test/rule', + use: [{ loader: 'my/special/loader' }] + } + ] + } + } + }) + createdConfig = await createWebpackConfig(configOptions) + + // Using stringify to avoid mismatch of EntryConfig object + expect(JSON.stringify(createdConfig.webpackConfig.module.rules)).to.eql( + JSON.stringify([ + { + test: 'path/to/entry', + use: [ + { + loader: 'path/to/include/loader', + options: { + include: ['hello.js', 'world.js'] + } + }, + { + loader: 'path/to/entry/loader', + options: { + entryConfig: { + files: [ + resolve(fixturesDir, 'fooBar.js'), + resolve(fixturesDir, 'helloWorld.js') + ] + } + } + } + ] + }, + { + test: 'some/test/rule', + use: [{ loader: 'my/special/loader' }] + } + ]) + ) + }) + }) +}) diff --git a/src/runner/runnerUtils/createWebpackConfig/index.ts b/src/runner/runnerUtils/createWebpackConfig/index.ts new file mode 100644 index 0000000..dfe6c52 --- /dev/null +++ b/src/runner/runnerUtils/createWebpackConfig/index.ts @@ -0,0 +1,134 @@ +import { join, normalize, sep } from 'path' +import { + flattenDeep as _flattenDeep, + get as _get, + has as _has, + merge as _merge +} from 'lodash' +import { Configuration, Plugin, RuleSetRule } from 'webpack' +import { glob } from '../../../util/glob' +import { EntryConfig } from '../../../webpack/loader/entryLoader' +import { buildProgressPlugin } from '../../../webpack/plugin/buildProgressPlugin' +import { + BuildLoaderRulesOptions, + BuildWebpackConfigOptions, + CreateWebpackConfigOptions, + MochapackWebpackConfigs +} from './types' +import { MOCHAPACK_NAME } from '../../../util/constants' + +const buildEntryConfig = async ( + entries: string[], + cwd: string +): Promise => { + const entryConfig = new EntryConfig() + const files = await glob(entries, { + cwd, + absolute: true + }) + + files.forEach(f => entryConfig.addFile(f)) + return entryConfig +} + +const makeTemporaryPath = (cwd: string): string => + join(cwd, '.tmp', MOCHAPACK_NAME, Date.now().toString()) + +const getOutputPath = (webpackConfig: Configuration, tmpPath: string): string => + normalize(_get(webpackConfig, 'output.path', tmpPath)) + +const getPublicPath = ( + webpackConfig: Configuration, + outputPath: string +): string => + _has(webpackConfig, 'output.path') + ? _get(webpackConfig, 'output.publicPath', undefined) + : outputPath + sep + +const buildPluginsArray = ( + webpackConfig: Configuration, + interactive: boolean +): Plugin[] => { + const plugins = webpackConfig.plugins || [] + + if (interactive) { + plugins.push(buildProgressPlugin()) + } + + return plugins +} + +const buildLoaderRulesArray = ( + options: BuildLoaderRulesOptions +): RuleSetRule[] => { + const { + webpackConfig, + entryPath, + includeLoaderPath, + includes, + entryLoaderPath, + entryConfig + } = options + const loaderRules = _get(webpackConfig, 'module.rules', []) as RuleSetRule[] + loaderRules.unshift({ + test: entryPath, + use: [ + { + loader: includeLoaderPath, + options: { + include: includes + } + }, + { + loader: entryLoaderPath, + options: { + entryConfig + } + } + ] + }) + return loaderRules +} + +const buildWebpackConfig = ( + options: BuildWebpackConfigOptions +): Configuration => + _merge({}, options.webpackConfig, { + entry: options.entryPath, + module: { + rules: options.loaderRules + }, + output: { + path: options.outputPath, + publicPath: options.publicPath + }, + plugins: options.plugins + }) + +const createWebpackConfig = async ( + options: CreateWebpackConfigOptions +): Promise => { + const { cwd, entries, interactive, webpackConfig } = options + + const entryConfig = await buildEntryConfig(entries, cwd) + const tmpPath = makeTemporaryPath(cwd) + const outputPath = getOutputPath(webpackConfig, tmpPath) + const publicPath = getPublicPath(webpackConfig, outputPath) + const plugins = buildPluginsArray(webpackConfig, interactive) + const loaderRules = buildLoaderRulesArray({ ...options, entryConfig }) + const mochapackWebpackConfig = buildWebpackConfig({ + ...options, + entryConfig, + loaderRules, + outputPath, + plugins, + publicPath + }) + + return { + webpackConfig: mochapackWebpackConfig, + entryConfig + } +} + +export default createWebpackConfig diff --git a/src/runner/runnerUtils/createWebpackConfig/types.ts b/src/runner/runnerUtils/createWebpackConfig/types.ts new file mode 100644 index 0000000..93abb3c --- /dev/null +++ b/src/runner/runnerUtils/createWebpackConfig/types.ts @@ -0,0 +1,29 @@ +import { Configuration, Plugin, RuleSetRule } from 'webpack' +import { EntryConfig } from '../../../webpack/loader/entryLoader' + +export interface CreateWebpackConfigOptions { + cwd: string + entries: string[] + entryLoaderPath: string + entryPath: string + includeLoaderPath: string + includes: string[] + interactive: boolean + webpackConfig: Configuration +} + +export interface BuildLoaderRulesOptions extends CreateWebpackConfigOptions { + entryConfig: EntryConfig +} + +export interface BuildWebpackConfigOptions extends BuildLoaderRulesOptions { + loaderRules: RuleSetRule[] + outputPath: string + plugins: Plugin[] + publicPath: string +} + +export interface MochapackWebpackConfigs { + webpackConfig: Configuration + entryConfig: EntryConfig +} diff --git a/src/runner/runnerUtils/initMocha/getReporterConstructor.ts b/src/runner/runnerUtils/initMocha/getReporterConstructor.ts new file mode 100644 index 0000000..ba2b2ee --- /dev/null +++ b/src/runner/runnerUtils/initMocha/getReporterConstructor.ts @@ -0,0 +1,34 @@ +import path from 'path' +import { + isFunction as _isFunction, + isString as _isString, + isUndefined as _isUndefined +} from 'lodash' +import { reporters, ReporterConstructor } from 'mocha' + +const getReporterConstructor = ( + reporter: string | ReporterConstructor, + cwd?: string +): ReporterConstructor | null => { + // If reporter is already loaded, just return it + if (_isFunction(reporter)) return reporter as ReporterConstructor + + // Try to load built-in reporter like 'spec' + if (!_isUndefined(reporters[reporter as string])) + return reporters[reporter as string] + + let loadedReporter = null + + try { + // Try to load reporter from node_modules + // eslint-disable-next-line global-require, import/no-dynamic-require + loadedReporter = require(reporter as string) + } catch (e) { + // Try to load reporter from cwd + // eslint-disable-next-line global-require, import/no-dynamic-require + loadedReporter = require(path.resolve(cwd, reporter as string)) + } + return loadedReporter +} + +export default getReporterConstructor diff --git a/src/runner/runnerUtils/initMocha/index.ts b/src/runner/runnerUtils/initMocha/index.ts new file mode 100644 index 0000000..15859cf --- /dev/null +++ b/src/runner/runnerUtils/initMocha/index.ts @@ -0,0 +1,50 @@ +import { cloneDeep as _cloneDeep } from 'lodash' +import Mocha from 'mocha' +import getReporterConstructor from './getReporterConstructor' +import { MochapackMochaOptions } from '../../../cli/argsParser/optionsFromParsedArgs/types' +import loadUI from './loadUI' + +/** + * Uses the options set on the instance of Mocha to set its reporter for + * Mochapack + */ +const setReporterInMochaOptions = (mocha: Mocha, cwd: string) => { + const reporter = getReporterConstructor(mocha.options.reporter, cwd) + mocha.reporter(reporter, mocha.options.reporterOptions) +} + +/** + * Uses the options set on the instance of Mocha to set its UI for Mochapack + */ +const setUiInMochaOptions = (mocha: Mocha, ui: string, cwd: string) => { + mocha.ui(loadUI(ui, cwd)) +} + +/** + * Adds specified files to the instance of Mocha + */ +const addFilesToMochaInstance = (mocha: Mocha, files?: string[]): Mocha => { + let clonedMocha = _cloneDeep(mocha) + if (files) { + files.forEach(file => { + clonedMocha = clonedMocha.addFile(file) + }) + } + return clonedMocha +} + +/** + * Initializes an instance of Mocha on behalf of the user with their provided + * options + */ +const initMocha = (options: MochapackMochaOptions, cwd: string): Mocha => { + let mochaInstance = new Mocha(options.constructor) + mochaInstance = addFilesToMochaInstance(mochaInstance, options.cli.file) + if (options.cli.invert) mochaInstance.invert() + setReporterInMochaOptions(mochaInstance, cwd) + setUiInMochaOptions(mochaInstance, options.constructor.ui, cwd) + + return mochaInstance +} + +export default initMocha diff --git a/src/runner/runnerUtils/initMocha/initMocha.test.ts b/src/runner/runnerUtils/initMocha/initMocha.test.ts new file mode 100644 index 0000000..0ce19c0 --- /dev/null +++ b/src/runner/runnerUtils/initMocha/initMocha.test.ts @@ -0,0 +1,259 @@ +import chai, { expect } from 'chai' +import { SinonSandbox, SinonSpy, createSandbox } from 'sinon' +import sinonChai from 'sinon-chai' +import { merge as _merge, pick as _pick } from 'lodash' +import Mocha from 'mocha' +import { installedMochaMajor } from '../../../../test/installedMochaVersion' +import { MochapackMochaOptions } from '../../../cli/argsParser/optionsFromParsedArgs/types' +import initMocha from '.' + +chai.use(sinonChai) + +describe('initMocha', async () => { + const mochaMajorVersion = await installedMochaMajor + let sandbox: SinonSandbox + let initOptions: MochapackMochaOptions + let defaultOptions: any + let cwd: string + let reporterSpy: SinonSpy + let uiSpy: SinonSpy + let defaultExtensions = ['js'] + const defaultFiles = ['./files'] + const defaultWatchIgnore = ['node_modules', '.git'] + const defaultCliInitOptions = { + extension: defaultExtensions, + files: defaultFiles, + watchIgnore: defaultWatchIgnore + } + + beforeEach(() => { + sandbox = createSandbox() + initOptions = { + cli: defaultCliInitOptions, + constructor: { + ui: 'bdd' + } + } + + if (mochaMajorVersion >= 7) { + defaultExtensions = ['js', 'cjs', 'mjs'] + } + + defaultOptions = { + diff: true, + extension: defaultExtensions, + grep: undefined, + opts: './test/mocha.opts', + package: './package.json', + reporter: 'spec', + reporterOptions: undefined, + slow: 75, + timeout: 2000, + ui: 'bdd' + } + + if (mochaMajorVersion >= 7) { + defaultOptions = _merge({}, defaultOptions, { + global: [], + reporterOption: undefined, + 'watch-ignore': defaultWatchIgnore + }) + } + + cwd = process.cwd() + // @ts-ignore + sandbox.stub(Mocha.prototype, 'isGrowlCapable').returns(true) + reporterSpy = sandbox.spy(Mocha.prototype, 'reporter') + uiSpy = sandbox.spy(Mocha.prototype, 'ui') + }) + + afterEach(() => { + sandbox.restore() + }) + + it('returns an instance of Mocha', () => { + const mocha = initMocha(initOptions, cwd) + expect(mocha).to.be.instanceOf(Mocha) + }) + + const configurationScenarios: { + optionName: string + providedOptions: Partial + expectedMochaOptions: any + }[] = [ + { + optionName: 'color', + providedOptions: { constructor: { useColors: true } }, + expectedMochaOptions: { useColors: true } + }, + { + optionName: 'allowUncaught', + providedOptions: { constructor: { allowUncaught: true } }, + expectedMochaOptions: { allowUncaught: true } + }, + { + optionName: 'asyncOnly', + providedOptions: { constructor: { asyncOnly: true } }, + expectedMochaOptions: { asyncOnly: true } + }, + { + optionName: 'bail', + providedOptions: { constructor: { bail: true } }, + expectedMochaOptions: { bail: true } + }, + { + optionName: 'delay', + providedOptions: { constructor: { delay: true } }, + expectedMochaOptions: { delay: true } + }, + { + optionName: 'enableTimeouts', + providedOptions: { constructor: { enableTimeouts: true } }, + expectedMochaOptions: { enableTimeouts: true } + }, + { + optionName: 'forbidOnly', + providedOptions: { constructor: { forbidOnly: true } }, + expectedMochaOptions: { forbidOnly: true } + }, + { + optionName: 'forbidPending', + providedOptions: { constructor: { forbidPending: true } }, + expectedMochaOptions: { forbidPending: true } + }, + { + optionName: 'fullStackTrace', + providedOptions: { constructor: { fullStackTrace: true } }, + expectedMochaOptions: { fullStackTrace: true } + }, + { + optionName: 'globals', + providedOptions: { constructor: { globals: ['hey'] } }, + expectedMochaOptions: { globals: ['hey'] } + }, + { + optionName: 'grep', + providedOptions: { constructor: { grep: 'hey' } }, + expectedMochaOptions: { grep: new RegExp('hey') } + }, + { + optionName: 'invert', + providedOptions: { + cli: { ...defaultCliInitOptions, invert: true }, + constructor: {} + }, + expectedMochaOptions: { invert: true } + }, + { + optionName: 'growl', + providedOptions: { constructor: { growl: true } }, + expectedMochaOptions: { growl: true } + }, + { + optionName: 'ignoreLeaks', + providedOptions: { constructor: { ignoreLeaks: true } }, + expectedMochaOptions: { ignoreLeaks: true } + }, + { + optionName: 'inlineDiffs', + providedOptions: { constructor: { inlineDiffs: true } }, + expectedMochaOptions: { inlineDiffs: true } + }, + { + optionName: 'noHighlighting', + providedOptions: { constructor: { noHighlighting: true } }, + expectedMochaOptions: { noHighlighting: true } + }, + { + optionName: 'reporter', + providedOptions: { constructor: { reporter: 'min' } }, + expectedMochaOptions: { reporter: 'min' } + }, + { + optionName: 'retries', + providedOptions: { constructor: { retries: 27 } }, + expectedMochaOptions: { retries: 27 } + }, + { + optionName: 'slow', + providedOptions: { constructor: { slow: 7000 } }, + expectedMochaOptions: { slow: 7000 } + }, + { + optionName: 'timeout', + providedOptions: { constructor: { timeout: 7000 } }, + expectedMochaOptions: { timeout: 7000 } + } + ] + + if (mochaMajorVersion < 7) { + configurationScenarios.push({ + optionName: 'reporterOptions', + providedOptions: { + constructor: { reporterOptions: { hello: 'world' } } + }, + expectedMochaOptions: { + reporterOptions: { hello: 'world' } + } + }) + } + + if (mochaMajorVersion >= 7) { + configurationScenarios.push( + { + optionName: 'hideDiff', + providedOptions: { constructor: { hideDiff: true } }, + expectedMochaOptions: { hideDiff: true } + }, + { + optionName: 'reporterOptions', + providedOptions: { + constructor: { reporterOptions: { hello: 'world' } } + }, + expectedMochaOptions: { + reporterOption: { hello: 'world' }, + reporterOptions: { hello: 'world' } + } + } + ) + } + + configurationScenarios.forEach(scenario => { + it(`properly applies ${scenario.optionName}`, () => { + const mocha = initMocha( + _merge({}, initOptions, scenario.providedOptions), + cwd + ) + const expectedOptions = _merge( + {}, + defaultOptions, + scenario.expectedMochaOptions + ) + expect(_pick(mocha.options, Object.keys(expectedOptions))).to.eql( + expectedOptions + ) + }) + }) + + it('properly adds files', () => { + const mocha = initMocha( + _merge({}, initOptions, { cli: { file: ['setup.js'] } }), + cwd + ) + expect(mocha.files).to.eql(['setup.js']) + }) + + it("properly applies the 'reporter' option", () => { + initMocha( + _merge({}, initOptions, { constructor: { reporter: 'min' } }), + cwd + ) + const reporter = Mocha.reporters.Min + expect(reporterSpy).to.have.been.calledWith(reporter, undefined) + }) + + it("properly applies the 'ui' option", () => { + initMocha(_merge({}, initOptions, { constructor: { ui: 'tdd' } }), cwd) + expect(uiSpy).to.have.been.calledWith('tdd') + }) +}) diff --git a/src/runner/loadUI.ts b/src/runner/runnerUtils/initMocha/loadUI.ts similarity index 100% rename from src/runner/loadUI.ts rename to src/runner/runnerUtils/initMocha/loadUI.ts diff --git a/src/runner/testRunnerReporter.ts b/src/runner/testRunnerReporter.ts index c641912..1267d03 100644 --- a/src/runner/testRunnerReporter.ts +++ b/src/runner/testRunnerReporter.ts @@ -2,6 +2,17 @@ import EventEmitter from 'events' import chalk from 'chalk' import { Stats } from 'webpack' import createStatsFormatter from '../webpack/util/createStatsFormatter' +import { + ENTRY_ADDED_EVENT, + ENTRY_REMOVED_EVENT, + EXCEPTION_EVENT, + MOCHA_ABORTED_EVENT, + MOCHA_BEGIN_EVENT, + MOCHA_FINISHED_EVENT, + WEBPACK_READY_EVENT, + WEBPACK_START_EVENT, + UNCAUGHT_EXCEPTION_EVENT +} from '../util/constants' type ReporterOptions = { eventEmitter: EventEmitter @@ -36,15 +47,15 @@ class Reporter { this.removed = [] this.formatStats = createStatsFormatter(cwd) - eventEmitter.on('uncaughtException', this.onUncaughtException) - eventEmitter.on('exception', this.onLoadingException) - eventEmitter.on('webpack:start', this.onWebpackStart) - eventEmitter.on('webpack:ready', this.onWebpackReady) - eventEmitter.on('mocha:begin', this.onMochaStart) - eventEmitter.on('mocha:aborted', this.onMochaAbort) - eventEmitter.on('mocha:finished', this.onMochaReady) - eventEmitter.on('entry:added', this.onEntryAdded) - eventEmitter.on('entry:removed', this.onEntryRemoved) + eventEmitter.on(UNCAUGHT_EXCEPTION_EVENT, this.onUncaughtException) + eventEmitter.on(EXCEPTION_EVENT, this.onLoadingException) + eventEmitter.on(WEBPACK_START_EVENT, this.onWebpackStart) + eventEmitter.on(WEBPACK_READY_EVENT, this.onWebpackReady) + eventEmitter.on(MOCHA_BEGIN_EVENT, this.onMochaStart) + eventEmitter.on(MOCHA_ABORTED_EVENT, this.onMochaAbort) + eventEmitter.on(MOCHA_FINISHED_EVENT, this.onMochaReady) + eventEmitter.on(ENTRY_ADDED_EVENT, this.onEntryAdded) + eventEmitter.on(ENTRY_REMOVED_EVENT, this.onEntryRemoved) } logInfo(...args: Array) { diff --git a/src/util/constants.ts b/src/util/constants.ts new file mode 100644 index 0000000..09973e8 --- /dev/null +++ b/src/util/constants.ts @@ -0,0 +1,10 @@ +export const ENTRY_ADDED_EVENT = 'entry:added' +export const ENTRY_REMOVED_EVENT = 'entry:removed' +export const EXCEPTION_EVENT = 'exception' +export const MOCHAPACK_NAME = 'mochapack' +export const MOCHA_ABORTED_EVENT = 'mocha:aborted' +export const MOCHA_BEGIN_EVENT = 'mocha:begin' +export const MOCHA_FINISHED_EVENT = 'mocha:finished' +export const WEBPACK_READY_EVENT = 'webpack:ready' +export const WEBPACK_START_EVENT = 'webpack:start' +export const UNCAUGHT_EXCEPTION_EVENT = 'uncaughtException' diff --git a/src/webpack/compiler/registerInMemoryCompiler.ts b/src/webpack/compiler/registerInMemoryCompiler.ts index cb4609a..8221eb0 100644 --- a/src/webpack/compiler/registerInMemoryCompiler.ts +++ b/src/webpack/compiler/registerInMemoryCompiler.ts @@ -4,15 +4,20 @@ import MemoryFileSystem from 'memory-fs' import { Compiler, Stats } from 'webpack' import registerRequireHook from '../../util/registerRequireHook' import { ensureAbsolutePath } from '../../util/paths' +import { MOCHAPACK_NAME } from '../../util/constants' -export default function registerInMemoryCompiler(compiler: Compiler) { +type VoidFunction = () => void + +export default function registerInMemoryCompiler( + compiler: Compiler +): VoidFunction { // register memory fs to webpack const memoryFs = new MemoryFileSystem() compiler.outputFileSystem = memoryFs // eslint-disable-line no-param-reassign // build asset map to allow fast checks for file existence const assetMap = new Map() - compiler.hooks.done.tap('mochapack', (stats: Stats) => { + compiler.hooks.done.tap(MOCHAPACK_NAME, (stats: Stats) => { assetMap.clear() if (!stats.hasErrors()) { diff --git a/src/webpack/compiler/registerReadyCallback.ts b/src/webpack/compiler/registerReadyCallback.ts index ce808fc..4a89598 100644 --- a/src/webpack/compiler/registerReadyCallback.ts +++ b/src/webpack/compiler/registerReadyCallback.ts @@ -1,11 +1,12 @@ import { Compiler, Stats } from 'webpack' +import { MOCHAPACK_NAME } from '../../util/constants' export default function registerReadyCallback( compiler: Compiler, cb: (err: (Error | string) | null, stats: Stats | null) => void ) { - compiler.hooks.failed.tap('mochapack', cb) - compiler.hooks.done.tap('mochapack', (stats: Stats) => { + compiler.hooks.failed.tap(MOCHAPACK_NAME, cb) + compiler.hooks.done.tap(MOCHAPACK_NAME, (stats: Stats) => { if (stats.hasErrors()) { const jsonStats = stats.toJson() const [err] = jsonStats.errors diff --git a/src/webpack/plugin/buildProgressPlugin.ts b/src/webpack/plugin/buildProgressPlugin.ts index 5da8589..672f448 100644 --- a/src/webpack/plugin/buildProgressPlugin.ts +++ b/src/webpack/plugin/buildProgressPlugin.ts @@ -2,7 +2,7 @@ import chalk from 'chalk' import ProgressBar from 'progress' import { ProgressPlugin } from 'webpack' -export default function buildProgressPlugin() { +export const buildProgressPlugin = () => { const bar = new ProgressBar( ` [:bar] ${chalk.bold(':percent')} (${chalk.dim(':msg')})`, { diff --git a/test/fixture/createWebpackConfig/fooBar.js b/test/fixture/createWebpackConfig/fooBar.js new file mode 100644 index 0000000..e69de29 diff --git a/test/fixture/createWebpackConfig/helloWorld.js b/test/fixture/createWebpackConfig/helloWorld.js new file mode 100644 index 0000000..e69de29 diff --git a/test/fixture/mochaConfigNoOverlap.js b/test/fixture/mochaConfigNoOverlap.js new file mode 100644 index 0000000..31697d1 --- /dev/null +++ b/test/fixture/mochaConfigNoOverlap.js @@ -0,0 +1,6 @@ +const path = require('path') + +module.exports = { + asyncOnly: true, + require: [path.resolve(__dirname, 'required.js') ], +} \ No newline at end of file diff --git a/test/fixture/mochaConfigWithOverlap.js b/test/fixture/mochaConfigWithOverlap.js new file mode 100644 index 0000000..edb2694 --- /dev/null +++ b/test/fixture/mochaConfigWithOverlap.js @@ -0,0 +1,8 @@ +const path = require('path') + +module.exports = { + asyncOnly: true, + allowUncaught: false, + ignore: ['**doNotTest.js'], + require: [path.resolve(__dirname, 'required.js') ] +} \ No newline at end of file diff --git a/test/fixture/required.js b/test/fixture/required.js new file mode 100644 index 0000000..e69de29 diff --git a/test/fixture/testConfig.json b/test/fixture/testConfig.json new file mode 100644 index 0000000..c8c4105 --- /dev/null +++ b/test/fixture/testConfig.json @@ -0,0 +1,3 @@ +{ + "foo": "bar" +} diff --git a/test/installedMochaVersion.ts b/test/installedMochaVersion.ts new file mode 100644 index 0000000..1b0cf8e --- /dev/null +++ b/test/installedMochaVersion.ts @@ -0,0 +1,9 @@ +const mochaPkgJson = import('mocha/package.json') +const installedMochaVersion = mochaPkgJson.then(pkg => pkg.version) +const installedMochaVersionArray = installedMochaVersion.then(v => + v.split('.').map(n => parseInt(n, 10)) +) + +export const installedMochaMajor = installedMochaVersionArray.then( + arr => arr[0] +) diff --git a/test/integration/cli/code-splitting.test.ts b/test/integration/cli/code-splitting.test.ts index 164dc7c..ede5a4a 100644 --- a/test/integration/cli/code-splitting.test.ts +++ b/test/integration/cli/code-splitting.test.ts @@ -1,5 +1,3 @@ -/* eslint-env node, mocha */ - /* eslint-disable func-names, prefer-arrow-callback */ import { assert } from 'chai' diff --git a/test/integration/cli/config.test.ts b/test/integration/cli/config.test.ts index 1b0ca0a..df08fc3 100644 --- a/test/integration/cli/config.test.ts +++ b/test/integration/cli/config.test.ts @@ -1,5 +1,3 @@ -/* eslint-env node, mocha */ - /* eslint-disable func-names, prefer-arrow-callback */ import { assert } from 'chai' diff --git a/test/integration/cli/custom-output-path.test.ts b/test/integration/cli/custom-output-path.test.ts index 76562cf..7d0f608 100644 --- a/test/integration/cli/custom-output-path.test.ts +++ b/test/integration/cli/custom-output-path.test.ts @@ -1,5 +1,3 @@ -/* eslint-env node, mocha */ - /* eslint-disable func-names, prefer-arrow-callback, max-len */ import { assert } from 'chai' import path from 'path' diff --git a/test/integration/cli/entry.test.ts b/test/integration/cli/entry.test.ts index 938ec4c..fea6118 100644 --- a/test/integration/cli/entry.test.ts +++ b/test/integration/cli/entry.test.ts @@ -1,5 +1,3 @@ -/* eslint-env node, mocha */ - /* eslint-disable func-names, prefer-arrow-callback, max-len */ import { assert } from 'chai' diff --git a/test/integration/cli/forbidOnly.test.ts b/test/integration/cli/forbidOnly.test.ts index 6130fbf..2dea658 100644 --- a/test/integration/cli/forbidOnly.test.ts +++ b/test/integration/cli/forbidOnly.test.ts @@ -1,5 +1,3 @@ -/* eslint-env node, mocha */ - /* eslint-disable func-names, prefer-arrow-callback */ import { assert } from 'chai' diff --git a/test/integration/cli/include.test.ts b/test/integration/cli/include.test.ts index f6e5c70..05ba767 100644 --- a/test/integration/cli/include.test.ts +++ b/test/integration/cli/include.test.ts @@ -1,5 +1,3 @@ -/* eslint-env node, mocha */ - /* eslint-disable func-names, prefer-arrow-callback */ import path from 'path' diff --git a/test/integration/cli/interactive.test.ts b/test/integration/cli/interactive.test.ts index 59e5f60..98b54ac 100644 --- a/test/integration/cli/interactive.test.ts +++ b/test/integration/cli/interactive.test.ts @@ -1,5 +1,3 @@ -/* eslint-env node, mocha */ - /* eslint-disable func-names, prefer-arrow-callback */ import { assert } from 'chai' diff --git a/test/integration/cli/quiet.test.ts b/test/integration/cli/quiet.test.ts index c5d6224..d3af5dc 100644 --- a/test/integration/cli/quiet.test.ts +++ b/test/integration/cli/quiet.test.ts @@ -1,5 +1,3 @@ -/* eslint-env node, mocha */ - /* eslint-disable func-names, prefer-arrow-callback */ import { assert } from 'chai' diff --git a/test/integration/cli/reporter.test.ts b/test/integration/cli/reporter.test.ts index 05e9268..a1f55bf 100644 --- a/test/integration/cli/reporter.test.ts +++ b/test/integration/cli/reporter.test.ts @@ -1,5 +1,3 @@ -/* eslint-env node, mocha */ - /* eslint-disable func-names, prefer-arrow-callback */ import { assert } from 'chai' diff --git a/test/integration/cli/ui.test.ts b/test/integration/cli/ui.test.ts index 5de2c16..a7e1ba6 100644 --- a/test/integration/cli/ui.test.ts +++ b/test/integration/cli/ui.test.ts @@ -1,5 +1,3 @@ -/* eslint-env node, mocha */ - /* eslint-disable func-names, prefer-arrow-callback */ import { assert } from 'chai' diff --git a/test/integration/cli/version.test.ts b/test/integration/cli/version.test.ts index b143dac..d572038 100644 --- a/test/integration/cli/version.test.ts +++ b/test/integration/cli/version.test.ts @@ -1,5 +1,3 @@ -/* eslint-env node, mocha */ - /* eslint-disable func-names, prefer-arrow-callback */ import { assert } from 'chai' diff --git a/test/integration/cli/watch.test.ts b/test/integration/cli/watch.test.ts index 275a8af..4991edc 100644 --- a/test/integration/cli/watch.test.ts +++ b/test/integration/cli/watch.test.ts @@ -1,5 +1,3 @@ -/* eslint-env node, mocha */ - /* eslint-disable func-names, max-len */ import { assert } from 'chai' @@ -7,6 +5,7 @@ import path from 'path' import { spawn } from 'child_process' import del from 'del' import fs from 'fs-extra' +import { MOCHAPACK_NAME } from '../../../src/util/constants' const fixtureDir = path.join(process.cwd(), '.tmp/fixture') @@ -128,9 +127,9 @@ const waitFor = (condition, timeoutInMs) => setTimeout(run, timeoutDelay()) }) -const spawnMochaWebpack = (...args) => { +const spawnMochapack = (...args) => { let data = '' - const binPath = path.relative(process.cwd(), path.join('bin', 'mochapack')) + const binPath = path.relative(process.cwd(), path.join('bin', MOCHAPACK_NAME)) const child = spawn('node', [binPath, '--mode', 'development', ...args]) const receiveData = d => { @@ -171,7 +170,7 @@ xdescribe('cli --watch', function() { const testFile = 'test1.js' const testId = Date.now() createSyntaxErrorTest(testFile, testId) - const mw = spawnMochaWebpack('--watch', this.entryGlob) + const mw = spawnMochapack('--watch', this.entryGlob) return Promise.resolve() // wait until the output matches our condition .then(() => @@ -216,7 +215,7 @@ xdescribe('cli --watch', function() { const testFile = 'test1.js' const testId = Date.now() createErrorFile(testFile, testId) - const mw = spawnMochaWebpack('--watch', this.entryGlob) + const mw = spawnMochapack('--watch', this.entryGlob) return Promise.resolve() // wait until the output matches our condition .then(() => @@ -260,7 +259,7 @@ xdescribe('cli --watch', function() { const testFile = 'test1.js' const testId = Date.now() createUncaughtErrorTest(testFile, testId) - const mw = spawnMochaWebpack('--watch', this.entryGlob) + const mw = spawnMochapack('--watch', this.entryGlob) return Promise.resolve() // wait until the output matches our condition .then(() => @@ -307,7 +306,7 @@ xdescribe('cli --watch', function() { const testId = Date.now() createTest(testFile, testId, true) - const mw = spawnMochaWebpack('--watch', this.entryGlob) + const mw = spawnMochapack('--watch', this.entryGlob) return Promise.resolve() // wait until the output matches our condition .then(() => @@ -332,7 +331,7 @@ xdescribe('cli --watch', function() { const testFile = 'test1.js' const testId = Date.now() createTest(testFile, testId, true) - const mw = spawnMochaWebpack('--watch', this.entryGlob) + const mw = spawnMochapack('--watch', this.entryGlob) return Promise.resolve() // wait until the output matches our condition .then(() => @@ -381,7 +380,7 @@ xdescribe('cli --watch', function() { const testId2 = testId1 + 2 createTest(testFile1, testId1, true) createTest(testFile2, testId2, true) - const mw = spawnMochaWebpack('--watch', this.entryGlob) + const mw = spawnMochapack('--watch', this.entryGlob) return Promise.resolve() // wait until the output matches our condition .then(() => waitFor(() => assert.include(mw.log, '2 passing'), 5000)) // output matched our condition @@ -428,7 +427,7 @@ xdescribe('cli --watch', function() { const testId = Date.now() const updatedTestId = testId + 100 createLongRunningTest(testFile, testId) - const mw = spawnMochaWebpack('--watch', this.entryGlob) + const mw = spawnMochapack('--watch', this.entryGlob) return Promise.resolve() // wait until the first async test start .then(() => @@ -473,7 +472,7 @@ xdescribe('cli --watch', function() { const testId = Date.now() const updatedTestId = testId + 100 createNeverEndingTest(testFile, testId) - const mw = spawnMochaWebpack('--timeout', 0, '--watch', this.entryGlob) + const mw = spawnMochapack('--timeout', 0, '--watch', this.entryGlob) return Promise.resolve() // wait until the first async test start .then(() => @@ -515,7 +514,7 @@ xdescribe('cli --watch', function() { const testFile2 = 'test2.js' const testId2 = testId1 + 2 createTest(testFile1, testId1, true) - const mw = spawnMochaWebpack('--watch', this.entryGlob) + const mw = spawnMochapack('--watch', this.entryGlob) return Promise.resolve() // wait until the output matches our condition .then(() => @@ -562,7 +561,7 @@ xdescribe('cli --watch', function() { const testFile3 = 'test3.js' const testId3 = testId2 + 3 createTest(testFile1, testId1, true) - const mw = spawnMochaWebpack('--watch', this.entryGlob) + const mw = spawnMochapack('--watch', this.entryGlob) return Promise.resolve() // wait until the output matches our condition .then(() => waitFor(() => assert.include(mw.log, '1 passing'), 5000)) // output matched our condition @@ -607,7 +606,7 @@ xdescribe('cli --watch', function() { const testId2 = Date.now() + 2 createTest(testFile1, testId1, true) createTest(testFile2, testId2, true) - const mw = spawnMochaWebpack('--watch', this.entryGlob) + const mw = spawnMochapack('--watch', this.entryGlob) return Promise.resolve() // wait until the output matches our condition .then(() => waitFor(() => assert.include(mw.log, '2 passing'), 5000)) // output matched our condition diff --git a/test/integration/cli/webworker.test.ts b/test/integration/cli/webworker.test.ts index f46f47c..ead6bd7 100644 --- a/test/integration/cli/webworker.test.ts +++ b/test/integration/cli/webworker.test.ts @@ -1,5 +1,3 @@ -/* eslint-env node, mocha */ - /* eslint-disable func-names, prefer-arrow-callback */ import { assert } from 'chai' import path from 'path' diff --git a/test/integration/statsFormatter/statsFormatter.test.ts b/test/integration/statsFormatter/statsFormatter.test.ts index 80cc6e9..7d42bd2 100644 --- a/test/integration/statsFormatter/statsFormatter.test.ts +++ b/test/integration/statsFormatter/statsFormatter.test.ts @@ -1,5 +1,3 @@ -/* eslint-env node, mocha */ - /* eslint-disable func-names, prefer-arrow-callback */ import fs from 'fs-extra' import path from 'path' diff --git a/test/unit/MochaWebpack.test.ts b/test/unit/MochaWebpack.test.ts index ae9750a..ff4a210 100644 --- a/test/unit/MochaWebpack.test.ts +++ b/test/unit/MochaWebpack.test.ts @@ -1,59 +1,48 @@ -/* eslint-env node, mocha */ - /* eslint-disable func-names, prefer-arrow-callback, max-len */ import { assert } from 'chai' -import MochaWebpack from '../../src/MochaWebpack' - -describe('MochaWebpack', function() { - it('should create a instance of MochaWebpack', function() { - assert.doesNotThrow(() => new MochaWebpack()) - const mochaWebpack = new MochaWebpack() +import Mochapack from '../../src/Mochapack' +import { MochapackOptions } from '../../src/cli/argsParser/optionsFromParsedArgs/types' + +describe('Mochapack', function() { + const basicOptions: MochapackOptions = { + mocha: { + cli: { + extension: [], + files: [], + watchIgnore: [] + }, + constructor: {} + }, + webpack: { + config: {} + }, + mochapack: { + interactive: true, + clearTerminal: false + } + } + it('should create a instance of Mochapack', function() { + assert.doesNotThrow(() => new Mochapack(basicOptions)) + const mochaWebpack = new Mochapack(basicOptions) assert.isNotNull(mochaWebpack) }) - it('has some default options', function() { - const mochaWebpack = new MochaWebpack() - assert.isObject(mochaWebpack.options) - - const expected = { - cwd: process.cwd(), - webpackConfig: {}, - bail: false, - reporter: 'spec', - reporterOptions: {}, - ui: 'bdd', - invert: false, - ignoreLeaks: true, - fullStackTrace: false, - useInlineDiffs: false, - timeout: 2000, - slow: 75, - asyncOnly: false, - delay: false, - interactive: !!process.stdout.isTTY, - clearTerminal: false, - quiet: false, - forbidOnly: false - } - assert.deepEqual(mochaWebpack.options, expected) - }) - it('has a list of entries', function() { - const mochaWebpack = new MochaWebpack() + const mochaWebpack = new Mochapack(basicOptions) assert.isArray(mochaWebpack.entries) assert.lengthOf(mochaWebpack.entries, 0) }) it('has a list of includes', function() { - const mochaWebpack = new MochaWebpack() + const mochaWebpack = new Mochapack(basicOptions) assert.isArray(mochaWebpack.includes) assert.lengthOf(mochaWebpack.includes, 0) }) context('methods', function() { beforeEach(function() { - this.mochaWebpack = new MochaWebpack() + this.mochaWebpack = new Mochapack(basicOptions) }) it('addEntry()', function() { @@ -75,49 +64,7 @@ describe('MochaWebpack', function() { ) }) - it('addInclude()', function() { - const oldIncludes = this.mochaWebpack.includes - const entry = './test.js' - - const returnValue = this.mochaWebpack.addInclude(entry) - - assert.include(this.mochaWebpack.includes, entry, 'entry should be added') - assert.notStrictEqual( - this.mochaWebpack.includes, - oldIncludes, - 'addInclude() should not mutate' - ) - assert.strictEqual( - returnValue, - this.mochaWebpack, - 'api should be chainable' - ) - }) - - it('cwd()', function() { - const oldOptions = this.mochaWebpack.options - const cwd = __dirname - - const returnValue = this.mochaWebpack.cwd(cwd) - - assert.propertyVal( - this.mochaWebpack.options, - 'cwd', - cwd, - 'cwd should be changed' - ) - assert.notStrictEqual( - this.mochaWebpack.options, - oldOptions, - 'cwd() should not mutate' - ) - assert.strictEqual( - returnValue, - this.mochaWebpack, - 'api should be chainable' - ) - }) - + /* it('webpackConfig()', function() { const oldOptions = this.mochaWebpack.options const webpackConfig = { @@ -144,87 +91,6 @@ describe('MochaWebpack', function() { ) }) - it('bail()', function() { - const oldOptions = this.mochaWebpack.options - const bail = true - - const returnValue = this.mochaWebpack.bail(bail) - - assert.propertyVal( - this.mochaWebpack.options, - 'bail', - bail, - 'bail should be changed' - ) - assert.notStrictEqual( - this.mochaWebpack.options, - oldOptions, - 'bail() should not mutate' - ) - assert.strictEqual( - returnValue, - this.mochaWebpack, - 'api should be chainable' - ) - }) - - it('reporter()', function() { - const oldOptions = this.mochaWebpack.options - const reporter = 'test' - const reporterOptions = { - foo: 'bar' - } - - const returnValue = this.mochaWebpack.reporter(reporter, reporterOptions) - - assert.propertyVal( - this.mochaWebpack.options, - 'reporter', - reporter, - 'reporter should be changed' - ) - assert.propertyVal( - this.mochaWebpack.options, - 'reporterOptions', - reporterOptions, - 'reporterOptions should be changed' - ) - assert.notStrictEqual( - this.mochaWebpack.options, - oldOptions, - 'reporter() should not mutate' - ) - assert.strictEqual( - returnValue, - this.mochaWebpack, - 'api should be chainable' - ) - }) - - it('ui()', function() { - const oldOptions = this.mochaWebpack.options - const ui = 'tdd' - - const returnValue = this.mochaWebpack.ui(ui) - - assert.propertyVal( - this.mochaWebpack.options, - 'ui', - ui, - 'ui should be changed' - ) - assert.notStrictEqual( - this.mochaWebpack.options, - oldOptions, - 'reporter() should not mutate' - ) - assert.strictEqual( - returnValue, - this.mochaWebpack, - 'api should be chainable' - ) - }) - it('fgrep()', function() { const oldOptions = this.mochaWebpack.options const fgrep = 'fgrep' @@ -272,341 +138,6 @@ describe('MochaWebpack', function() { 'api should be chainable' ) }) - - it('invert()', function() { - const oldOptions = this.mochaWebpack.options - - const returnValue = this.mochaWebpack.invert() - - assert.propertyVal( - this.mochaWebpack.options, - 'invert', - true, - 'invert should be changed' - ) - assert.notStrictEqual( - this.mochaWebpack.options, - oldOptions, - 'invert() should not mutate' - ) - assert.strictEqual( - returnValue, - this.mochaWebpack, - 'api should be chainable' - ) - }) - - it('ignoreLeaks()', function() { - const oldOptions = this.mochaWebpack.options - const ignoreLeaks = false - - const returnValue = this.mochaWebpack.ignoreLeaks(ignoreLeaks) - - assert.propertyVal( - this.mochaWebpack.options, - 'ignoreLeaks', - ignoreLeaks, - 'ignoreLeaks should be changed' - ) - assert.notStrictEqual( - this.mochaWebpack.options, - oldOptions, - 'ignoreLeaks() should not mutate' - ) - assert.strictEqual( - returnValue, - this.mochaWebpack, - 'api should be chainable' - ) - }) - - it('fullStackTrace()', function() { - const oldOptions = this.mochaWebpack.options - const fullStackTrace = true - - const returnValue = this.mochaWebpack.fullStackTrace(fullStackTrace) - - assert.propertyVal( - this.mochaWebpack.options, - 'fullStackTrace', - fullStackTrace, - 'fullStackTrace should be changed' - ) - assert.notStrictEqual( - this.mochaWebpack.options, - oldOptions, - 'fullStackTrace() should not mutate' - ) - assert.strictEqual( - returnValue, - this.mochaWebpack, - 'api should be chainable' - ) - }) - - it('useColors()', function() { - const oldOptions = this.mochaWebpack.options - const colors = false - - const returnValue = this.mochaWebpack.useColors(colors) - - assert.propertyVal( - this.mochaWebpack.options, - 'colors', - colors, - 'colors should be changed' - ) - assert.notStrictEqual( - this.mochaWebpack.options, - oldOptions, - 'useColors() should not mutate' - ) - assert.strictEqual( - returnValue, - this.mochaWebpack, - 'api should be chainable' - ) - }) - - it('useInlineDiffs()', function() { - const oldOptions = this.mochaWebpack.options - const useInlineDiffs = true - - const returnValue = this.mochaWebpack.useInlineDiffs(useInlineDiffs) - - assert.propertyVal( - this.mochaWebpack.options, - 'useInlineDiffs', - useInlineDiffs, - 'useInlineDiffs should be changed' - ) - assert.notStrictEqual( - this.mochaWebpack.options, - oldOptions, - 'useInlineDiffs() should not mutate' - ) - assert.strictEqual( - returnValue, - this.mochaWebpack, - 'api should be chainable' - ) - }) - - it('timeout()', function() { - const oldOptions = this.mochaWebpack.options - const timeout = 150 - - const returnValue = this.mochaWebpack.timeout(timeout) - - assert.propertyVal( - this.mochaWebpack.options, - 'timeout', - timeout, - 'timeout should be changed' - ) - assert.notStrictEqual( - this.mochaWebpack.options, - oldOptions, - 'timeout() should not mutate' - ) - assert.strictEqual( - returnValue, - this.mochaWebpack, - 'api should be chainable' - ) - }) - - it('retries()', function() { - const oldOptions = this.mochaWebpack.options - const retries = 150 - - const returnValue = this.mochaWebpack.retries(retries) - - assert.propertyVal( - this.mochaWebpack.options, - 'retries', - retries, - 'retries should be changed' - ) - assert.notStrictEqual( - this.mochaWebpack.options, - oldOptions, - 'retries() should not mutate' - ) - assert.strictEqual( - returnValue, - this.mochaWebpack, - 'api should be chainable' - ) - }) - - it('slow()', function() { - const oldOptions = this.mochaWebpack.options - const slow = 150 - - const returnValue = this.mochaWebpack.slow(slow) - - assert.propertyVal( - this.mochaWebpack.options, - 'slow', - slow, - 'slow should be changed' - ) - assert.notStrictEqual( - this.mochaWebpack.options, - oldOptions, - 'slow() should not mutate' - ) - assert.strictEqual( - returnValue, - this.mochaWebpack, - 'api should be chainable' - ) - }) - - it('asyncOnly()', function() { - const oldOptions = this.mochaWebpack.options - - const returnValue = this.mochaWebpack.asyncOnly() - - assert.propertyVal( - this.mochaWebpack.options, - 'asyncOnly', - true, - 'asyncOnly should be changed' - ) - assert.notStrictEqual( - this.mochaWebpack.options, - oldOptions, - 'asyncOnly() should not mutate' - ) - assert.strictEqual( - returnValue, - this.mochaWebpack, - 'api should be chainable' - ) - }) - - it('delay()', function() { - const oldOptions = this.mochaWebpack.options - - const returnValue = this.mochaWebpack.delay() - - assert.propertyVal( - this.mochaWebpack.options, - 'delay', - true, - 'delay should be changed' - ) - assert.notStrictEqual( - this.mochaWebpack.options, - oldOptions, - 'delay() should not mutate' - ) - assert.strictEqual( - returnValue, - this.mochaWebpack, - 'api should be chainable' - ) - }) - - it('interactive()', function() { - const oldOptions = this.mochaWebpack.options - const oldValue = oldOptions.interactive - const newValue = !oldValue - - const returnValue = this.mochaWebpack.interactive(newValue) - - assert.propertyVal( - this.mochaWebpack.options, - 'interactive', - newValue, - 'interactive should be changed' - ) - assert.notStrictEqual( - this.mochaWebpack.options, - oldOptions, - 'interactive() should not mutate' - ) - assert.strictEqual( - returnValue, - this.mochaWebpack, - 'api should be chainable' - ) - }) - - it('clearTerminal()', function() { - const oldOptions = this.mochaWebpack.options - const clearTerminal = false - - const returnValue = this.mochaWebpack.clearTerminal(clearTerminal) - - assert.propertyVal( - this.mochaWebpack.options, - 'clearTerminal', - clearTerminal, - 'clearTerminal should be changed' - ) - assert.notStrictEqual( - this.mochaWebpack.options, - oldOptions, - 'clearTerminal() should not mutate' - ) - assert.strictEqual( - returnValue, - this.mochaWebpack, - 'api should be chainable' - ) - }) - - it('growl()', function() { - const oldOptions = this.mochaWebpack.options - const oldValue = oldOptions.growl - assert.isNotOk(oldValue, 'growl should be falsy') - - const returnValue = this.mochaWebpack.growl() - - assert.propertyVal( - this.mochaWebpack.options, - 'growl', - true, - 'growl should be changed to true' - ) - assert.notStrictEqual( - this.mochaWebpack.options, - oldOptions, - 'growl() should not mutate' - ) - assert.strictEqual( - returnValue, - this.mochaWebpack, - 'api should be chainable' - ) - }) - - it('forbidOnly()', function() { - const oldOptions = this.mochaWebpack.options - const oldValue = oldOptions.forbidOnly - assert.isNotOk(oldValue, 'forbidOnly should be falsy') - - const returnValue = this.mochaWebpack.forbidOnly() - - assert.propertyVal( - this.mochaWebpack.options, - 'forbidOnly', - true, - 'forbidOnly should be changed to true' - ) - assert.notStrictEqual( - this.mochaWebpack.options, - oldOptions, - 'forbidOnly() should not mutate' - ) - assert.strictEqual( - returnValue, - this.mochaWebpack, - 'api should be chainable' - ) - }) + */ }) }) diff --git a/test/unit/cli/fixture/config/optsTestCases/default/expected.json b/test/unit/cli/fixture/config/optsTestCases/default/expected.json index 70b792b..329c7f7 100644 --- a/test/unit/cli/fixture/config/optsTestCases/default/expected.json +++ b/test/unit/cli/fixture/config/optsTestCases/default/expected.json @@ -1,6 +1,21 @@ { - "colors": true, - "webpackConfig": "webpack.config-test.js", - "glob": "*.test.js", - "files": ["test/**/.js"] + "mocha": { + "color": true, + "diff": true, + "extension": ["js", "cjs", "mjs"], + "files": ["test/**/.js"], + "reporter": "spec", + "slow": 75, + "timeout": 2000, + "ui": "bdd", + "watch-ignore": ["node_modules", ".git"] + }, + "mochapack": { + "clear-terminal": false, + "glob": "*.test.js", + "interactive": true + }, + "webpack": { + "webpack-config": "webpack.config-test.js" + } } diff --git a/test/unit/cli/fixture/config/optsTestCases/quoted-double/expected.json b/test/unit/cli/fixture/config/optsTestCases/quoted-double/expected.json index 70b792b..329c7f7 100644 --- a/test/unit/cli/fixture/config/optsTestCases/quoted-double/expected.json +++ b/test/unit/cli/fixture/config/optsTestCases/quoted-double/expected.json @@ -1,6 +1,21 @@ { - "colors": true, - "webpackConfig": "webpack.config-test.js", - "glob": "*.test.js", - "files": ["test/**/.js"] + "mocha": { + "color": true, + "diff": true, + "extension": ["js", "cjs", "mjs"], + "files": ["test/**/.js"], + "reporter": "spec", + "slow": 75, + "timeout": 2000, + "ui": "bdd", + "watch-ignore": ["node_modules", ".git"] + }, + "mochapack": { + "clear-terminal": false, + "glob": "*.test.js", + "interactive": true + }, + "webpack": { + "webpack-config": "webpack.config-test.js" + } } diff --git a/test/unit/cli/fixture/config/optsTestCases/quoted-single/expected.json b/test/unit/cli/fixture/config/optsTestCases/quoted-single/expected.json index 70b792b..329c7f7 100644 --- a/test/unit/cli/fixture/config/optsTestCases/quoted-single/expected.json +++ b/test/unit/cli/fixture/config/optsTestCases/quoted-single/expected.json @@ -1,6 +1,21 @@ { - "colors": true, - "webpackConfig": "webpack.config-test.js", - "glob": "*.test.js", - "files": ["test/**/.js"] + "mocha": { + "color": true, + "diff": true, + "extension": ["js", "cjs", "mjs"], + "files": ["test/**/.js"], + "reporter": "spec", + "slow": 75, + "timeout": 2000, + "ui": "bdd", + "watch-ignore": ["node_modules", ".git"] + }, + "mochapack": { + "clear-terminal": false, + "glob": "*.test.js", + "interactive": true + }, + "webpack": { + "webpack-config": "webpack.config-test.js" + } } diff --git a/test/unit/cli/parseArgv.test.ts b/test/unit/cli/parseArgv.test.ts deleted file mode 100644 index c738ee8..0000000 --- a/test/unit/cli/parseArgv.test.ts +++ /dev/null @@ -1,976 +0,0 @@ -/* eslint-env node, mocha */ - -/* eslint-disable func-names, prefer-arrow-callback */ - -import { assert } from 'chai' -import parseArgv from '../../../src/cli/parseArgv' - -describe('parseArgv', function() { - beforeEach(function() { - this.parseArgv = parseArgv - this.argv = ['src'] - }) - - context('duplicated arguments', function() { - it('should throw for non arrays', function() { - // given - const argv = [ - '--webpack-config', - 'webpack-config.js', - '--webpack-config', - 'webpack-config2.js' - ] - - // when - const fn = () => { - this.parseArgv(argv) - } - - // then - assert.throws(fn, /Duplicating arguments for /) - }) - - it('should not throw for arrays', function() { - // given - const argv = ['--require', 'test', '--require', 'test2'] - - // when - const fn = () => { - this.parseArgv(argv) - } - - // then - assert.doesNotThrow(fn) - }) - }) - - context('ignore default options', function() { - it('ignore default options when ignore=true', function() { - assert.deepEqual(this.parseArgv([], true), {}) - }) - - it('dont ignore default options when ignore=false', function() { - assert.notDeepEqual(this.parseArgv([], false), {}) - }) - - context('files must be parsed correctly', function() { - it('options without values & file when ignore=false', function() { - const argv = ['--recursive', 'test/bin/fixture'] - - const parsed = this.parseArgv(argv, false) - - assert.property(parsed, 'files') - assert.deepEqual(parsed.files, ['test/bin/fixture']) - }) - - it('options without values & file when ignore=true', function() { - const files = ['--recursive', 'test/bin/fixture'] - assert.deepEqual(this.parseArgv(files, true), { - recursive: true, - files: ['test/bin/fixture'] - }) - }) - - it('options with values when ignore=true', function() { - const argv = ['--webpack-config', 'webpack-config.js'] - - assert.deepEqual(this.parseArgv(argv, true), { - webpackConfig: 'webpack-config.js' - }) - }) - - it('options with values & file when ignore=true', function() { - const argv = [ - '--webpack-config', - 'webpack-config.js', - 'test/bin/fixture' - ] - - assert.deepEqual(this.parseArgv(argv, true), { - webpackConfig: 'webpack-config.js', - files: ['test/bin/fixture'] - }) - }) - }) - }) - - context('non-option as files', function() { - it('uses "./test" as default', function() { - // given - const argv = [] - - // when - const parsedArgv = this.parseArgv(argv) - - // then - assert.property(parsedArgv, 'files') - assert.deepEqual(parsedArgv.files, ['./test']) - }) - - it('parses non-options as files', function() { - // given - const argv = ['./test'] - - // when - const parsedArgv = this.parseArgv(argv) - - // then - assert.property(parsedArgv, 'files') - assert.deepEqual(parsedArgv.files, argv) - }) - - it('parses non-options as files (multiple)', function() { - // given - const argv = ['./test', './test2'] - - // when - const parsedArgv = this.parseArgv(argv) - - // then - assert.property(parsedArgv, 'files') - assert.deepEqual(parsedArgv.files, argv) - }) - }) - - context('options', function() { - context('async-only', function() { - it('uses false as default value', function() { - // given - const { argv } = this - - // when - const parsedArgv = this.parseArgv(argv) - - // then - assert.propertyVal(parsedArgv, 'asyncOnly', false) - }) - - for (const parameter of ['--async-only', '--A', '-A']) { - it(`'parses ${parameter}'`, function() { - // given - const argv = this.argv.concat([parameter]) - - // when - const parsedArgv = this.parseArgv(argv) - - // then - assert.propertyVal(parsedArgv, 'asyncOnly', true) - }) - } - }) - - context('colors', function() { - it('uses undefined as default value', function() { - // given - const { argv } = this - - // when - const parsedArgv = this.parseArgv(argv) - - // then - assert.notProperty(parsedArgv, 'colors') - }) - - for (const parameter of ['--colors', '--c', '-c']) { - it(`parses ${parameter}`, function() { - // given - const argv = this.argv.concat([parameter]) - - // when - const parsedArgv = this.parseArgv(argv) - - // then - assert.propertyVal(parsedArgv, 'colors', true) - }) - } - - for (const parameter of [ - '--no-colors', - '--colors=false', - '--no-c', - '--c=false' - ]) { - it(`parses ${parameter}`, function() { - // given - const argv = this.argv.concat([parameter]) - - // when - const parsedArgv = this.parseArgv(argv) - - // then - assert.propertyVal(parsedArgv, 'colors', false) - }) - } - }) - - context('growl', function() { - it('uses false as default value', function() { - // given - const { argv } = this - - // when - const parsedArgv = this.parseArgv(argv) - - // then - assert.propertyVal(parsedArgv, 'growl', false) - }) - - for (const parameter of ['--growl', '--G', '-G']) { - it(`parses ${parameter}`, function() { - // given - const argv = this.argv.concat([parameter]) - - // when - const parsedArgv = this.parseArgv(argv) - - // then - assert.propertyVal(parsedArgv, 'growl', true) - }) - } - }) - - context('recursive', function() { - it('uses false as default value', function() { - // given - const { argv } = this - - // when - const parsedArgv = this.parseArgv(argv) - - // then - assert.propertyVal(parsedArgv, 'recursive', false) - }) - - for (const parameter of ['--recursive']) { - it(`parses ${parameter}`, function() { - // given - const argv = this.argv.concat([parameter]) - - // when - const parsedArgv = this.parseArgv(argv) - - // then - assert.propertyVal(parsedArgv, 'recursive', true) - }) - } - }) - - context('reporter-options', function() { - it('uses {} as default value', function() { - // given - const { argv } = this - - // when - const parsedArgv = this.parseArgv(argv) - - // then - assert.property(parsedArgv, 'reporterOptions') - assert.deepEqual(parsedArgv.reporterOptions, {}) - }) - - const parameters = [ - { - given: ['--reporter-options', 'foo=bar,quux'], - expected: { foo: 'bar', quux: true } - }, - { - given: ['--reporter-options', 'foo=bar,quux,bar=foo'], - expected: { foo: 'bar', quux: true, bar: 'foo' } - }, - { - given: ['--reporter-options', 'foo=bar,quux,bar=foo'], - expected: { foo: 'bar', quux: true, bar: 'foo' } - }, - { given: ['--O', 'foo=bar'], expected: { foo: 'bar' } }, - { given: ['-O', 'foo=bar'], expected: { foo: 'bar' } } - ] - - for (const parameter of parameters) { - it(`parses ${parameter.given.join(' ')}`, function() { - // given - const argv = this.argv.concat(parameter.given) - - // when - const parsedArgv = this.parseArgv(argv) - - // then - assert.property(parsedArgv, 'reporterOptions') - assert.deepEqual(parsedArgv.reporterOptions, parameter.expected) - }) - } - }) - - context('reporter', function() { - it('uses "spec" as default value', function() { - // given - const { argv } = this - - // when - const parsedArgv = this.parseArgv(argv) - - // then - assert.propertyVal(parsedArgv, 'reporter', 'spec') - }) - - const parameters = [ - { given: ['--reporter', 'dot'], expected: 'dot' }, - { given: ['--R', 'dot'], expected: 'dot' }, - { given: ['-R', 'dot'], expected: 'dot' } - ] - - for (const parameter of parameters) { - it(`parses ${parameter.given.join(' ')}`, function() { - // given - const argv = this.argv.concat(parameter.given) - - // when - const parsedArgv = this.parseArgv(argv) - - // then - assert.propertyVal(parsedArgv, 'reporter', parameter.expected) - }) - } - }) - - context('bail', function() { - it('uses false as default value', function() { - // given - const { argv } = this - - // when - const parsedArgv = this.parseArgv(argv) - - // then - assert.propertyVal(parsedArgv, 'bail', false) - }) - - for (const parameter of ['--bail', '--b', '-b']) { - it(`parses ${parameter}`, function() { - // given - const argv = this.argv.concat([parameter]) - - // when - const parsedArgv = this.parseArgv(argv) - - // then - assert.propertyVal(parsedArgv, 'bail', true) - }) - } - }) - - context('grep', function() { - it('has no default value', function() { - // given - const { argv } = this - - // when - const parsedArgv = this.parseArgv(argv) - - // then - assert.notProperty(parsedArgv, 'grep') - }) - - const parameters = [ - { given: ['--grep', 'test'], expected: 'test' }, - { given: ['--g', 'test'], expected: 'test' }, - { given: ['-g', 'test'], expected: 'test' } - ] - - for (const parameter of parameters) { - it(`parses ${parameter.given.join(' ')}`, function() { - // given - const argv = this.argv.concat(parameter.given) - - // when - const parsedArgv = this.parseArgv(argv) - - // then - assert.propertyVal(parsedArgv, 'grep', parameter.expected) - }) - } - }) - - context('fgrep', function() { - it('has no default value', function() { - // given - const { argv } = this - - // when - const parsedArgv = this.parseArgv(argv) - - // then - assert.notProperty(parsedArgv, 'fgrep') - }) - - const parameters = [ - { given: ['--fgrep', 'test'], expected: 'test' }, - { given: ['--f', 'test'], expected: 'test' }, - { given: ['-f', 'test'], expected: 'test' } - ] - - for (const parameter of parameters) { - it(`parses ${parameter.given.join(' ')}`, function() { - // given - const argv = this.argv.concat(parameter.given) - - // when - const parsedArgv = this.parseArgv(argv) - - // then - assert.propertyVal(parsedArgv, 'fgrep', parameter.expected) - }) - } - }) - - context('invert', function() { - it('uses false as default value', function() { - // given - const { argv } = this - - // when - const parsedArgv = this.parseArgv(argv) - - // then - assert.propertyVal(parsedArgv, 'invert', false) - }) - - for (const parameter of ['--invert', '--i', '-i']) { - it(`parses ${parameter}`, function() { - // given - const argv = this.argv.concat([parameter]) - - // when - const parsedArgv = this.parseArgv(argv) - - // then - assert.propertyVal(parsedArgv, 'invert', true) - }) - } - }) - - context('require', function() { - it('uses [] as default value', function() { - // given - const { argv } = this - - // when - const parsedArgv = this.parseArgv(argv) - - // then - assert.property(parsedArgv, 'require') - assert.deepEqual(parsedArgv.require, []) - }) - - const parameters = [ - { given: ['--require', 'test'], expected: ['test'] }, - { - given: ['--require', 'test', '--require', 'test2'], - expected: ['test', 'test2'] - }, - { given: ['--r', 'test'], expected: ['test'] }, - { given: ['-r', 'test'], expected: ['test'] } - ] - - for (const parameter of parameters) { - it(`parses ${parameter.given.join(' ')}`, function() { - // given - const argv = this.argv.concat(parameter.given) - - // when - const parsedArgv = this.parseArgv(argv) - - // then - assert.property(parsedArgv, 'require') - assert.deepEqual(parsedArgv.require, parameter.expected) - }) - } - }) - - context('include', function() { - it('uses [] as default value', function() { - // given - const { argv } = this - - // when - const parsedArgv = this.parseArgv(argv) - - // then - assert.property(parsedArgv, 'include') - assert.deepEqual(parsedArgv.include, []) - }) - - const parameters = [ - { given: ['--include', 'test'], expected: ['test'] }, - { - given: ['--include', 'test', '--include', 'test2'], - expected: ['test', 'test2'] - } - ] - - for (const parameter of parameters) { - it(`parses ${parameter.given.join(' ')}`, function() { - // given - const argv = this.argv.concat(parameter.given) - - // when - const parsedArgv = this.parseArgv(argv) - - // then - assert.property(parsedArgv, 'include') - assert.deepEqual(parsedArgv.include, parameter.expected) - }) - } - }) - - context('slow', function() { - it('uses 75 as default value', function() { - // given - const { argv } = this - - // when - const parsedArgv = this.parseArgv(argv) - - // then - assert.propertyVal(parsedArgv, 'slow', 75) - }) - - const parameters = [ - { given: ['--slow', '1000'], expected: 1000 }, - { given: ['--slow', '-1'], expected: -1 }, - { given: ['--s', '1000'], expected: 1000 }, - { given: ['-s', '1000'], expected: 1000 }, - { given: ['-s', '-1'], expected: -1 } - ] - - for (const parameter of parameters) { - it(`parses ${parameter.given.join(' ')}`, function() { - // given - const argv = this.argv.concat(parameter.given) - - // when - const parsedArgv = this.parseArgv(argv) - - // then - assert.propertyVal(parsedArgv, 'slow', parameter.expected) - }) - } - }) - - context('timeout', function() { - it('uses 2000 as default value', function() { - // given - const { argv } = this - - // when - const parsedArgv = this.parseArgv(argv) - - // then - assert.propertyVal(parsedArgv, 'timeout', 2000) - }) - - const parameters = [ - { given: ['--timeout', '1000'], expected: 1000 }, - { given: ['--t', '1000'], expected: 1000 }, - { given: ['-t', '1000'], expected: 1000 } - ] - - for (const parameter of parameters) { - it(`parses ${parameter.given.join(' ')}`, function() { - // given - const argv = this.argv.concat(parameter.given) - - // when - const parsedArgv = this.parseArgv(argv) - - // then - assert.propertyVal(parsedArgv, 'timeout', parameter.expected) - }) - } - }) - - context('ui', function() { - it('uses "bdd" as default value', function() { - // given - const { argv } = this - - // when - const parsedArgv = this.parseArgv(argv) - - // then - assert.propertyVal(parsedArgv, 'ui', 'bdd') - }) - - const parameters = [ - { given: ['--ui', 'tdd'], expected: 'tdd' }, - { given: ['--u', 'tdd'], expected: 'tdd' }, - { given: ['-u', 'tdd'], expected: 'tdd' } - ] - - for (const parameter of parameters) { - it(`parses ${parameter.given.join(' ')}`, function() { - // given - const argv = this.argv.concat(parameter.given) - - // when - const parsedArgv = this.parseArgv(argv) - - // then - assert.propertyVal(parsedArgv, 'ui', parameter.expected) - }) - } - }) - - context('watch', function() { - it('uses false as default value', function() { - // given - const { argv } = this - - // when - const parsedArgv = this.parseArgv(argv) - - // then - assert.propertyVal(parsedArgv, 'watch', false) - }) - - for (const parameter of ['--watch', '--w', '-w']) { - it(`parses ${parameter}`, function() { - // given - const argv = this.argv.concat([parameter]) - - // when - const parsedArgv = this.parseArgv(argv) - - // then - assert.propertyVal(parsedArgv, 'watch', true) - }) - } - }) - - context('check-leaks', function() { - it('uses false as default value', function() { - // given - const { argv } = this - - // when - const parsedArgv = this.parseArgv(argv) - - // then - assert.propertyVal(parsedArgv, 'checkLeaks', false) - }) - - for (const parameter of ['--check-leaks']) { - it(`parses ${parameter}`, function() { - // given - const argv = this.argv.concat([parameter]) - - // when - const parsedArgv = this.parseArgv(argv) - - // then - assert.propertyVal(parsedArgv, 'checkLeaks', true) - }) - } - }) - - context('full-trace', function() { - it('uses false as default value', function() { - // given - const { argv } = this - - // when - const parsedArgv = this.parseArgv(argv) - - // then - assert.propertyVal(parsedArgv, 'fullTrace', false) - }) - - for (const parameter of ['--full-trace']) { - it(`parses ${parameter}`, function() { - // given - const argv = this.argv.concat([parameter]) - - // when - const parsedArgv = this.parseArgv(argv) - - // then - assert.propertyVal(parsedArgv, 'fullTrace', true) - }) - } - }) - - context('inline-diffs', function() { - it('uses false as default value', function() { - // given - const { argv } = this - - // when - const parsedArgv = this.parseArgv(argv) - - // then - assert.propertyVal(parsedArgv, 'inlineDiffs', false) - }) - - for (const parameter of ['--inline-diffs']) { - it(`parses ${parameter}`, function() { - // given - const argv = this.argv.concat([parameter]) - - // when - const parsedArgv = this.parseArgv(argv) - - // then - assert.propertyVal(parsedArgv, 'inlineDiffs', true) - }) - } - }) - - context('exit', function() { - it('uses false as default value', function() { - // given - const { argv } = this - - // when - const parsedArgv = this.parseArgv(argv) - - // then - assert.propertyVal(parsedArgv, 'exit', false) - }) - - for (const parameter of ['--exit']) { - it(`parses ${parameter}`, function() { - // given - const argv = this.argv.concat([parameter]) - - // when - const parsedArgv = this.parseArgv(argv) - - // then - assert.propertyVal(parsedArgv, 'exit', true) - }) - } - }) - - context('retries', function() { - it('has no default value', function() { - // given - const { argv } = this - - // when - const parsedArgv = this.parseArgv(argv) - - // then - assert.notProperty(parsedArgv, 'retries') - }) - - const parameters = [{ given: ['--retries', '2'], expected: 2 }] - - for (const parameter of parameters) { - it(`parses ${parameter.given.join(' ')}`, function() { - // given - const argv = this.argv.concat(parameter.given) - - // when - const parsedArgv = this.parseArgv(argv) - - // then - assert.propertyVal(parsedArgv, 'retries', parameter.expected) - }) - } - }) - - context('delay', function() { - it('uses false as default value', function() { - // given - const { argv } = this - - // when - const parsedArgv = this.parseArgv(argv) - - // then - assert.propertyVal(parsedArgv, 'delay', false) - }) - - for (const parameter of ['--delay']) { - it(`parses ${parameter}`, function() { - // given - const argv = this.argv.concat([parameter]) - - // when - const parsedArgv = this.parseArgv(argv) - - // then - assert.propertyVal(parsedArgv, 'delay', true) - }) - } - }) - - context('webpack-config', function() { - it('has default value', function() { - // given - const { argv } = this - - // when - const parsedArgv = this.parseArgv(argv) - - // then - assert.propertyVal(parsedArgv, 'webpackConfig', 'webpack.config.js') - }) - - const parameters = [ - { - given: ['--webpack-config', 'webpack-config.js'], - expected: 'webpack-config.js' - } - ] - - for (const parameter of parameters) { - it(`parses ${parameter.given.join(' ')}`, function() { - // given - const argv = this.argv.concat(parameter.given) - - // when - const parsedArgv = this.parseArgv(argv) - - // then - assert.propertyVal(parsedArgv, 'webpackConfig', parameter.expected) - }) - } - }) - - context('webpack-env', function() { - it('has no default value', function() { - // given - const { argv } = this - - // when - const parsedArgv = this.parseArgv(argv) - - // then - assert.notProperty(parsedArgv, 'webpackEnv') - }) - - const parameters = [ - { given: ['--webpack-env', 'production'], expected: 'production' }, - { - given: ['--webpack-env.env', 'production'], - expected: { env: 'production' } - }, - { - given: ['--webpack-env.anotherEnv', 'test'], - expected: { anotherEnv: 'test' } - }, - { - given: [ - '--webpack-env.env', - 'production', - '--webpack-env.anotherEnv', - 'test' - ], - expected: { env: 'production', anotherEnv: 'test' } - } - ] - for (const parameter of parameters) { - it(`parses ${parameter.given.join(' ')}`, function() { - // given - const argv = this.argv.concat(parameter.given) - - // when - const parsedArgv = this.parseArgv(argv) - - // then - assert.deepPropertyVal(parsedArgv, 'webpackEnv', parameter.expected) - }) - } - }) - - context('opts', function() { - it('has no default value', function() { - // given - const { argv } = this - - // when - const parsedArgv = this.parseArgv(argv) - - // then - assert.notProperty(parsedArgv, 'opts') - }) - - const parameters = [ - { - given: ['--opts', 'path/to/other.opts'], - expected: 'path/to/other.opts' - } - ] - - for (const parameter of parameters) { - it(`parses ${parameter.given.join(' ')}`, function() { - // given - const argv = this.argv.concat(parameter.given) - - // when - const parsedArgv = this.parseArgv(argv) - - // then - assert.propertyVal(parsedArgv, 'opts', parameter.expected) - }) - } - }) - - context('mode', function() { - it('has no default value', function() { - // given - const { argv } = this - - // when - const parsedArgv = this.parseArgv(argv) - - // then - assert.notProperty(parsedArgv, 'mode') - }) - - const parameters = [ - { given: ['--mode', 'development'], expected: 'development' }, - { given: ['--mode', 'production'], expected: 'production' } - ] - - for (const parameter of parameters) { - it(`parses ${parameter.given.join(' ')}`, function() { - // given - const argv = this.argv.concat(parameter.given) - - // when - const parsedArgv = this.parseArgv(argv) - - // then - assert.propertyVal(parsedArgv, 'mode', parameter.expected) - }) - } - }) - - context('forbid-only', function() { - it('uses false as default value', function() { - // given - const { argv } = this - - // when - const parsedArgv = this.parseArgv(argv) - - // then - assert.propertyVal(parsedArgv, 'forbidOnly', false) - }) - - for (const parameter of ['--forbid-only']) { - it(`parses ${parameter}`, function() { - // given - const argv = this.argv.concat([parameter]) - - // when - const parsedArgv = this.parseArgv(argv) - - // then - assert.propertyVal(parsedArgv, 'forbidOnly', true) - }) - } - }) - }) -}) diff --git a/test/unit/cli/parseConfig.test.ts b/test/unit/cli/parseMochaOptsFile.test.ts similarity index 78% rename from test/unit/cli/parseConfig.test.ts rename to test/unit/cli/parseMochaOptsFile.test.ts index 3fe4142..106bd31 100644 --- a/test/unit/cli/parseConfig.test.ts +++ b/test/unit/cli/parseMochaOptsFile.test.ts @@ -1,11 +1,9 @@ -/* eslint-env node, mocha */ - /* eslint-disable func-names, prefer-arrow-callback */ import path from 'path' import fs from 'fs-extra' import { assert } from 'chai' -import parseConfig from '../../../src/cli/parseConfig' +import parseMochaOptsFile from '../../../src/cli/argsParser/optionsFromParsedArgs/mocha/parseMochaOptsFile' const optsTestCasesPath = path.join( __dirname, @@ -15,14 +13,14 @@ const optsTestCasesPath = path.join( ) const optsTestCases = fs.readdirSync(optsTestCasesPath) -describe('parseConfig', function() { +describe('parseMochaOptsFile', function() { it('returns empty object when default config file is missing', function() { - assert.deepEqual(parseConfig(), {}) + assert.deepEqual(parseMochaOptsFile(), {}) }) it('throws an error when explicitly-specified default config file is missing', function() { const fn = () => { - parseConfig('mochapack.opts') + parseMochaOptsFile('mochapack.opts') } // then @@ -31,7 +29,7 @@ describe('parseConfig', function() { it('throws an error when specified config file is missing', function() { const fn = () => { - parseConfig('missing-config.opts') + parseMochaOptsFile('missing-config.opts') } // then @@ -46,7 +44,7 @@ describe('parseConfig', function() { it(`parses '${testDirName}/mochapack.opts' and returns options`, function() { // eslint-disable-next-line global-require, import/no-dynamic-require const expectedResult = require(expectedResultsPath) - const parsedOptions = parseConfig(optsFilePath) + const parsedOptions = parseMochaOptsFile(optsFilePath) assert.deepEqual(parsedOptions, expectedResult) }) diff --git a/test/unit/cli/requireWebpackConfig.test.ts b/test/unit/cli/requireWebpackConfig.test.ts index 086d0a5..8a9ea09 100644 --- a/test/unit/cli/requireWebpackConfig.test.ts +++ b/test/unit/cli/requireWebpackConfig.test.ts @@ -1,9 +1,7 @@ -/* eslint-env node, mocha */ - import path from 'path' import { assert } from 'chai' import { rejects } from 'assert' -import requireWebpackConfig from '../../../src/cli/requireWebpackConfig' +import requireWebpackConfig from '../../../src/cli/argsParser/optionsFromParsedArgs/webpack/requireWebpackConfig' describe('requireWebpackConfig', () => { const getConfigPath = (extension, suffix = 'config-test') => diff --git a/test/unit/createMochaWebpack.test.ts b/test/unit/createMochaWebpack.test.ts index 00947a4..0fb15dd 100644 --- a/test/unit/createMochaWebpack.test.ts +++ b/test/unit/createMochaWebpack.test.ts @@ -1,16 +1,33 @@ -/* eslint-env node, mocha */ - /* eslint-disable func-names, prefer-arrow-callback */ import { assert } from 'chai' -import MochaWebpack from '../../src/MochaWebpack' -import createMochaWebpack from '../../src/createMochaWebpack' +import Mochapack from '../../src/Mochapack' +import createMochapack from '../../src/createMochapack' +import { MochapackOptions } from '../../src/cli/argsParser/optionsFromParsedArgs/types' + +describe('createMochapack', function() { + it('should create a instance of Mochapack', function() { + const basicOptions: MochapackOptions = { + mocha: { + cli: { + extension: [], + files: [], + watchIgnore: [] + }, + constructor: {} + }, + webpack: { + config: {} + }, + mochapack: { + interactive: false, + clearTerminal: true + } + } -describe('createMochaWebpack', function() { - it('should create a instance of MochaWebpack', function() { - assert.doesNotThrow(() => createMochaWebpack()) - const mochaWebpack = createMochaWebpack() + assert.doesNotThrow(() => createMochapack(basicOptions)) + const mochaWebpack = createMochapack(basicOptions) assert.isNotNull(mochaWebpack) - assert.instanceOf(mochaWebpack, MochaWebpack) + assert.instanceOf(mochaWebpack, Mochapack) }) }) diff --git a/test/unit/runner/configureMocha.test.ts b/test/unit/runner/configureMocha.test.ts deleted file mode 100644 index 6836885..0000000 --- a/test/unit/runner/configureMocha.test.ts +++ /dev/null @@ -1,140 +0,0 @@ -/* eslint-env node, mocha */ - -/* eslint-disable func-names, prefer-arrow-callback */ -import { assert } from 'chai' -import { sandbox } from 'sinon' -import Mocha from 'mocha' - -import configureMocha from '../../../src/runner/configureMocha' - -describe('configureMocha', function() { - beforeEach(function() { - this.options = { - bail: false, - reporter: 'spec', - reporterOptions: {}, - ui: 'bdd', - invert: false, - ignoreLeaks: true, - fullStackTrace: false, - useInlineDiffs: false, - timeout: 2000, - slow: 75, - asyncOnly: false, - delay: false, - forbidOnly: true - } - this.sandbox = sandbox.create() - this.spyReporter = this.sandbox.spy(Mocha.prototype, 'reporter') - this.spyEnableTimeouts = this.sandbox.spy(Mocha.prototype, 'enableTimeouts') - this.spyGrep = this.sandbox.spy(Mocha.prototype, 'grep') - this.spyGrowl = this.sandbox.spy(Mocha.prototype, 'growl') - this.spyForbidOnly = this.sandbox.spy(Mocha.prototype, 'forbidOnly') - }) - - afterEach(function() { - this.sandbox.restore() - }) - - it('should create a instance of Mocha', function() { - const mocha = configureMocha(this.options) - assert.instanceOf( - mocha, - Mocha, - 'configureMocha should return a instance of Mocha' - ) - }) - - it('should call reporter()', function() { - configureMocha({ - ...this.options - }) - - const reporter = Mocha.reporters[this.options.reporter] - - assert.isTrue(this.spyReporter.called, 'reporter() should be called') - assert.isTrue( - this.spyReporter.calledWith(reporter, this.options.reporterOptions) - ) - }) - - it('should set color', function() { - var mocha = configureMocha({ - ...this.options, - colors: undefined - }) - - assert.isFalse(mocha.options.color) - - mocha = configureMocha({ - ...this.options, - colors: true - }) - - assert.isTrue(mocha.options.color) - }) - - it('should set inlineDiffs', function() { - var mocha = configureMocha({ - ...this.options, - useInlineDiffs: undefined - }) - - assert.isFalse(mocha.options.inlineDiffs) - - mocha = configureMocha({ - ...this.options, - useInlineDiffs: true - }) - - assert.isTrue(mocha.options.inlineDiffs) - }) - - it('should call enableTimeouts()', function() { - configureMocha({ - ...this.options, - timeout: 0 - }) - - assert.isTrue( - this.spyEnableTimeouts.called, - 'enableTimeouts() should be called' - ) - assert.isTrue(this.spyEnableTimeouts.calledWith(false)) - }) - - it('should call grep()', function() { - configureMocha({ - ...this.options, - grep: 'dddd', - fgrep: 'dddd' - }) - - assert.isTrue(this.spyGrep.called, 'grep() should be called') - }) - - it('should set growl', function() { - configureMocha({ - ...this.options, - growl: undefined - }) - - assert.isFalse(this.spyGrowl.called, 'growl() should not be called') - - configureMocha({ - ...this.options, - growl: true - }) - - assert.isTrue(this.spyGrowl.called, 'growl() should be called') - }) - - it('should call forbidOnly()', function() { - configureMocha({ - ...this.options, - timeout: 0 - }) - - assert.isTrue(this.spyForbidOnly.called, 'spyForbidOnly() should be called') - }) -}) diff --git a/test/unit/runner/loadReporter.test.ts b/test/unit/runner/getReporterConstructor.test.ts similarity index 68% rename from test/unit/runner/loadReporter.test.ts rename to test/unit/runner/getReporterConstructor.test.ts index 962c95c..1de7c84 100644 --- a/test/unit/runner/loadReporter.test.ts +++ b/test/unit/runner/getReporterConstructor.test.ts @@ -1,81 +1,82 @@ -/* eslint-env node, mocha */ - /* eslint-disable func-names, prefer-arrow-callback */ import { assert } from 'chai' import spec from 'mocha/lib/reporters/spec' import progress from 'mocha/lib/reporters/progress' import customMochaReporter from '../../fixture/customMochaReporter' -import loadReporter from '../../../src/runner/loadReporter' +import getReporterConstructor from '../../../src/runner/runnerUtils/initMocha/getReporterConstructor' const customMochaReporterPath = require.resolve( '../../fixture/customMochaReporter' ) -describe('loadReporter', function() { +describe('getReporterConstructor', function() { it('should allow to use reporter by function', function() { - const reporter = loadReporter(spec) + const reporter = getReporterConstructor(spec) assert.strictEqual(reporter, spec, 'should equal reporter') }) it('should load built-in reporter', function() { - const reporter = loadReporter('spec') + const reporter = getReporterConstructor('spec') assert.strictEqual(reporter, spec, 'should equal built-in reporter') }) it('should load reporter from node_modules', function() { - const reporter = loadReporter('mocha/lib/reporters/progress') + const reporter = getReporterConstructor('mocha/lib/reporters/progress') assert.strictEqual(reporter, progress, 'should equal node_module reporter') }) it('should load reporter relative from real cwd (1)', function() { - const reporter = loadReporter( + const reporter = getReporterConstructor( './test/fixture/customMochaReporter', process.cwd() ) assert.strictEqual( reporter, - customMochaReporter, + customMochaReporter as unknown, 'should equal custom reporter' ) }) it('should load reporter relative from real cwd (2)', function() { - const reporter = loadReporter( + const reporter = getReporterConstructor( 'test/fixture/customMochaReporter', process.cwd() ) assert.strictEqual( reporter, - customMochaReporter, + customMochaReporter as unknown, 'should equal custom reporter' ) }) it('should load reporter with relative path from custom cwd', function() { - const reporter = loadReporter( + const reporter = getReporterConstructor( '../../fixture/customMochaReporter', __dirname ) assert.strictEqual( reporter, - customMochaReporter, + customMochaReporter as unknown, 'should equal custom reporter' ) }) it('should load reporter with absolute path', function() { - const reporter = loadReporter(customMochaReporterPath, process.cwd()) + const reporter = getReporterConstructor( + customMochaReporterPath, + process.cwd() + ) assert.strictEqual( reporter, - customMochaReporter, + customMochaReporter as unknown, 'should equal custom reporter' ) }) it('throws error when not found', function() { const load = () => { - loadReporter('xxx/xxxx/xxxx/test.js', process.cwd()) + getReporterConstructor('xxx/xxxx/xxxx/test.js', process.cwd()) } assert.throws(load, /Cannot find module/) diff --git a/test/unit/runner/loadUI.test.ts b/test/unit/runner/loadUI.test.ts index 751bf60..086b5db 100644 --- a/test/unit/runner/loadUI.test.ts +++ b/test/unit/runner/loadUI.test.ts @@ -1,9 +1,7 @@ -/* eslint-env node, mocha */ - /* eslint-disable func-names, prefer-arrow-callback */ import path from 'path' import { assert } from 'chai' -import loadUI from '../../../src/runner/loadUI' +import loadUI from '../../../src/runner/runnerUtils/initMocha/loadUI' const customMochaReporterPath = require.resolve( '../../fixture/customMochaReporter.js' diff --git a/test/unit/util/glob.test.ts b/test/unit/util/glob.test.ts index 27b660d..d098918 100644 --- a/test/unit/util/glob.test.ts +++ b/test/unit/util/glob.test.ts @@ -1,5 +1,3 @@ -/* eslint-env node, mocha */ - /* eslint-disable func-names, prefer-arrow-callback */ import { assert } from 'chai' import { ensureGlob, extensionsToGlob } from '../../../src/util/glob' diff --git a/test/unit/util/registerRequireHook.test.ts b/test/unit/util/registerRequireHook.test.ts index 0291120..ca04517 100644 --- a/test/unit/util/registerRequireHook.test.ts +++ b/test/unit/util/registerRequireHook.test.ts @@ -1,5 +1,3 @@ -/* eslint-env node, mocha */ - /* eslint-disable func-names, prefer-arrow-callback */ import { assert } from 'chai' import registerRequireHook from '../../../src/util/registerRequireHook' diff --git a/yarn.lock b/yarn.lock index 53de561..3dbf42b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5,8 +5,8 @@ __metadata: version: 4 "@babel/cli@npm:^7.0.0": - version: 7.7.5 - resolution: "@babel/cli@npm:7.7.5" + version: 7.8.4 + resolution: "@babel/cli@npm:7.8.4" dependencies: chokidar: ^2.1.8 commander: ^4.0.1 @@ -25,962 +25,1082 @@ __metadata: bin: babel: ./bin/babel.js babel-external-helpers: ./bin/babel-external-helpers.js - checksum: 2/c908a5391fb68d60b01d3f0ac72c27a6003ef31d7eca787f5bce4294dc3dec84678cddfd7f6ebf72f29a56f41b0ad6a6ba2091a702d75b63bb20823ee45b599c + checksum: 2/48324ee62d9c0cabbb26b4d206f9c2bbcc6133185c031c218a9c24f65bf5c80710852b41920955da6d321b263799cc890e2f2465db1df34dec761fe4e24c7edc languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.5.5": - version: 7.5.5 - resolution: "@babel/code-frame@npm:7.5.5" +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/code-frame@npm:7.8.3" dependencies: - "@babel/highlight": ^7.0.0 - checksum: 2/5870f8fc0a7ff4dc7c126906e949e3148bb3eaec9d60795496249ee5a783b54d57404d6552f4b5cab5b96e110b7a89098373955199b60e70324fdbc81b6edd75 + "@babel/highlight": ^7.8.3 + checksum: 2/b25b28112837a8c8466ec0263280005e009fd19cf0ed9432c8d2b90a183144ba947970a86793cb931e4aa08443ba59716f9953c93491039f6609d795b5fdebad + languageName: node + linkType: hard + +"@babel/compat-data@npm:^7.8.6, @babel/compat-data@npm:^7.9.0": + version: 7.9.0 + resolution: "@babel/compat-data@npm:7.9.0" + dependencies: + browserslist: ^4.9.1 + invariant: ^2.2.4 + semver: ^5.5.0 + checksum: 2/2c79ec28e9a90143db8d77b5e740f7ef47ebf4842d96a25c16d708564d0f8cf1c0d9ca7f56c50e11e60b5c4ac50700652226208efa01393cb3418bf815b5c46c languageName: node linkType: hard "@babel/core@npm:^7.0.0": - version: 7.7.5 - resolution: "@babel/core@npm:7.7.5" - dependencies: - "@babel/code-frame": ^7.5.5 - "@babel/generator": ^7.7.4 - "@babel/helpers": ^7.7.4 - "@babel/parser": ^7.7.5 - "@babel/template": ^7.7.4 - "@babel/traverse": ^7.7.4 - "@babel/types": ^7.7.4 + version: 7.9.0 + resolution: "@babel/core@npm:7.9.0" + dependencies: + "@babel/code-frame": ^7.8.3 + "@babel/generator": ^7.9.0 + "@babel/helper-module-transforms": ^7.9.0 + "@babel/helpers": ^7.9.0 + "@babel/parser": ^7.9.0 + "@babel/template": ^7.8.6 + "@babel/traverse": ^7.9.0 + "@babel/types": ^7.9.0 convert-source-map: ^1.7.0 debug: ^4.1.0 - json5: ^2.1.0 + gensync: ^1.0.0-beta.1 + json5: ^2.1.2 lodash: ^4.17.13 resolve: ^1.3.2 semver: ^5.4.1 source-map: ^0.5.0 - checksum: 2/69bcdb4c0c62b50821e7b45a3c001af68bde1cd37496f180424e955d121205bc846fb0a697539773e54dae0c31bba49131f535e317039e3379bb9782e3c4aeb6 + checksum: 2/8220ebf15298255a8aeb04b2e01b45b749a5131e3ab1b327bf4dc19c889d3fa340ad14691cce14ec42173b5e8cad51e548745f68be9b67cdb82467c463efebf0 languageName: node linkType: hard -"@babel/generator@npm:^7.4.0, @babel/generator@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/generator@npm:7.7.4" +"@babel/generator@npm:^7.4.0, @babel/generator@npm:^7.9.0, @babel/generator@npm:^7.9.5": + version: 7.9.5 + resolution: "@babel/generator@npm:7.9.5" dependencies: - "@babel/types": ^7.7.4 + "@babel/types": ^7.9.5 jsesc: ^2.5.1 lodash: ^4.17.13 source-map: ^0.5.0 - checksum: 2/b8c02632043a1f7289ebee99893e167707a0b9e8648aed796189d4c94fb511db52587a069d0152e7a0cc54260589396962a0f52ee98c3926e1798008633c69b9 + checksum: 2/9eef1923fc7490793a7739a655fa996c46f71f22e62d1f10790a095949ab3294428845541172075bd67beef3b39a86d128fa6c23f0a090bd882d3a8155e6f836 languageName: node linkType: hard -"@babel/helper-annotate-as-pure@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/helper-annotate-as-pure@npm:7.7.4" +"@babel/helper-annotate-as-pure@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/helper-annotate-as-pure@npm:7.8.3" dependencies: - "@babel/types": ^7.7.4 - checksum: 2/6c2b04a9f7a5abb3576f272720aef80158509c0db5ad6b4c77f178c723db50a88a2a017bd9bf32b93896338e5f08f29c83ea31d19c4bdabf29ab71ccc9bd0d26 + "@babel/types": ^7.8.3 + checksum: 2/01f04f4ee42b11018c3e0bd2dce31989d328e7ff4b52833422f78edbb2ceb2cb860398baac3624a47d5001db23e36117fbb37c534ce76a723c1f5c4752813c22 languageName: node linkType: hard -"@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/helper-builder-binary-assignment-operator-visitor@npm:7.7.4" +"@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/helper-builder-binary-assignment-operator-visitor@npm:7.8.3" dependencies: - "@babel/helper-explode-assignable-expression": ^7.7.4 - "@babel/types": ^7.7.4 - checksum: 2/ba6ca6f397c020ed82c07b5d856b4b792383caac78eba21b13b98325487848430268a133316acadb6786d2dda444d1847a17da97b7b6c6a77d3275b452e7ba42 + "@babel/helper-explode-assignable-expression": ^7.8.3 + "@babel/types": ^7.8.3 + checksum: 2/7baa1ad38714c0bd77d9431e23766ace93cb0e7277aff0b33b8ca7d042a4c7aaa423b7d9778c01f7e8b115d6841a3da9ca9f2967d122a7470c9b39b1bee86d92 languageName: node linkType: hard -"@babel/helper-call-delegate@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/helper-call-delegate@npm:7.7.4" +"@babel/helper-compilation-targets@npm:^7.8.7": + version: 7.8.7 + resolution: "@babel/helper-compilation-targets@npm:7.8.7" dependencies: - "@babel/helper-hoist-variables": ^7.7.4 - "@babel/traverse": ^7.7.4 - "@babel/types": ^7.7.4 - checksum: 2/e26f70731b1d823d4f6c7c2e49914abe3f9aacf8f8b54fdfe0041e8ca499809690b3659e10a0bcdb041af477cc8f2169ed83fb1beb53d01270b5857db463b64a + "@babel/compat-data": ^7.8.6 + browserslist: ^4.9.1 + invariant: ^2.2.4 + levenary: ^1.1.1 + semver: ^5.5.0 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 2/324462abfe7ca8b35d93319981d21631733c5af90650e32c0d0107389f6cd828eca04dae523b35c296f3d98d90775da5c3149a00d07114410c2353313df3d643 languageName: node linkType: hard -"@babel/helper-create-class-features-plugin@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/helper-create-class-features-plugin@npm:7.7.4" +"@babel/helper-create-class-features-plugin@npm:^7.8.3": + version: 7.9.5 + resolution: "@babel/helper-create-class-features-plugin@npm:7.9.5" dependencies: - "@babel/helper-function-name": ^7.7.4 - "@babel/helper-member-expression-to-functions": ^7.7.4 - "@babel/helper-optimise-call-expression": ^7.7.4 - "@babel/helper-plugin-utils": ^7.0.0 - "@babel/helper-replace-supers": ^7.7.4 - "@babel/helper-split-export-declaration": ^7.7.4 + "@babel/helper-function-name": ^7.9.5 + "@babel/helper-member-expression-to-functions": ^7.8.3 + "@babel/helper-optimise-call-expression": ^7.8.3 + "@babel/helper-plugin-utils": ^7.8.3 + "@babel/helper-replace-supers": ^7.8.6 + "@babel/helper-split-export-declaration": ^7.8.3 peerDependencies: "@babel/core": ^7.0.0 - checksum: 2/d51d652239f524292a2958354245df23a265e9033262bd9c2c047460a25e6e73e9fa6698a83a38b25f7783e121bd2e5fa049e12ae3f5c1173a44efb12b6f9856 + checksum: 2/e61b65a54844fcae2677d05a748ad2279879dfd77cfff4feeb47a8396cedc16a48038b788b20825d2b75b40ab46a1859a885b8b6e584e492ef3d734bba8ee495 languageName: node linkType: hard -"@babel/helper-create-regexp-features-plugin@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/helper-create-regexp-features-plugin@npm:7.7.4" +"@babel/helper-create-regexp-features-plugin@npm:^7.8.3, @babel/helper-create-regexp-features-plugin@npm:^7.8.8": + version: 7.8.8 + resolution: "@babel/helper-create-regexp-features-plugin@npm:7.8.8" dependencies: - "@babel/helper-regex": ^7.4.4 - regexpu-core: ^4.6.0 + "@babel/helper-annotate-as-pure": ^7.8.3 + "@babel/helper-regex": ^7.8.3 + regexpu-core: ^4.7.0 peerDependencies: "@babel/core": ^7.0.0 - checksum: 2/dae54ca978fafcfb4efdc4c02f99ba777239aa80333d03edf1264069ea2989abac3d7074054c4381ca9d120b9f8bb1864f10528949d174cb252a95220e1ec02e + checksum: 2/093f9ae64333f504329eb576c014db0c7403fe4e1fcd08e34d9c678432e91584ad1e2c7b0efefc8ff758e7bf0baa61be6e48751691102e452732503b142ac4fe languageName: node linkType: hard -"@babel/helper-define-map@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/helper-define-map@npm:7.7.4" +"@babel/helper-define-map@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/helper-define-map@npm:7.8.3" dependencies: - "@babel/helper-function-name": ^7.7.4 - "@babel/types": ^7.7.4 + "@babel/helper-function-name": ^7.8.3 + "@babel/types": ^7.8.3 lodash: ^4.17.13 - checksum: 2/3bd45076b8342e70215bdaa181af786157d55d809c24f3e856a90967275159a03aaab56e9d701875069c446c44ee10b650c3f574d6c3fcc1c889a6001b5f0e7d + checksum: 2/0dadfe591fecad8eba79d8078eff30b5e79d7140f68e946ece0defa335ec9bced5674898149b9480658c3c836a0ebf1c118961697f522303b48610c9385d5ba5 languageName: node linkType: hard -"@babel/helper-explode-assignable-expression@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/helper-explode-assignable-expression@npm:7.7.4" +"@babel/helper-explode-assignable-expression@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/helper-explode-assignable-expression@npm:7.8.3" dependencies: - "@babel/traverse": ^7.7.4 - "@babel/types": ^7.7.4 - checksum: 2/8ab8dcd94b2b65f760b9d5fcbedee493ec02ab62bb92b11991c5739ba0e058831b70d5a08f40ea99b362bc29d0df49de738245ed7e31b680fb013a5c3a22d92f + "@babel/traverse": ^7.8.3 + "@babel/types": ^7.8.3 + checksum: 2/6eec45eff4790102b105c811c98a0b4528656a749bc8398f3fc0b5336f63a553c9e358a0b5915d67ac3a240536b93735cb01c7c17340a8dc6f9c2c919ddb1ea8 languageName: node linkType: hard -"@babel/helper-function-name@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/helper-function-name@npm:7.7.4" +"@babel/helper-function-name@npm:^7.8.3, @babel/helper-function-name@npm:^7.9.5": + version: 7.9.5 + resolution: "@babel/helper-function-name@npm:7.9.5" dependencies: - "@babel/helper-get-function-arity": ^7.7.4 - "@babel/template": ^7.7.4 - "@babel/types": ^7.7.4 - checksum: 2/98fe351c08dcda07ff1259f256f4334f1f1586a61908ebf63f8d5bcf651702eeea9ef5a97b799cb52f4f36135c3c6d58ffa21dfbff0f38f883658768cc14b134 + "@babel/helper-get-function-arity": ^7.8.3 + "@babel/template": ^7.8.3 + "@babel/types": ^7.9.5 + checksum: 2/c46072002ec799887c156cc4a698358f331b2c4d63850f3aa26dbbdb0ff62384a24325557105c020ae9a48135848be2c3e672c30f9088c5443ba2dcbb472160a languageName: node linkType: hard -"@babel/helper-get-function-arity@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/helper-get-function-arity@npm:7.7.4" +"@babel/helper-get-function-arity@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/helper-get-function-arity@npm:7.8.3" dependencies: - "@babel/types": ^7.7.4 - checksum: 2/b4e4c802caf1fc13df13a76f31401235b13a0ac7490f93d32831f26474a8a204f13ae865d103c6ce6b4e21f89599e8a4ab73e258b9742e0879179cbbef22fc0a + "@babel/types": ^7.8.3 + checksum: 2/4d2da1d88e86866bb767173d96b92682e82cfb4691ad72fe379d28fc164e522adf5db289bff7a5f664b5cddedcf2a744065d6fc4757760c6c1bdf3652800288c languageName: node linkType: hard -"@babel/helper-hoist-variables@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/helper-hoist-variables@npm:7.7.4" +"@babel/helper-hoist-variables@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/helper-hoist-variables@npm:7.8.3" dependencies: - "@babel/types": ^7.7.4 - checksum: 2/7420c07b5c06aa5228691723c5b6d9d478dd610dae971775955f40d1444dd80ac10790b2bde3fc56804a06e102bb8c49f4b30a03e3f709718c7b53147e36f4b9 + "@babel/types": ^7.8.3 + checksum: 2/0c927d79dc9c3bdb27ebfd129d52c195490051880ce73dc2e53f51c2126526ad068ede533854c86eb3c7be670fe91c7f9e7ac58c99fffe3142cb6ee2e88c7909 languageName: node linkType: hard -"@babel/helper-member-expression-to-functions@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/helper-member-expression-to-functions@npm:7.7.4" +"@babel/helper-member-expression-to-functions@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/helper-member-expression-to-functions@npm:7.8.3" dependencies: - "@babel/types": ^7.7.4 - checksum: 2/76749bf801478010c3be9b5b0dbdc19bf58da1dcaec99ade37d4bd6dedc2d7d85743f10cc5b523d09cf3f0691f442ce1d397dd9814c677a605c077ab4eabf6dd + "@babel/types": ^7.8.3 + checksum: 2/d52d62a94eb53107786f394c724dcb516e2dda0da897b666d8ea0fab2c4499d9c34c60142b0b36e06ea363706516b4e21c5f792b4fd40ae54592d55ee2a26ba5 languageName: node linkType: hard -"@babel/helper-module-imports@npm:^7.0.0-beta.49, @babel/helper-module-imports@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/helper-module-imports@npm:7.7.4" +"@babel/helper-module-imports@npm:^7.0.0-beta.49, @babel/helper-module-imports@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/helper-module-imports@npm:7.8.3" dependencies: - "@babel/types": ^7.7.4 - checksum: 2/f84884fbd933ff0f891904151ec22414276301905e32e134581728b0ed3bcc854a60be785d9bf215f1f2376ba50fa373872c2cfe2e255c3c9b31f786e5a83b3c + "@babel/types": ^7.8.3 + checksum: 2/cff3fc22fb035e9354f70f9ec7ca36fbf618ebb4d9980a5ba8bfa0b502467d0737e725dd2d94e7ba0c58948b08de198dc7c89978d6905b8883109079541f0584 languageName: node linkType: hard -"@babel/helper-module-transforms@npm:^7.7.4, @babel/helper-module-transforms@npm:^7.7.5": - version: 7.7.5 - resolution: "@babel/helper-module-transforms@npm:7.7.5" +"@babel/helper-module-transforms@npm:^7.9.0": + version: 7.9.0 + resolution: "@babel/helper-module-transforms@npm:7.9.0" dependencies: - "@babel/helper-module-imports": ^7.7.4 - "@babel/helper-simple-access": ^7.7.4 - "@babel/helper-split-export-declaration": ^7.7.4 - "@babel/template": ^7.7.4 - "@babel/types": ^7.7.4 + "@babel/helper-module-imports": ^7.8.3 + "@babel/helper-replace-supers": ^7.8.6 + "@babel/helper-simple-access": ^7.8.3 + "@babel/helper-split-export-declaration": ^7.8.3 + "@babel/template": ^7.8.6 + "@babel/types": ^7.9.0 lodash: ^4.17.13 - checksum: 2/808849ea51087452896eb94d0832fd2214f3b453fe44532b5c75f11ff50c7943707faaa1a1245b5984b54b311f71b8b7c865b5e9587bdaa38b7d0c36f5516e4e + checksum: 2/4758cc4379e6f8471eb35e59dfdd449496fe75a9b29ce9dbfd0ba276a012b44a0872790f29f5f258a21ad1174065cc93f52a8f933182f9e1b11aef7d114f9b6d languageName: node linkType: hard -"@babel/helper-optimise-call-expression@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/helper-optimise-call-expression@npm:7.7.4" +"@babel/helper-optimise-call-expression@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/helper-optimise-call-expression@npm:7.8.3" dependencies: - "@babel/types": ^7.7.4 - checksum: 2/035d80712f979aabee3248b49718d72a58984449b93188d165bc496d8dd25440dd770f807d09d7e0cba3c3eeda5c590ff419b2f6e9a68d757189b402d8722912 + "@babel/types": ^7.8.3 + checksum: 2/867605c024a54ad44feb9e6e6f3c9682dc6d9ce0d1c9a2d43803805a66f298dbca9042e60e01c028060a8da496e8c27593edc6de45fe86b5320ae246ff45c0ef languageName: node linkType: hard -"@babel/helper-plugin-utils@npm:^7.0.0": - version: 7.0.0 - resolution: "@babel/helper-plugin-utils@npm:7.0.0" - checksum: 2/75f0276c3ba9933307c6281b4c6c2cc2237ccc7a295af8084f7dc52b8734b9f30e9e4d72c869e09466083f751f10ce492580ce21976b0bd9bfd05dce44f0c0e4 +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/helper-plugin-utils@npm:7.8.3" + checksum: 2/b1054e7d6bf31c93edd5cbb405b09987713e4475713e746ef330df1732bf7e3cbe0e6c90926cd0dabee4d233693f6194e7ddd3afa1d55f335d545a6b668758a8 languageName: node linkType: hard -"@babel/helper-regex@npm:^7.0.0, @babel/helper-regex@npm:^7.4.4": - version: 7.5.5 - resolution: "@babel/helper-regex@npm:7.5.5" +"@babel/helper-regex@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/helper-regex@npm:7.8.3" dependencies: lodash: ^4.17.13 - checksum: 2/c8f57fb3443985c16ed8b8b619080e9db8bc93b78ad856b9c4b88fab4c3cc89a62ca27239e9a64cb67aa0fc60db0425c3ddd0a280bb3eadc6891c4dae4dc3a28 + checksum: 2/9058e5e0cc41b3f9258748623532c05a32790f1831cbce7a138873dd6181da4ac465389a5861ce0f4fc4f8c49337fe79600ee9f36f69cf0251f9a36fa6ec3a5c languageName: node linkType: hard -"@babel/helper-remap-async-to-generator@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/helper-remap-async-to-generator@npm:7.7.4" +"@babel/helper-remap-async-to-generator@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/helper-remap-async-to-generator@npm:7.8.3" dependencies: - "@babel/helper-annotate-as-pure": ^7.7.4 - "@babel/helper-wrap-function": ^7.7.4 - "@babel/template": ^7.7.4 - "@babel/traverse": ^7.7.4 - "@babel/types": ^7.7.4 - checksum: 2/b6b70d65f52fa9c7b66320d129bbc6d514d15eaf65948218a7526f351435dda209baf3b5999c29ba878bd559368bf05690e75dea4c26cc3ae0a8d94a5950679c + "@babel/helper-annotate-as-pure": ^7.8.3 + "@babel/helper-wrap-function": ^7.8.3 + "@babel/template": ^7.8.3 + "@babel/traverse": ^7.8.3 + "@babel/types": ^7.8.3 + checksum: 2/58700af901c24479e6ed893452809f727d7df2b4606fad6d8e3e952de1109ea7a64098c3668d2cff313c68810bd10a445ad617fb3ea908229f42d33f2e52540a languageName: node linkType: hard -"@babel/helper-replace-supers@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/helper-replace-supers@npm:7.7.4" +"@babel/helper-replace-supers@npm:^7.8.3, @babel/helper-replace-supers@npm:^7.8.6": + version: 7.8.6 + resolution: "@babel/helper-replace-supers@npm:7.8.6" dependencies: - "@babel/helper-member-expression-to-functions": ^7.7.4 - "@babel/helper-optimise-call-expression": ^7.7.4 - "@babel/traverse": ^7.7.4 - "@babel/types": ^7.7.4 - checksum: 2/56646bbf7141b10df419c1eb8d1375c3c1d7b40e1c6dd7e15d5b458da5add1cd4581288fbd20cc2b1e22f81a506e69765af43a2a8db6068420e4f31d7457e0be + "@babel/helper-member-expression-to-functions": ^7.8.3 + "@babel/helper-optimise-call-expression": ^7.8.3 + "@babel/traverse": ^7.8.6 + "@babel/types": ^7.8.6 + checksum: 2/dd5ec6cc20a0760f95ca9de63c72e7cda62678e42da1637ad799efbdbb9515b09a21b96890b379b729d4f846e11f48ea1deac191223285e3c93d952fd891b83b languageName: node linkType: hard -"@babel/helper-simple-access@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/helper-simple-access@npm:7.7.4" +"@babel/helper-simple-access@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/helper-simple-access@npm:7.8.3" dependencies: - "@babel/template": ^7.7.4 - "@babel/types": ^7.7.4 - checksum: 2/cf38df39f2d409caf657e7beb4561ba69b47ebaf0a45d388ab7514ddadc79a385c193b269106bbfae30e2cf521eed3220fc107d2d37a25511d386077e43ed01c + "@babel/template": ^7.8.3 + "@babel/types": ^7.8.3 + checksum: 2/ddf2bcb6a9e8ff91a1a061840de4d9fcd4a1c55528551c1ba6bf4169fe9838bedd734ac402e341001e86b1f8da81aecdb58ea4f01ba32bd1f6bb0de270f60250 languageName: node linkType: hard -"@babel/helper-split-export-declaration@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/helper-split-export-declaration@npm:7.7.4" +"@babel/helper-split-export-declaration@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/helper-split-export-declaration@npm:7.8.3" dependencies: - "@babel/types": ^7.7.4 - checksum: 2/fc7e417e1544e72f47f3f3075de78e236b372b353e61a02a9d166dfe9749c1ffa6ec737ba374be3d95db267f552af527d9d79102cfedc2536f752cbe733e80b6 + "@babel/types": ^7.8.3 + checksum: 2/a25a162321451221a0c84762e1c6fe22c1408b163fb8c732b3966cd84659e5f131c2ec4337f6c3ca01a5bebe5d9ecc49e320435ab7bd1823b445e048fc17f9ce languageName: node linkType: hard -"@babel/helper-wrap-function@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/helper-wrap-function@npm:7.7.4" +"@babel/helper-validator-identifier@npm:^7.9.0, @babel/helper-validator-identifier@npm:^7.9.5": + version: 7.9.5 + resolution: "@babel/helper-validator-identifier@npm:7.9.5" + checksum: 2/5f2f8a66c31861ac302b30a7abc0ace1829ed39a6838e3e0001289e844a17357c533ae75e946d4984be6f5140753d50a963e2e3d66f45c515a92a08f7b5ca06d + languageName: node + linkType: hard + +"@babel/helper-wrap-function@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/helper-wrap-function@npm:7.8.3" dependencies: - "@babel/helper-function-name": ^7.7.4 - "@babel/template": ^7.7.4 - "@babel/traverse": ^7.7.4 - "@babel/types": ^7.7.4 - checksum: 2/0233e5e7941771320ba06d2aec31ea400d15b0c1364707ae0a0df87b497114cd58182bdb0df5a0579ed4dcca171b0e42af3fc38f51bc501ec8c6f41fa0636c27 + "@babel/helper-function-name": ^7.8.3 + "@babel/template": ^7.8.3 + "@babel/traverse": ^7.8.3 + "@babel/types": ^7.8.3 + checksum: 2/accedbb80735820cc6b93488ce9114f1fd94d67aefdf3a7d93a191e7ed6eac20cde7854442fb1d6e6e8482fd67441bc02898a7eda75772733daa6c0124d1b533 languageName: node linkType: hard -"@babel/helpers@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/helpers@npm:7.7.4" +"@babel/helpers@npm:^7.9.0": + version: 7.9.2 + resolution: "@babel/helpers@npm:7.9.2" dependencies: - "@babel/template": ^7.7.4 - "@babel/traverse": ^7.7.4 - "@babel/types": ^7.7.4 - checksum: 2/29bfc5c835d210f4c421fa2a18affcbd2324d3770fc9d733f070ada584ecaa865a7d435fe1a9cdf86b73d6b2836c7412c1fdc648689d93979a787c0ac47f41b4 + "@babel/template": ^7.8.3 + "@babel/traverse": ^7.9.0 + "@babel/types": ^7.9.0 + checksum: 2/29dde83218aee8fe7406442d64ad43f00783cb5e5d113757d09ac31551d4bf334d63ab1304bef81e92ff02d2eb6c8f536b5a2d943021f2fddad784acd4021d05 languageName: node linkType: hard -"@babel/highlight@npm:^7.0.0": - version: 7.5.0 - resolution: "@babel/highlight@npm:7.5.0" +"@babel/highlight@npm:^7.8.3": + version: 7.9.0 + resolution: "@babel/highlight@npm:7.9.0" dependencies: + "@babel/helper-validator-identifier": ^7.9.0 chalk: ^2.0.0 - esutils: ^2.0.2 js-tokens: ^4.0.0 - checksum: 2/6ebd3158bff06650822e5e99b0cf8872582f56431063befc93fb563b33796f11c1e12da8577e6dfa940ae9af7875577b7003bafd8af6685ffe7795cf8a2c0ba3 + checksum: 2/835b0af757651b17b0bb35b1f37b0b4e2ef4e4483c16418e452e77b6452573da1a4ab8f4439c1db2504e8601483155176c464c8a0631773de01baf5fb27bdfc2 languageName: node linkType: hard -"@babel/parser@npm:^7.0.0, @babel/parser@npm:^7.4.3, @babel/parser@npm:^7.7.4, @babel/parser@npm:^7.7.5": - version: 7.7.5 - resolution: "@babel/parser@npm:7.7.5" +"@babel/parser@npm:^7.0.0, @babel/parser@npm:^7.4.3, @babel/parser@npm:^7.8.6, @babel/parser@npm:^7.9.0": + version: 7.9.4 + resolution: "@babel/parser@npm:7.9.4" bin: parser: ./bin/babel-parser.js - checksum: 2/602bcd563a41b44bc4be0260ce8b633d88f13e8a595e79081f4e874d79f9f439b50be02ba9c0d3e0f25c46631c3707488c5d05caaa8843ef94323117900c5f56 + checksum: 2/43f6f63ba9ffd8c029ce8871dfde79f3fcd4ea103509f3cfca4f8c6dcd6a093f155872521a8d4bf543c4454b5d18ab78e0fef3263cb17d59f05a9cc5bfeaaa67 languageName: node linkType: hard -"@babel/plugin-proposal-async-generator-functions@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/plugin-proposal-async-generator-functions@npm:7.7.4" +"@babel/plugin-proposal-async-generator-functions@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-proposal-async-generator-functions@npm:7.8.3" dependencies: - "@babel/helper-plugin-utils": ^7.0.0 - "@babel/helper-remap-async-to-generator": ^7.7.4 - "@babel/plugin-syntax-async-generators": ^7.7.4 + "@babel/helper-plugin-utils": ^7.8.3 + "@babel/helper-remap-async-to-generator": ^7.8.3 + "@babel/plugin-syntax-async-generators": ^7.8.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2/8029854f0e59d7c7edff32e603d99dd6d84af0438d6c2dfe59d8c12b5e39cba32c7c22fefa585ed9fbd9e2aacd54a05b0f1b1981b5db4c8d00646d91a66a1b21 + checksum: 2/3862fab140e04ba0b529ea6b04ec6b1b656403510fedf173d3dd172ab0b034296e9eadac134516ee961bd711494d8a03b27dffd60c215f84069780245fa40021 languageName: node linkType: hard "@babel/plugin-proposal-class-properties@npm:^7.0.0": - version: 7.7.4 - resolution: "@babel/plugin-proposal-class-properties@npm:7.7.4" + version: 7.8.3 + resolution: "@babel/plugin-proposal-class-properties@npm:7.8.3" dependencies: - "@babel/helper-create-class-features-plugin": ^7.7.4 - "@babel/helper-plugin-utils": ^7.0.0 + "@babel/helper-create-class-features-plugin": ^7.8.3 + "@babel/helper-plugin-utils": ^7.8.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2/ac2ea6ccb75be2b333144b0c4f0cf1cd638b497389a357774035097a4371f9a61018e65a3b8b0c843e2c3fcf232efcda9f81b82b499e8bc208b1d5cff6b964c5 + checksum: 2/ef528e32c79026ee41a3e178c159d9a4b872bf86cb4937e42701dfcdafaa124491ed430b85cae8249bff2684e18185db033397d23e57fecf7ef7f2c3dc352e9b languageName: node linkType: hard "@babel/plugin-proposal-decorators@npm:^7.0.0": - version: 7.7.4 - resolution: "@babel/plugin-proposal-decorators@npm:7.7.4" + version: 7.8.3 + resolution: "@babel/plugin-proposal-decorators@npm:7.8.3" dependencies: - "@babel/helper-create-class-features-plugin": ^7.7.4 - "@babel/helper-plugin-utils": ^7.0.0 - "@babel/plugin-syntax-decorators": ^7.7.4 + "@babel/helper-create-class-features-plugin": ^7.8.3 + "@babel/helper-plugin-utils": ^7.8.3 + "@babel/plugin-syntax-decorators": ^7.8.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2/ba615086833b981403d444ae6a1e2290217e044a5ee11864c7d421c56d2be7274920bdedd4e70d099abedabbe48ec4d4034455996ef33a9e3d0befbe604302ef + checksum: 2/e4392d53e5d1f0df28cc14f361e13c402e6d5e91fbab811da62268b63c9d9eddf46191a07f095e55425f3ccbe9061a2e12dee802ba5658fd2ec12f2a3663ce58 languageName: node linkType: hard -"@babel/plugin-proposal-dynamic-import@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/plugin-proposal-dynamic-import@npm:7.7.4" +"@babel/plugin-proposal-dynamic-import@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-proposal-dynamic-import@npm:7.8.3" dependencies: - "@babel/helper-plugin-utils": ^7.0.0 - "@babel/plugin-syntax-dynamic-import": ^7.7.4 + "@babel/helper-plugin-utils": ^7.8.3 + "@babel/plugin-syntax-dynamic-import": ^7.8.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2/b2d49f339ab5a5c477e7e19973a5e815a0be777ed89829ad34e7e471207f2424980af061bb6ff45eebd4095345d1fc8623ab3ba09579402081a19a318bd40672 + checksum: 2/1b9790c7e53f4702521f6de613283b300bc3acff1cf56b65e9afcb6099cc996e2fdbe211dbf8e5e62fa30e089a42e8c147f4f9d0b7cb72909af65474d2346082 languageName: node linkType: hard -"@babel/plugin-proposal-json-strings@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/plugin-proposal-json-strings@npm:7.7.4" +"@babel/plugin-proposal-json-strings@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-proposal-json-strings@npm:7.8.3" dependencies: - "@babel/helper-plugin-utils": ^7.0.0 - "@babel/plugin-syntax-json-strings": ^7.7.4 + "@babel/helper-plugin-utils": ^7.8.3 + "@babel/plugin-syntax-json-strings": ^7.8.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2/e983b2f35aff2032623c91f1f158348b0c40115bb5fa2c2f4c02f21b12c8724e7e3c7f0a92cf73ef96f29047c0d45b7d0a2784a84f26e518073c8acca966c3a5 + checksum: 2/2dbea7146ec80000e037a708f65e0d6749a746fa09cc0095c90365259f119fd2edc4527a45fe93520afbff53121935e63a8f6a89d3226cc8c2fd81549cc6fe88 languageName: node linkType: hard -"@babel/plugin-proposal-object-rest-spread@npm:^7.0.0, @babel/plugin-proposal-object-rest-spread@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/plugin-proposal-object-rest-spread@npm:7.7.4" +"@babel/plugin-proposal-nullish-coalescing-operator@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-proposal-nullish-coalescing-operator@npm:7.8.3" dependencies: - "@babel/helper-plugin-utils": ^7.0.0 - "@babel/plugin-syntax-object-rest-spread": ^7.7.4 + "@babel/helper-plugin-utils": ^7.8.3 + "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2/9da4a73f00fbd5f7f186ba733c41774b32454a7d8815785f1bb50302bc6ddaffc2d67fcb61cc2616156ce8ae47cb7990da0d0345b1079da378277e77a3806f15 + checksum: 2/871e9a0b86e92054843ac4420d2166ad67eeeab23385985c0071eb1ff895e173108b40a2c89ef67f4adcab2fe60ad32bd1f8015ac059a2d3c982ff23080fcdf4 languageName: node linkType: hard -"@babel/plugin-proposal-optional-catch-binding@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/plugin-proposal-optional-catch-binding@npm:7.7.4" +"@babel/plugin-proposal-numeric-separator@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-proposal-numeric-separator@npm:7.8.3" dependencies: - "@babel/helper-plugin-utils": ^7.0.0 - "@babel/plugin-syntax-optional-catch-binding": ^7.7.4 + "@babel/helper-plugin-utils": ^7.8.3 + "@babel/plugin-syntax-numeric-separator": ^7.8.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2/24eb23e57af72844bd495373d809216234b9edcfa47bdba196a8246742038a1381d32be09f8298c04a89d942396ba75158477d8440d0f7cf306c536595480b6a + checksum: 2/dfc6ebd2718fd02859ad541f68167968261e0b1b8a1a12491bf7f8a0a2e04ef3633694898f4c71741d8f4740bcbe07f5a5022b1198c58f1a13d2b84591c8624c languageName: node linkType: hard -"@babel/plugin-proposal-unicode-property-regex@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/plugin-proposal-unicode-property-regex@npm:7.7.4" +"@babel/plugin-proposal-object-rest-spread@npm:^7.0.0, @babel/plugin-proposal-object-rest-spread@npm:^7.9.5": + version: 7.9.5 + resolution: "@babel/plugin-proposal-object-rest-spread@npm:7.9.5" dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.7.4 - "@babel/helper-plugin-utils": ^7.0.0 + "@babel/helper-plugin-utils": ^7.8.3 + "@babel/plugin-syntax-object-rest-spread": ^7.8.0 + "@babel/plugin-transform-parameters": ^7.9.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2/258bdcf3ac838bc525e72935c91776c420da081616916d90074b6b4232c9970d5a0d5861a5ddd338207b88544964e02c079288b4134537ab8a00e8be22ccdaed + checksum: 2/3394f47d931c066e4298975f8fd9cfea49306c3475ee0413834f1ade61cf9cec8ed6d22f2813cbfddaeae888d426676c8df0aedddc0caa0fdc480fcd95130003 languageName: node linkType: hard -"@babel/plugin-syntax-async-generators@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/plugin-syntax-async-generators@npm:7.7.4" +"@babel/plugin-proposal-optional-catch-binding@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-proposal-optional-catch-binding@npm:7.8.3" dependencies: - "@babel/helper-plugin-utils": ^7.0.0 + "@babel/helper-plugin-utils": ^7.8.3 + "@babel/plugin-syntax-optional-catch-binding": ^7.8.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2/3cbb07b29a1d6b6bfff552337fb6832620a0e7b3595a4119993a056ebffa1a0cc1da106117455fc4c90ea2fd67a280eae9d5b280a5acabb1611e33ef36040003 + checksum: 2/da4a1e392264a28da07246f864b238ea8a9bfa8a796e1652d285ca517f82d04fc3e1679b71f6dafef4da2056bdf320ca5f000c9fc5517c20d8970470d2d4b78a languageName: node linkType: hard -"@babel/plugin-syntax-decorators@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/plugin-syntax-decorators@npm:7.7.4" +"@babel/plugin-proposal-optional-chaining@npm:^7.9.0": + version: 7.9.0 + resolution: "@babel/plugin-proposal-optional-chaining@npm:7.9.0" dependencies: - "@babel/helper-plugin-utils": ^7.0.0 + "@babel/helper-plugin-utils": ^7.8.3 + "@babel/plugin-syntax-optional-chaining": ^7.8.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2/3629999bac2a5c1779552469d32481b17eed158b2341e023b86922ecdee256c18973c936430bc8c81810626767dae2e22b3a34f6184982fa90c7ff4f8c9d0338 + checksum: 2/0464df4847883659315e1ca0b57c5e502ddbdd1d7760850c0db608cc8ab7d0ca4c179baf23d044d08cc4f16418a939300673dd24fd70d9a791762af2dfbaff28 languageName: node linkType: hard -"@babel/plugin-syntax-dynamic-import@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/plugin-syntax-dynamic-import@npm:7.7.4" +"@babel/plugin-proposal-unicode-property-regex@npm:^7.4.4, @babel/plugin-proposal-unicode-property-regex@npm:^7.8.3": + version: 7.8.8 + resolution: "@babel/plugin-proposal-unicode-property-regex@npm:7.8.8" dependencies: - "@babel/helper-plugin-utils": ^7.0.0 + "@babel/helper-create-regexp-features-plugin": ^7.8.8 + "@babel/helper-plugin-utils": ^7.8.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2/843e9dc840cc21c16b06845c61dbc44d88eba43af3a19890c207da04cd9e12941177c9a4b8f07b46ccf64fb2ee717574083370f75bf069c59439bfa144687043 + checksum: 2/ba6a7c73f14a351947fdf1a8c3793e23a107274ba0b354d442db23b042c18c95b430320459a9640c19dc30fe1aa19d835353fd681959fc6e90cb3c14a6ec8283 languageName: node linkType: hard -"@babel/plugin-syntax-json-strings@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/plugin-syntax-json-strings@npm:7.7.4" +"@babel/plugin-syntax-async-generators@npm:^7.8.0": + version: 7.8.4 + resolution: "@babel/plugin-syntax-async-generators@npm:7.8.4" dependencies: - "@babel/helper-plugin-utils": ^7.0.0 + "@babel/helper-plugin-utils": ^7.8.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2/7771e780b7c88977d0142168cdaf2c64df1865229a91521c7ea04afba55126ead77badde01eed515106875dfe6629a26c6fb2d4eb985848ec553fc19e283a69e + checksum: 2/d811d9d365170b1f2ae7b7f73ad5607523405801a1c8291063b1d4f7f7a5ff06fb87c75cf46a5408d94b4749dd7565c04627fee450d7b127d1b0985734af76b7 languageName: node linkType: hard -"@babel/plugin-syntax-object-rest-spread@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/plugin-syntax-object-rest-spread@npm:7.7.4" +"@babel/plugin-syntax-decorators@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-decorators@npm:7.8.3" dependencies: - "@babel/helper-plugin-utils": ^7.0.0 + "@babel/helper-plugin-utils": ^7.8.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2/acf6ae79bb5d1e96efaa4ce4d69693b4f0e4bbe35befb08db9365e7249d0a2e41accb598cab8f6ef25cdccebbc8eaad58fa1b4250436176f17eebfb30e77bbf2 + checksum: 2/2894df70e4b081af215187c0587e22fe09d33df3841367f9e6e4672f067d91f8d583129b5617d50e9910eb9b7c09b86a2ffbcf9b2221283434b51b1e53dc306f languageName: node linkType: hard -"@babel/plugin-syntax-optional-catch-binding@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/plugin-syntax-optional-catch-binding@npm:7.7.4" +"@babel/plugin-syntax-dynamic-import@npm:^7.8.0": + version: 7.8.3 + resolution: "@babel/plugin-syntax-dynamic-import@npm:7.8.3" dependencies: - "@babel/helper-plugin-utils": ^7.0.0 + "@babel/helper-plugin-utils": ^7.8.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2/11cecb79d7b8fca1ac66fd1d151d6da8f934e33318038f05daa3cf7313791a19db76f05fafa4db0790f206c3ec3539b6b4c9fbc00d979e271542a4540bb6622b + checksum: 2/ad0a8ee743b5c3b353ca8c1ff3b7e3ca4a072f4249ebb01072e9adfbf18ad621eef981df64a2abee6056769e209d5833a6b5a4e8c65c8dd817b3a4dc59813207 languageName: node linkType: hard -"@babel/plugin-syntax-top-level-await@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/plugin-syntax-top-level-await@npm:7.7.4" +"@babel/plugin-syntax-json-strings@npm:^7.8.0": + version: 7.8.3 + resolution: "@babel/plugin-syntax-json-strings@npm:7.8.3" dependencies: - "@babel/helper-plugin-utils": ^7.0.0 + "@babel/helper-plugin-utils": ^7.8.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2/0be7706b67158eafa9e74beea47c415d0ae33d15d22355b88a0f827849ec38e46a132518bdcec4f0fa6f1d987b39b9fcbe87981474f5b2802699bc8b8ef36c36 + checksum: 2/7ab3a2332ff51b8b788ffd32d9fc54096e06cea2cf5daf99b16c64cb151bbb044b0aa68733cde0db77550851644cd2545ae896d9cd0cbb329a58dc5b2704eccd languageName: node linkType: hard -"@babel/plugin-syntax-typescript@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/plugin-syntax-typescript@npm:7.7.4" +"@babel/plugin-syntax-nullish-coalescing-operator@npm:^7.8.0": + version: 7.8.3 + resolution: "@babel/plugin-syntax-nullish-coalescing-operator@npm:7.8.3" dependencies: - "@babel/helper-plugin-utils": ^7.0.0 + "@babel/helper-plugin-utils": ^7.8.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2/45b158508bf7d534c914399307c5d8c5bb073c48be6fdc2a0991d04d4a07ef2e88ed8e6c80f3d7b4f5dfad7751bb2f83e51d281a14dcee1b71b007c67080f66d + checksum: 2/cc177ec41a2f0d74d45cc3a5dd614ca9e84c9e9e6db65051e553bbaf34906b755eee470066b438c89076f03b2da2908b1506ee7e06345b4de393663124243b73 languageName: node linkType: hard -"@babel/plugin-transform-arrow-functions@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/plugin-transform-arrow-functions@npm:7.7.4" +"@babel/plugin-syntax-numeric-separator@npm:^7.8.0, @babel/plugin-syntax-numeric-separator@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-numeric-separator@npm:7.8.3" dependencies: - "@babel/helper-plugin-utils": ^7.0.0 + "@babel/helper-plugin-utils": ^7.8.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2/8ef8e9c63c0df09b3e2bee6bd57a3877dd036941ecd3cf7a53bffd9dac64d06395db7ad52595f00df516552c76b207ea21b9f851e2e636b089f8de98bc93281c + checksum: 2/c38f5d45078c381a5af9c0448896a1d36388c45069b682d70f09faf83251a9dd9776ae1f7a5a116f6df94565c0326ca57c8068444f930307613a4d8c3be740ae languageName: node linkType: hard -"@babel/plugin-transform-async-to-generator@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/plugin-transform-async-to-generator@npm:7.7.4" +"@babel/plugin-syntax-object-rest-spread@npm:^7.8.0": + version: 7.8.3 + resolution: "@babel/plugin-syntax-object-rest-spread@npm:7.8.3" dependencies: - "@babel/helper-module-imports": ^7.7.4 - "@babel/helper-plugin-utils": ^7.0.0 - "@babel/helper-remap-async-to-generator": ^7.7.4 + "@babel/helper-plugin-utils": ^7.8.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2/bd3c4260a66d0edb6d9840c7287745ec7ce8011dfb76e41e661496d98d5fef6cca779ee2fe8142542fcae22527c6307d84c84923269064b73ec13f49347c52de + checksum: 2/7bfcc6c76f06c715bb942272bf53b2fbc38d6c98364abda9f67cbacc11b0ed5fcb2b4f0921705283197f9950609daa6f2dfa364081b34fadb91e3961e9961aab languageName: node linkType: hard -"@babel/plugin-transform-block-scoped-functions@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.7.4" +"@babel/plugin-syntax-optional-catch-binding@npm:^7.8.0": + version: 7.8.3 + resolution: "@babel/plugin-syntax-optional-catch-binding@npm:7.8.3" dependencies: - "@babel/helper-plugin-utils": ^7.0.0 + "@babel/helper-plugin-utils": ^7.8.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2/4db1293d17b3e12d6fcc7d3b4ffd1b97f4ce1d45d4b5f019d788da4432dc1367111feacd0b220d48ff969227e90e3aabf392954cafd4e58a046d4fd2f85885d7 + checksum: 2/d5ea1feac965c94632b43a70e96e515af76204d258183aeebeb9ec7c187933f923b6ec29a7f22e7043742b1a529f3cef3a45b6b18b235f115077397c2051dd7e languageName: node linkType: hard -"@babel/plugin-transform-block-scoping@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/plugin-transform-block-scoping@npm:7.7.4" +"@babel/plugin-syntax-optional-chaining@npm:^7.8.0": + version: 7.8.3 + resolution: "@babel/plugin-syntax-optional-chaining@npm:7.8.3" dependencies: - "@babel/helper-plugin-utils": ^7.0.0 + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 2/1c926f483df6892b008ca82b2f8fe41c26c38e26e77b6df936deee13547a199403c93e70fe5a9498b5859cb02b0ad0c8ed72b2379fa39ecdadfc76e17cd7d3d4 + languageName: node + linkType: hard + +"@babel/plugin-syntax-top-level-await@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-top-level-await@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 2/107723228cb753bdda62552bc5d0543448a983f7afc8fd616dfc52d4fdbe43225f0e7bc62773ee29212135454e69a7c00098fff4b64cf1e8655ab05d12788502 + languageName: node + linkType: hard + +"@babel/plugin-syntax-typescript@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-typescript@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 2/40151d5cf1a8d4f59444043ad9725bcaa6220601035076c9c1bb5a95117f35a260aacdbb2bd5f3cc6b1e82934b1a884ec8886851834d4ffa67bb45fb9cc58974 + languageName: node + linkType: hard + +"@babel/plugin-transform-arrow-functions@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-transform-arrow-functions@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 2/01f19b63ec73cd8f7816e8ec8c8deb4b0b8e38abc27ed8a2244cff3a999ff46d3c1168c52bde35cfb5b6498da878e58b44fe4c490304c5c01d8e31327f239122 + languageName: node + linkType: hard + +"@babel/plugin-transform-async-to-generator@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-transform-async-to-generator@npm:7.8.3" + dependencies: + "@babel/helper-module-imports": ^7.8.3 + "@babel/helper-plugin-utils": ^7.8.3 + "@babel/helper-remap-async-to-generator": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 2/45f5aed399b01b8ffdee72895ff30baff01451f6bb27e973b4dc75ee71204ae0f9fd75050cc32fce0166775d6653ac70de0b7c9635f03f8b324bea7c9f009309 + languageName: node + linkType: hard + +"@babel/plugin-transform-block-scoped-functions@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 2/0634e17a0250aef1e93e0ca4a29ec13040c4123448e8adaa53d0c1f0f96e1619ca2ac1136211117d75ef24f163693327b729a81372614ba5f3caa92dffd258aa + languageName: node + linkType: hard + +"@babel/plugin-transform-block-scoping@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-transform-block-scoping@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.3 lodash: ^4.17.13 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2/9dffe42c6cc7854825ec63f2c8c3e30c38dfeec5701c348fd23b42722bb0eeff78bcaff3c34da5a8c5f789b12b6ca42143891dafdb85a55bfc0f05f4d2d23882 + checksum: 2/06fbddd748eefa71bdc22dbaebb27f2e95560088831904e669c65c35cd2470f5a8617b15b2afb0816ad202896480c67604f63155847ff7fbd0c5716fcae9b01d languageName: node linkType: hard -"@babel/plugin-transform-classes@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/plugin-transform-classes@npm:7.7.4" +"@babel/plugin-transform-classes@npm:^7.9.5": + version: 7.9.5 + resolution: "@babel/plugin-transform-classes@npm:7.9.5" dependencies: - "@babel/helper-annotate-as-pure": ^7.7.4 - "@babel/helper-define-map": ^7.7.4 - "@babel/helper-function-name": ^7.7.4 - "@babel/helper-optimise-call-expression": ^7.7.4 - "@babel/helper-plugin-utils": ^7.0.0 - "@babel/helper-replace-supers": ^7.7.4 - "@babel/helper-split-export-declaration": ^7.7.4 + "@babel/helper-annotate-as-pure": ^7.8.3 + "@babel/helper-define-map": ^7.8.3 + "@babel/helper-function-name": ^7.9.5 + "@babel/helper-optimise-call-expression": ^7.8.3 + "@babel/helper-plugin-utils": ^7.8.3 + "@babel/helper-replace-supers": ^7.8.6 + "@babel/helper-split-export-declaration": ^7.8.3 globals: ^11.1.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2/61d2c1f1c069e9cbff54e66b207dd45011bcbfc72814d42e353c6fc127244fbb5b556cc2c6baaebe9efb4f3cffb14f2514f074d9d6767aadd99f85ec1d54557f + checksum: 2/2a646bd2d385d4b4b0edef8f4e72226a0f7eee338ae8aa1b4e226041be485ada593c726c1d36a81d84e2db23f1469be90b148f97c81a638d60382132c0c93d4f languageName: node linkType: hard -"@babel/plugin-transform-computed-properties@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/plugin-transform-computed-properties@npm:7.7.4" +"@babel/plugin-transform-computed-properties@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-transform-computed-properties@npm:7.8.3" dependencies: - "@babel/helper-plugin-utils": ^7.0.0 + "@babel/helper-plugin-utils": ^7.8.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2/2cb2f9e4b9654f14038a4347d22e6a28665d5471032ae9dad623b280dde0d8c60d3fafb1c9aa1f8aa9f6a5e2fa5aa970cb3021ca214cb85e40275873143495a7 + checksum: 2/6dcc7cc046e40b0cc455c61561e4811f7424bec396fa2db40e1b1dbd08fe595659f97513a3a339c83e6aea49e39ea4bd83033f6e3a6e745c4dd08e24c49ce681 languageName: node linkType: hard -"@babel/plugin-transform-destructuring@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/plugin-transform-destructuring@npm:7.7.4" +"@babel/plugin-transform-destructuring@npm:^7.9.5": + version: 7.9.5 + resolution: "@babel/plugin-transform-destructuring@npm:7.9.5" dependencies: - "@babel/helper-plugin-utils": ^7.0.0 + "@babel/helper-plugin-utils": ^7.8.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2/5516522d7255f760f1f7c81ccddc5f0e9ff4059ae87208dcc76850e6f7bd503c827545a945e57d894e07bab4c35622c3aa4eeef24530f889f4cc0c0ead87638c + checksum: 2/2a27b87508525a48042be126a0a7b2af35c64dbcd3dd168b7698cdd5c541b86f36aaf521d66c92e00b824485a9042acab90b17a2e4cf49f1863d18b6d4b696ac languageName: node linkType: hard -"@babel/plugin-transform-dotall-regex@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/plugin-transform-dotall-regex@npm:7.7.4" +"@babel/plugin-transform-dotall-regex@npm:^7.4.4, @babel/plugin-transform-dotall-regex@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-transform-dotall-regex@npm:7.8.3" dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.7.4 - "@babel/helper-plugin-utils": ^7.0.0 + "@babel/helper-create-regexp-features-plugin": ^7.8.3 + "@babel/helper-plugin-utils": ^7.8.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2/61ad8071cb3dfc6d792a54c4c8ee2e20fabd7f7e2bbc4a082e75e84e507b3f16ff636d9fc5b0c5ec1cb4c2de307b3e0c73e9a96e11f33a3ce79291bf00dc9434 + checksum: 2/cbe5994859413c6c9187f08a4620311ddb359a6fdf3da44a2e031be7e949d414478c945ee4b746830faa9ec66097197ec3fdfde537bd8601d052afcd2f2efa9d languageName: node linkType: hard -"@babel/plugin-transform-duplicate-keys@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/plugin-transform-duplicate-keys@npm:7.7.4" +"@babel/plugin-transform-duplicate-keys@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-transform-duplicate-keys@npm:7.8.3" dependencies: - "@babel/helper-plugin-utils": ^7.0.0 + "@babel/helper-plugin-utils": ^7.8.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2/5730fd05294e109003df2af49ed63bea1e194016010da51cf84e8f9cca18ab25e6851763cdf21e67c213bef46e7d5eeadb30ccd60f70745ae6eac0ebe4788edf + checksum: 2/534667495b3b6d00c1e7730eca0cdfb9f935dee5db8f0bf01d8905d21da133afeaa62cddffaa4f7cc49e12a6d0790646602c796f0182695fe4fd488664ad5275 languageName: node linkType: hard -"@babel/plugin-transform-exponentiation-operator@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.7.4" +"@babel/plugin-transform-exponentiation-operator@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.8.3" dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor": ^7.7.4 - "@babel/helper-plugin-utils": ^7.0.0 + "@babel/helper-builder-binary-assignment-operator-visitor": ^7.8.3 + "@babel/helper-plugin-utils": ^7.8.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2/e456d0993a482542ca77a571978ef558a4a6736766d329f0e8bda6186b7fc112dca1dabc7a38149787e3e7b98df4cd507340caeb8f63fb5fd5963192d951318a + checksum: 2/a01a2fce40bbf2ed66c7addc7c344b1fe604f82493a475b2c059b0d46f26a58e8afc4e6de7aba06f1675ed8f05001e0995176c29d0f99146f02e7342cadafaa2 languageName: node linkType: hard -"@babel/plugin-transform-for-of@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/plugin-transform-for-of@npm:7.7.4" +"@babel/plugin-transform-for-of@npm:^7.9.0": + version: 7.9.0 + resolution: "@babel/plugin-transform-for-of@npm:7.9.0" dependencies: - "@babel/helper-plugin-utils": ^7.0.0 + "@babel/helper-plugin-utils": ^7.8.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2/35124540fbca7b51c432c38165022c8b108850d1344370426a095c55a2bd148828d16465a4bd2e791a100eb9dc3380627cfbdf138edd61596202d54fa26713ce + checksum: 2/01a0579d9ca5ec5958e3bfa4e9f6412161febb4c8c20fa407fea1e29cba6014843e79f29d41df4a7c4fc3a18a983f23c3d190ecc333694a7b9da9f9c2c2995a8 languageName: node linkType: hard -"@babel/plugin-transform-function-name@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/plugin-transform-function-name@npm:7.7.4" +"@babel/plugin-transform-function-name@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-transform-function-name@npm:7.8.3" dependencies: - "@babel/helper-function-name": ^7.7.4 - "@babel/helper-plugin-utils": ^7.0.0 + "@babel/helper-function-name": ^7.8.3 + "@babel/helper-plugin-utils": ^7.8.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2/a06b97c021fd363d2d3a453e8d91481e9edd37caf58aec580fb580868a0cf853099e862a202e8e95c54af87554e69f6ef66d4ca2a2d9a93892f2e58878db7eb2 + checksum: 2/326ffd9e21c4fd0df4ac6ed7ed7e05f4e46f0dd56d9f2e3a0b154d36cf72f87ac1236ea28aaaad30709081029c5cf0b6654ca69e819122f65284d3763c5625de languageName: node linkType: hard -"@babel/plugin-transform-literals@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/plugin-transform-literals@npm:7.7.4" +"@babel/plugin-transform-literals@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-transform-literals@npm:7.8.3" dependencies: - "@babel/helper-plugin-utils": ^7.0.0 + "@babel/helper-plugin-utils": ^7.8.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2/2d95b1d02fae30f729a72ee6ecef956b3f473a013b1aed4f654e1c7187b55858c651b00b7190c2e5784c0b55296f47e9973dbd04a965be84206ef6b6fb04cc57 + checksum: 2/74d6b908a000a69dc61047c87e2998df56c25f7ec1de8d5d92dfc10814e49b5166aae1708addcb2412fb8f592cc5785424dda6650b09dd6b6d2a4bcd08ff86d2 languageName: node linkType: hard -"@babel/plugin-transform-member-expression-literals@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/plugin-transform-member-expression-literals@npm:7.7.4" +"@babel/plugin-transform-member-expression-literals@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-transform-member-expression-literals@npm:7.8.3" dependencies: - "@babel/helper-plugin-utils": ^7.0.0 + "@babel/helper-plugin-utils": ^7.8.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2/95a58e53ce83fcd927962aa647f9b060a8a2e10e9d0cd1aa2eb503097189af7856bc81ec1359ce8beafddd5566aafb74a12dbb3d678f3c65f08b521dcbc7e678 + checksum: 2/cddccf0a51bf6944cb6d540eb8384dfcc53251a9e7319f19725b70c47076041edfac9f4d210ce8a601c1ed5272efe1e47a148df314fff4e121b4d02ed4a48934 languageName: node linkType: hard -"@babel/plugin-transform-modules-amd@npm:^7.7.5": - version: 7.7.5 - resolution: "@babel/plugin-transform-modules-amd@npm:7.7.5" +"@babel/plugin-transform-modules-amd@npm:^7.9.0": + version: 7.9.0 + resolution: "@babel/plugin-transform-modules-amd@npm:7.9.0" dependencies: - "@babel/helper-module-transforms": ^7.7.5 - "@babel/helper-plugin-utils": ^7.0.0 + "@babel/helper-module-transforms": ^7.9.0 + "@babel/helper-plugin-utils": ^7.8.3 babel-plugin-dynamic-import-node: ^2.3.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2/450d5a7a4543ed9d531cc2c68681516f14f958c08edacd5759458cb1c62df188bc7f8ff64841dc0f3389422dab17ed3f733ebe7dc7e8cda0a784a68d6668c994 + checksum: 2/35ed6179df4c1febf361f19bbd760acd2446985a1b1024d06f3b44287fae87f723bc7be5fe3a1d564b80a6270486add6705488643390de13620edab05108d04a languageName: node linkType: hard -"@babel/plugin-transform-modules-commonjs@npm:^7.7.5": - version: 7.7.5 - resolution: "@babel/plugin-transform-modules-commonjs@npm:7.7.5" +"@babel/plugin-transform-modules-commonjs@npm:^7.9.0": + version: 7.9.0 + resolution: "@babel/plugin-transform-modules-commonjs@npm:7.9.0" dependencies: - "@babel/helper-module-transforms": ^7.7.5 - "@babel/helper-plugin-utils": ^7.0.0 - "@babel/helper-simple-access": ^7.7.4 + "@babel/helper-module-transforms": ^7.9.0 + "@babel/helper-plugin-utils": ^7.8.3 + "@babel/helper-simple-access": ^7.8.3 babel-plugin-dynamic-import-node: ^2.3.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2/d117699f25e5c54c2983d85ae51f6f1cb4baad09339b8ded85bbe2655881e0d8c3b0825b1a04cfb6dfc2b761abf3a1c96a8bc5353dbb3a002ab6166bae5dc2d5 + checksum: 2/4d8ebd736d52f05cda2fb38b8a1a3d17232cac95708d47e23e01f3d8b420d4464bc03444d9a54d5912b505babae1449609ed3c9edb86ea049e228a93b5f0b334 languageName: node linkType: hard -"@babel/plugin-transform-modules-systemjs@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/plugin-transform-modules-systemjs@npm:7.7.4" +"@babel/plugin-transform-modules-systemjs@npm:^7.9.0": + version: 7.9.0 + resolution: "@babel/plugin-transform-modules-systemjs@npm:7.9.0" dependencies: - "@babel/helper-hoist-variables": ^7.7.4 - "@babel/helper-plugin-utils": ^7.0.0 + "@babel/helper-hoist-variables": ^7.8.3 + "@babel/helper-module-transforms": ^7.9.0 + "@babel/helper-plugin-utils": ^7.8.3 babel-plugin-dynamic-import-node: ^2.3.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2/15ae42fbbfbbc8e9b81ae08f753e834fe02bcc2b303fc712352c57aa249e6518f2eca0cbd14a82d8deac1781d405b6e8f31cef908b92fb9f22b34cb04551c241 + checksum: 2/0bfd6fe55d34ccf0bc2692c0f43bf79c7db761f55f61fbe6a94b64ab33ab1bca11559a0089b43e919f6e70687b9c1dc8f84cb1e7c6314d4f9822364a7521b475 languageName: node linkType: hard -"@babel/plugin-transform-modules-umd@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/plugin-transform-modules-umd@npm:7.7.4" +"@babel/plugin-transform-modules-umd@npm:^7.9.0": + version: 7.9.0 + resolution: "@babel/plugin-transform-modules-umd@npm:7.9.0" dependencies: - "@babel/helper-module-transforms": ^7.7.4 - "@babel/helper-plugin-utils": ^7.0.0 + "@babel/helper-module-transforms": ^7.9.0 + "@babel/helper-plugin-utils": ^7.8.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2/bbe64556b05e78101998c28a13f9e53d7d25b53e232d7b0a1ad3eb58149cf7db30bb808a68831922188bbfde7795793b73f93a29a280e03906b45c78299d410a + checksum: 2/2cd650eb42d48619540cc7ebbd75be37904ddd0ab6f46d93fb76f89017793f00f2e48be1095dd7aa7be1d95672fddb14d8f5e4c6214f9c343ba4081c54472bbb languageName: node linkType: hard -"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.7.4" +"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.8.3" dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.7.4 + "@babel/helper-create-regexp-features-plugin": ^7.8.3 peerDependencies: "@babel/core": ^7.0.0 - checksum: 2/93c10d8b95b57df1f89b2f38d3fa502d9490337af842264202da5449ee1538613598593c3117adb98349604ec52d319f1411e65da327d7cd05e64b7389618c57 + checksum: 2/d1a166870ac391452aaac3fa72c610ec44834d74e77648ee13ef03288a1f686803054f37cea5559408c9ecd6bfe76a10b9950eba30073c7f92e118bfb80a0a60 languageName: node linkType: hard -"@babel/plugin-transform-new-target@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/plugin-transform-new-target@npm:7.7.4" +"@babel/plugin-transform-new-target@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-transform-new-target@npm:7.8.3" dependencies: - "@babel/helper-plugin-utils": ^7.0.0 + "@babel/helper-plugin-utils": ^7.8.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2/090bc667598b8a0063a58b6a950b5aa552eba4a3afa8b7810acdf41c0430e6cfec018c77249a574dd6097894898663bcc727d4d7949e9178d8d883018ae4cbf1 + checksum: 2/6e106b87e4402a1236698efa4f9bb0a4a5013200a5edca9b046016044f4937ef132aadd662304bd723dd0837a155a10660017d488798ca4abf956a5035bde6aa languageName: node linkType: hard -"@babel/plugin-transform-object-super@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/plugin-transform-object-super@npm:7.7.4" +"@babel/plugin-transform-object-super@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-transform-object-super@npm:7.8.3" dependencies: - "@babel/helper-plugin-utils": ^7.0.0 - "@babel/helper-replace-supers": ^7.7.4 + "@babel/helper-plugin-utils": ^7.8.3 + "@babel/helper-replace-supers": ^7.8.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2/f801920515182f6e615e154176e22394a0a829d7d3b16b10633d994cf59e81d23646835460952e50b9898cfbbca2a5a918323e227c87de3b28b19c09083bcf8e + checksum: 2/dd7c5dfd7a5538b4b4375f642f0aaa01327615614b460531fe00e074eda10515b09e3ccf7ff050b3f44cda4cdd7839863f54b8d0269c63947e573bcd2f53f63e languageName: node linkType: hard -"@babel/plugin-transform-parameters@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/plugin-transform-parameters@npm:7.7.4" +"@babel/plugin-transform-parameters@npm:^7.9.5": + version: 7.9.5 + resolution: "@babel/plugin-transform-parameters@npm:7.9.5" dependencies: - "@babel/helper-call-delegate": ^7.7.4 - "@babel/helper-get-function-arity": ^7.7.4 - "@babel/helper-plugin-utils": ^7.0.0 + "@babel/helper-get-function-arity": ^7.8.3 + "@babel/helper-plugin-utils": ^7.8.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2/6e81d863de62eeb74e4594f4f87bb6c14f50f01b0c325724d83e7420231f34974c850e9b3806db4bfdf3d9feb54ff1da19b2a22d6640d985568cea4d9efc6eb0 + checksum: 2/0ec5d7a6ced531943c62d8915e38aaa5169d979e6979942c8c7dcdc9fe12eb0b168d14751bd8d3382f63a3d40fd2667959fdbe3b51068a88b07f5254a8aa5ffd languageName: node linkType: hard -"@babel/plugin-transform-property-literals@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/plugin-transform-property-literals@npm:7.7.4" +"@babel/plugin-transform-property-literals@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-transform-property-literals@npm:7.8.3" dependencies: - "@babel/helper-plugin-utils": ^7.0.0 + "@babel/helper-plugin-utils": ^7.8.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2/6f19e83928e46cac6b717a3b3da21474f9c22433e5c9cb1d96311f5a43995f8c1faed16ae3c353a498faa3b7a824ca69b355269d0f379e54a04287aecd2a58fb + checksum: 2/375dfa7b1b0a42bb994f6daff8328fbb4864038507d3642a116af919d90938f077b6c612823bab252d64cc9ec6f149e43c35f0ad0a0d88d7304186a1879bf321 languageName: node linkType: hard -"@babel/plugin-transform-regenerator@npm:^7.7.5": - version: 7.7.5 - resolution: "@babel/plugin-transform-regenerator@npm:7.7.5" +"@babel/plugin-transform-regenerator@npm:^7.8.7": + version: 7.8.7 + resolution: "@babel/plugin-transform-regenerator@npm:7.8.7" dependencies: - regenerator-transform: ^0.14.0 + regenerator-transform: ^0.14.2 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2/774cb6c12f8cc0508e959bdb2658f719011d64a7504f320ea34881e966d4fe448b45cef0ea396228ef4a9ff2ad93d1bdd456ed8b90c9909765738660f72be90b + checksum: 2/02b3dea6d11fb2b6e697c65100b3582285ce045d6dd3962125594b309c3b76071ef1b84589eed94e5d60934043d3dc4818e2c9124b7b33b56be980252db08959 languageName: node linkType: hard -"@babel/plugin-transform-reserved-words@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/plugin-transform-reserved-words@npm:7.7.4" +"@babel/plugin-transform-reserved-words@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-transform-reserved-words@npm:7.8.3" dependencies: - "@babel/helper-plugin-utils": ^7.0.0 + "@babel/helper-plugin-utils": ^7.8.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2/a9b2910a68c06e1d743a89a92d3b478a25d933e98bfe752e4158ca4dea1510e74bc9528c3e0d0b29a1f9e7be73275b27b6d6a292c2ac7a76994c16b07a55ff43 + checksum: 2/53efc218c878a88fd14f37584d7f69b92d5482fdaf4a1f88eaecff55f308c65032f58a4a8af1b174606d0b76c5792a524262c22bab0379c62264b715d808c46d languageName: node linkType: hard "@babel/plugin-transform-runtime@npm:^7.0.0": - version: 7.7.6 - resolution: "@babel/plugin-transform-runtime@npm:7.7.6" + version: 7.9.0 + resolution: "@babel/plugin-transform-runtime@npm:7.9.0" dependencies: - "@babel/helper-module-imports": ^7.7.4 - "@babel/helper-plugin-utils": ^7.0.0 + "@babel/helper-module-imports": ^7.8.3 + "@babel/helper-plugin-utils": ^7.8.3 resolve: ^1.8.1 semver: ^5.5.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2/944cc00b5224c38662169d63ede2a4e784f6d4f6ed471c0e60e88b627c013acffea206a0064720e03b45d21c7c30ff2a07c3504406a0b9be7176fc9bda9b5a99 + checksum: 2/b1cb5c42aede266d7a4f88474e3f6fc6e61a03daae16da71123bba7c8be2556b18b764366ae8f7b81f7c3867c801c4b597fd9c7f0b1eaf8b03626cf821f614e7 languageName: node linkType: hard -"@babel/plugin-transform-shorthand-properties@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/plugin-transform-shorthand-properties@npm:7.7.4" +"@babel/plugin-transform-shorthand-properties@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-transform-shorthand-properties@npm:7.8.3" dependencies: - "@babel/helper-plugin-utils": ^7.0.0 + "@babel/helper-plugin-utils": ^7.8.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2/9cc11a992d96cbe534a69625544457445a5d8952705bf88580cdc7bd634c2325c65f287ca3c7734823e51ef46a07c07bb254948c3e393844ba493950b2a9b7ab + checksum: 2/13e688cc4f8984e3aced780389488eb07adae89022be75806210cf095fbe3022d3f41c3ab85859009b0c61e3bd7c554d01287a6d49bdea97acc185a4355a0da7 languageName: node linkType: hard -"@babel/plugin-transform-spread@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/plugin-transform-spread@npm:7.7.4" +"@babel/plugin-transform-spread@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-transform-spread@npm:7.8.3" dependencies: - "@babel/helper-plugin-utils": ^7.0.0 + "@babel/helper-plugin-utils": ^7.8.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2/7d8a935261fd15e3d31c8f0abfba4c18e0d7d998d0529618dbe7e45f7f8db77cf35397aca5b4120d32c244aa5a1f1ea2c05ac5dd26ca546475401c13a052cf7f + checksum: 2/bfd9d66a3737bac8bd3fefcae26b3aa6d9a1617b5ad78299f9507a15709261733891ef36072abd6efe38ba03a99094e514f7ebd01e6b93954d92a12b0c8ba726 languageName: node linkType: hard -"@babel/plugin-transform-sticky-regex@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/plugin-transform-sticky-regex@npm:7.7.4" +"@babel/plugin-transform-sticky-regex@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-transform-sticky-regex@npm:7.8.3" dependencies: - "@babel/helper-plugin-utils": ^7.0.0 - "@babel/helper-regex": ^7.0.0 + "@babel/helper-plugin-utils": ^7.8.3 + "@babel/helper-regex": ^7.8.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2/db2831c52e885df4edbb41b4271b16e299aa8b81d9796aac132df949d56f4357addc7a474f051c5bd0c0ad7cb404af77a6d8a1b9baee07baab282cfd9bc076d6 + checksum: 2/879457c88045fbd67db0140a4e8a048c7d248d0351554a43ee376d36754cc2ed109a9a3e0136da8ce8b202eab3e559e6c1f9e1fd4c89d4800b93577c48255436 languageName: node linkType: hard -"@babel/plugin-transform-template-literals@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/plugin-transform-template-literals@npm:7.7.4" +"@babel/plugin-transform-template-literals@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-transform-template-literals@npm:7.8.3" dependencies: - "@babel/helper-annotate-as-pure": ^7.7.4 - "@babel/helper-plugin-utils": ^7.0.0 + "@babel/helper-annotate-as-pure": ^7.8.3 + "@babel/helper-plugin-utils": ^7.8.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2/e12225c441c97fe28be2f9bd114040b744f818e16d6c27d641a279ed498672c40420224b227e0480339c711c6fa9a3266f7ea5ead811dfdafbf0208af594c967 + checksum: 2/f95a02e578fe4c36d47a697589df97e0d847e26e11ddc464ad875ee068266b82aa37b0fe6b1b9c429e5eb9236fc98309f4f10cbff166e9395cd5fcf0f9ded980 languageName: node linkType: hard -"@babel/plugin-transform-typeof-symbol@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/plugin-transform-typeof-symbol@npm:7.7.4" +"@babel/plugin-transform-typeof-symbol@npm:^7.8.4": + version: 7.8.4 + resolution: "@babel/plugin-transform-typeof-symbol@npm:7.8.4" dependencies: - "@babel/helper-plugin-utils": ^7.0.0 + "@babel/helper-plugin-utils": ^7.8.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2/4f44874f0b333cf7d33d37b9a68b5e05ff841f8be1efe896f4d043fe4249e45a9e7ec9bf4f9bc47919ee772733b14dae841d156b6b24f1e979550817c836cd52 + checksum: 2/5effc0b095a4ba7d179a291ce4f87554200cf031d819e8971d7e13341ba57d72324d1c7c76d862515e505d9772227f90426700542f1609233038d3eda7583f0d languageName: node linkType: hard -"@babel/plugin-transform-typescript@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/plugin-transform-typescript@npm:7.7.4" +"@babel/plugin-transform-typescript@npm:^7.9.0": + version: 7.9.4 + resolution: "@babel/plugin-transform-typescript@npm:7.9.4" dependencies: - "@babel/helper-create-class-features-plugin": ^7.7.4 - "@babel/helper-plugin-utils": ^7.0.0 - "@babel/plugin-syntax-typescript": ^7.7.4 + "@babel/helper-create-class-features-plugin": ^7.8.3 + "@babel/helper-plugin-utils": ^7.8.3 + "@babel/plugin-syntax-typescript": ^7.8.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2/78ab4d97b7e115ba7fba5cec9d5c97b517f515aad3650629b36467b3221571258caf012f6a4af4ada0ba33eaee157d164d805622eebb7287414c1905951084f2 + checksum: 2/b722f5b376406313728158ced4e9e074f184e6fff242d90a8a8bfc2fadaf265b4b09d2d39ebb6c16b336454a57e782d2a47f2aa9deeba3959ba61435f972c94e languageName: node linkType: hard -"@babel/plugin-transform-unicode-regex@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/plugin-transform-unicode-regex@npm:7.7.4" +"@babel/plugin-transform-unicode-regex@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-transform-unicode-regex@npm:7.8.3" dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.7.4 - "@babel/helper-plugin-utils": ^7.0.0 + "@babel/helper-create-regexp-features-plugin": ^7.8.3 + "@babel/helper-plugin-utils": ^7.8.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2/6c7f11c7832850cd075b8e2e02140528c67972d97943c225daba8b5f7420164eb3d21d7d7f47d65178e3991d7f208ff3ba023b73d8918c9800aff60ba9f4ec63 + checksum: 2/db9912d46cbe7db34cbff6137cd7edee63e11b7644d20fb699edf9626454d411512a11bd95489f3de96e97eb21e99a726d12cc0f834d87ec0b2a96050aa2a2a3 languageName: node linkType: hard "@babel/preset-env@npm:^7.0.0": - version: 7.7.6 - resolution: "@babel/preset-env@npm:7.7.6" - dependencies: - "@babel/helper-module-imports": ^7.7.4 - "@babel/helper-plugin-utils": ^7.0.0 - "@babel/plugin-proposal-async-generator-functions": ^7.7.4 - "@babel/plugin-proposal-dynamic-import": ^7.7.4 - "@babel/plugin-proposal-json-strings": ^7.7.4 - "@babel/plugin-proposal-object-rest-spread": ^7.7.4 - "@babel/plugin-proposal-optional-catch-binding": ^7.7.4 - "@babel/plugin-proposal-unicode-property-regex": ^7.7.4 - "@babel/plugin-syntax-async-generators": ^7.7.4 - "@babel/plugin-syntax-dynamic-import": ^7.7.4 - "@babel/plugin-syntax-json-strings": ^7.7.4 - "@babel/plugin-syntax-object-rest-spread": ^7.7.4 - "@babel/plugin-syntax-optional-catch-binding": ^7.7.4 - "@babel/plugin-syntax-top-level-await": ^7.7.4 - "@babel/plugin-transform-arrow-functions": ^7.7.4 - "@babel/plugin-transform-async-to-generator": ^7.7.4 - "@babel/plugin-transform-block-scoped-functions": ^7.7.4 - "@babel/plugin-transform-block-scoping": ^7.7.4 - "@babel/plugin-transform-classes": ^7.7.4 - "@babel/plugin-transform-computed-properties": ^7.7.4 - "@babel/plugin-transform-destructuring": ^7.7.4 - "@babel/plugin-transform-dotall-regex": ^7.7.4 - "@babel/plugin-transform-duplicate-keys": ^7.7.4 - "@babel/plugin-transform-exponentiation-operator": ^7.7.4 - "@babel/plugin-transform-for-of": ^7.7.4 - "@babel/plugin-transform-function-name": ^7.7.4 - "@babel/plugin-transform-literals": ^7.7.4 - "@babel/plugin-transform-member-expression-literals": ^7.7.4 - "@babel/plugin-transform-modules-amd": ^7.7.5 - "@babel/plugin-transform-modules-commonjs": ^7.7.5 - "@babel/plugin-transform-modules-systemjs": ^7.7.4 - "@babel/plugin-transform-modules-umd": ^7.7.4 - "@babel/plugin-transform-named-capturing-groups-regex": ^7.7.4 - "@babel/plugin-transform-new-target": ^7.7.4 - "@babel/plugin-transform-object-super": ^7.7.4 - "@babel/plugin-transform-parameters": ^7.7.4 - "@babel/plugin-transform-property-literals": ^7.7.4 - "@babel/plugin-transform-regenerator": ^7.7.5 - "@babel/plugin-transform-reserved-words": ^7.7.4 - "@babel/plugin-transform-shorthand-properties": ^7.7.4 - "@babel/plugin-transform-spread": ^7.7.4 - "@babel/plugin-transform-sticky-regex": ^7.7.4 - "@babel/plugin-transform-template-literals": ^7.7.4 - "@babel/plugin-transform-typeof-symbol": ^7.7.4 - "@babel/plugin-transform-unicode-regex": ^7.7.4 - "@babel/types": ^7.7.4 - browserslist: ^4.6.0 - core-js-compat: ^3.4.7 + version: 7.9.5 + resolution: "@babel/preset-env@npm:7.9.5" + dependencies: + "@babel/compat-data": ^7.9.0 + "@babel/helper-compilation-targets": ^7.8.7 + "@babel/helper-module-imports": ^7.8.3 + "@babel/helper-plugin-utils": ^7.8.3 + "@babel/plugin-proposal-async-generator-functions": ^7.8.3 + "@babel/plugin-proposal-dynamic-import": ^7.8.3 + "@babel/plugin-proposal-json-strings": ^7.8.3 + "@babel/plugin-proposal-nullish-coalescing-operator": ^7.8.3 + "@babel/plugin-proposal-numeric-separator": ^7.8.3 + "@babel/plugin-proposal-object-rest-spread": ^7.9.5 + "@babel/plugin-proposal-optional-catch-binding": ^7.8.3 + "@babel/plugin-proposal-optional-chaining": ^7.9.0 + "@babel/plugin-proposal-unicode-property-regex": ^7.8.3 + "@babel/plugin-syntax-async-generators": ^7.8.0 + "@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.8.0 + "@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.8.3 + "@babel/plugin-transform-arrow-functions": ^7.8.3 + "@babel/plugin-transform-async-to-generator": ^7.8.3 + "@babel/plugin-transform-block-scoped-functions": ^7.8.3 + "@babel/plugin-transform-block-scoping": ^7.8.3 + "@babel/plugin-transform-classes": ^7.9.5 + "@babel/plugin-transform-computed-properties": ^7.8.3 + "@babel/plugin-transform-destructuring": ^7.9.5 + "@babel/plugin-transform-dotall-regex": ^7.8.3 + "@babel/plugin-transform-duplicate-keys": ^7.8.3 + "@babel/plugin-transform-exponentiation-operator": ^7.8.3 + "@babel/plugin-transform-for-of": ^7.9.0 + "@babel/plugin-transform-function-name": ^7.8.3 + "@babel/plugin-transform-literals": ^7.8.3 + "@babel/plugin-transform-member-expression-literals": ^7.8.3 + "@babel/plugin-transform-modules-amd": ^7.9.0 + "@babel/plugin-transform-modules-commonjs": ^7.9.0 + "@babel/plugin-transform-modules-systemjs": ^7.9.0 + "@babel/plugin-transform-modules-umd": ^7.9.0 + "@babel/plugin-transform-named-capturing-groups-regex": ^7.8.3 + "@babel/plugin-transform-new-target": ^7.8.3 + "@babel/plugin-transform-object-super": ^7.8.3 + "@babel/plugin-transform-parameters": ^7.9.5 + "@babel/plugin-transform-property-literals": ^7.8.3 + "@babel/plugin-transform-regenerator": ^7.8.7 + "@babel/plugin-transform-reserved-words": ^7.8.3 + "@babel/plugin-transform-shorthand-properties": ^7.8.3 + "@babel/plugin-transform-spread": ^7.8.3 + "@babel/plugin-transform-sticky-regex": ^7.8.3 + "@babel/plugin-transform-template-literals": ^7.8.3 + "@babel/plugin-transform-typeof-symbol": ^7.8.4 + "@babel/plugin-transform-unicode-regex": ^7.8.3 + "@babel/preset-modules": ^0.1.3 + "@babel/types": ^7.9.5 + browserslist: ^4.9.1 + core-js-compat: ^3.6.2 invariant: ^2.2.2 - js-levenshtein: ^1.1.3 + levenary: ^1.1.1 semver: ^5.5.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2/a6247f06b4aa4969e11e72530c58c1b8224186f38568c83539280286711455eb288cf76b501905bd1859810fffc9f61e240cb5d9a0ab638f073aca0cb720cc3b + checksum: 2/e7638b572bc70647375c5ec13745325175a9f9ff22616337ebb86c7c6d676966e44931cb93eb84b1d48fdbbc813567cafd687d482c500727467cb277466ab731 languageName: node linkType: hard -"@babel/preset-typescript@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/preset-typescript@npm:7.7.4" +"@babel/preset-modules@npm:^0.1.3": + version: 0.1.3 + resolution: "@babel/preset-modules@npm:0.1.3" dependencies: "@babel/helper-plugin-utils": ^7.0.0 - "@babel/plugin-transform-typescript": ^7.7.4 + "@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 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2/ef1e9257908b400fcbcd47e760c3a98c4dfb155d7442d8b0d3e34915151bb74bda16cac651a80d580c755955a5b5f09e2c19a3841192a7bed31b41eb4642be21 + checksum: 2/00e2bc940fed037e7a3d79d05f7c5fcf5dfc00ce1ad5f9d443b0e1241fbb17291eeee1ae13e1142d721f427f571e3af6000d09a2f84881755a48e6ef6222e82f + languageName: node + linkType: hard + +"@babel/preset-typescript@npm:^7.7.4": + version: 7.9.0 + resolution: "@babel/preset-typescript@npm:7.9.0" + dependencies: + "@babel/helper-plugin-utils": ^7.8.3 + "@babel/plugin-transform-typescript": ^7.9.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 2/fb5bbcd845fd282349981770b97e3a6220bd1f9bdb9e95977ea042ea22d689a07d189881eb4fb8c52e964022a7f9160becfc45203e3269ca201fc7cd80b9b28d languageName: node linkType: hard "@babel/register@npm:^7.0.0": - version: 7.7.4 - resolution: "@babel/register@npm:7.7.4" + version: 7.9.0 + resolution: "@babel/register@npm:7.9.0" dependencies: find-cache-dir: ^2.0.0 lodash: ^4.17.13 @@ -989,92 +1109,92 @@ __metadata: source-map-support: ^0.5.16 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2/a492ef26e92ff89c9da2442ca5520c47f1e554b9e422dec299d90e633e35b6bb63e21abd0dde380b31b57e37c5e9aecf6353d7b2a3e3afe45fd0359b5c86c2b3 + checksum: 2/ef8e95b9a40e9bcca200f9c750a98ab825a23181fc5f36d39746d8254f8605b1ea4ab5e26f91220b14ce1b7ee9051237aebf1d49f38d5606bcc86da1a7d78bca languageName: node linkType: hard "@babel/runtime-corejs2@npm:^7.0.0": - version: 7.7.6 - resolution: "@babel/runtime-corejs2@npm:7.7.6" + version: 7.9.2 + resolution: "@babel/runtime-corejs2@npm:7.9.2" dependencies: core-js: ^2.6.5 - regenerator-runtime: ^0.13.2 - checksum: 2/a499f57399ce1e164501a13986ff4d82e9922f5aa329ede5714eee68400220ef0aec901847b4870a3e9fe537a1253fa8e6430e1f4a55b8fc666cef674a952ee0 + regenerator-runtime: ^0.13.4 + checksum: 2/af419f4fe28666dd38fd62c3feb58c0e1f351043049b1726f7610c3a6b7bb46bfa82c1168873d1bf70da94d5fd65826a96c76eb31babf4ea64f7668d3120aa78 languageName: node linkType: hard -"@babel/runtime@npm:^7.7.6": - version: 7.7.6 - resolution: "@babel/runtime@npm:7.7.6" +"@babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.4": + version: 7.9.2 + resolution: "@babel/runtime@npm:7.9.2" dependencies: - regenerator-runtime: ^0.13.2 - checksum: 2/52c0fa4913b92d8e9d40c04bb0894b81123465dd56e08a2e347458c3b5556dc1898b842e75d8d5df084761c043361c0370596c4957323120c801655a816f1636 + regenerator-runtime: ^0.13.4 + checksum: 2/97d68f2a7b260c3ddfca5c26174c7897404344883716a57ae46598c07205a511652cddcdc16b7fbd18420ab1a3691e53926c09482de9aa6d51b1444f19ef8024 languageName: node linkType: hard -"@babel/template@npm:^7.4.0, @babel/template@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/template@npm:7.7.4" +"@babel/template@npm:^7.4.0, @babel/template@npm:^7.8.3, @babel/template@npm:^7.8.6": + version: 7.8.6 + resolution: "@babel/template@npm:7.8.6" dependencies: - "@babel/code-frame": ^7.0.0 - "@babel/parser": ^7.7.4 - "@babel/types": ^7.7.4 - checksum: 2/58c6156aa759a2c95dc316d6ed3d198617ea785d7334dc22472639487ceda57b7802ccee21b4c61b92b3746e79a9803198f20f9cfd9e70ad03ddf7fbbc488f8c + "@babel/code-frame": ^7.8.3 + "@babel/parser": ^7.8.6 + "@babel/types": ^7.8.6 + checksum: 2/056a36af0b7988fcbb457fe4f9225581c4769e6c949fae0103cb59e4012e9a7d8f4eb263fcd3fce454e41ca616a70a15ef3234dede3b6b4c09bdc026d3db7e7f languageName: node linkType: hard -"@babel/traverse@npm:^7.0.0, @babel/traverse@npm:^7.4.3, @babel/traverse@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/traverse@npm:7.7.4" +"@babel/traverse@npm:^7.0.0, @babel/traverse@npm:^7.4.3, @babel/traverse@npm:^7.8.3, @babel/traverse@npm:^7.8.6, @babel/traverse@npm:^7.9.0": + version: 7.9.5 + resolution: "@babel/traverse@npm:7.9.5" dependencies: - "@babel/code-frame": ^7.5.5 - "@babel/generator": ^7.7.4 - "@babel/helper-function-name": ^7.7.4 - "@babel/helper-split-export-declaration": ^7.7.4 - "@babel/parser": ^7.7.4 - "@babel/types": ^7.7.4 + "@babel/code-frame": ^7.8.3 + "@babel/generator": ^7.9.5 + "@babel/helper-function-name": ^7.9.5 + "@babel/helper-split-export-declaration": ^7.8.3 + "@babel/parser": ^7.9.0 + "@babel/types": ^7.9.5 debug: ^4.1.0 globals: ^11.1.0 lodash: ^4.17.13 - checksum: 2/d9e3938b2d2328fe9a2820712a7f7c4509d72375a31dd09f223424a10b4493bedff227b28cbcc9c3fd425c5ed25bd26eef08b1d4bb11a975e274ba24f9e08b80 + checksum: 2/a5c7e0482c9c09af188c128b4c3bc75f902d6a7d5b0b4b795a141350b7b63b8f9745ec3db220e4f48f7132f2de87fa7c800351366f27aafa84b218ca0b80133e languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.0.0-beta.49, @babel/types@npm:^7.4.0, @babel/types@npm:^7.7.4": - version: 7.7.4 - resolution: "@babel/types@npm:7.7.4" +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.0.0-beta.49, @babel/types@npm:^7.4.0, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3, @babel/types@npm:^7.8.6, @babel/types@npm:^7.9.0, @babel/types@npm:^7.9.5": + version: 7.9.5 + resolution: "@babel/types@npm:7.9.5" dependencies: - esutils: ^2.0.2 + "@babel/helper-validator-identifier": ^7.9.5 lodash: ^4.17.13 to-fast-properties: ^2.0.0 - checksum: 2/b908173b36d7a13c0da12523d1a617eb5133373835f860027814776fd618cc30a6a5c568ed6b3d0e0b0e515f16e4d50e1678acc7234914ca8498565a69aa9e69 + checksum: 2/7ee3df68a2931907ba2de53efa49040ec21d15ca2947f39c2c042f490785db4c998c239fda10937f3a5aef99f1340eb6fb24c09bc83d926a9ba25b6fbc4b1380 languageName: node linkType: hard -"@nodelib/fs.scandir@npm:2.1.1": - version: 2.1.1 - resolution: "@nodelib/fs.scandir@npm:2.1.1" +"@nodelib/fs.scandir@npm:2.1.3": + version: 2.1.3 + resolution: "@nodelib/fs.scandir@npm:2.1.3" dependencies: - "@nodelib/fs.stat": 2.0.1 + "@nodelib/fs.stat": 2.0.3 run-parallel: ^1.1.9 - checksum: 2/9e8edf8a6ae20921b81f1240e3f27761ce2eb56607bb3603ec6c1a9685f9525c15bc4d8244eb3498fd652cef6076cb4f9fa815c5ede90f18dbc5a0f502c4aab6 + checksum: 2/759e427788434bd8744e0cff0ae4fb9feccc3cd464939c866c3f9176cf4ae957edcba9659f7dcade8ccba01b0e0e35b1b39de245a83462d9b32c438ff16ec686 languageName: node linkType: hard -"@nodelib/fs.stat@npm:2.0.1, @nodelib/fs.stat@npm:^2.0.1": - version: 2.0.1 - resolution: "@nodelib/fs.stat@npm:2.0.1" - checksum: 2/9e04e42e076ee6584cc49cce4d0de1256dc7893c7c894431885be2fff0a90352dba421fb54beffe9ba93b050c680f38a868275a2d9cd8c8a1202af377a19e911 +"@nodelib/fs.stat@npm:2.0.3, @nodelib/fs.stat@npm:^2.0.2": + version: 2.0.3 + resolution: "@nodelib/fs.stat@npm:2.0.3" + checksum: 2/1e679448450c5de72817c33876119b61c8a7eafc1494d2a43b831fc250e889f48bad0696f45019bd8cefdbb2162f44e5a4b28c841b7d65fd6342d20101574f64 languageName: node linkType: hard -"@nodelib/fs.walk@npm:^1.2.1": - version: 1.2.2 - resolution: "@nodelib/fs.walk@npm:1.2.2" +"@nodelib/fs.walk@npm:^1.2.3": + version: 1.2.4 + resolution: "@nodelib/fs.walk@npm:1.2.4" dependencies: - "@nodelib/fs.scandir": 2.1.1 + "@nodelib/fs.scandir": 2.1.3 fastq: ^1.6.0 - checksum: 2/002419e125ef34d04a0814d1f7fa2b45914cc8c763c6f0cad14949632499ca9b3461f111117f9fb875b7192daaa2af9a5258f2467b23906a6e1c292c00ae6c68 + checksum: 2/10b704aaa65c894fe114b60ad8dd3a30a65cc100891f767d7de2b0ce4decd13d3394fe195cdc2267192437ea0d1ad587b379474636c2c6ffb8b85782f327c533 languageName: node linkType: hard @@ -1094,33 +1214,42 @@ __metadata: languageName: node linkType: hard -"@sinonjs/commons@npm:^1, @sinonjs/commons@npm:^1.3.0, @sinonjs/commons@npm:^1.4.0": - version: 1.6.0 - resolution: "@sinonjs/commons@npm:1.6.0" +"@sinonjs/commons@npm:^1, @sinonjs/commons@npm:^1.6.0, @sinonjs/commons@npm:^1.7.0, @sinonjs/commons@npm:^1.7.2": + version: 1.7.2 + resolution: "@sinonjs/commons@npm:1.7.2" dependencies: type-detect: 4.0.8 - checksum: 2/53c6d6970a07b52f4cdede42e91797a4a75105a837b7b69ef83a0b70459f6e15a3cc9d5b51b9e2ab96e2b6894f45e1c4f36d83786f300193b116b8d8a76b4576 + checksum: 2/957ccb4d0908fd156734f925c4ae4719ab721348352d1acca1cbd735d528c287f9f01d229bab91b4cbb327d10d9d4f400d6386b40b09b3a612ea85c0c8072406 languageName: node linkType: hard -"@sinonjs/formatio@npm:^3.2.1": - version: 3.2.2 - resolution: "@sinonjs/formatio@npm:3.2.2" +"@sinonjs/fake-timers@npm:^6.0.0, @sinonjs/fake-timers@npm:^6.0.1": + version: 6.0.1 + resolution: "@sinonjs/fake-timers@npm:6.0.1" + dependencies: + "@sinonjs/commons": ^1.7.0 + checksum: 2/bc5ded83a4a2197b7e1de23e27dc5141929d5b28bf3313ec16f16bb57649f0cfebdaf6abec811969dd207d6aec14e8489f539a4fe178204f66faf5aaec129d0d + languageName: node + linkType: hard + +"@sinonjs/formatio@npm:^5.0.1": + version: 5.0.1 + resolution: "@sinonjs/formatio@npm:5.0.1" dependencies: "@sinonjs/commons": ^1 - "@sinonjs/samsam": ^3.1.0 - checksum: 2/ad0d2025e3c85293a6ab4b97d4857b6012275060a2d70e6482a702b3e97ed3275104cb3491a5f9b6be259c9cdca3e497ad21686d07259af2dd92786d9f1b3c50 + "@sinonjs/samsam": ^5.0.2 + checksum: 2/51ed1099eb0b8bdbe75534863c19cb58c672e0891783394f44905966e9c75c49b02b7a1d0207746d19b5bd3f39614c4f86a2aa610625f31bbdfd3ddd3a58f1ca languageName: node linkType: hard -"@sinonjs/samsam@npm:^3.1.0, @sinonjs/samsam@npm:^3.3.3": - version: 3.3.3 - resolution: "@sinonjs/samsam@npm:3.3.3" +"@sinonjs/samsam@npm:^5.0.2, @sinonjs/samsam@npm:^5.0.3": + version: 5.0.3 + resolution: "@sinonjs/samsam@npm:5.0.3" dependencies: - "@sinonjs/commons": ^1.3.0 - array-from: ^2.1.1 - lodash: ^4.17.15 - checksum: 2/e51053b769918455270ec4d6544d246c21bb960104010edb0bf2e0de551e249ea066591d898d11b284197890be53257d88d23821b439cc02a786f26a43d99bf8 + "@sinonjs/commons": ^1.6.0 + lodash.get: ^4.4.2 + type-detect: ^4.0.8 + checksum: 2/dca810e940159d60d36a3248de93708de2d1cf22c822581792734909759fd5b084671a93315cf6cdb4efd397bba4e0cace0c2e530c5155afda41cbd344769b12 languageName: node linkType: hard @@ -1147,10 +1276,17 @@ __metadata: languageName: node linkType: hard -"@types/chai@npm:^4.2.7": - version: 4.2.7 - resolution: "@types/chai@npm:4.2.7" - checksum: 2/a81372403ac8781d4101c441367d4cd8b364e181edfafe4d8db6fd159ce6ce72b8e24749fbfecee0b91947d50496e98a45ff67a6f12e4fe8795f53f409ac99a9 +"@types/chai@npm:*, @types/chai@npm:^4.2.7": + version: 4.2.11 + resolution: "@types/chai@npm:4.2.11" + checksum: 2/976093c7e5929fd1e35b8030a782f56ba3d766698593cb6808631139eadfc0d9cca9d496a023f3507a16adb7bcd4d97622de06d7c1c0fd2094925140647913ac + languageName: node + linkType: hard + +"@types/color-name@npm:^1.1.1": + version: 1.1.1 + resolution: "@types/color-name@npm:1.1.1" + checksum: 2/acb83f4af5565ef8904c43b1122505b50785112d61293c9987c21e9fe96ddae3455bbab0a931ac08fd8e6c6e2ae243762fa5d9c6a3f5bf601bf391c7f6010108 languageName: node linkType: hard @@ -1180,9 +1316,9 @@ __metadata: linkType: hard "@types/json-schema@npm:^7.0.3": - version: 7.0.3 - resolution: "@types/json-schema@npm:7.0.3" - checksum: 2/772515a4b70bccbc43a2f6deeb3e3b72b2097940658112911a1e28a7d7ba92c386c3122cf4ab7999c3d350ebec9e06c910f3964caed3628f29be581740dec2ec + version: 7.0.4 + resolution: "@types/json-schema@npm:7.0.4" + checksum: 2/e3186e7d6998a75317da69e9176028b19b6a8840347a8c293a588dde40267492e08a088a2ef46622821b4acf2ab11270b2ab6019ef91356c61c9f5d9c12bdb8c languageName: node linkType: hard @@ -1203,9 +1339,9 @@ __metadata: linkType: hard "@types/lodash@npm:^4.14.149": - version: 4.14.149 - resolution: "@types/lodash@npm:4.14.149" - checksum: 2/13c3e6ef370768ddfaa7c1ee4f91ee63d77cc73e656d3ab2a75051a96e9fac4ab0437cdf0f621a8f0867719dca92a5865b097ae65620692ab5bff46e8ce6ad9a + version: 4.14.150 + resolution: "@types/lodash@npm:4.14.150" + checksum: 2/f3d72a0a6ee467cb2f858dd9f84086ecaf0221f583ecbdc5b760b1f304e6ca8b839b9d2770c74b101ddc934e741e2ea6072bb3911e25eec0f3d8497bd65d083d languageName: node linkType: hard @@ -1223,17 +1359,10 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:*": - version: 12.6.9 - resolution: "@types/node@npm:12.6.9" - checksum: 2/2a686dc2952c48365968c2e87b8f77087146597a25c04964c8e540e5f58fd5643cf570779f008910b3fa4ca12ecde7ccaef72e9c5211622b32e1e803d7816da0 - languageName: node - linkType: hard - -"@types/node@npm:^12.12.17": - version: 12.12.17 - resolution: "@types/node@npm:12.12.17" - checksum: 2/f08a299a94f141559d06cde7a5d3f3656d4f19fc9a7919b35a84afd7bf076290ecd232a045d6d754d695896a03f2e2a3636ba8a39f3fbf3ae27bf471e1ab644e +"@types/node@npm:*, @types/node@npm:^12.12.17": + version: 12.12.36 + resolution: "@types/node@npm:12.12.36" + checksum: 2/3230ed69b4b78dabe24a86d75fbdbbd14f5f65cc695606a82be1a8bfcaf239ae4119f6b58053639acd5977e0a4efd7a82b2061171c70ac04b890b4f350776e79 languageName: node linkType: hard @@ -1253,6 +1382,32 @@ __metadata: languageName: node linkType: hard +"@types/sinon-chai@npm:^3.2.4": + version: 3.2.4 + resolution: "@types/sinon-chai@npm:3.2.4" + dependencies: + "@types/chai": "*" + "@types/sinon": "*" + checksum: 2/d9370cb1d948f65731f424cd50c26d103aa27dd81db4bc11464dbd7d90d3ed250471f2f6e53c06c0a13f852dd43051ea78947a51e0a00a63553a4fc08a50d2bc + languageName: node + linkType: hard + +"@types/sinon@npm:*, @types/sinon@npm:^9.0.0": + version: 9.0.0 + resolution: "@types/sinon@npm:9.0.0" + dependencies: + "@types/sinonjs__fake-timers": "*" + checksum: 2/e0a8ce8f070a9f79bfc8c00d8c5254210d8458ea4dbb18da8ebcd5479ff098a6608f42f00376b875af772afb703c64f763c70f45018c6aea427bbe551592adfc + languageName: node + linkType: hard + +"@types/sinonjs__fake-timers@npm:*": + version: 6.0.1 + resolution: "@types/sinonjs__fake-timers@npm:6.0.1" + checksum: 2/8145ceac83d15bc935404fe9cf9fa28cbab9532fc89a4b0e2e1d073994e82a443c9d59c9b4f20fb4afea7b31acc8efd5ba1e9d3e1bc25f814ab8c758ca1fbf36 + languageName: node + linkType: hard + "@types/source-list-map@npm:*": version: 0.1.2 resolution: "@types/source-list-map@npm:0.1.2" @@ -1261,35 +1416,35 @@ __metadata: linkType: hard "@types/tapable@npm:*": - version: 1.0.4 - resolution: "@types/tapable@npm:1.0.4" - checksum: 2/0684dcec9b39711cafa215e83dced2e46176de211afc9a29b225bbf2c5abf41fa8031f5d0919c14a4c4bd6455febde31a6df041e04bbd675ed9ec2d79474bdab + version: 1.0.5 + resolution: "@types/tapable@npm:1.0.5" + checksum: 2/baf72d0fe34418834ad8bf9d32b896c6d198a7ab4409fc46507ab557c90d0d58c635b3ee2d558e8fe3c22043a844f155708e45c4afba6a82fa30cf3d97712178 languageName: node linkType: hard "@types/uglify-js@npm:*": - version: 3.0.4 - resolution: "@types/uglify-js@npm:3.0.4" + version: 3.9.0 + resolution: "@types/uglify-js@npm:3.9.0" dependencies: source-map: ^0.6.1 - checksum: 2/3575ff661c00d9d376df3cfcef2886178a8ee8edebf235604ce9f473eb7c29f3ce38562b5f56a7da0260185afce49826932393a584014427cd805e32ce152e5d + checksum: 2/68d6be6df39a9e276dbeca1a8ab29cab9bf2216604b4198ac5281b60c73b123abc4c12c115fe9654e7fc6163fe197a48531af2360957a3551ef0e0fbf8d70371 languageName: node linkType: hard "@types/webpack-sources@npm:*": - version: 0.1.5 - resolution: "@types/webpack-sources@npm:0.1.5" + version: 0.1.7 + resolution: "@types/webpack-sources@npm:0.1.7" dependencies: "@types/node": "*" "@types/source-list-map": "*" source-map: ^0.6.1 - checksum: 2/4529cdfe6f8ca38c564b77369563b504febbc73e8017041931c0acb2b98ce1c80de75d5c0f50276457b31146cf7f91e172c85492facbe4e46107082cfc62965d + checksum: 2/b37c8a95bf4e764be6ba19b96f2e2dd8d495f5de069c2968ab342de92078417f7d651320cef1f20406fea5def9db14fd7cbafd0aca5f64c7fba232506871c760 languageName: node linkType: hard "@types/webpack@npm:^4.41.0": - version: 4.41.0 - resolution: "@types/webpack@npm:4.41.0" + version: 4.41.12 + resolution: "@types/webpack@npm:4.41.12" dependencies: "@types/anymatch": "*" "@types/node": "*" @@ -1297,16 +1452,31 @@ __metadata: "@types/uglify-js": "*" "@types/webpack-sources": "*" source-map: ^0.6.0 - checksum: 2/26940b9509148bcee18e9f8cf77410aa3e1487fead797a1cdcf0fe3c1d5bde16d26c544c7ce2fad19d4c6c0f736b0f277c77d6440c9acb1b511ea7dcfd0f6486 + checksum: 2/bae77f927114621d7980e188ec268fe037f6b36ef334d14e64ac20d20b207c527613e92de77e5c291f24d5b7637762efb31a5c2b005e9100fa26be2e4b6a89b3 + languageName: node + linkType: hard + +"@types/yargs-parser@npm:*": + version: 15.0.0 + resolution: "@types/yargs-parser@npm:15.0.0" + checksum: 2/a25f488972ca69d65e0e3c03e77ef463bdd0a9958aaa43f8c306a03765964fbf2e95a37d00e13ca43e19e917f00d99c94a08f7d2701aaf39f9e1d027268a2b02 + languageName: node + linkType: hard + +"@types/yargs@npm:^15.0.4": + version: 15.0.4 + resolution: "@types/yargs@npm:15.0.4" + dependencies: + "@types/yargs-parser": "*" + checksum: 2/90168f0d4561679ef3b777c14ab60620c48cefc82e945fed8bc809572ae2a9e2e92a2d4c90623007bfaf7e3f9eddf8c8aeeb218497f5af8044b55dbc58f14ba0 languageName: node linkType: hard "@typescript-eslint/eslint-plugin@npm:^2.11.0": - version: 2.11.0 - resolution: "@typescript-eslint/eslint-plugin@npm:2.11.0" + version: 2.29.0 + resolution: "@typescript-eslint/eslint-plugin@npm:2.29.0" dependencies: - "@typescript-eslint/experimental-utils": 2.11.0 - eslint-utils: ^1.4.3 + "@typescript-eslint/experimental-utils": 2.29.0 functional-red-black-tree: ^1.0.1 regexpp: ^3.0.0 tsutils: ^3.17.1 @@ -1317,46 +1487,51 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 2/0d72ee1320bb8a89feb09aff8aa9c8d172d2304420abdf6c1fab86e8ea0bca33770754be9437a99f8d1a67af3b4151c6fb609d2d33ce014239294ae196734acb + checksum: 2/20787dcc3c02bfd3f5dccf493019819011e53dd82ace46b3f83a4a839f10ab027d1290b526f57e1a5be7b26c5b32c3f17abe9306477b1ae14695c6b2d0e1cff1 languageName: node linkType: hard -"@typescript-eslint/experimental-utils@npm:2.11.0": - version: 2.11.0 - resolution: "@typescript-eslint/experimental-utils@npm:2.11.0" +"@typescript-eslint/experimental-utils@npm:2.29.0": + version: 2.29.0 + resolution: "@typescript-eslint/experimental-utils@npm:2.29.0" dependencies: "@types/json-schema": ^7.0.3 - "@typescript-eslint/typescript-estree": 2.11.0 + "@typescript-eslint/typescript-estree": 2.29.0 eslint-scope: ^5.0.0 + eslint-utils: ^2.0.0 peerDependencies: eslint: "*" - checksum: 2/05a21b4d79985ece583868f2b7ed83529cdea14a009b6cdd0c79e77114794f91b91d13f28b6e0554e695f5cb290a2cac924a0bb623616052417a5cc20c93af36 + checksum: 2/e2ef6dc42a45195a5e034fba76f724b1d7733f2d3b372235708a3bfde19abf1dcdba72ecf5f0206d8af9f2d9f00ea47f3b07f1dc433fc8652af0f1d5f537bdce languageName: node linkType: hard "@typescript-eslint/parser@npm:^2.11.0": - version: 2.11.0 - resolution: "@typescript-eslint/parser@npm:2.11.0" + version: 2.29.0 + resolution: "@typescript-eslint/parser@npm:2.29.0" dependencies: "@types/eslint-visitor-keys": ^1.0.0 - "@typescript-eslint/experimental-utils": 2.11.0 - "@typescript-eslint/typescript-estree": 2.11.0 + "@typescript-eslint/experimental-utils": 2.29.0 + "@typescript-eslint/typescript-estree": 2.29.0 eslint-visitor-keys: ^1.1.0 peerDependencies: eslint: ^5.0.0 || ^6.0.0 - checksum: 2/9bbb243ade402808f25a4130f425f7bb98c74bebe5bdfd80989870519acebfa0845907dfb1c397927dd2ac4b66d623d548b86385052ec6c05a173b10dbba8458 + typescript: "*" + peerDependenciesMeta: + typescript: + optional: true + checksum: 2/0cfef5a0125023a8c7a834bd2165474a8dd60ee1780783dbed64b32a815bb4c92adeaffc8524cc48c4a7b9ed1898b6298a847f0ec68040923f11300bb70c7955 languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:2.11.0": - version: 2.11.0 - resolution: "@typescript-eslint/typescript-estree@npm:2.11.0" +"@typescript-eslint/typescript-estree@npm:2.29.0": + version: 2.29.0 + resolution: "@typescript-eslint/typescript-estree@npm:2.29.0" dependencies: debug: ^4.1.1 eslint-visitor-keys: ^1.1.0 glob: ^7.1.6 is-glob: ^4.0.1 - lodash.unescape: 4.0.1 + lodash: ^4.17.15 semver: ^6.3.0 tsutils: ^3.17.1 peerDependencies: @@ -1364,7 +1539,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 2/2253e0627b12d0e2a5030a42c12585f25938383900c13c2be368b1f85ee74d1582c72325170c960967a894a919fcac7cc3fb98b54ddc0ac5a1494a06473b6620 + checksum: 2/25943295d28236429352f232c4b17a0cac41dfd6263db8908886e2ba7661153d1f9d648c035a0937bbdce9333f5185c38e740078adaf227a4f02ce6bfaf3d0ed languageName: node linkType: hard @@ -1590,30 +1765,30 @@ __metadata: languageName: node linkType: hard -"acorn-jsx@npm:^5.1.0": - version: 5.1.0 - resolution: "acorn-jsx@npm:5.1.0" +"acorn-jsx@npm:^5.2.0": + version: 5.2.0 + resolution: "acorn-jsx@npm:5.2.0" peerDependencies: acorn: ^6.0.0 || ^7.0.0 - checksum: 2/ea45cbf3c5e3e69de71f4d5ff37e20cdd631276700831e3e3d66e8015ad0483e6c63772f6f61fe78407adcd7d732772c71eaf3164f1b10ca89123d8311989eab + checksum: 2/c944ea8102231d00bbb83c709af9abbd45e500eb7a06087cd0bce17421a23f9ba3a8f10486921ca3af42ef88fb64e1584ee5bc3956d0f47f4a796169ba0b7dbf languageName: node linkType: hard "acorn@npm:^6.2.1": - version: 6.2.1 - resolution: "acorn@npm:6.2.1" + version: 6.4.1 + resolution: "acorn@npm:6.4.1" bin: - acorn: ./bin/acorn - checksum: 2/def1a3dfdc3a42ac2a5f9b553bb96ec313d12db4c85999c4381336b64e74fab6841e1408ae7227a8e70ac215ee4b45baa8bb0e0527a30e34759b666b148d1d35 + acorn: bin/acorn + checksum: 2/bb618ba2f47eaabe61be6cd1d4e006b016d6bc5117caeed9ba78859d1cb962ed2e8cda4995036b451691c56b1f4c503693eeb515586fcba652a71e2ade19c5e9 languageName: node linkType: hard -"acorn@npm:^7.1.0": - version: 7.1.0 - resolution: "acorn@npm:7.1.0" +"acorn@npm:^7.1.1": + version: 7.1.1 + resolution: "acorn@npm:7.1.1" bin: - acorn: ./bin/acorn - checksum: 2/b544d08dfb82b0ad6b1fe01e3bb601e62f12dcc81e5ae7b1d03ad68e1913d394b5d4fd2510e3118e4b8700c0d11edf7d758379ce967e8ef07dcac800d6bc6411 + acorn: bin/acorn + checksum: 2/ef1d00d82e8b71cf884aca1210a0444ca05ed2dfac42dc144b22d55f2ab84a36ac5e08ffefba9e64ca2109a08b7da5e07cf63e62fe21a3bf10a4c9ac6eb95106 languageName: node linkType: hard @@ -1673,15 +1848,15 @@ __metadata: languageName: node linkType: hard -"ajv@npm:^6.1.0, ajv@npm:^6.10.0, ajv@npm:^6.10.2, ajv@npm:^6.5.5": - version: 6.10.2 - resolution: "ajv@npm:6.10.2" +"ajv@npm:^6.1.0, ajv@npm:^6.10.0, ajv@npm:^6.10.2, ajv@npm:^6.12.0, ajv@npm:^6.5.5": + version: 6.12.2 + resolution: "ajv@npm:6.12.2" dependencies: - fast-deep-equal: ^2.0.1 + fast-deep-equal: ^3.1.1 fast-json-stable-stringify: ^2.0.0 json-schema-traverse: ^0.4.1 uri-js: ^4.2.2 - checksum: 2/764b1a17091675f6794f09293243cbed2a6e6eb8a71b42e20845ab0c63553d73b552ac24d7998d4bb1319d22f03609a26ccd6db9f1bcf9c7ec67ff88d6faf379 + checksum: 2/0cfe79dfac359ac0d625766cf84db0e88d58fb9a5af48d8daa40ea07b407566ef743f49787fc25a931b64c4b0930e50512c4d944cce093e979bc9d6c30af2fa1 languageName: node linkType: hard @@ -1725,11 +1900,11 @@ __metadata: linkType: hard "ansi-escapes@npm:^4.2.1": - version: 4.2.1 - resolution: "ansi-escapes@npm:4.2.1" + version: 4.3.1 + resolution: "ansi-escapes@npm:4.3.1" dependencies: - type-fest: ^0.5.2 - checksum: 2/4d1b6e9a6502360c7d05d877a1d66d0deb219c186472969129f32ad4d8af7417824c17dc77b87cf96fadb9e6d835ba1de105709bbe76839dbd7879697421347f + type-fest: ^0.11.0 + checksum: 2/fbd9b876a177a65abe75eae4651e74aed81ca65a9792a81b2c270c02f4ccbc24c504ee1e503957906aa27e41b8f0d572dca8cff32fa6872a529c7ca861202b2d languageName: node linkType: hard @@ -1754,6 +1929,13 @@ __metadata: languageName: node linkType: hard +"ansi-regex@npm:^5.0.0": + version: 5.0.0 + resolution: "ansi-regex@npm:5.0.0" + checksum: 2/29c0aef1a24597777fc0bf13defebb55a15c2085ed37e94446691760d464a638123c421d9a02a4e6f3f9d2fc6a582a770a20258db9d56bed6b540cf46a6dcd72 + languageName: node + linkType: hard + "ansi-styles@npm:^2.2.1": version: 2.2.1 resolution: "ansi-styles@npm:2.2.1" @@ -1770,6 +1952,16 @@ __metadata: languageName: node linkType: hard +"ansi-styles@npm:^4.1.0": + version: 4.2.1 + resolution: "ansi-styles@npm:4.2.1" + dependencies: + "@types/color-name": ^1.1.1 + color-convert: ^2.0.1 + checksum: 2/d60732de12d053b6ff9e6926d8a20c10d982f0a29cab820b1b19be96a124466203f8052ca29ddd40ceff3330a1d274dc5715598ca8d731912b0b4cd0bc7da1c5 + languageName: node + linkType: hard + "ansi@npm:^0.3.0, ansi@npm:~0.3.1": version: 0.3.1 resolution: "ansi@npm:0.3.1" @@ -1834,14 +2026,7 @@ __metadata: languageName: node linkType: hard -"aproba@npm:^1.0.3, aproba@npm:^1.1.1": - version: 1.2.0 - resolution: "aproba@npm:1.2.0" - checksum: 2/b9e79666f7b06b9f1bf987eb72ce213df32294222bc71d3b383f40916d273e03e83baf7ab25a1fbbcc16221d2ba8b470f20f7effe714534ee1db62d1adff756e - languageName: node - linkType: hard - -"aproba@npm:~1.1.2": +"aproba@npm:^1.0.3, aproba@npm:^1.1.1, aproba@npm:~1.1.2": version: 1.1.2 resolution: "aproba@npm:1.1.2" checksum: 2/0822a32850e2c5dd58a76085f0bd361f095ec1ee87071e50a8f6207aaf8fa82f39010b852896a16c5ca6ab9a76a6bd21a194d710e56982c4e14be9131d3a5b08 @@ -1911,20 +2096,14 @@ __metadata: languageName: node linkType: hard -"array-from@npm:^2.1.1": - version: 2.1.1 - resolution: "array-from@npm:2.1.1" - checksum: 2/060b432e38643a161999d41e11aa9092c059e8aaa9c2072f606f74da92f006f94fd38adb24f84a6dd7b26b8903694cadd87d73116719f734786ce13ff3967dbb - languageName: node - linkType: hard - "array-includes@npm:^3.0.3": - version: 3.0.3 - resolution: "array-includes@npm:3.0.3" + version: 3.1.1 + resolution: "array-includes@npm:3.1.1" dependencies: - define-properties: ^1.1.2 - es-abstract: ^1.7.0 - checksum: 2/06719b01b2d91f481491bda8f2f08f6682609e97a799317e282c7df60abbd651b955faebc34f82d17f4fa474e5320f91cdd6c09f1997f35e46e6b3f35eeea902 + define-properties: ^1.1.3 + es-abstract: ^1.17.0 + is-string: ^1.0.5 + checksum: 2/d55463516917b2229375f5dc252fc5b49564a22cd108cfffdb036059d88730d7ebfd73605449cea9e011ade9ab0f7fe55bd987a1c4e81aec328883ce32aefb04 languageName: node linkType: hard @@ -1965,6 +2144,16 @@ __metadata: languageName: node linkType: hard +"array.prototype.flat@npm:^1.2.1": + version: 1.2.3 + resolution: "array.prototype.flat@npm:1.2.3" + dependencies: + define-properties: ^1.1.3 + es-abstract: ^1.17.0-next.1 + checksum: 2/efc6a1e208ac515b3019b593b804278f65a84d43adc75902e1255003852c50f55486644e87dd68a37ab706a3343bec526532b4793dab23c6b58b5e53f95d65d1 + languageName: node + linkType: hard + "arrify@npm:^1.0.0, arrify@npm:^1.0.1": version: 1.0.1 resolution: "arrify@npm:1.0.1" @@ -2074,7 +2263,7 @@ __metadata: languageName: node linkType: hard -"async@npm:2.6.1": +"async@npm:2.6.1, async@npm:^2.0.1": version: 2.6.1 resolution: "async@npm:2.6.1" dependencies: @@ -2083,15 +2272,6 @@ __metadata: languageName: node linkType: hard -"async@npm:^2.0.1": - version: 2.6.3 - resolution: "async@npm:2.6.3" - dependencies: - lodash: ^4.17.14 - checksum: 2/3e587dcd71f00ed0f02f38885d0a45f62fde8e2666495e26dbe482af0b69298f3a02831b2a4c3dd84ea272c8c079d436ae4ec0282937bea514f53656ab76bbac - languageName: node - linkType: hard - "asynckit@npm:^0.4.0": version: 0.4.0 resolution: "asynckit@npm:0.4.0" @@ -2099,7 +2279,7 @@ __metadata: languageName: node linkType: hard -"atob@npm:^2.1.1": +"atob@npm:^2.1.2": version: 2.1.2 resolution: "atob@npm:2.1.2" bin: @@ -2123,9 +2303,9 @@ __metadata: linkType: hard "aws4@npm:^1.2.1, aws4@npm:^1.8.0": - version: 1.8.0 - resolution: "aws4@npm:1.8.0" - checksum: 2/0c99558e294fc1f773451ea6dd82bdf5d169088b5bb89a6cf012582af845446595c09d1188c470de845399184234357d036bc514598196e6e3cb4ffaf0ac4a9a + version: 1.9.1 + resolution: "aws4@npm:1.9.1" + checksum: 2/bdba50d15a47e1e90a98aa1d76a53c95ea6dbde9a263f306f0abce037ed87823f9eb88120f2c3f7fb9fc8723305de6b9320e3e509c0b6c791888f225990c7903 languageName: node linkType: hard @@ -2171,17 +2351,18 @@ __metadata: linkType: hard "babel-loader@npm:^8.0.0": - version: 8.0.6 - resolution: "babel-loader@npm:8.0.6" + version: 8.1.0 + resolution: "babel-loader@npm:8.1.0" dependencies: - find-cache-dir: ^2.0.0 - loader-utils: ^1.0.2 - mkdirp: ^0.5.1 + find-cache-dir: ^2.1.0 + loader-utils: ^1.4.0 + mkdirp: ^0.5.3 pify: ^4.0.1 + schema-utils: ^2.6.5 peerDependencies: "@babel/core": ^7.0.0 webpack: ">=2" - checksum: 2/5ab065b9d1ffa036fc8fbe21207118f17bb8551e3cf8936fcb8167d558d17f7c0765e22adc350d458f8683344872b90313b57125d8469ea41fb77b0d104076a9 + checksum: 2/adc43abc618bf1245e39293e1ee145e080fab7554d31d16be7905eaa28fe3103713d8005d16e7fd66a446db1b25c74ee898ed4a3aca0cc2477511e58dafe33e0 languageName: node linkType: hard @@ -2195,11 +2376,11 @@ __metadata: linkType: hard "babel-plugin-dynamic-import-node@npm:^2.3.0": - version: 2.3.0 - resolution: "babel-plugin-dynamic-import-node@npm:2.3.0" + version: 2.3.1 + resolution: "babel-plugin-dynamic-import-node@npm:2.3.1" dependencies: object.assign: ^4.1.0 - checksum: 2/7c1955ddba5ac86b5c9b4fbeda541a0586fb464f9ec8fc30f528efc2683a6526428e3f2fea8172088c0f5ec65dbf9cb7076ad0a958df90f6a5ddd77bd5c67752 + checksum: 2/3dd262e2119c4b2afb9e47e96eac671c3431f1dd02c877fba6937ac54733902736713608c92460243f19e1ecd0d204ce9febe9c38bf26559274b62d635e52a90 languageName: node linkType: hard @@ -2304,9 +2485,9 @@ __metadata: linkType: hard "base64-js@npm:^1.0.2": - version: 1.3.0 - resolution: "base64-js@npm:1.3.0" - checksum: 2/a57aa21db6a461a7a1cbcda06839d855008a731006f112aaaa5b2f7c5a4ba89b9465978fab00178105a1ef49060756d2006ad2ff696fa544eac59a103332f968 + version: 1.3.1 + resolution: "base64-js@npm:1.3.1" + checksum: 2/3df94336da06b822c61eca59e61323ac0ddea6d6768699ebd87a10928ff14c95c1f48ada19f4f38729d780776c533c4b759291d909642a93a5aaa7d1ad72fbc4 languageName: node linkType: hard @@ -2342,9 +2523,9 @@ __metadata: linkType: hard "bdd-lazy-var@npm:^2.5.0": - version: 2.5.2 - resolution: "bdd-lazy-var@npm:2.5.2" - checksum: 2/63dac7118d43bec9920247ba9ad04ee25740e72575012cf2ad0b94dd066c8787b6eeaebc2a307819c02dd474b61d9d13e0fd03a6d8f2d347d9ad57c73d2341b4 + version: 2.5.4 + resolution: "bdd-lazy-var@npm:2.5.4" + checksum: 2/09df4d57353635edd27d6a49ddd67e2afeadd8ae63829df35cf3145729676dd77ebb7e4031e231c61f9f23e50b70c96900906e4382bba5ecf9bfd7674e65e19b languageName: node linkType: hard @@ -2369,6 +2550,15 @@ __metadata: languageName: node linkType: hard +"bindings@npm:^1.5.0": + version: 1.5.0 + resolution: "bindings@npm:1.5.0" + dependencies: + file-uri-to-path: 1.0.0 + checksum: 2/538321a48048fc370b751a2192c449a273bfd192128a831894110356fae486b68d150e871feb0b7e966e10c2abbfb92bffe2466962fe4577d359c1f70a054a4d + languageName: node + linkType: hard + "bl@npm:^1.0.0": version: 1.2.2 resolution: "bl@npm:1.2.2" @@ -2600,16 +2790,17 @@ __metadata: languageName: node linkType: hard -"browserslist@npm:^4.6.0, browserslist@npm:^4.8.2": - version: 4.8.2 - resolution: "browserslist@npm:4.8.2" +"browserslist@npm:^4.8.5, browserslist@npm:^4.9.1": + version: 4.11.1 + resolution: "browserslist@npm:4.11.1" dependencies: - caniuse-lite: ^1.0.30001015 - electron-to-chromium: ^1.3.322 - node-releases: ^1.1.42 + caniuse-lite: ^1.0.30001038 + electron-to-chromium: ^1.3.390 + node-releases: ^1.1.53 + pkg-up: ^2.0.0 bin: - browserslist: ./cli.js - checksum: 2/25ccb15cb3d3601abcac3a75a9eb8f2f232615a6a1029dbb436bb79cc976968511128f91d0d33ee9adb7b891f7901d455b9783ee3b357ccd77fadea5ed522540 + browserslist: cli.js + checksum: 2/50d4fefa98a3f76b88c7f21a2ce8c4c92f7571bede281a021ada4edb98ae092d97a95975d80d0b88e0b0f641bedb771bc80acab828f60b0b7bfea67419bd7912 languageName: node linkType: hard @@ -2659,13 +2850,13 @@ __metadata: linkType: hard "buffer@npm:^4.3.0": - version: 4.9.1 - resolution: "buffer@npm:4.9.1" + version: 4.9.2 + resolution: "buffer@npm:4.9.2" dependencies: base64-js: ^1.0.2 ieee754: ^1.1.4 isarray: ^1.0.0 - checksum: 2/ec3aea06606d6d471f2d6bef1e10d994eb38eba99099095710bd99eb07cc456c780a162e30f619229c6e85d4011d5fba049b923df185c69a83fe0659fab7f9ad + checksum: 2/8bb1e8b332387d69a35f175a8b2fb7cb7035ec274b62f8808231e8538ff3b070e52a9b0d5df3f0daa4669295787c501e43ae74df20b98f332960f7a3d71a5f2a languageName: node linkType: hard @@ -2719,8 +2910,8 @@ __metadata: linkType: hard "cacache@npm:^12.0.2": - version: 12.0.2 - resolution: "cacache@npm:12.0.2" + version: 12.0.4 + resolution: "cacache@npm:12.0.4" dependencies: bluebird: ^3.5.5 chownr: ^1.1.1 @@ -2737,32 +2928,11 @@ __metadata: ssri: ^6.0.1 unique-filename: ^1.1.1 y18n: ^4.0.0 - checksum: 2/e07cb0d4d14c6b60a7845b0845c0ee601616554a7492ea0376e486bc88c72ed4f18d1c2a756a49a43797f968114f94a54c2b33f39ad55c2e0e0ab72497fdfe28 + checksum: 2/dbb4664a87bc5ea9cebea3ce295fcfec4ccedc7086e30700a0f5262b7abbe6fcc32cc0b94c9728122e009ab12583844716e136a7d03915edbfaa2fc16f08f9f8 languageName: node linkType: hard -"cacache@npm:^9.2.9": - version: 9.3.0 - resolution: "cacache@npm:9.3.0" - dependencies: - bluebird: ^3.5.0 - chownr: ^1.0.1 - glob: ^7.1.2 - graceful-fs: ^4.1.11 - lru-cache: ^4.1.1 - mississippi: ^1.3.0 - mkdirp: ^0.5.1 - move-concurrently: ^1.0.1 - promise-inflight: ^1.0.1 - rimraf: ^2.6.1 - ssri: ^4.1.6 - unique-filename: ^1.1.0 - y18n: ^3.2.1 - checksum: 2/837f9eb8e8e375398bbae3a4dc0b55778d4c839f9c814d2ba56e3776c053f1bad57f3f25dfc56128d4ca9a01aa293560c51f323c85f3f44fd48aa8bd64eae5c2 - languageName: node - linkType: hard - -"cacache@npm:~9.2.9": +"cacache@npm:^9.2.9, cacache@npm:~9.2.9": version: 9.2.9 resolution: "cacache@npm:9.2.9" dependencies: @@ -2915,10 +3085,10 @@ __metadata: languageName: node linkType: hard -"caniuse-lite@npm:^1.0.30001015": - version: 1.0.30001015 - resolution: "caniuse-lite@npm:1.0.30001015" - checksum: 2/fd7a28d2487b25b6bedb68e3b63d1ee367141ab7c109d351f499046b5eb40faf6c42e568abc905079b9034a02f89c2519e4b75b48e1bf0e9c2fb46fd5cd4d43d +"caniuse-lite@npm:^1.0.30001038": + version: 1.0.30001043 + resolution: "caniuse-lite@npm:1.0.30001043" + checksum: 2/fd9764f07246efbfdd8c0706178fc2c3fe35c768f383737d0d02236f81df87d88f33374f19871800ffff3b52fbc4e88b2136f45fd46d107b8d1696b246d84531 languageName: node linkType: hard @@ -2981,6 +3151,16 @@ __metadata: languageName: node linkType: hard +"chalk@npm:^3.0.0": + version: 3.0.0 + resolution: "chalk@npm:3.0.0" + dependencies: + ansi-styles: ^4.1.0 + supports-color: ^7.1.0 + checksum: 2/7d2b8ef35e7a6658838df9cd008043340c15600669a7441c44620a762a449056ac9a7d4b9ccbe2bc092fe943705fca6876ccc0226635573323c766793fc3217a + languageName: node + linkType: hard + "char-spinner@npm:~1.0.1": version: 1.0.1 resolution: "char-spinner@npm:1.0.1" @@ -3059,7 +3239,7 @@ __metadata: languageName: node linkType: hard -"chokidar@npm:^2.0.0, chokidar@npm:^2.0.2, chokidar@npm:^2.1.8": +"chokidar@npm:^2.0.0, chokidar@npm:^2.1.8": version: 2.1.8 resolution: "chokidar@npm:2.1.8" dependencies: @@ -3082,20 +3262,20 @@ __metadata: languageName: node linkType: hard -"chownr@npm:^1.0.1, chownr@npm:^1.1.1": - version: 1.1.2 - resolution: "chownr@npm:1.1.2" - checksum: 2/6ad6d2f906b010ea3a02b40be9283e8b605c774a4c128830b590ae80631472c3a7dc0f9e68262d7cfb2ba99219d2ffdb30339d266d804bbb63ad5a9bc7f4983d - languageName: node - linkType: hard - -"chownr@npm:~1.0.1": +"chownr@npm:^1.0.1, chownr@npm:~1.0.1": version: 1.0.1 resolution: "chownr@npm:1.0.1" checksum: 2/c3625ed62413d18c790546767d238e6c30f94caadca9768b96a35cd8f3e9397e88cc1607b40568108be9438523a032f0ec752983cd91d72b3e6ce6a5d136766e languageName: node linkType: hard +"chownr@npm:^1.1.1": + version: 1.1.4 + resolution: "chownr@npm:1.1.4" + checksum: 2/53b88711c167e8eb728efffe56a61336fe24141166e6dd18eba8bddfeb163538b191aa2935dfca2aae2ed1711d42df8e612366f229ccf709bc3f7be40228e1e2 + languageName: node + linkType: hard + "chrome-trace-event@npm:^1.0.2": version: 1.0.2 resolution: "chrome-trace-event@npm:1.0.2" @@ -3184,20 +3364,20 @@ __metadata: linkType: hard "cli-width@npm:^2.0.0": - version: 2.2.0 - resolution: "cli-width@npm:2.2.0" - checksum: 2/6c0e3d0efd7ebc69bea2c30cc5c32587d89bb22944acb026007e59dd427b4250790934e4cc0959448bdaf74b4ba7b24d9f889f196ec513fbe6e22d72337c5192 + version: 2.2.1 + resolution: "cli-width@npm:2.2.1" + checksum: 2/240e575c4fc1e467638d3f0cbfb1c7ac5ac4ea2c1980f404f0b4fee89715dd3e2b961f45379c6f7284d4206cece163a98fffad81a856363d10f64c7c66edc85f languageName: node linkType: hard "clipboard@npm:^2.0.0": - version: 2.0.4 - resolution: "clipboard@npm:2.0.4" + version: 2.0.6 + resolution: "clipboard@npm:2.0.6" dependencies: good-listener: ^1.2.2 select: ^1.1.2 tiny-emitter: ^2.0.0 - checksum: 2/4a0e2dfa71573773a27e11184208629beed782f32966444c2863ff85dfb795aacb2b902983057a2b3a7410e2e0fa861aa8f978dd2a9f6ce781a744b2ef673963 + checksum: 2/472b02d4aee26f8b5e3d23969b925ea97d96db0e36764531d9d412e9ac0c5bff6c01678d2a8aecf289549d96b199653b3b930196a6759f69bf0262726f3cd5e1 languageName: node linkType: hard @@ -3304,6 +3484,15 @@ __metadata: languageName: node linkType: hard +"color-convert@npm:^2.0.1": + version: 2.0.1 + resolution: "color-convert@npm:2.0.1" + dependencies: + color-name: ~1.1.4 + checksum: 2/29d73db254e08a0f0c005a9fc2e323f4e628af6be2973f6256b61e1f04b194d04fbc75e89d42048a1547a065ee5057bcb6787b6a2265b045d717c9ca07bba850 + languageName: node + linkType: hard + "color-name@npm:1.1.3": version: 1.1.3 resolution: "color-name@npm:1.1.3" @@ -3311,6 +3500,13 @@ __metadata: languageName: node linkType: hard +"color-name@npm:~1.1.4": + version: 1.1.4 + resolution: "color-name@npm:1.1.4" + checksum: 2/a723ecd5b3f2abaf547d1588568eee2144401f519226bd0a06a8f75a98e9885d194202c9455fe1ab75153e8f8101e73764695cead2edec6392ac46b54f18cb2d + languageName: node + linkType: hard + "columnify@npm:~1.5.4": version: 1.5.4 resolution: "columnify@npm:1.5.4" @@ -3344,17 +3540,17 @@ __metadata: languageName: node linkType: hard -"commander@npm:^2.20.0, commander@npm:^2.9.0, commander@npm:~2.20.0": - version: 2.20.0 - resolution: "commander@npm:2.20.0" - checksum: 2/ab1cf326c510cf0720a6b4f0fac7c2e8f3887c52ac2fed7050a917d3bd309d0ef15d32f788fbc13f3a35716c8003af2d3d148bfe0a7733325c6152fe75778332 +"commander@npm:^2.20.0, commander@npm:^2.9.0": + version: 2.20.3 + resolution: "commander@npm:2.20.3" + checksum: 2/48ea6f9a9cfb308ed68210cc24ae89524f5f2d43ee0db5482a739881191a773182b820fd46aca1316350132c7ba89dfdbd56fed8007d28f37df16f05d169a7b4 languageName: node linkType: hard "commander@npm:^4.0.1": - version: 4.0.1 - resolution: "commander@npm:4.0.1" - checksum: 2/5fb67ee096228501a6aa36a548e2e78936262386b48fa61f95b41adc3d212a1e3966791ad00693ecfa3f6895860fb919a685786eacd407a0ff1a5539a9cb4e6d + version: 4.1.1 + resolution: "commander@npm:4.1.1" + checksum: 2/586374d7ad80cc5ec29ae4658ffacfe375ac33e3464888656cd3f1102b3cdfabbecdbe8bed07fb95a609fb8d5fc1e1d5a91d3af94c9343f7f7248328b25558b9 languageName: node linkType: hard @@ -3430,11 +3626,9 @@ __metadata: linkType: hard "console-browserify@npm:^1.1.0": - version: 1.1.0 - resolution: "console-browserify@npm:1.1.0" - dependencies: - date-now: ^0.1.4 - checksum: 2/b6d625758a78b7e8fcb9791026dcb4a3171414e326ee6aa0be49d8977a59d1bc63999c8217b290977315b9c41f8df882c53b973fdcb1ddfea3d136ba40bbb025 + version: 1.2.0 + resolution: "console-browserify@npm:1.2.0" + checksum: 2/bfd2c71e704ea3df9e93562ae2645ae5669436cf708f7c6f02632f9e175925a93c34e531434b17fd5769a9a20ec8d3f25a4c6b23e6620de82718c47286a85676 languageName: node linkType: hard @@ -3489,13 +3683,13 @@ __metadata: languageName: node linkType: hard -"core-js-compat@npm:^3.4.7": - version: 3.4.8 - resolution: "core-js-compat@npm:3.4.8" +"core-js-compat@npm:^3.6.2": + version: 3.6.5 + resolution: "core-js-compat@npm:3.6.5" dependencies: - browserslist: ^4.8.2 - semver: ^6.3.0 - checksum: 2/119abf756cfd332db65d98e3f5577ed16a73ddbdf5df4f3790cb395f30216aea14396dfd3d9f016357339bd530661ff7d8791076999eb59c2c1b72d0f6ea044c + browserslist: ^4.8.5 + semver: 7.0.0 + checksum: 2/ad59e94c696592128d8e4537e827ae0221088ad64bfbe490f6ffefff44011185822b8cfeea7019094e52e0b8f6d4de9d45acac73132a53bb7c9b962ed387dd4f languageName: node linkType: hard @@ -3641,13 +3835,13 @@ __metadata: linkType: hard "cross-spawn@npm:^7.0.0": - version: 7.0.0 - resolution: "cross-spawn@npm:7.0.0" + version: 7.0.2 + resolution: "cross-spawn@npm:7.0.2" dependencies: path-key: ^3.1.0 - shebang-command: ^1.2.0 - which: ^1.2.9 - checksum: 2/3612af127e353fdf9dd7e8f5c506604d92170beb0e14de74fdec8a61139f16d6fe7800c639adbfa91d2c6f25e3dd278aebf75dfddefb8cc5c41393235c9c9c51 + shebang-command: ^2.0.0 + which: ^2.0.1 + checksum: 2/abd9b7b5bbff261d2a2df58b72362da09175cf844190845657fc82577a8fdbc30c91c30697caf401821a721da3e3e83f9fee54aa8a2aea586379ee3b49011d0f languageName: node linkType: hard @@ -3745,10 +3939,10 @@ __metadata: languageName: node linkType: hard -"cyclist@npm:~0.2.2": - version: 0.2.2 - resolution: "cyclist@npm:0.2.2" - checksum: 2/e79b3bea03fb92bcb80f3a986c5e1d6319e20ae3f67a1ba5ba9328567cdc68bf6939c934cee32548e229151fcbe53354e0095cc8f95c1e5e76792e6374306c5e +"cyclist@npm:^1.0.1": + version: 1.0.1 + resolution: "cyclist@npm:1.0.1" + checksum: 2/aab14d59282ab6003e44e6c89799d5ec3dc01a390304654358d784afade8e122396e9e7d6ec05bf408176d8ac6d332e812bed023c33d786f8d53e5999f72e74f languageName: node linkType: hard @@ -3768,13 +3962,6 @@ __metadata: languageName: node linkType: hard -"date-now@npm:^0.1.4": - version: 0.1.4 - resolution: "date-now@npm:0.1.4" - checksum: 2/c1b29bf1d189a65cb74b4294523f51f614cbc1d2c48c3d72372ba07588f0280ae1a83bc1dc840360058c50b5fc0683656562ba2f85e031ee45a00f069ef79249 - languageName: node - linkType: hard - "debug@npm:3.1.0": version: 3.1.0 resolution: "debug@npm:3.1.0" @@ -3893,9 +4080,9 @@ __metadata: linkType: hard "defer-to-connect@npm:^1.0.1": - version: 1.0.2 - resolution: "defer-to-connect@npm:1.0.2" - checksum: 2/fe110af211d5c44b6b29779d65c55b61d108b75455d74f564f64a67cc26595155b5ac6d4b2f794e62f88ae5397e167f394f523df71d397f29b4e71ed821be150 + version: 1.1.3 + resolution: "defer-to-connect@npm:1.1.3" + checksum: 2/8fe9b6be914f75353e6cbf05216a3473e56c6749b31d4184794c8ef398c04f5dd0ba0617b11594f0f9dfb667ab4cdc7591aec394c2dcf57faaf96a26bbe6ee49 languageName: node linkType: hard @@ -4002,12 +4189,12 @@ __metadata: linkType: hard "des.js@npm:^1.0.0": - version: 1.0.0 - resolution: "des.js@npm:1.0.0" + version: 1.0.1 + resolution: "des.js@npm:1.0.1" dependencies: inherits: ^2.0.1 minimalistic-assert: ^1.0.0 - checksum: 2/9f9903ac2c7c1b8fd952796050cdcfe14e43d38bb0d7c9e00b0d44edaa30f46952f6cbbb233831aca6927768682626ca1382a3072e81bcd90bcd6a23ab97b013 + checksum: 2/0bca161509115fddf78b6d62e59d4eb3b7354e4696fb5714950f1acd9fcb1948fc482706671fc2859ca0238cf95f7f4b522fbab356153ecbf7867914dad08a96 languageName: node linkType: hard @@ -4046,13 +4233,20 @@ __metadata: languageName: node linkType: hard -"diff@npm:3.5.0, diff@npm:^3.1.0, diff@npm:^3.5.0": +"diff@npm:3.5.0, diff@npm:^3.1.0": version: 3.5.0 resolution: "diff@npm:3.5.0" checksum: 2/0a33bbe4cb0c960df1d261a988d281c43bcee040030e64d64bf59cffecd8422bc69201788074eed0f734455080ea287cc6269ab9ba1097fbca1de06df7115668 languageName: node linkType: hard +"diff@npm:^4.0.2": + version: 4.0.2 + resolution: "diff@npm:4.0.2" + checksum: 2/5dc9f84f1c5bbf5e8a484d46c1ce348370bb5a14b1713169ca11b2830ef0fdad78d451b2357b2aa19a984fcd9ec70b0d61523331442683088922c1f21e346040 + languageName: node + linkType: hard + "diffie-hellman@npm:^5.0.0": version: 5.0.3 resolution: "diffie-hellman@npm:5.0.3" @@ -4092,17 +4286,7 @@ __metadata: languageName: node linkType: hard -"dom-serializer@npm:0": - version: 0.2.1 - resolution: "dom-serializer@npm:0.2.1" - dependencies: - domelementtype: ^2.0.1 - entities: ^2.0.0 - checksum: 2/37fff01efd1f411334f032898dad4ed89af6c7aade85d2bbd7b311cf4643db1df8a282ebd38de090ea1465f5abc3a78281877f9fa152f42591b3d59b361120d4 - languageName: node - linkType: hard - -"dom-serializer@npm:~0.1.0": +"dom-serializer@npm:0, dom-serializer@npm:~0.1.0": version: 0.1.1 resolution: "dom-serializer@npm:0.1.1" dependencies: @@ -4126,13 +4310,6 @@ __metadata: languageName: node linkType: hard -"domelementtype@npm:^2.0.1": - version: 2.0.1 - resolution: "domelementtype@npm:2.0.1" - checksum: 2/82e90f05b991a685840b6f1ea9e25ca30f8f11a29044ef45d40fd24e3925e4a63108b098894b73ff1da9cb719da35402ed9025847131249a08615676c269fc5a - languageName: node - linkType: hard - "domhandler@npm:^2.3.0": version: 2.4.2 resolution: "domhandler@npm:2.4.2" @@ -4207,10 +4384,10 @@ __metadata: languageName: node linkType: hard -"electron-to-chromium@npm:^1.3.322": - version: 1.3.322 - resolution: "electron-to-chromium@npm:1.3.322" - checksum: 2/7f6dab9abdfcb84b2226985b36c6bbaa5fd1a68298915feb5a4a07a1e4596defea973fbb26e76513104ab82b0a0f78bfeff38e214d6b02b14cd00ceeeb2293d7 +"electron-to-chromium@npm:^1.3.390": + version: 1.3.413 + resolution: "electron-to-chromium@npm:1.3.413" + checksum: 2/5aeb26a90a78b9f0b73b719fd60df8373990011b4fe2e69193ab73f11e2b44f672729bf9b7ff07394b830eb05b04272347074c318e7bcb5e85870f01c7b8a758 languageName: node linkType: hard @@ -4222,8 +4399,8 @@ __metadata: linkType: hard "elliptic@npm:^6.0.0": - version: 6.5.0 - resolution: "elliptic@npm:6.5.0" + version: 6.5.2 + resolution: "elliptic@npm:6.5.2" dependencies: bn.js: ^4.4.0 brorand: ^1.0.1 @@ -4232,7 +4409,7 @@ __metadata: inherits: ^2.0.1 minimalistic-assert: ^1.0.0 minimalistic-crypto-utils: ^1.0.0 - checksum: 2/cfc8a028a5e84214f8857cf624b2f26f16074032d54ff1f108adce0cccc20673caf99c97748c04c79881b2c4d5debb7e575b256365e20517cdfe198bc98c8e40 + checksum: 2/34e8894f16a50eb4a8536a469170b9ea0a7463d4c616a3b9ab996ebc118f392391f7537a79e56049991b69a80947fe0fc47f0b961deb9830333dcc33a2eff61e languageName: node linkType: hard @@ -4250,10 +4427,10 @@ __metadata: languageName: node linkType: hard -"emojis-list@npm:^2.0.0": - version: 2.1.0 - resolution: "emojis-list@npm:2.1.0" - checksum: 2/89ec0ba9c3b3c49f68f6a79daf8358d5003472f87c6663cb1d72f586f19bb49b57d4f43ba275c4b0872c063bea51a949bc2fd2375e7f34a105974f87f5ab9b07 +"emojis-list@npm:^3.0.0": + version: 3.0.0 + resolution: "emojis-list@npm:3.0.0" + checksum: 2/1e2426dd5e7c064356a5ba78c28d813fe7a2c13455d890cc4c5c2a35a688ff5bdb2fc8bed3a3bee396aaec0213613b9b2a87209afcc1bce464c6d0a3146bea55 languageName: node linkType: hard @@ -4267,22 +4444,22 @@ __metadata: linkType: hard "end-of-stream@npm:^1.0.0, end-of-stream@npm:^1.1.0": - version: 1.4.1 - resolution: "end-of-stream@npm:1.4.1" + version: 1.4.4 + resolution: "end-of-stream@npm:1.4.4" dependencies: once: ^1.4.0 - checksum: 2/d95ce5b26a4313331522dd10ed6fe699b5e202443a3cef5175dc5a11d26bb1aa2e5a7ab3cb464e91694977096e51c74236fa38d6f44798cbecc83537a20ae904 + checksum: 2/b5a8d0c23f52d71a156c481c233f63a2e1ce39f4c295522fb6182b5692a4576f7bf090a44b1687f55d45c755ef18c9ee48c67f2a35a1053383a353b892a9a997 languageName: node linkType: hard "enhanced-resolve@npm:^4.1.0": - version: 4.1.0 - resolution: "enhanced-resolve@npm:4.1.0" + version: 4.1.1 + resolution: "enhanced-resolve@npm:4.1.1" dependencies: graceful-fs: ^4.1.2 - memory-fs: ^0.4.0 + memory-fs: ^0.5.0 tapable: ^1.0.0 - checksum: 2/025f1d7c4032c4e7851d8db8f8cc5e41125c107475d2134f72687e1bc1b819a06da53abd9dfb20a107f0b53ffd2f0d8c6aee7e69b7d86521ebeb5ed23418dda1 + checksum: 2/c951d32be6a5e72a9f38e6defb64eaaf8bd9e6ed2a1776adba5d3cec7353462ca4c597a6b7a586e32c60b8c4f55c37e5d438cc3a8d0fcb7424e5e367959b44a7 languageName: node linkType: hard @@ -4293,13 +4470,6 @@ __metadata: languageName: node linkType: hard -"entities@npm:^2.0.0": - version: 2.0.0 - resolution: "entities@npm:2.0.0" - checksum: 2/2a407a57cc1610f0471db6b23d49b203330cb48c27d1888a03ee91ab229a3f1476a3f44ff94a4326d129a6f12035928920180456c4af341388c9207aead08f88 - languageName: node - linkType: hard - "env-paths@npm:^2.2.0": version: 2.2.0 resolution: "env-paths@npm:2.2.0" @@ -4334,28 +4504,33 @@ __metadata: languageName: node linkType: hard -"es-abstract@npm:^1.12.0, es-abstract@npm:^1.5.1, es-abstract@npm:^1.7.0": - version: 1.13.0 - resolution: "es-abstract@npm:1.13.0" +"es-abstract@npm:^1.17.0, es-abstract@npm:^1.17.0-next.1, es-abstract@npm:^1.17.5": + version: 1.17.5 + resolution: "es-abstract@npm:1.17.5" dependencies: - es-to-primitive: ^1.2.0 + es-to-primitive: ^1.2.1 function-bind: ^1.1.1 has: ^1.0.3 - is-callable: ^1.1.4 - is-regex: ^1.0.4 - object-keys: ^1.0.12 - checksum: 2/c5f39a3d782bfa9ee6cb2e404b722f7299305d0c83b33405f1249f5af57b47f214819dc6faded07d026bd31baa1770ce308e8b9686ff15eb70824a3cdddbc142 + has-symbols: ^1.0.1 + is-callable: ^1.1.5 + is-regex: ^1.0.5 + object-inspect: ^1.7.0 + object-keys: ^1.1.1 + object.assign: ^4.1.0 + string.prototype.trimleft: ^2.1.1 + string.prototype.trimright: ^2.1.1 + checksum: 2/674392dc330174fe9aa73a1040615edfee9ecdca56719724be718892a5c41697d717ebf32c344f4b79ad1e36a0438ba6b2d3d92b5a18694a54dc8eba7e2c9580 languageName: node linkType: hard -"es-to-primitive@npm:^1.2.0": - version: 1.2.0 - resolution: "es-to-primitive@npm:1.2.0" +"es-to-primitive@npm:^1.2.1": + version: 1.2.1 + resolution: "es-to-primitive@npm:1.2.1" dependencies: is-callable: ^1.1.4 is-date-object: ^1.0.1 is-symbol: ^1.0.2 - checksum: 2/c65e11bcf804592933720b7f15c5f902942c6bb577feb608b6776b7f3bec6c4554f0fa348eb3f76613411d70f3d8ead04ded850c04c5797294982e51f1e31a48 + checksum: 2/be0634116220c67fc032ef130e4fef97d6c8d382c4b189c0920939f85d6b1f7fee3779405dc4bd605b4a7be770cd2b076c5eeec2889bc98be49a53e9f4471339 languageName: node linkType: hard @@ -4409,56 +4584,57 @@ __metadata: linkType: hard "eslint-config-prettier@npm:^6.7.0": - version: 6.7.0 - resolution: "eslint-config-prettier@npm:6.7.0" + version: 6.10.1 + resolution: "eslint-config-prettier@npm:6.10.1" dependencies: get-stdin: ^6.0.0 peerDependencies: eslint: ">=3.14.1" bin: eslint-config-prettier-check: bin/cli.js - checksum: 2/f44e433274d0c7d2372a123bcd7c7bc3324c2affe9ec8bdb42962091676591eea59bd5142d956d9cab45e4c01eb5e441b5900b1b9e982cb8fbbec3b86a937520 + checksum: 2/894798ee5683682810640392e9083ad856a453139b7d4f477940dcd09a220a86bc0798d79b95ce980af3dc402cf3ee8126a29f154d2c8f3fc574b681ad786bb0 languageName: node linkType: hard "eslint-import-resolver-node@npm:^0.3.2": - version: 0.3.2 - resolution: "eslint-import-resolver-node@npm:0.3.2" + version: 0.3.3 + resolution: "eslint-import-resolver-node@npm:0.3.3" dependencies: debug: ^2.6.9 - resolve: ^1.5.0 - checksum: 2/c885e5379c31921c35c2105089bd6d3a6525e8575b75096d3de24a8a76351637a4ba5078ef668fa74ec7f9ed4996b6cefebf2ac2b9eb9772c4443e5cf9228efd + resolve: ^1.13.1 + checksum: 2/2a62dcbbcaebd5f33da48e9e1a32ef8c8e8eb7fb7f7ce80a7e985a61e5ecc14a896449aa529770b29ad23d421621f5413a90a4a43325e265389a590012df46e9 languageName: node linkType: hard -"eslint-module-utils@npm:^2.4.0": - version: 2.4.1 - resolution: "eslint-module-utils@npm:2.4.1" +"eslint-module-utils@npm:^2.4.1": + version: 2.6.0 + resolution: "eslint-module-utils@npm:2.6.0" dependencies: - debug: ^2.6.8 + debug: ^2.6.9 pkg-dir: ^2.0.0 - checksum: 2/c42e77ec4e7816741eb1893f0ad0bfe296e4822d00312a0e8cceadd7db5a42885c300f2ed2f82b55b8627e70128c40412ad6b988319a4e88423e8b2c8b1907e6 + checksum: 2/4c2ae1afe7e5fefec814aeebe8d95f2ad506383670d10a7082ae79028f4523158c28ca18e20df9ec477d979c17d7c4a8ea204e314bdfbf241208b5ecfb3fb8b4 languageName: node linkType: hard "eslint-plugin-import@npm:^2.9.0": - version: 2.18.2 - resolution: "eslint-plugin-import@npm:2.18.2" + version: 2.20.2 + resolution: "eslint-plugin-import@npm:2.20.2" dependencies: array-includes: ^3.0.3 + array.prototype.flat: ^1.2.1 contains-path: ^0.1.0 debug: ^2.6.9 doctrine: 1.5.0 eslint-import-resolver-node: ^0.3.2 - eslint-module-utils: ^2.4.0 + eslint-module-utils: ^2.4.1 has: ^1.0.3 minimatch: ^3.0.4 object.values: ^1.1.0 read-pkg-up: ^2.0.0 - resolve: ^1.11.0 + resolve: ^1.12.0 peerDependencies: eslint: 2.x - 6.x - checksum: 2/a32e1fa96b30bdc5b954c322300b824741b6f2cb41a137bbfded814f36da19e046d64873cc467cac4cc8ffbeb4bcc39dd7d357089f89ff05da63a5d4daa9ac4c + checksum: 2/2f95e35ff6490835dbdb8e0e59bdcf37625642e152cd7768e63015e21c5dc0082b1b8c001a04b348574f21df160672299aa8052c45717524d17bac64a5f0c929 languageName: node linkType: hard @@ -4508,14 +4684,16 @@ __metadata: languageName: node linkType: hard -"eslint-visitor-keys@npm:^1.0.0": - version: 1.0.0 - resolution: "eslint-visitor-keys@npm:1.0.0" - checksum: 2/247d50ddff52896300968f51f67b5b263a96c4eac7541c7bb8a83f1ad79cddea817014d9d823f9f416fcd1ce3a26460d8fb8a2ba06a9b8a124d28478e592ee31 +"eslint-utils@npm:^2.0.0": + version: 2.0.0 + resolution: "eslint-utils@npm:2.0.0" + dependencies: + eslint-visitor-keys: ^1.1.0 + checksum: 2/61be5a5c4d56c38fd6d96dd423f51db3b13bafaef0080138d90e2c1ed29a8bebd09fde38145d22786ac70c3f99276581915afe6c08e673ac6aeb71607a025883 languageName: node linkType: hard -"eslint-visitor-keys@npm:^1.1.0": +"eslint-visitor-keys@npm:^1.0.0, eslint-visitor-keys@npm:^1.1.0": version: 1.1.0 resolution: "eslint-visitor-keys@npm:1.1.0" checksum: 2/d873ddf169fd04428125a8e25f8a8ee38b5275904d60b75199d66b67233e49987fe245e1b91e5e7d8e06994e7c09310820c851d56acdcdeaeca7be7fb4be6f7b @@ -4523,8 +4701,8 @@ __metadata: linkType: hard "eslint@npm:^6.7.2": - version: 6.7.2 - resolution: "eslint@npm:6.7.2" + version: 6.8.0 + resolution: "eslint@npm:6.8.0" dependencies: "@babel/code-frame": ^7.0.0 ajv: ^6.10.0 @@ -4565,7 +4743,7 @@ __metadata: v8-compile-cache: ^2.0.3 bin: eslint: ./bin/eslint.js - checksum: 2/6f8ec5963b1cb57ef5036b6cd1ea814374a4918d7467a2cbfc33955f9289fd87534d0373af9983579d3711aad80f29abfe99268eae9a868bf253cb350f710248 + checksum: 2/0ff3453648e0648ec0fc60b94fdf9be4c562a53c0a12435f54b6e35bc972d85f496408fd34edbe9e745aedac7815141c29312ca1b095ae88be232c4b00581c9f languageName: node linkType: hard @@ -4577,13 +4755,13 @@ __metadata: linkType: hard "espree@npm:^6.1.2": - version: 6.1.2 - resolution: "espree@npm:6.1.2" + version: 6.2.1 + resolution: "espree@npm:6.2.1" dependencies: - acorn: ^7.1.0 - acorn-jsx: ^5.1.0 + acorn: ^7.1.1 + acorn-jsx: ^5.2.0 eslint-visitor-keys: ^1.1.0 - checksum: 2/21c4532772e35b83a3fbb04763b2fd1e878d9009a9b020ee9113068b40c99c6f5fa30d335a9d114a5db1f61436092a486db3dcab5b6e5630ce76a610c129ac28 + checksum: 2/c3e54e9b3a8615bce5de1cf42b3dee1570c9c6a88b18c4e92c82d69e46fe98a760aaf4cc877728d59d08786c407329e63b1393eb8809f64e56e720c71c791601 languageName: node linkType: hard @@ -4598,11 +4776,11 @@ __metadata: linkType: hard "esquery@npm:^1.0.1": - version: 1.0.1 - resolution: "esquery@npm:1.0.1" + version: 1.3.1 + resolution: "esquery@npm:1.3.1" dependencies: - estraverse: ^4.0.0 - checksum: 2/2abff69063b3bf80c781f33d0a20ea208af7e6f6376f5fa8e9c72f48d3fa1e37159b06764e385c5e300890acb8e96b252eacab51db408ae3346bb9ea9576609f + estraverse: ^5.1.0 + checksum: 2/aaf45b67731e40429eb124bb5e4c3bd6eff9100faa28a50e1d1607c58365d0f48a7119232f3517fe2f9c7628537ddc6a02e201c4b610c0c9c85028c030682b9b languageName: node linkType: hard @@ -4615,10 +4793,17 @@ __metadata: languageName: node linkType: hard -"estraverse@npm:^4.0.0, estraverse@npm:^4.1.0, estraverse@npm:^4.1.1": - version: 4.2.0 - resolution: "estraverse@npm:4.2.0" - checksum: 2/61cffa9c3653cd7d04b4f2763babc033684ecd4821f8605e47291cd08776613c68e3c0149a6ac426bc13fbf88399e23faf7ee2aa16b2cf44a836788c07037fa5 +"estraverse@npm:^4.1.0, estraverse@npm:^4.1.1": + version: 4.3.0 + resolution: "estraverse@npm:4.3.0" + checksum: 2/1f148cbb56d920b5b001f7f6b830f3b66059fc5c7f1688e1a56d2590d19b4b208beab603173090d76510065e3e8df9e5be2ccecde0a450217f6655b521aafb04 + languageName: node + linkType: hard + +"estraverse@npm:^5.1.0": + version: 5.1.0 + resolution: "estraverse@npm:5.1.0" + checksum: 2/3153817928e780a4415f4ccbd5fa214ff64d61a99b5ed989ee7620b4dfaa10bd8bb175456a00470da5f50657100efd9a8a820ac83b685895f3f1fc0f5140677a languageName: node linkType: hard @@ -4630,9 +4815,9 @@ __metadata: linkType: hard "events@npm:^3.0.0": - version: 3.0.0 - resolution: "events@npm:3.0.0" - checksum: 2/0b0fe0a25c12b6a8db1b1be03daf0edb0b9db8ee78b43200784ae77f19170af3a8ea64083cc190af8e15c91d4dfa16ebb2a90f60e597de03b967e11079a1f8f9 + version: 3.1.0 + resolution: "events@npm:3.1.0" + checksum: 2/3c9e6bd23fad2a871ea1bf6ce1102e9564a34ec5741aea362cfbcf851eb559aab8d1a87225045708c6db7e50d51405e9e3d66e31667fe9c948ed87abaf88b744 languageName: node linkType: hard @@ -4663,10 +4848,10 @@ __metadata: linkType: hard "execa@npm:^2.0.1": - version: 2.0.5 - resolution: "execa@npm:2.0.5" + version: 2.1.0 + resolution: "execa@npm:2.1.0" dependencies: - cross-spawn: ^6.0.5 + cross-spawn: ^7.0.0 get-stream: ^5.0.0 is-stream: ^2.0.0 merge-stream: ^2.0.0 @@ -4675,7 +4860,7 @@ __metadata: p-finally: ^2.0.0 signal-exit: ^3.0.2 strip-final-newline: ^2.0.0 - checksum: 2/a8a79de448ae98f8535032e625d2cec91573c18afc374d69aad764147ccbb226279b429fe3d0a1c108e5411a43b1afe37e01f29df7e27185eb1322f5fb1a527a + checksum: 2/fe150333a84417eaf9710747ca198867a350963212d54611031890ceb525d1f8479dd46a88ea8230ef6e272521c9c031121aa11527bf890c3e504945ad4fc365 languageName: node linkType: hard @@ -4785,45 +4970,38 @@ __metadata: languageName: node linkType: hard -"extsprintf@npm:1.3.0": +"extsprintf@npm:1.3.0, extsprintf@npm:^1.2.0": version: 1.3.0 resolution: "extsprintf@npm:1.3.0" checksum: 2/7c9c77ae688d4ff78e31296560a59d3870fd34815982ac43f2a59aa9744436953cd225b8cbd9e178626e4f11bdf0eb6a9b7ef3009732c643d99e3c07f041e9db languageName: node linkType: hard -"extsprintf@npm:^1.2.0": - version: 1.4.0 - resolution: "extsprintf@npm:1.4.0" - checksum: 2/1ccc5d234c99c64c3866af77fec20ecf94420bd6df49ff35899a62e80f6107f9e88e4d9ad1aa5dfa82ecd145f6278dbfe3948412ff71594d03d2aa1398d50b3f - languageName: node - linkType: hard - -"fast-deep-equal@npm:^2.0.1": - version: 2.0.1 - resolution: "fast-deep-equal@npm:2.0.1" - checksum: 2/243a08b383ec6dadead1cf019608f7a6f9d6577cc57def743cb12b0121ce36abd5b87a04c98ba41a890eeab1a8416a5405088ea58edd79cb5b2e3f22bb9f1efc +"fast-deep-equal@npm:^3.1.1": + version: 3.1.1 + resolution: "fast-deep-equal@npm:3.1.1" + checksum: 2/f27709ac3985cb37eedc8d4ea90bed194849e8f71fdaaaeae4050bbbf41f31fc92cfbbc371c53ae942d1d7e95cea65876e266313282a79f3b2e8376d7265691b languageName: node linkType: hard "fast-glob@npm:^3.0.3": - version: 3.0.4 - resolution: "fast-glob@npm:3.0.4" + version: 3.2.2 + resolution: "fast-glob@npm:3.2.2" dependencies: - "@nodelib/fs.stat": ^2.0.1 - "@nodelib/fs.walk": ^1.2.1 - glob-parent: ^5.0.0 - is-glob: ^4.0.1 - merge2: ^1.2.3 + "@nodelib/fs.stat": ^2.0.2 + "@nodelib/fs.walk": ^1.2.3 + glob-parent: ^5.1.0 + merge2: ^1.3.0 micromatch: ^4.0.2 - checksum: 2/31f5fed0b782fd735db49cb8944d2a3b8d11efbdeaee38b327eee9f8f490c2b5e64cd89e7815c0f804f3bfda620007e3a7163eca34b614aabf86127bdd7a5541 + picomatch: ^2.2.1 + checksum: 2/616bae9dab237afbdd7be065522dbf27de15603a221cc537bbdf1401d6cbc41a426686df73b58506ded953c5064f1e038ae2f4a66323981dd8ae84c372d99c4d languageName: node linkType: hard "fast-json-stable-stringify@npm:^2.0.0": - version: 2.0.0 - resolution: "fast-json-stable-stringify@npm:2.0.0" - checksum: 2/6e7894a53d62f14b23cf130cbd10af5c6eef82002fd3b7861c0dff23a33ba15c94e68d4ab36e5fd52f0cacd0a7930a18317af0126b4d5d01653f021e79db4cf9 + version: 2.1.0 + resolution: "fast-json-stable-stringify@npm:2.1.0" + checksum: 2/d6c1ca17d76de128bef187cd904fbd4e9faaf985b2d1bb9e06a08a21d91e7d79c85cc6617be44da9e352d700b5db6372cea0822859e9032e3041c110bcf415e7 languageName: node linkType: hard @@ -4835,18 +5013,18 @@ __metadata: linkType: hard "fastq@npm:^1.6.0": - version: 1.6.0 - resolution: "fastq@npm:1.6.0" + version: 1.7.0 + resolution: "fastq@npm:1.7.0" dependencies: - reusify: ^1.0.0 - checksum: 2/d1c7ccf66be1b627e5d88040cdba67e8affd15da733d37eaeba75cb9e8bb8e24e001f703ef55460b97d8727e6171d138d6d3e287287b29040bf9e326e1ccbc75 + reusify: ^1.0.4 + checksum: 2/b4d3702e18c71d4e00e6add06f9767d9f2850b92f042052a0338779e88b6f3112dfbb39f5c1767da2d7676cd971673fac9832c0604017d9556499f3518aa323c languageName: node linkType: hard "figgy-pudding@npm:^3.5.1": - version: 3.5.1 - resolution: "figgy-pudding@npm:3.5.1" - checksum: 2/eaa7a5985c1a0957f24257be504e979dca173863246904ed32ff42acc7248aec006ed7789a414cec268526973a7f26262776e8b752122b8061d0bc1059d5ab83 + version: 3.5.2 + resolution: "figgy-pudding@npm:3.5.2" + checksum: 2/5421b5c4630852363cc94729824d6d148380d1ddd9760ae98f1b97390196d7fe13cb95ca41d480abc2c187870c6c8f74ad6ffcfdd75c79c7a84f1729f9773157 languageName: node linkType: hard @@ -4870,11 +5048,11 @@ __metadata: linkType: hard "figures@npm:^3.0.0": - version: 3.0.0 - resolution: "figures@npm:3.0.0" + version: 3.2.0 + resolution: "figures@npm:3.2.0" dependencies: escape-string-regexp: ^1.0.5 - checksum: 2/3cfa61ff573d1810e91f7a669865d2510240a7112d97718842d825c99c0808b0d9520e8561a7f96165b91f29a5dd59874c9ca59f09a03f0e770cc8df92516275 + checksum: 2/1c5beb638043e69d40979ca690e5889cdaa55ed63cec8a5f0627bdfa037af89422d661f3cb216a18f85e70ac3db48139ba35e2da2d64e35907d82a6091e423ab languageName: node linkType: hard @@ -4887,6 +5065,13 @@ __metadata: languageName: node linkType: hard +"file-uri-to-path@npm:1.0.0": + version: 1.0.0 + resolution: "file-uri-to-path@npm:1.0.0" + checksum: 2/a49c71b28a524c53353e154bb4ebc29f96f3955ca4b285a34df853abdd3a479122d22c6b2f61c569d8968b5a2cff94bab410629baaa2c9db2f2dae9b97c71453 + languageName: node + linkType: hard + "filename-regex@npm:^2.0.0": version: 2.0.1 resolution: "filename-regex@npm:2.0.1" @@ -5035,9 +5220,9 @@ __metadata: linkType: hard "flatted@npm:^2.0.0": - version: 2.0.1 - resolution: "flatted@npm:2.0.1" - checksum: 2/5ab1fe85572a949d99d546cf8656fdd5f01212dc9193bfd938dfbd1c84d8e29b974a5b6d4356f756fcc5a94d391fca35e3c14736910d06d8bb47d19478f64352 + version: 2.0.2 + resolution: "flatted@npm:2.0.2" + checksum: 2/80e4a0f290310f44d49aa3f4e0b47dfdf4f8211562712bb22e794cb7a02fc1b858b696bafd4266218f5f399aae0fc8f31728e90a50548749d84456d685806ac7 languageName: node linkType: hard @@ -5192,11 +5377,11 @@ __metadata: linkType: hard "fs-minipass@npm:^1.2.5": - version: 1.2.6 - resolution: "fs-minipass@npm:1.2.6" + version: 1.2.7 + resolution: "fs-minipass@npm:1.2.7" dependencies: - minipass: ^2.2.1 - checksum: 2/49a8aac94c3aae0bfe79ff715e03056493b33bef3282ff5d010f8e908b7820dd502eb706dffe4ea6208e151c7686f0a2b48c7b83af5006ea050e1a4de05fe492 + minipass: ^2.6.0 + checksum: 2/8bcc9d7f20650b23f43d8e7ccfcf3aa44af1b27e6874c0f336f16266c1120bc96ee5cb0baf64d19d0636f08e8b50d372bdbde94485e86e735a8cadcd4a105bdb languageName: node linkType: hard @@ -5238,22 +5423,26 @@ __metadata: linkType: hard fsevents@^1.2.7: - version: 1.2.9 - resolution: "fsevents@npm:1.2.9" + version: 1.2.12 + resolution: "fsevents@npm:1.2.12" dependencies: + bindings: ^1.5.0 nan: ^2.12.1 - node-pre-gyp: ^0.12.0 - checksum: 2/0e83eca4e891dab867731d26c2cc974c3282381fbc665c1fd1d322f2e0c6980a966e2ed37065ce6ecb065f91a8d5021772a20b1ae860dbd6c5a528fff893bdba + node-gyp: latest + node-pre-gyp: "*" + checksum: 2/4b2c7d98ca542c53d2e57f524ca46582ce1a387123ccf064dae5365838f61695f404552d61413c82bc61f187e7c261a57a5d68b7c868cf110aa26c4f8425ad98 languageName: node linkType: hard "fsevents@patch:fsevents@^1.2.7#builtin": - version: 1.2.9 - resolution: "fsevents@patch:fsevents@npm%3A1.2.9#builtin::version=1.2.9&hash=495457" + version: 1.2.12 + resolution: "fsevents@patch:fsevents@npm%3A1.2.12#builtin::version=1.2.12&hash=495457" dependencies: + bindings: ^1.5.0 nan: ^2.12.1 - node-pre-gyp: ^0.12.0 - checksum: 2/4d5bca0c08e1c737b9da59048a4640bc1ff0ad44885d85dcbd69a95a104f8545cae0a403e7e9ef39fb62b1a682bd857d9dc7e859461f14f5bf395340808774f0 + node-gyp: latest + node-pre-gyp: "*" + checksum: 2/dc1cf4285359f4e3443d7af329f8e84bd116970c8e0389446d8d69affafd3c3551ec8f526d569abbeb614c20a4e8570e16c096d8a5cccc0623a24cae3eaf429f languageName: node linkType: hard @@ -5345,23 +5534,6 @@ fsevents@~2.1.1: languageName: node linkType: hard -"gauge@npm:~2.6.0": - version: 2.6.0 - resolution: "gauge@npm:2.6.0" - dependencies: - aproba: ^1.0.3 - console-control-strings: ^1.0.0 - has-color: ^0.1.7 - has-unicode: ^2.0.0 - object-assign: ^4.1.0 - signal-exit: ^3.0.0 - string-width: ^1.0.1 - strip-ansi: ^3.0.1 - wide-align: ^1.1.0 - checksum: 2/ecf0077c32152f7c9e67015e8ea44be6c1c77829c7d2910099189643baa870527f06b68684dbaeb0725b994cb8c5cbf421694861ece9125fc048ec715af2848f - languageName: node - linkType: hard - "gauge@npm:~2.7.3": version: 2.7.4 resolution: "gauge@npm:2.7.4" @@ -5412,6 +5584,13 @@ fsevents@~2.1.1: languageName: node linkType: hard +"gensync@npm:^1.0.0-beta.1": + version: 1.0.0-beta.1 + resolution: "gensync@npm:1.0.0-beta.1" + checksum: 2/0e8992d0b88a7170008e887219a79926e2dc578db4f9c4cf86538cd9971d3b83359ddde93a56c651b19cf32d67d030826fd30a3980562e7cd8b94382bbde120b + languageName: node + linkType: hard + "get-caller-file@npm:^1.0.1": version: 1.0.3 resolution: "get-caller-file@npm:1.0.3" @@ -5600,7 +5779,7 @@ fsevents@~2.1.1: languageName: node linkType: hard -"glob-parent@npm:5.1.0, glob-parent@npm:^5.0.0": +"glob-parent@npm:5.1.0, glob-parent@npm:^5.0.0, glob-parent@npm:^5.1.0, glob-parent@npm:~5.1.0": version: 5.1.0 resolution: "glob-parent@npm:5.1.0" dependencies: @@ -5628,15 +5807,6 @@ fsevents@~2.1.1: languageName: node linkType: hard -"glob-parent@npm:~5.1.0": - version: 5.1.1 - resolution: "glob-parent@npm:5.1.1" - dependencies: - is-glob: ^4.0.1 - checksum: 2/84d96548ebd26d76920fb0a138d5e70a8e16f57e4d0152a7e66ba494ec2a846afddfdaefe9cf280c273966d1bad24874f00e8d442c30c68347b0afb272fb3a1e - languageName: node - linkType: hard - "glob@npm:7.1.3": version: 7.1.3 resolution: "glob@npm:7.1.3" @@ -5651,7 +5821,7 @@ fsevents@~2.1.1: languageName: node linkType: hard -"glob@npm:7.1.4, glob@npm:^7.0.0, glob@npm:^7.0.3, glob@npm:^7.0.5, glob@npm:^7.1.1, glob@npm:^7.1.2, glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:~7.1.1, glob@npm:~7.1.2": +"glob@npm:7.1.4, glob@npm:^7.0.0, glob@npm:^7.0.3, glob@npm:^7.1.1, glob@npm:^7.1.2, glob@npm:^7.1.3, glob@npm:~7.1.2": version: 7.1.4 resolution: "glob@npm:7.1.4" dependencies: @@ -5665,7 +5835,7 @@ fsevents@~2.1.1: languageName: node linkType: hard -"glob@npm:^7.1.6": +"glob@npm:^7.0.5, glob@npm:^7.1.4, glob@npm:^7.1.6, glob@npm:~7.1.1": version: 7.1.6 resolution: "glob@npm:7.1.6" dependencies: @@ -5710,11 +5880,11 @@ fsevents@~2.1.1: linkType: hard "globals@npm:^12.1.0": - version: 12.3.0 - resolution: "globals@npm:12.3.0" + version: 12.4.0 + resolution: "globals@npm:12.4.0" dependencies: type-fest: ^0.8.1 - checksum: 2/bfe28f3890cc6ba09c41f93694bc6c5e602fa8bf09a0ec73508f4853e6c7745aede053ab400a02dbebcd320bd4fba6a2c0230e77f9bbf4f617145a96be3c7684 + checksum: 2/05284d0a41654deffbae1141296dc8e6f74b694ebac0af124918b67cb44974a715a16c6a72b5d45caef1bfdd948d1716ec37e4879c35806bbd4c0a4d99fac543 languageName: node linkType: hard @@ -5726,8 +5896,8 @@ fsevents@~2.1.1: linkType: hard "globby@npm:^10.0.1": - version: 10.0.1 - resolution: "globby@npm:10.0.1" + version: 10.0.2 + resolution: "globby@npm:10.0.2" dependencies: "@types/glob": ^7.1.1 array-union: ^2.1.0 @@ -5737,7 +5907,7 @@ fsevents@~2.1.1: ignore: ^5.1.1 merge2: ^1.2.3 slash: ^3.0.0 - checksum: 2/cb837df25e33936092ad01c012651804b1ee2007983e0bc54fe0f372107bbbf3f5b4b1189d9427a356c952bdfa6b8dd6c05f50acd5107914031108dae8d0f8f3 + checksum: 2/d9ab9d47e96aba63d832f5a885fe9b92f53603693801d95b2f6c71b9de8915a13feb5acba15c6bf10423231a3864aded921fe7d4d911fc09801ade863071f383 languageName: node linkType: hard @@ -5755,13 +5925,13 @@ fsevents@~2.1.1: linkType: hard "globule@npm:^1.0.0": - version: 1.2.1 - resolution: "globule@npm:1.2.1" + version: 1.3.1 + resolution: "globule@npm:1.3.1" dependencies: glob: ~7.1.1 - lodash: ~4.17.10 + lodash: ~4.17.12 minimatch: ~3.0.2 - checksum: 2/d5de2b2424802006009ba23101bd52afa976354d2d4fa05d579f9337187f6a71b44b2764c39c23dd3cd8df9da853e66958932fd6270ea945f2a4928619251b29 + checksum: 2/4907fcfe090b022df73079e4732ff2bb019f86b9f004003d2b2268824c8982d67546d5103e1fd02e4a1eecbcc319b382f1bd300001505ec9fd2c6be422e6ba35 languageName: node linkType: hard @@ -5812,7 +5982,7 @@ fsevents@~2.1.1: languageName: node linkType: hard -"graceful-fs@npm:4.1.11": +"graceful-fs@npm:4.1.11, graceful-fs@npm:~4.1.11, graceful-fs@npm:~4.1.6": version: 4.1.11 resolution: "graceful-fs@npm:4.1.11" checksum: 2/1b26c0fd118a3d98e20c5676e04184c42e56a822afda5f24f333a1702139475e8afbff0232e61357c9442295e3c0d69b734599f244322cb2ed891e95cf19e5d0 @@ -5820,16 +5990,9 @@ fsevents@~2.1.1: linkType: hard "graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.2": - version: 4.2.2 - resolution: "graceful-fs@npm:4.2.2" - checksum: 2/10c11d21f8caf66cce436bec4445467a0e21430d799a6252ad8e90567a632f65e143af0a591bcb7cfce5519eede6e5201228eaf0339f3795d901547358f6b2fe - languageName: node - linkType: hard - -"graceful-fs@npm:~4.1.11, graceful-fs@npm:~4.1.6": - version: 4.1.15 - resolution: "graceful-fs@npm:4.1.15" - checksum: 2/42f91d1f95cd97fd5a7db04b579c2085d3493a2bfb28cb6617f2e10e954f52b8c82c0a941a3e42d9e7eb3fdcbb448706e7a3bb646ad367ce5d1e1043d9e38212 + version: 4.2.3 + resolution: "graceful-fs@npm:4.2.3" + checksum: 2/3e182a21ccb788e12e4d9a37e83c74217f37da836072df07829e62e63d5b7525e701a9ca7b91e6ccd3ec8a5ee6fff74a00267f23f11df77bf32d19d4e25677a7 languageName: node linkType: hard @@ -5840,23 +6003,6 @@ fsevents@~2.1.1: languageName: node linkType: hard -"handlebars@npm:^4.1.2": - version: 4.4.2 - resolution: "handlebars@npm:4.4.2" - dependencies: - neo-async: ^2.6.0 - optimist: ^0.6.1 - source-map: ^0.6.1 - uglify-js: ^3.1.4 - dependenciesMeta: - uglify-js: - optional: true - bin: - handlebars: bin/handlebars - checksum: 2/42d999aa74446eb5083b780c36136d96332dc6d46f615c96184fa270929fe3e9cb7551921209a4f421219b984f911d53f9121ab5536a5b4ded0a36454319e5b8 - languageName: node - linkType: hard - "har-schema@npm:^1.0.5": version: 1.0.5 resolution: "har-schema@npm:1.0.5" @@ -5895,7 +6041,7 @@ fsevents@~2.1.1: languageName: node linkType: hard -"har-validator@npm:~5.1.0": +"har-validator@npm:~5.1.3": version: 5.1.3 resolution: "har-validator@npm:5.1.3" dependencies: @@ -5914,13 +6060,6 @@ fsevents@~2.1.1: languageName: node linkType: hard -"has-color@npm:^0.1.7": - version: 0.1.7 - resolution: "has-color@npm:0.1.7" - checksum: 2/151e26e7ed626233b182e55047f2b168576cd17363a6e9841cf4eb190b69ac34444088ecd58f1a3cfb63036c1ec4283851a73ca91b23846155c1cc2e894a5690 - languageName: node - linkType: hard - "has-flag@npm:^3.0.0": version: 3.0.0 resolution: "has-flag@npm:3.0.0" @@ -5935,10 +6074,10 @@ fsevents@~2.1.1: languageName: node linkType: hard -"has-symbols@npm:^1.0.0": - version: 1.0.0 - resolution: "has-symbols@npm:1.0.0" - checksum: 2/4d32a01d52a9cac16e9bccb12d26d5aedc88ba532a42cfd2a8b5f78d4ef4a6b2495ece75f613821d2e8b88b3f4384b8e670ed47c9e85d96f2ce3c1bef4199a45 +"has-symbols@npm:^1.0.0, has-symbols@npm:^1.0.1": + version: 1.0.1 + resolution: "has-symbols@npm:1.0.1" + checksum: 2/910c5bfb54277706d1995928af67cc5b1a0bae85ddcf9f03abb9ebe7679ef3b758e945cf101130456d4dd6053d228386cc009fa5a1467afca892c971a07a9e7e languageName: node linkType: hard @@ -5995,7 +6134,7 @@ fsevents@~2.1.1: languageName: node linkType: hard -"has@npm:^1.0.1, has@npm:^1.0.3": +"has@npm:^1.0.3": version: 1.0.3 resolution: "has@npm:1.0.3" dependencies: @@ -6072,19 +6211,19 @@ fsevents@~2.1.1: languageName: node linkType: hard -"hosted-git-info@npm:^2.1.4, hosted-git-info@npm:^2.1.5, hosted-git-info@npm:^2.4.2, hosted-git-info@npm:^2.6.0": - version: 2.7.1 - resolution: "hosted-git-info@npm:2.7.1" - checksum: 2/8fe81103a6e1e063e140b010389687b8dac05a6c44d8819ad5f58e8a38337550de3e5f0ac33d0d2509634d07df8ad0297df7389ff229d5de151faf2014849860 +"hosted-git-info@npm:^2.1.4, hosted-git-info@npm:^2.4.2, hosted-git-info@npm:~2.5.0": + version: 2.5.0 + resolution: "hosted-git-info@npm:2.5.0" + checksum: 2/29a7053cde48b04993089c6e072d0423798590089a99073b68c1b7ab2d58483876e4de63df71c8f32151d6c72180caeb72cacb0533d814be2c7cbc97593ce36d languageName: node linkType: hard "hosted-git-info@npm:^3.0.0": - version: 3.0.0 - resolution: "hosted-git-info@npm:3.0.0" + version: 3.0.4 + resolution: "hosted-git-info@npm:3.0.4" dependencies: lru-cache: ^5.1.1 - checksum: 2/0f731255bcb7b6d9f861325b0799a6b17a1e472dc97ac85e2aa2dc925837d3910115a78a618153aa5987f34f3dcc3756b57372c4aad10acd30ccb870caaf2fbf + checksum: 2/ad9be122f1fbe850ed3311ff71bcb19f1875dcdb3e04b097088be5b3db0d14df1f90cb05eaf23137cca8206c824f5df8eb0ac78f91eb60f7b31b52219e0319c0 languageName: node linkType: hard @@ -6095,10 +6234,10 @@ fsevents@~2.1.1: languageName: node linkType: hard -"hosted-git-info@npm:~2.5.0": - version: 2.5.0 - resolution: "hosted-git-info@npm:2.5.0" - checksum: 2/29a7053cde48b04993089c6e072d0423798590089a99073b68c1b7ab2d58483876e4de63df71c8f32151d6c72180caeb72cacb0533d814be2c7cbc97593ce36d +"html-escaper@npm:^2.0.0": + version: 2.0.2 + resolution: "html-escaper@npm:2.0.2" + checksum: 2/e02458fea06618f07eb6e251faf55cf20b6553bade0c7e0418be84a22f4de56fe08397bb8879008b9920211c39f919688fd0647050817837df3c59155e5bce9e languageName: node linkType: hard @@ -6124,9 +6263,9 @@ fsevents@~2.1.1: linkType: hard "http-cache-semantics@npm:^4.0.0": - version: 4.0.3 - resolution: "http-cache-semantics@npm:4.0.3" - checksum: 2/31e73c0471625f392fca35854ea371b22b9933f9afe3b43fe7eb73b6403891bfc27f5cbd390119a7d32f4e16b09aa1e66ea1051f7898763283034d197dba99d7 + version: 4.1.0 + resolution: "http-cache-semantics@npm:4.1.0" + checksum: 2/d9bdef4eee9190922c7f1b9aa24669c2c6396b7fe0f2b3d9d114d6d85f68d967e7f614bae913e5d1101913e3c2d16f2c05313efb9eed983ad672523cfcba2af7 languageName: node linkType: hard @@ -6170,12 +6309,12 @@ fsevents@~2.1.1: linkType: hard "https-proxy-agent@npm:^2.1.0": - version: 2.2.2 - resolution: "https-proxy-agent@npm:2.2.2" + version: 2.2.4 + resolution: "https-proxy-agent@npm:2.2.4" dependencies: agent-base: ^4.3.0 debug: ^3.1.0 - checksum: 2/abd0072d8c69e761da40c547f35acf933a7083e827ed233b879320922eb3c7b3d35e7f0ebb1a3e5cee543a639c4c8a6d4b15c0d845bf44ea3973b92d60412dd2 + checksum: 2/9f4d8c98af2b851c3b55db0f9922fc959c4524831d8bc165d5ef83f4a574f3cf77933c804354d18e021333d986c9e5577db65876f316528a6e28ea90317f616a languageName: node linkType: hard @@ -6231,11 +6370,11 @@ fsevents@~2.1.1: linkType: hard "ignore-walk@npm:^3.0.1": - version: 3.0.1 - resolution: "ignore-walk@npm:3.0.1" + version: 3.0.3 + resolution: "ignore-walk@npm:3.0.3" dependencies: minimatch: ^3.0.4 - checksum: 2/485d3f9b697f5848ef8b3bd8645966e39beff7d1d53d1d69b8862a422f41f6c8c00287f74fb7aa6cdafe2b21dd1473bddabbeb2cf188d65167a35d4cee11591d + checksum: 2/0fdd05014c90e2c28680463a43a030d81d061c15b518d35bba46c953551aedc7ee8a086630c24e07913bcc24fbc8a4a8ee1d2e6b309673ebfe495d820894e336 languageName: node linkType: hard @@ -6247,9 +6386,9 @@ fsevents@~2.1.1: linkType: hard "ignore@npm:^5.1.1": - version: 5.1.2 - resolution: "ignore@npm:5.1.2" - checksum: 2/bbaa9dd5eac3520b242efe20a9734ca0569db7e2d31b8a58bb58973752fc2986a66da4360e4f9aa9cca44822dce00a1ea8b8af91aac21637698bc9bb51c09a1f + version: 5.1.4 + resolution: "ignore@npm:5.1.4" + checksum: 2/8ce640b2530fb26222ca5feac93a783d683946cc2c4aabf01047d42b3cf1c34e39950097ad1368bf1237563dd67c5f1d7af1cd37c4c024dee143439df9735e30 languageName: node linkType: hard @@ -6288,14 +6427,14 @@ fsevents@~2.1.1: linkType: hard "in-publish@npm:^2.0.0": - version: 2.0.0 - resolution: "in-publish@npm:2.0.0" + version: 2.0.1 + resolution: "in-publish@npm:2.0.1" bin: in-install: in-install.js in-publish: in-publish.js not-in-install: not-in-install.js not-in-publish: not-in-publish.js - checksum: 2/803db1843534a90f9378287d75c9dae46a8fbcefb3485947b87e2377dc7fcb97a9c8016d908e30c96109417ed96f7c65c9d7da3efeba64b9568c48694cc1ad54 + checksum: 2/64cda97b84966aea3f8a400c75e11de3ed53f0151da74487bf11abf05d77d1e5f1b02bbc19876986440a6c4b518747c36f5a6d65b39daeb118dc6ff5c1b15d93 languageName: node linkType: hard @@ -6429,23 +6568,23 @@ fsevents@~2.1.1: linkType: hard "inquirer@npm:^7.0.0": - version: 7.0.0 - resolution: "inquirer@npm:7.0.0" + version: 7.1.0 + resolution: "inquirer@npm:7.1.0" dependencies: ansi-escapes: ^4.2.1 - chalk: ^2.4.2 + chalk: ^3.0.0 cli-cursor: ^3.1.0 cli-width: ^2.0.0 external-editor: ^3.0.3 figures: ^3.0.0 lodash: ^4.17.15 mute-stream: 0.0.8 - run-async: ^2.2.0 - rxjs: ^6.4.0 + run-async: ^2.4.0 + rxjs: ^6.5.3 string-width: ^4.1.0 - strip-ansi: ^5.1.0 + strip-ansi: ^6.0.0 through: ^2.3.6 - checksum: 2/c9d2861cfd07283a59240db5ff49c32343e8d2284c4caf0860b0c1c082e4bd1587cf470b6dd7783393f3978f99c57306244856d745062336e291f5465730036b + checksum: 2/1d6aee78a0395f6311d360ecdf9d239a99748eff3ad3148f395d97ab6ec873d7b7ab67e7213b899fd49d5864e5b2125f81f1b810a5efb9888790c6e1d9fb03ae languageName: node linkType: hard @@ -6456,7 +6595,7 @@ fsevents@~2.1.1: languageName: node linkType: hard -"invariant@npm:^2.2.2": +"invariant@npm:^2.2.2, invariant@npm:^2.2.4": version: 2.2.4 resolution: "invariant@npm:2.2.4" dependencies: @@ -6537,9 +6676,9 @@ fsevents@~2.1.1: linkType: hard "is-buffer@npm:~2.0.3": - version: 2.0.3 - resolution: "is-buffer@npm:2.0.3" - checksum: 2/935945ea57c7802f492383730ef63001bd678d622969701150e52691a89063470e6c67a68a25557cad07aa659d2f6c0fc4f3931bbc9ed75f4102d683baa33925 + version: 2.0.4 + resolution: "is-buffer@npm:2.0.4" + checksum: 2/c0a09d8475161e2b313e25edb1ecc3cf507d863d7071b6a21602193fc80566ff79f961267a420bbec9acc9878fdcf8a5caeb22d97058a4b9e29958731dd395b0 languageName: node linkType: hard @@ -6552,10 +6691,10 @@ fsevents@~2.1.1: languageName: node linkType: hard -"is-callable@npm:^1.1.4": - version: 1.1.4 - resolution: "is-callable@npm:1.1.4" - checksum: 2/9df49c4c2b273e61b881a6da1bf7b33e918d0151a04d09fbf4d1295ecc43960d5ffb931bea44955048105a7681563e63877c5c469a686db4ff0a4681e7c61b8a +"is-callable@npm:^1.1.4, is-callable@npm:^1.1.5": + version: 1.1.5 + resolution: "is-callable@npm:1.1.5" + checksum: 2/53f8694766edd0293cef35105a525c419168b34a3efb76f04b8555ef6b0f76b43850d5591e54d6abdaf258000ef15961c743e37c4ca1eb2236d4e85a21285d88 languageName: node linkType: hard @@ -6589,9 +6728,9 @@ fsevents@~2.1.1: linkType: hard "is-date-object@npm:^1.0.1": - version: 1.0.1 - resolution: "is-date-object@npm:1.0.1" - checksum: 2/3ec75756c8f9d497953a5017d9637b79710027a1df25080aa123ff6bf81e062bae9a50c1ac50f5d495ab1052d2fda4d805494a410abc212da9ca0e63205dc72d + version: 1.0.2 + resolution: "is-date-object@npm:1.0.2" + checksum: 2/8a1c3e826caabb213a3a3c9d6067d1f37f025849221639cacd3828512fd1e99ed0ec221b450e5daf1e0378b3e3b104bf8cdae16db49a315947b07f35e43a8f8b languageName: node linkType: hard @@ -6671,11 +6810,9 @@ fsevents@~2.1.1: linkType: hard "is-finite@npm:^1.0.0": - version: 1.0.2 - resolution: "is-finite@npm:1.0.2" - dependencies: - number-is-nan: ^1.0.0 - checksum: 2/533e7c99c8e924d829585db2e036d43fe6cabb07f8c856dcbdb0310fc118176766c8c00d6b317d9243302ebc9a12443d578baee97b75e8955884bc6becff9ccb + version: 1.1.0 + resolution: "is-finite@npm:1.1.0" + checksum: 2/0aa8c14ae9354b8e949795dfd20a9bcd50fe2d43127bf213ab0fe51118020f6dc1b70483fddb527e0b006223d2886d875eccedded44d4772bd61ef179b060a93 languageName: node linkType: hard @@ -6923,19 +7060,19 @@ fsevents@~2.1.1: languageName: node linkType: hard -"is-regex@npm:^1.0.4": - version: 1.0.4 - resolution: "is-regex@npm:1.0.4" +"is-regex@npm:^1.0.5": + version: 1.0.5 + resolution: "is-regex@npm:1.0.5" dependencies: - has: ^1.0.1 - checksum: 2/02683a31db896d69e92e94e295fdf2b43e37ed0d84bbbd6146c0e177b5cf6319f317ba26b6c250d1c76c3447038f5cac221ca13e0b88b4be8862f3144c111df5 + has: ^1.0.3 + checksum: 2/b5f4f5dd65a8daf656331597d637f0ae29b976b0fc911ca44ee1040aec28328e1f22fff0ee4ffbad4496294a4a9cb573a8aaaa7b0c51e744d468681fe0151585 languageName: node linkType: hard "is-retry-allowed@npm:^1.0.0": - version: 1.1.0 - resolution: "is-retry-allowed@npm:1.1.0" - checksum: 2/0cbccedacd43871792000d31cf9c99c80b4d6d22140f7a74a0ad73fea35e80920133b8d3d2bd04b0002e45cc97e2dcbdfdcdaa116a84d5c8eaccd780a4008fbf + version: 1.2.0 + resolution: "is-retry-allowed@npm:1.2.0" + checksum: 2/e95db3ae4f1146ec19903446f85ced71161d6c2df29b8d12a13b932b80e9162d9c4ace36f050dc8cb8152e7780efaaf95063ad9e8419d4121baf0f440f997a0f languageName: node linkType: hard @@ -6962,12 +7099,19 @@ fsevents@~2.1.1: languageName: node linkType: hard +"is-string@npm:^1.0.5": + version: 1.0.5 + resolution: "is-string@npm:1.0.5" + checksum: 2/1a5940e4c0101fb0e8e93f9a25a6f826030017cb8f305786037c15cc7f009646a36cda5f2e20cee7d5da138bee854185c2c912a4979bda6c9b4719f09bd85a12 + languageName: node + linkType: hard + "is-symbol@npm:^1.0.2": - version: 1.0.2 - resolution: "is-symbol@npm:1.0.2" + version: 1.0.3 + resolution: "is-symbol@npm:1.0.3" dependencies: - has-symbols: ^1.0.0 - checksum: 2/b22f8cd068214389df3172aa429ad11a68d38f97ae8b41dea2533d327a9d261dc36a6cc34611003e6bfebe5853cde775f13d361afec3cffc658dd1ed436293b9 + has-symbols: ^1.0.1 + checksum: 2/9f2d046ea4b2a5ad90e21829e1fb0e43276365b757e52b612eda7b7621477bf41c8a67a92ee39cd0640b168288904433a8f96eaabeb4d7943434c4eae8f44c60 languageName: node linkType: hard @@ -7144,25 +7288,18 @@ fsevents@~2.1.1: linkType: hard "istanbul-reports@npm:^2.2.4": - version: 2.2.6 - resolution: "istanbul-reports@npm:2.2.6" + version: 2.2.7 + resolution: "istanbul-reports@npm:2.2.7" dependencies: - handlebars: ^4.1.2 - checksum: 2/f19258ace7f9cb780463273e988385af80c694ad3d13ebe631488307a3564d5e1ae1d68f4a3ba5b87b72e11815ceea6a6e7483df05c75bb305514e1cbdb7d95e + html-escaper: ^2.0.0 + checksum: 2/cb2b1ddacbc539d833b03b86e275a8f3e74538e035414f7ed4851b32ca38c5918b3e12e1128fd73d4eb90ee33786400c89dd5018bb7368835c1ea8e42cc4fa97 languageName: node linkType: hard "js-base64@npm:^2.1.8": - version: 2.5.1 - resolution: "js-base64@npm:2.5.1" - checksum: 2/21e2d9c838dda398804f9a9cc2a4e2a441da9fab1857230b95085756c0f2c7a7a32ea8a9e735b3d3700a0cb81b3fe3f82e1c6fe1ef6246271d12c01a6cfe3104 - languageName: node - linkType: hard - -"js-levenshtein@npm:^1.1.3": - version: 1.1.6 - resolution: "js-levenshtein@npm:1.1.6" - checksum: 2/968d85ef5ca355edd7c52fbc09b91591e23d79d6ac2997bedaf3f087bde1d2da630025adff7a2e5a5ade6a776532954c219efdccbd8800832c5c48348e22d194 + version: 2.5.2 + resolution: "js-base64@npm:2.5.2" + checksum: 2/5325f4686907fa59fa67fdb83ec5afa8f8a9b4067f1983a9a9f1552e5fb516e54c1479a0bbca30bacaded06ccf42d3e1934481854eb7b443e01d0aca5afe1525 languageName: node linkType: hard @@ -7288,14 +7425,14 @@ fsevents@~2.1.1: languageName: node linkType: hard -"json5@npm:^2.1.0": - version: 2.1.1 - resolution: "json5@npm:2.1.1" +"json5@npm:^2.1.2": + version: 2.1.3 + resolution: "json5@npm:2.1.3" dependencies: - minimist: ^1.2.0 + minimist: ^1.2.5 bin: json5: lib/cli.js - checksum: 2/10b77f4887195bf1b13de0077a72861f9a245889ef13d4626adb43121e660251f1c62de73af116a15eed7c6f4fdf489df2c2b102ce32bef265b50baf0f1de6c4 + checksum: 2/d292df0672ddc210a127378e45b78ad32739c908c995cd8c66a8346d536a593dd9e3097ff8c357e8944a6b8c88dfac6e41dccdab87123d11068e12af1706a448 languageName: node linkType: hard @@ -7357,9 +7494,9 @@ fsevents@~2.1.1: linkType: hard "just-extend@npm:^4.0.2": - version: 4.0.2 - resolution: "just-extend@npm:4.0.2" - checksum: 2/4b8e14881670242df86b011fd4302872961a32bf7cb6e88310c709c60bff0ca7dd2cb803faee73e9b40c9a20b962f553ea1fc904e150409311314285a4950930 + version: 4.1.0 + resolution: "just-extend@npm:4.1.0" + checksum: 2/44439d1d499dfb60d63d0ff0e26f1698138ab218f0a00f27a1ce24786fbf158d1d252b57027280eaeed6421fffa22c90d880af5dea0834cbe489658a240ae2db languageName: node linkType: hard @@ -7398,9 +7535,9 @@ fsevents@~2.1.1: linkType: hard "kind-of@npm:^6.0.0, kind-of@npm:^6.0.2": - version: 6.0.2 - resolution: "kind-of@npm:6.0.2" - checksum: 2/ab0ea50a6d056d07a0ee30f15c0dc270671b2f48578115d59a899ad211258fde9a1b8e51c73e0d402afd3d12fd6878b0fb85e19348e3fc43dc4a694e148d1b9c + version: 6.0.3 + resolution: "kind-of@npm:6.0.3" + checksum: 2/b18e222324538b36c73f4209641fb4882930e64a4090cd5ce7b14f8ad5d21495b3a2aaffc4247750beeeefd98d76e46ed4a92200b8d742f789088d9192005bab languageName: node linkType: hard @@ -7438,6 +7575,22 @@ fsevents@~2.1.1: languageName: node linkType: hard +"leven@npm:^3.1.0": + version: 3.1.0 + resolution: "leven@npm:3.1.0" + checksum: 2/a031e47f7900bb5b0794505673813da26405c08d36b7ac10bedf1e9d30d31c74f0a1771ae1035d0ee97c22602f2ebf4ece132b2521ab02c048dd3d345680a6d1 + languageName: node + linkType: hard + +"levenary@npm:^1.1.1": + version: 1.1.1 + resolution: "levenary@npm:1.1.1" + dependencies: + leven: ^3.1.0 + checksum: 2/93ec431f51b64f9664b2a16ce0b0465a0c56745195c3c50662382bd61e21712ae1a2b987b676435fedab996ffcae4ec2a4f1d3c2a7c5a943a015803840967c34 + languageName: node + linkType: hard + "levn@npm:^0.3.0, levn@npm:~0.3.0": version: 0.3.0 resolution: "levn@npm:0.3.0" @@ -7564,14 +7717,14 @@ fsevents@~2.1.1: languageName: node linkType: hard -"loader-utils@npm:^1.0.0, loader-utils@npm:^1.0.1, loader-utils@npm:^1.0.2, loader-utils@npm:^1.2.3": - version: 1.2.3 - resolution: "loader-utils@npm:1.2.3" +"loader-utils@npm:^1.0.0, loader-utils@npm:^1.0.1, loader-utils@npm:^1.2.3, loader-utils@npm:^1.4.0": + version: 1.4.0 + resolution: "loader-utils@npm:1.4.0" dependencies: big.js: ^5.2.2 - emojis-list: ^2.0.0 + emojis-list: ^3.0.0 json5: ^1.0.1 - checksum: 2/ece55b39410c3329274ae526a6e974581209734a572ed71113532caed6bd530ec73239c346a47b33c650c005a4e4891a5859cf5265ec9d92dfb4a8ae2988da28 + checksum: 2/0130d75bb228555018e20d74cf6e02ad9fc9627b29e85107c821f3072a6b78117e04a7858c29cc8541f82c6fea40a93672440099ef12daa3310db5bb0a2e0f49 languageName: node linkType: hard @@ -7730,6 +7883,13 @@ fsevents@~2.1.1: languageName: node linkType: hard +"lodash.get@npm:^4.4.2": + version: 4.4.2 + resolution: "lodash.get@npm:4.4.2" + checksum: 2/9a6d24c47f79a447c85391cbea17956039e3b9f685282aec08a9d483e3b2bae4f1c054190a14405b3ddd7392ef81c00d6e938a1db98318ea2be8f10a201b3b2f + languageName: node + linkType: hard + "lodash.map@npm:^4.4.0": version: 4.6.0 resolution: "lodash.map@npm:4.6.0" @@ -7807,13 +7967,6 @@ fsevents@~2.1.1: languageName: node linkType: hard -"lodash.unescape@npm:4.0.1": - version: 4.0.1 - resolution: "lodash.unescape@npm:4.0.1" - checksum: 2/235fd887a13e75e3e860fb3167f5ece8851fface8f836d2855d8b440285526094f541b64fb4183dd947e5740d5885082f8e0e3a7b5f1b3e0b600b0edebe1d673 - languageName: node - linkType: hard - "lodash.union@npm:~4.6.0": version: 4.6.0 resolution: "lodash.union@npm:4.6.0" @@ -7849,7 +8002,7 @@ fsevents@~2.1.1: languageName: node linkType: hard -"lodash@npm:^4.0.0, lodash@npm:^4.17.10, lodash@npm:^4.17.11, lodash@npm:^4.17.13, lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.4, lodash@npm:^4.3.0, lodash@npm:~4.17.10": +"lodash@npm:^4.0.0, lodash@npm:^4.17.10, lodash@npm:^4.17.13, lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.4, lodash@npm:^4.3.0, lodash@npm:~4.17.12": version: 4.17.15 resolution: "lodash@npm:4.17.15" checksum: 2/45fea398041996d973c5dff7e3bdbc8b4753656c4a3b7e54b269ecb96f237088e4232ffe869e18db5ef20723a12308a3f4a80181fb1ad91cc5824401d04b7ea6 @@ -7885,13 +8038,6 @@ fsevents@~2.1.1: languageName: node linkType: hard -"lolex@npm:^4.1.0, lolex@npm:^4.2.0": - version: 4.2.0 - resolution: "lolex@npm:4.2.0" - checksum: 2/cedff80f04510ef75c5ff3c3b704aa8e3ce7c04bc2e9adf20caa40409a669c1c9d9fc87ad99bbb2f60104adcb351dca55d99fba13d0db1c2c1de123333b3b8aa - languageName: node - linkType: hard - "loose-envify@npm:^1.0.0": version: 1.4.0 resolution: "loose-envify@npm:1.4.0" @@ -7976,9 +8122,9 @@ fsevents@~2.1.1: linkType: hard "make-error@npm:^1.1.1": - version: 1.3.5 - resolution: "make-error@npm:1.3.5" - checksum: 2/b73115e65ef2d080b504067c9739d8445637683647f1ec4201303d73c4889692f028631ae252160a238d0f6c64c5abf2bf4509b510daece617c81158ace4d37b + version: 1.3.6 + resolution: "make-error@npm:1.3.6" + checksum: 2/299d0e7a2e15b2d0124494963739b83a5902a32185932a4987399b412b0243c641e942f99cad555cbf7d7113356ca95a9c652f86400e9d67c162c34518c153bc languageName: node linkType: hard @@ -8076,7 +8222,7 @@ fsevents@~2.1.1: languageName: node linkType: hard -"memory-fs@npm:^0.4.0, memory-fs@npm:^0.4.1": +"memory-fs@npm:^0.4.1": version: 0.4.1 resolution: "memory-fs@npm:0.4.1" dependencies: @@ -8086,6 +8232,16 @@ fsevents@~2.1.1: languageName: node linkType: hard +"memory-fs@npm:^0.5.0": + version: 0.5.0 + resolution: "memory-fs@npm:0.5.0" + dependencies: + errno: ^0.1.3 + readable-stream: ^2.0.1 + checksum: 2/7a165df7e41c3cc9d3681b3e26f59b4b34fc956cc272ef8e49d2370014418c54aafda29c332698146c88448f203790993bf23f7e872ec0b3ecfe9600251b306f + languageName: node + linkType: hard + "meow@npm:^3.7.0": version: 3.7.0 resolution: "meow@npm:3.7.0" @@ -8137,10 +8293,10 @@ fsevents@~2.1.1: languageName: node linkType: hard -"merge2@npm:^1.2.3": - version: 1.2.4 - resolution: "merge2@npm:1.2.4" - checksum: 2/fa3e6dfa719ca6d000d6f58dc6ed09367bd18ffd56faa0adaac3d6b679626f011d0de14be2b7f89c299fc7705a7d0974282583a5b7ca11ac2f9ea9bcb0aa7386 +"merge2@npm:^1.2.3, merge2@npm:^1.3.0": + version: 1.3.0 + resolution: "merge2@npm:1.3.0" + checksum: 2/4d9be375e9019b5420a83e4ee58af6fa22ee2562c76d3fb7fda10a4dea72ed61350769e222bcfc130cddbd48abffe77523e7530e246873ad1bcc7c938894597f languageName: node linkType: hard @@ -8208,19 +8364,19 @@ fsevents@~2.1.1: languageName: node linkType: hard -"mime-db@npm:1.40.0": - version: 1.40.0 - resolution: "mime-db@npm:1.40.0" - checksum: 2/5d2a6ba01a05f594418286e2bb4747c63bccb79846e2e05b85f4552c921243490a111308900906382e4a24c6f4138f417005e4172ab1f01928669e5cbb9b0ce2 +"mime-db@npm:1.43.0": + version: 1.43.0 + resolution: "mime-db@npm:1.43.0" + checksum: 2/33744b61dd012903d507e3fd81ddad3740cc3fe30370c863e10545b1be1a5ef8ef3eed7ec1f0c036a66652ca3304600670650905f5f3a0efa3fded970d9f3c6e languageName: node linkType: hard "mime-types@npm:^2.1.11, mime-types@npm:^2.1.12, mime-types@npm:~2.1.19, mime-types@npm:~2.1.7": - version: 2.1.24 - resolution: "mime-types@npm:2.1.24" + version: 2.1.26 + resolution: "mime-types@npm:2.1.26" dependencies: - mime-db: 1.40.0 - checksum: 2/f086827eb8b9b0cce6314d2d9f51ebf35c28f24ece104fd9f2f96cf962d3d9a36f6873afcbd97964008e386f0f3c47041f040a42f5d8001ed31449b050af3b9c + mime-db: 1.43.0 + checksum: 2/350d0746a1eaacef86e2deda0ca51e629cda14e1f1b5c0b836e1d5ba5902f41d5ca3c5c41b5bdfeed6dbb761620f1f6cafcbc31ca24dc1bcd534b1a69559fb33 languageName: node linkType: hard @@ -8285,14 +8441,7 @@ fsevents@~2.1.1: languageName: node linkType: hard -"minimist@npm:^1.1.3, minimist@npm:^1.2.0": - version: 1.2.0 - resolution: "minimist@npm:1.2.0" - checksum: 2/c4b937775665b3ecfd5f851377113c71e1342882dab2f09676d2053d418eae0c7519c4393e171593860026e1f3173301a402ab8d215cbcaa5b4c99d58d610c84 - languageName: node - linkType: hard - -"minimist@npm:^1.2.5": +"minimist@npm:^1.1.3, minimist@npm:^1.2.0, minimist@npm:^1.2.5": version: 1.2.5 resolution: "minimist@npm:1.2.5" checksum: 2/0826fdc81823b8d1c8292dc86c2efe42a205153723d2a6f8ebe4771bfbfaab20cecb0ada58321359218ac15ce17f35e85b203cd3496c3d37cf8b71a2b86514de @@ -8306,17 +8455,7 @@ fsevents@~2.1.1: languageName: node linkType: hard -"minipass@npm:^2.2.1, minipass@npm:^2.3.5": - version: 2.3.5 - resolution: "minipass@npm:2.3.5" - dependencies: - safe-buffer: ^5.1.2 - yallist: ^3.0.0 - checksum: 2/216821784d1ce8a9e1a1e8ee57fe1846221f8632ebbb544305214f33aaefd721f7f5e2f27449eb481ba34e9c36662fd7d4cc9cc743a0b9ff7eee652312288925 - languageName: node - linkType: hard - -"minipass@npm:^2.8.6": +"minipass@npm:^2.6.0, minipass@npm:^2.8.6, minipass@npm:^2.9.0": version: 2.9.0 resolution: "minipass@npm:2.9.0" dependencies: @@ -8327,11 +8466,11 @@ fsevents@~2.1.1: linkType: hard "minizlib@npm:^1.2.1": - version: 1.2.1 - resolution: "minizlib@npm:1.2.1" + version: 1.3.3 + resolution: "minizlib@npm:1.3.3" dependencies: - minipass: ^2.2.1 - checksum: 2/70a8e1278ec8e3c3638e36ef6e5ece9dec7aa548e81acfe19ab714b0538eb1f47d25830f8fe62e0fcd7a5af5531a921637db66f250dd2be7bd1d0a877d401cf7 + minipass: ^2.9.0 + checksum: 2/3671c7a641ba5f12757a98ff7a965a1d32de107fd6383ce70974d0ff23858eb1abefc5f0423c47754d44258f7a0849298ddef8ffc6a379b51281542503ddbfa4 languageName: node linkType: hard @@ -8409,7 +8548,7 @@ fsevents@~2.1.1: languageName: node linkType: hard -"mkdirp@npm:0.5.1, mkdirp@npm:>=0.5 0, mkdirp@npm:^0.5.0, mkdirp@npm:^0.5.1, mkdirp@npm:~0.5.0, mkdirp@npm:~0.5.1": +"mkdirp@npm:0.5.1": version: 0.5.1 resolution: "mkdirp@npm:0.5.1" dependencies: @@ -8431,6 +8570,17 @@ fsevents@~2.1.1: languageName: node linkType: hard +"mkdirp@npm:>=0.5 0, mkdirp@npm:^0.5.0, mkdirp@npm:^0.5.1, mkdirp@npm:^0.5.3, mkdirp@npm:~0.5.0, mkdirp@npm:~0.5.1": + version: 0.5.5 + resolution: "mkdirp@npm:0.5.5" + dependencies: + minimist: ^1.2.5 + bin: + mkdirp: bin/cmd.js + checksum: 2/0bcacf16a7d94eb4f87382455130a836ea928491688e065e67bf7d1e9c5fcae01c95b820f53ec2307c77eafed460b1af9d7369defbc105fac8f0b431e6526089 + languageName: node + linkType: hard + "mocha@npm:7.1.1": version: 7.1.1 resolution: "mocha@npm:7.1.1" @@ -8485,7 +8635,10 @@ fsevents@~2.1.1: "@types/lodash": ^4.14.149 "@types/mocha": ^5.2.7 "@types/node": ^12.12.17 + "@types/sinon": ^9.0.0 + "@types/sinon-chai": ^3.2.4 "@types/webpack": ^4.41.0 + "@types/yargs": ^15.0.4 "@typescript-eslint/eslint-plugin": ^2.11.0 "@typescript-eslint/parser": ^2.11.0 anymatch: 3.1.1 @@ -8531,19 +8684,20 @@ fsevents@~2.1.1: prettier: ^1.19.1 progress: ^2.0.3 sass-loader: 6.0.7 - sinon: 7.5.0 + sinon: ^9.0.2 + sinon-chai: ^3.5.0 source-map-support: ^0.5.13 strip-ansi: ^5.2.0 tiny-worker: 2.3.0 toposort: ^2.0.2 - ts-mocha: ^6.0.0 - typescript: ^3.7.3 + ts-mocha: ^7.0.0 + typescript: ^3.8.3 webpack: 4.41.0 worker-loader: 2.0.0 write-file-webpack-plugin: ^4.2.0 yargs: 14.0.0 peerDependencies: - mocha: ">=4 <=7" + mocha: ">=6 <=7" webpack: ^4.0.0 bin: mochapack: ./bin/mochapack @@ -8578,20 +8732,13 @@ fsevents@~2.1.1: languageName: node linkType: hard -"ms@npm:2.1.1": +"ms@npm:2.1.1, ms@npm:^2.0.0, ms@npm:^2.1.1": version: 2.1.1 resolution: "ms@npm:2.1.1" checksum: 2/c3f516cd745d12b3ca2dbedf2a3644322a0f86ac53fee9f8ed8da3c80671a4f7de4c34b33cbdc1c8f6bc126b92141932a1413e61aafdb74e07b8505462821957 languageName: node linkType: hard -"ms@npm:^2.0.0, ms@npm:^2.1.1": - version: 2.1.2 - resolution: "ms@npm:2.1.2" - checksum: 2/5cfdc7128aac0dfca4772848fd3508b50dfccfb4b26c3cd0268fd0a5873c2a97ceea6291d97aeec14955f3a9a46481291bc146971f5e18435b02c4efc41d4d6f - languageName: node - linkType: hard - "mute-stream@npm:0.0.7": version: 0.0.7 resolution: "mute-stream@npm:0.0.7" @@ -8642,19 +8789,19 @@ fsevents@~2.1.1: linkType: hard "needle@npm:^2.2.1": - version: 2.4.0 - resolution: "needle@npm:2.4.0" + version: 2.4.1 + resolution: "needle@npm:2.4.1" dependencies: debug: ^3.2.6 iconv-lite: ^0.4.4 sax: ^1.2.4 bin: - needle: ./bin/needle - checksum: 2/9e56943773f131624ade7454fdfb4dc05fb62080710aea6bf271d168219cf68d087fe4fb287838e115e45021210cd9a445996a3b1fc1003404b91b5172c93df5 + needle: bin/needle + checksum: 2/f199c01e5cda11ec1dd58bb273ad5051715da64faf2c2e4165524830bee1c4b3df9647219583699964506e3a2d5c7c6ea1571a0a925bf2d703e21c56667a9928 languageName: node linkType: hard -"neo-async@npm:^2.5.0, neo-async@npm:^2.6.0, neo-async@npm:^2.6.1": +"neo-async@npm:^2.5.0, neo-async@npm:^2.6.1": version: 2.6.1 resolution: "neo-async@npm:2.6.1" checksum: 2/59b42da2b8ac3e0223e9ffb01e7a97bfefe91f5cb00f35c5823141056d7f86be6cb9c01f6952d6fa0d8fbc8c20e546db9c5d6477a5d016c80df482bfb3b503a2 @@ -8675,16 +8822,16 @@ fsevents@~2.1.1: languageName: node linkType: hard -"nise@npm:^1.5.2": - version: 1.5.2 - resolution: "nise@npm:1.5.2" +"nise@npm:^4.0.1": + version: 4.0.3 + resolution: "nise@npm:4.0.3" dependencies: - "@sinonjs/formatio": ^3.2.1 + "@sinonjs/commons": ^1.7.0 + "@sinonjs/fake-timers": ^6.0.0 "@sinonjs/text-encoding": ^0.7.1 just-extend: ^4.0.2 - lolex: ^4.1.0 path-to-regexp: ^1.7.0 - checksum: 2/b842d48558ac310c62f5b95c6e60534c9d0d7e5f7af7b88b92d4dac193311acc9e0c2fd845df63a8b412e067afc9ad56325c06e209aac387373139d06d694805 + checksum: 2/28006ffa51f9030a51cd30736583b104cde7ba2158f68ab0baca26c639458530c8f31057c937f039868512a60a6487ee85eb96a586b4afbb5440d8c175781e24 languageName: node linkType: hard @@ -8699,13 +8846,13 @@ fsevents@~2.1.1: linkType: hard "node-fetch-npm@npm:^2.0.2": - version: 2.0.2 - resolution: "node-fetch-npm@npm:2.0.2" + version: 2.0.4 + resolution: "node-fetch-npm@npm:2.0.4" dependencies: encoding: ^0.1.11 json-parse-better-errors: ^1.0.0 safe-buffer: ^5.1.1 - checksum: 2/c1b4940cbf2ac3ce56acd099f9ec5d17c5af9c189f4395c64f0a2f3a1b416c5f87f1cfcc96e9958b58eef82aed98b8d24b3127752331ecdd7fe72248ac80f14d + checksum: 2/22c0cceff5591bfef2e3a7bcafa271ec67e43bfc01849b37074161bf50f0e8d926b663708d50de75d4e1865c6a62af9c8d223f2985d0d9511fbdcef5ac5803a2 languageName: node linkType: hard @@ -8813,9 +8960,9 @@ fsevents@~2.1.1: languageName: node linkType: hard -"node-pre-gyp@npm:^0.12.0": - version: 0.12.0 - resolution: "node-pre-gyp@npm:0.12.0" +"node-pre-gyp@npm:*": + version: 0.14.0 + resolution: "node-pre-gyp@npm:0.14.0" dependencies: detect-libc: ^1.0.2 mkdirp: ^0.5.1 @@ -8826,25 +8973,23 @@ fsevents@~2.1.1: rc: ^1.2.7 rimraf: ^2.6.1 semver: ^5.3.0 - tar: ^4 + tar: ^4.4.2 bin: node-pre-gyp: ./bin/node-pre-gyp - checksum: 2/4d6a40a865d6b174fd4554182ae62541c58edd791d5aae96dd899fbee3028da8d3e526f9f28bdc0450d0660e324eb11a62ebd12351364ec2b38fba1b19e527d1 + checksum: 2/611768d209c4b46c7c9a352f884a1079fbe930ea5927489512dea02fd23708a396a487b8c8f07b770223c10c5edbc6f6868253ab5103e3d5ddc41a2c8c6f6853 languageName: node linkType: hard -"node-releases@npm:^1.1.42": - version: 1.1.42 - resolution: "node-releases@npm:1.1.42" - dependencies: - semver: ^6.3.0 - checksum: 2/b06e44f4c3902c40843146c63a8acc6e359afb0df1264f6850dee877436c4b253561528d911d99c2564dcb71cfbbd809e8bc5328324ad749ec17da7bba38aa41 +"node-releases@npm:^1.1.53": + version: 1.1.53 + resolution: "node-releases@npm:1.1.53" + checksum: 2/8313c6e2d0c1abcc355395cec0bf06167cbf5868392995e4b393aa9854ca2c21f679790404685a76359a0c221006c00671f2f86fd6e5778b50f3429422adc7c2 languageName: node linkType: hard "node-sass@npm:^4.11.0": - version: 4.12.0 - resolution: "node-sass@npm:4.12.0" + version: 4.13.1 + resolution: "node-sass@npm:4.13.1" dependencies: async-foreach: ^0.1.3 chalk: ^1.1.1 @@ -8853,7 +8998,7 @@ fsevents@~2.1.1: get-stdin: ^4.0.1 glob: ^7.0.3 in-publish: ^2.0.0 - lodash: ^4.17.11 + lodash: ^4.17.15 meow: ^3.7.0 mkdirp: ^0.5.1 nan: ^2.13.2 @@ -8865,7 +9010,7 @@ fsevents@~2.1.1: true-case-path: ^1.0.2 bin: node-sass: bin/node-sass - checksum: 2/0da6b8a96ef03023b04f6d8b1310c057e70c619816b60ce7cfecabc12738bb80ceb5b3f7b0c39c0a1d499d9962162a0854d02a1c9cbd43292793b2a29afa7137 + checksum: 2/ade0396b275c09c74044ef9a1043d6caaf0f731d1fcd47ff65bfd490a59a8bae60610c16bd43445fc15a94ccd5bf3328ec14763598f49cb0a40ca9f5cfad1f6e languageName: node linkType: hard @@ -8897,14 +9042,14 @@ fsevents@~2.1.1: linkType: hard "nopt@npm:^4.0.1, nopt@npm:~4.0.1": - version: 4.0.1 - resolution: "nopt@npm:4.0.1" + version: 4.0.3 + resolution: "nopt@npm:4.0.3" dependencies: abbrev: 1 osenv: ^0.1.4 bin: - nopt: ./bin/nopt.js - checksum: 2/64bcca8199222249ffc58986cd23534132529433bc53c3e9a8dfd28f395922521281241ed78a22eee4792057731724d5a4e1dfe4ee1bcd64d9002b8765eb7778 + nopt: bin/nopt.js + checksum: 2/31327df8b3a0b797f9917ae0d86811ec10785e856f8c8996b8d57ccc1862d99a90007d80d8bb0b22c34c5d90b79da795cdf36783716f962d9326af471c8d6311 languageName: node linkType: hard @@ -8915,39 +9060,39 @@ fsevents@~2.1.1: languageName: node linkType: hard -"normalize-package-data@npm:^2.0.0, normalize-package-data@npm:^2.3.2, normalize-package-data@npm:^2.3.4, normalize-package-data@npm:^2.4.0, normalize-package-data@npm:^2.5.0, normalize-package-data@npm:~1.0.1 || ^2.0.0": - version: 2.5.0 - resolution: "normalize-package-data@npm:2.5.0" +"normalize-package-data@npm:^2.0.0, normalize-package-data@npm:^2.3.2, normalize-package-data@npm:^2.3.4, normalize-package-data@npm:^2.4.0, normalize-package-data@npm:~1.0.1 || ^2.0.0, normalize-package-data@npm:~2.4.0": + version: 2.4.2 + resolution: "normalize-package-data@npm:2.4.2" dependencies: hosted-git-info: ^2.1.4 - resolve: ^1.10.0 + is-builtin-module: ^1.0.0 semver: 2 || 3 || 4 || 5 validate-npm-package-license: ^3.0.1 - checksum: 2/22b27f7d6435b9ec0023f63a20d86cb7ecb52edb2d829be608daa229272981370f6e7ac31bbafebf8a4dd72fbabd52effc1ec26d2dd3c09bd3db95e484fbb79a + checksum: 2/106cb9990c7676dd2fdd6816418de05547f0089ee6c5b4916ef2c9af291ad5cdb6c0211023e1b7abcce31d4b00eb8bbbfccca475f4a319b38ed5910965b12d30 languageName: node linkType: hard -"normalize-package-data@npm:~2.3.5": - version: 2.3.8 - resolution: "normalize-package-data@npm:2.3.8" +"normalize-package-data@npm:^2.5.0": + version: 2.5.0 + resolution: "normalize-package-data@npm:2.5.0" dependencies: hosted-git-info: ^2.1.4 - is-builtin-module: ^1.0.0 + resolve: ^1.10.0 semver: 2 || 3 || 4 || 5 validate-npm-package-license: ^3.0.1 - checksum: 2/e42c56e9bae133e2aa2352bed8429f71c12a2d399c8f4b9e929e0e059d7af529fc5e4efc20f60ed009196f4da1678fe6e307c75a217ccf1fc6d54dbcb8e12c77 + checksum: 2/22b27f7d6435b9ec0023f63a20d86cb7ecb52edb2d829be608daa229272981370f6e7ac31bbafebf8a4dd72fbabd52effc1ec26d2dd3c09bd3db95e484fbb79a languageName: node linkType: hard -"normalize-package-data@npm:~2.4.0": - version: 2.4.2 - resolution: "normalize-package-data@npm:2.4.2" +"normalize-package-data@npm:~2.3.5": + version: 2.3.8 + resolution: "normalize-package-data@npm:2.3.8" dependencies: hosted-git-info: ^2.1.4 is-builtin-module: ^1.0.0 semver: 2 || 3 || 4 || 5 validate-npm-package-license: ^3.0.1 - checksum: 2/106cb9990c7676dd2fdd6816418de05547f0089ee6c5b4916ef2c9af291ad5cdb6c0211023e1b7abcce31d4b00eb8bbbfccca475f4a319b38ed5910965b12d30 + checksum: 2/e42c56e9bae133e2aa2352bed8429f71c12a2d399c8f4b9e929e0e059d7af529fc5e4efc20f60ed009196f4da1678fe6e307c75a217ccf1fc6d54dbcb8e12c77 languageName: node linkType: hard @@ -9030,9 +9175,11 @@ fsevents@~2.1.1: linkType: hard "npm-bundled@npm:^1.0.1": - version: 1.0.6 - resolution: "npm-bundled@npm:1.0.6" - checksum: 2/cfc57cd5fa16177e8df7a884bcb054b3fee2c7e3c32c086a4c6d7f5ad979668aff3886121afd7d8e516f5970ffc89c3c9698deffab0937c0becfc22a3acbf9a9 + version: 1.1.1 + resolution: "npm-bundled@npm:1.1.1" + dependencies: + npm-normalize-package-bin: ^1.0.1 + checksum: 2/f74922a08283791d994d2ffa27de603f687a7f59223fdce923af45c69a454cb819e658bd329773adbbaca2a66f27fb90fecd9c3641abd48192a8ee1ada8068c0 languageName: node linkType: hard @@ -9054,11 +9201,11 @@ fsevents@~2.1.1: linkType: hard "npm-install-checks@npm:~3.0.0": - version: 3.0.0 - resolution: "npm-install-checks@npm:3.0.0" + version: 3.0.2 + resolution: "npm-install-checks@npm:3.0.2" dependencies: semver: ^2.3.0 || 3.x || 4 || 5 - checksum: 2/9db5b06e3ef053bdf39707e6a55c115107aa7ddfe7948c590f95d83341b717131c112098b0b0f249ca2b0c86ac1abeb05c6625cdc6c9775b0c6384892edec484 + checksum: 2/6083284672db6ddd90adf394f68922521dbb21149fdb2825ea0d5932bcbf9ce5664444533a32077e3c7dc481c87afa5bd728dac87ebda67178702c6601683b6e languageName: node linkType: hard @@ -9077,7 +9224,14 @@ fsevents@~2.1.1: languageName: node linkType: hard -"npm-package-arg@npm:^3.0.0 || ^4.0.0 || ^5.0.0, npm-package-arg@npm:^4.0.0 || ^5.0.0, npm-package-arg@npm:^5.1.2, npm-package-arg@npm:~5.1.2": +"npm-normalize-package-bin@npm:^1.0.1": + version: 1.0.1 + resolution: "npm-normalize-package-bin@npm:1.0.1" + checksum: 2/bb1f493217541d3d58bdec49215e0d6ac2294ba1548f36c826958e81f5afbc3c2c1c9e1753b447771a26858641a166f55b8300ae18eeb7635c6eb0a6b42d732d + languageName: node + linkType: hard + +"npm-package-arg@npm:^3.0.0 || ^4.0.0 || ^5.0.0, npm-package-arg@npm:^4.0.0 || ^5.0.0, npm-package-arg@npm:^4.0.0 || ^5.0.0 || ^6.0.0, npm-package-arg@npm:^5.1.2, npm-package-arg@npm:~5.1.2": version: 5.1.2 resolution: "npm-package-arg@npm:5.1.2" dependencies: @@ -9089,29 +9243,7 @@ fsevents@~2.1.1: languageName: node linkType: hard -"npm-package-arg@npm:^3.0.0 || ^4.0.0, npm-package-arg@npm:^4.1.1": - version: 4.2.1 - resolution: "npm-package-arg@npm:4.2.1" - dependencies: - hosted-git-info: ^2.1.5 - semver: ^5.1.0 - checksum: 2/ef076b64c67e07ca78d4ef6fd469bf74f50a2b28685a1bd69653485508c5a2919d61abf09880cff08ea397c1800caf9b1f9ab7fadca3bd7a0c75c1420dcad4ed - languageName: node - linkType: hard - -"npm-package-arg@npm:^4.0.0 || ^5.0.0 || ^6.0.0": - version: 6.1.0 - resolution: "npm-package-arg@npm:6.1.0" - dependencies: - hosted-git-info: ^2.6.0 - osenv: ^0.1.5 - semver: ^5.5.0 - validate-npm-package-name: ^3.0.0 - checksum: 2/5ecceceedbfb343852de2e71fb1d32943ccce6f8d6aed16d0e70bf483b249d53b6115320f2733f50375534c26ee6d60b9a17c12ce70fd7bf4a4d85d18ffe15a2 - languageName: node - linkType: hard - -"npm-package-arg@npm:~4.1.0": +"npm-package-arg@npm:^3.0.0 || ^4.0.0, npm-package-arg@npm:^4.1.1, npm-package-arg@npm:~4.1.0": version: 4.1.1 resolution: "npm-package-arg@npm:4.1.1" dependencies: @@ -9122,12 +9254,13 @@ fsevents@~2.1.1: linkType: hard "npm-packlist@npm:^1.1.6": - version: 1.4.4 - resolution: "npm-packlist@npm:1.4.4" + version: 1.4.8 + resolution: "npm-packlist@npm:1.4.8" dependencies: ignore-walk: ^3.0.1 npm-bundled: ^1.0.1 - checksum: 2/78443dce8cff6b0d385db627661094a7c97be853a190d6774ded0912dde6f1c96aa2728c60611790fb30677d899dfc67771983c0ac29e73147b40111dc81ae40 + npm-normalize-package-bin: ^1.0.1 + checksum: 2/0dd95e9373f6fbcc23cc3f96c62c67d7219c0c8bacf1d8f0e4a4f9fe628f3536ed07768e8ff140d70ea7ce498785cb6e13f5950e42aff28649473f023692a1a8 languageName: node linkType: hard @@ -9425,7 +9558,7 @@ fsevents@~2.1.1: languageName: node linkType: hard -"npmlog@npm:0.1 || 1 || 2, npmlog@npm:~2.0.4": +"npmlog@npm:0.1 || 1 || 2, npmlog@npm:~2.0.0 || ~3.1.0, npmlog@npm:~2.0.4": version: 2.0.4 resolution: "npmlog@npm:2.0.4" dependencies: @@ -9436,18 +9569,6 @@ fsevents@~2.1.1: languageName: node linkType: hard -"npmlog@npm:~2.0.0 || ~3.1.0": - version: 3.1.2 - resolution: "npmlog@npm:3.1.2" - dependencies: - are-we-there-yet: ~1.1.2 - console-control-strings: ~1.1.0 - gauge: ~2.6.0 - set-blocking: ~2.0.0 - checksum: 2/94407cedc8912fa62c858d10a894af18d6c8e25665da44b2c65a9676bd498099001671e37e39febe5f4225e5785b41f3e042a587958bd897d71d5877ee7b701e - languageName: node - linkType: hard - "nth-check@npm:~1.0.1": version: 1.0.2 resolution: "nth-check@npm:1.0.2" @@ -9531,7 +9652,14 @@ fsevents@~2.1.1: languageName: node linkType: hard -"object-keys@npm:^1.0.11, object-keys@npm:^1.0.12": +"object-inspect@npm:^1.7.0": + version: 1.7.0 + resolution: "object-inspect@npm:1.7.0" + checksum: 2/266968a2427233e13e72f38b998e3456f871c1b3bda9fdcd1bebf01584fb92c127aebfe2b88f5d3dc3ef9e0939ef4cbe7a38752f7e3d81820dd941ae733a710c + languageName: node + linkType: hard + +"object-keys@npm:^1.0.11, object-keys@npm:^1.0.12, object-keys@npm:^1.1.1": version: 1.1.1 resolution: "object-keys@npm:1.1.1" checksum: 2/9c976ff04af921888fe4aec2aec18f0451085fbfc88944251e7696c38430b2097d048c50edcfe64d3ed26b759e7e91ac2202bacba4dc88a27a3522ce4ab17342 @@ -9560,12 +9688,12 @@ fsevents@~2.1.1: linkType: hard "object.getownpropertydescriptors@npm:^2.0.3": - version: 2.0.3 - resolution: "object.getownpropertydescriptors@npm:2.0.3" + version: 2.1.0 + resolution: "object.getownpropertydescriptors@npm:2.1.0" dependencies: - define-properties: ^1.1.2 - es-abstract: ^1.5.1 - checksum: 2/530b1d6ba761fb7165e3bf9c84b923815d75d9f10f24dec7ef5620cfc3e4054f7ab81348ec4814b159dea87751e1f217da07d3e6255be9539dff40cb20c576e6 + define-properties: ^1.1.3 + es-abstract: ^1.17.0-next.1 + checksum: 2/1c82c6c3d3421036f9ed2c39ed39c5d4e3947264d73f7f5137ac3daf1363c05476d93230ea2dad2ba50d0ea424ebe844f1f55633c85338daf2008f72942c1f4a languageName: node linkType: hard @@ -9589,14 +9717,14 @@ fsevents@~2.1.1: linkType: hard "object.values@npm:^1.1.0": - version: 1.1.0 - resolution: "object.values@npm:1.1.0" + version: 1.1.1 + resolution: "object.values@npm:1.1.1" dependencies: define-properties: ^1.1.3 - es-abstract: ^1.12.0 + es-abstract: ^1.17.0-next.1 function-bind: ^1.1.1 has: ^1.0.3 - checksum: 2/690c22ba9b6f1e86767fa8f39137fa66a5a76cdd71c4bba9a6bfc7462d2902d5deffd1dc87f2752cb425da4b92d63fba1550b360b21c95c387f3cb5acd4b03f5 + checksum: 2/50e3b104b7256b6f19eeec05faa6dde4dc8d16188766f86c6d343ce63da75733a205a77fc630676cd01baf8b0d6fea5502f7f70940d2bbf8ab609fdba55d0941 languageName: node linkType: hard @@ -9645,7 +9773,7 @@ fsevents@~2.1.1: languageName: node linkType: hard -"optimist@npm:0.6.1, optimist@npm:^0.6.1": +"optimist@npm:0.6.1": version: 0.6.1 resolution: "optimist@npm:0.6.1" dependencies: @@ -9699,7 +9827,7 @@ fsevents@~2.1.1: languageName: node linkType: hard -"osenv@npm:0, osenv@npm:^0.1.4, osenv@npm:^0.1.5, osenv@npm:~0.1.3, osenv@npm:~0.1.4": +"osenv@npm:0, osenv@npm:^0.1.4, osenv@npm:~0.1.3, osenv@npm:~0.1.4": version: 0.1.5 resolution: "osenv@npm:0.1.5" dependencies: @@ -9763,11 +9891,11 @@ fsevents@~2.1.1: linkType: hard "p-limit@npm:^2.0.0, p-limit@npm:^2.2.0": - version: 2.2.1 - resolution: "p-limit@npm:2.2.1" + version: 2.3.0 + resolution: "p-limit@npm:2.3.0" dependencies: p-try: ^2.0.0 - checksum: 2/708c62fada073f31dffa600527c1c747c6e55773f050fe6b5c0ad0437b3d6d50a0f1455e4135bc2a120eafcc3362abd43d188c3879f91b564c327eb12e38bf03 + checksum: 2/168f21ec28cf1f1b1bab295ee54366245490224f4024e7f721497603525b7759e0fc27cc22a0048c6d381f88f25030aa97029e1754903ef059274ba1e0db3ed7 languageName: node linkType: hard @@ -9913,20 +10041,20 @@ fsevents@~2.1.1: linkType: hard "pako@npm:~1.0.5": - version: 1.0.10 - resolution: "pako@npm:1.0.10" - checksum: 2/50e4d5c869220d1ec2e127f81936d36550ad4700a8f39adab3d1af42dba0036f8373bca58ae8fb825a5e2476af3acb43c3a4e190c8c97fb5cef4de2b9715db4a + version: 1.0.11 + resolution: "pako@npm:1.0.11" + checksum: 2/2c714dee8963b93f5d160f572fd3cf96bad9bf6afacf86096de4010e134e92ab6be0963ddcb1203193c392f953cd3e31de86323c2f7e125020a8f27924c59633 languageName: node linkType: hard "parallel-transform@npm:^1.1.0": - version: 1.1.0 - resolution: "parallel-transform@npm:1.1.0" + version: 1.2.0 + resolution: "parallel-transform@npm:1.2.0" dependencies: - cyclist: ~0.2.2 + cyclist: ^1.0.1 inherits: ^2.0.3 readable-stream: ^2.1.5 - checksum: 2/1243f2575eb86c4a333e189eac9dec79806994783a293ffabdfa3030c4b1136ac63a72421e23965d96cf28e249ee645fb7cabdf4a71ed8193bc463823a9f4d5f + checksum: 2/0b7f42071f062299267492f905b718d38d71350ace3e34a2a794ff91d9c8f8f2a20a32e5c4c069aa49402dfcd53fc841ddf208006fe5c963cfcc852f4c092dae languageName: node linkType: hard @@ -9940,8 +10068,8 @@ fsevents@~2.1.1: linkType: hard "parse-asn1@npm:^5.0.0": - version: 5.1.4 - resolution: "parse-asn1@npm:5.1.4" + version: 5.1.5 + resolution: "parse-asn1@npm:5.1.5" dependencies: asn1.js: ^4.0.0 browserify-aes: ^1.0.0 @@ -9949,7 +10077,7 @@ fsevents@~2.1.1: evp_bytestokey: ^1.0.0 pbkdf2: ^3.0.3 safe-buffer: ^5.1.1 - checksum: 2/f2cdd4ce12fa519dca433fd5742b1486668acd0d2c7e6e2ab0c2124aa1de41eec11d9adcec6a05a4fd9dbdf857c10b54163826447d5fcbdc8d6388001a359b2b + checksum: 2/ac4e6f8ef52d53258d8d1354c6ae56e7fae2d70ed7e86f3e6eb435c5e00b0c459d9d4dcde38500ab0e613e31cda350331eb12126a22dee476c3942d77a38b5b5 languageName: node linkType: hard @@ -10062,9 +10190,9 @@ fsevents@~2.1.1: linkType: hard "path-key@npm:^3.0.0, path-key@npm:^3.1.0": - version: 3.1.0 - resolution: "path-key@npm:3.1.0" - checksum: 2/0c5c50e37f9872efa9980ba059746b903e9f6ed77bbcb619e3a1f8194f81dea59db04b498efb99b29d48d118626c9e23ed43083bf953755a27519674c3abf2e3 + version: 3.1.1 + resolution: "path-key@npm:3.1.1" + checksum: 2/456634d82f8574aae839b66cb83de0760b0da7d16fe44ce1e09d8f3f9597c2b707f569a7d05388bf35e8320c5afdd34b45c251a9dd4d00c9308f27df158e284c languageName: node linkType: hard @@ -10076,11 +10204,11 @@ fsevents@~2.1.1: linkType: hard "path-to-regexp@npm:^1.7.0": - version: 1.7.0 - resolution: "path-to-regexp@npm:1.7.0" + version: 1.8.0 + resolution: "path-to-regexp@npm:1.8.0" dependencies: isarray: 0.0.1 - checksum: 2/e78657bcd7353b67060cd4543276d2dc5b1e3c7503515291b6974401246a47360bc47155ce9cb113a2d2a3f8045501ae472a0b109ab2c62491f6cf8effb81c08 + checksum: 2/d1582065eee4ce809a38445d025e24abe7da2ab045f8ffec448c10e9cbd7869e6d8f38fa32859fb3823e98edbab73cd5679cbf1c34abd10d2d610d800373a159 languageName: node linkType: hard @@ -10154,10 +10282,10 @@ fsevents@~2.1.1: languageName: node linkType: hard -"picomatch@npm:^2.0.4, picomatch@npm:^2.0.5": - version: 2.0.7 - resolution: "picomatch@npm:2.0.7" - checksum: 2/365b6df979ef34bf9cb8d04d49c75b5e7d72c064176a0e682acc3990396dc1987a1fd4cb7fa7909960cc2131510b9ed43f987ba30233cf567763709480d73fba +"picomatch@npm:^2.0.4, picomatch@npm:^2.0.5, picomatch@npm:^2.2.1": + version: 2.2.2 + resolution: "picomatch@npm:2.2.2" + checksum: 2/45f17ed0a5f17f28f41067549f9663c8723a678f1c8e025b59eb260213aee12a48f1ae0ec71262867f1734ea0c77e3410e1c2242820c60b1d8ea80e2a8065a34 languageName: node linkType: hard @@ -10234,6 +10362,15 @@ fsevents@~2.1.1: languageName: node linkType: hard +"pkg-up@npm:^2.0.0": + version: 2.0.0 + resolution: "pkg-up@npm:2.0.0" + dependencies: + find-up: ^2.1.0 + checksum: 2/8e2f0e831b4bcbe6db0c382d9e6be6f9c408bc73d0e5f2658cd4345bac48a039c0bd9025b64353404129e14a058ad580d904347de4e15ec635f2fd3267e37e08 + languageName: node + linkType: hard + "posix-character-classes@npm:^0.1.0": version: 0.1.1 resolution: "posix-character-classes@npm:0.1.1" @@ -10263,12 +10400,12 @@ fsevents@~2.1.1: linkType: hard "postcss-modules-scope@npm:^2.1.0": - version: 2.1.0 - resolution: "postcss-modules-scope@npm:2.1.0" + version: 2.2.0 + resolution: "postcss-modules-scope@npm:2.2.0" dependencies: postcss: ^7.0.6 postcss-selector-parser: ^6.0.0 - checksum: 2/7f7af0d22e748354895a6ae174f8c2c08adba1f80cce9395f12bcff44c35b342ad6138d3869ed218906e4e7f1fb2a19ff0c418e4e6b54faa8517c69bd542ef3e + checksum: 2/c1124c3595aaa3e17cd6b21a874f3ebc7ffbc46aba134fc016fed54b2d25b71c7871702482a3123d846f66505a74be6a65ddfb591b14c025de9d048d8a17e80d languageName: node linkType: hard @@ -10294,20 +10431,20 @@ fsevents@~2.1.1: linkType: hard "postcss-value-parser@npm:^4.0.0": - version: 4.0.2 - resolution: "postcss-value-parser@npm:4.0.2" - checksum: 2/d2c01aae9c3e28c6bcf6957ffa4336d292a401fefa132d916c7090aa862ef03aa24f97224d099bd990d76a4042a54e78ed08e947020e6465d7637ef74aa53fc1 + version: 4.0.3 + resolution: "postcss-value-parser@npm:4.0.3" + checksum: 2/dd848cb4bd7702f9c44299bceb70f811ca34378d7e257f11122dbc31052f8d4154c5db17171307cd3beff3168c33d858df2e2b50c61d8685cfca0c5a365ef746 languageName: node linkType: hard "postcss@npm:^7.0.14, postcss@npm:^7.0.16, postcss@npm:^7.0.17, postcss@npm:^7.0.5, postcss@npm:^7.0.6": - version: 7.0.18 - resolution: "postcss@npm:7.0.18" + version: 7.0.27 + resolution: "postcss@npm:7.0.27" dependencies: chalk: ^2.4.2 source-map: ^0.6.1 supports-color: ^6.1.0 - checksum: 2/11e0dddca1193c3320b78f5672693fb8d22d14c5dfa65e7c6cbfe354447c4c8c8674c7d90626bfc89bfea555f76838441189f94773ffd9bd60b42feb073a6a3d + checksum: 2/422ac57764af081fb7c7727cdd3e9705434086cc49fc95641c3832faacb02788ceb3b9c7a3bf84c144e50d8e825e8dae0365398f571b8c2c6be7ff58218e9cdd languageName: node linkType: hard @@ -10349,18 +10486,18 @@ fsevents@~2.1.1: linkType: hard "prismjs@npm:^1.15.0": - version: 1.17.1 - resolution: "prismjs@npm:1.17.1" + version: 1.20.0 + resolution: "prismjs@npm:1.20.0" dependencies: clipboard: ^2.0.0 dependenciesMeta: clipboard: optional: true - checksum: 2/515068534adfc9efd5e29a5972d2a2e8d12ea7c501553d40c23dccaa1877e0032652b8be24bfc1e46da91b85c40222103656a5754cf935b15ec9dde9947de1df + checksum: 2/31a69a467ace0e28c9b22df550d7926edad9e21abd2b9bb6064c2deea5a6ca642cae1321fd7a6b3644ce2004bc5cd1a9405655cacaafdb908f21b5994eae98b4 languageName: node linkType: hard -"private@npm:^0.1.6": +"private@npm:^0.1.8": version: 0.1.8 resolution: "private@npm:0.1.8" checksum: 2/9bad8aacf77f84e6add2d64d7aa3b3a52ae477d8b65641191dbdcfb16a82e516359e7c87e3e77aea61775afe0ea7f81d5aebf672470317f1647b1782c97ab844 @@ -10451,10 +10588,10 @@ fsevents@~2.1.1: languageName: node linkType: hard -"psl@npm:^1.1.24": - version: 1.3.0 - resolution: "psl@npm:1.3.0" - checksum: 2/f836410f7cc24164fa56d52a4d5306dd4ff101d0cb246f3c2240c4e645b45a5ccd4d528ada6a643bfba64ff3174a1b31713d31cfc1548a3ae6c1720162911401 +"psl@npm:^1.1.28": + version: 1.8.0 + resolution: "psl@npm:1.8.0" + checksum: 2/d98f6d81d9a282b5bca67f0354faecf5ff1b6211a5292d9a71c121eb5c57b60fff43591af802049eb03f3da7e35e53b8f93c6ba0b2bc865eac54362dad225e4e languageName: node linkType: hard @@ -10527,7 +10664,7 @@ fsevents@~2.1.1: languageName: node linkType: hard -"punycode@npm:^2.1.0": +"punycode@npm:^2.1.0, punycode@npm:^2.1.1": version: 2.1.1 resolution: "punycode@npm:2.1.1" checksum: 2/dcb3d0c49fee1cb355805b6b7079ebc6140528b355164906085d4859e6c964e4762ec2d48b03cae9e6cfe86d8516e595f1c396b340c4a89442db3244e40be9de @@ -10638,11 +10775,11 @@ fsevents@~2.1.1: linkType: hard "read-cmd-shim@npm:~1.0.1": - version: 1.0.1 - resolution: "read-cmd-shim@npm:1.0.1" + version: 1.0.5 + resolution: "read-cmd-shim@npm:1.0.5" dependencies: graceful-fs: ^4.1.2 - checksum: 2/1397897f749fdfb0e791b9fa832f115c063fa6c1653ccc493bbb95ffbde6f023ab624b23ab9833a4915ceff638ecaf94e34595c302ee6a3ed875061601e92323 + checksum: 2/daf65a7f183af38b581185e037e1f0f1905545a45b59a10620a0b330bb83a0d145b7eeaab9b3f1f09972bfd22d4ba5a1145ce362fcacbf1431f1e02730ce8905 languageName: node linkType: hard @@ -10799,8 +10936,8 @@ fsevents@~2.1.1: linkType: hard "readable-stream@npm:1 || 2, readable-stream@npm:^2.0.0, readable-stream@npm:^2.0.1, readable-stream@npm:^2.0.2, readable-stream@npm:^2.0.6, readable-stream@npm:^2.1.5, readable-stream@npm:^2.2.2, readable-stream@npm:^2.3.0, readable-stream@npm:^2.3.3, readable-stream@npm:^2.3.5, readable-stream@npm:^2.3.6, readable-stream@npm:~2.3.2, readable-stream@npm:~2.3.6": - version: 2.3.6 - resolution: "readable-stream@npm:2.3.6" + version: 2.3.7 + resolution: "readable-stream@npm:2.3.7" dependencies: core-util-is: ~1.0.0 inherits: ~2.0.3 @@ -10809,18 +10946,18 @@ fsevents@~2.1.1: safe-buffer: ~5.1.1 string_decoder: ~1.1.1 util-deprecate: ~1.0.1 - checksum: 2/6c81b2adec53f8d107bc49c5574d681736ae7d3729b12d520c7734ff277fc339d8ac39418a66b96f60a80b057505baf6a5ab8b1b1d3a40895930500730b28701 + checksum: 2/2762fb8c14c6fd0e20c8ddadae8ea839a9b9ab8e4b4b815ddc3370b10e50d17ac34f7393451be4e927f8da9cc228fd8b2ad28e90bf269ee0a8b46178efb23082 languageName: node linkType: hard "readable-stream@npm:^3.1.1": - version: 3.4.0 - resolution: "readable-stream@npm:3.4.0" + version: 3.6.0 + resolution: "readable-stream@npm:3.6.0" dependencies: inherits: ^2.0.3 string_decoder: ^1.1.1 util-deprecate: ^1.0.1 - checksum: 2/97b667b07db3be61842607a58b8cd1d57e22fbfe3fb77635bdf183de64c58227604730bdfd222cba3895dbd3a7e8ce2a4eab0d27064f8a990b2b990e2380fad7 + checksum: 2/78b50a9fc23a024b54fc268c5e61a6d7368a0842f9703efef56f954950445d86a593b7c7baf913475f6593450450b15e3500443bd2abdd6b3b017cf23c278956 languageName: node linkType: hard @@ -10927,12 +11064,12 @@ fsevents@~2.1.1: languageName: node linkType: hard -"regenerate-unicode-properties@npm:^8.1.0": - version: 8.1.0 - resolution: "regenerate-unicode-properties@npm:8.1.0" +"regenerate-unicode-properties@npm:^8.2.0": + version: 8.2.0 + resolution: "regenerate-unicode-properties@npm:8.2.0" dependencies: regenerate: ^1.4.0 - checksum: 2/c004240f55b760b30a85e1a5f55c80a34d54b547badd33f0f35caa835ab7a51690adc59dcd70786e8969185b849b0f86575d21c593ef30885e523e3d9a455e5c + checksum: 2/24432ecd2030746ce752dcb97d210d847d7b6397654e7b259b6fce31c40a82a49b01d6234d23228eb190a503629da92ca69e29173aee6f1da6c618fbe2683533 languageName: node linkType: hard @@ -10950,19 +11087,20 @@ fsevents@~2.1.1: languageName: node linkType: hard -"regenerator-runtime@npm:^0.13.2": - version: 0.13.3 - resolution: "regenerator-runtime@npm:0.13.3" - checksum: 2/bcfdb192b5db735019560d9467038912e510ee993ca2d45920efb4e4ee1e4169f79aa1aa86b628752acc83119625853fe68bd1f91835a696c2d4ad57a5b257b9 +"regenerator-runtime@npm:^0.13.4": + version: 0.13.5 + resolution: "regenerator-runtime@npm:0.13.5" + checksum: 2/566a658570ce9c58b097e8d21f57295069a4ce02999626db737ef044fb669161184f37e4e071896cc6f2011223ce51bc47345d96517b28e2fc8fb014be4df0ca languageName: node linkType: hard -"regenerator-transform@npm:^0.14.0": - version: 0.14.1 - resolution: "regenerator-transform@npm:0.14.1" +"regenerator-transform@npm:^0.14.2": + version: 0.14.4 + resolution: "regenerator-transform@npm:0.14.4" dependencies: - private: ^0.1.6 - checksum: 2/e2be5e4340dfb72553887eadda5374c1b4aa5d906d4b4d9a8d69fcec35c51c049c4201b7d413208953f514c6e7ac06e30d91e4ffb98fdf56311a7abdd0dd5e57 + "@babel/runtime": ^7.8.4 + private: ^0.1.8 + checksum: 2/68b6283efc755934de91d6f9d945acf12b1bf88d7a1dd64f94165da5629e21f34528ed5b679342c9bcc06a64bd5cf8d911f28c529e14b56a86e578055dd84757 languageName: node linkType: hard @@ -10993,23 +11131,23 @@ fsevents@~2.1.1: linkType: hard "regexpp@npm:^3.0.0": - version: 3.0.0 - resolution: "regexpp@npm:3.0.0" - checksum: 2/963a8873697b4ebbac0e2fb8c3cce8cb23ce41cf11182e6b05e30dea085e93b7fdfe99f2997a3f4e6f1eae83e06b1087cabe14dde4c48d2c2af6a44d86f36144 + version: 3.1.0 + resolution: "regexpp@npm:3.1.0" + checksum: 2/1f2ca1f5325d94bcd4864b47e11b64d7d3b692016b2c56ebf055a7588d0deb53da1843272e54ad1cf479f1a5286c55bb2c248e4e0e4790713a2ede5d7caf836a languageName: node linkType: hard -"regexpu-core@npm:^4.6.0": - version: 4.6.0 - resolution: "regexpu-core@npm:4.6.0" +"regexpu-core@npm:^4.7.0": + version: 4.7.0 + resolution: "regexpu-core@npm:4.7.0" dependencies: regenerate: ^1.4.0 - regenerate-unicode-properties: ^8.1.0 - regjsgen: ^0.5.0 - regjsparser: ^0.6.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.1.0 - checksum: 2/9d62ed2f470f6d669dca975f35d667d734340564a56875de1913a892ce0164e53b97d7691bc6853b535f9ba0a8985fc56c4af5dc25bde799a4702256d516e8af + unicode-match-property-value-ecmascript: ^1.2.0 + checksum: 2/aa7ce17121339a7ec65ef6ec95c1a5cf82f3dbf620bb0bc4a2eb1ab92556c61d9d894e61db9750f8f1af05aacd86c36c21323dfd21f694bd15a79c3a6fe66316 languageName: node linkType: hard @@ -11024,12 +11162,11 @@ fsevents@~2.1.1: linkType: hard "registry-auth-token@npm:^4.0.0": - version: 4.0.0 - resolution: "registry-auth-token@npm:4.0.0" + version: 4.1.1 + resolution: "registry-auth-token@npm:4.1.1" dependencies: rc: ^1.2.8 - safe-buffer: ^5.0.1 - checksum: 2/aff1df91adeb374cace0ca36ff67a5a68ec118decd74a5fdc618e1a0b1f4d201d3ed1bcc518b348e77ed5e5738aee4305abd2452e045ae9b8e0fb2675d455cad + checksum: 2/de1225d5255f8cfeb125580ffc6b5a4c706278b86b70c80465c0082cc260924cb391d0ff7a3d0b0a03c49beb53d2cbf1466ccd9e52fb700abc0b8d9cb17d9286 languageName: node linkType: hard @@ -11051,21 +11188,21 @@ fsevents@~2.1.1: languageName: node linkType: hard -"regjsgen@npm:^0.5.0": +"regjsgen@npm:^0.5.1": version: 0.5.1 resolution: "regjsgen@npm:0.5.1" checksum: 2/8622077f3c8d0b6640963d963b95bbe0ba931b60760f59972815a1e607df361f2d31e7cb6ef28d3e771e4e900d0b70ee4673b0c38bd01a57134ee3674f92510c languageName: node linkType: hard -"regjsparser@npm:^0.6.0": - version: 0.6.0 - resolution: "regjsparser@npm:0.6.0" +"regjsparser@npm:^0.6.4": + version: 0.6.4 + resolution: "regjsparser@npm:0.6.4" dependencies: jsesc: ~0.5.0 bin: regjsparser: bin/parser - checksum: 2/afbb53879c085a19bbfdae30e3cc4b42622606ce4b015871ff8641b7107fa1c24b44a95acef96c8c3dd7d225b0577725814ac5a56d73409328af22eb15e79f79 + checksum: 2/f8d8ca20fa88a44745c11c3af362b3897c84a3bcaa8e887db14077f906a5699367ea8401ba58d512afe8bc21eeab6cdc7b2d750b5751b9845ed5fdedf2fe71c7 languageName: node linkType: hard @@ -11139,8 +11276,8 @@ fsevents@~2.1.1: linkType: hard "request@npm:^2.74.0, request@npm:^2.87.0, request@npm:^2.88.0": - version: 2.88.0 - resolution: "request@npm:2.88.0" + version: 2.88.2 + resolution: "request@npm:2.88.2" dependencies: aws-sign2: ~0.7.0 aws4: ^1.8.0 @@ -11149,7 +11286,7 @@ fsevents@~2.1.1: extend: ~3.0.2 forever-agent: ~0.6.1 form-data: ~2.3.2 - har-validator: ~5.1.0 + har-validator: ~5.1.3 http-signature: ~1.2.0 is-typedarray: ~1.0.0 isstream: ~0.1.2 @@ -11159,10 +11296,10 @@ fsevents@~2.1.1: performance-now: ^2.1.0 qs: ~6.5.2 safe-buffer: ^5.1.2 - tough-cookie: ~2.4.3 + tough-cookie: ~2.5.0 tunnel-agent: ^0.6.0 uuid: ^3.3.2 - checksum: 2/df9f582f113c89089b454d60f7698abbf3753ac2a09f94a01caf0ecbf0a8ff7c062d2aa524a5528e8910e027dce86bb5fd11268bec0246bd374a0038fe963a0f + checksum: 2/5db7c2cf5e9057d4db41ed759aa612eb4b7f7f6d4e8f8a20b71d3b21ff68db155a3f5dc7b9fa80babb4e6e6b4668b5eff405240534edb5abe343450343d98626 languageName: node linkType: hard @@ -11244,21 +11381,21 @@ fsevents@~2.1.1: languageName: node linkType: hard -"resolve@^1.10.0, resolve@^1.11.0, resolve@^1.3.2, resolve@^1.5.0, resolve@^1.8.1": - version: 1.13.1 - resolution: "resolve@npm:1.13.1" +"resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.3.2, resolve@^1.8.1": + version: 1.16.1 + resolution: "resolve@npm:1.16.1" dependencies: path-parse: ^1.0.6 - checksum: 2/113d9192e815a21a01c0b5145f9caa37a94528023a11f07af1aaead69568cc4223b29c7572da626e01c0b572ac0a57e1f96e20eed9e537f8eb7558964a530fd3 + checksum: 2/68d77cb1cc05b280cdaf7e8137301a32fba5631ae925717022166fb6f93cda4e824008415e43120d2925e1de866e051f863730aea1047d3c7098f9dedbece2a2 languageName: node linkType: hard -"resolve@patch:resolve@^1.10.0#builtin, resolve@patch:resolve@^1.11.0#builtin, resolve@patch:resolve@^1.3.2#builtin, resolve@patch:resolve@^1.5.0#builtin, resolve@patch:resolve@^1.8.1#builtin": - version: 1.13.1 - resolution: "resolve@patch:resolve@npm%3A1.13.1#builtin::version=1.13.1&hash=e7677c" +"resolve@patch:resolve@^1.10.0#builtin, resolve@patch:resolve@^1.12.0#builtin, resolve@patch:resolve@^1.13.1#builtin, resolve@patch:resolve@^1.3.2#builtin, resolve@patch:resolve@^1.8.1#builtin": + version: 1.16.1 + resolution: "resolve@patch:resolve@npm%3A1.16.1#builtin::version=1.16.1&hash=e7677c" dependencies: path-parse: ^1.0.6 - checksum: 2/11dce873b40c79c80a9f475c09b1da6b6962eea49ac3382c077dcceaee425d68c37bc87cb99d4cd7b93d70b3d88b17449f7a63cde1aba36386433fd33922de4f + checksum: 2/7ac1642b71c8f432d7b4f3558198688cef4bd96fc95af5c7ff82d75256fd8e5984c771d0d04a72c8e601fa012aa571dfa6503886c302f3e1af56e05c0a1d09a3 languageName: node linkType: hard @@ -11305,14 +11442,25 @@ fsevents@~2.1.1: languageName: node linkType: hard -"reusify@npm:^1.0.0": +"reusify@npm:^1.0.4": version: 1.0.4 resolution: "reusify@npm:1.0.4" checksum: 2/0326ef6256ca9eb25bc098034b197bf0bdd9d0c6b1e0d4a4882a92108f2f0d6e5e8c56213c3f96e270b567c585198a590e0c50f2506186cf8e854e58bf3f2822 languageName: node linkType: hard -"rimraf@npm:2, rimraf@npm:2.6.3, rimraf@npm:^2.5.2, rimraf@npm:^2.5.4, rimraf@npm:^2.6.1, rimraf@npm:^2.6.2, rimraf@npm:^2.6.3, rimraf@npm:~2.6.1": +"rimraf@npm:2, rimraf@npm:^2.5.2, rimraf@npm:^2.5.4, rimraf@npm:^2.6.1, rimraf@npm:^2.6.2, rimraf@npm:^2.6.3": + version: 2.7.1 + resolution: "rimraf@npm:2.7.1" + dependencies: + glob: ^7.1.3 + bin: + rimraf: ./bin.js + checksum: 2/0ba1b1dc13d183bea4178431edace296b6d654f9dfe1347dd5d90473800d9bee914f2062bafa6eeafb0949ee0211f9b5427d55f1c91a10c55fc257600351638a + languageName: node + linkType: hard + +"rimraf@npm:2.6.3, rimraf@npm:~2.6.1": version: 2.6.3 resolution: "rimraf@npm:2.6.3" dependencies: @@ -11324,13 +11472,13 @@ fsevents@~2.1.1: linkType: hard "rimraf@npm:^3.0.0": - version: 3.0.0 - resolution: "rimraf@npm:3.0.0" + version: 3.0.2 + resolution: "rimraf@npm:3.0.2" dependencies: glob: ^7.1.3 bin: - rimraf: ./bin.js - checksum: 2/589beb8147bca129313c55172cfbc322701df1a9473d6e06c6a4e988eff387b9a300cfbdfe39c17ca2c6277b2e8745cfc5d2c138be7876537fbfc7170d766725 + rimraf: bin.js + checksum: 2/073ac197ead162c12e2ac70182cea832cee3492836966b58387761aa6dc8fa8a677102b626bcbb8991c3629cfbdc080c39a40b5563b9ee706c1437a1f2d0863c languageName: node linkType: hard @@ -11355,12 +11503,12 @@ fsevents@~2.1.1: languageName: node linkType: hard -"run-async@npm:^2.2.0": - version: 2.3.0 - resolution: "run-async@npm:2.3.0" +"run-async@npm:^2.2.0, run-async@npm:^2.4.0": + version: 2.4.0 + resolution: "run-async@npm:2.4.0" dependencies: is-promise: ^2.1.0 - checksum: 2/cf3c7a32be28a1c8eadc5712cc57415b57de931f6310577c1c14a61672cb7994ecc025705a705acd46d03ebf556264719def45676677121d4497ea0acbdd6f99 + checksum: 2/7e94727fc9d18c4097217793d8c1cf1c2e6b771ef83df72fcfc3b0986100219e3f5d37da61e649d0d6214499b634eb7f9b81956c8c5f6ed9cb64c1a82a9ef3ed languageName: node linkType: hard @@ -11405,29 +11553,29 @@ fsevents@~2.1.1: languageName: node linkType: hard -"rxjs@npm:^6.3.3, rxjs@npm:^6.4.0": - version: 6.5.3 - resolution: "rxjs@npm:6.5.3" +"rxjs@npm:^6.3.3, rxjs@npm:^6.5.3": + version: 6.5.5 + resolution: "rxjs@npm:6.5.5" dependencies: tslib: ^1.9.0 - checksum: 2/1131ed43f09d2ec98c7ab395c4b2a5ccd077fbf83068bf96355dae1351dffabe6cb0a30f771222e71295a544c01fecd76c7e387411f3b21359d434f8333ee2e7 - languageName: node - linkType: hard - -"safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:^5.1.1, safe-buffer@npm:^5.1.2": - version: 5.2.0 - resolution: "safe-buffer@npm:5.2.0" - checksum: 2/de16f61e731c46d0fe3135fc2929b39a1b1354dc3ef00dac618fc07a17a93bb54246dd4959f123245d02343d26a39511508bfdf60c1668e4a769fcd46928c0a2 + checksum: 2/81358826454ec83f7a74a590aee22f2bd7f01120ce764720a6f03cafcd93b0dc1b6ffac07d3a013222a06a9bf9ecb473b916bcdc2ec9cfdad57b1796bd0410af languageName: node linkType: hard -"safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": +"safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:^5.1.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": version: 5.1.2 resolution: "safe-buffer@npm:5.1.2" checksum: 2/8d769ddf67201856b12b8335cde895ecf191a965e829d8b2d807a35d2b7aceecf5b32c4294e150f2387eb2a198199ada10b0d27600c0787a41d5e83a480b0f30 languageName: node linkType: hard +"safe-buffer@npm:~5.2.0": + version: 5.2.0 + resolution: "safe-buffer@npm:5.2.0" + checksum: 2/de16f61e731c46d0fe3135fc2929b39a1b1354dc3ef00dac618fc07a17a93bb54246dd4959f123245d02343d26a39511508bfdf60c1668e4a769fcd46928c0a2 + languageName: node + linkType: hard + "safe-regex@npm:^1.1.0": version: 1.1.0 resolution: "safe-regex@npm:1.1.0" @@ -11502,13 +11650,13 @@ fsevents@~2.1.1: languageName: node linkType: hard -"schema-utils@npm:^2.0.0": - version: 2.4.1 - resolution: "schema-utils@npm:2.4.1" +"schema-utils@npm:^2.0.0, schema-utils@npm:^2.6.5": + version: 2.6.6 + resolution: "schema-utils@npm:2.6.6" dependencies: - ajv: ^6.10.2 + ajv: ^6.12.0 ajv-keywords: ^3.4.1 - checksum: 2/7d1219096c399b6f01b4233cd96e822f413bdd8b06d530c0179f4c131b605eb8e99df7ab35c04084b232f8a3539382d3788862189808b017750bfe86fe784730 + checksum: 2/9c56f5fb4d614e0b919999932c1d470af442f1d7a0c4facf947120220c1bc95410c3a09546c4f97ebb5a1afd18c8d14498e9f82aba0d7921620052afa490726a languageName: node linkType: hard @@ -11563,6 +11711,15 @@ fsevents@~2.1.1: languageName: node linkType: hard +"semver@npm:7.0.0": + version: 7.0.0 + resolution: "semver@npm:7.0.0" + bin: + semver: bin/semver.js + checksum: 2/21753d59bd1331d4b869d2dd64786cff91ca0306225435f1130b04958f970aac7e25ad32a47a33ee0939056f8a88ce9f2ff820d93179934ef5bd9d850d93355a + languageName: node + linkType: hard + "semver@npm:^4.1.0": version: 4.3.6 resolution: "semver@npm:4.3.6" @@ -11590,10 +11747,10 @@ fsevents@~2.1.1: languageName: node linkType: hard -"serialize-javascript@npm:^1.7.0": - version: 1.7.0 - resolution: "serialize-javascript@npm:1.7.0" - checksum: 2/cd94cef2042de4b0e8415921aafb23bbabf7bb18c03767fb448b3cca2e6373fc8b15fd7815df9a3cd7f94b612b0a1b43a1e31f8298f998654ccd1bb2f516a002 +"serialize-javascript@npm:^2.1.2": + version: 2.1.2 + resolution: "serialize-javascript@npm:2.1.2" + checksum: 2/e781895f22e410945adea85e4e6197b1e44a1c59a1728468356071051b04b91bc6dab1837049265d10c3e44ebc2282c5611de4291f7bf3b83faabf154397d24c languageName: node linkType: hard @@ -11665,6 +11822,15 @@ fsevents@~2.1.1: languageName: node linkType: hard +"shebang-command@npm:^2.0.0": + version: 2.0.0 + resolution: "shebang-command@npm:2.0.0" + dependencies: + shebang-regex: ^3.0.0 + checksum: 2/bd18bfc563fdbec444b948a3856733862805b1fd973973803f901c08c83f353efb0309412c0977f8d02c769d0ef85470e41e6e0e82eff52cb3abaf8d7876efdb + languageName: node + linkType: hard + "shebang-regex@npm:^1.0.0": version: 1.0.0 resolution: "shebang-regex@npm:1.0.0" @@ -11672,25 +11838,42 @@ fsevents@~2.1.1: languageName: node linkType: hard +"shebang-regex@npm:^3.0.0": + version: 3.0.0 + resolution: "shebang-regex@npm:3.0.0" + checksum: 2/f28f3ed7708ed707e988fa76e6a7d730a80c4bb0ab48d74528a316fb6065ba6e8a84638a9e69c5f8b757759740c721a5104735ba8f7815670200c0affd9bfeb4 + languageName: node + linkType: hard + "signal-exit@npm:^3.0.0, signal-exit@npm:^3.0.2": - version: 3.0.2 - resolution: "signal-exit@npm:3.0.2" - checksum: 2/c5758f0d1ff08c1216448c9bd1488a9707c1a3489739eebc86e6295f6e629863200fa942a675454d8471ba4e8f9fb145023063ed576282949b26ca0ecf65fe08 + version: 3.0.3 + resolution: "signal-exit@npm:3.0.3" + checksum: 2/d451072e6d6e2d168a92720aed6f11104b0e4747d69133da65c607d27914c7d05471960e95380a85269ed3d8b838d0e156f86ae12a5b9e37befd8c0c1486784c + languageName: node + linkType: hard + +"sinon-chai@npm:^3.5.0": + version: 3.5.0 + resolution: "sinon-chai@npm:3.5.0" + peerDependencies: + chai: ^4.0.0 + sinon: ">=4.0.0 <10.0.0" + checksum: 2/4297b04a1321d0bc491f9f358c12c9ddbf04f4c824a454a9082b6a0abc0a4a067c43ffd987b1bf11b1bb8cf4525d3039ec39583240b1224c7b05ef9aa92c89c1 languageName: node linkType: hard -"sinon@npm:7.5.0": - version: 7.5.0 - resolution: "sinon@npm:7.5.0" +"sinon@npm:^9.0.2": + version: 9.0.2 + resolution: "sinon@npm:9.0.2" dependencies: - "@sinonjs/commons": ^1.4.0 - "@sinonjs/formatio": ^3.2.1 - "@sinonjs/samsam": ^3.3.3 - diff: ^3.5.0 - lolex: ^4.2.0 - nise: ^1.5.2 - supports-color: ^5.5.0 - checksum: 2/3bbc9018dda597e7005b2f2bba0bd8319e93da98976777023acfd5a9296da5f8beb2da015cca792790946bf08d5e99af824553b3ad6f9e5c4e3dfac7be4b68e4 + "@sinonjs/commons": ^1.7.2 + "@sinonjs/fake-timers": ^6.0.1 + "@sinonjs/formatio": ^5.0.1 + "@sinonjs/samsam": ^5.0.3 + diff: ^4.0.2 + nise: ^4.0.1 + supports-color: ^7.1.0 + checksum: 2/ae1104b5119b63ed838bf03d8c94d27df46bca3264b707cfb85a2ebaffe3f531e4d6ac18261c93e5654e35f10c6aafa12be50163361dbd7a4a473bf397701019 languageName: node linkType: hard @@ -11846,25 +12029,25 @@ fsevents@~2.1.1: linkType: hard "source-map-resolve@npm:^0.5.0": - version: 0.5.2 - resolution: "source-map-resolve@npm:0.5.2" + version: 0.5.3 + resolution: "source-map-resolve@npm:0.5.3" dependencies: - atob: ^2.1.1 + 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 - checksum: 2/2b068bf2b13f3673418879d95756bc45e47ea64aa20a5a8d9cccaec394bb0453113bb6b1d91c52c241ab0545847fc4ab18d71fcabb3c0b9949c7ac7281c481e0 + checksum: 2/73fd6a2a7a10a51008f0424a2e7e083862ff1d3cb8969efa569ae36fd9c10106afd127d1c474dfcdeccf519d2b8acb8b442f11f3c01879545c1305de2cfef1b8 languageName: node linkType: hard "source-map-support@npm:^0.5.13, source-map-support@npm:^0.5.16, source-map-support@npm:^0.5.6, source-map-support@npm:~0.5.12": - version: 0.5.16 - resolution: "source-map-support@npm:0.5.16" + version: 0.5.17 + resolution: "source-map-support@npm:0.5.17" dependencies: buffer-from: ^1.0.0 source-map: ^0.6.0 - checksum: 2/1e9dca4c30ddc3df46da6a601a9b635ef681062a0b69c1f7a359211a8a8650e697d3cb169ccfad06e99837a91272c5e6a9bae8077df754e46ecb6083befbfaff + checksum: 2/1ca1531d72454ea5014c90d79b98b90dd9c4830e1b457d3211d334e1ace92b848a16e9afe64cd894f823a4827a762124e9ee59833a5a4365d7c73552bbd736d2 languageName: node linkType: hard @@ -11899,8 +12082,8 @@ fsevents@~2.1.1: linkType: hard "spawn-wrap@npm:^1.4.2": - version: 1.4.2 - resolution: "spawn-wrap@npm:1.4.2" + version: 1.4.3 + resolution: "spawn-wrap@npm:1.4.3" dependencies: foreground-child: ^1.5.6 mkdirp: ^0.5.0 @@ -11908,7 +12091,7 @@ fsevents@~2.1.1: rimraf: ^2.6.2 signal-exit: ^3.0.2 which: ^1.3.0 - checksum: 2/b7284b835dd5470403da89a038f8006956c061ea06fc9cc2987319696c9d67b34e68e919b902beaceed7a1c2af2f2b2a44d315a382ebaaf0edcce278c7f4c015 + checksum: 2/218d799d585eccf9396318946a2b18332456f9e74e96b2fd913725dfbaeee7a16c6c9fa0b4bba4f9272be56e4cf7fbeb33afff02730947f6258f57721e366985 languageName: node linkType: hard @@ -12089,9 +12272,9 @@ fsevents@~2.1.1: linkType: hard "stream-shift@npm:^1.0.0": - version: 1.0.0 - resolution: "stream-shift@npm:1.0.0" - checksum: 2/b247518a5753bd56c8593b40e388827b91d9b48f06bbd86d8606ad76091d65127b22e1547c1a7e1b9d6f46ece3c5f7b24d32a407b9c6ebfa14758c93465d3a3a + version: 1.0.1 + resolution: "stream-shift@npm:1.0.1" + checksum: 2/90573e026d04c87c9231f7724cd13626df1f57afed253540cf6c3e6118c824aba49842172e03999699b44ece91ee376cc341ea3fb7eaf03fbae333dbf8ce09f1 languageName: node linkType: hard @@ -12135,22 +12318,64 @@ fsevents@~2.1.1: linkType: hard "string-width@npm:^4.1.0": - version: 4.1.0 - resolution: "string-width@npm:4.1.0" + version: 4.2.0 + resolution: "string-width@npm:4.2.0" dependencies: emoji-regex: ^8.0.0 is-fullwidth-code-point: ^3.0.0 - strip-ansi: ^5.2.0 - checksum: 2/4fc73a8d9e02a7498d5640767294db2a9ceb3f9fec10b84d8547032890bea4d92774ca374ed8147b3b7bb197ff2a54f652c1c2dc0d15783209cb8fa38da058b4 + strip-ansi: ^6.0.0 + checksum: 2/a0784a512662ebe3519871d1c28434ef5060354e9a4fd792e5fd1ad6a1d140ecf1ae47b7a89d62d4dd5d1e52d315f9007b847ef3f00ea9e2b9831ff4a9076686 + languageName: node + linkType: hard + +"string.prototype.trimend@npm:^1.0.0": + version: 1.0.1 + resolution: "string.prototype.trimend@npm:1.0.1" + dependencies: + define-properties: ^1.1.3 + es-abstract: ^1.17.5 + checksum: 2/174bb18dce01d64e6796abbee29e8e89fdb19ff3f137d4b4fa3fc1d5dce80f571df2b6b60602ac913b9713210670f92c4df741a1ee04053d05727659d04fe2da + languageName: node + linkType: hard + +"string.prototype.trimleft@npm:^2.1.1": + version: 2.1.2 + resolution: "string.prototype.trimleft@npm:2.1.2" + dependencies: + define-properties: ^1.1.3 + es-abstract: ^1.17.5 + string.prototype.trimstart: ^1.0.0 + checksum: 2/279a74c1d08917fa77ffd3b64298baeff422e93b2fd2828200eaf3ffa47ccee52da4cea6592e8d5006a428c220216e4d749333602ec73ea7543b1d1eacb86aa3 + languageName: node + linkType: hard + +"string.prototype.trimright@npm:^2.1.1": + version: 2.1.2 + resolution: "string.prototype.trimright@npm:2.1.2" + dependencies: + define-properties: ^1.1.3 + es-abstract: ^1.17.5 + string.prototype.trimend: ^1.0.0 + checksum: 2/05bb19073150e209b5beca18ac674a0345d867415aecb59607cc21a07c5a3fc59d23afcb62249dc459b88ec9a6cd364f5ca4a937140f307c518d6b8863a8fc93 + languageName: node + linkType: hard + +"string.prototype.trimstart@npm:^1.0.0": + version: 1.0.1 + resolution: "string.prototype.trimstart@npm:1.0.1" + dependencies: + define-properties: ^1.1.3 + es-abstract: ^1.17.5 + checksum: 2/b7f97e7306e52021b699256a43ee51f8f933789f55825a5ce55fcab827c45230cf55a61e244136a82a018e9f340a9a0ae106036ac2d5bc71ae96e4445e7a55a8 languageName: node linkType: hard "string_decoder@npm:^1.0.0, string_decoder@npm:^1.1.1": - version: 1.2.0 - resolution: "string_decoder@npm:1.2.0" + version: 1.3.0 + resolution: "string_decoder@npm:1.3.0" dependencies: - safe-buffer: ~5.1.0 - checksum: 2/158ccfb54c286afefbe2b34a71c129eadeaf888739f18a87ef53a8b790267ce3ed085a7652f2c416289792a6a5e011e50d961a78a23701ba63494d93d52f4c38 + safe-buffer: ~5.2.0 + checksum: 2/f19e6f297f18eb532f4767c9856d0dd40dc2ece7fd4d62c4b79e29205efb0f675932be90951bb4f593d63bb7d34d38de246d06b3fa4525cb955ca4eed403b977 languageName: node linkType: hard @@ -12204,6 +12429,15 @@ fsevents@~2.1.1: languageName: node linkType: hard +"strip-ansi@npm:^6.0.0": + version: 6.0.0 + resolution: "strip-ansi@npm:6.0.0" + dependencies: + ansi-regex: ^5.0.0 + checksum: 2/117dab46e0247056813e54dd7ec281953329b511951175c60c602ae651195205df9e701c40d934d8db44eb3005ed2248ae57abb1ca1e7ad1419ec613151bc26b + languageName: node + linkType: hard + "strip-bom@npm:^2.0.0": version: 2.0.0 resolution: "strip-bom@npm:2.0.0" @@ -12260,9 +12494,9 @@ fsevents@~2.1.1: linkType: hard "strip-json-comments@npm:^3.0.1": - version: 3.0.1 - resolution: "strip-json-comments@npm:3.0.1" - checksum: 2/1b6fc28ecad6d12703d20252b2adad5bf3d1af8da35e89c4e654f581ab10ed2adff234edde81a1c658c967934a0d898d8750ca304e52987e7c5dbfce40697f05 + version: 3.1.0 + resolution: "strip-json-comments@npm:3.1.0" + checksum: 2/cc736360d5a8d3b8316b4886d663187e192b3cf0944fe0aaf63acc553c2d44edcc73e7fe61e6f74b98ab42c9868d3b6685c12610bb9622e5f7097209c8755556 languageName: node linkType: hard @@ -12298,7 +12532,7 @@ fsevents@~2.1.1: languageName: node linkType: hard -"supports-color@npm:^5.3.0, supports-color@npm:^5.5.0": +"supports-color@npm:^5.3.0": version: 5.5.0 resolution: "supports-color@npm:5.5.0" dependencies: @@ -12316,7 +12550,7 @@ fsevents@~2.1.1: languageName: node linkType: hard -"supports-color@npm:^7.0.0": +"supports-color@npm:^7.0.0, supports-color@npm:^7.1.0": version: 7.1.0 resolution: "supports-color@npm:7.1.0" dependencies: @@ -12326,12 +12560,12 @@ fsevents@~2.1.1: linkType: hard "supports-hyperlinks@npm:^2.0.0": - version: 2.0.0 - resolution: "supports-hyperlinks@npm:2.0.0" + version: 2.1.0 + resolution: "supports-hyperlinks@npm:2.1.0" dependencies: has-flag: ^4.0.0 supports-color: ^7.0.0 - checksum: 2/1a377d8c6aa69459308284121efdad0f4f16f47dac262f4b82047865aad370a43a00ec2eada30528904c93a258a6eed20cf227e712279729d6987c07d3e53410 + checksum: 2/55dfe4207a9c09fa5c837d4d0bc0fe4662a432b2dcf48af33312ffecbccaaf7d415c3fcb57d776c17c1d1f31bb7eef80d0ed2f177068cd73857669660a531812 languageName: node linkType: hard @@ -12406,22 +12640,7 @@ fsevents@~2.1.1: languageName: node linkType: hard -"tar@npm:^4": - version: 4.4.10 - resolution: "tar@npm:4.4.10" - dependencies: - chownr: ^1.1.1 - fs-minipass: ^1.2.5 - minipass: ^2.3.5 - minizlib: ^1.2.1 - mkdirp: ^0.5.0 - safe-buffer: ^5.1.2 - yallist: ^3.0.3 - checksum: 2/1131b1cac4225f565e0eaa32877ef08735ad88bcf0bc8fd2e21664f49590ff077c146433fe85d456b8ab27095161cff9432fab0fbbb15bc9dc8271b7bee3d8a3 - languageName: node - linkType: hard - -"tar@npm:^4.4.12": +"tar@npm:^4.4.12, tar@npm:^4.4.2": version: 4.4.13 resolution: "tar@npm:4.4.13" dependencies: @@ -12446,44 +12665,44 @@ fsevents@~2.1.1: linkType: hard "terminal-link@npm:^2.0.0": - version: 2.0.0 - resolution: "terminal-link@npm:2.0.0" + version: 2.1.1 + resolution: "terminal-link@npm:2.1.1" dependencies: ansi-escapes: ^4.2.1 supports-hyperlinks: ^2.0.0 - checksum: 2/c3e34411df8fc955841f59e9ef69bf6371fa47d204979f16f7a4538aa3836e777455e485020a56e4a3fd43877d0c1ba64ac64d04929d7ed37cbb8dfa759ae65d + checksum: 2/1da7daaf096e4ebe8ed82d181246c1a522834f37d8d73dddef0f8e8e37778d5f1cf785b230a2f1db11e507965e42f65d59beb3703bd16b3075b653fcaf6fc68c languageName: node linkType: hard "terser-webpack-plugin@npm:^1.4.1": - version: 1.4.1 - resolution: "terser-webpack-plugin@npm:1.4.1" + version: 1.4.3 + resolution: "terser-webpack-plugin@npm:1.4.3" dependencies: cacache: ^12.0.2 find-cache-dir: ^2.1.0 is-wsl: ^1.1.0 schema-utils: ^1.0.0 - serialize-javascript: ^1.7.0 + serialize-javascript: ^2.1.2 source-map: ^0.6.1 terser: ^4.1.2 webpack-sources: ^1.4.0 worker-farm: ^1.7.0 peerDependencies: webpack: ^4.0.0 - checksum: 2/83d72e5ba5ea4459657e162d2394d612f3f73ac0db5c748e46357b77fb455a4c527c7b4afb233c8b320ca10249d7edceb35371008fa43d0396943ade03f077df + checksum: 2/da934d248b5cf68533744fb0b1b3800135cd34cc55a5959ea893db74c9e27845972d1ee5779c1c736a5341890b37ed280d219370574f72bda14d4d3128c6be4b languageName: node linkType: hard "terser@npm:^4.1.2": - version: 4.1.2 - resolution: "terser@npm:4.1.2" + version: 4.6.11 + resolution: "terser@npm:4.6.11" dependencies: commander: ^2.20.0 source-map: ~0.6.1 source-map-support: ~0.5.12 bin: - terser: bin/uglifyjs - checksum: 2/b3dc02431372e36b08eb6af6daabaa0b9e4fade3c3a1d8727c55d5cf3dd7aef5e588573fce002d6ec31741afb0cf373c408c11b30c9eaf4732d45607a69d7df8 + terser: bin/terser + checksum: 2/b6ba5f1210355a4cc431e8ac6921cd41623a3166bfa00d331e85d0d7e72223c3094086a5478629e13b0011b95dc8d5d998d31707937e8c6ff8d8b9bfc967da82 languageName: node linkType: hard @@ -12544,11 +12763,11 @@ fsevents@~2.1.1: linkType: hard "timers-browserify@npm:^2.0.4": - version: 2.0.10 - resolution: "timers-browserify@npm:2.0.10" + version: 2.0.11 + resolution: "timers-browserify@npm:2.0.11" dependencies: setimmediate: ^1.0.4 - checksum: 2/aef0f80d949bd2aecb1989ac6b1b56d47179706c93de5377cc51a9f0d1f9cefed087f5c892d7c7cf4c329a23534f26326886332e3829451bb7deb3ad85b15f65 + checksum: 2/38d712330cd193432c9a01b4b9a50fcbfb7173d9ca9948078c49a8e7ed9da0fcf2cdbb45c757325126def80611c43296de26fb2e2d88051b25e2e8a41a826aae languageName: node linkType: hard @@ -12569,11 +12788,11 @@ fsevents@~2.1.1: linkType: hard "tlds@npm:^1.203.0": - version: 1.203.1 - resolution: "tlds@npm:1.203.1" + version: 1.207.0 + resolution: "tlds@npm:1.207.0" bin: tlds: bin.js - checksum: 2/8c4120986e521c542558edb845f0051624211fb4f844f8048016a8214bb784a3ac2730929d096e9f4d1da56f83340e97464dc7c8315aa1a177d969b887d14afb + checksum: 2/5aaa6c9ca155dc087577586dbec72a7f00ddd1fccde7e918a0069ba3521d1e743eb6ecd31beef96d88257bb5613cf3a58dc88144d43b8227994242656bf13e7d languageName: node linkType: hard @@ -12686,13 +12905,13 @@ fsevents@~2.1.1: languageName: node linkType: hard -"tough-cookie@npm:~2.4.3": - version: 2.4.3 - resolution: "tough-cookie@npm:2.4.3" +"tough-cookie@npm:~2.5.0": + version: 2.5.0 + resolution: "tough-cookie@npm:2.5.0" dependencies: - psl: ^1.1.24 - punycode: ^1.4.1 - checksum: 2/eb145d59e7314c55df2364501874d02053eff25f93254b3e0ba70886e3bf7e7fa1db227d509a401eb43431ad1cfdc171e17ec45a75e84c8a712b2cad39292341 + psl: ^1.1.28 + punycode: ^2.1.1 + checksum: 2/14bd13830663e035261a9e916597ebc60b884b9a92af4132e167a1dfb8a774a89e1ac6222b55bffe03cc4f4c3df851f858a372a5cc982e15e6ed26ac34693995 languageName: node linkType: hard @@ -12735,20 +12954,20 @@ fsevents@~2.1.1: languageName: node linkType: hard -"ts-mocha@npm:^6.0.0": - version: 6.0.0 - resolution: "ts-mocha@npm:6.0.0" +"ts-mocha@npm:^7.0.0": + version: 7.0.0 + resolution: "ts-mocha@npm:7.0.0" dependencies: ts-node: 7.0.1 tsconfig-paths: ^3.5.0 peerDependencies: - mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X + mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X dependenciesMeta: tsconfig-paths: optional: true bin: ts-mocha: ./bin/ts-mocha - checksum: 2/7af0c2ec8c46e275a79be87a1502efa69af822c7c428526fb216b0f915d1d11e3f5decb40b6f79893347293cc27706c81bd13d8e6fc56a5fddcda058e8827526 + checksum: 2/9520b72c054972ddaeed9ed8adf44461f97bd003a9b0b3fd2980d6498e4b32470902e05320b1dd7ab66970262de7b4280080a11ea00b1984b3b0cef187b86784 languageName: node linkType: hard @@ -12783,9 +13002,9 @@ fsevents@~2.1.1: linkType: hard "tslib@npm:^1.8.1, tslib@npm:^1.9.0": - version: 1.10.0 - resolution: "tslib@npm:1.10.0" - checksum: 2/e37da1e4d8f43beee1b51389e275db0277a717810199d109b68afaaa74fb486d03c7469ce27066f0aaa141a3b666906841dd8663bb58d4fce7b9d23ae788dd4f + version: 1.11.1 + resolution: "tslib@npm:1.11.1" + checksum: 2/b5b1b4ae4b3b22e66c10ffab2ea0c0e871c1ba4e8a7c962b6a53fe78b16c369135e5c2d8f43a096aeb9aba7143b4e868efbb4d42bbed5ae003de66b752de0d77 languageName: node linkType: hard @@ -12832,13 +13051,20 @@ fsevents@~2.1.1: languageName: node linkType: hard -"type-detect@npm:4.0.8, type-detect@npm:^4.0.0, type-detect@npm:^4.0.5": +"type-detect@npm:4.0.8, type-detect@npm:^4.0.0, type-detect@npm:^4.0.5, type-detect@npm:^4.0.8": version: 4.0.8 resolution: "type-detect@npm:4.0.8" checksum: 2/c3e8a5ee1b1be3ce0f88ce74c73e80662ecd010162a8dd312ff008a3fe40bd2e7267d6731634aed2c13517c132f7dcb534e2bacc8d8656bf8305fbe095a81d73 languageName: node linkType: hard +"type-fest@npm:^0.11.0": + version: 0.11.0 + resolution: "type-fest@npm:0.11.0" + checksum: 2/ab91e8e5b576db96adb440543f66b072192c47d4fdf126c15c3f1ac7d5647e19a9b185d302efd4a3f83de20f7bcaa2d92ba002e3016b9ab9e9016bf1d7216f87 + languageName: node + linkType: hard + "type-fest@npm:^0.3.0": version: 0.3.1 resolution: "type-fest@npm:0.3.1" @@ -12846,7 +13072,7 @@ fsevents@~2.1.1: languageName: node linkType: hard -"type-fest@npm:^0.5.0, type-fest@npm:^0.5.1, type-fest@npm:^0.5.2": +"type-fest@npm:^0.5.0, type-fest@npm:^0.5.1": version: 0.5.2 resolution: "type-fest@npm:0.5.2" checksum: 2/1f86308f73e8a3b8ef2ac27de9fb637fbdd2334919c3a8eb32db7861c4595b9d950f7a26a173f5c39a2a60ec3733aff1916106e29b0c165a8585b4d63c296f0a @@ -12874,35 +13100,23 @@ fsevents@~2.1.1: languageName: node linkType: hard -typescript@^3.7.3: - version: 3.7.3 - resolution: "typescript@npm:3.7.3" - bin: - tsc: ./bin/tsc - tsserver: ./bin/tsserver - checksum: 2/eef0ee553751e142dfa1e485e8e81a303d915e8ec2f5330751362a88053c2bec6fe8ee7e170abdd59abc2653e8da3c09980b67d57c3c05739f6078ab179bc4dd - languageName: node - linkType: hard - -"typescript@patch:typescript@^3.7.3#builtin": - version: 3.7.3 - resolution: "typescript@patch:typescript@npm%3A3.7.3#builtin::version=3.7.3&hash=c79188" +typescript@^3.8.3: + version: 3.8.3 + resolution: "typescript@npm:3.8.3" bin: - tsc: ./bin/tsc - tsserver: ./bin/tsserver - checksum: 2/b78a539ae71f098413fef6752824af68f9028600bf02cd3810c010e6272ba7a7786c1921f623f3827b2a1154dafeb4941a48ea6f0fc7263256795afa1c9bfaeb + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 2/c1d63bfb991fcb51624c63105d783efad3312f6ea13a2ad01803694c9984199679e8f5cf6fc1ae0abb74b608cad4777666bc17fbab201e38dd33a41fdebe58ce languageName: node linkType: hard -"uglify-js@npm:^3.1.4": - version: 3.6.0 - resolution: "uglify-js@npm:3.6.0" - dependencies: - commander: ~2.20.0 - source-map: ~0.6.1 +"typescript@patch:typescript@^3.8.3#builtin": + version: 3.8.3 + resolution: "typescript@patch:typescript@npm%3A3.8.3#builtin::version=3.8.3&hash=c79188" bin: - uglifyjs: bin/uglifyjs - checksum: 2/58ab6610bb52ff3d2aef778b8dcfc27fbe1514dfdeea3d4a2de24327b399036d5a2b0a8875dccb17b1e7d3c9383a9399fd7964981047073b8ec786b384bc0fd3 + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 2/83f0d4a463bb97321696094b743458daa524eebb6db2c48e82570e44d6c681c7d357c4b31cc696990f6fd50e2d44db43fa7febfcb0a4e43f36dfc25d3d62cd02 languageName: node linkType: hard @@ -12937,17 +13151,17 @@ typescript@^3.7.3: languageName: node linkType: hard -"unicode-match-property-value-ecmascript@npm:^1.1.0": - version: 1.1.0 - resolution: "unicode-match-property-value-ecmascript@npm:1.1.0" - checksum: 2/d495c53a004f62538ea6a6941644ea2769c2dd8531f6433290342bb36681f6e78555698600e37ca572c224f125564fab8341a2cd304baf59cf0102a262f520e1 +"unicode-match-property-value-ecmascript@npm:^1.2.0": + version: 1.2.0 + resolution: "unicode-match-property-value-ecmascript@npm:1.2.0" + checksum: 2/6d968be42891c7d481c42ed75f3cf674ede94c2b2bb9cff7712ace85bb38f9d8bb6c83eb30a357bd409b124c80f4056fb77fe406139e0386d6a1c331cea7cc07 languageName: node linkType: hard "unicode-property-aliases-ecmascript@npm:^1.0.4": - version: 1.0.5 - resolution: "unicode-property-aliases-ecmascript@npm:1.0.5" - checksum: 2/9f6886547deab78c7b09314e2c74c67ff4d2ddfc422d73356c6472edc260113021e07291bb67632f41e0e8ac6389f27f8734b663b68d6eebb4b80801abccef68 + version: 1.1.0 + resolution: "unicode-property-aliases-ecmascript@npm:1.1.0" + checksum: 2/246d50d544a16ae94991bd736bdebc3730de60f6e88278deb8a177be6d6da7fed48144a1373337dcdcb029cb65a7669431dcbbe3e576a55370be035c22ef4a50 languageName: node linkType: hard @@ -13029,9 +13243,9 @@ typescript@^3.7.3: linkType: hard "upath@npm:^1.1.1": - version: 1.1.2 - resolution: "upath@npm:1.1.2" - checksum: 2/e2ac7a8651d701df744d12d5b3fc0e86dab83decc7f0df722870c8da686ac00c6a79e922dd19982003d4fff2632d03746ae4730ad28062d74a9df15ef81e99d2 + version: 1.2.0 + resolution: "upath@npm:1.2.0" + checksum: 2/a9d83ead936fe6461eb3ec001193a6a4d523d62018728cc1abb7f7455cbc8bcbd97913903f1defd554a3ddb43c86e24402edd1bc87937ddd60dac053221a4a32 languageName: node linkType: hard @@ -13174,11 +13388,11 @@ typescript@^3.7.3: linkType: hard "uuid@npm:^3.0.0, uuid@npm:^3.3.2": - version: 3.3.2 - resolution: "uuid@npm:3.3.2" + version: 3.4.0 + resolution: "uuid@npm:3.4.0" bin: uuid: ./bin/uuid - checksum: 2/2b64eee72f1da9c96255452b52bdc2ef7b6328cc31c5b7f32ea325d40797653f5a2dba760e6df6f0bde5608e4a332230eb1058fa33074cf3e9049bde119d589e + checksum: 2/545652211243d8095f11b163e38afeb5c10ffe7b8b0ec1173843aa2842f70b2320d3392f4ed3ac5e84d2872089746086b5de10cae54128d9f5cd42ee042c6b1d languageName: node linkType: hard @@ -13238,20 +13452,20 @@ typescript@^3.7.3: linkType: hard "vm-browserify@npm:^1.0.1": - version: 1.1.0 - resolution: "vm-browserify@npm:1.1.0" - checksum: 2/3ebe6f01f21e46e0def08bfb9ea312f034dabf89f28ed321242bf1361cbaecd3fbf435213471aa5eeed9845df27c2fc9acc3f4a656a35346baa74929f087aa06 + version: 1.1.2 + resolution: "vm-browserify@npm:1.1.2" + checksum: 2/8eb0dfbf2d2fe4df9ecc54fed0fd13150e66c833774f92d201b40933322b9c79d9c8cdb3cf1de44fad3d254e35c4ef1884e9a04722271c1499205b3e9473a57b languageName: node linkType: hard "watchpack@npm:^1.6.0": - version: 1.6.0 - resolution: "watchpack@npm:1.6.0" + version: 1.6.1 + resolution: "watchpack@npm:1.6.1" dependencies: - chokidar: ^2.0.2 + chokidar: ^2.1.8 graceful-fs: ^4.1.2 neo-async: ^2.5.0 - checksum: 2/a53fc4ed028f4a655ab3f17e0ad8be956acfa8459790e43efe459089b6d7af0d290c35e0dcef8111e57db1c59786fa4d5d4e385f5e63ea44a49652e3c733d90e + checksum: 2/7d3ed4cee9ee05c12bf30802581089bac98b299b6ae8d1c69d26f18fa720795f42b502d4ef402d321fc77fdf63a1115860d374ba99471949707705c2eceabb11 languageName: node linkType: hard @@ -13265,12 +13479,12 @@ typescript@^3.7.3: linkType: hard "webpack-sources@npm:^1.4.0, webpack-sources@npm:^1.4.1": - version: 1.4.1 - resolution: "webpack-sources@npm:1.4.1" + version: 1.4.3 + resolution: "webpack-sources@npm:1.4.3" dependencies: source-list-map: ^2.0.0 source-map: ~0.6.1 - checksum: 2/66deaa756c2710b18dc7af2530350f70069817a4c845a431e64a9f331a2caabb7f25e65c799a1361c0987eb0bc8e430a24752094216722b0a3376fc696d70e21 + checksum: 2/b5419d45b6a18f60f92e34c8ff6752c0ebfdfd9ee8f9f35b3bf68a9f648fd78dd4da6dcfb5d3de5b07133646876a20cb651a9ac58af930591fb4363a91777200 languageName: node linkType: hard @@ -13332,6 +13546,17 @@ typescript@^3.7.3: languageName: node linkType: hard +"which@npm:^2.0.1": + version: 2.0.2 + resolution: "which@npm:2.0.2" + dependencies: + isexe: ^2.0.0 + bin: + node-which: ./bin/node-which + checksum: 2/07b6e3b63ae0cabfbf447ac6ee8e85e0d2581a34c5c8753cf036e622a5ab53de1b3b40d4cbfcbae8e9bba7839a262855d38e904cd8f25ce9bc8d6a6dfaff67b7 + languageName: node + linkType: hard + "which@npm:~1.2.11, which@npm:~1.2.14": version: 1.2.14 resolution: "which@npm:1.2.14" @@ -13537,13 +13762,13 @@ typescript@^3.7.3: linkType: hard "yallist@npm:^3.0.0, yallist@npm:^3.0.2, yallist@npm:^3.0.3": - version: 3.0.3 - resolution: "yallist@npm:3.0.3" - checksum: 2/d060f89d5ea325594ee7f1ccec4653e7bc554a3909140af501c96623b2653c19def3901065c1f43c9a484ac1087011d62465e56ce737964e1c76741d88f7f812 + version: 3.1.1 + resolution: "yallist@npm:3.1.1" + checksum: 2/a4d831a07ad40c82cb37b708ea97c54b387c9355e225ee6c38671df774f746e6fc9bdd39a464e0fb93a723efc3a9a2e0665a028cfab8761f856b668d3cf95113 languageName: node linkType: hard -"yargs-parser@npm:13.1.2, yargs-parser@npm:^13.1.2": +"yargs-parser@npm:13.1.2, yargs-parser@npm:^13.0.0, yargs-parser@npm:^13.1.1, yargs-parser@npm:^13.1.2": version: 13.1.2 resolution: "yargs-parser@npm:13.1.2" dependencies: @@ -13562,16 +13787,6 @@ typescript@^3.7.3: languageName: node linkType: hard -"yargs-parser@npm:^13.0.0, yargs-parser@npm:^13.1.1": - version: 13.1.1 - resolution: "yargs-parser@npm:13.1.1" - dependencies: - camelcase: ^5.0.0 - decamelize: ^1.2.0 - checksum: 2/284d92a0ccb03fdead3163bd0c67d21faab199ec150080b7fe67baed5e94315d6a6ca31cfcda7ceb11154634ba8a1ed87e351faf1652a5730c0601a02d097eb6 - languageName: node - linkType: hard - "yargs-parser@npm:^5.0.0": version: 5.0.0 resolution: "yargs-parser@npm:5.0.0" @@ -13592,7 +13807,7 @@ typescript@^3.7.3: languageName: node linkType: hard -"yargs@npm:13.3.2": +"yargs@npm:13.3.2, yargs@npm:^13.2.2, yargs@npm:^13.3.0": version: 13.3.2 resolution: "yargs@npm:13.3.2" dependencies: @@ -13629,24 +13844,6 @@ typescript@^3.7.3: languageName: node linkType: hard -"yargs@npm:^13.2.2, yargs@npm:^13.3.0": - version: 13.3.0 - resolution: "yargs@npm:13.3.0" - 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.1 - checksum: 2/ec014d3cd95ddcdfcb03056cac915cce6b4c821d3695f6b98960b9e48dd8d3ef50a58b7fd6350110b221631098a55d4f679924671f68705cba5f4e95637d21a3 - languageName: node - linkType: hard - "yargs@npm:^7.0.0": version: 7.1.0 resolution: "yargs@npm:7.1.0"