diff --git a/apps/api-documenter/package.json b/apps/api-documenter/package.json index f2940b52c9d..a1231879bb6 100644 --- a/apps/api-documenter/package.json +++ b/apps/api-documenter/package.json @@ -34,6 +34,6 @@ "@types/node": "10.17.13", "@types/resolve": "1.17.1", "gulp": "~4.0.2", - "jest": "25.4.0" + "jest": "~25.4.0" } } diff --git a/apps/heft/includes/jest-shared.config.json b/apps/heft/includes/jest-shared.config.json new file mode 100644 index 00000000000..56d181d6847 --- /dev/null +++ b/apps/heft/includes/jest-shared.config.json @@ -0,0 +1,11 @@ +{ + "silent": false, + + "rootDir": "../../../../", + "testURL": "http://localhost/", + "testMatch": ["/src/**/*.test.ts?(x)"], + "transform": { + "src[\\\\/].+\\.ts$": "/node_modules/@rushstack/heft/lib/plugins/JestPlugin/HeftJestSrcTransform.js" + }, + "passWithNoTests": true +} diff --git a/apps/heft/package.json b/apps/heft/package.json index b7a418f7b5f..f55ce1ada7e 100644 --- a/apps/heft/package.json +++ b/apps/heft/package.json @@ -13,6 +13,7 @@ "main": "lib/index.js", "types": "dist/heft.d.ts", "devDependencies": { + "@jest/types": "~25.4.0", "@types/eslint": "7.2.0", "@types/glob": "7.1.1", "@types/node": "10.17.13", @@ -21,12 +22,15 @@ "@rushstack/eslint-config": "workspace:*" }, "dependencies": { + "@jest/core": "~25.4.0", + "@jest/reporters": "~25.4.0", "@rushstack/node-core-library": "workspace:*", "@rushstack/ts-command-line": "workspace:*", "@types/tapable": "1.0.5", "chokidar": "~3.4.0", "glob-escape": "~0.0.2", "glob": "~7.0.5", + "jest-snapshot": "~25.4.0", "resolve": "~1.17.0", "tapable": "1.1.3", "true-case-path": "~2.2.1" diff --git a/apps/heft/src/cli/HeftToolsCommandLineParser.ts b/apps/heft/src/cli/HeftToolsCommandLineParser.ts index 80c5fa2bf3c..487ddccbd9a 100644 --- a/apps/heft/src/cli/HeftToolsCommandLineParser.ts +++ b/apps/heft/src/cli/HeftToolsCommandLineParser.ts @@ -77,7 +77,7 @@ export class HeftToolsCommandLineParser extends CommandLineParser { const buildAction: BuildAction = new BuildAction({ ...actionOptions, cleanAction }); const devDeployAction: DevDeployAction = new DevDeployAction(actionOptions); const startAction: StartAction = new StartAction(actionOptions); - const testAction: TestAction = new TestAction({ ...actionOptions, cleanAction }); + const testAction: TestAction = new TestAction({ ...actionOptions, cleanAction, buildAction }); this._heftSession = new HeftSession({ getIsDebugMode: () => this.isDebug, diff --git a/apps/heft/src/cli/actions/TestAction.ts b/apps/heft/src/cli/actions/TestAction.ts index 50c930b9661..1ae603ea4c7 100644 --- a/apps/heft/src/cli/actions/TestAction.ts +++ b/apps/heft/src/cli/actions/TestAction.ts @@ -1,7 +1,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -import { SyncHook } from 'tapable'; +import { SyncHook, AsyncParallelHook, AsyncSeriesHook } from 'tapable'; +import { CommandLineFlagParameter } from '@rushstack/ts-command-line'; import { BuildAction, IBuildActionOptions, IBuildActionContext } from './BuildAction'; import { ActionHooksBase, IActionContext } from './HeftActionBase'; @@ -9,22 +10,33 @@ import { ActionHooksBase, IActionContext } from './HeftActionBase'; /** * @public */ -export class TestHooks extends ActionHooksBase {} +export class TestHooks extends ActionHooksBase { + public readonly run: AsyncParallelHook = new AsyncParallelHook(); + public readonly configureTest: AsyncSeriesHook = new AsyncSeriesHook(); +} /** * @public */ -export interface ITestActionProperties {} +export interface ITestActionProperties { + watchMode: boolean; + productionFlag: boolean; +} /** * @public */ export interface ITestActionContext extends IActionContext {} -export interface ITestActionOptions extends IBuildActionOptions {} +export interface ITestActionOptions extends IBuildActionOptions { + buildAction: BuildAction; +} export class TestAction extends BuildAction { public testActionHook: SyncHook = new SyncHook(['action']); + private _buildAction: BuildAction; + + private _noBuildFlag: CommandLineFlagParameter; public constructor(options: ITestActionOptions) { super(options, { @@ -32,9 +44,74 @@ export class TestAction extends BuildAction { summary: 'Build the project and run tests.', documentation: '' }); + + this._buildAction = options.buildAction; + } + + public onDefineParameters(): void { + super.onDefineParameters(); + + this._noBuildFlag = this.defineFlagParameter({ + parameterLongName: '--no-build', + description: 'If provided, only run tests. Do not build first.' + }); } protected async actionExecute(buildActionContext: IBuildActionContext): Promise { - throw new Error('Not implemented yet...'); + const testActionContext: ITestActionContext = { + hooks: new TestHooks(), + properties: { + watchMode: buildActionContext.properties.watchMode, + productionFlag: buildActionContext.properties.productionFlag + } + }; + const shouldBuild: boolean = !this._noBuildFlag.value; + + if (testActionContext.properties.watchMode) { + if (!shouldBuild) { + throw new Error(`${this._watchFlag.longName} is not compatible with ${this._noBuildFlag.longName}`); + } else if (buildActionContext.properties.noTest) { + throw new Error(`${this._watchFlag.longName} is not compatible with ${this._noTestFlag.longName}`); + } + } + + this.testActionHook.call(testActionContext); + + if (testActionContext.hooks.overrideAction.isUsed()) { + await testActionContext.hooks.overrideAction.promise(buildActionContext.properties); + return; + } + + await testActionContext.hooks.loadActionConfiguration.promise(); + await testActionContext.hooks.afterLoadActionConfiguration.promise(); + + if (testActionContext.properties.watchMode) { + // In --watch mode, run all configuration upfront and then kick off all stages + // concurrently with the expectation that the their promises will never resolve + // and that they will handle watching filesystem changes + + this._buildAction.actionHook.call(buildActionContext); + await testActionContext.hooks.configureTest.promise(); + + await Promise.all([ + super.actionExecute(buildActionContext), + this._runStageWithLogging('Test', testActionContext) + ]); + } else { + if (shouldBuild) { + // Run Build + this._buildAction.actionHook.call(buildActionContext); + await super.actionExecute(buildActionContext); + } + + if (!buildActionContext.properties.noTest && !buildActionContext.properties.liteFlag) { + await testActionContext.hooks.configureTest.promise(); + if (shouldBuild) { + await this._runStageWithLogging('Test', testActionContext); + } else { + await testActionContext.hooks.run.promise(); + } + } + } } } diff --git a/apps/heft/src/pluginFramework/PluginManager.ts b/apps/heft/src/pluginFramework/PluginManager.ts index 5887ced0ec3..fbc4b329b76 100644 --- a/apps/heft/src/pluginFramework/PluginManager.ts +++ b/apps/heft/src/pluginFramework/PluginManager.ts @@ -17,6 +17,7 @@ import { CleanPlugin } from '../plugins/CleanPlugin'; import { CopyStaticAssetsPlugin } from '../plugins/CopyStaticAssetsPlugin'; import { PackageJsonConfigurationPlugin } from '../plugins/PackageJsonConfigurationPlugin'; import { ApiExtractorPlugin } from '../plugins/ApiExtractorPlugin/ApiExtractorPlugin'; +import { JestPlugin } from '../plugins/JestPlugin/JestPlugin'; export interface IPluginManagerOptions { terminal: Terminal; @@ -50,6 +51,7 @@ export class PluginManager { this._applyPlugin(new CleanPlugin()); this._applyPlugin(new PackageJsonConfigurationPlugin()); this._applyPlugin(new ApiExtractorPlugin()); + this._applyPlugin(new JestPlugin()); } public initializePlugin(pluginSpecifier: string, options?: object): void { diff --git a/apps/heft/src/plugins/JestPlugin/HeftJestReporter.ts b/apps/heft/src/plugins/JestPlugin/HeftJestReporter.ts new file mode 100644 index 00000000000..32a8e32e905 --- /dev/null +++ b/apps/heft/src/plugins/JestPlugin/HeftJestReporter.ts @@ -0,0 +1,112 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +import * as path from 'path'; +import { Terminal, Colors } from '@rushstack/node-core-library'; +import { + Reporter, + Test, + TestResult, + AggregatedResult, + Context, + ReporterOnStartOptions, + Config +} from '@jest/reporters'; +import { HeftConfiguration } from '../../configuration/HeftConfiguration'; + +export interface IHeftJestReporterOptions { + heftConfiguration: HeftConfiguration; +} + +export default class HeftJestReporter implements Reporter { + private _terminal: Terminal; + private _buildFolder: string; + + public constructor(jestConfig: Config.GlobalConfig, options: IHeftJestReporterOptions) { + this._terminal = options.heftConfiguration.terminal; + this._buildFolder = options.heftConfiguration.buildFolder; + } + + public async onTestStart(test: Test): Promise { + this._terminal.writeLine( + Colors.whiteBackground(Colors.black('START')), + ` ${this._getTestPath(test.path)}` + ); + } + + public async onTestResult( + test: Test, + testResult: TestResult, + aggregatedResult: AggregatedResult + ): Promise { + const { numPassingTests, numFailingTests, failureMessage } = testResult; + + if (numFailingTests > 0) { + this._terminal.write(Colors.redBackground(Colors.black('FAIL'))); + } else { + this._terminal.write(Colors.greenBackground(Colors.black('PASS'))); + } + + const duration: string = test.duration ? `${test.duration / 1000}s` : '?'; + this._terminal.writeLine( + ` ${this._getTestPath( + test.path + )} (duration: ${duration}, ${numPassingTests} passed, ${numFailingTests} failed)` + ); + + if (failureMessage) { + this._terminal.writeErrorLine(failureMessage); + } + + if (testResult.snapshot.updated) { + this._terminal.writeErrorLine( + `Updated ${this._formatWithPlural(testResult.snapshot.updated, 'snapshot', 'snapshots')}` + ); + } + + if (testResult.snapshot.added) { + this._terminal.writeErrorLine( + `Added ${this._formatWithPlural(testResult.snapshot.added, 'snapshot', 'snapshots')}` + ); + } + } + + public async onRunStart( + { numTotalTestSuites }: AggregatedResult, + options: ReporterOnStartOptions + ): Promise { + // Jest prints some text that changes the console's color without a newline, so we reset the console's color here + // and print a newline. + this._terminal.writeLine('\u001b[0m'); + this._terminal.writeLine( + `Run start. ${this._formatWithPlural(numTotalTestSuites, 'test suite', 'test suites')}` + ); + } + + public async onRunComplete(contexts: Set, results: AggregatedResult): Promise { + const { numPassedTests, numFailedTests, numTotalTests } = results; + + this._terminal.writeLine(); + this._terminal.writeLine('Tests finished:'); + + const successesText: string = ` Successes: ${numPassedTests}`; + this._terminal.writeLine(numPassedTests > 0 ? Colors.green(successesText) : successesText); + + const failText: string = ` Failures: ${numFailedTests}`; + this._terminal.writeLine(numFailedTests > 0 ? Colors.red(failText) : failText); + + this._terminal.writeLine(` Total: ${numTotalTests}`); + } + + public getLastError(): void { + // This reporter doesn't have any errors to throw + } + + private _getTestPath(fullTestPath: string): string { + return path.relative(this._buildFolder, fullTestPath); + } + + private _formatWithPlural(num: number, singular: string, plural: string): string { + return `${num} ${num === 1 ? singular : plural}`; + } +} diff --git a/apps/heft/src/plugins/JestPlugin/HeftJestSrcTransform.ts b/apps/heft/src/plugins/JestPlugin/HeftJestSrcTransform.ts new file mode 100644 index 00000000000..b979ad37357 --- /dev/null +++ b/apps/heft/src/plugins/JestPlugin/HeftJestSrcTransform.ts @@ -0,0 +1,33 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +import * as path from 'path'; +import { Path, FileSystem } from '@rushstack/node-core-library'; +import { InitialOptionsWithRootDir } from '@jest/types/build/Config'; + +/** + * This Jest transformer maps TS files under a 'src' folder to their compiled equivalent under 'lib' + */ +export function process(src: string, filename: string, jestOptions: InitialOptionsWithRootDir): string { + const srcFolder: string = path.join(jestOptions.rootDir, 'src'); + if (Path.isUnder(filename, srcFolder)) { + const fileBasename: string = path.basename(filename, path.extname(filename)); + const srcRelativeFolderPath: string = path.dirname(path.relative(srcFolder, filename)); + const libFilename: string = path.join( + jestOptions.rootDir, + 'lib', + srcRelativeFolderPath, + `${fileBasename}.js` + ); + + try { + return FileSystem.readFile(libFilename); + } catch (error) { + if (!FileSystem.isNotExistError(error)) { + throw error; + } + } + } + + return src; +} diff --git a/apps/heft/src/plugins/JestPlugin/JestPlugin.ts b/apps/heft/src/plugins/JestPlugin/JestPlugin.ts new file mode 100644 index 00000000000..9a59af73edb --- /dev/null +++ b/apps/heft/src/plugins/JestPlugin/JestPlugin.ts @@ -0,0 +1,63 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +import * as path from 'path'; +import { runCLI } from '@jest/core'; +import { FileSystem } from '@rushstack/node-core-library'; + +import { IHeftJestReporterOptions } from './HeftJestReporter'; +import { IHeftPlugin } from '../../pluginFramework/IHeftPlugin'; +import { HeftSession } from '../../pluginFramework/HeftSession'; +import { HeftConfiguration } from '../../configuration/HeftConfiguration'; +import { ITestActionContext } from '../../cli/actions/TestAction'; + +const PLUGIN_NAME: string = 'JestPlugin'; +const JEST_CONFIGURATION_LOCATION: string = './config/jest.config.json'; + +export class JestPlugin implements IHeftPlugin { + public readonly displayName: string = PLUGIN_NAME; + + public apply(heftSession: HeftSession, heftConfiguration: HeftConfiguration): void { + if (FileSystem.exists(path.join(heftConfiguration.buildFolder, JEST_CONFIGURATION_LOCATION))) { + heftSession.hooks.test.tap(PLUGIN_NAME, (test: ITestActionContext) => { + test.hooks.run.tapPromise(PLUGIN_NAME, async () => { + await this._runJestAsync( + heftConfiguration, + test.properties.watchMode, + test.properties.productionFlag + ); + }); + }); + } + } + + private async _runJestAsync( + heftConfiguration: HeftConfiguration, + watchMode: boolean, + production: boolean + ): Promise { + const buildFolder: string = heftConfiguration.buildFolder; + const reporterOptions: IHeftJestReporterOptions = { heftConfiguration }; + const { results: jestResults } = await runCLI( + { + watch: watchMode, + config: JEST_CONFIGURATION_LOCATION, + reporters: [[path.resolve(__dirname, 'HeftJestReporter.js'), reporterOptions]], + cacheDirectory: path.join(heftConfiguration.buildCacheFolder, 'jest-cache'), + updateSnapshot: !production, + + listTests: false, + rootDir: buildFolder, + $0: process.argv0, + _: [] + }, + [buildFolder] + ); + + if (jestResults.numFailedTests > 0) { + throw new Error( + `${jestResults.numFailedTests} Jest test${jestResults.numFailedTests > 1 ? 's' : ''} failed` + ); + } + } +} diff --git a/apps/rush-lib/package.json b/apps/rush-lib/package.json index 004032d2b30..278a3366c9d 100644 --- a/apps/rush-lib/package.json +++ b/apps/rush-lib/package.json @@ -71,6 +71,6 @@ "@types/wordwrap": "1.0.0", "@types/z-schema": "3.16.31", "gulp": "~4.0.2", - "jest": "25.4.0" + "jest": "~25.4.0" } } diff --git a/build-tests/heft-test-01/config/jest.config.json b/build-tests/heft-test-01/config/jest.config.json new file mode 100644 index 00000000000..b88d4c3de66 --- /dev/null +++ b/build-tests/heft-test-01/config/jest.config.json @@ -0,0 +1,3 @@ +{ + "preset": "./node_modules/@rushstack/heft/includes/jest-shared.config.json" +} diff --git a/build-tests/heft-test-01/package.json b/build-tests/heft-test-01/package.json index 936c47fface..5ef20261889 100644 --- a/build-tests/heft-test-01/package.json +++ b/build-tests/heft-test-01/package.json @@ -5,11 +5,12 @@ "main": "lib/index.js", "license": "MIT", "scripts": { - "build": "heft build --clean" + "build": "heft test --clean" }, "devDependencies": { "@rushstack/heft": "workspace:*", "@microsoft/rush-stack-compiler-3.7": "workspace:*", - "@rushstack/eslint-config": "workspace:*" + "@rushstack/eslint-config": "workspace:*", + "@types/jest": "25.2.1" } } diff --git a/build-tests/heft-test-01/src/test/ExampleTest.test.ts b/build-tests/heft-test-01/src/test/ExampleTest.test.ts new file mode 100644 index 00000000000..ccae242d321 --- /dev/null +++ b/build-tests/heft-test-01/src/test/ExampleTest.test.ts @@ -0,0 +1,23 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +interface IInterface { + element: string; +} + +describe('Example Test', () => { + it('Correctly tests stuff', () => { + expect(true).toBeTruthy(); + }); + + it('Correctly handles snapshots', () => { + expect({ a: 1, b: 2, c: 3 }).toMatchSnapshot(); + }); + + it('Correctly handles TypeScript constructs', () => { + const interfaceInstance: IInterface = { + element: 'a' + }; + expect(interfaceInstance).toBeTruthy(); + }); +}); diff --git a/build-tests/heft-test-01/src/test/__snapshots__/ExampleTest.test.ts.snap b/build-tests/heft-test-01/src/test/__snapshots__/ExampleTest.test.ts.snap new file mode 100644 index 00000000000..1ca0d3b526a --- /dev/null +++ b/build-tests/heft-test-01/src/test/__snapshots__/ExampleTest.test.ts.snap @@ -0,0 +1,9 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Example Test Correctly handles snapshots 1`] = ` +Object { + "a": 1, + "b": 2, + "c": 3, +} +`; diff --git a/build-tests/heft-test-01/tsconfig.json b/build-tests/heft-test-01/tsconfig.json index 42b2dcde892..5b49b73ada8 100644 --- a/build-tests/heft-test-01/tsconfig.json +++ b/build-tests/heft-test-01/tsconfig.json @@ -1,3 +1,6 @@ { - "extends": "./node_modules/@microsoft/rush-stack-compiler-3.7/includes/tsconfig-node.json" + "extends": "./node_modules/@microsoft/rush-stack-compiler-3.7/includes/tsconfig-node.json", + "compilerOptions": { + "types": ["jest"] + } } diff --git a/build-tests/web-library-build-test/package.json b/build-tests/web-library-build-test/package.json index c1dad08378a..0313ca5bd64 100644 --- a/build-tests/web-library-build-test/package.json +++ b/build-tests/web-library-build-test/package.json @@ -14,7 +14,7 @@ "@microsoft/web-library-build": "workspace:*", "@types/jest": "25.2.1", "gulp": "~4.0.2", - "jest": "25.4.0", + "jest": "~25.4.0", "ts-jest": "~25.1.0" } } diff --git a/common/changes/@microsoft/api-documenter/ianc-heft-api-extractor_2020-06-26-01-14.json b/common/changes/@microsoft/api-documenter/ianc-heft-api-extractor_2020-06-26-01-14.json new file mode 100644 index 00000000000..bad52f75f25 --- /dev/null +++ b/common/changes/@microsoft/api-documenter/ianc-heft-api-extractor_2020-06-26-01-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@microsoft/api-documenter", + "comment": "", + "type": "none" + } + ], + "packageName": "@microsoft/api-documenter", + "email": "iclanton@users.noreply.github.com" +} \ No newline at end of file diff --git a/common/changes/@microsoft/gulp-core-build-sass/ianc-heft-api-extractor_2020-06-26-01-14.json b/common/changes/@microsoft/gulp-core-build-sass/ianc-heft-api-extractor_2020-06-26-01-14.json new file mode 100644 index 00000000000..9e9990d90dd --- /dev/null +++ b/common/changes/@microsoft/gulp-core-build-sass/ianc-heft-api-extractor_2020-06-26-01-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@microsoft/gulp-core-build-sass", + "comment": "", + "type": "none" + } + ], + "packageName": "@microsoft/gulp-core-build-sass", + "email": "iclanton@users.noreply.github.com" +} \ No newline at end of file diff --git a/common/changes/@microsoft/gulp-core-build/ianc-heft-api-extractor_2020-06-26-01-14.json b/common/changes/@microsoft/gulp-core-build/ianc-heft-api-extractor_2020-06-26-01-14.json new file mode 100644 index 00000000000..e3e89655bc8 --- /dev/null +++ b/common/changes/@microsoft/gulp-core-build/ianc-heft-api-extractor_2020-06-26-01-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@microsoft/gulp-core-build", + "comment": "", + "type": "none" + } + ], + "packageName": "@microsoft/gulp-core-build", + "email": "iclanton@users.noreply.github.com" +} \ No newline at end of file diff --git a/common/changes/@microsoft/rush/ianc-heft-api-extractor_2020-06-26-01-14.json b/common/changes/@microsoft/rush/ianc-heft-api-extractor_2020-06-26-01-14.json new file mode 100644 index 00000000000..8b978fe48f3 --- /dev/null +++ b/common/changes/@microsoft/rush/ianc-heft-api-extractor_2020-06-26-01-14.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@microsoft/rush", + "comment": "", + "type": "none" + } + ], + "packageName": "@microsoft/rush", + "email": "iclanton@users.noreply.github.com" +} \ No newline at end of file diff --git a/common/config/rush/nonbrowser-approved-packages.json b/common/config/rush/nonbrowser-approved-packages.json index c9bfabb25e5..651638c9057 100644 --- a/common/config/rush/nonbrowser-approved-packages.json +++ b/common/config/rush/nonbrowser-approved-packages.json @@ -10,6 +10,10 @@ "name": "@jest/reporters", "allowedCategories": [ "libraries" ] }, + { + "name": "@jest/types", + "allowedCategories": [ "libraries" ] + }, { "name": "@microsoft/api-documenter", "allowedCategories": [ "libraries", "tests" ] @@ -478,6 +482,10 @@ "name": "jest-resolve", "allowedCategories": [ "libraries" ] }, + { + "name": "jest-snapshot", + "allowedCategories": [ "libraries" ] + }, { "name": "jju", "allowedCategories": [ "libraries" ] diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml index f3ae70da4d1..8ac15d457dd 100644 --- a/common/config/rush/pnpm-lock.yaml +++ b/common/config/rush/pnpm-lock.yaml @@ -34,7 +34,7 @@ importers: '@types/resolve': 1.17.1 colors: ~1.2.1 gulp: ~4.0.2 - jest: 25.4.0 + jest: ~25.4.0 js-yaml: ~3.13.1 resolve: ~1.17.0 ../../apps/api-extractor: @@ -44,7 +44,7 @@ importers: '@rushstack/node-core-library': 'link:../../libraries/node-core-library' '@rushstack/ts-command-line': 'link:../../libraries/ts-command-line' colors: 1.2.5 - lodash: 4.17.15 + lodash: 4.17.19 resolve: 1.17.0 semver: 7.3.2 source-map: 0.6.1 @@ -101,16 +101,20 @@ importers: gulp: ~4.0.2 ../../apps/heft: dependencies: + '@jest/core': 25.4.0 + '@jest/reporters': 25.4.0 '@rushstack/node-core-library': 'link:../../libraries/node-core-library' '@rushstack/ts-command-line': 'link:../../libraries/ts-command-line' '@types/tapable': 1.0.5 chokidar: 3.4.0 glob: 7.0.6 glob-escape: 0.0.2 + jest-snapshot: 25.4.0 resolve: 1.17.0 tapable: 1.1.3 true-case-path: 2.2.1 devDependencies: + '@jest/types': 25.4.0 '@microsoft/rush-stack-compiler-3.7': 'link:../../stack/rush-stack-compiler-3.7' '@rushstack/eslint-config': 'link:../../stack/eslint-config' '@types/eslint': 7.2.0 @@ -118,6 +122,9 @@ importers: '@types/node': 10.17.13 '@types/resolve': 1.17.1 specifiers: + '@jest/core': ~25.4.0 + '@jest/reporters': ~25.4.0 + '@jest/types': ~25.4.0 '@microsoft/rush-stack-compiler-3.7': 'workspace:*' '@rushstack/eslint-config': 'workspace:*' '@rushstack/node-core-library': 'workspace:*' @@ -130,6 +137,7 @@ importers: chokidar: ~3.4.0 glob: ~7.0.5 glob-escape: ~0.0.2 + jest-snapshot: ~25.4.0 resolve: ~1.17.0 tapable: 1.1.3 true-case-path: ~2.2.1 @@ -206,7 +214,7 @@ importers: inquirer: 6.2.2 js-yaml: 3.13.1 jszip: 3.5.0 - lodash: 4.17.15 + lodash: 4.17.19 minimatch: 3.0.4 node-fetch: 2.1.2 npm-package-arg: 6.1.1 @@ -279,7 +287,7 @@ importers: https-proxy-agent: ~2.2.1 ignore: ~5.1.6 inquirer: ~6.2.0 - jest: 25.4.0 + jest: ~25.4.0 js-yaml: ~3.13.1 jszip: ~3.5.0 lodash: ~4.17.15 @@ -440,10 +448,12 @@ importers: '@microsoft/rush-stack-compiler-3.7': 'link:../../stack/rush-stack-compiler-3.7' '@rushstack/eslint-config': 'link:../../stack/eslint-config' '@rushstack/heft': 'link:../../apps/heft' + '@types/jest': 25.2.1 specifiers: '@microsoft/rush-stack-compiler-3.7': 'workspace:*' '@rushstack/eslint-config': 'workspace:*' '@rushstack/heft': 'workspace:*' + '@types/jest': 25.2.1 ../../build-tests/localization-plugin-test-01: dependencies: '@microsoft/rush-stack-compiler-3.5': 'link:../../stack/rush-stack-compiler-3.5' @@ -483,7 +493,7 @@ importers: '@types/lodash': 4.14.116 '@types/webpack-env': 1.13.0 html-webpack-plugin: 3.2.0_webpack@4.31.0 - lodash: 4.17.15 + lodash: 4.17.19 ts-loader: 6.0.0_typescript@3.7.5 typescript: 3.7.5 webpack: 4.31.0_webpack@4.31.0 @@ -737,7 +747,7 @@ importers: '@microsoft/web-library-build': 'workspace:*' '@types/jest': 25.2.1 gulp: ~4.0.2 - jest: 25.4.0 + jest: ~25.4.0 ts-jest: ~25.1.0 ../../core-build/gulp-core-build: dependencies: @@ -787,8 +797,8 @@ importers: '@types/glob': 7.1.1 '@types/z-schema': 3.16.31 specifiers: - '@jest/core': 25.4.0 - '@jest/reporters': 25.4.0 + '@jest/core': ~25.4.0 + '@jest/reporters': ~25.4.0 '@microsoft/node-library-build': 6.4.31 '@microsoft/rush-stack-compiler-3.5': 0.8.0 '@rushstack/eslint-config': 'workspace:*' @@ -814,9 +824,9 @@ importers: gulp: ~4.0.2 gulp-flatten: ~0.2.0 gulp-if: ^2.0.1 - jest: 25.4.0 - jest-cli: 25.4.0 - jest-environment-jsdom: 25.4.0 + jest: ~25.4.0 + jest-cli: ~25.4.0 + jest-environment-jsdom: ~25.4.0 jest-nunit-reporter: ~1.3.1 jsdom: ~11.11.0 lodash.merge: ~4.6.2 @@ -872,7 +882,7 @@ importers: '@rushstack/node-core-library': 'link:../../libraries/node-core-library' '@types/gulp': 4.0.6 '@types/node': 10.17.13 - autoprefixer: 9.8.4 + autoprefixer: 9.8.5 clean-css: 4.2.1 glob: 7.0.6 node-sass: 4.14.1 @@ -907,7 +917,7 @@ importers: clean-css: 4.2.1 glob: ~7.0.5 gulp: ~4.0.2 - jest: 25.4.0 + jest: ~25.4.0 node-sass: 4.14.1 postcss: 7.0.32 postcss-modules: ~1.5.0 @@ -1190,7 +1200,7 @@ importers: '@types/jest': 25.2.1 '@types/node': 10.17.13 gulp: ~4.0.2 - jest: 25.4.0 + jest: ~25.4.0 ts-jest: ~25.1.0 ../../libraries/stream-collator: dependencies: @@ -1845,7 +1855,7 @@ importers: '@types/tapable': 1.0.5 decache: 4.5.1 loader-utils: 1.1.0 - lodash: 4.17.15 + lodash: 4.17.19 pseudolocale: 1.1.0 xmldoc: 1.1.2 devDependencies: @@ -1911,7 +1921,7 @@ importers: webpack-sources: ~1.4.3 ../../webpack/set-webpack-public-path-plugin: dependencies: - lodash: 4.17.15 + lodash: 4.17.19 uglify-js: 3.0.28 devDependencies: '@microsoft/node-library-build': 'link:../../core-build/node-library-build' @@ -1944,72 +1954,71 @@ packages: '@babel/highlight': 7.10.4 resolution: integrity: sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== - /@babel/core/7.10.4: + /@babel/core/7.10.5: dependencies: '@babel/code-frame': 7.10.4 - '@babel/generator': 7.10.4 - '@babel/helper-module-transforms': 7.10.4 + '@babel/generator': 7.10.5 + '@babel/helper-module-transforms': 7.10.5 '@babel/helpers': 7.10.4 - '@babel/parser': 7.10.4 + '@babel/parser': 7.10.5 '@babel/template': 7.10.4 - '@babel/traverse': 7.10.4 - '@babel/types': 7.10.4 + '@babel/traverse': 7.10.5 + '@babel/types': 7.10.5 convert-source-map: 1.7.0 debug: 4.1.1 gensync: 1.0.0-beta.1 json5: 2.1.3 - lodash: 4.17.15 + lodash: 4.17.19 resolve: 1.17.0 semver: 5.7.1 source-map: 0.5.7 engines: node: '>=6.9.0' resolution: - integrity: sha512-3A0tS0HWpy4XujGc7QtOIHTeNwUgWaZc/WuS5YQrfhU67jnVmsD6OGPc1AKHH0LJHQICGncy3+YUjIhVlfDdcA== - /@babel/generator/7.10.4: + integrity: sha512-O34LQooYVDXPl7QWCdW9p4NR+QlzOr7xShPPJz8GsuCU3/8ua/wqTr7gmnxXv+WBESiGU/G5s16i6tUvHkNb+w== + /@babel/generator/7.10.5: dependencies: - '@babel/types': 7.10.4 + '@babel/types': 7.10.5 jsesc: 2.5.2 - lodash: 4.17.15 source-map: 0.5.7 resolution: - integrity: sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng== + integrity: sha512-3vXxr3FEW7E7lJZiWQ3bM4+v/Vyr9C+hpolQ8BGFr9Y8Ri2tFLWTixmwKBafDujO1WVah4fhZBeU1bieKdghig== /@babel/helper-function-name/7.10.4: dependencies: '@babel/helper-get-function-arity': 7.10.4 '@babel/template': 7.10.4 - '@babel/types': 7.10.4 + '@babel/types': 7.10.5 resolution: integrity: sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ== /@babel/helper-get-function-arity/7.10.4: dependencies: - '@babel/types': 7.10.4 + '@babel/types': 7.10.5 resolution: integrity: sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A== - /@babel/helper-member-expression-to-functions/7.10.4: + /@babel/helper-member-expression-to-functions/7.10.5: dependencies: - '@babel/types': 7.10.4 + '@babel/types': 7.10.5 resolution: - integrity: sha512-m5j85pK/KZhuSdM/8cHUABQTAslV47OjfIB9Cc7P+PvlAoBzdb79BGNfw8RhT5Mq3p+xGd0ZfAKixbrUZx0C7A== + integrity: sha512-HiqJpYD5+WopCXIAbQDG0zye5XYVvcO9w/DHp5GsaGkRUaamLj2bEtu6i8rnGGprAhHM3qidCMgp71HF4endhA== /@babel/helper-module-imports/7.10.4: dependencies: - '@babel/types': 7.10.4 + '@babel/types': 7.10.5 resolution: integrity: sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw== - /@babel/helper-module-transforms/7.10.4: + /@babel/helper-module-transforms/7.10.5: dependencies: '@babel/helper-module-imports': 7.10.4 '@babel/helper-replace-supers': 7.10.4 '@babel/helper-simple-access': 7.10.4 '@babel/helper-split-export-declaration': 7.10.4 '@babel/template': 7.10.4 - '@babel/types': 7.10.4 - lodash: 4.17.15 + '@babel/types': 7.10.5 + lodash: 4.17.19 resolution: - integrity: sha512-Er2FQX0oa3nV7eM1o0tNCTx7izmQtwAQsIiaLRWtavAAEcskb0XJ5OjJbVrYXWOTr8om921Scabn4/tzlx7j1Q== + integrity: sha512-4P+CWMJ6/j1W915ITJaUkadLObmCRRSC234uctJfn/vHrsLNxsR8dwlcXv9ZhJWzl77awf+mWXSZEKt5t0OnlA== /@babel/helper-optimise-call-expression/7.10.4: dependencies: - '@babel/types': 7.10.4 + '@babel/types': 7.10.5 resolution: integrity: sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg== /@babel/helper-plugin-utils/7.10.4: @@ -2017,21 +2026,21 @@ packages: integrity: sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== /@babel/helper-replace-supers/7.10.4: dependencies: - '@babel/helper-member-expression-to-functions': 7.10.4 + '@babel/helper-member-expression-to-functions': 7.10.5 '@babel/helper-optimise-call-expression': 7.10.4 - '@babel/traverse': 7.10.4 - '@babel/types': 7.10.4 + '@babel/traverse': 7.10.5 + '@babel/types': 7.10.5 resolution: integrity: sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A== /@babel/helper-simple-access/7.10.4: dependencies: '@babel/template': 7.10.4 - '@babel/types': 7.10.4 + '@babel/types': 7.10.5 resolution: integrity: sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw== /@babel/helper-split-export-declaration/7.10.4: dependencies: - '@babel/types': 7.10.4 + '@babel/types': 7.10.5 resolution: integrity: sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg== /@babel/helper-validator-identifier/7.10.4: @@ -2040,8 +2049,8 @@ packages: /@babel/helpers/7.10.4: dependencies: '@babel/template': 7.10.4 - '@babel/traverse': 7.10.4 - '@babel/types': 7.10.4 + '@babel/traverse': 7.10.5 + '@babel/types': 7.10.5 resolution: integrity: sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA== /@babel/highlight/7.10.4: @@ -2051,133 +2060,127 @@ packages: js-tokens: 4.0.0 resolution: integrity: sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== - /@babel/parser/7.10.4: + /@babel/parser/7.10.5: engines: node: '>=6.0.0' hasBin: true resolution: - integrity: sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA== - /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.10.4: + integrity: sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ== + /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.10.5: dependencies: - '@babel/core': 7.10.4 + '@babel/core': 7.10.5 '@babel/helper-plugin-utils': 7.10.4 peerDependencies: '@babel/core': ^7.0.0-0 resolution: integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - /@babel/plugin-syntax-bigint/7.8.3_@babel+core@7.10.4: + /@babel/plugin-syntax-bigint/7.8.3_@babel+core@7.10.5: dependencies: - '@babel/core': 7.10.4 + '@babel/core': 7.10.5 '@babel/helper-plugin-utils': 7.10.4 peerDependencies: '@babel/core': ^7.0.0-0 resolution: integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== - /@babel/plugin-syntax-class-properties/7.10.4_@babel+core@7.10.4: + /@babel/plugin-syntax-class-properties/7.10.4_@babel+core@7.10.5: dependencies: - '@babel/core': 7.10.4 + '@babel/core': 7.10.5 '@babel/helper-plugin-utils': 7.10.4 peerDependencies: '@babel/core': ^7.0.0-0 resolution: integrity: sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA== - /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.10.4: + /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.10.5: dependencies: - '@babel/core': 7.10.4 + '@babel/core': 7.10.5 '@babel/helper-plugin-utils': 7.10.4 peerDependencies: '@babel/core': ^7.0.0-0 resolution: integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== - /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.10.4: + /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.10.5: dependencies: - '@babel/core': 7.10.4 + '@babel/core': 7.10.5 '@babel/helper-plugin-utils': 7.10.4 peerDependencies: '@babel/core': ^7.0.0-0 resolution: integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.10.4: + /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.10.5: dependencies: - '@babel/core': 7.10.4 + '@babel/core': 7.10.5 '@babel/helper-plugin-utils': 7.10.4 peerDependencies: '@babel/core': ^7.0.0-0 resolution: integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== - /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.10.4: + /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.10.5: dependencies: - '@babel/core': 7.10.4 + '@babel/core': 7.10.5 '@babel/helper-plugin-utils': 7.10.4 peerDependencies: '@babel/core': ^7.0.0-0 resolution: integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== - /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.10.4: + /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.10.5: dependencies: - '@babel/core': 7.10.4 + '@babel/core': 7.10.5 '@babel/helper-plugin-utils': 7.10.4 peerDependencies: '@babel/core': ^7.0.0-0 resolution: integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== - /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.10.4: + /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.10.5: dependencies: - '@babel/core': 7.10.4 + '@babel/core': 7.10.5 '@babel/helper-plugin-utils': 7.10.4 peerDependencies: '@babel/core': ^7.0.0-0 resolution: integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.10.4: + /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.10.5: dependencies: - '@babel/core': 7.10.4 + '@babel/core': 7.10.5 '@babel/helper-plugin-utils': 7.10.4 peerDependencies: '@babel/core': ^7.0.0-0 resolution: integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.10.4: + /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.10.5: dependencies: - '@babel/core': 7.10.4 + '@babel/core': 7.10.5 '@babel/helper-plugin-utils': 7.10.4 peerDependencies: '@babel/core': ^7.0.0-0 resolution: integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== - /@babel/runtime-corejs3/7.10.4: - dependencies: - core-js-pure: 3.6.5 - regenerator-runtime: 0.13.5 - resolution: - integrity: sha512-BFlgP2SoLO9HJX9WBwN67gHWMBhDX/eDz64Jajd6mR/UAUzqrNMm99d4qHnVaKscAElZoFiPv+JpR/Siud5lXw== /@babel/template/7.10.4: dependencies: '@babel/code-frame': 7.10.4 - '@babel/parser': 7.10.4 - '@babel/types': 7.10.4 + '@babel/parser': 7.10.5 + '@babel/types': 7.10.5 resolution: integrity: sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA== - /@babel/traverse/7.10.4: + /@babel/traverse/7.10.5: dependencies: '@babel/code-frame': 7.10.4 - '@babel/generator': 7.10.4 + '@babel/generator': 7.10.5 '@babel/helper-function-name': 7.10.4 '@babel/helper-split-export-declaration': 7.10.4 - '@babel/parser': 7.10.4 - '@babel/types': 7.10.4 + '@babel/parser': 7.10.5 + '@babel/types': 7.10.5 debug: 4.1.1 globals: 11.12.0 - lodash: 4.17.15 + lodash: 4.17.19 resolution: - integrity: sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q== - /@babel/types/7.10.4: + integrity: sha512-yc/fyv2gUjPqzTz0WHeRJH2pv7jA9kA7mBX2tXl/x5iOE81uaVPuGPtaYk7wmkx4b67mQ7NqI8rmT2pF47KYKQ== + /@babel/types/7.10.5: dependencies: '@babel/helper-validator-identifier': 7.10.4 - lodash: 4.17.15 + lodash: 4.17.19 to-fast-properties: 2.0.0 resolution: - integrity: sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg== + integrity: sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q== /@bcoe/v8-coverage/0.2.3: resolution: integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== @@ -2237,7 +2240,7 @@ packages: jest-resolve-dependencies: 25.5.4 jest-runner: 25.5.4 jest-runtime: 25.5.4 - jest-snapshot: 25.5.1 + jest-snapshot: 25.4.0 jest-util: 25.5.0 jest-validate: 25.5.0 jest-watcher: 25.5.0 @@ -2343,7 +2346,7 @@ packages: integrity: sha512-pTJGEkSeg1EkCO2YWq6hbFvKNXk8ejqlxiOg1jBNLnWrgXOkdY6UmqZpwGFXNnRt9B8nO1uWMzLLZ4eCmhkPNA== /@jest/transform/25.5.1: dependencies: - '@babel/core': 7.10.4 + '@babel/core': 7.10.5 '@jest/types': 25.5.0 babel-plugin-istanbul: 6.0.0 chalk: 3.0.0 @@ -2363,6 +2366,17 @@ packages: node: '>= 8.3' resolution: integrity: sha512-Y8CEoVwXb4QwA6Y/9uDkn0Xfz0finGkieuV0xkdF9UtZGJeLukD5nLkaVrVsODB1ojRWlaoD0AJZpVHCSnJEvg== + /@jest/types/25.4.0: + dependencies: + '@types/istanbul-lib-coverage': 2.0.3 + '@types/istanbul-reports': 1.1.2 + '@types/yargs': 15.0.5 + chalk: 3.0.0 + dev: true + engines: + node: '>= 8.3' + resolution: + integrity: sha512-XBeaWNzw2PPnGW5aXvZt3+VO60M+34RY3XDsCK5tW7kyj3RK0XClRutCfjqcBuaR2aBQTbluEDME9b5MB9UAPw== /@jest/types/25.5.0: dependencies: '@types/istanbul-lib-coverage': 2.0.3 @@ -2394,7 +2408,7 @@ packages: '@rushstack/node-core-library': 3.24.1 '@rushstack/ts-command-line': 4.4.2 colors: 1.2.5 - lodash: 4.17.15 + lodash: 4.17.19 resolve: 1.17.0 source-map: 0.6.1 typescript: 3.7.5 @@ -2409,7 +2423,7 @@ packages: '@rushstack/node-core-library': 3.24.4 '@rushstack/ts-command-line': 4.4.6 colors: 1.2.5 - lodash: 4.17.15 + lodash: 4.17.19 resolve: 1.17.0 semver: 5.3.0 source-map: 0.6.1 @@ -2754,8 +2768,8 @@ packages: integrity: sha512-QX7U7YW3zX3ex6MECtWO9folTGsXeP4b8bSjTq3I1ODM+H+sFHwGKuof+T+qBcDClGlCGtDb3SVfiTVfmcxw4g== /@types/babel__core/7.1.9: dependencies: - '@babel/parser': 7.10.4 - '@babel/types': 7.10.4 + '@babel/parser': 7.10.5 + '@babel/types': 7.10.5 '@types/babel__generator': 7.6.1 '@types/babel__template': 7.0.2 '@types/babel__traverse': 7.0.13 @@ -2763,18 +2777,18 @@ packages: integrity: sha512-sY2RsIJ5rpER1u3/aQ8OFSI7qGIy8o1NEEbgb2UaJcvOtXOMpd39ko723NBpjQFg9SIX7TXtjejZVGeIMLhoOw== /@types/babel__generator/7.6.1: dependencies: - '@babel/types': 7.10.4 + '@babel/types': 7.10.5 resolution: integrity: sha512-bBKm+2VPJcMRVwNhxKu8W+5/zT7pwNEqeokFOmbvVSqGzFneNxYcEBro9Ac7/N9tlsaPYnZLK8J1LWKkMsLAew== /@types/babel__template/7.0.2: dependencies: - '@babel/parser': 7.10.4 - '@babel/types': 7.10.4 + '@babel/parser': 7.10.5 + '@babel/types': 7.10.5 resolution: integrity: sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg== /@types/babel__traverse/7.0.13: dependencies: - '@babel/types': 7.10.4 + '@babel/types': 7.10.5 resolution: integrity: sha512-i+zS7t6/s9cdQvbqKDARrcbrPvtJGlbYsMkazo03nTAK3RX9FNrLllXys22uiTGJapPOTZTQ35nHh4ISph4SLQ== /@types/body-parser/1.19.0: @@ -3472,7 +3486,7 @@ packages: eslint-visitor-keys: 1.3.0 glob: 7.1.6 is-glob: 4.0.1 - lodash: 4.17.15 + lodash: 4.17.19 semver: 7.3.2 tsutils: 3.17.1_typescript@3.5.3 typescript: 3.5.3 @@ -3492,7 +3506,7 @@ packages: eslint-visitor-keys: 1.3.0 glob: 7.1.6 is-glob: 4.0.1 - lodash: 4.17.15 + lodash: 4.17.19 semver: 7.3.2 tsutils: 3.17.1_typescript@3.7.5 typescript: 3.7.5 @@ -3512,7 +3526,7 @@ packages: eslint-visitor-keys: 1.3.0 glob: 7.1.6 is-glob: 4.0.1 - lodash: 4.17.15 + lodash: 4.17.19 semver: 7.3.2 tsutils: 3.17.1_typescript@3.9.6 typescript: 3.9.6 @@ -3736,13 +3750,13 @@ packages: ajv: '>=5.0.0' resolution: integrity: sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== - /ajv-keywords/3.5.0_ajv@6.12.3: + /ajv-keywords/3.5.1_ajv@6.12.3: dependencies: ajv: 6.12.3 peerDependencies: ajv: ^6.9.1 resolution: - integrity: sha512-eyoaac3btgU8eJlvh01En8OCKzRqlLe2G5jDsCr3RiE2uLGMEEB1aaGwVVpwR8M95956tGH6R+9edC++OvzaVw== + integrity: sha512-KWcq3xN8fDjSB+IMoh2VaXVhRI0BBGxoYp3rx7Pkb6z0cFjYR9Q9l4yZqqals0/zsioCmocC5H6UvsGD4MoIBA== /ajv/6.10.2: dependencies: fast-deep-equal: 2.0.1 @@ -4093,7 +4107,7 @@ packages: integrity: sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= /async/2.6.3: dependencies: - lodash: 4.17.15 + lodash: 4.17.19 dev: false resolution: integrity: sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== @@ -4106,10 +4120,10 @@ packages: hasBin: true resolution: integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - /autoprefixer/9.8.4: + /autoprefixer/9.8.5: dependencies: browserslist: 4.13.0 - caniuse-lite: 1.0.30001094 + caniuse-lite: 1.0.30001099 colorette: 1.2.1 normalize-range: 0.1.2 num2fraction: 1.2.2 @@ -4118,7 +4132,7 @@ packages: dev: false hasBin: true resolution: - integrity: sha512-84aYfXlpUe45lvmS+HoAWKCkirI/sw4JK0/bTeeqgHYco3dcsOn0NqdejISjptsYwNji/21dnkDri9PsYKk89A== + integrity: sha512-C2p5KkumJlsTHoNv9w31NrBRgXhf6eCMteJuHZi2xhkgC+5Vm40MEtCKPhc0qdgAOhox0YPy1SQHTAky05UoKg== /available-typed-arrays/1.0.2: dependencies: array-filter: 1.0.0 @@ -4133,14 +4147,14 @@ packages: /aws4/1.10.0: resolution: integrity: sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA== - /babel-jest/25.5.1_@babel+core@7.10.4: + /babel-jest/25.5.1_@babel+core@7.10.5: dependencies: - '@babel/core': 7.10.4 + '@babel/core': 7.10.5 '@jest/transform': 25.5.1 '@jest/types': 25.5.0 '@types/babel__core': 7.1.9 babel-plugin-istanbul: 6.0.0 - babel-preset-jest: 25.5.0_@babel+core@7.10.4 + babel-preset-jest: 25.5.0_@babel+core@7.10.5 chalk: 3.0.0 graceful-fs: 4.2.4 slash: 3.0.0 @@ -4164,35 +4178,35 @@ packages: /babel-plugin-jest-hoist/25.5.0: dependencies: '@babel/template': 7.10.4 - '@babel/types': 7.10.4 + '@babel/types': 7.10.5 '@types/babel__traverse': 7.0.13 engines: node: '>= 8.3' resolution: integrity: sha512-u+/W+WAjMlvoocYGTwthAiQSxDcJAyHpQ6oWlHdFZaaN+Rlk8Q7iiwDPg2lN/FyJtAYnKjFxbn7xus4HCFkg5g== - /babel-preset-current-node-syntax/0.1.3_@babel+core@7.10.4: - dependencies: - '@babel/core': 7.10.4 - '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.10.4 - '@babel/plugin-syntax-bigint': 7.8.3_@babel+core@7.10.4 - '@babel/plugin-syntax-class-properties': 7.10.4_@babel+core@7.10.4 - '@babel/plugin-syntax-import-meta': 7.10.4_@babel+core@7.10.4 - '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.10.4 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.10.4 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.10.4 - '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.10.4 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.10.4 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.10.4 - '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.10.4 + /babel-preset-current-node-syntax/0.1.3_@babel+core@7.10.5: + dependencies: + '@babel/core': 7.10.5 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.10.5 + '@babel/plugin-syntax-bigint': 7.8.3_@babel+core@7.10.5 + '@babel/plugin-syntax-class-properties': 7.10.4_@babel+core@7.10.5 + '@babel/plugin-syntax-import-meta': 7.10.4_@babel+core@7.10.5 + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.10.5 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.10.5 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.10.5 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.10.5 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.10.5 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.10.5 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.10.5 peerDependencies: '@babel/core': ^7.0.0 resolution: integrity: sha512-uyexu1sVwcdFnyq9o8UQYsXwXflIh8LvrF5+cKrYam93ned1CStffB3+BEcsxGSgagoA3GEyjDqO4a/58hyPYQ== - /babel-preset-jest/25.5.0_@babel+core@7.10.4: + /babel-preset-jest/25.5.0_@babel+core@7.10.5: dependencies: - '@babel/core': 7.10.4 + '@babel/core': 7.10.5 babel-plugin-jest-hoist: 25.5.0 - babel-preset-current-node-syntax: 0.1.3_@babel+core@7.10.4 + babel-preset-current-node-syntax: 0.1.3_@babel+core@7.10.5 engines: node: '>= 8.3' peerDependencies: @@ -4469,10 +4483,10 @@ packages: integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== /browserslist/4.13.0: dependencies: - caniuse-lite: 1.0.30001094 - electron-to-chromium: 1.3.488 - escalade: 3.0.1 - node-releases: 1.1.58 + caniuse-lite: 1.0.30001099 + electron-to-chromium: 1.3.497 + escalade: 3.0.2 + node-releases: 1.1.59 dev: false engines: node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7 @@ -4632,10 +4646,10 @@ packages: node: '>=6' resolution: integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - /caniuse-lite/1.0.30001094: + /caniuse-lite/1.0.30001099: dev: false resolution: - integrity: sha512-ufHZNtMaDEuRBpTbqD93tIQnngmJ+oBknjvr0IbFympSdtFpAUFmNv4mVKbb53qltxFx0nK3iy32S9AqkLzUNA== + integrity: sha512-sdS9A+sQTk7wKoeuZBN/YMAHVztUfVnjDi4/UV3sDE8xoh7YR12hKW+pIdB3oqKGwr9XaFL2ovfzt9w8eUI5CA== /capture-exit/2.0.0: dependencies: rsvp: 4.8.5 @@ -5090,10 +5104,6 @@ packages: is-plain-object: 2.0.4 resolution: integrity: sha512-7cjuUME+p+S3HZlbllgsn2CDwS+5eCCX16qBgNC4jgSTf49qR1VKy/Zhl400m0IQXl/bPGEVqncgUUMjrr4s8A== - /core-js-pure/3.6.5: - requiresBuild: true - resolution: - integrity: sha512-lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA== /core-util-is/1.0.2: resolution: integrity: sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= @@ -5320,13 +5330,6 @@ packages: node: '>=0.10.0' resolution: integrity: sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= - /decamelize/3.2.0: - dependencies: - xregexp: 4.3.0 - engines: - node: '>=6' - resolution: - integrity: sha512-4TgkVUsmmu7oCSyGBm5FvfMoACuoh9EOidm7V5/J2X2djAwwt57qb3F2KMP2ITqODTCSwb+YRV+0Zqrv18k/hw== /decode-uri-component/0.2.0: engines: node: '>=0.10' @@ -5639,10 +5642,10 @@ packages: requiresBuild: true resolution: integrity: sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== - /electron-to-chromium/1.3.488: + /electron-to-chromium/1.3.497: dev: false resolution: - integrity: sha512-NReBdOugu1yl8ly+0VDtiQ6Yw/1sLjnvflWq0gvY1nfUXU2PbA+1XAVuEb7ModnwL/MfUPjby7e4pAFnSHiy6Q== + integrity: sha512-sPdW5bUDZwiFtoonuZCUwRGzsZmKzcLM0bMVhp6SMCfUG+B3faENLx3cE+o+K0Jl+MPuNA9s9cScyFjOlixZpQ== /elliptic/6.5.3: dependencies: bn.js: 4.11.9 @@ -5779,12 +5782,12 @@ packages: es6-symbol: 3.1.3 resolution: integrity: sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA== - /escalade/3.0.1: + /escalade/3.0.2: dev: false engines: node: '>=6' resolution: - integrity: sha512-DR6NO3h9niOT+MZs7bjxlj2a1k+POu5RN8CLTPX2+i78bRi9eLe7+0zXgUHMnGXWybYcL61E9hGhPKqedy8tQA== + integrity: sha512-gPYAU37hYCUhW5euPeR+Y74F7BL+IBsV93j5cvGriSaD1aG6MGsqsV1yamRdrWrb2j3aiZvb0X+UBOWpx3JWtQ== /escape-html/1.0.3: dev: false resolution: @@ -5950,7 +5953,7 @@ packages: js-yaml: 3.13.1 json-stable-stringify-without-jsonify: 1.0.1 levn: 0.3.0 - lodash: 4.17.15 + lodash: 4.17.19 minimatch: 3.0.4 mkdirp: 0.5.5 natural-compare: 1.4.0 @@ -5959,7 +5962,7 @@ packages: regexpp: 2.0.1 semver: 6.3.0 strip-ansi: 5.2.0 - strip-json-comments: 3.1.0 + strip-json-comments: 3.1.1 table: 5.4.6 text-table: 0.2.0 v8-compile-cache: 2.1.1 @@ -5990,12 +5993,12 @@ packages: ignore: 4.0.6 import-fresh: 3.2.1 imurmurhash: 0.1.4 - inquirer: 7.3.0 + inquirer: 7.3.2 is-glob: 4.0.1 js-yaml: 3.13.1 json-stable-stringify-without-jsonify: 1.0.1 levn: 0.4.1 - lodash: 4.17.15 + lodash: 4.17.19 minimatch: 3.0.4 natural-compare: 1.4.0 optionator: 0.9.1 @@ -6003,7 +6006,7 @@ packages: regexpp: 3.1.0 semver: 7.3.2 strip-ansi: 6.0.0 - strip-json-comments: 3.1.0 + strip-json-comments: 3.1.1 table: 5.4.6 text-table: 0.2.0 v8-compile-cache: 2.1.1 @@ -6964,7 +6967,7 @@ packages: /globule/1.3.2: dependencies: glob: 7.1.6 - lodash: 4.17.15 + lodash: 4.17.19 minimatch: 3.0.4 dev: false engines: @@ -7052,7 +7055,7 @@ packages: gulp-util: 3.0.8 istanbul: 0.4.5 istanbul-threshold-checker: 0.1.0 - lodash: 4.17.15 + lodash: 4.17.19 through2: 2.0.5 resolution: integrity: sha1-Kyoby+uWpix45pgh0QTW/KMu+wk= @@ -7154,7 +7157,7 @@ packages: /handlebars/4.7.6: dependencies: minimist: 1.2.5 - neo-async: 2.6.1 + neo-async: 2.6.2 source-map: 0.6.1 wordwrap: 1.0.0 engines: @@ -7340,7 +7343,7 @@ packages: dependencies: html-minifier: 3.5.21 loader-utils: 0.2.17 - lodash: 4.17.15 + lodash: 4.17.19 pretty-error: 2.1.1 tapable: 1.1.3 toposort: 1.0.7 @@ -7420,7 +7423,7 @@ packages: dependencies: http-proxy: 1.18.1 is-glob: 4.0.1 - lodash: 4.17.15 + lodash: 4.17.19 micromatch: 3.1.10 dev: false engines: @@ -7599,7 +7602,7 @@ packages: cli-width: 2.2.1 external-editor: 3.1.0 figures: 2.0.0 - lodash: 4.17.15 + lodash: 4.17.19 mute-stream: 0.0.7 run-async: 2.4.1 rxjs: 6.6.0 @@ -7619,7 +7622,7 @@ packages: cli-width: 2.2.1 external-editor: 3.1.0 figures: 2.0.0 - lodash: 4.17.15 + lodash: 4.17.19 mute-stream: 0.0.7 run-async: 2.4.1 rxjs: 6.6.0 @@ -7631,7 +7634,7 @@ packages: node: '>=6.0.0' resolution: integrity: sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ== - /inquirer/7.3.0: + /inquirer/7.3.2: dependencies: ansi-escapes: 4.3.1 chalk: 4.1.0 @@ -7639,7 +7642,7 @@ packages: cli-width: 3.0.0 external-editor: 3.1.0 figures: 3.2.0 - lodash: 4.17.15 + lodash: 4.17.19 mute-stream: 0.0.8 run-async: 2.4.1 rxjs: 6.6.0 @@ -7649,7 +7652,7 @@ packages: engines: node: '>=8.0.0' resolution: - integrity: sha512-K+LZp6L/6eE5swqIcVXrxl21aGDU4S50gKH0/d96OMQnSBCyGyZl/oZhbkVmdp5sBoINHd4xZvFSARh2dk6DWA== + integrity: sha512-DF4osh1FM6l0RJc5YWYhSDB6TawiBRlbV9Cox8MWlidU218Tb7fm3lQTULyUJDfJ0tjbzl0W4q651mrCCEM55w== /internal-ip/4.3.0: dependencies: default-gateway: 4.2.0 @@ -8069,7 +8072,7 @@ packages: integrity: sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== /istanbul-lib-instrument/4.0.3: dependencies: - '@babel/core': 7.10.4 + '@babel/core': 7.10.5 '@istanbuljs/schema': 0.1.2 istanbul-lib-coverage: 3.0.0 semver: 6.3.0 @@ -8187,7 +8190,7 @@ packages: jest-validate: 25.5.0 prompts: 2.3.2 realpath-native: 2.0.0 - yargs: 15.4.0 + yargs: 15.4.1 engines: node: '>= 8.3' hasBin: true @@ -8195,10 +8198,10 @@ packages: integrity: sha512-usyrj1lzCJZMRN1r3QEdnn8e6E6yCx/QN7+B1sLoA68V7f3WlsxSSQfy0+BAwRiF4Hz2eHauf11GZG3PIfWTXQ== /jest-config/25.5.4: dependencies: - '@babel/core': 7.10.4 + '@babel/core': 7.10.5 '@jest/test-sequencer': 25.5.4 '@jest/types': 25.5.0 - babel-jest: 25.5.1_@babel+core@7.10.4 + babel-jest: 25.5.1_@babel+core@7.10.5 chalk: 3.0.0 deepmerge: 4.2.2 glob: 7.1.6 @@ -8309,7 +8312,7 @@ packages: integrity: sha512-dddgh9UZjV7SCDQUrQ+5t9yy8iEgKc1AKqZR9YDww8xsVOtzPQSMVLDChc21+g29oTRexb9/B0bIlZL+sWmvAQ== /jest-jasmine2/25.5.4: dependencies: - '@babel/traverse': 7.10.4 + '@babel/traverse': 7.10.5 '@jest/environment': 25.5.0 '@jest/source-map': 25.5.0 '@jest/test-result': 25.5.0 @@ -8471,7 +8474,7 @@ packages: realpath-native: 2.0.0 slash: 3.0.0 strip-bom: 4.0.0 - yargs: 15.4.0 + yargs: 15.4.1 engines: node: '>= 8.3' hasBin: true @@ -8484,9 +8487,29 @@ packages: node: '>= 8.3' resolution: integrity: sha512-LxD8fY1lByomEPflwur9o4e2a5twSQ7TaVNLlFUuToIdoJuBt8tzHfCsZ42Ok6LkKXWzFWf3AGmheuLAA7LcCA== + /jest-snapshot/25.4.0: + dependencies: + '@babel/types': 7.10.5 + '@jest/types': 25.5.0 + '@types/prettier': 1.19.1 + chalk: 3.0.0 + expect: 25.5.0 + jest-diff: 25.5.0 + jest-get-type: 25.2.6 + jest-matcher-utils: 25.5.0 + jest-message-util: 25.5.0 + jest-resolve: 25.5.1_jest-resolve@25.5.1 + make-dir: 3.1.0 + natural-compare: 1.4.0 + pretty-format: 25.5.0 + semver: 6.3.0 + engines: + node: '>= 8.3' + resolution: + integrity: sha512-J4CJ0X2SaGheYRZdLz9CRHn9jUknVmlks4UBeu270hPAvdsauFXOhx9SQP2JtRzhnR3cvro/9N9KP83/uvFfRg== /jest-snapshot/25.5.1: dependencies: - '@babel/types': 7.10.4 + '@babel/types': 7.10.5 '@jest/types': 25.5.0 '@types/prettier': 1.19.1 chalk: 3.0.0 @@ -8561,10 +8584,10 @@ packages: /jju/1.4.0: resolution: integrity: sha1-o6vicYryQaKykE+EpiWXDzia4yo= - /js-base64/2.6.2: + /js-base64/2.6.3: dev: false resolution: - integrity: sha512-1hgLrLIrmCgZG+ID3VoLNLOSwjGnoZa8tyrUdEteMeIzsT6PH7PMLyUvbDwzNE56P3PNxyvuIOx4Uh2E5rzQIw== + integrity: sha512-fiUvdfCaAXoQTHdKMgTvg6IkecXDcVz6V5rlftUTclF9IKBjMizvSdQaCl/z/6TApDeby5NL+axYou3i0mu1Pg== /js-tokens/4.0.0: resolution: integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== @@ -9025,9 +9048,9 @@ packages: /lodash/3.6.0: resolution: integrity: sha1-Umao9J3Zib5Pn2gbbyoMVShdDZo= - /lodash/4.17.15: + /lodash/4.17.19: resolution: - integrity: sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== + integrity: sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== /loglevel/1.6.8: dev: false engines: @@ -9493,9 +9516,9 @@ packages: node: '>= 0.6' resolution: integrity: sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== - /neo-async/2.6.1: + /neo-async/2.6.2: resolution: - integrity: sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== + integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== /next-tick/1.0.0: resolution: integrity: sha1-yobR/ogoFpsBICCOPchCS524NCw= @@ -9601,10 +9624,10 @@ packages: optional: true resolution: integrity: sha512-SVfQ/wMw+DesunOm5cKqr6yDcvUTDl/yc97ybGHMrteNEY6oekXpNpS3lZwgLlwz0FLgHoiW28ZpmBHUDg37cw== - /node-releases/1.1.58: + /node-releases/1.1.59: dev: false resolution: - integrity: sha512-NxBudgVKiRh/2aPWMgPR7bPTX0VPmGx5QBwCtdHitnqFE5/O8DeBXuIMH1nwNnw/aMo6AjOrpsHzfY3UbUJ7yg== + integrity: sha512-H3JrdUczbdiwxN5FuJPyCHnGHIFqQ0wWxo+9j1kAXAzqNMAHlo+4I/sYYxpyK0irQ73HgdiyzD32oqQDcU2Osw== /node-sass/4.14.1: dependencies: async-foreach: 0.1.3 @@ -9614,7 +9637,7 @@ packages: get-stdin: 4.0.1 glob: 7.0.6 in-publish: 2.0.1 - lodash: 4.17.15 + lodash: 4.17.19 meow: 3.7.0 mkdirp: 0.5.5 nan: 2.14.1 @@ -10868,9 +10891,6 @@ packages: dev: false resolution: integrity: sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A== - /regenerator-runtime/0.13.5: - resolution: - integrity: sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA== /regex-not/1.0.2: dependencies: extend-shallow: 3.0.2 @@ -11005,7 +11025,7 @@ packages: integrity: sha512-AC0FiLS352pBBiZhd4VXB1Ab/lh0lEgpP+GGvZqbQh8a5cmXVoTe5EX/YeTFArnp4SRGTHh1qCHu9lGs1qG8sA== /request-promise-core/1.1.3_request@2.88.2: dependencies: - lodash: 4.17.15 + lodash: 4.17.19 request: 2.88.2 engines: node: '>=0.10.0' @@ -11241,7 +11261,7 @@ packages: /sass-graph/2.2.5: dependencies: glob: 7.0.6 - lodash: 4.17.15 + lodash: 4.17.19 scss-tokenizer: 0.2.3 yargs: 13.3.2 dev: false @@ -11262,14 +11282,14 @@ packages: dependencies: ajv: 6.12.3 ajv-errors: 1.0.1_ajv@6.12.3 - ajv-keywords: 3.5.0_ajv@6.12.3 + ajv-keywords: 3.5.1_ajv@6.12.3 engines: node: '>= 4' resolution: integrity: sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== /scss-tokenizer/0.2.3: dependencies: - js-base64: 2.6.2 + js-base64: 2.6.3 source-map: 0.4.4 dev: false resolution: @@ -11946,11 +11966,11 @@ packages: hasBin: true resolution: integrity: sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI= - /strip-json-comments/3.1.0: + /strip-json-comments/3.1.1: engines: node: '>=8' resolution: - integrity: sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w== + integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== /sudo/1.0.3: dependencies: inpath: 1.0.2 @@ -12024,7 +12044,7 @@ packages: /table/5.4.6: dependencies: ajv: 6.12.3 - lodash: 4.17.15 + lodash: 4.17.19 slice-ansi: 2.1.0 string-width: 3.1.0 engines: @@ -13622,7 +13642,7 @@ packages: /watchpack/1.7.2: dependencies: graceful-fs: 4.2.4 - neo-async: 2.6.1 + neo-async: 2.6.2 optionalDependencies: chokidar: 3.4.0 watchpack-chokidar2: 2.0.0 @@ -13648,7 +13668,7 @@ packages: express: 4.17.1 filesize: 3.6.1 gzip-size: 5.1.1 - lodash: 4.17.15 + lodash: 4.17.19 mkdirp: 0.5.5 opener: 1.5.1 ws: 6.2.1 @@ -13763,7 +13783,7 @@ packages: acorn: 6.4.1 acorn-dynamic-import: 4.0.0_acorn@6.4.1 ajv: 6.12.3 - ajv-keywords: 3.5.0_ajv@6.12.3 + ajv-keywords: 3.5.1_ajv@6.12.3 chrome-trace-event: 1.0.2 enhanced-resolve: 4.2.0 eslint-scope: 4.0.3 @@ -13773,7 +13793,7 @@ packages: memory-fs: 0.4.1 micromatch: 3.1.10 mkdirp: 0.5.5 - neo-async: 2.6.1 + neo-async: 2.6.2 node-libs-browser: 2.2.1 schema-utils: 1.0.0 tapable: 1.1.3 @@ -14014,11 +14034,6 @@ packages: dev: false resolution: integrity: sha512-ruPC/fyPNck2BD1dpz0AZZyrEwMOrWTO5lDdIXS91rs3wtm4j+T8Rp2o+zoOYkkAxJTZRPOSnOGei1egoRmKMQ== - /xregexp/4.3.0: - dependencies: - '@babel/runtime-corejs3': 7.10.4 - resolution: - integrity: sha512-7jXDIFXh5yJ/orPn4SXjuVrWWoi4Cr8jfV1eHv9CixKSbU+jY4mxfrBwAuDvupPNKpMUY+FeIqsVw/JLT9+B8g== /xtend/4.0.2: engines: node: '>=0.4' @@ -14113,10 +14128,10 @@ packages: dev: false resolution: integrity: sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== - /yargs/15.4.0: + /yargs/15.4.1: dependencies: cliui: 6.0.0 - decamelize: 3.2.0 + decamelize: 1.2.0 find-up: 4.1.0 get-caller-file: 2.0.5 require-directory: 2.1.1 @@ -14129,7 +14144,7 @@ packages: engines: node: '>=8' resolution: - integrity: sha512-D3fRFnZwLWp8jVAAhPZBsmeIHY8tTsb8ItV9KaAaopmC6wde2u6Yw29JBIZHXw14kgkRnYmDgmQU4FVMDlIsWw== + integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== /yargs/4.6.0: dependencies: camelcase: 2.1.1 diff --git a/common/config/rush/repo-state.json b/common/config/rush/repo-state.json index 5b48d685006..adf3a9388d0 100644 --- a/common/config/rush/repo-state.json +++ b/common/config/rush/repo-state.json @@ -1,5 +1,5 @@ // DO NOT MODIFY THIS FILE. It is generated and used by Rush. { - "pnpmShrinkwrapHash": "74f8d98c353cbff9fcc549e1af5a3aa5bd612fb0", + "pnpmShrinkwrapHash": "4c2644e923d758385a807a84bdae6963a8b4f0f4", "preferredVersionsHash": "334ea62b6a2798dcf80917b79555983377e7435e" } diff --git a/common/reviews/api/heft.api.md b/common/reviews/api/heft.api.md index d4db7c11622..0fce7b76847 100644 --- a/common/reviews/api/heft.api.md +++ b/common/reviews/api/heft.api.md @@ -292,6 +292,10 @@ export interface ITestActionContext extends IActionContext { // @public (undocumented) export class TestHooks extends ActionHooksBase { + // (undocumented) + readonly configureTest: AsyncSeriesHook; + // (undocumented) + readonly run: AsyncParallelHook; } diff --git a/core-build/gulp-core-build-sass/package.json b/core-build/gulp-core-build-sass/package.json index 78c843befd4..6186fb07c82 100644 --- a/core-build/gulp-core-build-sass/package.json +++ b/core-build/gulp-core-build-sass/package.json @@ -35,6 +35,6 @@ "@types/jest": "25.2.1", "@types/node-sass": "4.11.1", "gulp": "~4.0.2", - "jest": "25.4.0" + "jest": "~25.4.0" } } diff --git a/core-build/gulp-core-build/package.json b/core-build/gulp-core-build/package.json index 24f843e6982..3ad8fb7aba1 100644 --- a/core-build/gulp-core-build/package.json +++ b/core-build/gulp-core-build/package.json @@ -33,11 +33,11 @@ "gulp": "~4.0.2", "gulp-flatten": "~0.2.0", "gulp-if": "^2.0.1", - "@jest/core": "25.4.0", - "@jest/reporters": "25.4.0", - "jest": "25.4.0", - "jest-cli": "25.4.0", - "jest-environment-jsdom": "25.4.0", + "@jest/core": "~25.4.0", + "@jest/reporters": "~25.4.0", + "jest": "~25.4.0", + "jest-cli": "~25.4.0", + "jest-environment-jsdom": "~25.4.0", "jest-nunit-reporter": "~1.3.1", "jsdom": "~11.11.0", "lodash.merge": "~4.6.2", diff --git a/libraries/rushell/package.json b/libraries/rushell/package.json index ac0839d4899..702527cbf7c 100644 --- a/libraries/rushell/package.json +++ b/libraries/rushell/package.json @@ -23,7 +23,7 @@ "@types/jest": "25.2.1", "@types/node": "10.17.13", "gulp": "~4.0.2", - "jest": "25.4.0", + "jest": "~25.4.0", "ts-jest": "~25.1.0" }, "jest": {