aboutsummaryrefslogtreecommitdiff
path: root/node_modules/@jest
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/@jest')
-rw-r--r--node_modules/@jest/console/LICENSE21
-rw-r--r--node_modules/@jest/console/build/BufferedConsole.d.ts37
-rw-r--r--node_modules/@jest/console/build/BufferedConsole.js258
-rw-r--r--node_modules/@jest/console/build/CustomConsole.d.ts41
-rw-r--r--node_modules/@jest/console/build/CustomConsole.js240
-rw-r--r--node_modules/@jest/console/build/NullConsole.d.ts23
-rw-r--r--node_modules/@jest/console/build/NullConsole.js50
-rw-r--r--node_modules/@jest/console/build/getConsoleOutput.d.ts10
-rw-r--r--node_modules/@jest/console/build/getConsoleOutput.js101
-rw-r--r--node_modules/@jest/console/build/index.d.ts11
-rw-r--r--node_modules/@jest/console/build/index.js41
-rw-r--r--node_modules/@jest/console/build/types.d.ts20
-rw-r--r--node_modules/@jest/console/build/types.js1
-rw-r--r--node_modules/@jest/console/package.json38
-rw-r--r--node_modules/@jest/core/LICENSE21
-rw-r--r--node_modules/@jest/core/README.md3
-rw-r--r--node_modules/@jest/core/build/FailedTestsCache.d.ts12
-rw-r--r--node_modules/@jest/core/build/FailedTestsCache.js59
-rw-r--r--node_modules/@jest/core/build/FailedTestsInteractiveMode.d.ts31
-rw-r--r--node_modules/@jest/core/build/FailedTestsInteractiveMode.js262
-rw-r--r--node_modules/@jest/core/build/ReporterDispatcher.d.ts22
-rw-r--r--node_modules/@jest/core/build/ReporterDispatcher.js104
-rw-r--r--node_modules/@jest/core/build/SearchSource.d.ts46
-rw-r--r--node_modules/@jest/core/build/SearchSource.js490
-rw-r--r--node_modules/@jest/core/build/SnapshotInteractiveMode.d.ts30
-rw-r--r--node_modules/@jest/core/build/SnapshotInteractiveMode.js327
-rw-r--r--node_modules/@jest/core/build/TestNamePatternPrompt.d.ts17
-rw-r--r--node_modules/@jest/core/build/TestNamePatternPrompt.js86
-rw-r--r--node_modules/@jest/core/build/TestPathPatternPrompt.d.ts24
-rw-r--r--node_modules/@jest/core/build/TestPathPatternPrompt.js81
-rw-r--r--node_modules/@jest/core/build/TestScheduler.d.ts42
-rw-r--r--node_modules/@jest/core/build/TestScheduler.js570
-rw-r--r--node_modules/@jest/core/build/TestWatcher.d.ts23
-rw-r--r--node_modules/@jest/core/build/TestWatcher.js64
-rw-r--r--node_modules/@jest/core/build/assets/jest_logo.pngbin0 -> 3157 bytes
-rw-r--r--node_modules/@jest/core/build/cli/index.d.ts12
-rw-r--r--node_modules/@jest/core/build/cli/index.js399
-rw-r--r--node_modules/@jest/core/build/collectHandles.d.ts10
-rw-r--r--node_modules/@jest/core/build/collectHandles.js269
-rw-r--r--node_modules/@jest/core/build/getChangedFilesPromise.d.ts9
-rw-r--r--node_modules/@jest/core/build/getChangedFilesPromise.js77
-rw-r--r--node_modules/@jest/core/build/getConfigsOfProjectsToRun.d.ts8
-rw-r--r--node_modules/@jest/core/build/getConfigsOfProjectsToRun.js28
-rw-r--r--node_modules/@jest/core/build/getNoTestFound.d.ts9
-rw-r--r--node_modules/@jest/core/build/getNoTestFound.js63
-rw-r--r--node_modules/@jest/core/build/getNoTestFoundFailed.d.ts8
-rw-r--r--node_modules/@jest/core/build/getNoTestFoundFailed.js51
-rw-r--r--node_modules/@jest/core/build/getNoTestFoundPassWithNoTests.d.ts7
-rw-r--r--node_modules/@jest/core/build/getNoTestFoundPassWithNoTests.js30
-rw-r--r--node_modules/@jest/core/build/getNoTestFoundRelatedToChangedFiles.d.ts8
-rw-r--r--node_modules/@jest/core/build/getNoTestFoundRelatedToChangedFiles.js57
-rw-r--r--node_modules/@jest/core/build/getNoTestFoundVerbose.d.ts9
-rw-r--r--node_modules/@jest/core/build/getNoTestFoundVerbose.js95
-rw-r--r--node_modules/@jest/core/build/getNoTestsFoundMessage.d.ts9
-rw-r--r--node_modules/@jest/core/build/getNoTestsFoundMessage.js52
-rw-r--r--node_modules/@jest/core/build/getProjectDisplayName.d.ts8
-rw-r--r--node_modules/@jest/core/build/getProjectDisplayName.js23
-rw-r--r--node_modules/@jest/core/build/getProjectNamesMissingWarning.d.ts8
-rw-r--r--node_modules/@jest/core/build/getProjectNamesMissingWarning.js49
-rw-r--r--node_modules/@jest/core/build/getSelectProjectsMessage.d.ts8
-rw-r--r--node_modules/@jest/core/build/getSelectProjectsMessage.js65
-rw-r--r--node_modules/@jest/core/build/jest.d.ts11
-rw-r--r--node_modules/@jest/core/build/jest.js49
-rw-r--r--node_modules/@jest/core/build/lib/activeFiltersMessage.d.ts9
-rw-r--r--node_modules/@jest/core/build/lib/activeFiltersMessage.js54
-rw-r--r--node_modules/@jest/core/build/lib/createContext.d.ts10
-rw-r--r--node_modules/@jest/core/build/lib/createContext.js35
-rw-r--r--node_modules/@jest/core/build/lib/handleDeprecationWarnings.d.ts8
-rw-r--r--node_modules/@jest/core/build/lib/handleDeprecationWarnings.js72
-rw-r--r--node_modules/@jest/core/build/lib/isValidPath.d.ts8
-rw-r--r--node_modules/@jest/core/build/lib/isValidPath.js29
-rw-r--r--node_modules/@jest/core/build/lib/logDebugMessages.d.ts9
-rw-r--r--node_modules/@jest/core/build/lib/logDebugMessages.js23
-rw-r--r--node_modules/@jest/core/build/lib/updateGlobalConfig.d.ts11
-rw-r--r--node_modules/@jest/core/build/lib/updateGlobalConfig.js121
-rw-r--r--node_modules/@jest/core/build/lib/watchPluginsHelpers.d.ts10
-rw-r--r--node_modules/@jest/core/build/lib/watchPluginsHelpers.js62
-rw-r--r--node_modules/@jest/core/build/plugins/FailedTestsInteractive.d.ts17
-rw-r--r--node_modules/@jest/core/build/plugins/FailedTestsInteractive.js135
-rw-r--r--node_modules/@jest/core/build/plugins/Quit.d.ts18
-rw-r--r--node_modules/@jest/core/build/plugins/Quit.js60
-rw-r--r--node_modules/@jest/core/build/plugins/TestNamePattern.d.ts21
-rw-r--r--node_modules/@jest/core/build/plugins/TestNamePattern.js91
-rw-r--r--node_modules/@jest/core/build/plugins/TestPathPattern.d.ts21
-rw-r--r--node_modules/@jest/core/build/plugins/TestPathPattern.js91
-rw-r--r--node_modules/@jest/core/build/plugins/UpdateSnapshots.d.ts21
-rw-r--r--node_modules/@jest/core/build/plugins/UpdateSnapshots.js70
-rw-r--r--node_modules/@jest/core/build/plugins/UpdateSnapshotsInteractive.d.ts20
-rw-r--r--node_modules/@jest/core/build/plugins/UpdateSnapshotsInteractive.js138
-rw-r--r--node_modules/@jest/core/build/pluralize.d.ts7
-rw-r--r--node_modules/@jest/core/build/pluralize.js16
-rw-r--r--node_modules/@jest/core/build/runGlobalHook.d.ts13
-rw-r--r--node_modules/@jest/core/build/runGlobalHook.js143
-rw-r--r--node_modules/@jest/core/build/runJest.d.ts27
-rw-r--r--node_modules/@jest/core/build/runJest.js423
-rw-r--r--node_modules/@jest/core/build/testSchedulerHelper.d.ts9
-rw-r--r--node_modules/@jest/core/build/testSchedulerHelper.js51
-rw-r--r--node_modules/@jest/core/build/types.d.ts39
-rw-r--r--node_modules/@jest/core/build/types.js1
-rw-r--r--node_modules/@jest/core/build/version.d.ts7
-rw-r--r--node_modules/@jest/core/build/version.js19
-rw-r--r--node_modules/@jest/core/build/watch.d.ts13
-rw-r--r--node_modules/@jest/core/build/watch.js769
-rw-r--r--node_modules/@jest/core/package.json103
-rw-r--r--node_modules/@jest/environment/LICENSE21
-rw-r--r--node_modules/@jest/environment/build/index.d.ts267
-rw-r--r--node_modules/@jest/environment/build/index.js1
-rw-r--r--node_modules/@jest/environment/package.json32
-rw-r--r--node_modules/@jest/fake-timers/LICENSE21
-rw-r--r--node_modules/@jest/fake-timers/build/index.d.ts8
-rw-r--r--node_modules/@jest/fake-timers/build/index.js25
-rw-r--r--node_modules/@jest/fake-timers/build/legacyFakeTimers.d.ts67
-rw-r--r--node_modules/@jest/fake-timers/build/legacyFakeTimers.js673
-rw-r--r--node_modules/@jest/fake-timers/build/modernFakeTimers.d.ts34
-rw-r--r--node_modules/@jest/fake-timers/build/modernFakeTimers.js181
-rw-r--r--node_modules/@jest/fake-timers/package.json37
-rw-r--r--node_modules/@jest/globals/LICENSE21
-rw-r--r--node_modules/@jest/globals/build/index.d.ts23
-rw-r--r--node_modules/@jest/globals/build/index.js25
-rw-r--r--node_modules/@jest/globals/package.json31
-rw-r--r--node_modules/@jest/reporters/LICENSE21
-rw-r--r--node_modules/@jest/reporters/build/BaseReporter.d.ts19
-rw-r--r--node_modules/@jest/reporters/build/BaseReporter.js65
-rw-r--r--node_modules/@jest/reporters/build/CoverageReporter.d.ts24
-rw-r--r--node_modules/@jest/reporters/build/CoverageReporter.js668
-rw-r--r--node_modules/@jest/reporters/build/CoverageWorker.d.ts17
-rw-r--r--node_modules/@jest/reporters/build/CoverageWorker.js103
-rw-r--r--node_modules/@jest/reporters/build/DefaultReporter.d.ts33
-rw-r--r--node_modules/@jest/reporters/build/DefaultReporter.js254
-rw-r--r--node_modules/@jest/reporters/build/NotifyReporter.d.ts19
-rw-r--r--node_modules/@jest/reporters/build/NotifyReporter.js256
-rw-r--r--node_modules/@jest/reporters/build/Status.d.ts42
-rw-r--r--node_modules/@jest/reporters/build/Status.js272
-rw-r--r--node_modules/@jest/reporters/build/SummaryReporter.d.ts22
-rw-r--r--node_modules/@jest/reporters/build/SummaryReporter.js271
-rw-r--r--node_modules/@jest/reporters/build/VerboseReporter.d.ts27
-rw-r--r--node_modules/@jest/reporters/build/VerboseReporter.js226
-rw-r--r--node_modules/@jest/reporters/build/generateEmptyCoverage.d.ts19
-rw-r--r--node_modules/@jest/reporters/build/generateEmptyCoverage.js168
-rw-r--r--node_modules/@jest/reporters/build/getResultHeader.d.ts9
-rw-r--r--node_modules/@jest/reporters/build/getResultHeader.js104
-rw-r--r--node_modules/@jest/reporters/build/getSnapshotStatus.d.ts8
-rw-r--r--node_modules/@jest/reporters/build/getSnapshotStatus.js111
-rw-r--r--node_modules/@jest/reporters/build/getSnapshotSummary.d.ts9
-rw-r--r--node_modules/@jest/reporters/build/getSnapshotSummary.js203
-rw-r--r--node_modules/@jest/reporters/build/getWatermarks.d.ts9
-rw-r--r--node_modules/@jest/reporters/build/getWatermarks.js47
-rw-r--r--node_modules/@jest/reporters/build/index.d.ts27
-rw-r--r--node_modules/@jest/reporters/build/index.js78
-rw-r--r--node_modules/@jest/reporters/build/types.d.ts75
-rw-r--r--node_modules/@jest/reporters/build/types.js1
-rw-r--r--node_modules/@jest/reporters/build/utils.d.ts18
-rw-r--r--node_modules/@jest/reporters/build/utils.js435
-rw-r--r--node_modules/@jest/reporters/package.json80
-rw-r--r--node_modules/@jest/source-map/LICENSE21
-rw-r--r--node_modules/@jest/source-map/build/getCallsite.d.ts9
-rw-r--r--node_modules/@jest/source-map/build/getCallsite.js108
-rw-r--r--node_modules/@jest/source-map/build/index.d.ts8
-rw-r--r--node_modules/@jest/source-map/build/index.js17
-rw-r--r--node_modules/@jest/source-map/build/types.d.ts7
-rw-r--r--node_modules/@jest/source-map/build/types.js1
-rw-r--r--node_modules/@jest/source-map/package.json34
-rw-r--r--node_modules/@jest/test-result/LICENSE21
-rw-r--r--node_modules/@jest/test-result/build/formatTestResults.d.ts8
-rw-r--r--node_modules/@jest/test-result/build/formatTestResults.js70
-rw-r--r--node_modules/@jest/test-result/build/helpers.d.ts12
-rw-r--r--node_modules/@jest/test-result/build/helpers.js188
-rw-r--r--node_modules/@jest/test-result/build/index.d.ts9
-rw-r--r--node_modules/@jest/test-result/build/index.js43
-rw-r--r--node_modules/@jest/test-result/build/types.d.ts171
-rw-r--r--node_modules/@jest/test-result/build/types.js1
-rw-r--r--node_modules/@jest/test-result/package.json32
-rw-r--r--node_modules/@jest/test-sequencer/LICENSE21
-rw-r--r--node_modules/@jest/test-sequencer/build/index.d.ts51
-rw-r--r--node_modules/@jest/test-sequencer/build/index.js237
-rw-r--r--node_modules/@jest/test-sequencer/package.json35
-rw-r--r--node_modules/@jest/transform/LICENSE21
-rw-r--r--node_modules/@jest/transform/build/ScriptTransformer.d.ts40
-rw-r--r--node_modules/@jest/transform/build/ScriptTransformer.js1115
-rw-r--r--node_modules/@jest/transform/build/enhanceUnexpectedTokenMessage.d.ts12
-rw-r--r--node_modules/@jest/transform/build/enhanceUnexpectedTokenMessage.js83
-rw-r--r--node_modules/@jest/transform/build/index.d.ts11
-rw-r--r--node_modules/@jest/transform/build/index.js41
-rw-r--r--node_modules/@jest/transform/build/runtimeErrorsAndWarnings.d.ts10
-rw-r--r--node_modules/@jest/transform/build/runtimeErrorsAndWarnings.js101
-rw-r--r--node_modules/@jest/transform/build/shouldInstrument.d.ts9
-rw-r--r--node_modules/@jest/transform/build/shouldInstrument.js207
-rw-r--r--node_modules/@jest/transform/build/types.d.ts75
-rw-r--r--node_modules/@jest/transform/build/types.js1
-rw-r--r--node_modules/@jest/transform/package.json53
-rw-r--r--node_modules/@jest/types/LICENSE21
-rw-r--r--node_modules/@jest/types/build/Circus.d.ts193
-rw-r--r--node_modules/@jest/types/build/Circus.js1
-rw-r--r--node_modules/@jest/types/build/Config.d.ts462
-rw-r--r--node_modules/@jest/types/build/Config.js1
-rw-r--r--node_modules/@jest/types/build/Global.d.ts95
-rw-r--r--node_modules/@jest/types/build/Global.js1
-rw-r--r--node_modules/@jest/types/build/TestResult.d.ts31
-rw-r--r--node_modules/@jest/types/build/TestResult.js1
-rw-r--r--node_modules/@jest/types/build/Transform.d.ts11
-rw-r--r--node_modules/@jest/types/build/Transform.js1
-rw-r--r--node_modules/@jest/types/build/index.d.ts12
-rw-r--r--node_modules/@jest/types/build/index.js1
-rw-r--r--node_modules/@jest/types/package.json37
204 files changed, 16399 insertions, 0 deletions
diff --git a/node_modules/@jest/console/LICENSE b/node_modules/@jest/console/LICENSE
new file mode 100644
index 0000000..b96dcb0
--- /dev/null
+++ b/node_modules/@jest/console/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) Facebook, Inc. and its affiliates.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/node_modules/@jest/console/build/BufferedConsole.d.ts b/node_modules/@jest/console/build/BufferedConsole.d.ts
new file mode 100644
index 0000000..9cc019e
--- /dev/null
+++ b/node_modules/@jest/console/build/BufferedConsole.d.ts
@@ -0,0 +1,37 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+/// <reference types="node" />
+import { Console } from 'console';
+import { InspectOptions } from 'util';
+import type { ConsoleBuffer, LogMessage, LogType } from './types';
+export default class BufferedConsole extends Console {
+ private _buffer;
+ private _counters;
+ private _timers;
+ private _groupDepth;
+ Console: typeof Console;
+ constructor();
+ static write(buffer: ConsoleBuffer, type: LogType, message: LogMessage, level?: number | null): ConsoleBuffer;
+ private _log;
+ assert(value: unknown, message?: string | Error): void;
+ count(label?: string): void;
+ countReset(label?: string): void;
+ debug(firstArg: unknown, ...rest: Array<unknown>): void;
+ dir(firstArg: unknown, options?: InspectOptions): void;
+ dirxml(firstArg: unknown, ...rest: Array<unknown>): void;
+ error(firstArg: unknown, ...rest: Array<unknown>): void;
+ group(title?: string, ...rest: Array<unknown>): void;
+ groupCollapsed(title?: string, ...rest: Array<unknown>): void;
+ groupEnd(): void;
+ info(firstArg: unknown, ...rest: Array<unknown>): void;
+ log(firstArg: unknown, ...rest: Array<unknown>): void;
+ time(label?: string): void;
+ timeEnd(label?: string): void;
+ timeLog(label?: string, ...data: Array<unknown>): void;
+ warn(firstArg: unknown, ...rest: Array<unknown>): void;
+ getBuffer(): ConsoleBuffer | undefined;
+}
diff --git a/node_modules/@jest/console/build/BufferedConsole.js b/node_modules/@jest/console/build/BufferedConsole.js
new file mode 100644
index 0000000..defe659
--- /dev/null
+++ b/node_modules/@jest/console/build/BufferedConsole.js
@@ -0,0 +1,258 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+
+function _assert() {
+ const data = _interopRequireDefault(require('assert'));
+
+ _assert = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _console() {
+ const data = require('console');
+
+ _console = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _util() {
+ const data = require('util');
+
+ _util = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+
+ _chalk = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestUtil() {
+ const data = require('jest-util');
+
+ _jestUtil = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+function _defineProperty(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+}
+
+class BufferedConsole extends _console().Console {
+ constructor() {
+ super({
+ write: message => {
+ BufferedConsole.write(this._buffer, 'log', message, null);
+ return true;
+ }
+ });
+
+ _defineProperty(this, '_buffer', []);
+
+ _defineProperty(this, '_counters', {});
+
+ _defineProperty(this, '_timers', {});
+
+ _defineProperty(this, '_groupDepth', 0);
+
+ _defineProperty(this, 'Console', _console().Console);
+ }
+
+ static write(buffer, type, message, level) {
+ const stackLevel = level != null ? level : 2;
+ const rawStack = new (_jestUtil().ErrorWithStack)(
+ undefined,
+ BufferedConsole.write
+ ).stack;
+ invariant(rawStack, 'always have a stack trace');
+ const origin = rawStack
+ .split('\n')
+ .slice(stackLevel)
+ .filter(Boolean)
+ .join('\n');
+ buffer.push({
+ message,
+ origin,
+ type
+ });
+ return buffer;
+ }
+
+ _log(type, message) {
+ BufferedConsole.write(
+ this._buffer,
+ type,
+ ' '.repeat(this._groupDepth) + message,
+ 3
+ );
+ }
+
+ assert(value, message) {
+ try {
+ (0, _assert().default)(value, message);
+ } catch (error) {
+ this._log('assert', error.toString());
+ }
+ }
+
+ count(label = 'default') {
+ if (!this._counters[label]) {
+ this._counters[label] = 0;
+ }
+
+ this._log(
+ 'count',
+ (0, _util().format)(`${label}: ${++this._counters[label]}`)
+ );
+ }
+
+ countReset(label = 'default') {
+ this._counters[label] = 0;
+ }
+
+ debug(firstArg, ...rest) {
+ this._log('debug', (0, _util().format)(firstArg, ...rest));
+ }
+
+ dir(firstArg, options = {}) {
+ const representation = (0, _util().inspect)(firstArg, options);
+
+ this._log('dir', (0, _util().formatWithOptions)(options, representation));
+ }
+
+ dirxml(firstArg, ...rest) {
+ this._log('dirxml', (0, _util().format)(firstArg, ...rest));
+ }
+
+ error(firstArg, ...rest) {
+ this._log('error', (0, _util().format)(firstArg, ...rest));
+ }
+
+ group(title, ...rest) {
+ this._groupDepth++;
+
+ if (title || rest.length > 0) {
+ this._log(
+ 'group',
+ _chalk().default.bold((0, _util().format)(title, ...rest))
+ );
+ }
+ }
+
+ groupCollapsed(title, ...rest) {
+ this._groupDepth++;
+
+ if (title || rest.length > 0) {
+ this._log(
+ 'groupCollapsed',
+ _chalk().default.bold((0, _util().format)(title, ...rest))
+ );
+ }
+ }
+
+ groupEnd() {
+ if (this._groupDepth > 0) {
+ this._groupDepth--;
+ }
+ }
+
+ info(firstArg, ...rest) {
+ this._log('info', (0, _util().format)(firstArg, ...rest));
+ }
+
+ log(firstArg, ...rest) {
+ this._log('log', (0, _util().format)(firstArg, ...rest));
+ }
+
+ time(label = 'default') {
+ if (this._timers[label]) {
+ return;
+ }
+
+ this._timers[label] = new Date();
+ }
+
+ timeEnd(label = 'default') {
+ const startTime = this._timers[label];
+
+ if (startTime) {
+ const endTime = new Date();
+ const time = endTime.getTime() - startTime.getTime();
+
+ this._log(
+ 'time',
+ (0, _util().format)(`${label}: ${(0, _jestUtil().formatTime)(time)}`)
+ );
+
+ delete this._timers[label];
+ }
+ }
+
+ timeLog(label = 'default', ...data) {
+ const startTime = this._timers[label];
+
+ if (startTime) {
+ const endTime = new Date();
+ const time = endTime.getTime() - startTime.getTime();
+
+ this._log(
+ 'time',
+ (0, _util().format)(
+ `${label}: ${(0, _jestUtil().formatTime)(time)}`,
+ ...data
+ )
+ );
+ }
+ }
+
+ warn(firstArg, ...rest) {
+ this._log('warn', (0, _util().format)(firstArg, ...rest));
+ }
+
+ getBuffer() {
+ return this._buffer.length ? this._buffer : undefined;
+ }
+}
+
+exports.default = BufferedConsole;
+
+function invariant(condition, message) {
+ if (!condition) {
+ throw new Error(message);
+ }
+}
diff --git a/node_modules/@jest/console/build/CustomConsole.d.ts b/node_modules/@jest/console/build/CustomConsole.d.ts
new file mode 100644
index 0000000..ebffa5d
--- /dev/null
+++ b/node_modules/@jest/console/build/CustomConsole.d.ts
@@ -0,0 +1,41 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+/// <reference types="node" />
+import { Console } from 'console';
+import { InspectOptions } from 'util';
+import type { LogMessage, LogType } from './types';
+declare type Formatter = (type: LogType, message: LogMessage) => string;
+export default class CustomConsole extends Console {
+ private _stdout;
+ private _stderr;
+ private _formatBuffer;
+ private _counters;
+ private _timers;
+ private _groupDepth;
+ Console: typeof Console;
+ constructor(stdout: NodeJS.WriteStream, stderr: NodeJS.WriteStream, formatBuffer?: Formatter);
+ private _log;
+ private _logError;
+ assert(value: unknown, message?: string | Error): asserts value;
+ count(label?: string): void;
+ countReset(label?: string): void;
+ debug(firstArg: unknown, ...args: Array<unknown>): void;
+ dir(firstArg: unknown, options?: InspectOptions): void;
+ dirxml(firstArg: unknown, ...args: Array<unknown>): void;
+ error(firstArg: unknown, ...args: Array<unknown>): void;
+ group(title?: string, ...args: Array<unknown>): void;
+ groupCollapsed(title?: string, ...args: Array<unknown>): void;
+ groupEnd(): void;
+ info(firstArg: unknown, ...args: Array<unknown>): void;
+ log(firstArg: unknown, ...args: Array<unknown>): void;
+ time(label?: string): void;
+ timeEnd(label?: string): void;
+ timeLog(label?: string, ...data: Array<unknown>): void;
+ warn(firstArg: unknown, ...args: Array<unknown>): void;
+ getBuffer(): undefined;
+}
+export {};
diff --git a/node_modules/@jest/console/build/CustomConsole.js b/node_modules/@jest/console/build/CustomConsole.js
new file mode 100644
index 0000000..25ab7be
--- /dev/null
+++ b/node_modules/@jest/console/build/CustomConsole.js
@@ -0,0 +1,240 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+
+function _assert() {
+ const data = _interopRequireDefault(require('assert'));
+
+ _assert = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _console() {
+ const data = require('console');
+
+ _console = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _util() {
+ const data = require('util');
+
+ _util = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+
+ _chalk = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestUtil() {
+ const data = require('jest-util');
+
+ _jestUtil = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+function _defineProperty(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+}
+
+class CustomConsole extends _console().Console {
+ constructor(stdout, stderr, formatBuffer = (_type, message) => message) {
+ super(stdout, stderr);
+
+ _defineProperty(this, '_stdout', void 0);
+
+ _defineProperty(this, '_stderr', void 0);
+
+ _defineProperty(this, '_formatBuffer', void 0);
+
+ _defineProperty(this, '_counters', {});
+
+ _defineProperty(this, '_timers', {});
+
+ _defineProperty(this, '_groupDepth', 0);
+
+ _defineProperty(this, 'Console', _console().Console);
+
+ this._stdout = stdout;
+ this._stderr = stderr;
+ this._formatBuffer = formatBuffer;
+ }
+
+ _log(type, message) {
+ (0, _jestUtil().clearLine)(this._stdout);
+ super.log(
+ this._formatBuffer(type, ' '.repeat(this._groupDepth) + message)
+ );
+ }
+
+ _logError(type, message) {
+ (0, _jestUtil().clearLine)(this._stderr);
+ super.error(
+ this._formatBuffer(type, ' '.repeat(this._groupDepth) + message)
+ );
+ }
+
+ assert(value, message) {
+ try {
+ (0, _assert().default)(value, message);
+ } catch (error) {
+ this._logError('assert', error.toString());
+ }
+ }
+
+ count(label = 'default') {
+ if (!this._counters[label]) {
+ this._counters[label] = 0;
+ }
+
+ this._log(
+ 'count',
+ (0, _util().format)(`${label}: ${++this._counters[label]}`)
+ );
+ }
+
+ countReset(label = 'default') {
+ this._counters[label] = 0;
+ }
+
+ debug(firstArg, ...args) {
+ this._log('debug', (0, _util().format)(firstArg, ...args));
+ }
+
+ dir(firstArg, options = {}) {
+ const representation = (0, _util().inspect)(firstArg, options);
+
+ this._log('dir', (0, _util().formatWithOptions)(options, representation));
+ }
+
+ dirxml(firstArg, ...args) {
+ this._log('dirxml', (0, _util().format)(firstArg, ...args));
+ }
+
+ error(firstArg, ...args) {
+ this._logError('error', (0, _util().format)(firstArg, ...args));
+ }
+
+ group(title, ...args) {
+ this._groupDepth++;
+
+ if (title || args.length > 0) {
+ this._log(
+ 'group',
+ _chalk().default.bold((0, _util().format)(title, ...args))
+ );
+ }
+ }
+
+ groupCollapsed(title, ...args) {
+ this._groupDepth++;
+
+ if (title || args.length > 0) {
+ this._log(
+ 'groupCollapsed',
+ _chalk().default.bold((0, _util().format)(title, ...args))
+ );
+ }
+ }
+
+ groupEnd() {
+ if (this._groupDepth > 0) {
+ this._groupDepth--;
+ }
+ }
+
+ info(firstArg, ...args) {
+ this._log('info', (0, _util().format)(firstArg, ...args));
+ }
+
+ log(firstArg, ...args) {
+ this._log('log', (0, _util().format)(firstArg, ...args));
+ }
+
+ time(label = 'default') {
+ if (this._timers[label]) {
+ return;
+ }
+
+ this._timers[label] = new Date();
+ }
+
+ timeEnd(label = 'default') {
+ const startTime = this._timers[label];
+
+ if (startTime) {
+ const endTime = new Date().getTime();
+ const time = endTime - startTime.getTime();
+
+ this._log(
+ 'time',
+ (0, _util().format)(`${label}: ${(0, _jestUtil().formatTime)(time)}`)
+ );
+
+ delete this._timers[label];
+ }
+ }
+
+ timeLog(label = 'default', ...data) {
+ const startTime = this._timers[label];
+
+ if (startTime) {
+ const endTime = new Date();
+ const time = endTime.getTime() - startTime.getTime();
+
+ this._log(
+ 'time',
+ (0, _util().format)(
+ `${label}: ${(0, _jestUtil().formatTime)(time)}`,
+ ...data
+ )
+ );
+ }
+ }
+
+ warn(firstArg, ...args) {
+ this._logError('warn', (0, _util().format)(firstArg, ...args));
+ }
+
+ getBuffer() {
+ return undefined;
+ }
+}
+
+exports.default = CustomConsole;
diff --git a/node_modules/@jest/console/build/NullConsole.d.ts b/node_modules/@jest/console/build/NullConsole.d.ts
new file mode 100644
index 0000000..d39fc1c
--- /dev/null
+++ b/node_modules/@jest/console/build/NullConsole.d.ts
@@ -0,0 +1,23 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import CustomConsole from './CustomConsole';
+export default class NullConsole extends CustomConsole {
+ assert(): void;
+ debug(): void;
+ dir(): void;
+ error(): void;
+ info(): void;
+ log(): void;
+ time(): void;
+ timeEnd(): void;
+ timeLog(): void;
+ trace(): void;
+ warn(): void;
+ group(): void;
+ groupCollapsed(): void;
+ groupEnd(): void;
+}
diff --git a/node_modules/@jest/console/build/NullConsole.js b/node_modules/@jest/console/build/NullConsole.js
new file mode 100644
index 0000000..745e35f
--- /dev/null
+++ b/node_modules/@jest/console/build/NullConsole.js
@@ -0,0 +1,50 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+
+var _CustomConsole = _interopRequireDefault(require('./CustomConsole'));
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+class NullConsole extends _CustomConsole.default {
+ assert() {}
+
+ debug() {}
+
+ dir() {}
+
+ error() {}
+
+ info() {}
+
+ log() {}
+
+ time() {}
+
+ timeEnd() {}
+
+ timeLog() {}
+
+ trace() {}
+
+ warn() {}
+
+ group() {}
+
+ groupCollapsed() {}
+
+ groupEnd() {}
+}
+
+exports.default = NullConsole;
diff --git a/node_modules/@jest/console/build/getConsoleOutput.d.ts b/node_modules/@jest/console/build/getConsoleOutput.d.ts
new file mode 100644
index 0000000..a47550d
--- /dev/null
+++ b/node_modules/@jest/console/build/getConsoleOutput.d.ts
@@ -0,0 +1,10 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import type { Config } from '@jest/types';
+import { StackTraceConfig } from 'jest-message-util';
+import type { ConsoleBuffer } from './types';
+export default function getConsoleOutput(buffer: ConsoleBuffer, config: StackTraceConfig, globalConfig: Config.GlobalConfig): string;
diff --git a/node_modules/@jest/console/build/getConsoleOutput.js b/node_modules/@jest/console/build/getConsoleOutput.js
new file mode 100644
index 0000000..18eb354
--- /dev/null
+++ b/node_modules/@jest/console/build/getConsoleOutput.js
@@ -0,0 +1,101 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = getConsoleOutput;
+
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+
+ _chalk = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestMessageUtil() {
+ const data = require('jest-message-util');
+
+ _jestMessageUtil = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+function getConsoleOutput(buffer, config, globalConfig) {
+ const TITLE_INDENT = globalConfig.verbose ? ' ' : ' ';
+ const CONSOLE_INDENT = TITLE_INDENT + ' ';
+ const logEntries = buffer.reduce((output, {type, message, origin}) => {
+ message = message
+ .split(/\n/)
+ .map(line => CONSOLE_INDENT + line)
+ .join('\n');
+ let typeMessage = 'console.' + type;
+ let noStackTrace = true;
+ let noCodeFrame = true;
+
+ if (type === 'warn') {
+ var _globalConfig$noStack;
+
+ message = _chalk().default.yellow(message);
+ typeMessage = _chalk().default.yellow(typeMessage);
+ noStackTrace =
+ (_globalConfig$noStack =
+ globalConfig === null || globalConfig === void 0
+ ? void 0
+ : globalConfig.noStackTrace) !== null &&
+ _globalConfig$noStack !== void 0
+ ? _globalConfig$noStack
+ : false;
+ noCodeFrame = false;
+ } else if (type === 'error') {
+ var _globalConfig$noStack2;
+
+ message = _chalk().default.red(message);
+ typeMessage = _chalk().default.red(typeMessage);
+ noStackTrace =
+ (_globalConfig$noStack2 =
+ globalConfig === null || globalConfig === void 0
+ ? void 0
+ : globalConfig.noStackTrace) !== null &&
+ _globalConfig$noStack2 !== void 0
+ ? _globalConfig$noStack2
+ : false;
+ noCodeFrame = false;
+ }
+
+ const options = {
+ noCodeFrame,
+ noStackTrace
+ };
+ const formattedStackTrace = (0, _jestMessageUtil().formatStackTrace)(
+ origin,
+ config,
+ options
+ );
+ return (
+ output +
+ TITLE_INDENT +
+ _chalk().default.dim(typeMessage) +
+ '\n' +
+ message.trimRight() +
+ '\n' +
+ _chalk().default.dim(formattedStackTrace.trimRight()) +
+ '\n\n'
+ );
+ }, '');
+ return logEntries.trimRight() + '\n';
+}
diff --git a/node_modules/@jest/console/build/index.d.ts b/node_modules/@jest/console/build/index.d.ts
new file mode 100644
index 0000000..e5e568c
--- /dev/null
+++ b/node_modules/@jest/console/build/index.d.ts
@@ -0,0 +1,11 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+export { default as BufferedConsole } from './BufferedConsole';
+export { default as CustomConsole } from './CustomConsole';
+export { default as NullConsole } from './NullConsole';
+export { default as getConsoleOutput } from './getConsoleOutput';
+export type { ConsoleBuffer, LogMessage, LogType, LogEntry } from './types';
diff --git a/node_modules/@jest/console/build/index.js b/node_modules/@jest/console/build/index.js
new file mode 100644
index 0000000..88f6cb4
--- /dev/null
+++ b/node_modules/@jest/console/build/index.js
@@ -0,0 +1,41 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+Object.defineProperty(exports, 'BufferedConsole', {
+ enumerable: true,
+ get: function () {
+ return _BufferedConsole.default;
+ }
+});
+Object.defineProperty(exports, 'CustomConsole', {
+ enumerable: true,
+ get: function () {
+ return _CustomConsole.default;
+ }
+});
+Object.defineProperty(exports, 'NullConsole', {
+ enumerable: true,
+ get: function () {
+ return _NullConsole.default;
+ }
+});
+Object.defineProperty(exports, 'getConsoleOutput', {
+ enumerable: true,
+ get: function () {
+ return _getConsoleOutput.default;
+ }
+});
+
+var _BufferedConsole = _interopRequireDefault(require('./BufferedConsole'));
+
+var _CustomConsole = _interopRequireDefault(require('./CustomConsole'));
+
+var _NullConsole = _interopRequireDefault(require('./NullConsole'));
+
+var _getConsoleOutput = _interopRequireDefault(require('./getConsoleOutput'));
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
diff --git a/node_modules/@jest/console/build/types.d.ts b/node_modules/@jest/console/build/types.d.ts
new file mode 100644
index 0000000..8490c67
--- /dev/null
+++ b/node_modules/@jest/console/build/types.d.ts
@@ -0,0 +1,20 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+export declare type LogMessage = string;
+export declare type LogEntry = {
+ message: LogMessage;
+ origin: string;
+ type: LogType;
+};
+export declare type LogCounters = {
+ [label: string]: number;
+};
+export declare type LogTimers = {
+ [label: string]: Date;
+};
+export declare type LogType = 'assert' | 'count' | 'debug' | 'dir' | 'dirxml' | 'error' | 'group' | 'groupCollapsed' | 'info' | 'log' | 'time' | 'warn';
+export declare type ConsoleBuffer = Array<LogEntry>;
diff --git a/node_modules/@jest/console/build/types.js b/node_modules/@jest/console/build/types.js
new file mode 100644
index 0000000..ad9a93a
--- /dev/null
+++ b/node_modules/@jest/console/build/types.js
@@ -0,0 +1 @@
+'use strict';
diff --git a/node_modules/@jest/console/package.json b/node_modules/@jest/console/package.json
new file mode 100644
index 0000000..221ca1e
--- /dev/null
+++ b/node_modules/@jest/console/package.json
@@ -0,0 +1,38 @@
+{
+ "name": "@jest/console",
+ "version": "27.5.1",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/facebook/jest.git",
+ "directory": "packages/jest-console"
+ },
+ "license": "MIT",
+ "main": "./build/index.js",
+ "types": "./build/index.d.ts",
+ "exports": {
+ ".": {
+ "types": "./build/index.d.ts",
+ "default": "./build/index.js"
+ },
+ "./package.json": "./package.json"
+ },
+ "dependencies": {
+ "@jest/types": "^27.5.1",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "jest-message-util": "^27.5.1",
+ "jest-util": "^27.5.1",
+ "slash": "^3.0.0"
+ },
+ "devDependencies": {
+ "@jest/test-utils": "^27.5.1",
+ "@types/node": "*"
+ },
+ "engines": {
+ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ },
+ "publishConfig": {
+ "access": "public"
+ },
+ "gitHead": "67c1aa20c5fec31366d733e901fee2b981cb1850"
+}
diff --git a/node_modules/@jest/core/LICENSE b/node_modules/@jest/core/LICENSE
new file mode 100644
index 0000000..b96dcb0
--- /dev/null
+++ b/node_modules/@jest/core/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) Facebook, Inc. and its affiliates.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/node_modules/@jest/core/README.md b/node_modules/@jest/core/README.md
new file mode 100644
index 0000000..e5852b6
--- /dev/null
+++ b/node_modules/@jest/core/README.md
@@ -0,0 +1,3 @@
+# @jest/core
+
+Jest is currently working on providing a programmatic API. This is under development, and usage of this package directly is currently not supported.
diff --git a/node_modules/@jest/core/build/FailedTestsCache.d.ts b/node_modules/@jest/core/build/FailedTestsCache.d.ts
new file mode 100644
index 0000000..565af37
--- /dev/null
+++ b/node_modules/@jest/core/build/FailedTestsCache.d.ts
@@ -0,0 +1,12 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import type { Test, TestResult } from '@jest/test-result';
+export default class FailedTestsCache {
+ private _enabledTestsMap?;
+ filterTests(tests: Array<Test>): Array<Test>;
+ setTestResults(testResults: Array<TestResult>): void;
+}
diff --git a/node_modules/@jest/core/build/FailedTestsCache.js b/node_modules/@jest/core/build/FailedTestsCache.js
new file mode 100644
index 0000000..389e8b8
--- /dev/null
+++ b/node_modules/@jest/core/build/FailedTestsCache.js
@@ -0,0 +1,59 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+
+function _defineProperty(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+}
+
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+class FailedTestsCache {
+ constructor() {
+ _defineProperty(this, '_enabledTestsMap', void 0);
+ }
+
+ filterTests(tests) {
+ const enabledTestsMap = this._enabledTestsMap;
+
+ if (!enabledTestsMap) {
+ return tests;
+ }
+
+ return tests.filter(testResult => enabledTestsMap[testResult.path]);
+ }
+
+ setTestResults(testResults) {
+ this._enabledTestsMap = (testResults || [])
+ .filter(testResult => testResult.numFailingTests)
+ .reduce((suiteMap, testResult) => {
+ suiteMap[testResult.testFilePath] = testResult.testResults
+ .filter(test => test.status === 'failed')
+ .reduce((testMap, test) => {
+ testMap[test.fullName] = true;
+ return testMap;
+ }, {});
+ return suiteMap;
+ }, {});
+ this._enabledTestsMap = Object.freeze(this._enabledTestsMap);
+ }
+}
+
+exports.default = FailedTestsCache;
diff --git a/node_modules/@jest/core/build/FailedTestsInteractiveMode.d.ts b/node_modules/@jest/core/build/FailedTestsInteractiveMode.d.ts
new file mode 100644
index 0000000..c543c69
--- /dev/null
+++ b/node_modules/@jest/core/build/FailedTestsInteractiveMode.d.ts
@@ -0,0 +1,31 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+/// <reference types="node" />
+import type { AggregatedResult, AssertionLocation } from '@jest/test-result';
+declare type RunnerUpdateFunction = (failure?: AssertionLocation) => void;
+export default class FailedTestsInteractiveMode {
+ private _pipe;
+ private _isActive;
+ private _countPaths;
+ private _skippedNum;
+ private _testAssertions;
+ private _updateTestRunnerConfig?;
+ constructor(_pipe: NodeJS.WritableStream);
+ isActive(): boolean;
+ put(key: string): void;
+ run(failedTestAssertions: Array<AssertionLocation>, updateConfig: RunnerUpdateFunction): void;
+ updateWithResults(results: AggregatedResult): void;
+ private _clearTestSummary;
+ private _drawUIDone;
+ private _drawUIDoneWithSkipped;
+ private _drawUIProgress;
+ private _drawUIOverlay;
+ private _run;
+ private abort;
+ private restart;
+}
+export {};
diff --git a/node_modules/@jest/core/build/FailedTestsInteractiveMode.js b/node_modules/@jest/core/build/FailedTestsInteractiveMode.js
new file mode 100644
index 0000000..e9e6534
--- /dev/null
+++ b/node_modules/@jest/core/build/FailedTestsInteractiveMode.js
@@ -0,0 +1,262 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+
+function _ansiEscapes() {
+ const data = _interopRequireDefault(require('ansi-escapes'));
+
+ _ansiEscapes = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+
+ _chalk = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestUtil() {
+ const data = require('jest-util');
+
+ _jestUtil = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestWatcher() {
+ const data = require('jest-watcher');
+
+ _jestWatcher = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+function _defineProperty(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+}
+
+const {ARROW, CLEAR} = _jestUtil().specialChars;
+
+function describeKey(key, description) {
+ return `${_chalk().default.dim(
+ ARROW + 'Press'
+ )} ${key} ${_chalk().default.dim(description)}`;
+}
+
+const TestProgressLabel = _chalk().default.bold('Interactive Test Progress');
+
+class FailedTestsInteractiveMode {
+ constructor(_pipe) {
+ _defineProperty(this, '_isActive', false);
+
+ _defineProperty(this, '_countPaths', 0);
+
+ _defineProperty(this, '_skippedNum', 0);
+
+ _defineProperty(this, '_testAssertions', []);
+
+ _defineProperty(this, '_updateTestRunnerConfig', void 0);
+
+ this._pipe = _pipe;
+ }
+
+ isActive() {
+ return this._isActive;
+ }
+
+ put(key) {
+ switch (key) {
+ case 's':
+ if (this._skippedNum === this._testAssertions.length) {
+ break;
+ }
+
+ this._skippedNum += 1; // move skipped test to the end
+
+ this._testAssertions.push(this._testAssertions.shift());
+
+ if (this._testAssertions.length - this._skippedNum > 0) {
+ this._run();
+ } else {
+ this._drawUIDoneWithSkipped();
+ }
+
+ break;
+
+ case 'q':
+ case _jestWatcher().KEYS.ESCAPE:
+ this.abort();
+ break;
+
+ case 'r':
+ this.restart();
+ break;
+
+ case _jestWatcher().KEYS.ENTER:
+ if (this._testAssertions.length === 0) {
+ this.abort();
+ } else {
+ this._run();
+ }
+
+ break;
+
+ default:
+ }
+ }
+
+ run(failedTestAssertions, updateConfig) {
+ if (failedTestAssertions.length === 0) return;
+ this._testAssertions = [...failedTestAssertions];
+ this._countPaths = this._testAssertions.length;
+ this._updateTestRunnerConfig = updateConfig;
+ this._isActive = true;
+
+ this._run();
+ }
+
+ updateWithResults(results) {
+ if (!results.snapshot.failure && results.numFailedTests > 0) {
+ return this._drawUIOverlay();
+ }
+
+ this._testAssertions.shift();
+
+ if (this._testAssertions.length === 0) {
+ return this._drawUIOverlay();
+ } // Go to the next test
+
+ return this._run();
+ }
+
+ _clearTestSummary() {
+ this._pipe.write(_ansiEscapes().default.cursorUp(6));
+
+ this._pipe.write(_ansiEscapes().default.eraseDown);
+ }
+
+ _drawUIDone() {
+ this._pipe.write(CLEAR);
+
+ const messages = [
+ _chalk().default.bold('Watch Usage'),
+ describeKey('Enter', 'to return to watch mode.')
+ ];
+
+ this._pipe.write(messages.join('\n') + '\n');
+ }
+
+ _drawUIDoneWithSkipped() {
+ this._pipe.write(CLEAR);
+
+ let stats = `${(0, _jestUtil().pluralize)(
+ 'test',
+ this._countPaths
+ )} reviewed`;
+
+ if (this._skippedNum > 0) {
+ const skippedText = _chalk().default.bold.yellow(
+ (0, _jestUtil().pluralize)('test', this._skippedNum) + ' skipped'
+ );
+
+ stats = `${stats}, ${skippedText}`;
+ }
+
+ const message = [
+ TestProgressLabel,
+ `${ARROW}${stats}`,
+ '\n',
+ _chalk().default.bold('Watch Usage'),
+ describeKey('r', 'to restart Interactive Mode.'),
+ describeKey('q', 'to quit Interactive Mode.'),
+ describeKey('Enter', 'to return to watch mode.')
+ ];
+
+ this._pipe.write(`\n${message.join('\n')}`);
+ }
+
+ _drawUIProgress() {
+ this._clearTestSummary();
+
+ const numPass = this._countPaths - this._testAssertions.length;
+ const numRemaining = this._countPaths - numPass - this._skippedNum;
+ let stats = `${(0, _jestUtil().pluralize)('test', numRemaining)} remaining`;
+
+ if (this._skippedNum > 0) {
+ const skippedText = _chalk().default.bold.yellow(
+ (0, _jestUtil().pluralize)('test', this._skippedNum) + ' skipped'
+ );
+
+ stats = `${stats}, ${skippedText}`;
+ }
+
+ const message = [
+ TestProgressLabel,
+ `${ARROW}${stats}`,
+ '\n',
+ _chalk().default.bold('Watch Usage'),
+ describeKey('s', 'to skip the current test.'),
+ describeKey('q', 'to quit Interactive Mode.'),
+ describeKey('Enter', 'to return to watch mode.')
+ ];
+
+ this._pipe.write(`\n${message.join('\n')}`);
+ }
+
+ _drawUIOverlay() {
+ if (this._testAssertions.length === 0) return this._drawUIDone();
+ return this._drawUIProgress();
+ }
+
+ _run() {
+ if (this._updateTestRunnerConfig) {
+ this._updateTestRunnerConfig(this._testAssertions[0]);
+ }
+ }
+
+ abort() {
+ this._isActive = false;
+ this._skippedNum = 0;
+
+ if (this._updateTestRunnerConfig) {
+ this._updateTestRunnerConfig();
+ }
+ }
+
+ restart() {
+ this._skippedNum = 0;
+ this._countPaths = this._testAssertions.length;
+
+ this._run();
+ }
+}
+
+exports.default = FailedTestsInteractiveMode;
diff --git a/node_modules/@jest/core/build/ReporterDispatcher.d.ts b/node_modules/@jest/core/build/ReporterDispatcher.d.ts
new file mode 100644
index 0000000..ed34a0e
--- /dev/null
+++ b/node_modules/@jest/core/build/ReporterDispatcher.d.ts
@@ -0,0 +1,22 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import type { Reporter, ReporterOnStartOptions } from '@jest/reporters';
+import type { AggregatedResult, Test, TestCaseResult, TestResult } from '@jest/test-result';
+import type { Context } from 'jest-runtime';
+export default class ReporterDispatcher {
+ private _reporters;
+ constructor();
+ register(reporter: Reporter): void;
+ unregister(ReporterClass: Function): void;
+ onTestFileResult(test: Test, testResult: TestResult, results: AggregatedResult): Promise<void>;
+ onTestFileStart(test: Test): Promise<void>;
+ onRunStart(results: AggregatedResult, options: ReporterOnStartOptions): Promise<void>;
+ onTestCaseResult(test: Test, testCaseResult: TestCaseResult): Promise<void>;
+ onRunComplete(contexts: Set<Context>, results: AggregatedResult): Promise<void>;
+ getErrors(): Array<Error>;
+ hasErrors(): boolean;
+}
diff --git a/node_modules/@jest/core/build/ReporterDispatcher.js b/node_modules/@jest/core/build/ReporterDispatcher.js
new file mode 100644
index 0000000..efd6af0
--- /dev/null
+++ b/node_modules/@jest/core/build/ReporterDispatcher.js
@@ -0,0 +1,104 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+
+function _defineProperty(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+}
+
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* eslint-disable local/ban-types-eventually */
+class ReporterDispatcher {
+ constructor() {
+ _defineProperty(this, '_reporters', void 0);
+
+ this._reporters = [];
+ }
+
+ register(reporter) {
+ this._reporters.push(reporter);
+ }
+
+ unregister(ReporterClass) {
+ this._reporters = this._reporters.filter(
+ reporter => !(reporter instanceof ReporterClass)
+ );
+ }
+
+ async onTestFileResult(test, testResult, results) {
+ for (const reporter of this._reporters) {
+ if (reporter.onTestFileResult) {
+ await reporter.onTestFileResult(test, testResult, results);
+ } else if (reporter.onTestResult) {
+ await reporter.onTestResult(test, testResult, results);
+ }
+ } // Release memory if unused later.
+
+ testResult.coverage = undefined;
+ testResult.console = undefined;
+ }
+
+ async onTestFileStart(test) {
+ for (const reporter of this._reporters) {
+ if (reporter.onTestFileStart) {
+ await reporter.onTestFileStart(test);
+ } else if (reporter.onTestStart) {
+ await reporter.onTestStart(test);
+ }
+ }
+ }
+
+ async onRunStart(results, options) {
+ for (const reporter of this._reporters) {
+ reporter.onRunStart && (await reporter.onRunStart(results, options));
+ }
+ }
+
+ async onTestCaseResult(test, testCaseResult) {
+ for (const reporter of this._reporters) {
+ if (reporter.onTestCaseResult) {
+ await reporter.onTestCaseResult(test, testCaseResult);
+ }
+ }
+ }
+
+ async onRunComplete(contexts, results) {
+ for (const reporter of this._reporters) {
+ if (reporter.onRunComplete) {
+ await reporter.onRunComplete(contexts, results);
+ }
+ }
+ } // Return a list of last errors for every reporter
+
+ getErrors() {
+ return this._reporters.reduce((list, reporter) => {
+ const error = reporter.getLastError && reporter.getLastError();
+ return error ? list.concat(error) : list;
+ }, []);
+ }
+
+ hasErrors() {
+ return this.getErrors().length !== 0;
+ }
+}
+
+exports.default = ReporterDispatcher;
diff --git a/node_modules/@jest/core/build/SearchSource.d.ts b/node_modules/@jest/core/build/SearchSource.d.ts
new file mode 100644
index 0000000..43c8e82
--- /dev/null
+++ b/node_modules/@jest/core/build/SearchSource.d.ts
@@ -0,0 +1,46 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import type { Test } from '@jest/test-result';
+import type { Config } from '@jest/types';
+import type { ChangedFiles } from 'jest-changed-files';
+import type { Context } from 'jest-runtime';
+import type { Filter, Stats } from './types';
+export declare type SearchResult = {
+ noSCM?: boolean;
+ stats?: Stats;
+ collectCoverageFrom?: Set<string>;
+ tests: Array<Test>;
+ total?: number;
+};
+export declare type TestSelectionConfig = {
+ input?: string;
+ findRelatedTests?: boolean;
+ onlyChanged?: boolean;
+ paths?: Array<Config.Path>;
+ shouldTreatInputAsPattern?: boolean;
+ testPathPattern?: string;
+ watch?: boolean;
+};
+export default class SearchSource {
+ private _context;
+ private _dependencyResolver;
+ private _testPathCases;
+ constructor(context: Context);
+ private _getOrBuildDependencyResolver;
+ private _filterTestPathsWithStats;
+ private _getAllTestPaths;
+ isTestFilePath(path: Config.Path): boolean;
+ findMatchingTests(testPathPattern?: string): SearchResult;
+ findRelatedTests(allPaths: Set<Config.Path>, collectCoverage: boolean): Promise<SearchResult>;
+ findTestsByPaths(paths: Array<Config.Path>): SearchResult;
+ findRelatedTestsFromPattern(paths: Array<Config.Path>, collectCoverage: boolean): Promise<SearchResult>;
+ findTestRelatedToChangedFiles(changedFilesInfo: ChangedFiles, collectCoverage: boolean): Promise<SearchResult>;
+ private _getTestPaths;
+ filterPathsWin32(paths: Array<string>): Array<string>;
+ getTestPaths(globalConfig: Config.GlobalConfig, changedFiles: ChangedFiles | undefined, filter?: Filter): Promise<SearchResult>;
+ findRelatedSourcesFromTestsInChangedFiles(changedFilesInfo: ChangedFiles): Promise<Array<string>>;
+}
diff --git a/node_modules/@jest/core/build/SearchSource.js b/node_modules/@jest/core/build/SearchSource.js
new file mode 100644
index 0000000..927f59d
--- /dev/null
+++ b/node_modules/@jest/core/build/SearchSource.js
@@ -0,0 +1,490 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+
+function os() {
+ const data = _interopRequireWildcard(require('os'));
+
+ os = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function path() {
+ const data = _interopRequireWildcard(require('path'));
+
+ path = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _micromatch() {
+ const data = _interopRequireDefault(require('micromatch'));
+
+ _micromatch = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestConfig() {
+ const data = require('jest-config');
+
+ _jestConfig = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestRegexUtil() {
+ const data = require('jest-regex-util');
+
+ _jestRegexUtil = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestResolveDependencies() {
+ const data = require('jest-resolve-dependencies');
+
+ _jestResolveDependencies = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestSnapshot() {
+ const data = require('jest-snapshot');
+
+ _jestSnapshot = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestUtil() {
+ const data = require('jest-util');
+
+ _jestUtil = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+function _getRequireWildcardCache(nodeInterop) {
+ if (typeof WeakMap !== 'function') return null;
+ var cacheBabelInterop = new WeakMap();
+ var cacheNodeInterop = new WeakMap();
+ return (_getRequireWildcardCache = function (nodeInterop) {
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
+ })(nodeInterop);
+}
+
+function _interopRequireWildcard(obj, nodeInterop) {
+ if (!nodeInterop && obj && obj.__esModule) {
+ return obj;
+ }
+ if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) {
+ return {default: obj};
+ }
+ var cache = _getRequireWildcardCache(nodeInterop);
+ if (cache && cache.has(obj)) {
+ return cache.get(obj);
+ }
+ var newObj = {};
+ var hasPropertyDescriptor =
+ Object.defineProperty && Object.getOwnPropertyDescriptor;
+ for (var key in obj) {
+ if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) {
+ var desc = hasPropertyDescriptor
+ ? Object.getOwnPropertyDescriptor(obj, key)
+ : null;
+ if (desc && (desc.get || desc.set)) {
+ Object.defineProperty(newObj, key, desc);
+ } else {
+ newObj[key] = obj[key];
+ }
+ }
+ }
+ newObj.default = obj;
+ if (cache) {
+ cache.set(obj, newObj);
+ }
+ return newObj;
+}
+
+function _defineProperty(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+}
+
+const regexToMatcher = testRegex => {
+ const regexes = testRegex.map(testRegex => new RegExp(testRegex));
+ return path =>
+ regexes.some(regex => {
+ const result = regex.test(path); // prevent stateful regexes from breaking, just in case
+
+ regex.lastIndex = 0;
+ return result;
+ });
+};
+
+const toTests = (context, tests) =>
+ tests.map(path => ({
+ context,
+ duration: undefined,
+ path
+ }));
+
+const hasSCM = changedFilesInfo => {
+ const {repos} = changedFilesInfo; // no SCM (git/hg/...) is found in any of the roots.
+
+ const noSCM = Object.values(repos).every(scm => scm.size === 0);
+ return !noSCM;
+};
+
+class SearchSource {
+ constructor(context) {
+ _defineProperty(this, '_context', void 0);
+
+ _defineProperty(this, '_dependencyResolver', void 0);
+
+ _defineProperty(this, '_testPathCases', []);
+
+ const {config} = context;
+ this._context = context;
+ this._dependencyResolver = null;
+ const rootPattern = new RegExp(
+ config.roots
+ .map(dir => (0, _jestRegexUtil().escapePathForRegex)(dir + path().sep))
+ .join('|')
+ );
+
+ this._testPathCases.push({
+ isMatch: path => rootPattern.test(path),
+ stat: 'roots'
+ });
+
+ if (config.testMatch.length) {
+ this._testPathCases.push({
+ isMatch: (0, _jestUtil().globsToMatcher)(config.testMatch),
+ stat: 'testMatch'
+ });
+ }
+
+ if (config.testPathIgnorePatterns.length) {
+ const testIgnorePatternsRegex = new RegExp(
+ config.testPathIgnorePatterns.join('|')
+ );
+
+ this._testPathCases.push({
+ isMatch: path => !testIgnorePatternsRegex.test(path),
+ stat: 'testPathIgnorePatterns'
+ });
+ }
+
+ if (config.testRegex.length) {
+ this._testPathCases.push({
+ isMatch: regexToMatcher(config.testRegex),
+ stat: 'testRegex'
+ });
+ }
+ }
+
+ async _getOrBuildDependencyResolver() {
+ if (!this._dependencyResolver) {
+ this._dependencyResolver =
+ new (_jestResolveDependencies().DependencyResolver)(
+ this._context.resolver,
+ this._context.hasteFS,
+ await (0, _jestSnapshot().buildSnapshotResolver)(this._context.config)
+ );
+ }
+
+ return this._dependencyResolver;
+ }
+
+ _filterTestPathsWithStats(allPaths, testPathPattern) {
+ const data = {
+ stats: {
+ roots: 0,
+ testMatch: 0,
+ testPathIgnorePatterns: 0,
+ testRegex: 0
+ },
+ tests: [],
+ total: allPaths.length
+ };
+ const testCases = Array.from(this._testPathCases); // clone
+
+ if (testPathPattern) {
+ const regex = (0, _jestUtil().testPathPatternToRegExp)(testPathPattern);
+ testCases.push({
+ isMatch: path => regex.test(path),
+ stat: 'testPathPattern'
+ });
+ data.stats.testPathPattern = 0;
+ }
+
+ data.tests = allPaths.filter(test => {
+ let filterResult = true;
+
+ for (const {isMatch, stat} of testCases) {
+ if (isMatch(test.path)) {
+ data.stats[stat]++;
+ } else {
+ filterResult = false;
+ }
+ }
+
+ return filterResult;
+ });
+ return data;
+ }
+
+ _getAllTestPaths(testPathPattern) {
+ return this._filterTestPathsWithStats(
+ toTests(this._context, this._context.hasteFS.getAllFiles()),
+ testPathPattern
+ );
+ }
+
+ isTestFilePath(path) {
+ return this._testPathCases.every(testCase => testCase.isMatch(path));
+ }
+
+ findMatchingTests(testPathPattern) {
+ return this._getAllTestPaths(testPathPattern);
+ }
+
+ async findRelatedTests(allPaths, collectCoverage) {
+ const dependencyResolver = await this._getOrBuildDependencyResolver();
+
+ if (!collectCoverage) {
+ return {
+ tests: toTests(
+ this._context,
+ dependencyResolver.resolveInverse(
+ allPaths,
+ this.isTestFilePath.bind(this),
+ {
+ skipNodeResolution: this._context.config.skipNodeResolution
+ }
+ )
+ )
+ };
+ }
+
+ const testModulesMap = dependencyResolver.resolveInverseModuleMap(
+ allPaths,
+ this.isTestFilePath.bind(this),
+ {
+ skipNodeResolution: this._context.config.skipNodeResolution
+ }
+ );
+ const allPathsAbsolute = Array.from(allPaths).map(p => path().resolve(p));
+ const collectCoverageFrom = new Set();
+ testModulesMap.forEach(testModule => {
+ if (!testModule.dependencies) {
+ return;
+ }
+
+ testModule.dependencies.forEach(p => {
+ if (!allPathsAbsolute.includes(p)) {
+ return;
+ }
+
+ const filename = (0, _jestConfig().replaceRootDirInPath)(
+ this._context.config.rootDir,
+ p
+ );
+ collectCoverageFrom.add(
+ path().isAbsolute(filename)
+ ? path().relative(this._context.config.rootDir, filename)
+ : filename
+ );
+ });
+ });
+ return {
+ collectCoverageFrom,
+ tests: toTests(
+ this._context,
+ testModulesMap.map(testModule => testModule.file)
+ )
+ };
+ }
+
+ findTestsByPaths(paths) {
+ return {
+ tests: toTests(
+ this._context,
+ paths
+ .map(p => path().resolve(this._context.config.cwd, p))
+ .filter(this.isTestFilePath.bind(this))
+ )
+ };
+ }
+
+ async findRelatedTestsFromPattern(paths, collectCoverage) {
+ if (Array.isArray(paths) && paths.length) {
+ const resolvedPaths = paths.map(p =>
+ path().resolve(this._context.config.cwd, p)
+ );
+ return this.findRelatedTests(new Set(resolvedPaths), collectCoverage);
+ }
+
+ return {
+ tests: []
+ };
+ }
+
+ async findTestRelatedToChangedFiles(changedFilesInfo, collectCoverage) {
+ if (!hasSCM(changedFilesInfo)) {
+ return {
+ noSCM: true,
+ tests: []
+ };
+ }
+
+ const {changedFiles} = changedFilesInfo;
+ return this.findRelatedTests(changedFiles, collectCoverage);
+ }
+
+ async _getTestPaths(globalConfig, changedFiles) {
+ if (globalConfig.onlyChanged) {
+ if (!changedFiles) {
+ throw new Error('Changed files must be set when running with -o.');
+ }
+
+ return this.findTestRelatedToChangedFiles(
+ changedFiles,
+ globalConfig.collectCoverage
+ );
+ }
+
+ let paths = globalConfig.nonFlagArgs;
+
+ if (globalConfig.findRelatedTests && 'win32' === os().platform()) {
+ paths = this.filterPathsWin32(paths);
+ }
+
+ if (globalConfig.runTestsByPath && paths && paths.length) {
+ return this.findTestsByPaths(paths);
+ } else if (globalConfig.findRelatedTests && paths && paths.length) {
+ return this.findRelatedTestsFromPattern(
+ paths,
+ globalConfig.collectCoverage
+ );
+ } else if (globalConfig.testPathPattern != null) {
+ return this.findMatchingTests(globalConfig.testPathPattern);
+ } else {
+ return {
+ tests: []
+ };
+ }
+ }
+
+ filterPathsWin32(paths) {
+ const allFiles = this._context.hasteFS.getAllFiles();
+
+ const options = {
+ nocase: true,
+ windows: false
+ };
+
+ function normalizePosix(filePath) {
+ return filePath.replace(/\\/g, '/');
+ }
+
+ paths = paths
+ .map(p => {
+ // micromatch works with forward slashes: https://github.com/micromatch/micromatch#backslashes
+ const normalizedPath = normalizePosix(
+ path().resolve(this._context.config.cwd, p)
+ );
+ const match = (0, _micromatch().default)(
+ allFiles.map(normalizePosix),
+ normalizedPath,
+ options
+ );
+ return match[0];
+ })
+ .filter(Boolean)
+ .map(p => path().resolve(p));
+ return paths;
+ }
+
+ async getTestPaths(globalConfig, changedFiles, filter) {
+ const searchResult = await this._getTestPaths(globalConfig, changedFiles);
+ const filterPath = globalConfig.filter;
+
+ if (filter) {
+ const tests = searchResult.tests;
+ const filterResult = await filter(tests.map(test => test.path));
+
+ if (!Array.isArray(filterResult.filtered)) {
+ throw new Error(
+ `Filter ${filterPath} did not return a valid test list`
+ );
+ }
+
+ const filteredSet = new Set(
+ filterResult.filtered.map(result => result.test)
+ );
+ return {
+ ...searchResult,
+ tests: tests.filter(test => filteredSet.has(test.path))
+ };
+ }
+
+ return searchResult;
+ }
+
+ async findRelatedSourcesFromTestsInChangedFiles(changedFilesInfo) {
+ if (!hasSCM(changedFilesInfo)) {
+ return [];
+ }
+
+ const {changedFiles} = changedFilesInfo;
+ const dependencyResolver = await this._getOrBuildDependencyResolver();
+ const relatedSourcesSet = new Set();
+ changedFiles.forEach(filePath => {
+ if (this.isTestFilePath(filePath)) {
+ const sourcePaths = dependencyResolver.resolve(filePath, {
+ skipNodeResolution: this._context.config.skipNodeResolution
+ });
+ sourcePaths.forEach(sourcePath => relatedSourcesSet.add(sourcePath));
+ }
+ });
+ return Array.from(relatedSourcesSet);
+ }
+}
+
+exports.default = SearchSource;
diff --git a/node_modules/@jest/core/build/SnapshotInteractiveMode.d.ts b/node_modules/@jest/core/build/SnapshotInteractiveMode.d.ts
new file mode 100644
index 0000000..1198a50
--- /dev/null
+++ b/node_modules/@jest/core/build/SnapshotInteractiveMode.d.ts
@@ -0,0 +1,30 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+/// <reference types="node" />
+import type { AggregatedResult, AssertionLocation } from '@jest/test-result';
+export default class SnapshotInteractiveMode {
+ private _pipe;
+ private _isActive;
+ private _updateTestRunnerConfig;
+ private _testAssertions;
+ private _countPaths;
+ private _skippedNum;
+ constructor(pipe: NodeJS.WritableStream);
+ isActive(): boolean;
+ getSkippedNum(): number;
+ private _clearTestSummary;
+ private _drawUIProgress;
+ private _drawUIDoneWithSkipped;
+ private _drawUIDone;
+ private _drawUIOverlay;
+ put(key: string): void;
+ abort(): void;
+ restart(): void;
+ updateWithResults(results: AggregatedResult): void;
+ private _run;
+ run(failedSnapshotTestAssertions: Array<AssertionLocation>, onConfigChange: (assertion: AssertionLocation | null, shouldUpdateSnapshot: boolean) => unknown): void;
+}
diff --git a/node_modules/@jest/core/build/SnapshotInteractiveMode.js b/node_modules/@jest/core/build/SnapshotInteractiveMode.js
new file mode 100644
index 0000000..fac34db
--- /dev/null
+++ b/node_modules/@jest/core/build/SnapshotInteractiveMode.js
@@ -0,0 +1,327 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+
+function _ansiEscapes() {
+ const data = _interopRequireDefault(require('ansi-escapes'));
+
+ _ansiEscapes = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+
+ _chalk = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestUtil() {
+ const data = require('jest-util');
+
+ _jestUtil = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestWatcher() {
+ const data = require('jest-watcher');
+
+ _jestWatcher = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+function _defineProperty(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+}
+
+const {ARROW, CLEAR} = _jestUtil().specialChars;
+
+class SnapshotInteractiveMode {
+ constructor(pipe) {
+ _defineProperty(this, '_pipe', void 0);
+
+ _defineProperty(this, '_isActive', void 0);
+
+ _defineProperty(this, '_updateTestRunnerConfig', void 0);
+
+ _defineProperty(this, '_testAssertions', void 0);
+
+ _defineProperty(this, '_countPaths', void 0);
+
+ _defineProperty(this, '_skippedNum', void 0);
+
+ this._pipe = pipe;
+ this._isActive = false;
+ this._skippedNum = 0;
+ }
+
+ isActive() {
+ return this._isActive;
+ }
+
+ getSkippedNum() {
+ return this._skippedNum;
+ }
+
+ _clearTestSummary() {
+ this._pipe.write(_ansiEscapes().default.cursorUp(6));
+
+ this._pipe.write(_ansiEscapes().default.eraseDown);
+ }
+
+ _drawUIProgress() {
+ this._clearTestSummary();
+
+ const numPass = this._countPaths - this._testAssertions.length;
+ const numRemaining = this._countPaths - numPass - this._skippedNum;
+
+ let stats = _chalk().default.bold.dim(
+ (0, _jestUtil().pluralize)('snapshot', numRemaining) + ' remaining'
+ );
+
+ if (numPass) {
+ stats +=
+ ', ' +
+ _chalk().default.bold.green(
+ (0, _jestUtil().pluralize)('snapshot', numPass) + ' updated'
+ );
+ }
+
+ if (this._skippedNum) {
+ stats +=
+ ', ' +
+ _chalk().default.bold.yellow(
+ (0, _jestUtil().pluralize)('snapshot', this._skippedNum) + ' skipped'
+ );
+ }
+
+ const messages = [
+ '\n' + _chalk().default.bold('Interactive Snapshot Progress'),
+ ARROW + stats,
+ '\n' + _chalk().default.bold('Watch Usage'),
+ _chalk().default.dim(ARROW + 'Press ') +
+ 'u' +
+ _chalk().default.dim(' to update failing snapshots for this test.'),
+ _chalk().default.dim(ARROW + 'Press ') +
+ 's' +
+ _chalk().default.dim(' to skip the current test.'),
+ _chalk().default.dim(ARROW + 'Press ') +
+ 'q' +
+ _chalk().default.dim(' to quit Interactive Snapshot Mode.'),
+ _chalk().default.dim(ARROW + 'Press ') +
+ 'Enter' +
+ _chalk().default.dim(' to trigger a test run.')
+ ];
+
+ this._pipe.write(messages.filter(Boolean).join('\n') + '\n');
+ }
+
+ _drawUIDoneWithSkipped() {
+ this._pipe.write(CLEAR);
+
+ const numPass = this._countPaths - this._testAssertions.length;
+
+ let stats = _chalk().default.bold.dim(
+ (0, _jestUtil().pluralize)('snapshot', this._countPaths) + ' reviewed'
+ );
+
+ if (numPass) {
+ stats +=
+ ', ' +
+ _chalk().default.bold.green(
+ (0, _jestUtil().pluralize)('snapshot', numPass) + ' updated'
+ );
+ }
+
+ if (this._skippedNum) {
+ stats +=
+ ', ' +
+ _chalk().default.bold.yellow(
+ (0, _jestUtil().pluralize)('snapshot', this._skippedNum) + ' skipped'
+ );
+ }
+
+ const messages = [
+ '\n' + _chalk().default.bold('Interactive Snapshot Result'),
+ ARROW + stats,
+ '\n' + _chalk().default.bold('Watch Usage'),
+ _chalk().default.dim(ARROW + 'Press ') +
+ 'r' +
+ _chalk().default.dim(' to restart Interactive Snapshot Mode.'),
+ _chalk().default.dim(ARROW + 'Press ') +
+ 'q' +
+ _chalk().default.dim(' to quit Interactive Snapshot Mode.')
+ ];
+
+ this._pipe.write(messages.filter(Boolean).join('\n') + '\n');
+ }
+
+ _drawUIDone() {
+ this._pipe.write(CLEAR);
+
+ const numPass = this._countPaths - this._testAssertions.length;
+
+ let stats = _chalk().default.bold.dim(
+ (0, _jestUtil().pluralize)('snapshot', this._countPaths) + ' reviewed'
+ );
+
+ if (numPass) {
+ stats +=
+ ', ' +
+ _chalk().default.bold.green(
+ (0, _jestUtil().pluralize)('snapshot', numPass) + ' updated'
+ );
+ }
+
+ const messages = [
+ '\n' + _chalk().default.bold('Interactive Snapshot Result'),
+ ARROW + stats,
+ '\n' + _chalk().default.bold('Watch Usage'),
+ _chalk().default.dim(ARROW + 'Press ') +
+ 'Enter' +
+ _chalk().default.dim(' to return to watch mode.')
+ ];
+
+ this._pipe.write(messages.filter(Boolean).join('\n') + '\n');
+ }
+
+ _drawUIOverlay() {
+ if (this._testAssertions.length === 0) {
+ return this._drawUIDone();
+ }
+
+ if (this._testAssertions.length - this._skippedNum === 0) {
+ return this._drawUIDoneWithSkipped();
+ }
+
+ return this._drawUIProgress();
+ }
+
+ put(key) {
+ switch (key) {
+ case 's':
+ if (this._skippedNum === this._testAssertions.length) break;
+ this._skippedNum += 1; // move skipped test to the end
+
+ this._testAssertions.push(this._testAssertions.shift());
+
+ if (this._testAssertions.length - this._skippedNum > 0) {
+ this._run(false);
+ } else {
+ this._drawUIDoneWithSkipped();
+ }
+
+ break;
+
+ case 'u':
+ this._run(true);
+
+ break;
+
+ case 'q':
+ case _jestWatcher().KEYS.ESCAPE:
+ this.abort();
+ break;
+
+ case 'r':
+ this.restart();
+ break;
+
+ case _jestWatcher().KEYS.ENTER:
+ if (this._testAssertions.length === 0) {
+ this.abort();
+ } else {
+ this._run(false);
+ }
+
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ abort() {
+ this._isActive = false;
+ this._skippedNum = 0;
+
+ this._updateTestRunnerConfig(null, false);
+ }
+
+ restart() {
+ this._skippedNum = 0;
+ this._countPaths = this._testAssertions.length;
+
+ this._run(false);
+ }
+
+ updateWithResults(results) {
+ const hasSnapshotFailure = !!results.snapshot.failure;
+
+ if (hasSnapshotFailure) {
+ this._drawUIOverlay();
+
+ return;
+ }
+
+ this._testAssertions.shift();
+
+ if (this._testAssertions.length - this._skippedNum === 0) {
+ this._drawUIOverlay();
+
+ return;
+ } // Go to the next test
+
+ this._run(false);
+ }
+
+ _run(shouldUpdateSnapshot) {
+ const testAssertion = this._testAssertions[0];
+
+ this._updateTestRunnerConfig(testAssertion, shouldUpdateSnapshot);
+ }
+
+ run(failedSnapshotTestAssertions, onConfigChange) {
+ if (!failedSnapshotTestAssertions.length) {
+ return;
+ }
+
+ this._testAssertions = [...failedSnapshotTestAssertions];
+ this._countPaths = this._testAssertions.length;
+ this._updateTestRunnerConfig = onConfigChange;
+ this._isActive = true;
+
+ this._run(false);
+ }
+}
+
+exports.default = SnapshotInteractiveMode;
diff --git a/node_modules/@jest/core/build/TestNamePatternPrompt.d.ts b/node_modules/@jest/core/build/TestNamePatternPrompt.d.ts
new file mode 100644
index 0000000..c3a187c
--- /dev/null
+++ b/node_modules/@jest/core/build/TestNamePatternPrompt.d.ts
@@ -0,0 +1,17 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+/// <reference types="node" />
+import type { TestResult } from '@jest/test-result';
+import { PatternPrompt, Prompt, ScrollOptions } from 'jest-watcher';
+export default class TestNamePatternPrompt extends PatternPrompt {
+ _cachedTestResults: Array<TestResult>;
+ constructor(pipe: NodeJS.WritableStream, prompt: Prompt);
+ _onChange(pattern: string, options: ScrollOptions): void;
+ _printPrompt(pattern: string): void;
+ _getMatchedTests(pattern: string): Array<string>;
+ updateCachedTestResults(testResults?: Array<TestResult>): void;
+}
diff --git a/node_modules/@jest/core/build/TestNamePatternPrompt.js b/node_modules/@jest/core/build/TestNamePatternPrompt.js
new file mode 100644
index 0000000..4d9bb2b
--- /dev/null
+++ b/node_modules/@jest/core/build/TestNamePatternPrompt.js
@@ -0,0 +1,86 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+
+function _jestWatcher() {
+ const data = require('jest-watcher');
+
+ _jestWatcher = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _defineProperty(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+}
+
+// TODO: Make underscored props `private`
+class TestNamePatternPrompt extends _jestWatcher().PatternPrompt {
+ constructor(pipe, prompt) {
+ super(pipe, prompt);
+
+ _defineProperty(this, '_cachedTestResults', void 0);
+
+ this._entityName = 'tests';
+ this._cachedTestResults = [];
+ }
+
+ _onChange(pattern, options) {
+ super._onChange(pattern, options);
+
+ this._printPrompt(pattern);
+ }
+
+ _printPrompt(pattern) {
+ const pipe = this._pipe;
+ (0, _jestWatcher().printPatternCaret)(pattern, pipe);
+ (0, _jestWatcher().printRestoredPatternCaret)(
+ pattern,
+ this._currentUsageRows,
+ pipe
+ );
+ }
+
+ _getMatchedTests(pattern) {
+ let regex;
+
+ try {
+ regex = new RegExp(pattern, 'i');
+ } catch {
+ return [];
+ }
+
+ const matchedTests = [];
+
+ this._cachedTestResults.forEach(({testResults}) =>
+ testResults.forEach(({title}) => {
+ if (regex.test(title)) {
+ matchedTests.push(title);
+ }
+ })
+ );
+
+ return matchedTests;
+ }
+
+ updateCachedTestResults(testResults = []) {
+ this._cachedTestResults = testResults;
+ }
+}
+
+exports.default = TestNamePatternPrompt;
diff --git a/node_modules/@jest/core/build/TestPathPatternPrompt.d.ts b/node_modules/@jest/core/build/TestPathPatternPrompt.d.ts
new file mode 100644
index 0000000..589ee48
--- /dev/null
+++ b/node_modules/@jest/core/build/TestPathPatternPrompt.d.ts
@@ -0,0 +1,24 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+/// <reference types="node" />
+import type { Test } from '@jest/test-result';
+import type { Context } from 'jest-runtime';
+import { PatternPrompt, Prompt, ScrollOptions } from 'jest-watcher';
+import type SearchSource from './SearchSource';
+declare type SearchSources = Array<{
+ context: Context;
+ searchSource: SearchSource;
+}>;
+export default class TestPathPatternPrompt extends PatternPrompt {
+ _searchSources?: SearchSources;
+ constructor(pipe: NodeJS.WritableStream, prompt: Prompt);
+ _onChange(pattern: string, options: ScrollOptions): void;
+ _printPrompt(pattern: string): void;
+ _getMatchedTests(pattern: string): Array<Test>;
+ updateSearchSources(searchSources: SearchSources): void;
+}
+export {};
diff --git a/node_modules/@jest/core/build/TestPathPatternPrompt.js b/node_modules/@jest/core/build/TestPathPatternPrompt.js
new file mode 100644
index 0000000..fe0a2bf
--- /dev/null
+++ b/node_modules/@jest/core/build/TestPathPatternPrompt.js
@@ -0,0 +1,81 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+
+function _jestWatcher() {
+ const data = require('jest-watcher');
+
+ _jestWatcher = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _defineProperty(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+}
+
+// TODO: Make underscored props `private`
+class TestPathPatternPrompt extends _jestWatcher().PatternPrompt {
+ constructor(pipe, prompt) {
+ super(pipe, prompt);
+
+ _defineProperty(this, '_searchSources', void 0);
+
+ this._entityName = 'filenames';
+ }
+
+ _onChange(pattern, options) {
+ super._onChange(pattern, options);
+
+ this._printPrompt(pattern);
+ }
+
+ _printPrompt(pattern) {
+ const pipe = this._pipe;
+ (0, _jestWatcher().printPatternCaret)(pattern, pipe);
+ (0, _jestWatcher().printRestoredPatternCaret)(
+ pattern,
+ this._currentUsageRows,
+ pipe
+ );
+ }
+
+ _getMatchedTests(pattern) {
+ let regex;
+
+ try {
+ regex = new RegExp(pattern, 'i');
+ } catch {}
+
+ let tests = [];
+
+ if (regex && this._searchSources) {
+ this._searchSources.forEach(({searchSource}) => {
+ tests = tests.concat(searchSource.findMatchingTests(pattern).tests);
+ });
+ }
+
+ return tests;
+ }
+
+ updateSearchSources(searchSources) {
+ this._searchSources = searchSources;
+ }
+}
+
+exports.default = TestPathPatternPrompt;
diff --git a/node_modules/@jest/core/build/TestScheduler.d.ts b/node_modules/@jest/core/build/TestScheduler.d.ts
new file mode 100644
index 0000000..7cf0c18
--- /dev/null
+++ b/node_modules/@jest/core/build/TestScheduler.d.ts
@@ -0,0 +1,42 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import { Reporter } from '@jest/reporters';
+import { AggregatedResult, Test } from '@jest/test-result';
+import type { Config } from '@jest/types';
+import type TestWatcher from './TestWatcher';
+export declare type TestSchedulerOptions = {
+ startRun: (globalConfig: Config.GlobalConfig) => void;
+};
+export declare type TestSchedulerContext = {
+ firstRun: boolean;
+ previousSuccess: boolean;
+ changedFiles?: Set<Config.Path>;
+ sourcesRelatedToTestsInChangedFiles?: Set<Config.Path>;
+};
+export declare function createTestScheduler(globalConfig: Config.GlobalConfig, options: TestSchedulerOptions, context: TestSchedulerContext): Promise<TestScheduler>;
+declare class TestScheduler {
+ private readonly _dispatcher;
+ private readonly _globalConfig;
+ private readonly _options;
+ private readonly _context;
+ constructor(globalConfig: Config.GlobalConfig, options: TestSchedulerOptions, context: TestSchedulerContext);
+ addReporter(reporter: Reporter): void;
+ removeReporter(ReporterClass: Function): void;
+ scheduleTests(tests: Array<Test>, watcher: TestWatcher): Promise<AggregatedResult>;
+ private _partitionTests;
+ private _shouldAddDefaultReporters;
+ _setupReporters(): Promise<void>;
+ private _setupDefaultReporters;
+ private _addCustomReporters;
+ /**
+ * Get properties of a reporter in an object
+ * to make dealing with them less painful.
+ */
+ private _getReporterProps;
+ private _bailIfNeeded;
+}
+export {};
diff --git a/node_modules/@jest/core/build/TestScheduler.js b/node_modules/@jest/core/build/TestScheduler.js
new file mode 100644
index 0000000..fb0d314
--- /dev/null
+++ b/node_modules/@jest/core/build/TestScheduler.js
@@ -0,0 +1,570 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.createTestScheduler = createTestScheduler;
+
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+
+ _chalk = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _exit() {
+ const data = _interopRequireDefault(require('exit'));
+
+ _exit = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _reporters() {
+ const data = require('@jest/reporters');
+
+ _reporters = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _testResult() {
+ const data = require('@jest/test-result');
+
+ _testResult = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _transform() {
+ const data = require('@jest/transform');
+
+ _transform = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestMessageUtil() {
+ const data = require('jest-message-util');
+
+ _jestMessageUtil = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestSnapshot() {
+ const data = _interopRequireDefault(require('jest-snapshot'));
+
+ _jestSnapshot = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestUtil() {
+ const data = require('jest-util');
+
+ _jestUtil = function () {
+ return data;
+ };
+
+ return data;
+}
+
+var _ReporterDispatcher = _interopRequireDefault(
+ require('./ReporterDispatcher')
+);
+
+var _testSchedulerHelper = require('./testSchedulerHelper');
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+function _defineProperty(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+}
+
+async function createTestScheduler(globalConfig, options, context) {
+ const scheduler = new TestScheduler(globalConfig, options, context);
+ await scheduler._setupReporters();
+ return scheduler;
+}
+
+class TestScheduler {
+ constructor(globalConfig, options, context) {
+ _defineProperty(this, '_dispatcher', void 0);
+
+ _defineProperty(this, '_globalConfig', void 0);
+
+ _defineProperty(this, '_options', void 0);
+
+ _defineProperty(this, '_context', void 0);
+
+ this._dispatcher = new _ReporterDispatcher.default();
+ this._globalConfig = globalConfig;
+ this._options = options;
+ this._context = context;
+ }
+
+ addReporter(reporter) {
+ this._dispatcher.register(reporter);
+ }
+
+ removeReporter(ReporterClass) {
+ this._dispatcher.unregister(ReporterClass);
+ }
+
+ async scheduleTests(tests, watcher) {
+ const onTestFileStart = this._dispatcher.onTestFileStart.bind(
+ this._dispatcher
+ );
+
+ const timings = [];
+ const contexts = new Set();
+ tests.forEach(test => {
+ contexts.add(test.context);
+
+ if (test.duration) {
+ timings.push(test.duration);
+ }
+ });
+ const aggregatedResults = createAggregatedResults(tests.length);
+ const estimatedTime = Math.ceil(
+ getEstimatedTime(timings, this._globalConfig.maxWorkers) / 1000
+ );
+ const runInBand = (0, _testSchedulerHelper.shouldRunInBand)(
+ tests,
+ timings,
+ this._globalConfig
+ );
+
+ const onResult = async (test, testResult) => {
+ if (watcher.isInterrupted()) {
+ return Promise.resolve();
+ }
+
+ if (testResult.testResults.length === 0) {
+ const message = 'Your test suite must contain at least one test.';
+ return onFailure(test, {
+ message,
+ stack: new Error(message).stack
+ });
+ } // Throws when the context is leaked after executing a test.
+
+ if (testResult.leaks) {
+ const message =
+ _chalk().default.red.bold('EXPERIMENTAL FEATURE!\n') +
+ 'Your test suite is leaking memory. Please ensure all references are cleaned.\n' +
+ '\n' +
+ 'There is a number of things that can leak memory:\n' +
+ ' - Async operations that have not finished (e.g. fs.readFile).\n' +
+ ' - Timers not properly mocked (e.g. setInterval, setTimeout).\n' +
+ ' - Keeping references to the global scope.';
+ return onFailure(test, {
+ message,
+ stack: new Error(message).stack
+ });
+ }
+
+ (0, _testResult().addResult)(aggregatedResults, testResult);
+ await this._dispatcher.onTestFileResult(
+ test,
+ testResult,
+ aggregatedResults
+ );
+ return this._bailIfNeeded(contexts, aggregatedResults, watcher);
+ };
+
+ const onFailure = async (test, error) => {
+ if (watcher.isInterrupted()) {
+ return;
+ }
+
+ const testResult = (0, _testResult().buildFailureTestResult)(
+ test.path,
+ error
+ );
+ testResult.failureMessage = (0, _jestMessageUtil().formatExecError)(
+ testResult.testExecError,
+ test.context.config,
+ this._globalConfig,
+ test.path
+ );
+ (0, _testResult().addResult)(aggregatedResults, testResult);
+ await this._dispatcher.onTestFileResult(
+ test,
+ testResult,
+ aggregatedResults
+ );
+ };
+
+ const updateSnapshotState = async () => {
+ const contextsWithSnapshotResolvers = await Promise.all(
+ Array.from(contexts).map(async context => [
+ context,
+ await _jestSnapshot().default.buildSnapshotResolver(context.config)
+ ])
+ );
+ contextsWithSnapshotResolvers.forEach(([context, snapshotResolver]) => {
+ const status = _jestSnapshot().default.cleanup(
+ context.hasteFS,
+ this._globalConfig.updateSnapshot,
+ snapshotResolver,
+ context.config.testPathIgnorePatterns
+ );
+
+ aggregatedResults.snapshot.filesRemoved += status.filesRemoved;
+ aggregatedResults.snapshot.filesRemovedList = (
+ aggregatedResults.snapshot.filesRemovedList || []
+ ).concat(status.filesRemovedList);
+ });
+ const updateAll = this._globalConfig.updateSnapshot === 'all';
+ aggregatedResults.snapshot.didUpdate = updateAll;
+ aggregatedResults.snapshot.failure = !!(
+ !updateAll &&
+ (aggregatedResults.snapshot.unchecked ||
+ aggregatedResults.snapshot.unmatched ||
+ aggregatedResults.snapshot.filesRemoved)
+ );
+ };
+
+ await this._dispatcher.onRunStart(aggregatedResults, {
+ estimatedTime,
+ showStatus: !runInBand
+ });
+ const testRunners = Object.create(null);
+ const contextsByTestRunner = new WeakMap();
+ await Promise.all(
+ Array.from(contexts).map(async context => {
+ const {config} = context;
+
+ if (!testRunners[config.runner]) {
+ var _this$_context, _this$_context2;
+
+ const transformer = await (0, _transform().createScriptTransformer)(
+ config
+ );
+ const Runner = await transformer.requireAndTranspileModule(
+ config.runner
+ );
+ const runner = new Runner(this._globalConfig, {
+ changedFiles:
+ (_this$_context = this._context) === null ||
+ _this$_context === void 0
+ ? void 0
+ : _this$_context.changedFiles,
+ sourcesRelatedToTestsInChangedFiles:
+ (_this$_context2 = this._context) === null ||
+ _this$_context2 === void 0
+ ? void 0
+ : _this$_context2.sourcesRelatedToTestsInChangedFiles
+ });
+ testRunners[config.runner] = runner;
+ contextsByTestRunner.set(runner, context);
+ }
+ })
+ );
+
+ const testsByRunner = this._partitionTests(testRunners, tests);
+
+ if (testsByRunner) {
+ try {
+ for (const runner of Object.keys(testRunners)) {
+ const testRunner = testRunners[runner];
+ const context = contextsByTestRunner.get(testRunner);
+ invariant(context);
+ const tests = testsByRunner[runner];
+ const testRunnerOptions = {
+ serial: runInBand || Boolean(testRunner.isSerial)
+ };
+ /**
+ * Test runners with event emitters are still not supported
+ * for third party test runners.
+ */
+
+ if (testRunner.__PRIVATE_UNSTABLE_API_supportsEventEmitters__) {
+ const unsubscribes = [
+ testRunner.on('test-file-start', ([test]) =>
+ onTestFileStart(test)
+ ),
+ testRunner.on('test-file-success', ([test, testResult]) =>
+ onResult(test, testResult)
+ ),
+ testRunner.on('test-file-failure', ([test, error]) =>
+ onFailure(test, error)
+ ),
+ testRunner.on(
+ 'test-case-result',
+ ([testPath, testCaseResult]) => {
+ const test = {
+ context,
+ path: testPath
+ };
+
+ this._dispatcher.onTestCaseResult(test, testCaseResult);
+ }
+ )
+ ];
+ await testRunner.runTests(
+ tests,
+ watcher,
+ undefined,
+ undefined,
+ undefined,
+ testRunnerOptions
+ );
+ unsubscribes.forEach(sub => sub());
+ } else {
+ await testRunner.runTests(
+ tests,
+ watcher,
+ onTestFileStart,
+ onResult,
+ onFailure,
+ testRunnerOptions
+ );
+ }
+ }
+ } catch (error) {
+ if (!watcher.isInterrupted()) {
+ throw error;
+ }
+ }
+ }
+
+ await updateSnapshotState();
+ aggregatedResults.wasInterrupted = watcher.isInterrupted();
+ await this._dispatcher.onRunComplete(contexts, aggregatedResults);
+ const anyTestFailures = !(
+ aggregatedResults.numFailedTests === 0 &&
+ aggregatedResults.numRuntimeErrorTestSuites === 0
+ );
+
+ const anyReporterErrors = this._dispatcher.hasErrors();
+
+ aggregatedResults.success = !(
+ anyTestFailures ||
+ aggregatedResults.snapshot.failure ||
+ anyReporterErrors
+ );
+ return aggregatedResults;
+ }
+
+ _partitionTests(testRunners, tests) {
+ if (Object.keys(testRunners).length > 1) {
+ return tests.reduce((testRuns, test) => {
+ const runner = test.context.config.runner;
+
+ if (!testRuns[runner]) {
+ testRuns[runner] = [];
+ }
+
+ testRuns[runner].push(test);
+ return testRuns;
+ }, Object.create(null));
+ } else if (tests.length > 0 && tests[0] != null) {
+ // If there is only one runner, don't partition the tests.
+ return Object.assign(Object.create(null), {
+ [tests[0].context.config.runner]: tests
+ });
+ } else {
+ return null;
+ }
+ }
+
+ _shouldAddDefaultReporters(reporters) {
+ return (
+ !reporters ||
+ !!reporters.find(
+ reporter => this._getReporterProps(reporter).path === 'default'
+ )
+ );
+ }
+
+ async _setupReporters() {
+ const {collectCoverage, notify, reporters} = this._globalConfig;
+
+ const isDefault = this._shouldAddDefaultReporters(reporters);
+
+ if (isDefault) {
+ this._setupDefaultReporters(collectCoverage);
+ }
+
+ if (!isDefault && collectCoverage) {
+ var _this$_context3, _this$_context4;
+
+ this.addReporter(
+ new (_reporters().CoverageReporter)(this._globalConfig, {
+ changedFiles:
+ (_this$_context3 = this._context) === null ||
+ _this$_context3 === void 0
+ ? void 0
+ : _this$_context3.changedFiles,
+ sourcesRelatedToTestsInChangedFiles:
+ (_this$_context4 = this._context) === null ||
+ _this$_context4 === void 0
+ ? void 0
+ : _this$_context4.sourcesRelatedToTestsInChangedFiles
+ })
+ );
+ }
+
+ if (notify) {
+ this.addReporter(
+ new (_reporters().NotifyReporter)(
+ this._globalConfig,
+ this._options.startRun,
+ this._context
+ )
+ );
+ }
+
+ if (reporters && Array.isArray(reporters)) {
+ await this._addCustomReporters(reporters);
+ }
+ }
+
+ _setupDefaultReporters(collectCoverage) {
+ this.addReporter(
+ this._globalConfig.verbose
+ ? new (_reporters().VerboseReporter)(this._globalConfig)
+ : new (_reporters().DefaultReporter)(this._globalConfig)
+ );
+
+ if (collectCoverage) {
+ var _this$_context5, _this$_context6;
+
+ this.addReporter(
+ new (_reporters().CoverageReporter)(this._globalConfig, {
+ changedFiles:
+ (_this$_context5 = this._context) === null ||
+ _this$_context5 === void 0
+ ? void 0
+ : _this$_context5.changedFiles,
+ sourcesRelatedToTestsInChangedFiles:
+ (_this$_context6 = this._context) === null ||
+ _this$_context6 === void 0
+ ? void 0
+ : _this$_context6.sourcesRelatedToTestsInChangedFiles
+ })
+ );
+ }
+
+ this.addReporter(new (_reporters().SummaryReporter)(this._globalConfig));
+ }
+
+ async _addCustomReporters(reporters) {
+ for (const reporter of reporters) {
+ const {options, path} = this._getReporterProps(reporter);
+
+ if (path === 'default') continue;
+
+ try {
+ const Reporter = await (0, _jestUtil().requireOrImportModule)(
+ path,
+ true
+ );
+ this.addReporter(new Reporter(this._globalConfig, options));
+ } catch (error) {
+ error.message =
+ 'An error occurred while adding the reporter at path "' +
+ _chalk().default.bold(path) +
+ '".' +
+ error.message;
+ throw error;
+ }
+ }
+ }
+ /**
+ * Get properties of a reporter in an object
+ * to make dealing with them less painful.
+ */
+
+ _getReporterProps(reporter) {
+ if (typeof reporter === 'string') {
+ return {
+ options: this._options,
+ path: reporter
+ };
+ } else if (Array.isArray(reporter)) {
+ const [path, options] = reporter;
+ return {
+ options,
+ path
+ };
+ }
+
+ throw new Error('Reporter should be either a string or an array');
+ }
+
+ async _bailIfNeeded(contexts, aggregatedResults, watcher) {
+ if (
+ this._globalConfig.bail !== 0 &&
+ aggregatedResults.numFailedTests >= this._globalConfig.bail
+ ) {
+ if (watcher.isWatchMode()) {
+ await watcher.setState({
+ interrupted: true
+ });
+ return;
+ }
+
+ try {
+ await this._dispatcher.onRunComplete(contexts, aggregatedResults);
+ } finally {
+ const exitCode = this._globalConfig.testFailureExitCode;
+ (0, _exit().default)(exitCode);
+ }
+ }
+ }
+}
+
+function invariant(condition, message) {
+ if (!condition) {
+ throw new Error(message);
+ }
+}
+
+const createAggregatedResults = numTotalTestSuites => {
+ const result = (0, _testResult().makeEmptyAggregatedTestResult)();
+ result.numTotalTestSuites = numTotalTestSuites;
+ result.startTime = Date.now();
+ result.success = false;
+ return result;
+};
+
+const getEstimatedTime = (timings, workers) => {
+ if (timings.length === 0) {
+ return 0;
+ }
+
+ const max = Math.max(...timings);
+ return timings.length <= workers
+ ? max
+ : Math.max(timings.reduce((sum, time) => sum + time) / workers, max);
+};
diff --git a/node_modules/@jest/core/build/TestWatcher.d.ts b/node_modules/@jest/core/build/TestWatcher.d.ts
new file mode 100644
index 0000000..baceb5e
--- /dev/null
+++ b/node_modules/@jest/core/build/TestWatcher.d.ts
@@ -0,0 +1,23 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import emittery = require('emittery');
+declare type State = {
+ interrupted: boolean;
+};
+export default class TestWatcher extends emittery<{
+ change: State;
+}> {
+ state: State;
+ private _isWatchMode;
+ constructor({ isWatchMode }: {
+ isWatchMode: boolean;
+ });
+ setState(state: State): Promise<void>;
+ isInterrupted(): boolean;
+ isWatchMode(): boolean;
+}
+export {};
diff --git a/node_modules/@jest/core/build/TestWatcher.js b/node_modules/@jest/core/build/TestWatcher.js
new file mode 100644
index 0000000..491279b
--- /dev/null
+++ b/node_modules/@jest/core/build/TestWatcher.js
@@ -0,0 +1,64 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+
+function _emittery() {
+ const data = _interopRequireDefault(require('emittery'));
+
+ _emittery = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+function _defineProperty(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+}
+
+class TestWatcher extends _emittery().default {
+ constructor({isWatchMode}) {
+ super();
+
+ _defineProperty(this, 'state', void 0);
+
+ _defineProperty(this, '_isWatchMode', void 0);
+
+ this.state = {
+ interrupted: false
+ };
+ this._isWatchMode = isWatchMode;
+ }
+
+ async setState(state) {
+ Object.assign(this.state, state);
+ await this.emit('change', this.state);
+ }
+
+ isInterrupted() {
+ return this.state.interrupted;
+ }
+
+ isWatchMode() {
+ return this._isWatchMode;
+ }
+}
+
+exports.default = TestWatcher;
diff --git a/node_modules/@jest/core/build/assets/jest_logo.png b/node_modules/@jest/core/build/assets/jest_logo.png
new file mode 100644
index 0000000..079356b
--- /dev/null
+++ b/node_modules/@jest/core/build/assets/jest_logo.png
Binary files differ
diff --git a/node_modules/@jest/core/build/cli/index.d.ts b/node_modules/@jest/core/build/cli/index.d.ts
new file mode 100644
index 0000000..bfa970e
--- /dev/null
+++ b/node_modules/@jest/core/build/cli/index.d.ts
@@ -0,0 +1,12 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import type { AggregatedResult } from '@jest/test-result';
+import type { Config } from '@jest/types';
+export declare function runCLI(argv: Config.Argv, projects: Array<Config.Path>): Promise<{
+ results: AggregatedResult;
+ globalConfig: Config.GlobalConfig;
+}>;
diff --git a/node_modules/@jest/core/build/cli/index.js b/node_modules/@jest/core/build/cli/index.js
new file mode 100644
index 0000000..2844390
--- /dev/null
+++ b/node_modules/@jest/core/build/cli/index.js
@@ -0,0 +1,399 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.runCLI = runCLI;
+
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+
+ _chalk = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _exit() {
+ const data = _interopRequireDefault(require('exit'));
+
+ _exit = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _rimraf() {
+ const data = _interopRequireDefault(require('rimraf'));
+
+ _rimraf = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _console() {
+ const data = require('@jest/console');
+
+ _console = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestConfig() {
+ const data = require('jest-config');
+
+ _jestConfig = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestRuntime() {
+ const data = _interopRequireDefault(require('jest-runtime'));
+
+ _jestRuntime = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestUtil() {
+ const data = require('jest-util');
+
+ _jestUtil = function () {
+ return data;
+ };
+
+ return data;
+}
+
+var _TestWatcher = _interopRequireDefault(require('../TestWatcher'));
+
+var _collectHandles = require('../collectHandles');
+
+var _getChangedFilesPromise = _interopRequireDefault(
+ require('../getChangedFilesPromise')
+);
+
+var _getConfigsOfProjectsToRun = _interopRequireDefault(
+ require('../getConfigsOfProjectsToRun')
+);
+
+var _getProjectNamesMissingWarning = _interopRequireDefault(
+ require('../getProjectNamesMissingWarning')
+);
+
+var _getSelectProjectsMessage = _interopRequireDefault(
+ require('../getSelectProjectsMessage')
+);
+
+var _createContext = _interopRequireDefault(require('../lib/createContext'));
+
+var _handleDeprecationWarnings = _interopRequireDefault(
+ require('../lib/handleDeprecationWarnings')
+);
+
+var _logDebugMessages = _interopRequireDefault(
+ require('../lib/logDebugMessages')
+);
+
+var _pluralize = _interopRequireDefault(require('../pluralize'));
+
+var _runJest = _interopRequireDefault(require('../runJest'));
+
+var _watch = _interopRequireDefault(require('../watch'));
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+const {print: preRunMessagePrint} = _jestUtil().preRunMessage;
+
+async function runCLI(argv, projects) {
+ let results; // If we output a JSON object, we can't write anything to stdout, since
+ // it'll break the JSON structure and it won't be valid.
+
+ const outputStream =
+ argv.json || argv.useStderr ? process.stderr : process.stdout;
+ const {globalConfig, configs, hasDeprecationWarnings} = await (0,
+ _jestConfig().readConfigs)(argv, projects);
+
+ if (argv.debug) {
+ (0, _logDebugMessages.default)(globalConfig, configs, outputStream);
+ }
+
+ if (argv.showConfig) {
+ (0, _logDebugMessages.default)(globalConfig, configs, process.stdout);
+ (0, _exit().default)(0);
+ }
+
+ if (argv.clearCache) {
+ configs.forEach(config => {
+ _rimraf().default.sync(config.cacheDirectory);
+
+ process.stdout.write(`Cleared ${config.cacheDirectory}\n`);
+ });
+ (0, _exit().default)(0);
+ }
+
+ let configsOfProjectsToRun = configs;
+
+ if (argv.selectProjects) {
+ const namesMissingWarning = (0, _getProjectNamesMissingWarning.default)(
+ configs
+ );
+
+ if (namesMissingWarning) {
+ outputStream.write(namesMissingWarning);
+ }
+
+ configsOfProjectsToRun = (0, _getConfigsOfProjectsToRun.default)(
+ argv.selectProjects,
+ configs
+ );
+ outputStream.write(
+ (0, _getSelectProjectsMessage.default)(configsOfProjectsToRun)
+ );
+ }
+
+ await _run10000(
+ globalConfig,
+ configsOfProjectsToRun,
+ hasDeprecationWarnings,
+ outputStream,
+ r => {
+ results = r;
+ }
+ );
+
+ if (argv.watch || argv.watchAll) {
+ // If in watch mode, return the promise that will never resolve.
+ // If the watch mode is interrupted, watch should handle the process
+ // shutdown.
+ return new Promise(() => {});
+ }
+
+ if (!results) {
+ throw new Error(
+ 'AggregatedResult must be present after test run is complete'
+ );
+ }
+
+ const {openHandles} = results;
+
+ if (openHandles && openHandles.length) {
+ const formatted = (0, _collectHandles.formatHandleErrors)(
+ openHandles,
+ configs[0]
+ );
+ const openHandlesString = (0, _pluralize.default)(
+ 'open handle',
+ formatted.length,
+ 's'
+ );
+ const message =
+ _chalk().default.red(
+ `\nJest has detected the following ${openHandlesString} potentially keeping Jest from exiting:\n\n`
+ ) + formatted.join('\n\n');
+ console.error(message);
+ }
+
+ return {
+ globalConfig,
+ results
+ };
+}
+
+const buildContextsAndHasteMaps = async (
+ configs,
+ globalConfig,
+ outputStream
+) => {
+ const hasteMapInstances = Array(configs.length);
+ const contexts = await Promise.all(
+ configs.map(async (config, index) => {
+ (0, _jestUtil().createDirectory)(config.cacheDirectory);
+
+ const hasteMapInstance = _jestRuntime().default.createHasteMap(config, {
+ console: new (_console().CustomConsole)(outputStream, outputStream),
+ maxWorkers: Math.max(
+ 1,
+ Math.floor(globalConfig.maxWorkers / configs.length)
+ ),
+ resetCache: !config.cache,
+ watch: globalConfig.watch || globalConfig.watchAll,
+ watchman: globalConfig.watchman
+ });
+
+ hasteMapInstances[index] = hasteMapInstance;
+ return (0, _createContext.default)(
+ config,
+ await hasteMapInstance.build()
+ );
+ })
+ );
+ return {
+ contexts,
+ hasteMapInstances
+ };
+};
+
+const _run10000 = async (
+ globalConfig,
+ configs,
+ hasDeprecationWarnings,
+ outputStream,
+ onComplete
+) => {
+ // Queries to hg/git can take a while, so we need to start the process
+ // as soon as possible, so by the time we need the result it's already there.
+ const changedFilesPromise = (0, _getChangedFilesPromise.default)(
+ globalConfig,
+ configs
+ ); // Filter may need to do an HTTP call or something similar to setup.
+ // We will wait on an async response from this before using the filter.
+
+ let filter;
+
+ if (globalConfig.filter && !globalConfig.skipFilter) {
+ const rawFilter = require(globalConfig.filter);
+
+ let filterSetupPromise;
+
+ if (rawFilter.setup) {
+ // Wrap filter setup Promise to avoid "uncaught Promise" error.
+ // If an error is returned, we surface it in the return value.
+ filterSetupPromise = (async () => {
+ try {
+ await rawFilter.setup();
+ } catch (err) {
+ return err;
+ }
+
+ return undefined;
+ })();
+ }
+
+ filter = async testPaths => {
+ if (filterSetupPromise) {
+ // Expect an undefined return value unless there was an error.
+ const err = await filterSetupPromise;
+
+ if (err) {
+ throw err;
+ }
+ }
+
+ return rawFilter(testPaths);
+ };
+ }
+
+ const {contexts, hasteMapInstances} = await buildContextsAndHasteMaps(
+ configs,
+ globalConfig,
+ outputStream
+ );
+ globalConfig.watch || globalConfig.watchAll
+ ? await runWatch(
+ contexts,
+ configs,
+ hasDeprecationWarnings,
+ globalConfig,
+ outputStream,
+ hasteMapInstances,
+ filter
+ )
+ : await runWithoutWatch(
+ globalConfig,
+ contexts,
+ outputStream,
+ onComplete,
+ changedFilesPromise,
+ filter
+ );
+};
+
+const runWatch = async (
+ contexts,
+ _configs,
+ hasDeprecationWarnings,
+ globalConfig,
+ outputStream,
+ hasteMapInstances,
+ filter
+) => {
+ if (hasDeprecationWarnings) {
+ try {
+ await (0, _handleDeprecationWarnings.default)(
+ outputStream,
+ process.stdin
+ );
+ return (0, _watch.default)(
+ globalConfig,
+ contexts,
+ outputStream,
+ hasteMapInstances,
+ undefined,
+ undefined,
+ filter
+ );
+ } catch {
+ (0, _exit().default)(0);
+ }
+ }
+
+ return (0, _watch.default)(
+ globalConfig,
+ contexts,
+ outputStream,
+ hasteMapInstances,
+ undefined,
+ undefined,
+ filter
+ );
+};
+
+const runWithoutWatch = async (
+ globalConfig,
+ contexts,
+ outputStream,
+ onComplete,
+ changedFilesPromise,
+ filter
+) => {
+ const startRun = async () => {
+ if (!globalConfig.listTests) {
+ preRunMessagePrint(outputStream);
+ }
+
+ return (0, _runJest.default)({
+ changedFilesPromise,
+ contexts,
+ failedTestsCache: undefined,
+ filter,
+ globalConfig,
+ onComplete,
+ outputStream,
+ startRun,
+ testWatcher: new _TestWatcher.default({
+ isWatchMode: false
+ })
+ });
+ };
+
+ return startRun();
+};
diff --git a/node_modules/@jest/core/build/collectHandles.d.ts b/node_modules/@jest/core/build/collectHandles.d.ts
new file mode 100644
index 0000000..7e72c44
--- /dev/null
+++ b/node_modules/@jest/core/build/collectHandles.d.ts
@@ -0,0 +1,10 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import type { Config } from '@jest/types';
+export declare type HandleCollectionResult = () => Promise<Array<Error>>;
+export default function collectHandles(): HandleCollectionResult;
+export declare function formatHandleErrors(errors: Array<Error>, config: Config.ProjectConfig): Array<string>;
diff --git a/node_modules/@jest/core/build/collectHandles.js b/node_modules/@jest/core/build/collectHandles.js
new file mode 100644
index 0000000..6b77f1c
--- /dev/null
+++ b/node_modules/@jest/core/build/collectHandles.js
@@ -0,0 +1,269 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = collectHandles;
+exports.formatHandleErrors = formatHandleErrors;
+
+function asyncHooks() {
+ const data = _interopRequireWildcard(require('async_hooks'));
+
+ asyncHooks = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _util() {
+ const data = require('util');
+
+ _util = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _stripAnsi() {
+ const data = _interopRequireDefault(require('strip-ansi'));
+
+ _stripAnsi = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestMessageUtil() {
+ const data = require('jest-message-util');
+
+ _jestMessageUtil = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestUtil() {
+ const data = require('jest-util');
+
+ _jestUtil = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+function _getRequireWildcardCache(nodeInterop) {
+ if (typeof WeakMap !== 'function') return null;
+ var cacheBabelInterop = new WeakMap();
+ var cacheNodeInterop = new WeakMap();
+ return (_getRequireWildcardCache = function (nodeInterop) {
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
+ })(nodeInterop);
+}
+
+function _interopRequireWildcard(obj, nodeInterop) {
+ if (!nodeInterop && obj && obj.__esModule) {
+ return obj;
+ }
+ if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) {
+ return {default: obj};
+ }
+ var cache = _getRequireWildcardCache(nodeInterop);
+ if (cache && cache.has(obj)) {
+ return cache.get(obj);
+ }
+ var newObj = {};
+ var hasPropertyDescriptor =
+ Object.defineProperty && Object.getOwnPropertyDescriptor;
+ for (var key in obj) {
+ if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) {
+ var desc = hasPropertyDescriptor
+ ? Object.getOwnPropertyDescriptor(obj, key)
+ : null;
+ if (desc && (desc.get || desc.set)) {
+ Object.defineProperty(newObj, key, desc);
+ } else {
+ newObj[key] = obj[key];
+ }
+ }
+ }
+ newObj.default = obj;
+ if (cache) {
+ cache.set(obj, newObj);
+ }
+ return newObj;
+}
+
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* eslint-disable local/ban-types-eventually */
+function stackIsFromUser(stack) {
+ // Either the test file, or something required by it
+ if (stack.includes('Runtime.requireModule')) {
+ return true;
+ } // jest-jasmine it or describe call
+
+ if (stack.includes('asyncJestTest') || stack.includes('asyncJestLifecycle')) {
+ return true;
+ } // An async function call from within circus
+
+ if (stack.includes('callAsyncCircusFn')) {
+ // jest-circus it or describe call
+ return (
+ stack.includes('_callCircusTest') || stack.includes('_callCircusHook')
+ );
+ }
+
+ return false;
+}
+
+const alwaysActive = () => true; // @ts-expect-error: doesn't exist in v10 typings
+
+const hasWeakRef = typeof WeakRef === 'function';
+const asyncSleep = (0, _util().promisify)(setTimeout); // Inspired by https://github.com/mafintosh/why-is-node-running/blob/master/index.js
+// Extracted as we want to format the result ourselves
+
+function collectHandles() {
+ const activeHandles = new Map();
+ const hook = asyncHooks().createHook({
+ destroy(asyncId) {
+ activeHandles.delete(asyncId);
+ },
+
+ init: function initHook(asyncId, type, triggerAsyncId, resource) {
+ // Skip resources that should not generally prevent the process from
+ // exiting, not last a meaningfully long time, or otherwise shouldn't be
+ // tracked.
+ if (
+ type === 'PROMISE' ||
+ type === 'TIMERWRAP' ||
+ type === 'ELDHISTOGRAM' ||
+ type === 'PerformanceObserver' ||
+ type === 'RANDOMBYTESREQUEST' ||
+ type === 'DNSCHANNEL' ||
+ type === 'ZLIB'
+ ) {
+ return;
+ }
+
+ const error = new (_jestUtil().ErrorWithStack)(type, initHook, 100);
+ let fromUser = stackIsFromUser(error.stack || ''); // If the async resource was not directly created by user code, but was
+ // triggered by another async resource from user code, track it and use
+ // the original triggering resource's stack.
+
+ if (!fromUser) {
+ const triggeringHandle = activeHandles.get(triggerAsyncId);
+
+ if (triggeringHandle) {
+ fromUser = true;
+ error.stack = triggeringHandle.error.stack;
+ }
+ }
+
+ if (fromUser) {
+ let isActive;
+
+ if (type === 'Timeout' || type === 'Immediate') {
+ // Timer that supports hasRef (Node v11+)
+ if ('hasRef' in resource) {
+ if (hasWeakRef) {
+ // @ts-expect-error: doesn't exist in v10 typings
+ const ref = new WeakRef(resource);
+
+ isActive = () => {
+ var _ref$deref$hasRef, _ref$deref;
+
+ return (_ref$deref$hasRef =
+ (_ref$deref = ref.deref()) === null || _ref$deref === void 0
+ ? void 0
+ : _ref$deref.hasRef()) !== null &&
+ _ref$deref$hasRef !== void 0
+ ? _ref$deref$hasRef
+ : false;
+ };
+ } else {
+ // @ts-expect-error: doesn't exist in v10 typings
+ isActive = resource.hasRef.bind(resource);
+ }
+ } else {
+ // Timer that doesn't support hasRef
+ isActive = alwaysActive;
+ }
+ } else {
+ // Any other async resource
+ isActive = alwaysActive;
+ }
+
+ activeHandles.set(asyncId, {
+ error,
+ isActive
+ });
+ }
+ }
+ });
+ hook.enable();
+ return async () => {
+ // Wait briefly for any async resources that have been queued for
+ // destruction to actually be destroyed.
+ // For example, Node.js TCP Servers are not destroyed until *after* their
+ // `close` callback runs. If someone finishes a test from the `close`
+ // callback, we will not yet have seen the resource be destroyed here.
+ await asyncSleep(100);
+ hook.disable(); // Get errors for every async resource still referenced at this moment
+
+ const result = Array.from(activeHandles.values())
+ .filter(({isActive}) => isActive())
+ .map(({error}) => error);
+ activeHandles.clear();
+ return result;
+ };
+}
+
+function formatHandleErrors(errors, config) {
+ const stacks = new Set();
+ return (
+ errors
+ .map(err =>
+ (0, _jestMessageUtil().formatExecError)(
+ err,
+ config,
+ {
+ noStackTrace: false
+ },
+ undefined,
+ true
+ )
+ ) // E.g. timeouts might give multiple traces to the same line of code
+ // This hairy filtering tries to remove entries with duplicate stack traces
+ .filter(handle => {
+ const ansiFree = (0, _stripAnsi().default)(handle);
+ const match = ansiFree.match(/\s+at(.*)/);
+
+ if (!match || match.length < 2) {
+ return true;
+ }
+
+ const stack = ansiFree.substr(ansiFree.indexOf(match[1])).trim();
+
+ if (stacks.has(stack)) {
+ return false;
+ }
+
+ stacks.add(stack);
+ return true;
+ })
+ );
+}
diff --git a/node_modules/@jest/core/build/getChangedFilesPromise.d.ts b/node_modules/@jest/core/build/getChangedFilesPromise.d.ts
new file mode 100644
index 0000000..4a42b64
--- /dev/null
+++ b/node_modules/@jest/core/build/getChangedFilesPromise.d.ts
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import type { Config } from '@jest/types';
+import { ChangedFilesPromise } from 'jest-changed-files';
+export default function getChangedFilesPromise(globalConfig: Config.GlobalConfig, configs: Array<Config.ProjectConfig>): ChangedFilesPromise | undefined;
diff --git a/node_modules/@jest/core/build/getChangedFilesPromise.js b/node_modules/@jest/core/build/getChangedFilesPromise.js
new file mode 100644
index 0000000..c7912af
--- /dev/null
+++ b/node_modules/@jest/core/build/getChangedFilesPromise.js
@@ -0,0 +1,77 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = getChangedFilesPromise;
+
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+
+ _chalk = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestChangedFiles() {
+ const data = require('jest-changed-files');
+
+ _jestChangedFiles = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestMessageUtil() {
+ const data = require('jest-message-util');
+
+ _jestMessageUtil = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+function getChangedFilesPromise(globalConfig, configs) {
+ if (globalConfig.onlyChanged) {
+ const allRootsForAllProjects = configs.reduce((roots, config) => {
+ if (config.roots) {
+ roots.push(...config.roots);
+ }
+
+ return roots;
+ }, []);
+ return (0, _jestChangedFiles().getChangedFilesForRoots)(
+ allRootsForAllProjects,
+ {
+ changedSince: globalConfig.changedSince,
+ lastCommit: globalConfig.lastCommit,
+ withAncestor: globalConfig.changedFilesWithAncestor
+ }
+ ).catch(e => {
+ const message = (0, _jestMessageUtil().formatExecError)(e, configs[0], {
+ noStackTrace: true
+ })
+ .split('\n')
+ .filter(line => !line.includes('Command failed:'))
+ .join('\n');
+ console.error(_chalk().default.red(`\n\n${message}`));
+ process.exit(1);
+ });
+ }
+
+ return undefined;
+}
diff --git a/node_modules/@jest/core/build/getConfigsOfProjectsToRun.d.ts b/node_modules/@jest/core/build/getConfigsOfProjectsToRun.d.ts
new file mode 100644
index 0000000..0a780d4
--- /dev/null
+++ b/node_modules/@jest/core/build/getConfigsOfProjectsToRun.d.ts
@@ -0,0 +1,8 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import type { Config } from '@jest/types';
+export default function getConfigsOfProjectsToRun(namesOfProjectsToRun: Array<string>, projectConfigs: Array<Config.ProjectConfig>): Array<Config.ProjectConfig>;
diff --git a/node_modules/@jest/core/build/getConfigsOfProjectsToRun.js b/node_modules/@jest/core/build/getConfigsOfProjectsToRun.js
new file mode 100644
index 0000000..9326e30
--- /dev/null
+++ b/node_modules/@jest/core/build/getConfigsOfProjectsToRun.js
@@ -0,0 +1,28 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = getConfigsOfProjectsToRun;
+
+var _getProjectDisplayName = _interopRequireDefault(
+ require('./getProjectDisplayName')
+);
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+function getConfigsOfProjectsToRun(namesOfProjectsToRun, projectConfigs) {
+ const setOfProjectsToRun = new Set(namesOfProjectsToRun);
+ return projectConfigs.filter(config => {
+ const name = (0, _getProjectDisplayName.default)(config);
+ return name && setOfProjectsToRun.has(name);
+ });
+}
diff --git a/node_modules/@jest/core/build/getNoTestFound.d.ts b/node_modules/@jest/core/build/getNoTestFound.d.ts
new file mode 100644
index 0000000..4e30581
--- /dev/null
+++ b/node_modules/@jest/core/build/getNoTestFound.d.ts
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import type { Config } from '@jest/types';
+import type { TestRunData } from './types';
+export default function getNoTestFound(testRunData: TestRunData, globalConfig: Config.GlobalConfig): string;
diff --git a/node_modules/@jest/core/build/getNoTestFound.js b/node_modules/@jest/core/build/getNoTestFound.js
new file mode 100644
index 0000000..bd33d58
--- /dev/null
+++ b/node_modules/@jest/core/build/getNoTestFound.js
@@ -0,0 +1,63 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = getNoTestFound;
+
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+
+ _chalk = function () {
+ return data;
+ };
+
+ return data;
+}
+
+var _pluralize = _interopRequireDefault(require('./pluralize'));
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+function getNoTestFound(testRunData, globalConfig) {
+ const testFiles = testRunData.reduce(
+ (current, testRun) => current + (testRun.matches.total || 0),
+ 0
+ );
+ let dataMessage;
+
+ if (globalConfig.runTestsByPath) {
+ dataMessage = `Files: ${globalConfig.nonFlagArgs
+ .map(p => `"${p}"`)
+ .join(', ')}`;
+ } else {
+ dataMessage = `Pattern: ${_chalk().default.yellow(
+ globalConfig.testPathPattern
+ )} - 0 matches`;
+ }
+
+ return (
+ _chalk().default.bold('No tests found, exiting with code 1') +
+ '\n' +
+ 'Run with `--passWithNoTests` to exit with code 0' +
+ '\n' +
+ `In ${_chalk().default.bold(globalConfig.rootDir)}` +
+ '\n' +
+ ` ${(0, _pluralize.default)('file', testFiles, 's')} checked across ${(0,
+ _pluralize.default)(
+ 'project',
+ testRunData.length,
+ 's'
+ )}. Run with \`--verbose\` for more details.` +
+ '\n' +
+ dataMessage
+ );
+}
diff --git a/node_modules/@jest/core/build/getNoTestFoundFailed.d.ts b/node_modules/@jest/core/build/getNoTestFoundFailed.d.ts
new file mode 100644
index 0000000..16c5fab
--- /dev/null
+++ b/node_modules/@jest/core/build/getNoTestFoundFailed.d.ts
@@ -0,0 +1,8 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import type { Config } from '@jest/types';
+export default function getNoTestFoundFailed(globalConfig: Config.GlobalConfig): string;
diff --git a/node_modules/@jest/core/build/getNoTestFoundFailed.js b/node_modules/@jest/core/build/getNoTestFoundFailed.js
new file mode 100644
index 0000000..a7d404c
--- /dev/null
+++ b/node_modules/@jest/core/build/getNoTestFoundFailed.js
@@ -0,0 +1,51 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = getNoTestFoundFailed;
+
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+
+ _chalk = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestUtil() {
+ const data = require('jest-util');
+
+ _jestUtil = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+function getNoTestFoundFailed(globalConfig) {
+ let msg = _chalk().default.bold('No failed test found.');
+
+ if (_jestUtil().isInteractive) {
+ msg += _chalk().default.dim(
+ '\n' +
+ (globalConfig.watch
+ ? 'Press `f` to quit "only failed tests" mode.'
+ : 'Run Jest without `--onlyFailures` or with `--all` to run all tests.')
+ );
+ }
+
+ return msg;
+}
diff --git a/node_modules/@jest/core/build/getNoTestFoundPassWithNoTests.d.ts b/node_modules/@jest/core/build/getNoTestFoundPassWithNoTests.d.ts
new file mode 100644
index 0000000..a594ba4
--- /dev/null
+++ b/node_modules/@jest/core/build/getNoTestFoundPassWithNoTests.d.ts
@@ -0,0 +1,7 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+export default function getNoTestFoundPassWithNoTests(): string;
diff --git a/node_modules/@jest/core/build/getNoTestFoundPassWithNoTests.js b/node_modules/@jest/core/build/getNoTestFoundPassWithNoTests.js
new file mode 100644
index 0000000..eb279c3
--- /dev/null
+++ b/node_modules/@jest/core/build/getNoTestFoundPassWithNoTests.js
@@ -0,0 +1,30 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = getNoTestFoundPassWithNoTests;
+
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+
+ _chalk = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+function getNoTestFoundPassWithNoTests() {
+ return _chalk().default.bold('No tests found, exiting with code 0');
+}
diff --git a/node_modules/@jest/core/build/getNoTestFoundRelatedToChangedFiles.d.ts b/node_modules/@jest/core/build/getNoTestFoundRelatedToChangedFiles.d.ts
new file mode 100644
index 0000000..53cdefc
--- /dev/null
+++ b/node_modules/@jest/core/build/getNoTestFoundRelatedToChangedFiles.d.ts
@@ -0,0 +1,8 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import type { Config } from '@jest/types';
+export default function getNoTestFoundRelatedToChangedFiles(globalConfig: Config.GlobalConfig): string;
diff --git a/node_modules/@jest/core/build/getNoTestFoundRelatedToChangedFiles.js b/node_modules/@jest/core/build/getNoTestFoundRelatedToChangedFiles.js
new file mode 100644
index 0000000..9571d18
--- /dev/null
+++ b/node_modules/@jest/core/build/getNoTestFoundRelatedToChangedFiles.js
@@ -0,0 +1,57 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = getNoTestFoundRelatedToChangedFiles;
+
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+
+ _chalk = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestUtil() {
+ const data = require('jest-util');
+
+ _jestUtil = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+function getNoTestFoundRelatedToChangedFiles(globalConfig) {
+ const ref = globalConfig.changedSince
+ ? `"${globalConfig.changedSince}"`
+ : 'last commit';
+
+ let msg = _chalk().default.bold(
+ `No tests found related to files changed since ${ref}.`
+ );
+
+ if (_jestUtil().isInteractive) {
+ msg += _chalk().default.dim(
+ '\n' +
+ (globalConfig.watch
+ ? 'Press `a` to run all tests, or run Jest with `--watchAll`.'
+ : 'Run Jest without `-o` or with `--all` to run all tests.')
+ );
+ }
+
+ return msg;
+}
diff --git a/node_modules/@jest/core/build/getNoTestFoundVerbose.d.ts b/node_modules/@jest/core/build/getNoTestFoundVerbose.d.ts
new file mode 100644
index 0000000..a84572a
--- /dev/null
+++ b/node_modules/@jest/core/build/getNoTestFoundVerbose.d.ts
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import type { Config } from '@jest/types';
+import type { TestRunData } from './types';
+export default function getNoTestFoundVerbose(testRunData: TestRunData, globalConfig: Config.GlobalConfig): string;
diff --git a/node_modules/@jest/core/build/getNoTestFoundVerbose.js b/node_modules/@jest/core/build/getNoTestFoundVerbose.js
new file mode 100644
index 0000000..8f1359c
--- /dev/null
+++ b/node_modules/@jest/core/build/getNoTestFoundVerbose.js
@@ -0,0 +1,95 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = getNoTestFoundVerbose;
+
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+
+ _chalk = function () {
+ return data;
+ };
+
+ return data;
+}
+
+var _pluralize = _interopRequireDefault(require('./pluralize'));
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+function getNoTestFoundVerbose(testRunData, globalConfig) {
+ const individualResults = testRunData.map(testRun => {
+ const stats = testRun.matches.stats || {};
+ const config = testRun.context.config;
+ const statsMessage = Object.keys(stats)
+ .map(key => {
+ if (key === 'roots' && config.roots.length === 1) {
+ return null;
+ }
+
+ const value = config[key];
+
+ if (value) {
+ const valueAsString = Array.isArray(value)
+ ? value.join(', ')
+ : String(value);
+ const matches = (0, _pluralize.default)(
+ 'match',
+ stats[key] || 0,
+ 'es'
+ );
+ return ` ${key}: ${_chalk().default.yellow(
+ valueAsString
+ )} - ${matches}`;
+ }
+
+ return null;
+ })
+ .filter(line => line)
+ .join('\n');
+ return testRun.matches.total
+ ? `In ${_chalk().default.bold(config.rootDir)}\n` +
+ ` ${(0, _pluralize.default)(
+ 'file',
+ testRun.matches.total || 0,
+ 's'
+ )} checked.\n` +
+ statsMessage
+ : `No files found in ${config.rootDir}.\n` +
+ "Make sure Jest's configuration does not exclude this directory." +
+ '\nTo set up Jest, make sure a package.json file exists.\n' +
+ 'Jest Documentation: ' +
+ 'https://jestjs.io/docs/configuration';
+ });
+ let dataMessage;
+
+ if (globalConfig.runTestsByPath) {
+ dataMessage = `Files: ${globalConfig.nonFlagArgs
+ .map(p => `"${p}"`)
+ .join(', ')}`;
+ } else {
+ dataMessage = `Pattern: ${_chalk().default.yellow(
+ globalConfig.testPathPattern
+ )} - 0 matches`;
+ }
+
+ return (
+ _chalk().default.bold('No tests found, exiting with code 1') +
+ '\n' +
+ 'Run with `--passWithNoTests` to exit with code 0' +
+ '\n' +
+ individualResults.join('\n') +
+ '\n' +
+ dataMessage
+ );
+}
diff --git a/node_modules/@jest/core/build/getNoTestsFoundMessage.d.ts b/node_modules/@jest/core/build/getNoTestsFoundMessage.d.ts
new file mode 100644
index 0000000..910467e
--- /dev/null
+++ b/node_modules/@jest/core/build/getNoTestsFoundMessage.d.ts
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import type { Config } from '@jest/types';
+import type { TestRunData } from './types';
+export default function getNoTestsFoundMessage(testRunData: TestRunData, globalConfig: Config.GlobalConfig): string;
diff --git a/node_modules/@jest/core/build/getNoTestsFoundMessage.js b/node_modules/@jest/core/build/getNoTestsFoundMessage.js
new file mode 100644
index 0000000..293d092
--- /dev/null
+++ b/node_modules/@jest/core/build/getNoTestsFoundMessage.js
@@ -0,0 +1,52 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = getNoTestsFoundMessage;
+
+var _getNoTestFound = _interopRequireDefault(require('./getNoTestFound'));
+
+var _getNoTestFoundFailed = _interopRequireDefault(
+ require('./getNoTestFoundFailed')
+);
+
+var _getNoTestFoundPassWithNoTests = _interopRequireDefault(
+ require('./getNoTestFoundPassWithNoTests')
+);
+
+var _getNoTestFoundRelatedToChangedFiles = _interopRequireDefault(
+ require('./getNoTestFoundRelatedToChangedFiles')
+);
+
+var _getNoTestFoundVerbose = _interopRequireDefault(
+ require('./getNoTestFoundVerbose')
+);
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+function getNoTestsFoundMessage(testRunData, globalConfig) {
+ if (globalConfig.onlyFailures) {
+ return (0, _getNoTestFoundFailed.default)(globalConfig);
+ }
+
+ if (globalConfig.onlyChanged) {
+ return (0, _getNoTestFoundRelatedToChangedFiles.default)(globalConfig);
+ }
+
+ if (globalConfig.passWithNoTests) {
+ return (0, _getNoTestFoundPassWithNoTests.default)();
+ }
+
+ return testRunData.length === 1 || globalConfig.verbose
+ ? (0, _getNoTestFoundVerbose.default)(testRunData, globalConfig)
+ : (0, _getNoTestFound.default)(testRunData, globalConfig);
+}
diff --git a/node_modules/@jest/core/build/getProjectDisplayName.d.ts b/node_modules/@jest/core/build/getProjectDisplayName.d.ts
new file mode 100644
index 0000000..192e9fe
--- /dev/null
+++ b/node_modules/@jest/core/build/getProjectDisplayName.d.ts
@@ -0,0 +1,8 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import type { Config } from '@jest/types';
+export default function getProjectDisplayName(projectConfig: Config.ProjectConfig): string | undefined;
diff --git a/node_modules/@jest/core/build/getProjectDisplayName.js b/node_modules/@jest/core/build/getProjectDisplayName.js
new file mode 100644
index 0000000..70b7c9e
--- /dev/null
+++ b/node_modules/@jest/core/build/getProjectDisplayName.js
@@ -0,0 +1,23 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = getProjectDisplayName;
+
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+function getProjectDisplayName(projectConfig) {
+ var _projectConfig$displa;
+
+ return (
+ ((_projectConfig$displa = projectConfig.displayName) === null ||
+ _projectConfig$displa === void 0
+ ? void 0
+ : _projectConfig$displa.name) || undefined
+ );
+}
diff --git a/node_modules/@jest/core/build/getProjectNamesMissingWarning.d.ts b/node_modules/@jest/core/build/getProjectNamesMissingWarning.d.ts
new file mode 100644
index 0000000..b2e17cf
--- /dev/null
+++ b/node_modules/@jest/core/build/getProjectNamesMissingWarning.d.ts
@@ -0,0 +1,8 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import type { Config } from '@jest/types';
+export default function getProjectNamesMissingWarning(projectConfigs: Array<Config.ProjectConfig>): string | undefined;
diff --git a/node_modules/@jest/core/build/getProjectNamesMissingWarning.js b/node_modules/@jest/core/build/getProjectNamesMissingWarning.js
new file mode 100644
index 0000000..32ac1e1
--- /dev/null
+++ b/node_modules/@jest/core/build/getProjectNamesMissingWarning.js
@@ -0,0 +1,49 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = getProjectNamesMissingWarning;
+
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+
+ _chalk = function () {
+ return data;
+ };
+
+ return data;
+}
+
+var _getProjectDisplayName = _interopRequireDefault(
+ require('./getProjectDisplayName')
+);
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+function getProjectNamesMissingWarning(projectConfigs) {
+ const numberOfProjectsWithoutAName = projectConfigs.filter(
+ config => !(0, _getProjectDisplayName.default)(config)
+ ).length;
+
+ if (numberOfProjectsWithoutAName === 0) {
+ return undefined;
+ }
+
+ return _chalk().default.yellow(
+ `You provided values for --selectProjects but ${
+ numberOfProjectsWithoutAName === 1
+ ? 'a project does not have a name'
+ : `${numberOfProjectsWithoutAName} projects do not have a name`
+ }.\n` +
+ 'Set displayName in the config of all projects in order to disable this warning.\n'
+ );
+}
diff --git a/node_modules/@jest/core/build/getSelectProjectsMessage.d.ts b/node_modules/@jest/core/build/getSelectProjectsMessage.d.ts
new file mode 100644
index 0000000..21a4cd2
--- /dev/null
+++ b/node_modules/@jest/core/build/getSelectProjectsMessage.d.ts
@@ -0,0 +1,8 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import type { Config } from '@jest/types';
+export default function getSelectProjectsMessage(projectConfigs: Array<Config.ProjectConfig>): string;
diff --git a/node_modules/@jest/core/build/getSelectProjectsMessage.js b/node_modules/@jest/core/build/getSelectProjectsMessage.js
new file mode 100644
index 0000000..5607f69
--- /dev/null
+++ b/node_modules/@jest/core/build/getSelectProjectsMessage.js
@@ -0,0 +1,65 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = getSelectProjectsMessage;
+
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+
+ _chalk = function () {
+ return data;
+ };
+
+ return data;
+}
+
+var _getProjectDisplayName = _interopRequireDefault(
+ require('./getProjectDisplayName')
+);
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+function getSelectProjectsMessage(projectConfigs) {
+ if (projectConfigs.length === 0) {
+ return getNoSelectionWarning();
+ }
+
+ return getProjectsRunningMessage(projectConfigs);
+}
+
+function getNoSelectionWarning() {
+ return _chalk().default.yellow(
+ 'You provided values for --selectProjects but no projects were found matching the selection.\n'
+ );
+}
+
+function getProjectsRunningMessage(projectConfigs) {
+ if (projectConfigs.length === 1) {
+ const name = (0, _getProjectDisplayName.default)(projectConfigs[0]);
+ return `Running one project: ${_chalk().default.bold(name)}\n`;
+ }
+
+ const projectsList = projectConfigs
+ .map(getProjectNameListElement)
+ .sort()
+ .join('\n');
+ return `Running ${projectConfigs.length} projects:\n${projectsList}\n`;
+}
+
+function getProjectNameListElement(projectConfig) {
+ const name = (0, _getProjectDisplayName.default)(projectConfig);
+ const elementContent = name
+ ? _chalk().default.bold(name)
+ : '<unnamed project>';
+ return `- ${elementContent}`;
+}
diff --git a/node_modules/@jest/core/build/jest.d.ts b/node_modules/@jest/core/build/jest.d.ts
new file mode 100644
index 0000000..58b0335
--- /dev/null
+++ b/node_modules/@jest/core/build/jest.d.ts
@@ -0,0 +1,11 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+export { default as SearchSource } from './SearchSource';
+export { createTestScheduler } from './TestScheduler';
+export { default as TestWatcher } from './TestWatcher';
+export { runCLI } from './cli';
+export { default as getVersion } from './version';
diff --git a/node_modules/@jest/core/build/jest.js b/node_modules/@jest/core/build/jest.js
new file mode 100644
index 0000000..d320303
--- /dev/null
+++ b/node_modules/@jest/core/build/jest.js
@@ -0,0 +1,49 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+Object.defineProperty(exports, 'SearchSource', {
+ enumerable: true,
+ get: function () {
+ return _SearchSource.default;
+ }
+});
+Object.defineProperty(exports, 'TestWatcher', {
+ enumerable: true,
+ get: function () {
+ return _TestWatcher.default;
+ }
+});
+Object.defineProperty(exports, 'createTestScheduler', {
+ enumerable: true,
+ get: function () {
+ return _TestScheduler.createTestScheduler;
+ }
+});
+Object.defineProperty(exports, 'getVersion', {
+ enumerable: true,
+ get: function () {
+ return _version.default;
+ }
+});
+Object.defineProperty(exports, 'runCLI', {
+ enumerable: true,
+ get: function () {
+ return _cli.runCLI;
+ }
+});
+
+var _SearchSource = _interopRequireDefault(require('./SearchSource'));
+
+var _TestScheduler = require('./TestScheduler');
+
+var _TestWatcher = _interopRequireDefault(require('./TestWatcher'));
+
+var _cli = require('./cli');
+
+var _version = _interopRequireDefault(require('./version'));
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
diff --git a/node_modules/@jest/core/build/lib/activeFiltersMessage.d.ts b/node_modules/@jest/core/build/lib/activeFiltersMessage.d.ts
new file mode 100644
index 0000000..15f595a
--- /dev/null
+++ b/node_modules/@jest/core/build/lib/activeFiltersMessage.d.ts
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import type { Config } from '@jest/types';
+declare const activeFilters: (globalConfig: Config.GlobalConfig, delimiter?: string) => string;
+export default activeFilters;
diff --git a/node_modules/@jest/core/build/lib/activeFiltersMessage.js b/node_modules/@jest/core/build/lib/activeFiltersMessage.js
new file mode 100644
index 0000000..ff63332
--- /dev/null
+++ b/node_modules/@jest/core/build/lib/activeFiltersMessage.js
@@ -0,0 +1,54 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+
+ _chalk = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+const activeFilters = (globalConfig, delimiter = '\n') => {
+ const {testNamePattern, testPathPattern} = globalConfig;
+
+ if (testNamePattern || testPathPattern) {
+ const filters = [
+ testPathPattern
+ ? _chalk().default.dim('filename ') +
+ _chalk().default.yellow('/' + testPathPattern + '/')
+ : null,
+ testNamePattern
+ ? _chalk().default.dim('test name ') +
+ _chalk().default.yellow('/' + testNamePattern + '/')
+ : null
+ ]
+ .filter(f => f)
+ .join(', ');
+ const messages = [
+ '\n' + _chalk().default.bold('Active Filters: ') + filters
+ ];
+ return messages.filter(message => !!message).join(delimiter);
+ }
+
+ return '';
+};
+
+var _default = activeFilters;
+exports.default = _default;
diff --git a/node_modules/@jest/core/build/lib/createContext.d.ts b/node_modules/@jest/core/build/lib/createContext.d.ts
new file mode 100644
index 0000000..c98a3ef
--- /dev/null
+++ b/node_modules/@jest/core/build/lib/createContext.d.ts
@@ -0,0 +1,10 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import type { Config } from '@jest/types';
+import type { HasteMapObject } from 'jest-haste-map';
+import { Context } from 'jest-runtime';
+export default function createContext(config: Config.ProjectConfig, { hasteFS, moduleMap }: HasteMapObject): Context;
diff --git a/node_modules/@jest/core/build/lib/createContext.js b/node_modules/@jest/core/build/lib/createContext.js
new file mode 100644
index 0000000..b360e9c
--- /dev/null
+++ b/node_modules/@jest/core/build/lib/createContext.js
@@ -0,0 +1,35 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = createContext;
+
+function _jestRuntime() {
+ const data = _interopRequireDefault(require('jest-runtime'));
+
+ _jestRuntime = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+function createContext(config, {hasteFS, moduleMap}) {
+ return {
+ config,
+ hasteFS,
+ moduleMap,
+ resolver: _jestRuntime().default.createResolver(config, moduleMap)
+ };
+}
diff --git a/node_modules/@jest/core/build/lib/handleDeprecationWarnings.d.ts b/node_modules/@jest/core/build/lib/handleDeprecationWarnings.d.ts
new file mode 100644
index 0000000..8d2151e
--- /dev/null
+++ b/node_modules/@jest/core/build/lib/handleDeprecationWarnings.d.ts
@@ -0,0 +1,8 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+/// <reference types="node" />
+export default function handleDeprecationWarnings(pipe: NodeJS.WriteStream, stdin?: NodeJS.ReadStream): Promise<void>;
diff --git a/node_modules/@jest/core/build/lib/handleDeprecationWarnings.js b/node_modules/@jest/core/build/lib/handleDeprecationWarnings.js
new file mode 100644
index 0000000..f0a15d6
--- /dev/null
+++ b/node_modules/@jest/core/build/lib/handleDeprecationWarnings.js
@@ -0,0 +1,72 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = handleDeprecationWarnings;
+
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+
+ _chalk = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestWatcher() {
+ const data = require('jest-watcher');
+
+ _jestWatcher = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+function handleDeprecationWarnings(pipe, stdin = process.stdin) {
+ return new Promise((resolve, reject) => {
+ if (typeof stdin.setRawMode === 'function') {
+ const messages = [
+ _chalk().default.red('There are deprecation warnings.\n'),
+ _chalk().default.dim(' \u203A Press ') +
+ 'Enter' +
+ _chalk().default.dim(' to continue.'),
+ _chalk().default.dim(' \u203A Press ') +
+ 'Esc' +
+ _chalk().default.dim(' to exit.')
+ ];
+ pipe.write(messages.join('\n'));
+ stdin.setRawMode(true);
+ stdin.resume();
+ stdin.setEncoding('utf8'); // this is a string since we set encoding above
+
+ stdin.on('data', key => {
+ if (key === _jestWatcher().KEYS.ENTER) {
+ resolve();
+ } else if (
+ [
+ _jestWatcher().KEYS.ESCAPE,
+ _jestWatcher().KEYS.CONTROL_C,
+ _jestWatcher().KEYS.CONTROL_D
+ ].indexOf(key) !== -1
+ ) {
+ reject();
+ }
+ });
+ } else {
+ resolve();
+ }
+ });
+}
diff --git a/node_modules/@jest/core/build/lib/isValidPath.d.ts b/node_modules/@jest/core/build/lib/isValidPath.d.ts
new file mode 100644
index 0000000..d81880a
--- /dev/null
+++ b/node_modules/@jest/core/build/lib/isValidPath.d.ts
@@ -0,0 +1,8 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import type { Config } from '@jest/types';
+export default function isValidPath(globalConfig: Config.GlobalConfig, filePath: Config.Path): boolean;
diff --git a/node_modules/@jest/core/build/lib/isValidPath.js b/node_modules/@jest/core/build/lib/isValidPath.js
new file mode 100644
index 0000000..10971d3
--- /dev/null
+++ b/node_modules/@jest/core/build/lib/isValidPath.js
@@ -0,0 +1,29 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = isValidPath;
+
+function _jestSnapshot() {
+ const data = require('jest-snapshot');
+
+ _jestSnapshot = function () {
+ return data;
+ };
+
+ return data;
+}
+
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+function isValidPath(globalConfig, filePath) {
+ return (
+ !filePath.includes(globalConfig.coverageDirectory) &&
+ !(0, _jestSnapshot().isSnapshotPath)(filePath)
+ );
+}
diff --git a/node_modules/@jest/core/build/lib/logDebugMessages.d.ts b/node_modules/@jest/core/build/lib/logDebugMessages.d.ts
new file mode 100644
index 0000000..b312cd9
--- /dev/null
+++ b/node_modules/@jest/core/build/lib/logDebugMessages.d.ts
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+/// <reference types="node" />
+import type { Config } from '@jest/types';
+export default function logDebugMessages(globalConfig: Config.GlobalConfig, configs: Array<Config.ProjectConfig> | Config.ProjectConfig, outputStream: NodeJS.WriteStream): void;
diff --git a/node_modules/@jest/core/build/lib/logDebugMessages.js b/node_modules/@jest/core/build/lib/logDebugMessages.js
new file mode 100644
index 0000000..9c1f2f5
--- /dev/null
+++ b/node_modules/@jest/core/build/lib/logDebugMessages.js
@@ -0,0 +1,23 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = logDebugMessages;
+
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+const VERSION = require('../../package.json').version; // if the output here changes, update `getConfig` in e2e/runJest.ts
+
+function logDebugMessages(globalConfig, configs, outputStream) {
+ const output = {
+ configs,
+ globalConfig,
+ version: VERSION
+ };
+ outputStream.write(JSON.stringify(output, null, ' ') + '\n');
+}
diff --git a/node_modules/@jest/core/build/lib/updateGlobalConfig.d.ts b/node_modules/@jest/core/build/lib/updateGlobalConfig.d.ts
new file mode 100644
index 0000000..8282936
--- /dev/null
+++ b/node_modules/@jest/core/build/lib/updateGlobalConfig.d.ts
@@ -0,0 +1,11 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import type { Config } from '@jest/types';
+import type { AllowedConfigOptions } from 'jest-watcher';
+declare type ExtraConfigOptions = Partial<Pick<Config.GlobalConfig, 'noSCM' | 'passWithNoTests'>>;
+export default function updateGlobalConfig(globalConfig: Config.GlobalConfig, options?: AllowedConfigOptions & ExtraConfigOptions): Config.GlobalConfig;
+export {};
diff --git a/node_modules/@jest/core/build/lib/updateGlobalConfig.js b/node_modules/@jest/core/build/lib/updateGlobalConfig.js
new file mode 100644
index 0000000..5c49586
--- /dev/null
+++ b/node_modules/@jest/core/build/lib/updateGlobalConfig.js
@@ -0,0 +1,121 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = updateGlobalConfig;
+
+function _jestRegexUtil() {
+ const data = require('jest-regex-util');
+
+ _jestRegexUtil = function () {
+ return data;
+ };
+
+ return data;
+}
+
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+function updateGlobalConfig(globalConfig, options = {}) {
+ const newConfig = {...globalConfig};
+
+ if (options.mode === 'watch') {
+ newConfig.watch = true;
+ newConfig.watchAll = false;
+ } else if (options.mode === 'watchAll') {
+ newConfig.watch = false;
+ newConfig.watchAll = true;
+ }
+
+ if (options.testNamePattern !== undefined) {
+ newConfig.testNamePattern = options.testNamePattern || '';
+ }
+
+ if (options.testPathPattern !== undefined) {
+ newConfig.testPathPattern =
+ (0, _jestRegexUtil().replacePathSepForRegex)(options.testPathPattern) ||
+ '';
+ }
+
+ newConfig.onlyChanged =
+ !newConfig.watchAll &&
+ !newConfig.testNamePattern &&
+ !newConfig.testPathPattern;
+
+ if (typeof options.bail === 'boolean') {
+ newConfig.bail = options.bail ? 1 : 0;
+ } else if (options.bail !== undefined) {
+ newConfig.bail = options.bail;
+ }
+
+ if (options.changedSince !== undefined) {
+ newConfig.changedSince = options.changedSince;
+ }
+
+ if (options.collectCoverage !== undefined) {
+ newConfig.collectCoverage = options.collectCoverage || false;
+ }
+
+ if (options.collectCoverageFrom !== undefined) {
+ newConfig.collectCoverageFrom = options.collectCoverageFrom;
+ }
+
+ if (options.collectCoverageOnlyFrom !== undefined) {
+ newConfig.collectCoverageOnlyFrom = options.collectCoverageOnlyFrom;
+ }
+
+ if (options.coverageDirectory !== undefined) {
+ newConfig.coverageDirectory = options.coverageDirectory;
+ }
+
+ if (options.coverageReporters !== undefined) {
+ newConfig.coverageReporters = options.coverageReporters;
+ }
+
+ if (options.findRelatedTests !== undefined) {
+ newConfig.findRelatedTests = options.findRelatedTests;
+ }
+
+ if (options.nonFlagArgs !== undefined) {
+ newConfig.nonFlagArgs = options.nonFlagArgs;
+ }
+
+ if (options.noSCM) {
+ newConfig.noSCM = true;
+ }
+
+ if (options.notify !== undefined) {
+ newConfig.notify = options.notify || false;
+ }
+
+ if (options.notifyMode !== undefined) {
+ newConfig.notifyMode = options.notifyMode;
+ }
+
+ if (options.onlyFailures !== undefined) {
+ newConfig.onlyFailures = options.onlyFailures || false;
+ }
+
+ if (options.passWithNoTests !== undefined) {
+ newConfig.passWithNoTests = true;
+ }
+
+ if (options.reporters !== undefined) {
+ newConfig.reporters = options.reporters;
+ }
+
+ if (options.updateSnapshot !== undefined) {
+ newConfig.updateSnapshot = options.updateSnapshot;
+ }
+
+ if (options.verbose !== undefined) {
+ newConfig.verbose = options.verbose || false;
+ }
+
+ return Object.freeze(newConfig);
+}
diff --git a/node_modules/@jest/core/build/lib/watchPluginsHelpers.d.ts b/node_modules/@jest/core/build/lib/watchPluginsHelpers.d.ts
new file mode 100644
index 0000000..99e8d7f
--- /dev/null
+++ b/node_modules/@jest/core/build/lib/watchPluginsHelpers.d.ts
@@ -0,0 +1,10 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import type { Config } from '@jest/types';
+import type { UsageData, WatchPlugin } from 'jest-watcher';
+export declare const filterInteractivePlugins: (watchPlugins: Array<WatchPlugin>, globalConfig: Config.GlobalConfig) => Array<WatchPlugin>;
+export declare const getSortedUsageRows: (watchPlugins: Array<WatchPlugin>, globalConfig: Config.GlobalConfig) => Array<UsageData>;
diff --git a/node_modules/@jest/core/build/lib/watchPluginsHelpers.js b/node_modules/@jest/core/build/lib/watchPluginsHelpers.js
new file mode 100644
index 0000000..9f595ce
--- /dev/null
+++ b/node_modules/@jest/core/build/lib/watchPluginsHelpers.js
@@ -0,0 +1,62 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.getSortedUsageRows = exports.filterInteractivePlugins = void 0;
+
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+const filterInteractivePlugins = (watchPlugins, globalConfig) => {
+ const usageInfos = watchPlugins.map(
+ p => p.getUsageInfo && p.getUsageInfo(globalConfig)
+ );
+ return watchPlugins.filter((_plugin, i) => {
+ const usageInfo = usageInfos[i];
+
+ if (usageInfo) {
+ const {key} = usageInfo;
+ return !usageInfos.slice(i + 1).some(u => !!u && key === u.key);
+ }
+
+ return false;
+ });
+};
+
+exports.filterInteractivePlugins = filterInteractivePlugins;
+
+function notEmpty(value) {
+ return value != null;
+}
+
+const getSortedUsageRows = (watchPlugins, globalConfig) =>
+ filterInteractivePlugins(watchPlugins, globalConfig)
+ .sort((a, b) => {
+ if (a.isInternal && b.isInternal) {
+ // internal plugins in the order we specify them
+ return 0;
+ }
+
+ if (a.isInternal !== b.isInternal) {
+ // external plugins afterwards
+ return a.isInternal ? -1 : 1;
+ }
+
+ const usageInfoA = a.getUsageInfo && a.getUsageInfo(globalConfig);
+ const usageInfoB = b.getUsageInfo && b.getUsageInfo(globalConfig);
+
+ if (usageInfoA && usageInfoB) {
+ // external plugins in alphabetical order
+ return usageInfoA.key.localeCompare(usageInfoB.key);
+ }
+
+ return 0;
+ })
+ .map(p => p.getUsageInfo && p.getUsageInfo(globalConfig))
+ .filter(notEmpty);
+
+exports.getSortedUsageRows = getSortedUsageRows;
diff --git a/node_modules/@jest/core/build/plugins/FailedTestsInteractive.d.ts b/node_modules/@jest/core/build/plugins/FailedTestsInteractive.d.ts
new file mode 100644
index 0000000..d696181
--- /dev/null
+++ b/node_modules/@jest/core/build/plugins/FailedTestsInteractive.d.ts
@@ -0,0 +1,17 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import type { Config } from '@jest/types';
+import { BaseWatchPlugin, JestHookSubscriber, UpdateConfigCallback, UsageData } from 'jest-watcher';
+export default class FailedTestsInteractivePlugin extends BaseWatchPlugin {
+ private _failedTestAssertions?;
+ private readonly _manager;
+ apply(hooks: JestHookSubscriber): void;
+ getUsageInfo(): UsageData | null;
+ onKey(key: string): void;
+ run(_: Config.GlobalConfig, updateConfigAndRun: UpdateConfigCallback): Promise<void>;
+ private getFailedTestAssertions;
+}
diff --git a/node_modules/@jest/core/build/plugins/FailedTestsInteractive.js b/node_modules/@jest/core/build/plugins/FailedTestsInteractive.js
new file mode 100644
index 0000000..a830abe
--- /dev/null
+++ b/node_modules/@jest/core/build/plugins/FailedTestsInteractive.js
@@ -0,0 +1,135 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+
+function _jestWatcher() {
+ const data = require('jest-watcher');
+
+ _jestWatcher = function () {
+ return data;
+ };
+
+ return data;
+}
+
+var _FailedTestsInteractiveMode = _interopRequireDefault(
+ require('../FailedTestsInteractiveMode')
+);
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+function _defineProperty(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+}
+
+class FailedTestsInteractivePlugin extends _jestWatcher().BaseWatchPlugin {
+ constructor(...args) {
+ super(...args);
+
+ _defineProperty(this, '_failedTestAssertions', void 0);
+
+ _defineProperty(
+ this,
+ '_manager',
+ new _FailedTestsInteractiveMode.default(this._stdout)
+ );
+ }
+
+ apply(hooks) {
+ hooks.onTestRunComplete(results => {
+ this._failedTestAssertions = this.getFailedTestAssertions(results);
+ if (this._manager.isActive()) this._manager.updateWithResults(results);
+ });
+ }
+
+ getUsageInfo() {
+ var _this$_failedTestAsse;
+
+ if (
+ (_this$_failedTestAsse = this._failedTestAssertions) !== null &&
+ _this$_failedTestAsse !== void 0 &&
+ _this$_failedTestAsse.length
+ ) {
+ return {
+ key: 'i',
+ prompt: 'run failing tests interactively'
+ };
+ }
+
+ return null;
+ }
+
+ onKey(key) {
+ if (this._manager.isActive()) {
+ this._manager.put(key);
+ }
+ }
+
+ run(_, updateConfigAndRun) {
+ return new Promise(resolve => {
+ if (
+ !this._failedTestAssertions ||
+ this._failedTestAssertions.length === 0
+ ) {
+ resolve();
+ return;
+ }
+
+ this._manager.run(this._failedTestAssertions, failure => {
+ updateConfigAndRun({
+ mode: 'watch',
+ testNamePattern: failure ? `^${failure.fullName}$` : '',
+ testPathPattern:
+ (failure === null || failure === void 0 ? void 0 : failure.path) ||
+ ''
+ });
+
+ if (!this._manager.isActive()) {
+ resolve();
+ }
+ });
+ });
+ }
+
+ getFailedTestAssertions(results) {
+ const failedTestPaths = [];
+
+ if (
+ // skip if no failed tests
+ results.numFailedTests === 0 || // skip if missing test results
+ !results.testResults || // skip if unmatched snapshots are present
+ results.snapshot.unmatched
+ ) {
+ return failedTestPaths;
+ }
+
+ results.testResults.forEach(testResult => {
+ testResult.testResults.forEach(result => {
+ if (result.status === 'failed') {
+ failedTestPaths.push({
+ fullName: result.fullName,
+ path: testResult.testFilePath
+ });
+ }
+ });
+ });
+ return failedTestPaths;
+ }
+}
+
+exports.default = FailedTestsInteractivePlugin;
diff --git a/node_modules/@jest/core/build/plugins/Quit.d.ts b/node_modules/@jest/core/build/plugins/Quit.d.ts
new file mode 100644
index 0000000..e865612
--- /dev/null
+++ b/node_modules/@jest/core/build/plugins/Quit.d.ts
@@ -0,0 +1,18 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+/// <reference types="node" />
+import { BaseWatchPlugin, UsageData } from 'jest-watcher';
+declare class QuitPlugin extends BaseWatchPlugin {
+ isInternal: true;
+ constructor(options: {
+ stdin: NodeJS.ReadStream;
+ stdout: NodeJS.WriteStream;
+ });
+ run(): Promise<void>;
+ getUsageInfo(): UsageData;
+}
+export default QuitPlugin;
diff --git a/node_modules/@jest/core/build/plugins/Quit.js b/node_modules/@jest/core/build/plugins/Quit.js
new file mode 100644
index 0000000..e643a2b
--- /dev/null
+++ b/node_modules/@jest/core/build/plugins/Quit.js
@@ -0,0 +1,60 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+
+function _jestWatcher() {
+ const data = require('jest-watcher');
+
+ _jestWatcher = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _defineProperty(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+}
+
+class QuitPlugin extends _jestWatcher().BaseWatchPlugin {
+ constructor(options) {
+ super(options);
+
+ _defineProperty(this, 'isInternal', void 0);
+
+ this.isInternal = true;
+ }
+
+ async run() {
+ if (typeof this._stdin.setRawMode === 'function') {
+ this._stdin.setRawMode(false);
+ }
+
+ this._stdout.write('\n');
+
+ process.exit(0);
+ }
+
+ getUsageInfo() {
+ return {
+ key: 'q',
+ prompt: 'quit watch mode'
+ };
+ }
+}
+
+var _default = QuitPlugin;
+exports.default = _default;
diff --git a/node_modules/@jest/core/build/plugins/TestNamePattern.d.ts b/node_modules/@jest/core/build/plugins/TestNamePattern.d.ts
new file mode 100644
index 0000000..dc0409a
--- /dev/null
+++ b/node_modules/@jest/core/build/plugins/TestNamePattern.d.ts
@@ -0,0 +1,21 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+/// <reference types="node" />
+import type { Config } from '@jest/types';
+import { BaseWatchPlugin, Prompt, UpdateConfigCallback, UsageData } from 'jest-watcher';
+declare class TestNamePatternPlugin extends BaseWatchPlugin {
+ _prompt: Prompt;
+ isInternal: true;
+ constructor(options: {
+ stdin: NodeJS.ReadStream;
+ stdout: NodeJS.WriteStream;
+ });
+ getUsageInfo(): UsageData;
+ onKey(key: string): void;
+ run(globalConfig: Config.GlobalConfig, updateConfigAndRun: UpdateConfigCallback): Promise<void>;
+}
+export default TestNamePatternPlugin;
diff --git a/node_modules/@jest/core/build/plugins/TestNamePattern.js b/node_modules/@jest/core/build/plugins/TestNamePattern.js
new file mode 100644
index 0000000..ac60851
--- /dev/null
+++ b/node_modules/@jest/core/build/plugins/TestNamePattern.js
@@ -0,0 +1,91 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+
+function _jestWatcher() {
+ const data = require('jest-watcher');
+
+ _jestWatcher = function () {
+ return data;
+ };
+
+ return data;
+}
+
+var _TestNamePatternPrompt = _interopRequireDefault(
+ require('../TestNamePatternPrompt')
+);
+
+var _activeFiltersMessage = _interopRequireDefault(
+ require('../lib/activeFiltersMessage')
+);
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+function _defineProperty(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+}
+
+class TestNamePatternPlugin extends _jestWatcher().BaseWatchPlugin {
+ constructor(options) {
+ super(options);
+
+ _defineProperty(this, '_prompt', void 0);
+
+ _defineProperty(this, 'isInternal', void 0);
+
+ this._prompt = new (_jestWatcher().Prompt)();
+ this.isInternal = true;
+ }
+
+ getUsageInfo() {
+ return {
+ key: 't',
+ prompt: 'filter by a test name regex pattern'
+ };
+ }
+
+ onKey(key) {
+ this._prompt.put(key);
+ }
+
+ run(globalConfig, updateConfigAndRun) {
+ return new Promise((res, rej) => {
+ const testNamePatternPrompt = new _TestNamePatternPrompt.default(
+ this._stdout,
+ this._prompt
+ );
+ testNamePatternPrompt.run(
+ value => {
+ updateConfigAndRun({
+ mode: 'watch',
+ testNamePattern: value
+ });
+ res();
+ },
+ rej,
+ {
+ header: (0, _activeFiltersMessage.default)(globalConfig)
+ }
+ );
+ });
+ }
+}
+
+var _default = TestNamePatternPlugin;
+exports.default = _default;
diff --git a/node_modules/@jest/core/build/plugins/TestPathPattern.d.ts b/node_modules/@jest/core/build/plugins/TestPathPattern.d.ts
new file mode 100644
index 0000000..9eefab9
--- /dev/null
+++ b/node_modules/@jest/core/build/plugins/TestPathPattern.d.ts
@@ -0,0 +1,21 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+/// <reference types="node" />
+import type { Config } from '@jest/types';
+import { BaseWatchPlugin, UpdateConfigCallback, UsageData } from 'jest-watcher';
+declare class TestPathPatternPlugin extends BaseWatchPlugin {
+ private _prompt;
+ isInternal: true;
+ constructor(options: {
+ stdin: NodeJS.ReadStream;
+ stdout: NodeJS.WriteStream;
+ });
+ getUsageInfo(): UsageData;
+ onKey(key: string): void;
+ run(globalConfig: Config.GlobalConfig, updateConfigAndRun: UpdateConfigCallback): Promise<void>;
+}
+export default TestPathPatternPlugin;
diff --git a/node_modules/@jest/core/build/plugins/TestPathPattern.js b/node_modules/@jest/core/build/plugins/TestPathPattern.js
new file mode 100644
index 0000000..5c5c4b7
--- /dev/null
+++ b/node_modules/@jest/core/build/plugins/TestPathPattern.js
@@ -0,0 +1,91 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+
+function _jestWatcher() {
+ const data = require('jest-watcher');
+
+ _jestWatcher = function () {
+ return data;
+ };
+
+ return data;
+}
+
+var _TestPathPatternPrompt = _interopRequireDefault(
+ require('../TestPathPatternPrompt')
+);
+
+var _activeFiltersMessage = _interopRequireDefault(
+ require('../lib/activeFiltersMessage')
+);
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+function _defineProperty(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+}
+
+class TestPathPatternPlugin extends _jestWatcher().BaseWatchPlugin {
+ constructor(options) {
+ super(options);
+
+ _defineProperty(this, '_prompt', void 0);
+
+ _defineProperty(this, 'isInternal', void 0);
+
+ this._prompt = new (_jestWatcher().Prompt)();
+ this.isInternal = true;
+ }
+
+ getUsageInfo() {
+ return {
+ key: 'p',
+ prompt: 'filter by a filename regex pattern'
+ };
+ }
+
+ onKey(key) {
+ this._prompt.put(key);
+ }
+
+ run(globalConfig, updateConfigAndRun) {
+ return new Promise((res, rej) => {
+ const testPathPatternPrompt = new _TestPathPatternPrompt.default(
+ this._stdout,
+ this._prompt
+ );
+ testPathPatternPrompt.run(
+ value => {
+ updateConfigAndRun({
+ mode: 'watch',
+ testPathPattern: value
+ });
+ res();
+ },
+ rej,
+ {
+ header: (0, _activeFiltersMessage.default)(globalConfig)
+ }
+ );
+ });
+ }
+}
+
+var _default = TestPathPatternPlugin;
+exports.default = _default;
diff --git a/node_modules/@jest/core/build/plugins/UpdateSnapshots.d.ts b/node_modules/@jest/core/build/plugins/UpdateSnapshots.d.ts
new file mode 100644
index 0000000..3eff4c2
--- /dev/null
+++ b/node_modules/@jest/core/build/plugins/UpdateSnapshots.d.ts
@@ -0,0 +1,21 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+/// <reference types="node" />
+import type { Config } from '@jest/types';
+import { BaseWatchPlugin, JestHookSubscriber, UpdateConfigCallback, UsageData } from 'jest-watcher';
+declare class UpdateSnapshotsPlugin extends BaseWatchPlugin {
+ private _hasSnapshotFailure;
+ isInternal: true;
+ constructor(options: {
+ stdin: NodeJS.ReadStream;
+ stdout: NodeJS.WriteStream;
+ });
+ run(_globalConfig: Config.GlobalConfig, updateConfigAndRun: UpdateConfigCallback): Promise<boolean>;
+ apply(hooks: JestHookSubscriber): void;
+ getUsageInfo(): UsageData | null;
+}
+export default UpdateSnapshotsPlugin;
diff --git a/node_modules/@jest/core/build/plugins/UpdateSnapshots.js b/node_modules/@jest/core/build/plugins/UpdateSnapshots.js
new file mode 100644
index 0000000..c2a9de7
--- /dev/null
+++ b/node_modules/@jest/core/build/plugins/UpdateSnapshots.js
@@ -0,0 +1,70 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+
+function _jestWatcher() {
+ const data = require('jest-watcher');
+
+ _jestWatcher = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _defineProperty(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+}
+
+class UpdateSnapshotsPlugin extends _jestWatcher().BaseWatchPlugin {
+ constructor(options) {
+ super(options);
+
+ _defineProperty(this, '_hasSnapshotFailure', void 0);
+
+ _defineProperty(this, 'isInternal', void 0);
+
+ this.isInternal = true;
+ this._hasSnapshotFailure = false;
+ }
+
+ run(_globalConfig, updateConfigAndRun) {
+ updateConfigAndRun({
+ updateSnapshot: 'all'
+ });
+ return Promise.resolve(false);
+ }
+
+ apply(hooks) {
+ hooks.onTestRunComplete(results => {
+ this._hasSnapshotFailure = results.snapshot.failure;
+ });
+ }
+
+ getUsageInfo() {
+ if (this._hasSnapshotFailure) {
+ return {
+ key: 'u',
+ prompt: 'update failing snapshots'
+ };
+ }
+
+ return null;
+ }
+}
+
+var _default = UpdateSnapshotsPlugin;
+exports.default = _default;
diff --git a/node_modules/@jest/core/build/plugins/UpdateSnapshotsInteractive.d.ts b/node_modules/@jest/core/build/plugins/UpdateSnapshotsInteractive.d.ts
new file mode 100644
index 0000000..c6a60e6
--- /dev/null
+++ b/node_modules/@jest/core/build/plugins/UpdateSnapshotsInteractive.d.ts
@@ -0,0 +1,20 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import type { AggregatedResult, AssertionLocation } from '@jest/test-result';
+import type { Config } from '@jest/types';
+import { BaseWatchPlugin, JestHookSubscriber, UsageData } from 'jest-watcher';
+declare class UpdateSnapshotInteractivePlugin extends BaseWatchPlugin {
+ private _snapshotInteractiveMode;
+ private _failedSnapshotTestAssertions;
+ isInternal: true;
+ getFailedSnapshotTestAssertions(testResults: AggregatedResult): Array<AssertionLocation>;
+ apply(hooks: JestHookSubscriber): void;
+ onKey(key: string): void;
+ run(_globalConfig: Config.GlobalConfig, updateConfigAndRun: Function): Promise<void>;
+ getUsageInfo(): UsageData | null;
+}
+export default UpdateSnapshotInteractivePlugin;
diff --git a/node_modules/@jest/core/build/plugins/UpdateSnapshotsInteractive.js b/node_modules/@jest/core/build/plugins/UpdateSnapshotsInteractive.js
new file mode 100644
index 0000000..5346bc3
--- /dev/null
+++ b/node_modules/@jest/core/build/plugins/UpdateSnapshotsInteractive.js
@@ -0,0 +1,138 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+
+function _jestWatcher() {
+ const data = require('jest-watcher');
+
+ _jestWatcher = function () {
+ return data;
+ };
+
+ return data;
+}
+
+var _SnapshotInteractiveMode = _interopRequireDefault(
+ require('../SnapshotInteractiveMode')
+);
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+function _defineProperty(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+}
+
+class UpdateSnapshotInteractivePlugin extends _jestWatcher().BaseWatchPlugin {
+ constructor(...args) {
+ super(...args);
+
+ _defineProperty(
+ this,
+ '_snapshotInteractiveMode',
+ new _SnapshotInteractiveMode.default(this._stdout)
+ );
+
+ _defineProperty(this, '_failedSnapshotTestAssertions', []);
+
+ _defineProperty(this, 'isInternal', true);
+ }
+
+ getFailedSnapshotTestAssertions(testResults) {
+ const failedTestPaths = [];
+
+ if (testResults.numFailedTests === 0 || !testResults.testResults) {
+ return failedTestPaths;
+ }
+
+ testResults.testResults.forEach(testResult => {
+ if (testResult.snapshot && testResult.snapshot.unmatched) {
+ testResult.testResults.forEach(result => {
+ if (result.status === 'failed') {
+ failedTestPaths.push({
+ fullName: result.fullName,
+ path: testResult.testFilePath
+ });
+ }
+ });
+ }
+ });
+ return failedTestPaths;
+ }
+
+ apply(hooks) {
+ hooks.onTestRunComplete(results => {
+ this._failedSnapshotTestAssertions =
+ this.getFailedSnapshotTestAssertions(results);
+
+ if (this._snapshotInteractiveMode.isActive()) {
+ this._snapshotInteractiveMode.updateWithResults(results);
+ }
+ });
+ }
+
+ onKey(key) {
+ if (this._snapshotInteractiveMode.isActive()) {
+ this._snapshotInteractiveMode.put(key);
+ }
+ }
+
+ run(_globalConfig, updateConfigAndRun) {
+ if (this._failedSnapshotTestAssertions.length) {
+ return new Promise(res => {
+ this._snapshotInteractiveMode.run(
+ this._failedSnapshotTestAssertions,
+ (assertion, shouldUpdateSnapshot) => {
+ updateConfigAndRun({
+ mode: 'watch',
+ testNamePattern: assertion ? `^${assertion.fullName}$` : '',
+ testPathPattern: assertion ? assertion.path : '',
+ updateSnapshot: shouldUpdateSnapshot ? 'all' : 'none'
+ });
+
+ if (!this._snapshotInteractiveMode.isActive()) {
+ res();
+ }
+ }
+ );
+ });
+ } else {
+ return Promise.resolve();
+ }
+ }
+
+ getUsageInfo() {
+ var _this$_failedSnapshot;
+
+ if (
+ ((_this$_failedSnapshot = this._failedSnapshotTestAssertions) === null ||
+ _this$_failedSnapshot === void 0
+ ? void 0
+ : _this$_failedSnapshot.length) > 0
+ ) {
+ return {
+ key: 'i',
+ prompt: 'update failing snapshots interactively'
+ };
+ }
+
+ return null;
+ }
+}
+
+var _default = UpdateSnapshotInteractivePlugin;
+exports.default = _default;
diff --git a/node_modules/@jest/core/build/pluralize.d.ts b/node_modules/@jest/core/build/pluralize.d.ts
new file mode 100644
index 0000000..a4e01ce
--- /dev/null
+++ b/node_modules/@jest/core/build/pluralize.d.ts
@@ -0,0 +1,7 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+export default function pluralize(word: string, count: number, ending: string): string;
diff --git a/node_modules/@jest/core/build/pluralize.js b/node_modules/@jest/core/build/pluralize.js
new file mode 100644
index 0000000..08695e5
--- /dev/null
+++ b/node_modules/@jest/core/build/pluralize.js
@@ -0,0 +1,16 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = pluralize;
+
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+function pluralize(word, count, ending) {
+ return `${count} ${word}${count === 1 ? '' : ending}`;
+}
diff --git a/node_modules/@jest/core/build/runGlobalHook.d.ts b/node_modules/@jest/core/build/runGlobalHook.d.ts
new file mode 100644
index 0000000..726baf0
--- /dev/null
+++ b/node_modules/@jest/core/build/runGlobalHook.d.ts
@@ -0,0 +1,13 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import type { Test } from '@jest/test-result';
+import type { Config } from '@jest/types';
+export default function runGlobalHook({ allTests, globalConfig, moduleName, }: {
+ allTests: Array<Test>;
+ globalConfig: Config.GlobalConfig;
+ moduleName: 'globalSetup' | 'globalTeardown';
+}): Promise<void>;
diff --git a/node_modules/@jest/core/build/runGlobalHook.js b/node_modules/@jest/core/build/runGlobalHook.js
new file mode 100644
index 0000000..c4ebdbd
--- /dev/null
+++ b/node_modules/@jest/core/build/runGlobalHook.js
@@ -0,0 +1,143 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = runGlobalHook;
+
+function util() {
+ const data = _interopRequireWildcard(require('util'));
+
+ util = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _transform() {
+ const data = require('@jest/transform');
+
+ _transform = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _prettyFormat() {
+ const data = _interopRequireDefault(require('pretty-format'));
+
+ _prettyFormat = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+function _getRequireWildcardCache(nodeInterop) {
+ if (typeof WeakMap !== 'function') return null;
+ var cacheBabelInterop = new WeakMap();
+ var cacheNodeInterop = new WeakMap();
+ return (_getRequireWildcardCache = function (nodeInterop) {
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
+ })(nodeInterop);
+}
+
+function _interopRequireWildcard(obj, nodeInterop) {
+ if (!nodeInterop && obj && obj.__esModule) {
+ return obj;
+ }
+ if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) {
+ return {default: obj};
+ }
+ var cache = _getRequireWildcardCache(nodeInterop);
+ if (cache && cache.has(obj)) {
+ return cache.get(obj);
+ }
+ var newObj = {};
+ var hasPropertyDescriptor =
+ Object.defineProperty && Object.getOwnPropertyDescriptor;
+ for (var key in obj) {
+ if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) {
+ var desc = hasPropertyDescriptor
+ ? Object.getOwnPropertyDescriptor(obj, key)
+ : null;
+ if (desc && (desc.get || desc.set)) {
+ Object.defineProperty(newObj, key, desc);
+ } else {
+ newObj[key] = obj[key];
+ }
+ }
+ }
+ newObj.default = obj;
+ if (cache) {
+ cache.set(obj, newObj);
+ }
+ return newObj;
+}
+
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+async function runGlobalHook({allTests, globalConfig, moduleName}) {
+ const globalModulePaths = new Set(
+ allTests.map(test => test.context.config[moduleName])
+ );
+
+ if (globalConfig[moduleName]) {
+ globalModulePaths.add(globalConfig[moduleName]);
+ }
+
+ if (globalModulePaths.size > 0) {
+ for (const modulePath of globalModulePaths) {
+ if (!modulePath) {
+ continue;
+ }
+
+ const correctConfig = allTests.find(
+ t => t.context.config[moduleName] === modulePath
+ );
+ const projectConfig = correctConfig
+ ? correctConfig.context.config // Fallback to first config
+ : allTests[0].context.config;
+ const transformer = await (0, _transform().createScriptTransformer)(
+ projectConfig
+ );
+
+ try {
+ await transformer.requireAndTranspileModule(
+ modulePath,
+ async globalModule => {
+ if (typeof globalModule !== 'function') {
+ throw new TypeError(
+ `${moduleName} file must export a function at ${modulePath}`
+ );
+ }
+
+ await globalModule(globalConfig);
+ }
+ );
+ } catch (error) {
+ if (util().types.isNativeError(error)) {
+ error.message = `Jest: Got error running ${moduleName} - ${modulePath}, reason: ${error.message}`;
+ throw error;
+ }
+
+ throw new Error(
+ `Jest: Got error running ${moduleName} - ${modulePath}, reason: ${(0,
+ _prettyFormat().default)(error, {
+ maxDepth: 3
+ })}`
+ );
+ }
+ }
+ }
+}
diff --git a/node_modules/@jest/core/build/runJest.d.ts b/node_modules/@jest/core/build/runJest.d.ts
new file mode 100644
index 0000000..9a8240b
--- /dev/null
+++ b/node_modules/@jest/core/build/runJest.d.ts
@@ -0,0 +1,27 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+/// <reference types="node" />
+import { AggregatedResult } from '@jest/test-result';
+import type { Config } from '@jest/types';
+import type { ChangedFilesPromise } from 'jest-changed-files';
+import type { Context } from 'jest-runtime';
+import { JestHookEmitter } from 'jest-watcher';
+import type FailedTestsCache from './FailedTestsCache';
+import type TestWatcher from './TestWatcher';
+import type { Filter } from './types';
+export default function runJest({ contexts, globalConfig, outputStream, testWatcher, jestHooks, startRun, changedFilesPromise, onComplete, failedTestsCache, filter, }: {
+ globalConfig: Config.GlobalConfig;
+ contexts: Array<Context>;
+ outputStream: NodeJS.WriteStream;
+ testWatcher: TestWatcher;
+ jestHooks?: JestHookEmitter;
+ startRun: (globalConfig: Config.GlobalConfig) => void;
+ changedFilesPromise?: ChangedFilesPromise;
+ onComplete: (testResults: AggregatedResult) => void;
+ failedTestsCache?: FailedTestsCache;
+ filter?: Filter;
+}): Promise<void>;
diff --git a/node_modules/@jest/core/build/runJest.js b/node_modules/@jest/core/build/runJest.js
new file mode 100644
index 0000000..24b40ac
--- /dev/null
+++ b/node_modules/@jest/core/build/runJest.js
@@ -0,0 +1,423 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = runJest;
+
+function path() {
+ const data = _interopRequireWildcard(require('path'));
+
+ path = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+
+ _chalk = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _exit() {
+ const data = _interopRequireDefault(require('exit'));
+
+ _exit = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function fs() {
+ const data = _interopRequireWildcard(require('graceful-fs'));
+
+ fs = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _console() {
+ const data = require('@jest/console');
+
+ _console = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _testResult() {
+ const data = require('@jest/test-result');
+
+ _testResult = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestResolve() {
+ const data = _interopRequireDefault(require('jest-resolve'));
+
+ _jestResolve = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestUtil() {
+ const data = require('jest-util');
+
+ _jestUtil = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestWatcher() {
+ const data = require('jest-watcher');
+
+ _jestWatcher = function () {
+ return data;
+ };
+
+ return data;
+}
+
+var _SearchSource = _interopRequireDefault(require('./SearchSource'));
+
+var _TestScheduler = require('./TestScheduler');
+
+var _collectHandles = _interopRequireDefault(require('./collectHandles'));
+
+var _getNoTestsFoundMessage = _interopRequireDefault(
+ require('./getNoTestsFoundMessage')
+);
+
+var _runGlobalHook = _interopRequireDefault(require('./runGlobalHook'));
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+function _getRequireWildcardCache(nodeInterop) {
+ if (typeof WeakMap !== 'function') return null;
+ var cacheBabelInterop = new WeakMap();
+ var cacheNodeInterop = new WeakMap();
+ return (_getRequireWildcardCache = function (nodeInterop) {
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
+ })(nodeInterop);
+}
+
+function _interopRequireWildcard(obj, nodeInterop) {
+ if (!nodeInterop && obj && obj.__esModule) {
+ return obj;
+ }
+ if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) {
+ return {default: obj};
+ }
+ var cache = _getRequireWildcardCache(nodeInterop);
+ if (cache && cache.has(obj)) {
+ return cache.get(obj);
+ }
+ var newObj = {};
+ var hasPropertyDescriptor =
+ Object.defineProperty && Object.getOwnPropertyDescriptor;
+ for (var key in obj) {
+ if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) {
+ var desc = hasPropertyDescriptor
+ ? Object.getOwnPropertyDescriptor(obj, key)
+ : null;
+ if (desc && (desc.get || desc.set)) {
+ Object.defineProperty(newObj, key, desc);
+ } else {
+ newObj[key] = obj[key];
+ }
+ }
+ }
+ newObj.default = obj;
+ if (cache) {
+ cache.set(obj, newObj);
+ }
+ return newObj;
+}
+
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+const getTestPaths = async (
+ globalConfig,
+ source,
+ outputStream,
+ changedFiles,
+ jestHooks,
+ filter
+) => {
+ const data = await source.getTestPaths(globalConfig, changedFiles, filter);
+
+ if (!data.tests.length && globalConfig.onlyChanged && data.noSCM) {
+ new (_console().CustomConsole)(outputStream, outputStream).log(
+ 'Jest can only find uncommitted changed files in a git or hg ' +
+ 'repository. If you make your project a git or hg ' +
+ 'repository (`git init` or `hg init`), Jest will be able ' +
+ 'to only run tests related to files changed since the last ' +
+ 'commit.'
+ );
+ }
+
+ const shouldTestArray = await Promise.all(
+ data.tests.map(test =>
+ jestHooks.shouldRunTestSuite({
+ config: test.context.config,
+ duration: test.duration,
+ testPath: test.path
+ })
+ )
+ );
+ const filteredTests = data.tests.filter((_test, i) => shouldTestArray[i]);
+ return {...data, allTests: filteredTests.length, tests: filteredTests};
+};
+
+const processResults = async (runResults, options) => {
+ const {
+ outputFile,
+ json: isJSON,
+ onComplete,
+ outputStream,
+ testResultsProcessor,
+ collectHandles
+ } = options;
+
+ if (collectHandles) {
+ runResults.openHandles = await collectHandles();
+ } else {
+ runResults.openHandles = [];
+ }
+
+ if (testResultsProcessor) {
+ const processor = await (0, _jestUtil().requireOrImportModule)(
+ testResultsProcessor
+ );
+ runResults = processor(runResults);
+ }
+
+ if (isJSON) {
+ if (outputFile) {
+ const cwd = (0, _jestUtil().tryRealpath)(process.cwd());
+ const filePath = path().resolve(cwd, outputFile);
+ fs().writeFileSync(
+ filePath,
+ JSON.stringify((0, _testResult().formatTestResults)(runResults))
+ );
+ outputStream.write(
+ `Test results written to: ${path().relative(cwd, filePath)}\n`
+ );
+ } else {
+ process.stdout.write(
+ JSON.stringify((0, _testResult().formatTestResults)(runResults))
+ );
+ }
+ }
+
+ onComplete === null || onComplete === void 0
+ ? void 0
+ : onComplete(runResults);
+};
+
+const testSchedulerContext = {
+ firstRun: true,
+ previousSuccess: true
+};
+
+async function runJest({
+ contexts,
+ globalConfig,
+ outputStream,
+ testWatcher,
+ jestHooks = new (_jestWatcher().JestHook)().getEmitter(),
+ startRun,
+ changedFilesPromise,
+ onComplete,
+ failedTestsCache,
+ filter
+}) {
+ // Clear cache for required modules - there might be different resolutions
+ // from Jest's config loading to running the tests
+ _jestResolve().default.clearDefaultResolverCache();
+
+ const Sequencer = await (0, _jestUtil().requireOrImportModule)(
+ globalConfig.testSequencer
+ );
+ const sequencer = new Sequencer();
+ let allTests = [];
+
+ if (changedFilesPromise && globalConfig.watch) {
+ const {repos} = await changedFilesPromise;
+ const noSCM = Object.keys(repos).every(scm => repos[scm].size === 0);
+
+ if (noSCM) {
+ process.stderr.write(
+ '\n' +
+ _chalk().default.bold('--watch') +
+ ' is not supported without git/hg, please use --watchAll ' +
+ '\n'
+ );
+ (0, _exit().default)(1);
+ }
+ }
+
+ const searchSources = contexts.map(
+ context => new _SearchSource.default(context)
+ );
+ const testRunData = await Promise.all(
+ contexts.map(async (context, index) => {
+ const searchSource = searchSources[index];
+ const matches = await getTestPaths(
+ globalConfig,
+ searchSource,
+ outputStream,
+ changedFilesPromise && (await changedFilesPromise),
+ jestHooks,
+ filter
+ );
+ allTests = allTests.concat(matches.tests);
+ return {
+ context,
+ matches
+ };
+ })
+ );
+ allTests = await sequencer.sort(allTests);
+
+ if (globalConfig.listTests) {
+ const testsPaths = Array.from(new Set(allTests.map(test => test.path)));
+ /* eslint-disable no-console */
+
+ if (globalConfig.json) {
+ console.log(JSON.stringify(testsPaths));
+ } else {
+ console.log(testsPaths.join('\n'));
+ }
+ /* eslint-enable */
+
+ onComplete &&
+ onComplete((0, _testResult().makeEmptyAggregatedTestResult)());
+ return;
+ }
+
+ if (globalConfig.onlyFailures) {
+ if (failedTestsCache) {
+ allTests = failedTestsCache.filterTests(allTests);
+ } else {
+ allTests = await sequencer.allFailedTests(allTests);
+ }
+ }
+
+ const hasTests = allTests.length > 0;
+
+ if (!hasTests) {
+ const noTestsFoundMessage = (0, _getNoTestsFoundMessage.default)(
+ testRunData,
+ globalConfig
+ );
+
+ if (
+ globalConfig.passWithNoTests ||
+ globalConfig.findRelatedTests ||
+ globalConfig.lastCommit ||
+ globalConfig.onlyChanged
+ ) {
+ new (_console().CustomConsole)(outputStream, outputStream).log(
+ noTestsFoundMessage
+ );
+ } else {
+ new (_console().CustomConsole)(outputStream, outputStream).error(
+ noTestsFoundMessage
+ );
+ (0, _exit().default)(1);
+ }
+ } else if (
+ allTests.length === 1 &&
+ globalConfig.silent !== true &&
+ globalConfig.verbose !== false
+ ) {
+ const newConfig = {...globalConfig, verbose: true};
+ globalConfig = Object.freeze(newConfig);
+ }
+
+ let collectHandles;
+
+ if (globalConfig.detectOpenHandles) {
+ collectHandles = (0, _collectHandles.default)();
+ }
+
+ if (hasTests) {
+ await (0, _runGlobalHook.default)({
+ allTests,
+ globalConfig,
+ moduleName: 'globalSetup'
+ });
+ }
+
+ if (changedFilesPromise) {
+ const changedFilesInfo = await changedFilesPromise;
+
+ if (changedFilesInfo.changedFiles) {
+ testSchedulerContext.changedFiles = changedFilesInfo.changedFiles;
+ const sourcesRelatedToTestsInChangedFilesArray = (
+ await Promise.all(
+ contexts.map(async (_, index) => {
+ const searchSource = searchSources[index];
+ return searchSource.findRelatedSourcesFromTestsInChangedFiles(
+ changedFilesInfo
+ );
+ })
+ )
+ ).reduce((total, paths) => total.concat(paths), []);
+ testSchedulerContext.sourcesRelatedToTestsInChangedFiles = new Set(
+ sourcesRelatedToTestsInChangedFilesArray
+ );
+ }
+ }
+
+ const scheduler = await (0, _TestScheduler.createTestScheduler)(
+ globalConfig,
+ {
+ startRun
+ },
+ testSchedulerContext
+ );
+ const results = await scheduler.scheduleTests(allTests, testWatcher);
+ await sequencer.cacheResults(allTests, results);
+
+ if (hasTests) {
+ await (0, _runGlobalHook.default)({
+ allTests,
+ globalConfig,
+ moduleName: 'globalTeardown'
+ });
+ }
+
+ await processResults(results, {
+ collectHandles,
+ json: globalConfig.json,
+ onComplete,
+ outputFile: globalConfig.outputFile,
+ outputStream,
+ testResultsProcessor: globalConfig.testResultsProcessor
+ });
+}
diff --git a/node_modules/@jest/core/build/testSchedulerHelper.d.ts b/node_modules/@jest/core/build/testSchedulerHelper.d.ts
new file mode 100644
index 0000000..d49d44f
--- /dev/null
+++ b/node_modules/@jest/core/build/testSchedulerHelper.d.ts
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import type { Test } from '@jest/test-result';
+import type { Config } from '@jest/types';
+export declare function shouldRunInBand(tests: Array<Test>, timings: Array<number>, { detectOpenHandles, maxWorkers, watch, watchAll }: Config.GlobalConfig): boolean;
diff --git a/node_modules/@jest/core/build/testSchedulerHelper.js b/node_modules/@jest/core/build/testSchedulerHelper.js
new file mode 100644
index 0000000..78cf48c
--- /dev/null
+++ b/node_modules/@jest/core/build/testSchedulerHelper.js
@@ -0,0 +1,51 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.shouldRunInBand = shouldRunInBand;
+
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+const SLOW_TEST_TIME = 1000;
+
+function shouldRunInBand(
+ tests,
+ timings,
+ {detectOpenHandles, maxWorkers, watch, watchAll}
+) {
+ // detectOpenHandles makes no sense without runInBand, because it cannot detect leaks in workers
+ if (detectOpenHandles) {
+ return true;
+ }
+ /*
+ * Run in band if we only have one test or one worker available, unless we
+ * are using the watch mode, in which case the TTY has to be responsive and
+ * we cannot schedule anything in the main thread. Same logic applies to
+ * watchAll.
+ * Also, if we are confident from previous runs that the tests will finish
+ * quickly we also run in band to reduce the overhead of spawning workers.
+ * Finally, the user can provide the runInBand argument in the CLI to
+ * force running in band.
+ * https://github.com/facebook/jest/blob/700e0dadb85f5dc8ff5dac6c7e98956690049734/packages/jest-config/src/getMaxWorkers.js#L14-L17
+ */
+
+ const isWatchMode = watch || watchAll;
+ const areFastTests = timings.every(timing => timing < SLOW_TEST_TIME);
+ const oneWorkerOrLess = maxWorkers <= 1;
+ const oneTestOrLess = tests.length <= 1;
+
+ if (isWatchMode) {
+ return oneWorkerOrLess || (oneTestOrLess && areFastTests);
+ }
+
+ return (
+ oneWorkerOrLess ||
+ oneTestOrLess ||
+ (tests.length <= 20 && timings.length > 0 && areFastTests)
+ );
+}
diff --git a/node_modules/@jest/core/build/types.d.ts b/node_modules/@jest/core/build/types.d.ts
new file mode 100644
index 0000000..877941c
--- /dev/null
+++ b/node_modules/@jest/core/build/types.d.ts
@@ -0,0 +1,39 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import type { Test } from '@jest/test-result';
+import type { Config } from '@jest/types';
+import type { Context } from 'jest-runtime';
+export declare type Stats = {
+ roots: number;
+ testMatch: number;
+ testPathIgnorePatterns: number;
+ testRegex: number;
+ testPathPattern?: number;
+};
+export declare type TestRunData = Array<{
+ context: Context;
+ matches: {
+ allTests: number;
+ tests: Array<Test>;
+ total?: number;
+ stats?: Stats;
+ };
+}>;
+export declare type TestPathCases = Array<{
+ stat: keyof Stats;
+ isMatch: (path: Config.Path) => boolean;
+}>;
+export declare type TestPathCasesWithPathPattern = TestPathCases & {
+ testPathPattern: (path: Config.Path) => boolean;
+};
+export declare type FilterResult = {
+ test: string;
+ message: string;
+};
+export declare type Filter = (testPaths: Array<string>) => Promise<{
+ filtered: Array<FilterResult>;
+}>;
diff --git a/node_modules/@jest/core/build/types.js b/node_modules/@jest/core/build/types.js
new file mode 100644
index 0000000..ad9a93a
--- /dev/null
+++ b/node_modules/@jest/core/build/types.js
@@ -0,0 +1 @@
+'use strict';
diff --git a/node_modules/@jest/core/build/version.d.ts b/node_modules/@jest/core/build/version.d.ts
new file mode 100644
index 0000000..8646731
--- /dev/null
+++ b/node_modules/@jest/core/build/version.d.ts
@@ -0,0 +1,7 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+export default function getVersion(): string;
diff --git a/node_modules/@jest/core/build/version.js b/node_modules/@jest/core/build/version.js
new file mode 100644
index 0000000..1bcd800
--- /dev/null
+++ b/node_modules/@jest/core/build/version.js
@@ -0,0 +1,19 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = getVersion;
+
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+// Cannot be `import` as it's not under TS root dir
+const {version: VERSION} = require('../package.json');
+
+function getVersion() {
+ return VERSION;
+}
diff --git a/node_modules/@jest/core/build/watch.d.ts b/node_modules/@jest/core/build/watch.d.ts
new file mode 100644
index 0000000..d8df910
--- /dev/null
+++ b/node_modules/@jest/core/build/watch.d.ts
@@ -0,0 +1,13 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+/// <reference types="node" />
+import type { Config } from '@jest/types';
+import type { default as HasteMap } from 'jest-haste-map';
+import type { Context } from 'jest-runtime';
+import { JestHook } from 'jest-watcher';
+import type { Filter } from './types';
+export default function watch(initialGlobalConfig: Config.GlobalConfig, contexts: Array<Context>, outputStream: NodeJS.WriteStream, hasteMapInstances: Array<HasteMap>, stdin?: NodeJS.ReadStream, hooks?: JestHook, filter?: Filter): Promise<void>;
diff --git a/node_modules/@jest/core/build/watch.js b/node_modules/@jest/core/build/watch.js
new file mode 100644
index 0000000..cffb811
--- /dev/null
+++ b/node_modules/@jest/core/build/watch.js
@@ -0,0 +1,769 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = watch;
+
+function path() {
+ const data = _interopRequireWildcard(require('path'));
+
+ path = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _ansiEscapes() {
+ const data = _interopRequireDefault(require('ansi-escapes'));
+
+ _ansiEscapes = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+
+ _chalk = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _exit() {
+ const data = _interopRequireDefault(require('exit'));
+
+ _exit = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _slash() {
+ const data = _interopRequireDefault(require('slash'));
+
+ _slash = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestMessageUtil() {
+ const data = require('jest-message-util');
+
+ _jestMessageUtil = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestUtil() {
+ const data = require('jest-util');
+
+ _jestUtil = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestValidate() {
+ const data = require('jest-validate');
+
+ _jestValidate = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestWatcher() {
+ const data = require('jest-watcher');
+
+ _jestWatcher = function () {
+ return data;
+ };
+
+ return data;
+}
+
+var _FailedTestsCache = _interopRequireDefault(require('./FailedTestsCache'));
+
+var _SearchSource = _interopRequireDefault(require('./SearchSource'));
+
+var _TestWatcher = _interopRequireDefault(require('./TestWatcher'));
+
+var _getChangedFilesPromise = _interopRequireDefault(
+ require('./getChangedFilesPromise')
+);
+
+var _activeFiltersMessage = _interopRequireDefault(
+ require('./lib/activeFiltersMessage')
+);
+
+var _createContext = _interopRequireDefault(require('./lib/createContext'));
+
+var _isValidPath = _interopRequireDefault(require('./lib/isValidPath'));
+
+var _updateGlobalConfig = _interopRequireDefault(
+ require('./lib/updateGlobalConfig')
+);
+
+var _watchPluginsHelpers = require('./lib/watchPluginsHelpers');
+
+var _FailedTestsInteractive = _interopRequireDefault(
+ require('./plugins/FailedTestsInteractive')
+);
+
+var _Quit = _interopRequireDefault(require('./plugins/Quit'));
+
+var _TestNamePattern = _interopRequireDefault(
+ require('./plugins/TestNamePattern')
+);
+
+var _TestPathPattern = _interopRequireDefault(
+ require('./plugins/TestPathPattern')
+);
+
+var _UpdateSnapshots = _interopRequireDefault(
+ require('./plugins/UpdateSnapshots')
+);
+
+var _UpdateSnapshotsInteractive = _interopRequireDefault(
+ require('./plugins/UpdateSnapshotsInteractive')
+);
+
+var _runJest = _interopRequireDefault(require('./runJest'));
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+function _getRequireWildcardCache(nodeInterop) {
+ if (typeof WeakMap !== 'function') return null;
+ var cacheBabelInterop = new WeakMap();
+ var cacheNodeInterop = new WeakMap();
+ return (_getRequireWildcardCache = function (nodeInterop) {
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
+ })(nodeInterop);
+}
+
+function _interopRequireWildcard(obj, nodeInterop) {
+ if (!nodeInterop && obj && obj.__esModule) {
+ return obj;
+ }
+ if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) {
+ return {default: obj};
+ }
+ var cache = _getRequireWildcardCache(nodeInterop);
+ if (cache && cache.has(obj)) {
+ return cache.get(obj);
+ }
+ var newObj = {};
+ var hasPropertyDescriptor =
+ Object.defineProperty && Object.getOwnPropertyDescriptor;
+ for (var key in obj) {
+ if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) {
+ var desc = hasPropertyDescriptor
+ ? Object.getOwnPropertyDescriptor(obj, key)
+ : null;
+ if (desc && (desc.get || desc.set)) {
+ Object.defineProperty(newObj, key, desc);
+ } else {
+ newObj[key] = obj[key];
+ }
+ }
+ }
+ newObj.default = obj;
+ if (cache) {
+ cache.set(obj, newObj);
+ }
+ return newObj;
+}
+
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+const {print: preRunMessagePrint} = _jestUtil().preRunMessage;
+
+let hasExitListener = false;
+const INTERNAL_PLUGINS = [
+ _FailedTestsInteractive.default,
+ _TestPathPattern.default,
+ _TestNamePattern.default,
+ _UpdateSnapshots.default,
+ _UpdateSnapshotsInteractive.default,
+ _Quit.default
+];
+const RESERVED_KEY_PLUGINS = new Map([
+ [
+ _UpdateSnapshots.default,
+ {
+ forbiddenOverwriteMessage: 'updating snapshots',
+ key: 'u'
+ }
+ ],
+ [
+ _UpdateSnapshotsInteractive.default,
+ {
+ forbiddenOverwriteMessage: 'updating snapshots interactively',
+ key: 'i'
+ }
+ ],
+ [
+ _Quit.default,
+ {
+ forbiddenOverwriteMessage: 'quitting watch mode'
+ }
+ ]
+]);
+
+async function watch(
+ initialGlobalConfig,
+ contexts,
+ outputStream,
+ hasteMapInstances,
+ stdin = process.stdin,
+ hooks = new (_jestWatcher().JestHook)(),
+ filter
+) {
+ // `globalConfig` will be constantly updated and reassigned as a result of
+ // watch mode interactions.
+ let globalConfig = initialGlobalConfig;
+ let activePlugin;
+ globalConfig = (0, _updateGlobalConfig.default)(globalConfig, {
+ mode: globalConfig.watch ? 'watch' : 'watchAll',
+ passWithNoTests: true
+ });
+
+ const updateConfigAndRun = ({
+ bail,
+ changedSince,
+ collectCoverage,
+ collectCoverageFrom,
+ collectCoverageOnlyFrom,
+ coverageDirectory,
+ coverageReporters,
+ findRelatedTests,
+ mode,
+ nonFlagArgs,
+ notify,
+ notifyMode,
+ onlyFailures,
+ reporters,
+ testNamePattern,
+ testPathPattern,
+ updateSnapshot,
+ verbose
+ } = {}) => {
+ const previousUpdateSnapshot = globalConfig.updateSnapshot;
+ globalConfig = (0, _updateGlobalConfig.default)(globalConfig, {
+ bail,
+ changedSince,
+ collectCoverage,
+ collectCoverageFrom,
+ collectCoverageOnlyFrom,
+ coverageDirectory,
+ coverageReporters,
+ findRelatedTests,
+ mode,
+ nonFlagArgs,
+ notify,
+ notifyMode,
+ onlyFailures,
+ reporters,
+ testNamePattern,
+ testPathPattern,
+ updateSnapshot,
+ verbose
+ });
+ startRun(globalConfig);
+ globalConfig = (0, _updateGlobalConfig.default)(globalConfig, {
+ // updateSnapshot is not sticky after a run.
+ updateSnapshot:
+ previousUpdateSnapshot === 'all' ? 'none' : previousUpdateSnapshot
+ });
+ };
+
+ const watchPlugins = INTERNAL_PLUGINS.map(
+ InternalPlugin =>
+ new InternalPlugin({
+ stdin,
+ stdout: outputStream
+ })
+ );
+ watchPlugins.forEach(plugin => {
+ const hookSubscriber = hooks.getSubscriber();
+
+ if (plugin.apply) {
+ plugin.apply(hookSubscriber);
+ }
+ });
+
+ if (globalConfig.watchPlugins != null) {
+ const watchPluginKeys = new Map();
+
+ for (const plugin of watchPlugins) {
+ const reservedInfo = RESERVED_KEY_PLUGINS.get(plugin.constructor) || {};
+ const key = reservedInfo.key || getPluginKey(plugin, globalConfig);
+
+ if (!key) {
+ continue;
+ }
+
+ const {forbiddenOverwriteMessage} = reservedInfo;
+ watchPluginKeys.set(key, {
+ forbiddenOverwriteMessage,
+ overwritable: forbiddenOverwriteMessage == null,
+ plugin
+ });
+ }
+
+ for (const pluginWithConfig of globalConfig.watchPlugins) {
+ let plugin;
+
+ try {
+ const ThirdPartyPlugin = await (0, _jestUtil().requireOrImportModule)(
+ pluginWithConfig.path
+ );
+ plugin = new ThirdPartyPlugin({
+ config: pluginWithConfig.config,
+ stdin,
+ stdout: outputStream
+ });
+ } catch (error) {
+ const errorWithContext = new Error(
+ `Failed to initialize watch plugin "${_chalk().default.bold(
+ (0, _slash().default)(
+ path().relative(process.cwd(), pluginWithConfig.path)
+ )
+ )}":\n\n${(0, _jestMessageUtil().formatExecError)(
+ error,
+ contexts[0].config,
+ {
+ noStackTrace: false
+ }
+ )}`
+ );
+ delete errorWithContext.stack;
+ return Promise.reject(errorWithContext);
+ }
+
+ checkForConflicts(watchPluginKeys, plugin, globalConfig);
+ const hookSubscriber = hooks.getSubscriber();
+
+ if (plugin.apply) {
+ plugin.apply(hookSubscriber);
+ }
+
+ watchPlugins.push(plugin);
+ }
+ }
+
+ const failedTestsCache = new _FailedTestsCache.default();
+ let searchSources = contexts.map(context => ({
+ context,
+ searchSource: new _SearchSource.default(context)
+ }));
+ let isRunning = false;
+ let testWatcher;
+ let shouldDisplayWatchUsage = true;
+ let isWatchUsageDisplayed = false;
+
+ const emitFileChange = () => {
+ if (hooks.isUsed('onFileChange')) {
+ const projects = searchSources.map(({context, searchSource}) => ({
+ config: context.config,
+ testPaths: searchSource.findMatchingTests('').tests.map(t => t.path)
+ }));
+ hooks.getEmitter().onFileChange({
+ projects
+ });
+ }
+ };
+
+ emitFileChange();
+ hasteMapInstances.forEach((hasteMapInstance, index) => {
+ hasteMapInstance.on('change', ({eventsQueue, hasteFS, moduleMap}) => {
+ const validPaths = eventsQueue.filter(({filePath}) =>
+ (0, _isValidPath.default)(globalConfig, filePath)
+ );
+
+ if (validPaths.length) {
+ const context = (contexts[index] = (0, _createContext.default)(
+ contexts[index].config,
+ {
+ hasteFS,
+ moduleMap
+ }
+ ));
+ activePlugin = null;
+ searchSources = searchSources.slice();
+ searchSources[index] = {
+ context,
+ searchSource: new _SearchSource.default(context)
+ };
+ emitFileChange();
+ startRun(globalConfig);
+ }
+ });
+ });
+
+ if (!hasExitListener) {
+ hasExitListener = true;
+ process.on('exit', () => {
+ if (activePlugin) {
+ outputStream.write(_ansiEscapes().default.cursorDown());
+ outputStream.write(_ansiEscapes().default.eraseDown);
+ }
+ });
+ }
+
+ const startRun = globalConfig => {
+ if (isRunning) {
+ return Promise.resolve(null);
+ }
+
+ testWatcher = new _TestWatcher.default({
+ isWatchMode: true
+ });
+ _jestUtil().isInteractive &&
+ outputStream.write(_jestUtil().specialChars.CLEAR);
+ preRunMessagePrint(outputStream);
+ isRunning = true;
+ const configs = contexts.map(context => context.config);
+ const changedFilesPromise = (0, _getChangedFilesPromise.default)(
+ globalConfig,
+ configs
+ );
+ return (0, _runJest.default)({
+ changedFilesPromise,
+ contexts,
+ failedTestsCache,
+ filter,
+ globalConfig,
+ jestHooks: hooks.getEmitter(),
+ onComplete: results => {
+ isRunning = false;
+ hooks.getEmitter().onTestRunComplete(results); // Create a new testWatcher instance so that re-runs won't be blocked.
+ // The old instance that was passed to Jest will still be interrupted
+ // and prevent test runs from the previous run.
+
+ testWatcher = new _TestWatcher.default({
+ isWatchMode: true
+ }); // Do not show any Watch Usage related stuff when running in a
+ // non-interactive environment
+
+ if (_jestUtil().isInteractive) {
+ if (shouldDisplayWatchUsage) {
+ outputStream.write(usage(globalConfig, watchPlugins));
+ shouldDisplayWatchUsage = false; // hide Watch Usage after first run
+
+ isWatchUsageDisplayed = true;
+ } else {
+ outputStream.write(showToggleUsagePrompt());
+ shouldDisplayWatchUsage = false;
+ isWatchUsageDisplayed = false;
+ }
+ } else {
+ outputStream.write('\n');
+ }
+
+ failedTestsCache.setTestResults(results.testResults);
+ },
+ outputStream,
+ startRun,
+ testWatcher
+ }).catch(
+ (
+ error // Errors thrown inside `runJest`, e.g. by resolvers, are caught here for
+ ) =>
+ // continuous watch mode execution. We need to reprint them to the
+ // terminal and give just a little bit of extra space so they fit below
+ // `preRunMessagePrint` message nicely.
+ console.error(
+ '\n\n' +
+ (0, _jestMessageUtil().formatExecError)(error, contexts[0].config, {
+ noStackTrace: false
+ })
+ )
+ );
+ };
+
+ const onKeypress = key => {
+ if (
+ key === _jestWatcher().KEYS.CONTROL_C ||
+ key === _jestWatcher().KEYS.CONTROL_D
+ ) {
+ if (typeof stdin.setRawMode === 'function') {
+ stdin.setRawMode(false);
+ }
+
+ outputStream.write('\n');
+ (0, _exit().default)(0);
+ return;
+ }
+
+ if (activePlugin != null && activePlugin.onKey) {
+ // if a plugin is activate, Jest should let it handle keystrokes, so ignore
+ // them here
+ activePlugin.onKey(key);
+ return;
+ } // Abort test run
+
+ const pluginKeys = (0, _watchPluginsHelpers.getSortedUsageRows)(
+ watchPlugins,
+ globalConfig
+ ).map(usage => Number(usage.key).toString(16));
+
+ if (
+ isRunning &&
+ testWatcher &&
+ ['q', _jestWatcher().KEYS.ENTER, 'a', 'o', 'f']
+ .concat(pluginKeys)
+ .includes(key)
+ ) {
+ testWatcher.setState({
+ interrupted: true
+ });
+ return;
+ }
+
+ const matchingWatchPlugin = (0,
+ _watchPluginsHelpers.filterInteractivePlugins)(
+ watchPlugins,
+ globalConfig
+ ).find(plugin => getPluginKey(plugin, globalConfig) === key);
+
+ if (matchingWatchPlugin != null) {
+ if (isRunning) {
+ testWatcher.setState({
+ interrupted: true
+ });
+ return;
+ } // "activate" the plugin, which has jest ignore keystrokes so the plugin
+ // can handle them
+
+ activePlugin = matchingWatchPlugin;
+
+ if (activePlugin.run) {
+ activePlugin.run(globalConfig, updateConfigAndRun).then(
+ shouldRerun => {
+ activePlugin = null;
+
+ if (shouldRerun) {
+ updateConfigAndRun();
+ }
+ },
+ () => {
+ activePlugin = null;
+ onCancelPatternPrompt();
+ }
+ );
+ } else {
+ activePlugin = null;
+ }
+ }
+
+ switch (key) {
+ case _jestWatcher().KEYS.ENTER:
+ startRun(globalConfig);
+ break;
+
+ case 'a':
+ globalConfig = (0, _updateGlobalConfig.default)(globalConfig, {
+ mode: 'watchAll',
+ testNamePattern: '',
+ testPathPattern: ''
+ });
+ startRun(globalConfig);
+ break;
+
+ case 'c':
+ updateConfigAndRun({
+ mode: 'watch',
+ testNamePattern: '',
+ testPathPattern: ''
+ });
+ break;
+
+ case 'f':
+ globalConfig = (0, _updateGlobalConfig.default)(globalConfig, {
+ onlyFailures: !globalConfig.onlyFailures
+ });
+ startRun(globalConfig);
+ break;
+
+ case 'o':
+ globalConfig = (0, _updateGlobalConfig.default)(globalConfig, {
+ mode: 'watch',
+ testNamePattern: '',
+ testPathPattern: ''
+ });
+ startRun(globalConfig);
+ break;
+
+ case '?':
+ break;
+
+ case 'w':
+ if (!shouldDisplayWatchUsage && !isWatchUsageDisplayed) {
+ outputStream.write(_ansiEscapes().default.cursorUp());
+ outputStream.write(_ansiEscapes().default.eraseDown);
+ outputStream.write(usage(globalConfig, watchPlugins));
+ isWatchUsageDisplayed = true;
+ shouldDisplayWatchUsage = false;
+ }
+
+ break;
+ }
+ };
+
+ const onCancelPatternPrompt = () => {
+ outputStream.write(_ansiEscapes().default.cursorHide);
+ outputStream.write(_jestUtil().specialChars.CLEAR);
+ outputStream.write(usage(globalConfig, watchPlugins));
+ outputStream.write(_ansiEscapes().default.cursorShow);
+ };
+
+ if (typeof stdin.setRawMode === 'function') {
+ stdin.setRawMode(true);
+ stdin.resume();
+ stdin.setEncoding('utf8');
+ stdin.on('data', onKeypress);
+ }
+
+ startRun(globalConfig);
+ return Promise.resolve();
+}
+
+const checkForConflicts = (watchPluginKeys, plugin, globalConfig) => {
+ const key = getPluginKey(plugin, globalConfig);
+
+ if (!key) {
+ return;
+ }
+
+ const conflictor = watchPluginKeys.get(key);
+
+ if (!conflictor || conflictor.overwritable) {
+ watchPluginKeys.set(key, {
+ overwritable: false,
+ plugin
+ });
+ return;
+ }
+
+ let error;
+
+ if (conflictor.forbiddenOverwriteMessage) {
+ error = `
+ Watch plugin ${_chalk().default.bold.red(
+ getPluginIdentifier(plugin)
+ )} attempted to register key ${_chalk().default.bold.red(`<${key}>`)},
+ that is reserved internally for ${_chalk().default.bold.red(
+ conflictor.forbiddenOverwriteMessage
+ )}.
+ Please change the configuration key for this plugin.`.trim();
+ } else {
+ const plugins = [conflictor.plugin, plugin]
+ .map(p => _chalk().default.bold.red(getPluginIdentifier(p)))
+ .join(' and ');
+ error = `
+ Watch plugins ${plugins} both attempted to register key ${_chalk().default.bold.red(
+ `<${key}>`
+ )}.
+ Please change the key configuration for one of the conflicting plugins to avoid overlap.`.trim();
+ }
+
+ throw new (_jestValidate().ValidationError)(
+ 'Watch plugin configuration error',
+ error
+ );
+};
+
+const getPluginIdentifier = (
+ plugin // This breaks as `displayName` is not defined as a static, but since
+) =>
+ // WatchPlugin is an interface, and it is my understanding interface
+ // static fields are not definable anymore, no idea how to circumvent
+ // this :-(
+ // @ts-expect-error: leave `displayName` be.
+ plugin.constructor.displayName || plugin.constructor.name;
+
+const getPluginKey = (plugin, globalConfig) => {
+ if (typeof plugin.getUsageInfo === 'function') {
+ return (
+ plugin.getUsageInfo(globalConfig) || {
+ key: null
+ }
+ ).key;
+ }
+
+ return null;
+};
+
+const usage = (globalConfig, watchPlugins, delimiter = '\n') => {
+ const messages = [
+ (0, _activeFiltersMessage.default)(globalConfig),
+ globalConfig.testPathPattern || globalConfig.testNamePattern
+ ? _chalk().default.dim(' \u203A Press ') +
+ 'c' +
+ _chalk().default.dim(' to clear filters.')
+ : null,
+ '\n' + _chalk().default.bold('Watch Usage'),
+ globalConfig.watch
+ ? _chalk().default.dim(' \u203A Press ') +
+ 'a' +
+ _chalk().default.dim(' to run all tests.')
+ : null,
+ globalConfig.onlyFailures
+ ? _chalk().default.dim(' \u203A Press ') +
+ 'f' +
+ _chalk().default.dim(' to quit "only failed tests" mode.')
+ : _chalk().default.dim(' \u203A Press ') +
+ 'f' +
+ _chalk().default.dim(' to run only failed tests.'),
+ (globalConfig.watchAll ||
+ globalConfig.testPathPattern ||
+ globalConfig.testNamePattern) &&
+ !globalConfig.noSCM
+ ? _chalk().default.dim(' \u203A Press ') +
+ 'o' +
+ _chalk().default.dim(' to only run tests related to changed files.')
+ : null,
+ ...(0, _watchPluginsHelpers.getSortedUsageRows)(
+ watchPlugins,
+ globalConfig
+ ).map(
+ plugin =>
+ _chalk().default.dim(' \u203A Press') +
+ ' ' +
+ plugin.key +
+ ' ' +
+ _chalk().default.dim(`to ${plugin.prompt}.`)
+ ),
+ _chalk().default.dim(' \u203A Press ') +
+ 'Enter' +
+ _chalk().default.dim(' to trigger a test run.')
+ ];
+ return messages.filter(message => !!message).join(delimiter) + '\n';
+};
+
+const showToggleUsagePrompt = () =>
+ '\n' +
+ _chalk().default.bold('Watch Usage: ') +
+ _chalk().default.dim('Press ') +
+ 'w' +
+ _chalk().default.dim(' to show more.');
diff --git a/node_modules/@jest/core/package.json b/node_modules/@jest/core/package.json
new file mode 100644
index 0000000..a160167
--- /dev/null
+++ b/node_modules/@jest/core/package.json
@@ -0,0 +1,103 @@
+{
+ "name": "@jest/core",
+ "description": "Delightful JavaScript Testing.",
+ "version": "27.5.1",
+ "main": "./build/jest.js",
+ "types": "./build/jest.d.ts",
+ "exports": {
+ ".": {
+ "types": "./build/jest.d.ts",
+ "default": "./build/jest.js"
+ },
+ "./package.json": "./package.json"
+ },
+ "dependencies": {
+ "@jest/console": "^27.5.1",
+ "@jest/reporters": "^27.5.1",
+ "@jest/test-result": "^27.5.1",
+ "@jest/transform": "^27.5.1",
+ "@jest/types": "^27.5.1",
+ "@types/node": "*",
+ "ansi-escapes": "^4.2.1",
+ "chalk": "^4.0.0",
+ "emittery": "^0.8.1",
+ "exit": "^0.1.2",
+ "graceful-fs": "^4.2.9",
+ "jest-changed-files": "^27.5.1",
+ "jest-config": "^27.5.1",
+ "jest-haste-map": "^27.5.1",
+ "jest-message-util": "^27.5.1",
+ "jest-regex-util": "^27.5.1",
+ "jest-resolve": "^27.5.1",
+ "jest-resolve-dependencies": "^27.5.1",
+ "jest-runner": "^27.5.1",
+ "jest-runtime": "^27.5.1",
+ "jest-snapshot": "^27.5.1",
+ "jest-util": "^27.5.1",
+ "jest-validate": "^27.5.1",
+ "jest-watcher": "^27.5.1",
+ "micromatch": "^4.0.4",
+ "rimraf": "^3.0.0",
+ "slash": "^3.0.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "devDependencies": {
+ "@jest/test-sequencer": "^27.5.1",
+ "@jest/test-utils": "^27.5.1",
+ "@types/exit": "^0.1.30",
+ "@types/graceful-fs": "^4.1.2",
+ "@types/micromatch": "^4.0.1",
+ "@types/rimraf": "^3.0.0"
+ },
+ "peerDependencies": {
+ "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
+ },
+ "peerDependenciesMeta": {
+ "node-notifier": {
+ "optional": true
+ }
+ },
+ "engines": {
+ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/facebook/jest",
+ "directory": "packages/jest-core"
+ },
+ "bugs": {
+ "url": "https://github.com/facebook/jest/issues"
+ },
+ "homepage": "https://jestjs.io/",
+ "license": "MIT",
+ "keywords": [
+ "ava",
+ "babel",
+ "coverage",
+ "easy",
+ "expect",
+ "facebook",
+ "immersive",
+ "instant",
+ "jasmine",
+ "jest",
+ "jsdom",
+ "mocha",
+ "mocking",
+ "painless",
+ "qunit",
+ "runner",
+ "sandboxed",
+ "snapshot",
+ "tap",
+ "tape",
+ "test",
+ "testing",
+ "typescript",
+ "watch"
+ ],
+ "publishConfig": {
+ "access": "public"
+ },
+ "gitHead": "67c1aa20c5fec31366d733e901fee2b981cb1850"
+}
diff --git a/node_modules/@jest/environment/LICENSE b/node_modules/@jest/environment/LICENSE
new file mode 100644
index 0000000..b96dcb0
--- /dev/null
+++ b/node_modules/@jest/environment/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) Facebook, Inc. and its affiliates.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/node_modules/@jest/environment/build/index.d.ts b/node_modules/@jest/environment/build/index.d.ts
new file mode 100644
index 0000000..fe18ff0
--- /dev/null
+++ b/node_modules/@jest/environment/build/index.d.ts
@@ -0,0 +1,267 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+/// <reference types="node" />
+import type { Context } from 'vm';
+import type { LegacyFakeTimers, ModernFakeTimers } from '@jest/fake-timers';
+import type { Circus, Config, Global } from '@jest/types';
+import type { fn as JestMockFn, mocked as JestMockMocked, spyOn as JestMockSpyOn, ModuleMocker } from 'jest-mock';
+export declare type EnvironmentContext = {
+ console: Console;
+ docblockPragmas: Record<string, string | Array<string>>;
+ testPath: Config.Path;
+};
+export declare type ModuleWrapper = (this: Module['exports'], module: Module, exports: Module['exports'], require: Module['require'], __dirname: string, __filename: Module['filename'], jest?: Jest, ...extraGlobals: Array<Global.Global[keyof Global.Global]>) => unknown;
+export declare class JestEnvironment<Timer = unknown> {
+ constructor(config: Config.ProjectConfig, context?: EnvironmentContext);
+ global: Global.Global;
+ fakeTimers: LegacyFakeTimers<Timer> | null;
+ fakeTimersModern: ModernFakeTimers | null;
+ moduleMocker: ModuleMocker | null;
+ getVmContext(): Context | null;
+ setup(): Promise<void>;
+ teardown(): Promise<void>;
+ handleTestEvent?: Circus.EventHandler;
+ exportConditions?: () => Array<string>;
+}
+export declare type Module = NodeModule;
+export interface Jest {
+ /**
+ * Advances all timers by the needed milliseconds so that only the next timeouts/intervals will run.
+ * Optionally, you can provide steps, so it will run steps amount of next timeouts/intervals.
+ */
+ advanceTimersToNextTimer(steps?: number): void;
+ /**
+ * Disables automatic mocking in the module loader.
+ */
+ autoMockOff(): Jest;
+ /**
+ * Enables automatic mocking in the module loader.
+ */
+ autoMockOn(): Jest;
+ /**
+ * Clears the mock.calls and mock.instances properties of all mocks.
+ * Equivalent to calling .mockClear() on every mocked function.
+ */
+ clearAllMocks(): Jest;
+ /**
+ * Removes any pending timers from the timer system. If any timers have been
+ * scheduled, they will be cleared and will never have the opportunity to
+ * execute in the future.
+ */
+ clearAllTimers(): void;
+ /**
+ * Indicates that the module system should never return a mocked version
+ * of the specified module, including all of the specified module's
+ * dependencies.
+ */
+ deepUnmock(moduleName: string): Jest;
+ /**
+ * Disables automatic mocking in the module loader.
+ *
+ * After this method is called, all `require()`s will return the real
+ * versions of each module (rather than a mocked version).
+ */
+ disableAutomock(): Jest;
+ /**
+ * When using `babel-jest`, calls to mock will automatically be hoisted to
+ * the top of the code block. Use this method if you want to explicitly avoid
+ * this behavior.
+ */
+ doMock(moduleName: string, moduleFactory?: () => unknown, options?: {
+ virtual?: boolean;
+ }): Jest;
+ /**
+ * Indicates that the module system should never return a mocked version
+ * of the specified module from require() (e.g. that it should always return
+ * the real module).
+ */
+ dontMock(moduleName: string): Jest;
+ /**
+ * Enables automatic mocking in the module loader.
+ */
+ enableAutomock(): Jest;
+ /**
+ * Creates a mock function. Optionally takes a mock implementation.
+ */
+ fn: typeof JestMockFn;
+ /**
+ * Given the name of a module, use the automatic mocking system to generate a
+ * mocked version of the module for you.
+ *
+ * This is useful when you want to create a manual mock that extends the
+ * automatic mock's behavior.
+ *
+ * @deprecated Use `jest.createMockFromModule()` instead
+ */
+ genMockFromModule(moduleName: string): unknown;
+ /**
+ * Given the name of a module, use the automatic mocking system to generate a
+ * mocked version of the module for you.
+ *
+ * This is useful when you want to create a manual mock that extends the
+ * automatic mock's behavior.
+ */
+ createMockFromModule(moduleName: string): unknown;
+ /**
+ * Determines if the given function is a mocked function.
+ */
+ isMockFunction(fn: (...args: Array<any>) => unknown): fn is ReturnType<typeof JestMockFn>;
+ /**
+ * Mocks a module with an auto-mocked version when it is being required.
+ */
+ mock(moduleName: string, moduleFactory?: () => unknown, options?: {
+ virtual?: boolean;
+ }): Jest;
+ /**
+ * Mocks a module with the provided module factory when it is being imported.
+ */
+ unstable_mockModule<T = unknown>(moduleName: string, moduleFactory: () => Promise<T> | T, options?: {
+ virtual?: boolean;
+ }): Jest;
+ /**
+ * Returns the actual module instead of a mock, bypassing all checks on
+ * whether the module should receive a mock implementation or not.
+ *
+ * @example
+ ```
+ jest.mock('../myModule', () => {
+ // Require the original module to not be mocked...
+ const originalModule = jest.requireActual(moduleName);
+ return {
+ __esModule: true, // Use it when dealing with esModules
+ ...originalModule,
+ getRandom: jest.fn().mockReturnValue(10),
+ };
+ });
+
+ const getRandom = require('../myModule').getRandom;
+
+ getRandom(); // Always returns 10
+ ```
+ */
+ requireActual: (moduleName: string) => unknown;
+ /**
+ * Returns a mock module instead of the actual module, bypassing all checks
+ * on whether the module should be required normally or not.
+ */
+ requireMock: (moduleName: string) => unknown;
+ /**
+ * Resets the state of all mocks.
+ * Equivalent to calling .mockReset() on every mocked function.
+ */
+ resetAllMocks(): Jest;
+ /**
+ * Resets the module registry - the cache of all required modules. This is
+ * useful to isolate modules where local state might conflict between tests.
+ */
+ resetModules(): Jest;
+ /**
+ * Restores all mocks back to their original value. Equivalent to calling
+ * `.mockRestore` on every mocked function.
+ *
+ * Beware that jest.restoreAllMocks() only works when the mock was created with
+ * jest.spyOn; other mocks will require you to manually restore them.
+ */
+ restoreAllMocks(): Jest;
+ mocked: typeof JestMockMocked;
+ /**
+ * Runs failed tests n-times until they pass or until the max number of
+ * retries is exhausted. This only works with `jest-circus`!
+ */
+ retryTimes(numRetries: number): Jest;
+ /**
+ * Exhausts tasks queued by setImmediate().
+ *
+ * > Note: This function is not available when using Lolex as fake timers implementation
+ */
+ runAllImmediates(): void;
+ /**
+ * Exhausts the micro-task queue (usually interfaced in node via
+ * process.nextTick).
+ */
+ runAllTicks(): void;
+ /**
+ * Exhausts the macro-task queue (i.e., all tasks queued by setTimeout()
+ * and setInterval()).
+ */
+ runAllTimers(): void;
+ /**
+ * Executes only the macro-tasks that are currently pending (i.e., only the
+ * tasks that have been queued by setTimeout() or setInterval() up to this
+ * point). If any of the currently pending macro-tasks schedule new
+ * macro-tasks, those new tasks will not be executed by this call.
+ */
+ runOnlyPendingTimers(): void;
+ /**
+ * Advances all timers by msToRun milliseconds. All pending "macro-tasks"
+ * that have been queued via setTimeout() or setInterval(), and would be
+ * executed within this timeframe will be executed.
+ */
+ advanceTimersByTime(msToRun: number): void;
+ /**
+ * Returns the number of fake timers still left to run.
+ */
+ getTimerCount(): number;
+ /**
+ * Explicitly supplies the mock object that the module system should return
+ * for the specified module.
+ *
+ * Note It is recommended to use `jest.mock()` instead. The `jest.mock`
+ * API's second argument is a module factory instead of the expected
+ * exported module object.
+ */
+ setMock(moduleName: string, moduleExports: unknown): Jest;
+ /**
+ * Set the default timeout interval for tests and before/after hooks in
+ * milliseconds.
+ *
+ * Note: The default timeout interval is 5 seconds if this method is not
+ * called.
+ */
+ setTimeout(timeout: number): Jest;
+ /**
+ * Creates a mock function similar to `jest.fn` but also tracks calls to
+ * `object[methodName]`.
+ *
+ * Note: By default, jest.spyOn also calls the spied method. This is
+ * different behavior from most other test libraries.
+ */
+ spyOn: typeof JestMockSpyOn;
+ /**
+ * Indicates that the module system should never return a mocked version of
+ * the specified module from require() (e.g. that it should always return the
+ * real module).
+ */
+ unmock(moduleName: string): Jest;
+ /**
+ * Instructs Jest to use fake versions of the standard timer functions.
+ */
+ useFakeTimers(implementation?: 'modern' | 'legacy'): Jest;
+ /**
+ * Instructs Jest to use the real versions of the standard timer functions.
+ */
+ useRealTimers(): Jest;
+ /**
+ * `jest.isolateModules(fn)` goes a step further than `jest.resetModules()`
+ * and creates a sandbox registry for the modules that are loaded inside
+ * the callback function. This is useful to isolate specific modules for
+ * every test so that local module state doesn't conflict between tests.
+ */
+ isolateModules(fn: () => void): Jest;
+ /**
+ * When mocking time, `Date.now()` will also be mocked. If you for some reason need access to the real current time, you can invoke this function.
+ *
+ * > Note: This function is only available when using Lolex as fake timers implementation
+ */
+ getRealSystemTime(): number;
+ /**
+ * Set the current system time used by fake timers. Simulates a user changing the system clock while your program is running. It affects the current time but it does not in itself cause e.g. timers to fire; they will fire exactly as they would have done without the call to `jest.setSystemTime()`.
+ *
+ * > Note: This function is only available when using Lolex as fake timers implementation
+ */
+ setSystemTime(now?: number | Date): void;
+}
diff --git a/node_modules/@jest/environment/build/index.js b/node_modules/@jest/environment/build/index.js
new file mode 100644
index 0000000..ad9a93a
--- /dev/null
+++ b/node_modules/@jest/environment/build/index.js
@@ -0,0 +1 @@
+'use strict';
diff --git a/node_modules/@jest/environment/package.json b/node_modules/@jest/environment/package.json
new file mode 100644
index 0000000..96ef04d
--- /dev/null
+++ b/node_modules/@jest/environment/package.json
@@ -0,0 +1,32 @@
+{
+ "name": "@jest/environment",
+ "version": "27.5.1",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/facebook/jest.git",
+ "directory": "packages/jest-environment"
+ },
+ "license": "MIT",
+ "main": "./build/index.js",
+ "types": "./build/index.d.ts",
+ "exports": {
+ ".": {
+ "types": "./build/index.d.ts",
+ "default": "./build/index.js"
+ },
+ "./package.json": "./package.json"
+ },
+ "dependencies": {
+ "@jest/fake-timers": "^27.5.1",
+ "@jest/types": "^27.5.1",
+ "@types/node": "*",
+ "jest-mock": "^27.5.1"
+ },
+ "engines": {
+ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ },
+ "publishConfig": {
+ "access": "public"
+ },
+ "gitHead": "67c1aa20c5fec31366d733e901fee2b981cb1850"
+}
diff --git a/node_modules/@jest/fake-timers/LICENSE b/node_modules/@jest/fake-timers/LICENSE
new file mode 100644
index 0000000..b96dcb0
--- /dev/null
+++ b/node_modules/@jest/fake-timers/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) Facebook, Inc. and its affiliates.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/node_modules/@jest/fake-timers/build/index.d.ts b/node_modules/@jest/fake-timers/build/index.d.ts
new file mode 100644
index 0000000..5a6e64c
--- /dev/null
+++ b/node_modules/@jest/fake-timers/build/index.d.ts
@@ -0,0 +1,8 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+export { default as LegacyFakeTimers } from './legacyFakeTimers';
+export { default as ModernFakeTimers } from './modernFakeTimers';
diff --git a/node_modules/@jest/fake-timers/build/index.js b/node_modules/@jest/fake-timers/build/index.js
new file mode 100644
index 0000000..5fe1fbe
--- /dev/null
+++ b/node_modules/@jest/fake-timers/build/index.js
@@ -0,0 +1,25 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+Object.defineProperty(exports, 'LegacyFakeTimers', {
+ enumerable: true,
+ get: function () {
+ return _legacyFakeTimers.default;
+ }
+});
+Object.defineProperty(exports, 'ModernFakeTimers', {
+ enumerable: true,
+ get: function () {
+ return _modernFakeTimers.default;
+ }
+});
+
+var _legacyFakeTimers = _interopRequireDefault(require('./legacyFakeTimers'));
+
+var _modernFakeTimers = _interopRequireDefault(require('./modernFakeTimers'));
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
diff --git a/node_modules/@jest/fake-timers/build/legacyFakeTimers.d.ts b/node_modules/@jest/fake-timers/build/legacyFakeTimers.d.ts
new file mode 100644
index 0000000..059d029
--- /dev/null
+++ b/node_modules/@jest/fake-timers/build/legacyFakeTimers.d.ts
@@ -0,0 +1,67 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import { StackTraceConfig } from 'jest-message-util';
+import type { ModuleMocker } from 'jest-mock';
+declare type Callback = (...args: Array<unknown>) => void;
+declare type TimerConfig<Ref> = {
+ idToRef: (id: number) => Ref;
+ refToId: (ref: Ref) => number | void;
+};
+declare type GlobalThis = typeof globalThis;
+interface FakeTimersGlobal extends GlobalThis {
+ cancelAnimationFrame: (handle: number) => void;
+ requestAnimationFrame: (callback: (time: number) => void) => number;
+}
+export default class FakeTimers<TimerRef> {
+ private _cancelledTicks;
+ private _config;
+ private _disposed?;
+ private _fakeTimerAPIs;
+ private _global;
+ private _immediates;
+ private _maxLoops;
+ private _moduleMocker;
+ private _now;
+ private _ticks;
+ private _timerAPIs;
+ private _timers;
+ private _uuidCounter;
+ private _timerConfig;
+ constructor({ global, moduleMocker, timerConfig, config, maxLoops, }: {
+ global: FakeTimersGlobal;
+ moduleMocker: ModuleMocker;
+ timerConfig: TimerConfig<TimerRef>;
+ config: StackTraceConfig;
+ maxLoops?: number;
+ });
+ clearAllTimers(): void;
+ dispose(): void;
+ reset(): void;
+ runAllTicks(): void;
+ runAllImmediates(): void;
+ private _runImmediate;
+ runAllTimers(): void;
+ runOnlyPendingTimers(): void;
+ advanceTimersToNextTimer(steps?: number): void;
+ advanceTimersByTime(msToRun: number): void;
+ runWithRealTimers(cb: Callback): void;
+ useRealTimers(): void;
+ useFakeTimers(): void;
+ getTimerCount(): number;
+ private _checkFakeTimers;
+ private _createMocks;
+ private _fakeClearTimer;
+ private _fakeClearImmediate;
+ private _fakeNextTick;
+ private _fakeRequestAnimationFrame;
+ private _fakeSetImmediate;
+ private _fakeSetInterval;
+ private _fakeSetTimeout;
+ private _getNextTimerHandle;
+ private _runTimerHandle;
+}
+export {};
diff --git a/node_modules/@jest/fake-timers/build/legacyFakeTimers.js b/node_modules/@jest/fake-timers/build/legacyFakeTimers.js
new file mode 100644
index 0000000..2abaf4e
--- /dev/null
+++ b/node_modules/@jest/fake-timers/build/legacyFakeTimers.js
@@ -0,0 +1,673 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+
+function _util() {
+ const data = _interopRequireDefault(require('util'));
+
+ _util = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestMessageUtil() {
+ const data = require('jest-message-util');
+
+ _jestMessageUtil = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestUtil() {
+ const data = require('jest-util');
+
+ _jestUtil = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+function _defineProperty(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+}
+
+const MS_IN_A_YEAR = 31536000000;
+
+class FakeTimers {
+ constructor({global, moduleMocker, timerConfig, config, maxLoops}) {
+ _defineProperty(this, '_cancelledTicks', void 0);
+
+ _defineProperty(this, '_config', void 0);
+
+ _defineProperty(this, '_disposed', void 0);
+
+ _defineProperty(this, '_fakeTimerAPIs', void 0);
+
+ _defineProperty(this, '_global', void 0);
+
+ _defineProperty(this, '_immediates', void 0);
+
+ _defineProperty(this, '_maxLoops', void 0);
+
+ _defineProperty(this, '_moduleMocker', void 0);
+
+ _defineProperty(this, '_now', void 0);
+
+ _defineProperty(this, '_ticks', void 0);
+
+ _defineProperty(this, '_timerAPIs', void 0);
+
+ _defineProperty(this, '_timers', void 0);
+
+ _defineProperty(this, '_uuidCounter', void 0);
+
+ _defineProperty(this, '_timerConfig', void 0);
+
+ this._global = global;
+ this._timerConfig = timerConfig;
+ this._config = config;
+ this._maxLoops = maxLoops || 100000;
+ this._uuidCounter = 1;
+ this._moduleMocker = moduleMocker; // Store original timer APIs for future reference
+
+ this._timerAPIs = {
+ cancelAnimationFrame: global.cancelAnimationFrame,
+ clearImmediate: global.clearImmediate,
+ clearInterval: global.clearInterval,
+ clearTimeout: global.clearTimeout,
+ nextTick: global.process && global.process.nextTick,
+ requestAnimationFrame: global.requestAnimationFrame,
+ setImmediate: global.setImmediate,
+ setInterval: global.setInterval,
+ setTimeout: global.setTimeout
+ };
+ this.reset();
+ }
+
+ clearAllTimers() {
+ this._immediates = [];
+
+ this._timers.clear();
+ }
+
+ dispose() {
+ this._disposed = true;
+ this.clearAllTimers();
+ }
+
+ reset() {
+ this._cancelledTicks = {};
+ this._now = 0;
+ this._ticks = [];
+ this._immediates = [];
+ this._timers = new Map();
+ }
+
+ runAllTicks() {
+ this._checkFakeTimers(); // Only run a generous number of ticks and then bail.
+ // This is just to help avoid recursive loops
+
+ let i;
+
+ for (i = 0; i < this._maxLoops; i++) {
+ const tick = this._ticks.shift();
+
+ if (tick === undefined) {
+ break;
+ }
+
+ if (!this._cancelledTicks.hasOwnProperty(tick.uuid)) {
+ // Callback may throw, so update the map prior calling.
+ this._cancelledTicks[tick.uuid] = true;
+ tick.callback();
+ }
+ }
+
+ if (i === this._maxLoops) {
+ throw new Error(
+ 'Ran ' +
+ this._maxLoops +
+ ' ticks, and there are still more! ' +
+ "Assuming we've hit an infinite recursion and bailing out..."
+ );
+ }
+ }
+
+ runAllImmediates() {
+ this._checkFakeTimers(); // Only run a generous number of immediates and then bail.
+
+ let i;
+
+ for (i = 0; i < this._maxLoops; i++) {
+ const immediate = this._immediates.shift();
+
+ if (immediate === undefined) {
+ break;
+ }
+
+ this._runImmediate(immediate);
+ }
+
+ if (i === this._maxLoops) {
+ throw new Error(
+ 'Ran ' +
+ this._maxLoops +
+ ' immediates, and there are still more! Assuming ' +
+ "we've hit an infinite recursion and bailing out..."
+ );
+ }
+ }
+
+ _runImmediate(immediate) {
+ try {
+ immediate.callback();
+ } finally {
+ this._fakeClearImmediate(immediate.uuid);
+ }
+ }
+
+ runAllTimers() {
+ this._checkFakeTimers();
+
+ this.runAllTicks();
+ this.runAllImmediates(); // Only run a generous number of timers and then bail.
+ // This is just to help avoid recursive loops
+
+ let i;
+
+ for (i = 0; i < this._maxLoops; i++) {
+ const nextTimerHandle = this._getNextTimerHandle(); // If there are no more timer handles, stop!
+
+ if (nextTimerHandle === null) {
+ break;
+ }
+
+ this._runTimerHandle(nextTimerHandle); // Some of the immediate calls could be enqueued
+ // during the previous handling of the timers, we should
+ // run them as well.
+
+ if (this._immediates.length) {
+ this.runAllImmediates();
+ }
+
+ if (this._ticks.length) {
+ this.runAllTicks();
+ }
+ }
+
+ if (i === this._maxLoops) {
+ throw new Error(
+ 'Ran ' +
+ this._maxLoops +
+ ' timers, and there are still more! ' +
+ "Assuming we've hit an infinite recursion and bailing out..."
+ );
+ }
+ }
+
+ runOnlyPendingTimers() {
+ // We need to hold the current shape of `this._timers` because existing
+ // timers can add new ones to the map and hence would run more than necessary.
+ // See https://github.com/facebook/jest/pull/4608 for details
+ const timerEntries = Array.from(this._timers.entries());
+
+ this._checkFakeTimers();
+
+ this._immediates.forEach(this._runImmediate, this);
+
+ timerEntries
+ .sort(([, left], [, right]) => left.expiry - right.expiry)
+ .forEach(([timerHandle]) => this._runTimerHandle(timerHandle));
+ }
+
+ advanceTimersToNextTimer(steps = 1) {
+ if (steps < 1) {
+ return;
+ }
+
+ const nextExpiry = Array.from(this._timers.values()).reduce(
+ (minExpiry, timer) => {
+ if (minExpiry === null || timer.expiry < minExpiry) return timer.expiry;
+ return minExpiry;
+ },
+ null
+ );
+
+ if (nextExpiry !== null) {
+ this.advanceTimersByTime(nextExpiry - this._now);
+ this.advanceTimersToNextTimer(steps - 1);
+ }
+ }
+
+ advanceTimersByTime(msToRun) {
+ this._checkFakeTimers(); // Only run a generous number of timers and then bail.
+ // This is just to help avoid recursive loops
+
+ let i;
+
+ for (i = 0; i < this._maxLoops; i++) {
+ const timerHandle = this._getNextTimerHandle(); // If there are no more timer handles, stop!
+
+ if (timerHandle === null) {
+ break;
+ }
+
+ const timerValue = this._timers.get(timerHandle);
+
+ if (timerValue === undefined) {
+ break;
+ }
+
+ const nextTimerExpiry = timerValue.expiry;
+
+ if (this._now + msToRun < nextTimerExpiry) {
+ // There are no timers between now and the target we're running to, so
+ // adjust our time cursor and quit
+ this._now += msToRun;
+ break;
+ } else {
+ msToRun -= nextTimerExpiry - this._now;
+ this._now = nextTimerExpiry;
+
+ this._runTimerHandle(timerHandle);
+ }
+ }
+
+ if (i === this._maxLoops) {
+ throw new Error(
+ 'Ran ' +
+ this._maxLoops +
+ ' timers, and there are still more! ' +
+ "Assuming we've hit an infinite recursion and bailing out..."
+ );
+ }
+ }
+
+ runWithRealTimers(cb) {
+ const prevClearImmediate = this._global.clearImmediate;
+ const prevClearInterval = this._global.clearInterval;
+ const prevClearTimeout = this._global.clearTimeout;
+ const prevNextTick = this._global.process.nextTick;
+ const prevSetImmediate = this._global.setImmediate;
+ const prevSetInterval = this._global.setInterval;
+ const prevSetTimeout = this._global.setTimeout;
+ this.useRealTimers();
+ let cbErr = null;
+ let errThrown = false;
+
+ try {
+ cb();
+ } catch (e) {
+ errThrown = true;
+ cbErr = e;
+ }
+
+ this._global.clearImmediate = prevClearImmediate;
+ this._global.clearInterval = prevClearInterval;
+ this._global.clearTimeout = prevClearTimeout;
+ this._global.process.nextTick = prevNextTick;
+ this._global.setImmediate = prevSetImmediate;
+ this._global.setInterval = prevSetInterval;
+ this._global.setTimeout = prevSetTimeout;
+
+ if (errThrown) {
+ throw cbErr;
+ }
+ }
+
+ useRealTimers() {
+ const global = this._global;
+
+ if (typeof global.cancelAnimationFrame === 'function') {
+ (0, _jestUtil().setGlobal)(
+ global,
+ 'cancelAnimationFrame',
+ this._timerAPIs.cancelAnimationFrame
+ );
+ }
+
+ if (typeof global.clearImmediate === 'function') {
+ (0, _jestUtil().setGlobal)(
+ global,
+ 'clearImmediate',
+ this._timerAPIs.clearImmediate
+ );
+ }
+
+ (0, _jestUtil().setGlobal)(
+ global,
+ 'clearInterval',
+ this._timerAPIs.clearInterval
+ );
+ (0, _jestUtil().setGlobal)(
+ global,
+ 'clearTimeout',
+ this._timerAPIs.clearTimeout
+ );
+
+ if (typeof global.requestAnimationFrame === 'function') {
+ (0, _jestUtil().setGlobal)(
+ global,
+ 'requestAnimationFrame',
+ this._timerAPIs.requestAnimationFrame
+ );
+ }
+
+ if (typeof global.setImmediate === 'function') {
+ (0, _jestUtil().setGlobal)(
+ global,
+ 'setImmediate',
+ this._timerAPIs.setImmediate
+ );
+ }
+
+ (0, _jestUtil().setGlobal)(
+ global,
+ 'setInterval',
+ this._timerAPIs.setInterval
+ );
+ (0, _jestUtil().setGlobal)(
+ global,
+ 'setTimeout',
+ this._timerAPIs.setTimeout
+ );
+ global.process.nextTick = this._timerAPIs.nextTick;
+ }
+
+ useFakeTimers() {
+ this._createMocks();
+
+ const global = this._global;
+
+ if (typeof global.cancelAnimationFrame === 'function') {
+ (0, _jestUtil().setGlobal)(
+ global,
+ 'cancelAnimationFrame',
+ this._fakeTimerAPIs.cancelAnimationFrame
+ );
+ }
+
+ if (typeof global.clearImmediate === 'function') {
+ (0, _jestUtil().setGlobal)(
+ global,
+ 'clearImmediate',
+ this._fakeTimerAPIs.clearImmediate
+ );
+ }
+
+ (0, _jestUtil().setGlobal)(
+ global,
+ 'clearInterval',
+ this._fakeTimerAPIs.clearInterval
+ );
+ (0, _jestUtil().setGlobal)(
+ global,
+ 'clearTimeout',
+ this._fakeTimerAPIs.clearTimeout
+ );
+
+ if (typeof global.requestAnimationFrame === 'function') {
+ (0, _jestUtil().setGlobal)(
+ global,
+ 'requestAnimationFrame',
+ this._fakeTimerAPIs.requestAnimationFrame
+ );
+ }
+
+ if (typeof global.setImmediate === 'function') {
+ (0, _jestUtil().setGlobal)(
+ global,
+ 'setImmediate',
+ this._fakeTimerAPIs.setImmediate
+ );
+ }
+
+ (0, _jestUtil().setGlobal)(
+ global,
+ 'setInterval',
+ this._fakeTimerAPIs.setInterval
+ );
+ (0, _jestUtil().setGlobal)(
+ global,
+ 'setTimeout',
+ this._fakeTimerAPIs.setTimeout
+ );
+ global.process.nextTick = this._fakeTimerAPIs.nextTick;
+ }
+
+ getTimerCount() {
+ this._checkFakeTimers();
+
+ return this._timers.size + this._immediates.length + this._ticks.length;
+ }
+
+ _checkFakeTimers() {
+ var _this$_fakeTimerAPIs;
+
+ if (
+ this._global.setTimeout !==
+ ((_this$_fakeTimerAPIs = this._fakeTimerAPIs) === null ||
+ _this$_fakeTimerAPIs === void 0
+ ? void 0
+ : _this$_fakeTimerAPIs.setTimeout)
+ ) {
+ this._global.console.warn(
+ 'A function to advance timers was called but the timers API is not ' +
+ 'mocked with fake timers. Call `jest.useFakeTimers()` in this ' +
+ 'test or enable fake timers globally by setting ' +
+ '`"timers": "fake"` in ' +
+ 'the configuration file. This warning is likely a result of a ' +
+ 'default configuration change in Jest 15.\n\n' +
+ 'Release Blog Post: https://jestjs.io/blog/2016/09/01/jest-15\n' +
+ 'Stack Trace:\n' +
+ (0, _jestMessageUtil().formatStackTrace)(
+ new Error().stack,
+ this._config,
+ {
+ noStackTrace: false
+ }
+ )
+ );
+ }
+ }
+
+ _createMocks() {
+ const fn = (
+ impl // @ts-expect-error TODO: figure out better typings here
+ ) => this._moduleMocker.fn().mockImplementation(impl);
+
+ const promisifiableFakeSetTimeout = fn(this._fakeSetTimeout.bind(this)); // @ts-expect-error TODO: figure out better typings here
+
+ promisifiableFakeSetTimeout[_util().default.promisify.custom] = (
+ delay,
+ arg
+ ) =>
+ new Promise(resolve => promisifiableFakeSetTimeout(resolve, delay, arg)); // TODO: add better typings; these are mocks, but typed as regular timers
+
+ this._fakeTimerAPIs = {
+ cancelAnimationFrame: fn(this._fakeClearTimer.bind(this)),
+ clearImmediate: fn(this._fakeClearImmediate.bind(this)),
+ clearInterval: fn(this._fakeClearTimer.bind(this)),
+ clearTimeout: fn(this._fakeClearTimer.bind(this)),
+ nextTick: fn(this._fakeNextTick.bind(this)),
+ // @ts-expect-error TODO: figure out better typings here
+ requestAnimationFrame: fn(this._fakeRequestAnimationFrame.bind(this)),
+ // @ts-expect-error TODO: figure out better typings here
+ setImmediate: fn(this._fakeSetImmediate.bind(this)),
+ // @ts-expect-error TODO: figure out better typings here
+ setInterval: fn(this._fakeSetInterval.bind(this)),
+ // @ts-expect-error TODO: figure out better typings here
+ setTimeout: promisifiableFakeSetTimeout
+ };
+ }
+
+ _fakeClearTimer(timerRef) {
+ const uuid = this._timerConfig.refToId(timerRef);
+
+ if (uuid) {
+ this._timers.delete(String(uuid));
+ }
+ }
+
+ _fakeClearImmediate(uuid) {
+ this._immediates = this._immediates.filter(
+ immediate => immediate.uuid !== uuid
+ );
+ }
+
+ _fakeNextTick(callback, ...args) {
+ if (this._disposed) {
+ return;
+ }
+
+ const uuid = String(this._uuidCounter++);
+
+ this._ticks.push({
+ callback: () => callback.apply(null, args),
+ uuid
+ });
+
+ const cancelledTicks = this._cancelledTicks;
+
+ this._timerAPIs.nextTick(() => {
+ if (!cancelledTicks.hasOwnProperty(uuid)) {
+ // Callback may throw, so update the map prior calling.
+ cancelledTicks[uuid] = true;
+ callback.apply(null, args);
+ }
+ });
+ }
+
+ _fakeRequestAnimationFrame(callback) {
+ return this._fakeSetTimeout(() => {
+ // TODO: Use performance.now() once it's mocked
+ callback(this._now);
+ }, 1000 / 60);
+ }
+
+ _fakeSetImmediate(callback, ...args) {
+ if (this._disposed) {
+ return null;
+ }
+
+ const uuid = String(this._uuidCounter++);
+
+ this._immediates.push({
+ callback: () => callback.apply(null, args),
+ uuid
+ });
+
+ this._timerAPIs.setImmediate(() => {
+ if (this._immediates.find(x => x.uuid === uuid)) {
+ try {
+ callback.apply(null, args);
+ } finally {
+ this._fakeClearImmediate(uuid);
+ }
+ }
+ });
+
+ return uuid;
+ }
+
+ _fakeSetInterval(callback, intervalDelay, ...args) {
+ if (this._disposed) {
+ return null;
+ }
+
+ if (intervalDelay == null) {
+ intervalDelay = 0;
+ }
+
+ const uuid = this._uuidCounter++;
+
+ this._timers.set(String(uuid), {
+ callback: () => callback.apply(null, args),
+ expiry: this._now + intervalDelay,
+ interval: intervalDelay,
+ type: 'interval'
+ });
+
+ return this._timerConfig.idToRef(uuid);
+ }
+
+ _fakeSetTimeout(callback, delay, ...args) {
+ if (this._disposed) {
+ return null;
+ } // eslint-disable-next-line no-bitwise
+
+ delay = Number(delay) | 0;
+ const uuid = this._uuidCounter++;
+
+ this._timers.set(String(uuid), {
+ callback: () => callback.apply(null, args),
+ expiry: this._now + delay,
+ interval: undefined,
+ type: 'timeout'
+ });
+
+ return this._timerConfig.idToRef(uuid);
+ }
+
+ _getNextTimerHandle() {
+ let nextTimerHandle = null;
+ let soonestTime = MS_IN_A_YEAR;
+
+ this._timers.forEach((timer, uuid) => {
+ if (timer.expiry < soonestTime) {
+ soonestTime = timer.expiry;
+ nextTimerHandle = uuid;
+ }
+ });
+
+ return nextTimerHandle;
+ }
+
+ _runTimerHandle(timerHandle) {
+ const timer = this._timers.get(timerHandle);
+
+ if (!timer) {
+ return;
+ }
+
+ switch (timer.type) {
+ case 'timeout':
+ this._timers.delete(timerHandle);
+
+ timer.callback();
+ break;
+
+ case 'interval':
+ timer.expiry = this._now + (timer.interval || 0);
+ timer.callback();
+ break;
+
+ default:
+ throw new Error('Unexpected timer type: ' + timer.type);
+ }
+ }
+}
+
+exports.default = FakeTimers;
diff --git a/node_modules/@jest/fake-timers/build/modernFakeTimers.d.ts b/node_modules/@jest/fake-timers/build/modernFakeTimers.d.ts
new file mode 100644
index 0000000..b7cefc4
--- /dev/null
+++ b/node_modules/@jest/fake-timers/build/modernFakeTimers.d.ts
@@ -0,0 +1,34 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import { StackTraceConfig } from 'jest-message-util';
+export default class FakeTimers {
+ private _clock;
+ private _config;
+ private _fakingTime;
+ private _global;
+ private _fakeTimers;
+ private _maxLoops;
+ constructor({ global, config, maxLoops, }: {
+ global: typeof globalThis;
+ config: StackTraceConfig;
+ maxLoops?: number;
+ });
+ clearAllTimers(): void;
+ dispose(): void;
+ runAllTimers(): void;
+ runOnlyPendingTimers(): void;
+ advanceTimersToNextTimer(steps?: number): void;
+ advanceTimersByTime(msToRun: number): void;
+ runAllTicks(): void;
+ useRealTimers(): void;
+ useFakeTimers(): void;
+ reset(): void;
+ setSystemTime(now?: number | Date): void;
+ getRealSystemTime(): number;
+ getTimerCount(): number;
+ private _checkFakeTimers;
+}
diff --git a/node_modules/@jest/fake-timers/build/modernFakeTimers.js b/node_modules/@jest/fake-timers/build/modernFakeTimers.js
new file mode 100644
index 0000000..9e1963e
--- /dev/null
+++ b/node_modules/@jest/fake-timers/build/modernFakeTimers.js
@@ -0,0 +1,181 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+
+function _fakeTimers() {
+ const data = require('@sinonjs/fake-timers');
+
+ _fakeTimers = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestMessageUtil() {
+ const data = require('jest-message-util');
+
+ _jestMessageUtil = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _defineProperty(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+}
+
+class FakeTimers {
+ constructor({global, config, maxLoops}) {
+ _defineProperty(this, '_clock', void 0);
+
+ _defineProperty(this, '_config', void 0);
+
+ _defineProperty(this, '_fakingTime', void 0);
+
+ _defineProperty(this, '_global', void 0);
+
+ _defineProperty(this, '_fakeTimers', void 0);
+
+ _defineProperty(this, '_maxLoops', void 0);
+
+ this._global = global;
+ this._config = config;
+ this._maxLoops = maxLoops || 100000;
+ this._fakingTime = false;
+ this._fakeTimers = (0, _fakeTimers().withGlobal)(global);
+ }
+
+ clearAllTimers() {
+ if (this._fakingTime) {
+ this._clock.reset();
+ }
+ }
+
+ dispose() {
+ this.useRealTimers();
+ }
+
+ runAllTimers() {
+ if (this._checkFakeTimers()) {
+ this._clock.runAll();
+ }
+ }
+
+ runOnlyPendingTimers() {
+ if (this._checkFakeTimers()) {
+ this._clock.runToLast();
+ }
+ }
+
+ advanceTimersToNextTimer(steps = 1) {
+ if (this._checkFakeTimers()) {
+ for (let i = steps; i > 0; i--) {
+ this._clock.next(); // Fire all timers at this point: https://github.com/sinonjs/fake-timers/issues/250
+
+ this._clock.tick(0);
+
+ if (this._clock.countTimers() === 0) {
+ break;
+ }
+ }
+ }
+ }
+
+ advanceTimersByTime(msToRun) {
+ if (this._checkFakeTimers()) {
+ this._clock.tick(msToRun);
+ }
+ }
+
+ runAllTicks() {
+ if (this._checkFakeTimers()) {
+ // @ts-expect-error
+ this._clock.runMicrotasks();
+ }
+ }
+
+ useRealTimers() {
+ if (this._fakingTime) {
+ this._clock.uninstall();
+
+ this._fakingTime = false;
+ }
+ }
+
+ useFakeTimers() {
+ if (!this._fakingTime) {
+ const toFake = Object.keys(this._fakeTimers.timers);
+ this._clock = this._fakeTimers.install({
+ loopLimit: this._maxLoops,
+ now: Date.now(),
+ toFake
+ });
+ this._fakingTime = true;
+ }
+ }
+
+ reset() {
+ if (this._checkFakeTimers()) {
+ const {now} = this._clock;
+
+ this._clock.reset();
+
+ this._clock.setSystemTime(now);
+ }
+ }
+
+ setSystemTime(now) {
+ if (this._checkFakeTimers()) {
+ this._clock.setSystemTime(now);
+ }
+ }
+
+ getRealSystemTime() {
+ return Date.now();
+ }
+
+ getTimerCount() {
+ if (this._checkFakeTimers()) {
+ return this._clock.countTimers();
+ }
+
+ return 0;
+ }
+
+ _checkFakeTimers() {
+ if (!this._fakingTime) {
+ this._global.console.warn(
+ 'A function to advance timers was called but the timers API is not ' +
+ 'mocked with fake timers. Call `jest.useFakeTimers()` in this test or ' +
+ 'enable fake timers globally by setting `"timers": "fake"` in the ' +
+ 'configuration file\nStack Trace:\n' +
+ (0, _jestMessageUtil().formatStackTrace)(
+ new Error().stack,
+ this._config,
+ {
+ noStackTrace: false
+ }
+ )
+ );
+ }
+
+ return this._fakingTime;
+ }
+}
+
+exports.default = FakeTimers;
diff --git a/node_modules/@jest/fake-timers/package.json b/node_modules/@jest/fake-timers/package.json
new file mode 100644
index 0000000..861e2ce
--- /dev/null
+++ b/node_modules/@jest/fake-timers/package.json
@@ -0,0 +1,37 @@
+{
+ "name": "@jest/fake-timers",
+ "version": "27.5.1",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/facebook/jest.git",
+ "directory": "packages/jest-fake-timers"
+ },
+ "license": "MIT",
+ "main": "./build/index.js",
+ "types": "./build/index.d.ts",
+ "exports": {
+ ".": {
+ "types": "./build/index.d.ts",
+ "default": "./build/index.js"
+ },
+ "./package.json": "./package.json"
+ },
+ "dependencies": {
+ "@jest/types": "^27.5.1",
+ "@sinonjs/fake-timers": "^8.0.1",
+ "@types/node": "*",
+ "jest-message-util": "^27.5.1",
+ "jest-mock": "^27.5.1",
+ "jest-util": "^27.5.1"
+ },
+ "devDependencies": {
+ "@types/sinonjs__fake-timers": "^8.1.1"
+ },
+ "engines": {
+ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ },
+ "publishConfig": {
+ "access": "public"
+ },
+ "gitHead": "67c1aa20c5fec31366d733e901fee2b981cb1850"
+}
diff --git a/node_modules/@jest/globals/LICENSE b/node_modules/@jest/globals/LICENSE
new file mode 100644
index 0000000..b96dcb0
--- /dev/null
+++ b/node_modules/@jest/globals/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) Facebook, Inc. and its affiliates.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/node_modules/@jest/globals/build/index.d.ts b/node_modules/@jest/globals/build/index.d.ts
new file mode 100644
index 0000000..1cc83b8
--- /dev/null
+++ b/node_modules/@jest/globals/build/index.d.ts
@@ -0,0 +1,23 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import type { Jest } from '@jest/environment';
+import type { Global } from '@jest/types';
+import importedExpect = require('expect');
+export declare const jest: Jest;
+export declare const expect: typeof importedExpect;
+export declare const it: Global.GlobalAdditions['it'];
+export declare const test: Global.GlobalAdditions['test'];
+export declare const fit: Global.GlobalAdditions['fit'];
+export declare const xit: Global.GlobalAdditions['xit'];
+export declare const xtest: Global.GlobalAdditions['xtest'];
+export declare const describe: Global.GlobalAdditions['describe'];
+export declare const xdescribe: Global.GlobalAdditions['xdescribe'];
+export declare const fdescribe: Global.GlobalAdditions['fdescribe'];
+export declare const beforeAll: Global.GlobalAdditions['beforeAll'];
+export declare const beforeEach: Global.GlobalAdditions['beforeEach'];
+export declare const afterEach: Global.GlobalAdditions['afterEach'];
+export declare const afterAll: Global.GlobalAdditions['afterAll'];
diff --git a/node_modules/@jest/globals/build/index.js b/node_modules/@jest/globals/build/index.js
new file mode 100644
index 0000000..06f90c1
--- /dev/null
+++ b/node_modules/@jest/globals/build/index.js
@@ -0,0 +1,25 @@
+'use strict';
+
+function _expect() {
+ const data = _interopRequireDefault(require('expect'));
+
+ _expect = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+throw new Error(
+ 'Do not import `@jest/globals` outside of the Jest test environment'
+);
diff --git a/node_modules/@jest/globals/package.json b/node_modules/@jest/globals/package.json
new file mode 100644
index 0000000..9cadc9b
--- /dev/null
+++ b/node_modules/@jest/globals/package.json
@@ -0,0 +1,31 @@
+{
+ "name": "@jest/globals",
+ "version": "27.5.1",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/facebook/jest.git",
+ "directory": "packages/jest-globals"
+ },
+ "engines": {
+ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ },
+ "license": "MIT",
+ "main": "./build/index.js",
+ "types": "./build/index.d.ts",
+ "exports": {
+ ".": {
+ "types": "./build/index.d.ts",
+ "default": "./build/index.js"
+ },
+ "./package.json": "./package.json"
+ },
+ "dependencies": {
+ "@jest/environment": "^27.5.1",
+ "@jest/types": "^27.5.1",
+ "expect": "^27.5.1"
+ },
+ "publishConfig": {
+ "access": "public"
+ },
+ "gitHead": "67c1aa20c5fec31366d733e901fee2b981cb1850"
+}
diff --git a/node_modules/@jest/reporters/LICENSE b/node_modules/@jest/reporters/LICENSE
new file mode 100644
index 0000000..b96dcb0
--- /dev/null
+++ b/node_modules/@jest/reporters/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) Facebook, Inc. and its affiliates.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/node_modules/@jest/reporters/build/BaseReporter.d.ts b/node_modules/@jest/reporters/build/BaseReporter.d.ts
new file mode 100644
index 0000000..17b36a0
--- /dev/null
+++ b/node_modules/@jest/reporters/build/BaseReporter.d.ts
@@ -0,0 +1,19 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import type { AggregatedResult, TestCaseResult, TestResult } from '@jest/test-result';
+import type { Context, Reporter, ReporterOnStartOptions, Test } from './types';
+export default class BaseReporter implements Reporter {
+ private _error?;
+ log(message: string): void;
+ onRunStart(_results?: AggregatedResult, _options?: ReporterOnStartOptions): void;
+ onTestCaseResult(_test: Test, _testCaseResult: TestCaseResult): void;
+ onTestResult(_test?: Test, _testResult?: TestResult, _results?: AggregatedResult): void;
+ onTestStart(_test?: Test): void;
+ onRunComplete(_contexts?: Set<Context>, _aggregatedResults?: AggregatedResult): Promise<void> | void;
+ protected _setError(error: Error): void;
+ getLastError(): Error | undefined;
+}
diff --git a/node_modules/@jest/reporters/build/BaseReporter.js b/node_modules/@jest/reporters/build/BaseReporter.js
new file mode 100644
index 0000000..d457307
--- /dev/null
+++ b/node_modules/@jest/reporters/build/BaseReporter.js
@@ -0,0 +1,65 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+
+function _jestUtil() {
+ const data = require('jest-util');
+
+ _jestUtil = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _defineProperty(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+}
+
+const {remove: preRunMessageRemove} = _jestUtil().preRunMessage;
+
+class BaseReporter {
+ constructor() {
+ _defineProperty(this, '_error', void 0);
+ }
+
+ log(message) {
+ process.stderr.write(message + '\n');
+ }
+
+ onRunStart(_results, _options) {
+ preRunMessageRemove(process.stderr);
+ }
+
+ onTestCaseResult(_test, _testCaseResult) {}
+
+ onTestResult(_test, _testResult, _results) {}
+
+ onTestStart(_test) {}
+
+ onRunComplete(_contexts, _aggregatedResults) {}
+
+ _setError(error) {
+ this._error = error;
+ } // Return an error that occurred during reporting. This error will
+ // define whether the test run was successful or failed.
+
+ getLastError() {
+ return this._error;
+ }
+}
+
+exports.default = BaseReporter;
diff --git a/node_modules/@jest/reporters/build/CoverageReporter.d.ts b/node_modules/@jest/reporters/build/CoverageReporter.d.ts
new file mode 100644
index 0000000..fd600f3
--- /dev/null
+++ b/node_modules/@jest/reporters/build/CoverageReporter.d.ts
@@ -0,0 +1,24 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import type { AggregatedResult, TestResult } from '@jest/test-result';
+import type { Config } from '@jest/types';
+import BaseReporter from './BaseReporter';
+import type { Context, CoverageReporterOptions, Test } from './types';
+export default class CoverageReporter extends BaseReporter {
+ private _coverageMap;
+ private _globalConfig;
+ private _sourceMapStore;
+ private _options;
+ private _v8CoverageResults;
+ static readonly filename: string;
+ constructor(globalConfig: Config.GlobalConfig, options?: CoverageReporterOptions);
+ onTestResult(_test: Test, testResult: TestResult): void;
+ onRunComplete(contexts: Set<Context>, aggregatedResults: AggregatedResult): Promise<void>;
+ private _addUntestedFiles;
+ private _checkThreshold;
+ private _getCoverageResult;
+}
diff --git a/node_modules/@jest/reporters/build/CoverageReporter.js b/node_modules/@jest/reporters/build/CoverageReporter.js
new file mode 100644
index 0000000..4ea3f0e
--- /dev/null
+++ b/node_modules/@jest/reporters/build/CoverageReporter.js
@@ -0,0 +1,668 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+
+function path() {
+ const data = _interopRequireWildcard(require('path'));
+
+ path = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _v8Coverage() {
+ const data = require('@bcoe/v8-coverage');
+
+ _v8Coverage = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+
+ _chalk = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _glob() {
+ const data = _interopRequireDefault(require('glob'));
+
+ _glob = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function fs() {
+ const data = _interopRequireWildcard(require('graceful-fs'));
+
+ fs = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _istanbulLibCoverage() {
+ const data = _interopRequireDefault(require('istanbul-lib-coverage'));
+
+ _istanbulLibCoverage = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _istanbulLibReport() {
+ const data = _interopRequireDefault(require('istanbul-lib-report'));
+
+ _istanbulLibReport = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _istanbulLibSourceMaps() {
+ const data = _interopRequireDefault(require('istanbul-lib-source-maps'));
+
+ _istanbulLibSourceMaps = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _istanbulReports() {
+ const data = _interopRequireDefault(require('istanbul-reports'));
+
+ _istanbulReports = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _v8ToIstanbul() {
+ const data = _interopRequireDefault(require('v8-to-istanbul'));
+
+ _v8ToIstanbul = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestUtil() {
+ const data = require('jest-util');
+
+ _jestUtil = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestWorker() {
+ const data = require('jest-worker');
+
+ _jestWorker = function () {
+ return data;
+ };
+
+ return data;
+}
+
+var _BaseReporter = _interopRequireDefault(require('./BaseReporter'));
+
+var _getWatermarks = _interopRequireDefault(require('./getWatermarks'));
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+function _getRequireWildcardCache(nodeInterop) {
+ if (typeof WeakMap !== 'function') return null;
+ var cacheBabelInterop = new WeakMap();
+ var cacheNodeInterop = new WeakMap();
+ return (_getRequireWildcardCache = function (nodeInterop) {
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
+ })(nodeInterop);
+}
+
+function _interopRequireWildcard(obj, nodeInterop) {
+ if (!nodeInterop && obj && obj.__esModule) {
+ return obj;
+ }
+ if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) {
+ return {default: obj};
+ }
+ var cache = _getRequireWildcardCache(nodeInterop);
+ if (cache && cache.has(obj)) {
+ return cache.get(obj);
+ }
+ var newObj = {};
+ var hasPropertyDescriptor =
+ Object.defineProperty && Object.getOwnPropertyDescriptor;
+ for (var key in obj) {
+ if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) {
+ var desc = hasPropertyDescriptor
+ ? Object.getOwnPropertyDescriptor(obj, key)
+ : null;
+ if (desc && (desc.get || desc.set)) {
+ Object.defineProperty(newObj, key, desc);
+ } else {
+ newObj[key] = obj[key];
+ }
+ }
+ }
+ newObj.default = obj;
+ if (cache) {
+ cache.set(obj, newObj);
+ }
+ return newObj;
+}
+
+function _defineProperty(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+}
+
+const FAIL_COLOR = _chalk().default.bold.red;
+
+const RUNNING_TEST_COLOR = _chalk().default.bold.dim;
+
+class CoverageReporter extends _BaseReporter.default {
+ constructor(globalConfig, options) {
+ super();
+
+ _defineProperty(this, '_coverageMap', void 0);
+
+ _defineProperty(this, '_globalConfig', void 0);
+
+ _defineProperty(this, '_sourceMapStore', void 0);
+
+ _defineProperty(this, '_options', void 0);
+
+ _defineProperty(this, '_v8CoverageResults', void 0);
+
+ this._coverageMap = _istanbulLibCoverage().default.createCoverageMap({});
+ this._globalConfig = globalConfig;
+ this._sourceMapStore =
+ _istanbulLibSourceMaps().default.createSourceMapStore();
+ this._v8CoverageResults = [];
+ this._options = options || {};
+ }
+
+ onTestResult(_test, testResult) {
+ if (testResult.v8Coverage) {
+ this._v8CoverageResults.push(testResult.v8Coverage);
+
+ return;
+ }
+
+ if (testResult.coverage) {
+ this._coverageMap.merge(testResult.coverage);
+ }
+ }
+
+ async onRunComplete(contexts, aggregatedResults) {
+ await this._addUntestedFiles(contexts);
+ const {map, reportContext} = await this._getCoverageResult();
+
+ try {
+ const coverageReporters = this._globalConfig.coverageReporters || [];
+
+ if (!this._globalConfig.useStderr && coverageReporters.length < 1) {
+ coverageReporters.push('text-summary');
+ }
+
+ coverageReporters.forEach(reporter => {
+ let additionalOptions = {};
+
+ if (Array.isArray(reporter)) {
+ [reporter, additionalOptions] = reporter;
+ }
+
+ _istanbulReports()
+ .default.create(reporter, {
+ maxCols: process.stdout.columns || Infinity,
+ ...additionalOptions
+ })
+ .execute(reportContext);
+ });
+ aggregatedResults.coverageMap = map;
+ } catch (e) {
+ console.error(
+ _chalk().default.red(`
+ Failed to write coverage reports:
+ ERROR: ${e.toString()}
+ STACK: ${e.stack}
+ `)
+ );
+ }
+
+ this._checkThreshold(map);
+ }
+
+ async _addUntestedFiles(contexts) {
+ const files = [];
+ contexts.forEach(context => {
+ const config = context.config;
+
+ if (
+ this._globalConfig.collectCoverageFrom &&
+ this._globalConfig.collectCoverageFrom.length
+ ) {
+ context.hasteFS
+ .matchFilesWithGlob(
+ this._globalConfig.collectCoverageFrom,
+ config.rootDir
+ )
+ .forEach(filePath =>
+ files.push({
+ config,
+ path: filePath
+ })
+ );
+ }
+ });
+
+ if (!files.length) {
+ return;
+ }
+
+ if (_jestUtil().isInteractive) {
+ process.stderr.write(
+ RUNNING_TEST_COLOR('Running coverage on untested files...')
+ );
+ }
+
+ let worker;
+
+ if (this._globalConfig.maxWorkers <= 1) {
+ worker = require('./CoverageWorker');
+ } else {
+ worker = new (_jestWorker().Worker)(require.resolve('./CoverageWorker'), {
+ exposedMethods: ['worker'],
+ maxRetries: 2,
+ numWorkers: this._globalConfig.maxWorkers
+ });
+ }
+
+ const instrumentation = files.map(async fileObj => {
+ const filename = fileObj.path;
+ const config = fileObj.config;
+
+ const hasCoverageData = this._v8CoverageResults.some(v8Res =>
+ v8Res.some(innerRes => innerRes.result.url === filename)
+ );
+
+ if (
+ !hasCoverageData &&
+ !this._coverageMap.data[filename] &&
+ 'worker' in worker
+ ) {
+ try {
+ const result = await worker.worker({
+ config,
+ globalConfig: this._globalConfig,
+ options: {
+ ...this._options,
+ changedFiles:
+ this._options.changedFiles &&
+ Array.from(this._options.changedFiles),
+ sourcesRelatedToTestsInChangedFiles:
+ this._options.sourcesRelatedToTestsInChangedFiles &&
+ Array.from(this._options.sourcesRelatedToTestsInChangedFiles)
+ },
+ path: filename
+ });
+
+ if (result) {
+ if (result.kind === 'V8Coverage') {
+ this._v8CoverageResults.push([
+ {
+ codeTransformResult: undefined,
+ result: result.result
+ }
+ ]);
+ } else {
+ this._coverageMap.addFileCoverage(result.coverage);
+ }
+ }
+ } catch (error) {
+ console.error(
+ _chalk().default.red(
+ [
+ `Failed to collect coverage from ${filename}`,
+ `ERROR: ${error.message}`,
+ `STACK: ${error.stack}`
+ ].join('\n')
+ )
+ );
+ }
+ }
+ });
+
+ try {
+ await Promise.all(instrumentation);
+ } catch {
+ // Do nothing; errors were reported earlier to the console.
+ }
+
+ if (_jestUtil().isInteractive) {
+ (0, _jestUtil().clearLine)(process.stderr);
+ }
+
+ if (worker && 'end' in worker && typeof worker.end === 'function') {
+ await worker.end();
+ }
+ }
+
+ _checkThreshold(map) {
+ const {coverageThreshold} = this._globalConfig;
+
+ if (coverageThreshold) {
+ function check(name, thresholds, actuals) {
+ return ['statements', 'branches', 'lines', 'functions'].reduce(
+ (errors, key) => {
+ const actual = actuals[key].pct;
+ const actualUncovered = actuals[key].total - actuals[key].covered;
+ const threshold = thresholds[key];
+
+ if (threshold !== undefined) {
+ if (threshold < 0) {
+ if (threshold * -1 < actualUncovered) {
+ errors.push(
+ `Jest: Uncovered count for ${key} (${actualUncovered}) ` +
+ `exceeds ${name} threshold (${-1 * threshold})`
+ );
+ }
+ } else if (actual < threshold) {
+ errors.push(
+ `Jest: "${name}" coverage threshold for ${key} (${threshold}%) not met: ${actual}%`
+ );
+ }
+ }
+
+ return errors;
+ },
+ []
+ );
+ }
+
+ const THRESHOLD_GROUP_TYPES = {
+ GLOB: 'glob',
+ GLOBAL: 'global',
+ PATH: 'path'
+ };
+ const coveredFiles = map.files();
+ const thresholdGroups = Object.keys(coverageThreshold);
+ const groupTypeByThresholdGroup = {};
+ const filesByGlob = {};
+ const coveredFilesSortedIntoThresholdGroup = coveredFiles.reduce(
+ (files, file) => {
+ const pathOrGlobMatches = thresholdGroups.reduce(
+ (agg, thresholdGroup) => {
+ const absoluteThresholdGroup = path().resolve(thresholdGroup); // The threshold group might be a path:
+
+ if (file.indexOf(absoluteThresholdGroup) === 0) {
+ groupTypeByThresholdGroup[thresholdGroup] =
+ THRESHOLD_GROUP_TYPES.PATH;
+ return agg.concat([[file, thresholdGroup]]);
+ } // If the threshold group is not a path it might be a glob:
+ // Note: glob.sync is slow. By memoizing the files matching each glob
+ // (rather than recalculating it for each covered file) we save a tonne
+ // of execution time.
+
+ if (filesByGlob[absoluteThresholdGroup] === undefined) {
+ filesByGlob[absoluteThresholdGroup] = _glob()
+ .default.sync(absoluteThresholdGroup)
+ .map(filePath => path().resolve(filePath));
+ }
+
+ if (filesByGlob[absoluteThresholdGroup].indexOf(file) > -1) {
+ groupTypeByThresholdGroup[thresholdGroup] =
+ THRESHOLD_GROUP_TYPES.GLOB;
+ return agg.concat([[file, thresholdGroup]]);
+ }
+
+ return agg;
+ },
+ []
+ );
+
+ if (pathOrGlobMatches.length > 0) {
+ return files.concat(pathOrGlobMatches);
+ } // Neither a glob or a path? Toss it in global if there's a global threshold:
+
+ if (thresholdGroups.indexOf(THRESHOLD_GROUP_TYPES.GLOBAL) > -1) {
+ groupTypeByThresholdGroup[THRESHOLD_GROUP_TYPES.GLOBAL] =
+ THRESHOLD_GROUP_TYPES.GLOBAL;
+ return files.concat([[file, THRESHOLD_GROUP_TYPES.GLOBAL]]);
+ } // A covered file that doesn't have a threshold:
+
+ return files.concat([[file, undefined]]);
+ },
+ []
+ );
+
+ const getFilesInThresholdGroup = thresholdGroup =>
+ coveredFilesSortedIntoThresholdGroup
+ .filter(fileAndGroup => fileAndGroup[1] === thresholdGroup)
+ .map(fileAndGroup => fileAndGroup[0]);
+
+ function combineCoverage(filePaths) {
+ return filePaths
+ .map(filePath => map.fileCoverageFor(filePath))
+ .reduce((combinedCoverage, nextFileCoverage) => {
+ if (combinedCoverage === undefined || combinedCoverage === null) {
+ return nextFileCoverage.toSummary();
+ }
+
+ return combinedCoverage.merge(nextFileCoverage.toSummary());
+ }, undefined);
+ }
+
+ let errors = [];
+ thresholdGroups.forEach(thresholdGroup => {
+ switch (groupTypeByThresholdGroup[thresholdGroup]) {
+ case THRESHOLD_GROUP_TYPES.GLOBAL: {
+ const coverage = combineCoverage(
+ getFilesInThresholdGroup(THRESHOLD_GROUP_TYPES.GLOBAL)
+ );
+
+ if (coverage) {
+ errors = errors.concat(
+ check(
+ thresholdGroup,
+ coverageThreshold[thresholdGroup],
+ coverage
+ )
+ );
+ }
+
+ break;
+ }
+
+ case THRESHOLD_GROUP_TYPES.PATH: {
+ const coverage = combineCoverage(
+ getFilesInThresholdGroup(thresholdGroup)
+ );
+
+ if (coverage) {
+ errors = errors.concat(
+ check(
+ thresholdGroup,
+ coverageThreshold[thresholdGroup],
+ coverage
+ )
+ );
+ }
+
+ break;
+ }
+
+ case THRESHOLD_GROUP_TYPES.GLOB:
+ getFilesInThresholdGroup(thresholdGroup).forEach(
+ fileMatchingGlob => {
+ errors = errors.concat(
+ check(
+ fileMatchingGlob,
+ coverageThreshold[thresholdGroup],
+ map.fileCoverageFor(fileMatchingGlob).toSummary()
+ )
+ );
+ }
+ );
+ break;
+
+ default:
+ // If the file specified by path is not found, error is returned.
+ if (thresholdGroup !== THRESHOLD_GROUP_TYPES.GLOBAL) {
+ errors = errors.concat(
+ `Jest: Coverage data for ${thresholdGroup} was not found.`
+ );
+ }
+
+ // Sometimes all files in the coverage data are matched by
+ // PATH and GLOB threshold groups in which case, don't error when
+ // the global threshold group doesn't match any files.
+ }
+ });
+ errors = errors.filter(
+ err => err !== undefined && err !== null && err.length > 0
+ );
+
+ if (errors.length > 0) {
+ this.log(`${FAIL_COLOR(errors.join('\n'))}`);
+
+ this._setError(new Error(errors.join('\n')));
+ }
+ }
+ }
+
+ async _getCoverageResult() {
+ if (this._globalConfig.coverageProvider === 'v8') {
+ const mergedCoverages = (0, _v8Coverage().mergeProcessCovs)(
+ this._v8CoverageResults.map(cov => ({
+ result: cov.map(r => r.result)
+ }))
+ );
+ const fileTransforms = new Map();
+
+ this._v8CoverageResults.forEach(res =>
+ res.forEach(r => {
+ if (r.codeTransformResult && !fileTransforms.has(r.result.url)) {
+ fileTransforms.set(r.result.url, r.codeTransformResult);
+ }
+ })
+ );
+
+ const transformedCoverage = await Promise.all(
+ mergedCoverages.result.map(async res => {
+ var _fileTransform$wrappe;
+
+ const fileTransform = fileTransforms.get(res.url);
+ let sourcemapContent = undefined;
+
+ if (
+ fileTransform !== null &&
+ fileTransform !== void 0 &&
+ fileTransform.sourceMapPath &&
+ fs().existsSync(fileTransform.sourceMapPath)
+ ) {
+ sourcemapContent = JSON.parse(
+ fs().readFileSync(fileTransform.sourceMapPath, 'utf8')
+ );
+ }
+
+ const converter = (0, _v8ToIstanbul().default)(
+ res.url,
+ (_fileTransform$wrappe =
+ fileTransform === null || fileTransform === void 0
+ ? void 0
+ : fileTransform.wrapperLength) !== null &&
+ _fileTransform$wrappe !== void 0
+ ? _fileTransform$wrappe
+ : 0,
+ fileTransform && sourcemapContent
+ ? {
+ originalSource: fileTransform.originalCode,
+ source: fileTransform.code,
+ sourceMap: {
+ sourcemap: {
+ file: res.url,
+ ...sourcemapContent
+ }
+ }
+ }
+ : {
+ source: fs().readFileSync(res.url, 'utf8')
+ }
+ );
+ await converter.load();
+ converter.applyCoverage(res.functions);
+ const istanbulData = converter.toIstanbul();
+ converter.destroy();
+ return istanbulData;
+ })
+ );
+
+ const map = _istanbulLibCoverage().default.createCoverageMap({});
+
+ transformedCoverage.forEach(res => map.merge(res));
+
+ const reportContext = _istanbulLibReport().default.createContext({
+ coverageMap: map,
+ dir: this._globalConfig.coverageDirectory,
+ watermarks: (0, _getWatermarks.default)(this._globalConfig)
+ });
+
+ return {
+ map,
+ reportContext
+ };
+ }
+
+ const map = await this._sourceMapStore.transformCoverage(this._coverageMap);
+
+ const reportContext = _istanbulLibReport().default.createContext({
+ coverageMap: map,
+ dir: this._globalConfig.coverageDirectory,
+ sourceFinder: this._sourceMapStore.sourceFinder,
+ watermarks: (0, _getWatermarks.default)(this._globalConfig)
+ });
+
+ return {
+ map,
+ reportContext
+ };
+ }
+}
+
+exports.default = CoverageReporter;
+
+_defineProperty(CoverageReporter, 'filename', __filename);
diff --git a/node_modules/@jest/reporters/build/CoverageWorker.d.ts b/node_modules/@jest/reporters/build/CoverageWorker.d.ts
new file mode 100644
index 0000000..068ad0f
--- /dev/null
+++ b/node_modules/@jest/reporters/build/CoverageWorker.d.ts
@@ -0,0 +1,17 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import type { Config } from '@jest/types';
+import { CoverageWorkerResult } from './generateEmptyCoverage';
+import type { CoverageReporterSerializedOptions } from './types';
+export declare type CoverageWorkerData = {
+ globalConfig: Config.GlobalConfig;
+ config: Config.ProjectConfig;
+ path: Config.Path;
+ options?: CoverageReporterSerializedOptions;
+};
+export type { CoverageWorkerResult };
+export declare function worker({ config, globalConfig, path, options, }: CoverageWorkerData): Promise<CoverageWorkerResult | null>;
diff --git a/node_modules/@jest/reporters/build/CoverageWorker.js b/node_modules/@jest/reporters/build/CoverageWorker.js
new file mode 100644
index 0000000..24de6c6
--- /dev/null
+++ b/node_modules/@jest/reporters/build/CoverageWorker.js
@@ -0,0 +1,103 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.worker = worker;
+
+function _exit() {
+ const data = _interopRequireDefault(require('exit'));
+
+ _exit = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function fs() {
+ const data = _interopRequireWildcard(require('graceful-fs'));
+
+ fs = function () {
+ return data;
+ };
+
+ return data;
+}
+
+var _generateEmptyCoverage = _interopRequireDefault(
+ require('./generateEmptyCoverage')
+);
+
+function _getRequireWildcardCache(nodeInterop) {
+ if (typeof WeakMap !== 'function') return null;
+ var cacheBabelInterop = new WeakMap();
+ var cacheNodeInterop = new WeakMap();
+ return (_getRequireWildcardCache = function (nodeInterop) {
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
+ })(nodeInterop);
+}
+
+function _interopRequireWildcard(obj, nodeInterop) {
+ if (!nodeInterop && obj && obj.__esModule) {
+ return obj;
+ }
+ if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) {
+ return {default: obj};
+ }
+ var cache = _getRequireWildcardCache(nodeInterop);
+ if (cache && cache.has(obj)) {
+ return cache.get(obj);
+ }
+ var newObj = {};
+ var hasPropertyDescriptor =
+ Object.defineProperty && Object.getOwnPropertyDescriptor;
+ for (var key in obj) {
+ if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) {
+ var desc = hasPropertyDescriptor
+ ? Object.getOwnPropertyDescriptor(obj, key)
+ : null;
+ if (desc && (desc.get || desc.set)) {
+ Object.defineProperty(newObj, key, desc);
+ } else {
+ newObj[key] = obj[key];
+ }
+ }
+ }
+ newObj.default = obj;
+ if (cache) {
+ cache.set(obj, newObj);
+ }
+ return newObj;
+}
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+// Make sure uncaught errors are logged before we exit.
+process.on('uncaughtException', err => {
+ console.error(err.stack);
+ (0, _exit().default)(1);
+});
+
+function worker({config, globalConfig, path, options}) {
+ return (0, _generateEmptyCoverage.default)(
+ fs().readFileSync(path, 'utf8'),
+ path,
+ globalConfig,
+ config,
+ (options === null || options === void 0 ? void 0 : options.changedFiles) &&
+ new Set(options.changedFiles),
+ (options === null || options === void 0
+ ? void 0
+ : options.sourcesRelatedToTestsInChangedFiles) &&
+ new Set(options.sourcesRelatedToTestsInChangedFiles)
+ );
+}
diff --git a/node_modules/@jest/reporters/build/DefaultReporter.d.ts b/node_modules/@jest/reporters/build/DefaultReporter.d.ts
new file mode 100644
index 0000000..bb346ba
--- /dev/null
+++ b/node_modules/@jest/reporters/build/DefaultReporter.d.ts
@@ -0,0 +1,33 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+/// <reference types="node" />
+import type { AggregatedResult, TestCaseResult, TestResult } from '@jest/test-result';
+import type { Config } from '@jest/types';
+import BaseReporter from './BaseReporter';
+import type { ReporterOnStartOptions, Test } from './types';
+export default class DefaultReporter extends BaseReporter {
+ private _clear;
+ private _err;
+ protected _globalConfig: Config.GlobalConfig;
+ private _out;
+ private _status;
+ private _bufferedOutput;
+ static readonly filename: string;
+ constructor(globalConfig: Config.GlobalConfig);
+ protected __wrapStdio(stream: NodeJS.WritableStream | NodeJS.WriteStream): void;
+ forceFlushBufferedOutput(): void;
+ protected __clearStatus(): void;
+ protected __printStatus(): void;
+ onRunStart(aggregatedResults: AggregatedResult, options: ReporterOnStartOptions): void;
+ onTestStart(test: Test): void;
+ onTestCaseResult(test: Test, testCaseResult: TestCaseResult): void;
+ onRunComplete(): void;
+ onTestResult(test: Test, testResult: TestResult, aggregatedResults: AggregatedResult): void;
+ testFinished(config: Config.ProjectConfig, testResult: TestResult, aggregatedResults: AggregatedResult): void;
+ printTestFileHeader(_testPath: Config.Path, config: Config.ProjectConfig, result: TestResult): void;
+ printTestFileFailureMessage(_testPath: Config.Path, _config: Config.ProjectConfig, result: TestResult): void;
+}
diff --git a/node_modules/@jest/reporters/build/DefaultReporter.js b/node_modules/@jest/reporters/build/DefaultReporter.js
new file mode 100644
index 0000000..6349e68
--- /dev/null
+++ b/node_modules/@jest/reporters/build/DefaultReporter.js
@@ -0,0 +1,254 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+
+ _chalk = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _console() {
+ const data = require('@jest/console');
+
+ _console = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestUtil() {
+ const data = require('jest-util');
+
+ _jestUtil = function () {
+ return data;
+ };
+
+ return data;
+}
+
+var _BaseReporter = _interopRequireDefault(require('./BaseReporter'));
+
+var _Status = _interopRequireDefault(require('./Status'));
+
+var _getResultHeader = _interopRequireDefault(require('./getResultHeader'));
+
+var _getSnapshotStatus = _interopRequireDefault(require('./getSnapshotStatus'));
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+function _defineProperty(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+}
+
+const TITLE_BULLET = _chalk().default.bold('\u25cf ');
+
+class DefaultReporter extends _BaseReporter.default {
+ // ANSI clear sequence for the last printed status
+ constructor(globalConfig) {
+ super();
+
+ _defineProperty(this, '_clear', void 0);
+
+ _defineProperty(this, '_err', void 0);
+
+ _defineProperty(this, '_globalConfig', void 0);
+
+ _defineProperty(this, '_out', void 0);
+
+ _defineProperty(this, '_status', void 0);
+
+ _defineProperty(this, '_bufferedOutput', void 0);
+
+ this._globalConfig = globalConfig;
+ this._clear = '';
+ this._out = process.stdout.write.bind(process.stdout);
+ this._err = process.stderr.write.bind(process.stderr);
+ this._status = new _Status.default();
+ this._bufferedOutput = new Set();
+
+ this.__wrapStdio(process.stdout);
+
+ this.__wrapStdio(process.stderr);
+
+ this._status.onChange(() => {
+ this.__clearStatus();
+
+ this.__printStatus();
+ });
+ }
+
+ __wrapStdio(stream) {
+ const write = stream.write.bind(stream);
+ let buffer = [];
+ let timeout = null;
+
+ const flushBufferedOutput = () => {
+ const string = buffer.join('');
+ buffer = []; // This is to avoid conflicts between random output and status text
+
+ this.__clearStatus();
+
+ if (string) {
+ write(string);
+ }
+
+ this.__printStatus();
+
+ this._bufferedOutput.delete(flushBufferedOutput);
+ };
+
+ this._bufferedOutput.add(flushBufferedOutput);
+
+ const debouncedFlush = () => {
+ // If the process blows up no errors would be printed.
+ // There should be a smart way to buffer stderr, but for now
+ // we just won't buffer it.
+ if (stream === process.stderr) {
+ flushBufferedOutput();
+ } else {
+ if (!timeout) {
+ timeout = setTimeout(() => {
+ flushBufferedOutput();
+ timeout = null;
+ }, 100);
+ }
+ }
+ };
+
+ stream.write = chunk => {
+ buffer.push(chunk);
+ debouncedFlush();
+ return true;
+ };
+ } // Don't wait for the debounced call and flush all output immediately.
+
+ forceFlushBufferedOutput() {
+ for (const flushBufferedOutput of this._bufferedOutput) {
+ flushBufferedOutput();
+ }
+ }
+
+ __clearStatus() {
+ if (_jestUtil().isInteractive) {
+ if (this._globalConfig.useStderr) {
+ this._err(this._clear);
+ } else {
+ this._out(this._clear);
+ }
+ }
+ }
+
+ __printStatus() {
+ const {content, clear} = this._status.get();
+
+ this._clear = clear;
+
+ if (_jestUtil().isInteractive) {
+ if (this._globalConfig.useStderr) {
+ this._err(content);
+ } else {
+ this._out(content);
+ }
+ }
+ }
+
+ onRunStart(aggregatedResults, options) {
+ this._status.runStarted(aggregatedResults, options);
+ }
+
+ onTestStart(test) {
+ this._status.testStarted(test.path, test.context.config);
+ }
+
+ onTestCaseResult(test, testCaseResult) {
+ this._status.addTestCaseResult(test, testCaseResult);
+ }
+
+ onRunComplete() {
+ this.forceFlushBufferedOutput();
+
+ this._status.runFinished();
+
+ process.stdout.write = this._out;
+ process.stderr.write = this._err;
+ (0, _jestUtil().clearLine)(process.stderr);
+ }
+
+ onTestResult(test, testResult, aggregatedResults) {
+ this.testFinished(test.context.config, testResult, aggregatedResults);
+
+ if (!testResult.skipped) {
+ this.printTestFileHeader(
+ testResult.testFilePath,
+ test.context.config,
+ testResult
+ );
+ this.printTestFileFailureMessage(
+ testResult.testFilePath,
+ test.context.config,
+ testResult
+ );
+ }
+
+ this.forceFlushBufferedOutput();
+ }
+
+ testFinished(config, testResult, aggregatedResults) {
+ this._status.testFinished(config, testResult, aggregatedResults);
+ }
+
+ printTestFileHeader(_testPath, config, result) {
+ this.log((0, _getResultHeader.default)(result, this._globalConfig, config));
+
+ if (result.console) {
+ this.log(
+ ' ' +
+ TITLE_BULLET +
+ 'Console\n\n' +
+ (0, _console().getConsoleOutput)(
+ result.console,
+ config,
+ this._globalConfig
+ )
+ );
+ }
+ }
+
+ printTestFileFailureMessage(_testPath, _config, result) {
+ if (result.failureMessage) {
+ this.log(result.failureMessage);
+ }
+
+ const didUpdate = this._globalConfig.updateSnapshot === 'all';
+ const snapshotStatuses = (0, _getSnapshotStatus.default)(
+ result.snapshot,
+ didUpdate
+ );
+ snapshotStatuses.forEach(this.log);
+ }
+}
+
+exports.default = DefaultReporter;
+
+_defineProperty(DefaultReporter, 'filename', __filename);
diff --git a/node_modules/@jest/reporters/build/NotifyReporter.d.ts b/node_modules/@jest/reporters/build/NotifyReporter.d.ts
new file mode 100644
index 0000000..eaa0f7f
--- /dev/null
+++ b/node_modules/@jest/reporters/build/NotifyReporter.d.ts
@@ -0,0 +1,19 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import type { AggregatedResult } from '@jest/test-result';
+import type { Config } from '@jest/types';
+import BaseReporter from './BaseReporter';
+import type { Context, TestSchedulerContext } from './types';
+export default class NotifyReporter extends BaseReporter {
+ private _notifier;
+ private _startRun;
+ private _globalConfig;
+ private _context;
+ static readonly filename: string;
+ constructor(globalConfig: Config.GlobalConfig, startRun: (globalConfig: Config.GlobalConfig) => unknown, context: TestSchedulerContext);
+ onRunComplete(contexts: Set<Context>, result: AggregatedResult): void;
+}
diff --git a/node_modules/@jest/reporters/build/NotifyReporter.js b/node_modules/@jest/reporters/build/NotifyReporter.js
new file mode 100644
index 0000000..14242b6
--- /dev/null
+++ b/node_modules/@jest/reporters/build/NotifyReporter.js
@@ -0,0 +1,256 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+
+function path() {
+ const data = _interopRequireWildcard(require('path'));
+
+ path = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function util() {
+ const data = _interopRequireWildcard(require('util'));
+
+ util = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _exit() {
+ const data = _interopRequireDefault(require('exit'));
+
+ _exit = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestUtil() {
+ const data = require('jest-util');
+
+ _jestUtil = function () {
+ return data;
+ };
+
+ return data;
+}
+
+var _BaseReporter = _interopRequireDefault(require('./BaseReporter'));
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+function _getRequireWildcardCache(nodeInterop) {
+ if (typeof WeakMap !== 'function') return null;
+ var cacheBabelInterop = new WeakMap();
+ var cacheNodeInterop = new WeakMap();
+ return (_getRequireWildcardCache = function (nodeInterop) {
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
+ })(nodeInterop);
+}
+
+function _interopRequireWildcard(obj, nodeInterop) {
+ if (!nodeInterop && obj && obj.__esModule) {
+ return obj;
+ }
+ if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) {
+ return {default: obj};
+ }
+ var cache = _getRequireWildcardCache(nodeInterop);
+ if (cache && cache.has(obj)) {
+ return cache.get(obj);
+ }
+ var newObj = {};
+ var hasPropertyDescriptor =
+ Object.defineProperty && Object.getOwnPropertyDescriptor;
+ for (var key in obj) {
+ if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) {
+ var desc = hasPropertyDescriptor
+ ? Object.getOwnPropertyDescriptor(obj, key)
+ : null;
+ if (desc && (desc.get || desc.set)) {
+ Object.defineProperty(newObj, key, desc);
+ } else {
+ newObj[key] = obj[key];
+ }
+ }
+ }
+ newObj.default = obj;
+ if (cache) {
+ cache.set(obj, newObj);
+ }
+ return newObj;
+}
+
+function _defineProperty(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+}
+
+const isDarwin = process.platform === 'darwin';
+const icon = path().resolve(__dirname, '../assets/jest_logo.png');
+
+class NotifyReporter extends _BaseReporter.default {
+ constructor(globalConfig, startRun, context) {
+ super();
+
+ _defineProperty(this, '_notifier', loadNotifier());
+
+ _defineProperty(this, '_startRun', void 0);
+
+ _defineProperty(this, '_globalConfig', void 0);
+
+ _defineProperty(this, '_context', void 0);
+
+ this._globalConfig = globalConfig;
+ this._startRun = startRun;
+ this._context = context;
+ }
+
+ onRunComplete(contexts, result) {
+ const success =
+ result.numFailedTests === 0 && result.numRuntimeErrorTestSuites === 0;
+ const firstContext = contexts.values().next();
+ const hasteFS =
+ firstContext && firstContext.value && firstContext.value.hasteFS;
+ let packageName;
+
+ if (hasteFS != null) {
+ // assuming root package.json is the first one
+ const [filePath] = hasteFS.matchFiles('package.json');
+ packageName =
+ filePath != null
+ ? hasteFS.getModuleName(filePath)
+ : this._globalConfig.rootDir;
+ } else {
+ packageName = this._globalConfig.rootDir;
+ }
+
+ packageName = packageName != null ? `${packageName} - ` : '';
+ const notifyMode = this._globalConfig.notifyMode;
+ const statusChanged =
+ this._context.previousSuccess !== success || this._context.firstRun;
+ const testsHaveRun = result.numTotalTests !== 0;
+
+ if (
+ testsHaveRun &&
+ success &&
+ (notifyMode === 'always' ||
+ notifyMode === 'success' ||
+ notifyMode === 'success-change' ||
+ (notifyMode === 'change' && statusChanged) ||
+ (notifyMode === 'failure-change' && statusChanged))
+ ) {
+ const title = util().format('%s%d%% Passed', packageName, 100);
+ const message = `${isDarwin ? '\u2705 ' : ''}${(0, _jestUtil().pluralize)(
+ 'test',
+ result.numPassedTests
+ )} passed`;
+
+ this._notifier.notify({
+ icon,
+ message,
+ timeout: false,
+ title
+ });
+ } else if (
+ testsHaveRun &&
+ !success &&
+ (notifyMode === 'always' ||
+ notifyMode === 'failure' ||
+ notifyMode === 'failure-change' ||
+ (notifyMode === 'change' && statusChanged) ||
+ (notifyMode === 'success-change' && statusChanged))
+ ) {
+ const failed = result.numFailedTests / result.numTotalTests;
+ const title = util().format(
+ '%s%d%% Failed',
+ packageName,
+ Math.ceil(Number.isNaN(failed) ? 0 : failed * 100)
+ );
+ const message = util().format(
+ (isDarwin ? '\u26D4\uFE0F ' : '') + '%d of %d tests failed',
+ result.numFailedTests,
+ result.numTotalTests
+ );
+ const watchMode = this._globalConfig.watch || this._globalConfig.watchAll;
+ const restartAnswer = 'Run again';
+ const quitAnswer = 'Exit tests';
+
+ if (!watchMode) {
+ this._notifier.notify({
+ icon,
+ message,
+ timeout: false,
+ title
+ });
+ } else {
+ this._notifier.notify(
+ {
+ actions: [restartAnswer, quitAnswer],
+ closeLabel: 'Close',
+ icon,
+ message,
+ timeout: false,
+ title
+ },
+ (err, _, metadata) => {
+ if (err || !metadata) {
+ return;
+ }
+
+ if (metadata.activationValue === quitAnswer) {
+ (0, _exit().default)(0);
+ return;
+ }
+
+ if (metadata.activationValue === restartAnswer) {
+ this._startRun(this._globalConfig);
+ }
+ }
+ );
+ }
+ }
+
+ this._context.previousSuccess = success;
+ this._context.firstRun = false;
+ }
+}
+
+exports.default = NotifyReporter;
+
+_defineProperty(NotifyReporter, 'filename', __filename);
+
+function loadNotifier() {
+ try {
+ return require('node-notifier');
+ } catch (err) {
+ if (err.code !== 'MODULE_NOT_FOUND') {
+ throw err;
+ }
+
+ throw Error(
+ 'notify reporter requires optional peer dependency "node-notifier" but it was not found'
+ );
+ }
+}
diff --git a/node_modules/@jest/reporters/build/Status.d.ts b/node_modules/@jest/reporters/build/Status.d.ts
new file mode 100644
index 0000000..36bb7d9
--- /dev/null
+++ b/node_modules/@jest/reporters/build/Status.d.ts
@@ -0,0 +1,42 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import type { AggregatedResult, TestCaseResult, TestResult } from '@jest/test-result';
+import type { Config } from '@jest/types';
+import type { ReporterOnStartOptions, Test } from './types';
+declare type Cache = {
+ content: string;
+ clear: string;
+};
+/**
+ * A class that generates the CLI status of currently running tests
+ * and also provides an ANSI escape sequence to remove status lines
+ * from the terminal.
+ */
+export default class Status {
+ private _cache;
+ private _callback?;
+ private _currentTests;
+ private _currentTestCases;
+ private _done;
+ private _emitScheduled;
+ private _estimatedTime;
+ private _interval?;
+ private _aggregatedResults?;
+ private _showStatus;
+ constructor();
+ onChange(callback: () => void): void;
+ runStarted(aggregatedResults: AggregatedResult, options: ReporterOnStartOptions): void;
+ runFinished(): void;
+ addTestCaseResult(test: Test, testCaseResult: TestCaseResult): void;
+ testStarted(testPath: Config.Path, config: Config.ProjectConfig): void;
+ testFinished(_config: Config.ProjectConfig, testResult: TestResult, aggregatedResults: AggregatedResult): void;
+ get(): Cache;
+ private _emit;
+ private _debouncedEmit;
+ private _tick;
+}
+export {};
diff --git a/node_modules/@jest/reporters/build/Status.js b/node_modules/@jest/reporters/build/Status.js
new file mode 100644
index 0000000..72f4fc6
--- /dev/null
+++ b/node_modules/@jest/reporters/build/Status.js
@@ -0,0 +1,272 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+
+ _chalk = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _stringLength() {
+ const data = _interopRequireDefault(require('string-length'));
+
+ _stringLength = function () {
+ return data;
+ };
+
+ return data;
+}
+
+var _utils = require('./utils');
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+function _defineProperty(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+}
+
+const RUNNING_TEXT = ' RUNS ';
+const RUNNING = _chalk().default.reset.inverse.yellow.bold(RUNNING_TEXT) + ' ';
+/**
+ * This class is a perf optimization for sorting the list of currently
+ * running tests. It tries to keep tests in the same positions without
+ * shifting the whole list.
+ */
+
+class CurrentTestList {
+ constructor() {
+ _defineProperty(this, '_array', void 0);
+
+ this._array = [];
+ }
+
+ add(testPath, config) {
+ const index = this._array.indexOf(null);
+
+ const record = {
+ config,
+ testPath
+ };
+
+ if (index !== -1) {
+ this._array[index] = record;
+ } else {
+ this._array.push(record);
+ }
+ }
+
+ delete(testPath) {
+ const record = this._array.find(
+ record => record !== null && record.testPath === testPath
+ );
+
+ this._array[this._array.indexOf(record || null)] = null;
+ }
+
+ get() {
+ return this._array;
+ }
+}
+
+/**
+ * A class that generates the CLI status of currently running tests
+ * and also provides an ANSI escape sequence to remove status lines
+ * from the terminal.
+ */
+class Status {
+ constructor() {
+ _defineProperty(this, '_cache', void 0);
+
+ _defineProperty(this, '_callback', void 0);
+
+ _defineProperty(this, '_currentTests', void 0);
+
+ _defineProperty(this, '_currentTestCases', void 0);
+
+ _defineProperty(this, '_done', void 0);
+
+ _defineProperty(this, '_emitScheduled', void 0);
+
+ _defineProperty(this, '_estimatedTime', void 0);
+
+ _defineProperty(this, '_interval', void 0);
+
+ _defineProperty(this, '_aggregatedResults', void 0);
+
+ _defineProperty(this, '_showStatus', void 0);
+
+ this._cache = null;
+ this._currentTests = new CurrentTestList();
+ this._currentTestCases = [];
+ this._done = false;
+ this._emitScheduled = false;
+ this._estimatedTime = 0;
+ this._showStatus = false;
+ }
+
+ onChange(callback) {
+ this._callback = callback;
+ }
+
+ runStarted(aggregatedResults, options) {
+ this._estimatedTime = (options && options.estimatedTime) || 0;
+ this._showStatus = options && options.showStatus;
+ this._interval = setInterval(() => this._tick(), 1000);
+ this._aggregatedResults = aggregatedResults;
+
+ this._debouncedEmit();
+ }
+
+ runFinished() {
+ this._done = true;
+ if (this._interval) clearInterval(this._interval);
+
+ this._emit();
+ }
+
+ addTestCaseResult(test, testCaseResult) {
+ this._currentTestCases.push({
+ test,
+ testCaseResult
+ });
+
+ if (!this._showStatus) {
+ this._emit();
+ } else {
+ this._debouncedEmit();
+ }
+ }
+
+ testStarted(testPath, config) {
+ this._currentTests.add(testPath, config);
+
+ if (!this._showStatus) {
+ this._emit();
+ } else {
+ this._debouncedEmit();
+ }
+ }
+
+ testFinished(_config, testResult, aggregatedResults) {
+ const {testFilePath} = testResult;
+ this._aggregatedResults = aggregatedResults;
+
+ this._currentTests.delete(testFilePath);
+
+ this._currentTestCases = this._currentTestCases.filter(({test}) => {
+ if (_config !== test.context.config) {
+ return true;
+ }
+
+ return test.path !== testFilePath;
+ });
+
+ this._debouncedEmit();
+ }
+
+ get() {
+ if (this._cache) {
+ return this._cache;
+ }
+
+ if (this._done) {
+ return {
+ clear: '',
+ content: ''
+ };
+ }
+
+ const width = process.stdout.columns;
+ let content = '\n';
+
+ this._currentTests.get().forEach(record => {
+ if (record) {
+ const {config, testPath} = record;
+ const projectDisplayName = config.displayName
+ ? (0, _utils.printDisplayName)(config) + ' '
+ : '';
+ const prefix = RUNNING + projectDisplayName;
+ content +=
+ (0, _utils.wrapAnsiString)(
+ prefix +
+ (0, _utils.trimAndFormatPath)(
+ (0, _stringLength().default)(prefix),
+ config,
+ testPath,
+ width
+ ),
+ width
+ ) + '\n';
+ }
+ });
+
+ if (this._showStatus && this._aggregatedResults) {
+ content +=
+ '\n' +
+ (0, _utils.getSummary)(this._aggregatedResults, {
+ currentTestCases: this._currentTestCases,
+ estimatedTime: this._estimatedTime,
+ roundTime: true,
+ width
+ });
+ }
+
+ let height = 0;
+
+ for (let i = 0; i < content.length; i++) {
+ if (content[i] === '\n') {
+ height++;
+ }
+ }
+
+ const clear = '\r\x1B[K\r\x1B[1A'.repeat(height);
+ return (this._cache = {
+ clear,
+ content
+ });
+ }
+
+ _emit() {
+ this._cache = null;
+ if (this._callback) this._callback();
+ }
+
+ _debouncedEmit() {
+ if (!this._emitScheduled) {
+ // Perf optimization to avoid two separate renders When
+ // one test finishes and another test starts executing.
+ this._emitScheduled = true;
+ setTimeout(() => {
+ this._emit();
+
+ this._emitScheduled = false;
+ }, 100);
+ }
+ }
+
+ _tick() {
+ this._debouncedEmit();
+ }
+}
+
+exports.default = Status;
diff --git a/node_modules/@jest/reporters/build/SummaryReporter.d.ts b/node_modules/@jest/reporters/build/SummaryReporter.d.ts
new file mode 100644
index 0000000..3d7570d
--- /dev/null
+++ b/node_modules/@jest/reporters/build/SummaryReporter.d.ts
@@ -0,0 +1,22 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import type { AggregatedResult } from '@jest/test-result';
+import type { Config } from '@jest/types';
+import BaseReporter from './BaseReporter';
+import type { Context, ReporterOnStartOptions } from './types';
+export default class SummaryReporter extends BaseReporter {
+ private _estimatedTime;
+ private _globalConfig;
+ static readonly filename: string;
+ constructor(globalConfig: Config.GlobalConfig);
+ private _write;
+ onRunStart(aggregatedResults: AggregatedResult, options: ReporterOnStartOptions): void;
+ onRunComplete(contexts: Set<Context>, aggregatedResults: AggregatedResult): void;
+ private _printSnapshotSummary;
+ private _printSummary;
+ private _getTestSummary;
+}
diff --git a/node_modules/@jest/reporters/build/SummaryReporter.js b/node_modules/@jest/reporters/build/SummaryReporter.js
new file mode 100644
index 0000000..5696da1
--- /dev/null
+++ b/node_modules/@jest/reporters/build/SummaryReporter.js
@@ -0,0 +1,271 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+
+ _chalk = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestUtil() {
+ const data = require('jest-util');
+
+ _jestUtil = function () {
+ return data;
+ };
+
+ return data;
+}
+
+var _BaseReporter = _interopRequireDefault(require('./BaseReporter'));
+
+var _getResultHeader = _interopRequireDefault(require('./getResultHeader'));
+
+var _getSnapshotSummary = _interopRequireDefault(
+ require('./getSnapshotSummary')
+);
+
+var _utils = require('./utils');
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+function _defineProperty(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+}
+
+const TEST_SUMMARY_THRESHOLD = 20;
+const NPM_EVENTS = new Set([
+ 'prepublish',
+ 'publish',
+ 'postpublish',
+ 'preinstall',
+ 'install',
+ 'postinstall',
+ 'preuninstall',
+ 'uninstall',
+ 'postuninstall',
+ 'preversion',
+ 'version',
+ 'postversion',
+ 'pretest',
+ 'test',
+ 'posttest',
+ 'prestop',
+ 'stop',
+ 'poststop',
+ 'prestart',
+ 'start',
+ 'poststart',
+ 'prerestart',
+ 'restart',
+ 'postrestart'
+]);
+const {npm_config_user_agent, npm_lifecycle_event, npm_lifecycle_script} =
+ process.env;
+
+class SummaryReporter extends _BaseReporter.default {
+ constructor(globalConfig) {
+ super();
+
+ _defineProperty(this, '_estimatedTime', void 0);
+
+ _defineProperty(this, '_globalConfig', void 0);
+
+ this._globalConfig = globalConfig;
+ this._estimatedTime = 0;
+ } // If we write more than one character at a time it is possible that
+ // Node.js exits in the middle of printing the result. This was first observed
+ // in Node.js 0.10 and still persists in Node.js 6.7+.
+ // Let's print the test failure summary character by character which is safer
+ // when hundreds of tests are failing.
+
+ _write(string) {
+ for (let i = 0; i < string.length; i++) {
+ process.stderr.write(string.charAt(i));
+ }
+ }
+
+ onRunStart(aggregatedResults, options) {
+ super.onRunStart(aggregatedResults, options);
+ this._estimatedTime = options.estimatedTime;
+ }
+
+ onRunComplete(contexts, aggregatedResults) {
+ const {numTotalTestSuites, testResults, wasInterrupted} = aggregatedResults;
+
+ if (numTotalTestSuites) {
+ const lastResult = testResults[testResults.length - 1]; // Print a newline if the last test did not fail to line up newlines
+ // similar to when an error would have been thrown in the test.
+
+ if (
+ !this._globalConfig.verbose &&
+ lastResult &&
+ !lastResult.numFailingTests &&
+ !lastResult.testExecError
+ ) {
+ this.log('');
+ }
+
+ this._printSummary(aggregatedResults, this._globalConfig);
+
+ this._printSnapshotSummary(
+ aggregatedResults.snapshot,
+ this._globalConfig
+ );
+
+ if (numTotalTestSuites) {
+ let message = (0, _utils.getSummary)(aggregatedResults, {
+ estimatedTime: this._estimatedTime
+ });
+
+ if (!this._globalConfig.silent) {
+ message +=
+ '\n' +
+ (wasInterrupted
+ ? _chalk().default.bold.red('Test run was interrupted.')
+ : this._getTestSummary(contexts, this._globalConfig));
+ }
+
+ this.log(message);
+ }
+ }
+ }
+
+ _printSnapshotSummary(snapshots, globalConfig) {
+ if (
+ snapshots.added ||
+ snapshots.filesRemoved ||
+ snapshots.unchecked ||
+ snapshots.unmatched ||
+ snapshots.updated
+ ) {
+ let updateCommand;
+ const event = npm_lifecycle_event || '';
+ const prefix = NPM_EVENTS.has(event) ? '' : 'run ';
+ const isYarn =
+ typeof npm_config_user_agent === 'string' &&
+ npm_config_user_agent.includes('yarn');
+ const client = isYarn ? 'yarn' : 'npm';
+ const scriptUsesJest =
+ typeof npm_lifecycle_script === 'string' &&
+ npm_lifecycle_script.includes('jest');
+
+ if (globalConfig.watch || globalConfig.watchAll) {
+ updateCommand = 'press `u`';
+ } else if (event && scriptUsesJest) {
+ updateCommand = `run \`${
+ client + ' ' + prefix + event + (isYarn ? '' : ' --')
+ } -u\``;
+ } else {
+ updateCommand = 're-run jest with `-u`';
+ }
+
+ const snapshotSummary = (0, _getSnapshotSummary.default)(
+ snapshots,
+ globalConfig,
+ updateCommand
+ );
+ snapshotSummary.forEach(this.log);
+ this.log(''); // print empty line
+ }
+ }
+
+ _printSummary(aggregatedResults, globalConfig) {
+ // If there were any failing tests and there was a large number of tests
+ // executed, re-print the failing results at the end of execution output.
+ const failedTests = aggregatedResults.numFailedTests;
+ const runtimeErrors = aggregatedResults.numRuntimeErrorTestSuites;
+
+ if (
+ failedTests + runtimeErrors > 0 &&
+ aggregatedResults.numTotalTestSuites > TEST_SUMMARY_THRESHOLD
+ ) {
+ this.log(_chalk().default.bold('Summary of all failing tests'));
+ aggregatedResults.testResults.forEach(testResult => {
+ const {failureMessage} = testResult;
+
+ if (failureMessage) {
+ this._write(
+ (0, _getResultHeader.default)(testResult, globalConfig) +
+ '\n' +
+ failureMessage +
+ '\n'
+ );
+ }
+ });
+ this.log(''); // print empty line
+ }
+ }
+
+ _getTestSummary(contexts, globalConfig) {
+ const getMatchingTestsInfo = () => {
+ const prefix = globalConfig.findRelatedTests
+ ? ' related to files matching '
+ : ' matching ';
+ return (
+ _chalk().default.dim(prefix) +
+ (0, _jestUtil().testPathPatternToRegExp)(
+ globalConfig.testPathPattern
+ ).toString()
+ );
+ };
+
+ let testInfo = '';
+
+ if (globalConfig.runTestsByPath) {
+ testInfo = _chalk().default.dim(' within paths');
+ } else if (globalConfig.onlyChanged) {
+ testInfo = _chalk().default.dim(' related to changed files');
+ } else if (globalConfig.testPathPattern) {
+ testInfo = getMatchingTestsInfo();
+ }
+
+ let nameInfo = '';
+
+ if (globalConfig.runTestsByPath) {
+ nameInfo = ' ' + globalConfig.nonFlagArgs.map(p => `"${p}"`).join(', ');
+ } else if (globalConfig.testNamePattern) {
+ nameInfo =
+ _chalk().default.dim(' with tests matching ') +
+ `"${globalConfig.testNamePattern}"`;
+ }
+
+ const contextInfo =
+ contexts.size > 1
+ ? _chalk().default.dim(' in ') +
+ contexts.size +
+ _chalk().default.dim(' projects')
+ : '';
+ return (
+ _chalk().default.dim('Ran all test suites') +
+ testInfo +
+ nameInfo +
+ contextInfo +
+ _chalk().default.dim('.')
+ );
+ }
+}
+
+exports.default = SummaryReporter;
+
+_defineProperty(SummaryReporter, 'filename', __filename);
diff --git a/node_modules/@jest/reporters/build/VerboseReporter.d.ts b/node_modules/@jest/reporters/build/VerboseReporter.d.ts
new file mode 100644
index 0000000..1ab4ffc
--- /dev/null
+++ b/node_modules/@jest/reporters/build/VerboseReporter.d.ts
@@ -0,0 +1,27 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+/// <reference types="node" />
+import type { AggregatedResult, AssertionResult, Suite, TestResult } from '@jest/test-result';
+import type { Config } from '@jest/types';
+import DefaultReporter from './DefaultReporter';
+import type { Test } from './types';
+export default class VerboseReporter extends DefaultReporter {
+ protected _globalConfig: Config.GlobalConfig;
+ static readonly filename: string;
+ constructor(globalConfig: Config.GlobalConfig);
+ protected __wrapStdio(stream: NodeJS.WritableStream | NodeJS.WriteStream): void;
+ static filterTestResults(testResults: Array<AssertionResult>): Array<AssertionResult>;
+ static groupTestsBySuites(testResults: Array<AssertionResult>): Suite;
+ onTestResult(test: Test, result: TestResult, aggregatedResults: AggregatedResult): void;
+ private _logTestResults;
+ private _logSuite;
+ private _getIcon;
+ private _logTest;
+ private _logTests;
+ private _logTodoOrPendingTest;
+ private _logLine;
+}
diff --git a/node_modules/@jest/reporters/build/VerboseReporter.js b/node_modules/@jest/reporters/build/VerboseReporter.js
new file mode 100644
index 0000000..57758ed
--- /dev/null
+++ b/node_modules/@jest/reporters/build/VerboseReporter.js
@@ -0,0 +1,226 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+
+ _chalk = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestUtil() {
+ const data = require('jest-util');
+
+ _jestUtil = function () {
+ return data;
+ };
+
+ return data;
+}
+
+var _DefaultReporter = _interopRequireDefault(require('./DefaultReporter'));
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+function _defineProperty(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+}
+
+const {ICONS} = _jestUtil().specialChars;
+
+class VerboseReporter extends _DefaultReporter.default {
+ constructor(globalConfig) {
+ super(globalConfig);
+
+ _defineProperty(this, '_globalConfig', void 0);
+
+ this._globalConfig = globalConfig;
+ } // Verbose mode is for debugging. Buffering of output is undesirable.
+ // See https://github.com/facebook/jest/issues/8208
+
+ __wrapStdio(stream) {
+ const write = stream.write.bind(stream);
+
+ stream.write = chunk => {
+ this.__clearStatus();
+
+ write(chunk);
+
+ this.__printStatus();
+
+ return true;
+ };
+ }
+
+ static filterTestResults(testResults) {
+ return testResults.filter(({status}) => status !== 'pending');
+ }
+
+ static groupTestsBySuites(testResults) {
+ const root = {
+ suites: [],
+ tests: [],
+ title: ''
+ };
+ testResults.forEach(testResult => {
+ let targetSuite = root; // Find the target suite for this test,
+ // creating nested suites as necessary.
+
+ for (const title of testResult.ancestorTitles) {
+ let matchingSuite = targetSuite.suites.find(s => s.title === title);
+
+ if (!matchingSuite) {
+ matchingSuite = {
+ suites: [],
+ tests: [],
+ title
+ };
+ targetSuite.suites.push(matchingSuite);
+ }
+
+ targetSuite = matchingSuite;
+ }
+
+ targetSuite.tests.push(testResult);
+ });
+ return root;
+ }
+
+ onTestResult(test, result, aggregatedResults) {
+ super.testFinished(test.context.config, result, aggregatedResults);
+
+ if (!result.skipped) {
+ this.printTestFileHeader(
+ result.testFilePath,
+ test.context.config,
+ result
+ );
+
+ if (!result.testExecError && !result.skipped) {
+ this._logTestResults(result.testResults);
+ }
+
+ this.printTestFileFailureMessage(
+ result.testFilePath,
+ test.context.config,
+ result
+ );
+ }
+
+ super.forceFlushBufferedOutput();
+ }
+
+ _logTestResults(testResults) {
+ this._logSuite(VerboseReporter.groupTestsBySuites(testResults), 0);
+
+ this._logLine();
+ }
+
+ _logSuite(suite, indentLevel) {
+ if (suite.title) {
+ this._logLine(suite.title, indentLevel);
+ }
+
+ this._logTests(suite.tests, indentLevel + 1);
+
+ suite.suites.forEach(suite => this._logSuite(suite, indentLevel + 1));
+ }
+
+ _getIcon(status) {
+ if (status === 'failed') {
+ return _chalk().default.red(ICONS.failed);
+ } else if (status === 'pending') {
+ return _chalk().default.yellow(ICONS.pending);
+ } else if (status === 'todo') {
+ return _chalk().default.magenta(ICONS.todo);
+ } else {
+ return _chalk().default.green(ICONS.success);
+ }
+ }
+
+ _logTest(test, indentLevel) {
+ const status = this._getIcon(test.status);
+
+ const time = test.duration
+ ? ` (${(0, _jestUtil().formatTime)(Math.round(test.duration))})`
+ : '';
+
+ this._logLine(
+ status + ' ' + _chalk().default.dim(test.title + time),
+ indentLevel
+ );
+ }
+
+ _logTests(tests, indentLevel) {
+ if (this._globalConfig.expand) {
+ tests.forEach(test => this._logTest(test, indentLevel));
+ } else {
+ const summedTests = tests.reduce(
+ (result, test) => {
+ if (test.status === 'pending') {
+ result.pending.push(test);
+ } else if (test.status === 'todo') {
+ result.todo.push(test);
+ } else {
+ this._logTest(test, indentLevel);
+ }
+
+ return result;
+ },
+ {
+ pending: [],
+ todo: []
+ }
+ );
+
+ if (summedTests.pending.length > 0) {
+ summedTests.pending.forEach(this._logTodoOrPendingTest(indentLevel));
+ }
+
+ if (summedTests.todo.length > 0) {
+ summedTests.todo.forEach(this._logTodoOrPendingTest(indentLevel));
+ }
+ }
+ }
+
+ _logTodoOrPendingTest(indentLevel) {
+ return test => {
+ const printedTestStatus =
+ test.status === 'pending' ? 'skipped' : test.status;
+
+ const icon = this._getIcon(test.status);
+
+ const text = _chalk().default.dim(`${printedTestStatus} ${test.title}`);
+
+ this._logLine(`${icon} ${text}`, indentLevel);
+ };
+ }
+
+ _logLine(str, indentLevel) {
+ const indentation = ' '.repeat(indentLevel || 0);
+ this.log(indentation + (str || ''));
+ }
+}
+
+exports.default = VerboseReporter;
+
+_defineProperty(VerboseReporter, 'filename', __filename);
diff --git a/node_modules/@jest/reporters/build/generateEmptyCoverage.d.ts b/node_modules/@jest/reporters/build/generateEmptyCoverage.d.ts
new file mode 100644
index 0000000..fdeecdb
--- /dev/null
+++ b/node_modules/@jest/reporters/build/generateEmptyCoverage.d.ts
@@ -0,0 +1,19 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import type { V8Coverage } from 'collect-v8-coverage';
+import { FileCoverage } from 'istanbul-lib-coverage';
+import type { Config } from '@jest/types';
+declare type SingleV8Coverage = V8Coverage[number];
+export declare type CoverageWorkerResult = {
+ kind: 'BabelCoverage';
+ coverage: FileCoverage;
+} | {
+ kind: 'V8Coverage';
+ result: SingleV8Coverage;
+};
+export default function generateEmptyCoverage(source: string, filename: Config.Path, globalConfig: Config.GlobalConfig, config: Config.ProjectConfig, changedFiles?: Set<Config.Path>, sourcesRelatedToTestsInChangedFiles?: Set<Config.Path>): Promise<CoverageWorkerResult | null>;
+export {};
diff --git a/node_modules/@jest/reporters/build/generateEmptyCoverage.js b/node_modules/@jest/reporters/build/generateEmptyCoverage.js
new file mode 100644
index 0000000..f8490f9
--- /dev/null
+++ b/node_modules/@jest/reporters/build/generateEmptyCoverage.js
@@ -0,0 +1,168 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = generateEmptyCoverage;
+
+function fs() {
+ const data = _interopRequireWildcard(require('graceful-fs'));
+
+ fs = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _istanbulLibCoverage() {
+ const data = require('istanbul-lib-coverage');
+
+ _istanbulLibCoverage = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _istanbulLibInstrument() {
+ const data = require('istanbul-lib-instrument');
+
+ _istanbulLibInstrument = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _transform() {
+ const data = require('@jest/transform');
+
+ _transform = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _getRequireWildcardCache(nodeInterop) {
+ if (typeof WeakMap !== 'function') return null;
+ var cacheBabelInterop = new WeakMap();
+ var cacheNodeInterop = new WeakMap();
+ return (_getRequireWildcardCache = function (nodeInterop) {
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
+ })(nodeInterop);
+}
+
+function _interopRequireWildcard(obj, nodeInterop) {
+ if (!nodeInterop && obj && obj.__esModule) {
+ return obj;
+ }
+ if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) {
+ return {default: obj};
+ }
+ var cache = _getRequireWildcardCache(nodeInterop);
+ if (cache && cache.has(obj)) {
+ return cache.get(obj);
+ }
+ var newObj = {};
+ var hasPropertyDescriptor =
+ Object.defineProperty && Object.getOwnPropertyDescriptor;
+ for (var key in obj) {
+ if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) {
+ var desc = hasPropertyDescriptor
+ ? Object.getOwnPropertyDescriptor(obj, key)
+ : null;
+ if (desc && (desc.get || desc.set)) {
+ Object.defineProperty(newObj, key, desc);
+ } else {
+ newObj[key] = obj[key];
+ }
+ }
+ }
+ newObj.default = obj;
+ if (cache) {
+ cache.set(obj, newObj);
+ }
+ return newObj;
+}
+
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+async function generateEmptyCoverage(
+ source,
+ filename,
+ globalConfig,
+ config,
+ changedFiles,
+ sourcesRelatedToTestsInChangedFiles
+) {
+ const coverageOptions = {
+ changedFiles,
+ collectCoverage: globalConfig.collectCoverage,
+ collectCoverageFrom: globalConfig.collectCoverageFrom,
+ collectCoverageOnlyFrom: globalConfig.collectCoverageOnlyFrom,
+ coverageProvider: globalConfig.coverageProvider,
+ sourcesRelatedToTestsInChangedFiles
+ };
+ let coverageWorkerResult = null;
+
+ if ((0, _transform().shouldInstrument)(filename, coverageOptions, config)) {
+ if (coverageOptions.coverageProvider === 'v8') {
+ const stat = fs().statSync(filename);
+ return {
+ kind: 'V8Coverage',
+ result: {
+ functions: [
+ {
+ functionName: '(empty-report)',
+ isBlockCoverage: true,
+ ranges: [
+ {
+ count: 0,
+ endOffset: stat.size,
+ startOffset: 0
+ }
+ ]
+ }
+ ],
+ scriptId: '0',
+ url: filename
+ }
+ };
+ }
+
+ const scriptTransformer = await (0, _transform().createScriptTransformer)(
+ config
+ ); // Transform file with instrumentation to make sure initial coverage data is well mapped to original code.
+
+ const {code} = await scriptTransformer.transformSourceAsync(
+ filename,
+ source,
+ {
+ instrument: true,
+ supportsDynamicImport: true,
+ supportsExportNamespaceFrom: true,
+ supportsStaticESM: true,
+ supportsTopLevelAwait: true
+ }
+ ); // TODO: consider passing AST
+
+ const extracted = (0, _istanbulLibInstrument().readInitialCoverage)(code); // Check extracted initial coverage is not null, this can happen when using /* istanbul ignore file */
+
+ if (extracted) {
+ coverageWorkerResult = {
+ coverage: (0, _istanbulLibCoverage().createFileCoverage)(
+ extracted.coverageData
+ ),
+ kind: 'BabelCoverage'
+ };
+ }
+ }
+
+ return coverageWorkerResult;
+}
diff --git a/node_modules/@jest/reporters/build/getResultHeader.d.ts b/node_modules/@jest/reporters/build/getResultHeader.d.ts
new file mode 100644
index 0000000..b9cb738
--- /dev/null
+++ b/node_modules/@jest/reporters/build/getResultHeader.d.ts
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import type { TestResult } from '@jest/test-result';
+import type { Config } from '@jest/types';
+export default function getResultHeader(result: TestResult, globalConfig: Config.GlobalConfig, projectConfig?: Config.ProjectConfig): string;
diff --git a/node_modules/@jest/reporters/build/getResultHeader.js b/node_modules/@jest/reporters/build/getResultHeader.js
new file mode 100644
index 0000000..f497921
--- /dev/null
+++ b/node_modules/@jest/reporters/build/getResultHeader.js
@@ -0,0 +1,104 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = getResultHeader;
+
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+
+ _chalk = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _terminalLink() {
+ const data = _interopRequireDefault(require('terminal-link'));
+
+ _terminalLink = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestUtil() {
+ const data = require('jest-util');
+
+ _jestUtil = function () {
+ return data;
+ };
+
+ return data;
+}
+
+var _utils = require('./utils');
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+const LONG_TEST_COLOR = _chalk().default.reset.bold.bgRed; // Explicitly reset for these messages since they can get written out in the
+// middle of error logging
+
+const FAIL_TEXT = 'FAIL';
+const PASS_TEXT = 'PASS';
+const FAIL = _chalk().default.supportsColor
+ ? _chalk().default.reset.inverse.bold.red(` ${FAIL_TEXT} `)
+ : FAIL_TEXT;
+const PASS = _chalk().default.supportsColor
+ ? _chalk().default.reset.inverse.bold.green(` ${PASS_TEXT} `)
+ : PASS_TEXT;
+
+function getResultHeader(result, globalConfig, projectConfig) {
+ var _result$perfStats;
+
+ const testPath = result.testFilePath;
+ const formattedTestPath = (0, _utils.formatTestPath)(
+ projectConfig ? projectConfig : globalConfig,
+ testPath
+ );
+ const fileLink = (0, _terminalLink().default)(
+ formattedTestPath,
+ `file://${testPath}`,
+ {
+ fallback: () => formattedTestPath
+ }
+ );
+ const status =
+ result.numFailingTests > 0 || result.testExecError ? FAIL : PASS;
+ const testDetail = [];
+
+ if (
+ (_result$perfStats = result.perfStats) !== null &&
+ _result$perfStats !== void 0 &&
+ _result$perfStats.slow
+ ) {
+ const runTime = result.perfStats.runtime / 1000;
+ testDetail.push(LONG_TEST_COLOR((0, _jestUtil().formatTime)(runTime, 0)));
+ }
+
+ if (result.memoryUsage) {
+ const toMB = bytes => Math.floor(bytes / 1024 / 1024);
+
+ testDetail.push(`${toMB(result.memoryUsage)} MB heap size`);
+ }
+
+ const projectDisplayName =
+ projectConfig && projectConfig.displayName
+ ? (0, _utils.printDisplayName)(projectConfig) + ' '
+ : '';
+ return (
+ `${status} ${projectDisplayName}${fileLink}` +
+ (testDetail.length ? ` (${testDetail.join(', ')})` : '')
+ );
+}
diff --git a/node_modules/@jest/reporters/build/getSnapshotStatus.d.ts b/node_modules/@jest/reporters/build/getSnapshotStatus.d.ts
new file mode 100644
index 0000000..573ea9a
--- /dev/null
+++ b/node_modules/@jest/reporters/build/getSnapshotStatus.d.ts
@@ -0,0 +1,8 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import type { TestResult } from '@jest/test-result';
+export default function getSnapshotStatus(snapshot: TestResult['snapshot'], afterUpdate: boolean): Array<string>;
diff --git a/node_modules/@jest/reporters/build/getSnapshotStatus.js b/node_modules/@jest/reporters/build/getSnapshotStatus.js
new file mode 100644
index 0000000..ddda3ab
--- /dev/null
+++ b/node_modules/@jest/reporters/build/getSnapshotStatus.js
@@ -0,0 +1,111 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = getSnapshotStatus;
+
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+
+ _chalk = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestUtil() {
+ const data = require('jest-util');
+
+ _jestUtil = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+const ARROW = ' \u203A ';
+const DOT = ' \u2022 ';
+
+const FAIL_COLOR = _chalk().default.bold.red;
+
+const SNAPSHOT_ADDED = _chalk().default.bold.green;
+
+const SNAPSHOT_UPDATED = _chalk().default.bold.green;
+
+const SNAPSHOT_OUTDATED = _chalk().default.bold.yellow;
+
+function getSnapshotStatus(snapshot, afterUpdate) {
+ const statuses = [];
+
+ if (snapshot.added) {
+ statuses.push(
+ SNAPSHOT_ADDED(
+ ARROW +
+ (0, _jestUtil().pluralize)('snapshot', snapshot.added) +
+ ' written.'
+ )
+ );
+ }
+
+ if (snapshot.updated) {
+ statuses.push(
+ SNAPSHOT_UPDATED(
+ ARROW +
+ (0, _jestUtil().pluralize)('snapshot', snapshot.updated) +
+ ' updated.'
+ )
+ );
+ }
+
+ if (snapshot.unmatched) {
+ statuses.push(
+ FAIL_COLOR(
+ ARROW +
+ (0, _jestUtil().pluralize)('snapshot', snapshot.unmatched) +
+ ' failed.'
+ )
+ );
+ }
+
+ if (snapshot.unchecked) {
+ if (afterUpdate) {
+ statuses.push(
+ SNAPSHOT_UPDATED(
+ ARROW +
+ (0, _jestUtil().pluralize)('snapshot', snapshot.unchecked) +
+ ' removed.'
+ )
+ );
+ } else {
+ statuses.push(
+ SNAPSHOT_OUTDATED(
+ ARROW +
+ (0, _jestUtil().pluralize)('snapshot', snapshot.unchecked) +
+ ' obsolete'
+ ) + '.'
+ );
+ }
+
+ snapshot.uncheckedKeys.forEach(key => {
+ statuses.push(` ${DOT}${key}`);
+ });
+ }
+
+ if (snapshot.fileDeleted) {
+ statuses.push(SNAPSHOT_UPDATED(ARROW + 'snapshot file removed.'));
+ }
+
+ return statuses;
+}
diff --git a/node_modules/@jest/reporters/build/getSnapshotSummary.d.ts b/node_modules/@jest/reporters/build/getSnapshotSummary.d.ts
new file mode 100644
index 0000000..8ccf669
--- /dev/null
+++ b/node_modules/@jest/reporters/build/getSnapshotSummary.d.ts
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import type { SnapshotSummary } from '@jest/test-result';
+import type { Config } from '@jest/types';
+export default function getSnapshotSummary(snapshots: SnapshotSummary, globalConfig: Config.GlobalConfig, updateCommand: string): Array<string>;
diff --git a/node_modules/@jest/reporters/build/getSnapshotSummary.js b/node_modules/@jest/reporters/build/getSnapshotSummary.js
new file mode 100644
index 0000000..1afce24
--- /dev/null
+++ b/node_modules/@jest/reporters/build/getSnapshotSummary.js
@@ -0,0 +1,203 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = getSnapshotSummary;
+
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+
+ _chalk = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestUtil() {
+ const data = require('jest-util');
+
+ _jestUtil = function () {
+ return data;
+ };
+
+ return data;
+}
+
+var _utils = require('./utils');
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+const ARROW = ' \u203A ';
+const DOWN_ARROW = ' \u21B3 ';
+const DOT = ' \u2022 ';
+
+const FAIL_COLOR = _chalk().default.bold.red;
+
+const OBSOLETE_COLOR = _chalk().default.bold.yellow;
+
+const SNAPSHOT_ADDED = _chalk().default.bold.green;
+
+const SNAPSHOT_NOTE = _chalk().default.dim;
+
+const SNAPSHOT_REMOVED = _chalk().default.bold.green;
+
+const SNAPSHOT_SUMMARY = _chalk().default.bold;
+
+const SNAPSHOT_UPDATED = _chalk().default.bold.green;
+
+function getSnapshotSummary(snapshots, globalConfig, updateCommand) {
+ const summary = [];
+ summary.push(SNAPSHOT_SUMMARY('Snapshot Summary'));
+
+ if (snapshots.added) {
+ summary.push(
+ SNAPSHOT_ADDED(
+ ARROW +
+ (0, _jestUtil().pluralize)('snapshot', snapshots.added) +
+ ' written '
+ ) +
+ `from ${(0, _jestUtil().pluralize)(
+ 'test suite',
+ snapshots.filesAdded
+ )}.`
+ );
+ }
+
+ if (snapshots.unmatched) {
+ summary.push(
+ FAIL_COLOR(
+ `${ARROW}${(0, _jestUtil().pluralize)(
+ 'snapshot',
+ snapshots.unmatched
+ )} failed`
+ ) +
+ ` from ${(0, _jestUtil().pluralize)(
+ 'test suite',
+ snapshots.filesUnmatched
+ )}. ` +
+ SNAPSHOT_NOTE(
+ 'Inspect your code changes or ' + updateCommand + ' to update them.'
+ )
+ );
+ }
+
+ if (snapshots.updated) {
+ summary.push(
+ SNAPSHOT_UPDATED(
+ ARROW +
+ (0, _jestUtil().pluralize)('snapshot', snapshots.updated) +
+ ' updated '
+ ) +
+ `from ${(0, _jestUtil().pluralize)(
+ 'test suite',
+ snapshots.filesUpdated
+ )}.`
+ );
+ }
+
+ if (snapshots.filesRemoved) {
+ if (snapshots.didUpdate) {
+ summary.push(
+ SNAPSHOT_REMOVED(
+ `${ARROW}${(0, _jestUtil().pluralize)(
+ 'snapshot file',
+ snapshots.filesRemoved
+ )} removed `
+ ) +
+ `from ${(0, _jestUtil().pluralize)(
+ 'test suite',
+ snapshots.filesRemoved
+ )}.`
+ );
+ } else {
+ summary.push(
+ OBSOLETE_COLOR(
+ `${ARROW}${(0, _jestUtil().pluralize)(
+ 'snapshot file',
+ snapshots.filesRemoved
+ )} obsolete `
+ ) +
+ `from ${(0, _jestUtil().pluralize)(
+ 'test suite',
+ snapshots.filesRemoved
+ )}. ` +
+ SNAPSHOT_NOTE(
+ `To remove ${
+ snapshots.filesRemoved === 1 ? 'it' : 'them all'
+ }, ${updateCommand}.`
+ )
+ );
+ }
+ }
+
+ if (snapshots.filesRemovedList && snapshots.filesRemovedList.length) {
+ const [head, ...tail] = snapshots.filesRemovedList;
+ summary.push(
+ ` ${DOWN_ARROW} ${DOT}${(0, _utils.formatTestPath)(globalConfig, head)}`
+ );
+ tail.forEach(key => {
+ summary.push(
+ ` ${DOT}${(0, _utils.formatTestPath)(globalConfig, key)}`
+ );
+ });
+ }
+
+ if (snapshots.unchecked) {
+ if (snapshots.didUpdate) {
+ summary.push(
+ SNAPSHOT_REMOVED(
+ `${ARROW}${(0, _jestUtil().pluralize)(
+ 'snapshot',
+ snapshots.unchecked
+ )} removed `
+ ) +
+ `from ${(0, _jestUtil().pluralize)(
+ 'test suite',
+ snapshots.uncheckedKeysByFile.length
+ )}.`
+ );
+ } else {
+ summary.push(
+ OBSOLETE_COLOR(
+ `${ARROW}${(0, _jestUtil().pluralize)(
+ 'snapshot',
+ snapshots.unchecked
+ )} obsolete `
+ ) +
+ `from ${(0, _jestUtil().pluralize)(
+ 'test suite',
+ snapshots.uncheckedKeysByFile.length
+ )}. ` +
+ SNAPSHOT_NOTE(
+ `To remove ${
+ snapshots.unchecked === 1 ? 'it' : 'them all'
+ }, ${updateCommand}.`
+ )
+ );
+ }
+
+ snapshots.uncheckedKeysByFile.forEach(uncheckedFile => {
+ summary.push(
+ ` ${DOWN_ARROW}${(0, _utils.formatTestPath)(
+ globalConfig,
+ uncheckedFile.filePath
+ )}`
+ );
+ uncheckedFile.keys.forEach(key => {
+ summary.push(` ${DOT}${key}`);
+ });
+ });
+ }
+
+ return summary;
+}
diff --git a/node_modules/@jest/reporters/build/getWatermarks.d.ts b/node_modules/@jest/reporters/build/getWatermarks.d.ts
new file mode 100644
index 0000000..a64751e
--- /dev/null
+++ b/node_modules/@jest/reporters/build/getWatermarks.d.ts
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import istanbulReport = require('istanbul-lib-report');
+import type { Config } from '@jest/types';
+export default function getWatermarks(config: Config.GlobalConfig): istanbulReport.Watermarks;
diff --git a/node_modules/@jest/reporters/build/getWatermarks.js b/node_modules/@jest/reporters/build/getWatermarks.js
new file mode 100644
index 0000000..5e27e41
--- /dev/null
+++ b/node_modules/@jest/reporters/build/getWatermarks.js
@@ -0,0 +1,47 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = getWatermarks;
+
+function _istanbulLibReport() {
+ const data = _interopRequireDefault(require('istanbul-lib-report'));
+
+ _istanbulLibReport = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+function getWatermarks(config) {
+ const defaultWatermarks = _istanbulLibReport().default.getDefaultWatermarks();
+
+ const {coverageThreshold} = config;
+
+ if (!coverageThreshold || !coverageThreshold.global) {
+ return defaultWatermarks;
+ }
+
+ const keys = ['branches', 'functions', 'lines', 'statements'];
+ return keys.reduce((watermarks, key) => {
+ const value = coverageThreshold.global[key];
+
+ if (value !== undefined) {
+ watermarks[key][1] = value;
+ }
+
+ return watermarks;
+ }, defaultWatermarks);
+}
diff --git a/node_modules/@jest/reporters/build/index.d.ts b/node_modules/@jest/reporters/build/index.d.ts
new file mode 100644
index 0000000..96e583a
--- /dev/null
+++ b/node_modules/@jest/reporters/build/index.d.ts
@@ -0,0 +1,27 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import getResultHeader from './getResultHeader';
+export type { Config } from '@jest/types';
+export type { AggregatedResult, SnapshotSummary, TestResult, } from '@jest/test-result';
+export { default as BaseReporter } from './BaseReporter';
+export { default as CoverageReporter } from './CoverageReporter';
+export { default as DefaultReporter } from './DefaultReporter';
+export { default as NotifyReporter } from './NotifyReporter';
+export { default as SummaryReporter } from './SummaryReporter';
+export { default as VerboseReporter } from './VerboseReporter';
+export type { Context, Reporter, ReporterOnStartOptions, SummaryOptions, Test, } from './types';
+export declare const utils: {
+ formatTestPath: (config: import("@jest/types/build/Config").ProjectConfig | import("@jest/types/build/Config").GlobalConfig, testPath: string) => string;
+ getResultHeader: typeof getResultHeader;
+ getSummary: (aggregatedResults: import("@jest/test-result").AggregatedResult, options?: import("./types").SummaryOptions | undefined) => string;
+ printDisplayName: (config: import("@jest/types/build/Config").ProjectConfig) => string;
+ relativePath: (config: import("@jest/types/build/Config").ProjectConfig | import("@jest/types/build/Config").GlobalConfig, testPath: string) => {
+ basename: string;
+ dirname: string;
+ };
+ trimAndFormatPath: (pad: number, config: import("@jest/types/build/Config").ProjectConfig | import("@jest/types/build/Config").GlobalConfig, testPath: string, columns: number) => string;
+};
diff --git a/node_modules/@jest/reporters/build/index.js b/node_modules/@jest/reporters/build/index.js
new file mode 100644
index 0000000..bafd8e9
--- /dev/null
+++ b/node_modules/@jest/reporters/build/index.js
@@ -0,0 +1,78 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+Object.defineProperty(exports, 'BaseReporter', {
+ enumerable: true,
+ get: function () {
+ return _BaseReporter.default;
+ }
+});
+Object.defineProperty(exports, 'CoverageReporter', {
+ enumerable: true,
+ get: function () {
+ return _CoverageReporter.default;
+ }
+});
+Object.defineProperty(exports, 'DefaultReporter', {
+ enumerable: true,
+ get: function () {
+ return _DefaultReporter.default;
+ }
+});
+Object.defineProperty(exports, 'NotifyReporter', {
+ enumerable: true,
+ get: function () {
+ return _NotifyReporter.default;
+ }
+});
+Object.defineProperty(exports, 'SummaryReporter', {
+ enumerable: true,
+ get: function () {
+ return _SummaryReporter.default;
+ }
+});
+Object.defineProperty(exports, 'VerboseReporter', {
+ enumerable: true,
+ get: function () {
+ return _VerboseReporter.default;
+ }
+});
+exports.utils = void 0;
+
+var _getResultHeader = _interopRequireDefault(require('./getResultHeader'));
+
+var _utils = require('./utils');
+
+var _BaseReporter = _interopRequireDefault(require('./BaseReporter'));
+
+var _CoverageReporter = _interopRequireDefault(require('./CoverageReporter'));
+
+var _DefaultReporter = _interopRequireDefault(require('./DefaultReporter'));
+
+var _NotifyReporter = _interopRequireDefault(require('./NotifyReporter'));
+
+var _SummaryReporter = _interopRequireDefault(require('./SummaryReporter'));
+
+var _VerboseReporter = _interopRequireDefault(require('./VerboseReporter'));
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+const utils = {
+ formatTestPath: _utils.formatTestPath,
+ getResultHeader: _getResultHeader.default,
+ getSummary: _utils.getSummary,
+ printDisplayName: _utils.printDisplayName,
+ relativePath: _utils.relativePath,
+ trimAndFormatPath: _utils.trimAndFormatPath
+};
+exports.utils = utils;
diff --git a/node_modules/@jest/reporters/build/types.d.ts b/node_modules/@jest/reporters/build/types.d.ts
new file mode 100644
index 0000000..0dcbe26
--- /dev/null
+++ b/node_modules/@jest/reporters/build/types.d.ts
@@ -0,0 +1,75 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import type { AggregatedResult, SerializableError, TestCaseResult, TestResult } from '@jest/test-result';
+import type { Config } from '@jest/types';
+import type { FS as HasteFS, ModuleMap } from 'jest-haste-map';
+import type Resolver from 'jest-resolve';
+import type { worker } from './CoverageWorker';
+export declare type ReporterOnStartOptions = {
+ estimatedTime: number;
+ showStatus: boolean;
+};
+export declare type Context = {
+ config: Config.ProjectConfig;
+ hasteFS: HasteFS;
+ moduleMap: ModuleMap;
+ resolver: Resolver;
+};
+export declare type Test = {
+ context: Context;
+ duration?: number;
+ path: Config.Path;
+};
+export declare type CoverageWorker = {
+ worker: typeof worker;
+};
+export declare type CoverageReporterOptions = {
+ changedFiles?: Set<Config.Path>;
+ sourcesRelatedToTestsInChangedFiles?: Set<Config.Path>;
+};
+export declare type CoverageReporterSerializedOptions = {
+ changedFiles?: Array<Config.Path>;
+ sourcesRelatedToTestsInChangedFiles?: Array<Config.Path>;
+};
+export declare type OnTestStart = (test: Test) => Promise<void>;
+export declare type OnTestFailure = (test: Test, error: SerializableError) => Promise<unknown>;
+export declare type OnTestSuccess = (test: Test, result: TestResult) => Promise<unknown>;
+export interface Reporter {
+ readonly onTestResult?: (test: Test, testResult: TestResult, aggregatedResult: AggregatedResult) => Promise<void> | void;
+ readonly onTestFileResult?: (test: Test, testResult: TestResult, aggregatedResult: AggregatedResult) => Promise<void> | void;
+ readonly onTestCaseResult?: (test: Test, testCaseResult: TestCaseResult) => Promise<void> | void;
+ readonly onRunStart: (results: AggregatedResult, options: ReporterOnStartOptions) => Promise<void> | void;
+ readonly onTestStart?: (test: Test) => Promise<void> | void;
+ readonly onTestFileStart?: (test: Test) => Promise<void> | void;
+ readonly onRunComplete: (contexts: Set<Context>, results: AggregatedResult) => Promise<void> | void;
+ readonly getLastError: () => Error | void;
+}
+export declare type SummaryOptions = {
+ currentTestCases?: Array<{
+ test: Test;
+ testCaseResult: TestCaseResult;
+ }>;
+ estimatedTime?: number;
+ roundTime?: boolean;
+ width?: number;
+};
+export declare type TestRunnerOptions = {
+ serial: boolean;
+};
+export declare type TestRunData = Array<{
+ context: Context;
+ matches: {
+ allTests: number;
+ tests: Array<Test>;
+ total: number;
+ };
+}>;
+export declare type TestSchedulerContext = {
+ firstRun: boolean;
+ previousSuccess: boolean;
+ changedFiles?: Set<Config.Path>;
+};
diff --git a/node_modules/@jest/reporters/build/types.js b/node_modules/@jest/reporters/build/types.js
new file mode 100644
index 0000000..ad9a93a
--- /dev/null
+++ b/node_modules/@jest/reporters/build/types.js
@@ -0,0 +1 @@
+'use strict';
diff --git a/node_modules/@jest/reporters/build/utils.d.ts b/node_modules/@jest/reporters/build/utils.d.ts
new file mode 100644
index 0000000..ed676be
--- /dev/null
+++ b/node_modules/@jest/reporters/build/utils.d.ts
@@ -0,0 +1,18 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import type { AggregatedResult } from '@jest/test-result';
+import type { Config } from '@jest/types';
+import type { SummaryOptions } from './types';
+export declare const printDisplayName: (config: Config.ProjectConfig) => string;
+export declare const trimAndFormatPath: (pad: number, config: Config.ProjectConfig | Config.GlobalConfig, testPath: Config.Path, columns: number) => string;
+export declare const formatTestPath: (config: Config.GlobalConfig | Config.ProjectConfig, testPath: Config.Path) => string;
+export declare const relativePath: (config: Config.GlobalConfig | Config.ProjectConfig, testPath: Config.Path) => {
+ basename: string;
+ dirname: string;
+};
+export declare const getSummary: (aggregatedResults: AggregatedResult, options?: SummaryOptions | undefined) => string;
+export declare const wrapAnsiString: (string: string, terminalWidth: number) => string;
diff --git a/node_modules/@jest/reporters/build/utils.js b/node_modules/@jest/reporters/build/utils.js
new file mode 100644
index 0000000..558ac92
--- /dev/null
+++ b/node_modules/@jest/reporters/build/utils.js
@@ -0,0 +1,435 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.wrapAnsiString =
+ exports.trimAndFormatPath =
+ exports.relativePath =
+ exports.printDisplayName =
+ exports.getSummary =
+ exports.formatTestPath =
+ void 0;
+
+function path() {
+ const data = _interopRequireWildcard(require('path'));
+
+ path = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+
+ _chalk = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _slash() {
+ const data = _interopRequireDefault(require('slash'));
+
+ _slash = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestUtil() {
+ const data = require('jest-util');
+
+ _jestUtil = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+function _getRequireWildcardCache(nodeInterop) {
+ if (typeof WeakMap !== 'function') return null;
+ var cacheBabelInterop = new WeakMap();
+ var cacheNodeInterop = new WeakMap();
+ return (_getRequireWildcardCache = function (nodeInterop) {
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
+ })(nodeInterop);
+}
+
+function _interopRequireWildcard(obj, nodeInterop) {
+ if (!nodeInterop && obj && obj.__esModule) {
+ return obj;
+ }
+ if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) {
+ return {default: obj};
+ }
+ var cache = _getRequireWildcardCache(nodeInterop);
+ if (cache && cache.has(obj)) {
+ return cache.get(obj);
+ }
+ var newObj = {};
+ var hasPropertyDescriptor =
+ Object.defineProperty && Object.getOwnPropertyDescriptor;
+ for (var key in obj) {
+ if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) {
+ var desc = hasPropertyDescriptor
+ ? Object.getOwnPropertyDescriptor(obj, key)
+ : null;
+ if (desc && (desc.get || desc.set)) {
+ Object.defineProperty(newObj, key, desc);
+ } else {
+ newObj[key] = obj[key];
+ }
+ }
+ }
+ newObj.default = obj;
+ if (cache) {
+ cache.set(obj, newObj);
+ }
+ return newObj;
+}
+
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+const PROGRESS_BAR_WIDTH = 40;
+
+const printDisplayName = config => {
+ const {displayName} = config;
+
+ const white = _chalk().default.reset.inverse.white;
+
+ if (!displayName) {
+ return '';
+ }
+
+ const {name, color} = displayName;
+ const chosenColor = _chalk().default.reset.inverse[color]
+ ? _chalk().default.reset.inverse[color]
+ : white;
+ return _chalk().default.supportsColor ? chosenColor(` ${name} `) : name;
+};
+
+exports.printDisplayName = printDisplayName;
+
+const trimAndFormatPath = (pad, config, testPath, columns) => {
+ const maxLength = columns - pad;
+ const relative = relativePath(config, testPath);
+ const {basename} = relative;
+ let {dirname} = relative; // length is ok
+
+ if ((dirname + path().sep + basename).length <= maxLength) {
+ return (0, _slash().default)(
+ _chalk().default.dim(dirname + path().sep) +
+ _chalk().default.bold(basename)
+ );
+ } // we can fit trimmed dirname and full basename
+
+ const basenameLength = basename.length;
+
+ if (basenameLength + 4 < maxLength) {
+ const dirnameLength = maxLength - 4 - basenameLength;
+ dirname =
+ '...' + dirname.slice(dirname.length - dirnameLength, dirname.length);
+ return (0, _slash().default)(
+ _chalk().default.dim(dirname + path().sep) +
+ _chalk().default.bold(basename)
+ );
+ }
+
+ if (basenameLength + 4 === maxLength) {
+ return (0, _slash().default)(
+ _chalk().default.dim('...' + path().sep) + _chalk().default.bold(basename)
+ );
+ } // can't fit dirname, but can fit trimmed basename
+
+ return (0, _slash().default)(
+ _chalk().default.bold(
+ '...' + basename.slice(basename.length - maxLength - 4, basename.length)
+ )
+ );
+};
+
+exports.trimAndFormatPath = trimAndFormatPath;
+
+const formatTestPath = (config, testPath) => {
+ const {dirname, basename} = relativePath(config, testPath);
+ return (0, _slash().default)(
+ _chalk().default.dim(dirname + path().sep) + _chalk().default.bold(basename)
+ );
+};
+
+exports.formatTestPath = formatTestPath;
+
+const relativePath = (config, testPath) => {
+ // this function can be called with ProjectConfigs or GlobalConfigs. GlobalConfigs
+ // do not have config.cwd, only config.rootDir. Try using config.cwd, fallback
+ // to config.rootDir. (Also, some unit just use config.rootDir, which is ok)
+ testPath = path().relative(config.cwd || config.rootDir, testPath);
+ const dirname = path().dirname(testPath);
+ const basename = path().basename(testPath);
+ return {
+ basename,
+ dirname
+ };
+};
+
+exports.relativePath = relativePath;
+
+const getValuesCurrentTestCases = (currentTestCases = []) => {
+ let numFailingTests = 0;
+ let numPassingTests = 0;
+ let numPendingTests = 0;
+ let numTodoTests = 0;
+ let numTotalTests = 0;
+ currentTestCases.forEach(testCase => {
+ switch (testCase.testCaseResult.status) {
+ case 'failed': {
+ numFailingTests++;
+ break;
+ }
+
+ case 'passed': {
+ numPassingTests++;
+ break;
+ }
+
+ case 'skipped': {
+ numPendingTests++;
+ break;
+ }
+
+ case 'todo': {
+ numTodoTests++;
+ break;
+ }
+ }
+
+ numTotalTests++;
+ });
+ return {
+ numFailingTests,
+ numPassingTests,
+ numPendingTests,
+ numTodoTests,
+ numTotalTests
+ };
+};
+
+const getSummary = (aggregatedResults, options) => {
+ let runTime = (Date.now() - aggregatedResults.startTime) / 1000;
+
+ if (options && options.roundTime) {
+ runTime = Math.floor(runTime);
+ }
+
+ const valuesForCurrentTestCases = getValuesCurrentTestCases(
+ options === null || options === void 0 ? void 0 : options.currentTestCases
+ );
+ const estimatedTime = (options && options.estimatedTime) || 0;
+ const snapshotResults = aggregatedResults.snapshot;
+ const snapshotsAdded = snapshotResults.added;
+ const snapshotsFailed = snapshotResults.unmatched;
+ const snapshotsOutdated = snapshotResults.unchecked;
+ const snapshotsFilesRemoved = snapshotResults.filesRemoved;
+ const snapshotsDidUpdate = snapshotResults.didUpdate;
+ const snapshotsPassed = snapshotResults.matched;
+ const snapshotsTotal = snapshotResults.total;
+ const snapshotsUpdated = snapshotResults.updated;
+ const suitesFailed = aggregatedResults.numFailedTestSuites;
+ const suitesPassed = aggregatedResults.numPassedTestSuites;
+ const suitesPending = aggregatedResults.numPendingTestSuites;
+ const suitesRun = suitesFailed + suitesPassed;
+ const suitesTotal = aggregatedResults.numTotalTestSuites;
+ const testsFailed = aggregatedResults.numFailedTests;
+ const testsPassed = aggregatedResults.numPassedTests;
+ const testsPending = aggregatedResults.numPendingTests;
+ const testsTodo = aggregatedResults.numTodoTests;
+ const testsTotal = aggregatedResults.numTotalTests;
+ const width = (options && options.width) || 0;
+ const suites =
+ _chalk().default.bold('Test Suites: ') +
+ (suitesFailed
+ ? _chalk().default.bold.red(`${suitesFailed} failed`) + ', '
+ : '') +
+ (suitesPending
+ ? _chalk().default.bold.yellow(`${suitesPending} skipped`) + ', '
+ : '') +
+ (suitesPassed
+ ? _chalk().default.bold.green(`${suitesPassed} passed`) + ', '
+ : '') +
+ (suitesRun !== suitesTotal
+ ? suitesRun + ' of ' + suitesTotal
+ : suitesTotal) +
+ ' total';
+ const updatedTestsFailed =
+ testsFailed + valuesForCurrentTestCases.numFailingTests;
+ const updatedTestsPending =
+ testsPending + valuesForCurrentTestCases.numPendingTests;
+ const updatedTestsTodo = testsTodo + valuesForCurrentTestCases.numTodoTests;
+ const updatedTestsPassed =
+ testsPassed + valuesForCurrentTestCases.numPassingTests;
+ const updatedTestsTotal =
+ testsTotal + valuesForCurrentTestCases.numTotalTests;
+ const tests =
+ _chalk().default.bold('Tests: ') +
+ (updatedTestsFailed > 0
+ ? _chalk().default.bold.red(`${updatedTestsFailed} failed`) + ', '
+ : '') +
+ (updatedTestsPending > 0
+ ? _chalk().default.bold.yellow(`${updatedTestsPending} skipped`) + ', '
+ : '') +
+ (updatedTestsTodo > 0
+ ? _chalk().default.bold.magenta(`${updatedTestsTodo} todo`) + ', '
+ : '') +
+ (updatedTestsPassed > 0
+ ? _chalk().default.bold.green(`${updatedTestsPassed} passed`) + ', '
+ : '') +
+ `${updatedTestsTotal} total`;
+ const snapshots =
+ _chalk().default.bold('Snapshots: ') +
+ (snapshotsFailed
+ ? _chalk().default.bold.red(`${snapshotsFailed} failed`) + ', '
+ : '') +
+ (snapshotsOutdated && !snapshotsDidUpdate
+ ? _chalk().default.bold.yellow(`${snapshotsOutdated} obsolete`) + ', '
+ : '') +
+ (snapshotsOutdated && snapshotsDidUpdate
+ ? _chalk().default.bold.green(`${snapshotsOutdated} removed`) + ', '
+ : '') +
+ (snapshotsFilesRemoved && !snapshotsDidUpdate
+ ? _chalk().default.bold.yellow(
+ (0, _jestUtil().pluralize)('file', snapshotsFilesRemoved) +
+ ' obsolete'
+ ) + ', '
+ : '') +
+ (snapshotsFilesRemoved && snapshotsDidUpdate
+ ? _chalk().default.bold.green(
+ (0, _jestUtil().pluralize)('file', snapshotsFilesRemoved) + ' removed'
+ ) + ', '
+ : '') +
+ (snapshotsUpdated
+ ? _chalk().default.bold.green(`${snapshotsUpdated} updated`) + ', '
+ : '') +
+ (snapshotsAdded
+ ? _chalk().default.bold.green(`${snapshotsAdded} written`) + ', '
+ : '') +
+ (snapshotsPassed
+ ? _chalk().default.bold.green(`${snapshotsPassed} passed`) + ', '
+ : '') +
+ `${snapshotsTotal} total`;
+ const time = renderTime(runTime, estimatedTime, width);
+ return [suites, tests, snapshots, time].join('\n');
+};
+
+exports.getSummary = getSummary;
+
+const renderTime = (runTime, estimatedTime, width) => {
+ // If we are more than one second over the estimated time, highlight it.
+ const renderedTime =
+ estimatedTime && runTime >= estimatedTime + 1
+ ? _chalk().default.bold.yellow((0, _jestUtil().formatTime)(runTime, 0))
+ : (0, _jestUtil().formatTime)(runTime, 0);
+ let time = _chalk().default.bold('Time:') + ` ${renderedTime}`;
+
+ if (runTime < estimatedTime) {
+ time += `, estimated ${(0, _jestUtil().formatTime)(estimatedTime, 0)}`;
+ } // Only show a progress bar if the test run is actually going to take
+ // some time.
+
+ if (estimatedTime > 2 && runTime < estimatedTime && width) {
+ const availableWidth = Math.min(PROGRESS_BAR_WIDTH, width);
+ const length = Math.min(
+ Math.floor((runTime / estimatedTime) * availableWidth),
+ availableWidth
+ );
+
+ if (availableWidth >= 2) {
+ time +=
+ '\n' +
+ _chalk().default.green('â–ˆ').repeat(length) +
+ _chalk()
+ .default.white('â–ˆ')
+ .repeat(availableWidth - length);
+ }
+ }
+
+ return time;
+}; // word-wrap a string that contains ANSI escape sequences.
+// ANSI escape sequences do not add to the string length.
+
+const wrapAnsiString = (string, terminalWidth) => {
+ if (terminalWidth === 0) {
+ // if the terminal width is zero, don't bother word-wrapping
+ return string;
+ }
+
+ const ANSI_REGEXP = /[\u001b\u009b]\[\d{1,2}m/gu;
+ const tokens = [];
+ let lastIndex = 0;
+ let match;
+
+ while ((match = ANSI_REGEXP.exec(string))) {
+ const ansi = match[0];
+ const index = match['index'];
+
+ if (index != lastIndex) {
+ tokens.push(['string', string.slice(lastIndex, index)]);
+ }
+
+ tokens.push(['ansi', ansi]);
+ lastIndex = index + ansi.length;
+ }
+
+ if (lastIndex != string.length - 1) {
+ tokens.push(['string', string.slice(lastIndex, string.length)]);
+ }
+
+ let lastLineLength = 0;
+ return tokens
+ .reduce(
+ (lines, [kind, token]) => {
+ if (kind === 'string') {
+ if (lastLineLength + token.length > terminalWidth) {
+ while (token.length) {
+ const chunk = token.slice(0, terminalWidth - lastLineLength);
+ const remaining = token.slice(
+ terminalWidth - lastLineLength,
+ token.length
+ );
+ lines[lines.length - 1] += chunk;
+ lastLineLength += chunk.length;
+ token = remaining;
+
+ if (token.length) {
+ lines.push('');
+ lastLineLength = 0;
+ }
+ }
+ } else {
+ lines[lines.length - 1] += token;
+ lastLineLength += token.length;
+ }
+ } else {
+ lines[lines.length - 1] += token;
+ }
+
+ return lines;
+ },
+ ['']
+ )
+ .join('\n');
+};
+
+exports.wrapAnsiString = wrapAnsiString;
diff --git a/node_modules/@jest/reporters/package.json b/node_modules/@jest/reporters/package.json
new file mode 100644
index 0000000..e85e6d1
--- /dev/null
+++ b/node_modules/@jest/reporters/package.json
@@ -0,0 +1,80 @@
+{
+ "name": "@jest/reporters",
+ "description": "Jest's reporters",
+ "version": "27.5.1",
+ "main": "./build/index.js",
+ "types": "./build/index.d.ts",
+ "exports": {
+ ".": {
+ "types": "./build/index.d.ts",
+ "default": "./build/index.js"
+ },
+ "./package.json": "./package.json"
+ },
+ "dependencies": {
+ "@bcoe/v8-coverage": "^0.2.3",
+ "@jest/console": "^27.5.1",
+ "@jest/test-result": "^27.5.1",
+ "@jest/transform": "^27.5.1",
+ "@jest/types": "^27.5.1",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "collect-v8-coverage": "^1.0.0",
+ "exit": "^0.1.2",
+ "glob": "^7.1.2",
+ "graceful-fs": "^4.2.9",
+ "istanbul-lib-coverage": "^3.0.0",
+ "istanbul-lib-instrument": "^5.1.0",
+ "istanbul-lib-report": "^3.0.0",
+ "istanbul-lib-source-maps": "^4.0.0",
+ "istanbul-reports": "^3.1.3",
+ "jest-haste-map": "^27.5.1",
+ "jest-resolve": "^27.5.1",
+ "jest-util": "^27.5.1",
+ "jest-worker": "^27.5.1",
+ "slash": "^3.0.0",
+ "source-map": "^0.6.0",
+ "string-length": "^4.0.1",
+ "terminal-link": "^2.0.0",
+ "v8-to-istanbul": "^8.1.0"
+ },
+ "devDependencies": {
+ "@jest/test-utils": "^27.5.1",
+ "@types/exit": "^0.1.30",
+ "@types/glob": "^7.1.1",
+ "@types/graceful-fs": "^4.1.3",
+ "@types/istanbul-lib-coverage": "^2.0.0",
+ "@types/istanbul-lib-instrument": "^1.7.2",
+ "@types/istanbul-lib-report": "^3.0.0",
+ "@types/istanbul-lib-source-maps": "^4.0.0",
+ "@types/istanbul-reports": "^3.0.0",
+ "@types/node-notifier": "^8.0.0",
+ "mock-fs": "^4.4.1",
+ "strip-ansi": "^6.0.0"
+ },
+ "peerDependencies": {
+ "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
+ },
+ "peerDependenciesMeta": {
+ "node-notifier": {
+ "optional": true
+ }
+ },
+ "engines": {
+ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/facebook/jest",
+ "directory": "packages/jest-reporters"
+ },
+ "bugs": {
+ "url": "https://github.com/facebook/jest/issues"
+ },
+ "homepage": "https://jestjs.io/",
+ "license": "MIT",
+ "publishConfig": {
+ "access": "public"
+ },
+ "gitHead": "67c1aa20c5fec31366d733e901fee2b981cb1850"
+}
diff --git a/node_modules/@jest/source-map/LICENSE b/node_modules/@jest/source-map/LICENSE
new file mode 100644
index 0000000..b96dcb0
--- /dev/null
+++ b/node_modules/@jest/source-map/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) Facebook, Inc. and its affiliates.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/node_modules/@jest/source-map/build/getCallsite.d.ts b/node_modules/@jest/source-map/build/getCallsite.d.ts
new file mode 100644
index 0000000..c09ab3d
--- /dev/null
+++ b/node_modules/@jest/source-map/build/getCallsite.d.ts
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import callsites = require('callsites');
+import type { SourceMapRegistry } from './types';
+export default function getCallsite(level: number, sourceMaps?: SourceMapRegistry | null): callsites.CallSite;
diff --git a/node_modules/@jest/source-map/build/getCallsite.js b/node_modules/@jest/source-map/build/getCallsite.js
new file mode 100644
index 0000000..35c6102
--- /dev/null
+++ b/node_modules/@jest/source-map/build/getCallsite.js
@@ -0,0 +1,108 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = getCallsite;
+
+function _callsites() {
+ const data = _interopRequireDefault(require('callsites'));
+
+ _callsites = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _gracefulFs() {
+ const data = require('graceful-fs');
+
+ _gracefulFs = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _sourceMap() {
+ const data = require('source-map');
+
+ _sourceMap = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+// Copied from https://github.com/rexxars/sourcemap-decorate-callsites/blob/5b9735a156964973a75dc62fd2c7f0c1975458e8/lib/index.js#L113-L158
+const addSourceMapConsumer = (callsite, consumer) => {
+ const getLineNumber = callsite.getLineNumber;
+ const getColumnNumber = callsite.getColumnNumber;
+ let position = null;
+
+ function getPosition() {
+ if (!position) {
+ position = consumer.originalPositionFor({
+ column: getColumnNumber.call(callsite) || -1,
+ line: getLineNumber.call(callsite) || -1
+ });
+ }
+
+ return position;
+ }
+
+ Object.defineProperties(callsite, {
+ getColumnNumber: {
+ value() {
+ return getPosition().column || getColumnNumber.call(callsite);
+ },
+
+ writable: false
+ },
+ getLineNumber: {
+ value() {
+ return getPosition().line || getLineNumber.call(callsite);
+ },
+
+ writable: false
+ }
+ });
+};
+
+function getCallsite(level, sourceMaps) {
+ const levelAfterThisCall = level + 1;
+ const stack = (0, _callsites().default)()[levelAfterThisCall];
+ const sourceMapFileName =
+ sourceMaps === null || sourceMaps === void 0
+ ? void 0
+ : sourceMaps.get(stack.getFileName() || '');
+
+ if (sourceMapFileName) {
+ try {
+ const sourceMap = (0, _gracefulFs().readFileSync)(
+ sourceMapFileName,
+ 'utf8'
+ ); // @ts-expect-error: Not allowed to pass string
+
+ addSourceMapConsumer(
+ stack,
+ new (_sourceMap().SourceMapConsumer)(sourceMap)
+ );
+ } catch {
+ // ignore
+ }
+ }
+
+ return stack;
+}
diff --git a/node_modules/@jest/source-map/build/index.d.ts b/node_modules/@jest/source-map/build/index.d.ts
new file mode 100644
index 0000000..a6ffae9
--- /dev/null
+++ b/node_modules/@jest/source-map/build/index.d.ts
@@ -0,0 +1,8 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+export { default as getCallsite } from './getCallsite';
+export type { SourceMapRegistry } from './types';
diff --git a/node_modules/@jest/source-map/build/index.js b/node_modules/@jest/source-map/build/index.js
new file mode 100644
index 0000000..3411605
--- /dev/null
+++ b/node_modules/@jest/source-map/build/index.js
@@ -0,0 +1,17 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+Object.defineProperty(exports, 'getCallsite', {
+ enumerable: true,
+ get: function () {
+ return _getCallsite.default;
+ }
+});
+
+var _getCallsite = _interopRequireDefault(require('./getCallsite'));
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
diff --git a/node_modules/@jest/source-map/build/types.d.ts b/node_modules/@jest/source-map/build/types.d.ts
new file mode 100644
index 0000000..3910875
--- /dev/null
+++ b/node_modules/@jest/source-map/build/types.d.ts
@@ -0,0 +1,7 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+export declare type SourceMapRegistry = Map<string, string>;
diff --git a/node_modules/@jest/source-map/build/types.js b/node_modules/@jest/source-map/build/types.js
new file mode 100644
index 0000000..ad9a93a
--- /dev/null
+++ b/node_modules/@jest/source-map/build/types.js
@@ -0,0 +1 @@
+'use strict';
diff --git a/node_modules/@jest/source-map/package.json b/node_modules/@jest/source-map/package.json
new file mode 100644
index 0000000..9ade03c
--- /dev/null
+++ b/node_modules/@jest/source-map/package.json
@@ -0,0 +1,34 @@
+{
+ "name": "@jest/source-map",
+ "version": "27.5.1",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/facebook/jest.git",
+ "directory": "packages/jest-source-map"
+ },
+ "license": "MIT",
+ "main": "./build/index.js",
+ "types": "./build/index.d.ts",
+ "exports": {
+ ".": {
+ "types": "./build/index.d.ts",
+ "default": "./build/index.js"
+ },
+ "./package.json": "./package.json"
+ },
+ "dependencies": {
+ "callsites": "^3.0.0",
+ "graceful-fs": "^4.2.9",
+ "source-map": "^0.6.0"
+ },
+ "devDependencies": {
+ "@types/graceful-fs": "^4.1.2"
+ },
+ "engines": {
+ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ },
+ "publishConfig": {
+ "access": "public"
+ },
+ "gitHead": "67c1aa20c5fec31366d733e901fee2b981cb1850"
+}
diff --git a/node_modules/@jest/test-result/LICENSE b/node_modules/@jest/test-result/LICENSE
new file mode 100644
index 0000000..b96dcb0
--- /dev/null
+++ b/node_modules/@jest/test-result/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) Facebook, Inc. and its affiliates.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/node_modules/@jest/test-result/build/formatTestResults.d.ts b/node_modules/@jest/test-result/build/formatTestResults.d.ts
new file mode 100644
index 0000000..6a3bf03
--- /dev/null
+++ b/node_modules/@jest/test-result/build/formatTestResults.d.ts
@@ -0,0 +1,8 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import type { AggregatedResult, CodeCoverageFormatter, CodeCoverageReporter, FormattedTestResults } from './types';
+export default function formatTestResults(results: AggregatedResult, codeCoverageFormatter?: CodeCoverageFormatter, reporter?: CodeCoverageReporter): FormattedTestResults;
diff --git a/node_modules/@jest/test-result/build/formatTestResults.js b/node_modules/@jest/test-result/build/formatTestResults.js
new file mode 100644
index 0000000..3de0cdf
--- /dev/null
+++ b/node_modules/@jest/test-result/build/formatTestResults.js
@@ -0,0 +1,70 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = formatTestResults;
+
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+const formatTestResult = (testResult, codeCoverageFormatter, reporter) => {
+ const assertionResults = testResult.testResults.map(formatTestAssertion);
+
+ if (testResult.testExecError) {
+ const now = Date.now();
+ return {
+ assertionResults,
+ coverage: {},
+ endTime: now,
+ message: testResult.failureMessage
+ ? testResult.failureMessage
+ : testResult.testExecError.message,
+ name: testResult.testFilePath,
+ startTime: now,
+ status: 'failed',
+ summary: ''
+ };
+ } else {
+ const allTestsPassed = testResult.numFailingTests === 0;
+ return {
+ assertionResults,
+ coverage: codeCoverageFormatter
+ ? codeCoverageFormatter(testResult.coverage, reporter)
+ : testResult.coverage,
+ endTime: testResult.perfStats.end,
+ message: testResult.failureMessage || '',
+ name: testResult.testFilePath,
+ startTime: testResult.perfStats.start,
+ status: allTestsPassed ? 'passed' : 'failed',
+ summary: ''
+ };
+ }
+};
+
+function formatTestAssertion(assertion) {
+ const result = {
+ ancestorTitles: assertion.ancestorTitles,
+ failureMessages: null,
+ fullName: assertion.fullName,
+ location: assertion.location,
+ status: assertion.status,
+ title: assertion.title
+ };
+
+ if (assertion.failureMessages) {
+ result.failureMessages = assertion.failureMessages;
+ }
+
+ return result;
+}
+
+function formatTestResults(results, codeCoverageFormatter, reporter) {
+ const testResults = results.testResults.map(testResult =>
+ formatTestResult(testResult, codeCoverageFormatter, reporter)
+ );
+ return {...results, testResults};
+}
diff --git a/node_modules/@jest/test-result/build/helpers.d.ts b/node_modules/@jest/test-result/build/helpers.d.ts
new file mode 100644
index 0000000..480c7ab
--- /dev/null
+++ b/node_modules/@jest/test-result/build/helpers.d.ts
@@ -0,0 +1,12 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import type { Config } from '@jest/types';
+import type { AggregatedResult, SerializableError, TestResult } from './types';
+export declare const makeEmptyAggregatedTestResult: () => AggregatedResult;
+export declare const buildFailureTestResult: (testPath: Config.Path, err: SerializableError) => TestResult;
+export declare const addResult: (aggregatedResults: AggregatedResult, testResult: TestResult) => void;
+export declare const createEmptyTestResult: () => TestResult;
diff --git a/node_modules/@jest/test-result/build/helpers.js b/node_modules/@jest/test-result/build/helpers.js
new file mode 100644
index 0000000..c63ad6b
--- /dev/null
+++ b/node_modules/@jest/test-result/build/helpers.js
@@ -0,0 +1,188 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.makeEmptyAggregatedTestResult =
+ exports.createEmptyTestResult =
+ exports.buildFailureTestResult =
+ exports.addResult =
+ void 0;
+
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+const makeEmptyAggregatedTestResult = () => ({
+ numFailedTestSuites: 0,
+ numFailedTests: 0,
+ numPassedTestSuites: 0,
+ numPassedTests: 0,
+ numPendingTestSuites: 0,
+ numPendingTests: 0,
+ numRuntimeErrorTestSuites: 0,
+ numTodoTests: 0,
+ numTotalTestSuites: 0,
+ numTotalTests: 0,
+ openHandles: [],
+ snapshot: {
+ added: 0,
+ didUpdate: false,
+ // is set only after the full run
+ failure: false,
+ filesAdded: 0,
+ // combines individual test results + removed files after the full run
+ filesRemoved: 0,
+ filesRemovedList: [],
+ filesUnmatched: 0,
+ filesUpdated: 0,
+ matched: 0,
+ total: 0,
+ unchecked: 0,
+ uncheckedKeysByFile: [],
+ unmatched: 0,
+ updated: 0
+ },
+ startTime: 0,
+ success: true,
+ testResults: [],
+ wasInterrupted: false
+});
+
+exports.makeEmptyAggregatedTestResult = makeEmptyAggregatedTestResult;
+
+const buildFailureTestResult = (testPath, err) => ({
+ console: undefined,
+ displayName: undefined,
+ failureMessage: null,
+ leaks: false,
+ numFailingTests: 0,
+ numPassingTests: 0,
+ numPendingTests: 0,
+ numTodoTests: 0,
+ openHandles: [],
+ perfStats: {
+ end: 0,
+ runtime: 0,
+ slow: false,
+ start: 0
+ },
+ skipped: false,
+ snapshot: {
+ added: 0,
+ fileDeleted: false,
+ matched: 0,
+ unchecked: 0,
+ uncheckedKeys: [],
+ unmatched: 0,
+ updated: 0
+ },
+ testExecError: err,
+ testFilePath: testPath,
+ testResults: []
+}); // Add individual test result to an aggregated test result
+
+exports.buildFailureTestResult = buildFailureTestResult;
+
+const addResult = (aggregatedResults, testResult) => {
+ // `todos` are new as of Jest 24, and not all runners return it.
+ // Set it to `0` to avoid `NaN`
+ if (!testResult.numTodoTests) {
+ testResult.numTodoTests = 0;
+ }
+
+ aggregatedResults.testResults.push(testResult);
+ aggregatedResults.numTotalTests +=
+ testResult.numPassingTests +
+ testResult.numFailingTests +
+ testResult.numPendingTests +
+ testResult.numTodoTests;
+ aggregatedResults.numFailedTests += testResult.numFailingTests;
+ aggregatedResults.numPassedTests += testResult.numPassingTests;
+ aggregatedResults.numPendingTests += testResult.numPendingTests;
+ aggregatedResults.numTodoTests += testResult.numTodoTests;
+
+ if (testResult.testExecError) {
+ aggregatedResults.numRuntimeErrorTestSuites++;
+ }
+
+ if (testResult.skipped) {
+ aggregatedResults.numPendingTestSuites++;
+ } else if (testResult.numFailingTests > 0 || testResult.testExecError) {
+ aggregatedResults.numFailedTestSuites++;
+ } else {
+ aggregatedResults.numPassedTestSuites++;
+ } // Snapshot data
+
+ if (testResult.snapshot.added) {
+ aggregatedResults.snapshot.filesAdded++;
+ }
+
+ if (testResult.snapshot.fileDeleted) {
+ aggregatedResults.snapshot.filesRemoved++;
+ }
+
+ if (testResult.snapshot.unmatched) {
+ aggregatedResults.snapshot.filesUnmatched++;
+ }
+
+ if (testResult.snapshot.updated) {
+ aggregatedResults.snapshot.filesUpdated++;
+ }
+
+ aggregatedResults.snapshot.added += testResult.snapshot.added;
+ aggregatedResults.snapshot.matched += testResult.snapshot.matched;
+ aggregatedResults.snapshot.unchecked += testResult.snapshot.unchecked;
+
+ if (
+ testResult.snapshot.uncheckedKeys &&
+ testResult.snapshot.uncheckedKeys.length > 0
+ ) {
+ aggregatedResults.snapshot.uncheckedKeysByFile.push({
+ filePath: testResult.testFilePath,
+ keys: testResult.snapshot.uncheckedKeys
+ });
+ }
+
+ aggregatedResults.snapshot.unmatched += testResult.snapshot.unmatched;
+ aggregatedResults.snapshot.updated += testResult.snapshot.updated;
+ aggregatedResults.snapshot.total +=
+ testResult.snapshot.added +
+ testResult.snapshot.matched +
+ testResult.snapshot.unmatched +
+ testResult.snapshot.updated;
+};
+
+exports.addResult = addResult;
+
+const createEmptyTestResult = () => ({
+ leaks: false,
+ // That's legacy code, just adding it as needed for typing
+ numFailingTests: 0,
+ numPassingTests: 0,
+ numPendingTests: 0,
+ numTodoTests: 0,
+ openHandles: [],
+ perfStats: {
+ end: 0,
+ runtime: 0,
+ slow: false,
+ start: 0
+ },
+ skipped: false,
+ snapshot: {
+ added: 0,
+ fileDeleted: false,
+ matched: 0,
+ unchecked: 0,
+ uncheckedKeys: [],
+ unmatched: 0,
+ updated: 0
+ },
+ testFilePath: '',
+ testResults: []
+});
+
+exports.createEmptyTestResult = createEmptyTestResult;
diff --git a/node_modules/@jest/test-result/build/index.d.ts b/node_modules/@jest/test-result/build/index.d.ts
new file mode 100644
index 0000000..d46d37b
--- /dev/null
+++ b/node_modules/@jest/test-result/build/index.d.ts
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+export { default as formatTestResults } from './formatTestResults';
+export { addResult, buildFailureTestResult, createEmptyTestResult, makeEmptyAggregatedTestResult, } from './helpers';
+export type { AggregatedResult, AssertionLocation, AssertionResult, FailedAssertion, FormattedTestResults, Milliseconds, RuntimeTransformResult, SerializableError, SnapshotSummary, Status, Suite, Test, TestEvents, TestFileEvent, TestResult, TestResultsProcessor, TestCaseResult, V8CoverageResult, } from './types';
diff --git a/node_modules/@jest/test-result/build/index.js b/node_modules/@jest/test-result/build/index.js
new file mode 100644
index 0000000..23920e2
--- /dev/null
+++ b/node_modules/@jest/test-result/build/index.js
@@ -0,0 +1,43 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+Object.defineProperty(exports, 'addResult', {
+ enumerable: true,
+ get: function () {
+ return _helpers.addResult;
+ }
+});
+Object.defineProperty(exports, 'buildFailureTestResult', {
+ enumerable: true,
+ get: function () {
+ return _helpers.buildFailureTestResult;
+ }
+});
+Object.defineProperty(exports, 'createEmptyTestResult', {
+ enumerable: true,
+ get: function () {
+ return _helpers.createEmptyTestResult;
+ }
+});
+Object.defineProperty(exports, 'formatTestResults', {
+ enumerable: true,
+ get: function () {
+ return _formatTestResults.default;
+ }
+});
+Object.defineProperty(exports, 'makeEmptyAggregatedTestResult', {
+ enumerable: true,
+ get: function () {
+ return _helpers.makeEmptyAggregatedTestResult;
+ }
+});
+
+var _formatTestResults = _interopRequireDefault(require('./formatTestResults'));
+
+var _helpers = require('./helpers');
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
diff --git a/node_modules/@jest/test-result/build/types.d.ts b/node_modules/@jest/test-result/build/types.d.ts
new file mode 100644
index 0000000..c06f477
--- /dev/null
+++ b/node_modules/@jest/test-result/build/types.d.ts
@@ -0,0 +1,171 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import type { V8Coverage } from 'collect-v8-coverage';
+import type { CoverageMap, CoverageMapData } from 'istanbul-lib-coverage';
+import type { ConsoleBuffer } from '@jest/console';
+import type { Config, TestResult, TransformTypes } from '@jest/types';
+import type { FS as HasteFS, ModuleMap } from 'jest-haste-map';
+import type Resolver from 'jest-resolve';
+export interface RuntimeTransformResult extends TransformTypes.TransformResult {
+ wrapperLength: number;
+}
+export declare type V8CoverageResult = Array<{
+ codeTransformResult: RuntimeTransformResult | undefined;
+ result: V8Coverage[number];
+}>;
+export declare type SerializableError = TestResult.SerializableError;
+export declare type FailedAssertion = {
+ matcherName?: string;
+ message?: string;
+ actual?: unknown;
+ pass?: boolean;
+ passed?: boolean;
+ expected?: unknown;
+ isNot?: boolean;
+ stack?: string;
+ error?: unknown;
+};
+export declare type AssertionLocation = {
+ fullName: string;
+ path: string;
+};
+export declare type Status = AssertionResult['status'];
+export declare type Bytes = number;
+export declare type Milliseconds = TestResult.Milliseconds;
+export declare type AssertionResult = TestResult.AssertionResult;
+export declare type FormattedAssertionResult = Pick<AssertionResult, 'ancestorTitles' | 'fullName' | 'location' | 'status' | 'title'> & {
+ failureMessages: AssertionResult['failureMessages'] | null;
+};
+export declare type AggregatedResultWithoutCoverage = {
+ numFailedTests: number;
+ numFailedTestSuites: number;
+ numPassedTests: number;
+ numPassedTestSuites: number;
+ numPendingTests: number;
+ numTodoTests: number;
+ numPendingTestSuites: number;
+ numRuntimeErrorTestSuites: number;
+ numTotalTests: number;
+ numTotalTestSuites: number;
+ openHandles: Array<Error>;
+ snapshot: SnapshotSummary;
+ startTime: number;
+ success: boolean;
+ testResults: Array<TestResult>;
+ wasInterrupted: boolean;
+};
+export declare type AggregatedResult = AggregatedResultWithoutCoverage & {
+ coverageMap?: CoverageMap | null;
+};
+export declare type TestResultsProcessor = (results: AggregatedResult) => AggregatedResult;
+export declare type Suite = {
+ title: string;
+ suites: Array<Suite>;
+ tests: Array<AssertionResult>;
+};
+export declare type TestCaseResult = AssertionResult;
+export declare type TestResult = {
+ console?: ConsoleBuffer;
+ coverage?: CoverageMapData;
+ displayName?: Config.DisplayName;
+ failureMessage?: string | null;
+ leaks: boolean;
+ memoryUsage?: Bytes;
+ numFailingTests: number;
+ numPassingTests: number;
+ numPendingTests: number;
+ numTodoTests: number;
+ openHandles: Array<Error>;
+ perfStats: {
+ end: Milliseconds;
+ runtime: Milliseconds;
+ slow: boolean;
+ start: Milliseconds;
+ };
+ skipped: boolean;
+ snapshot: {
+ added: number;
+ fileDeleted: boolean;
+ matched: number;
+ unchecked: number;
+ uncheckedKeys: Array<string>;
+ unmatched: number;
+ updated: number;
+ };
+ testExecError?: SerializableError;
+ testFilePath: Config.Path;
+ testResults: Array<AssertionResult>;
+ v8Coverage?: V8CoverageResult;
+};
+export declare type FormattedTestResult = {
+ message: string;
+ name: string;
+ summary: string;
+ status: 'failed' | 'passed';
+ startTime: number;
+ endTime: number;
+ coverage: unknown;
+ assertionResults: Array<FormattedAssertionResult>;
+};
+export declare type FormattedTestResults = {
+ coverageMap?: CoverageMap | null | undefined;
+ numFailedTests: number;
+ numFailedTestSuites: number;
+ numPassedTests: number;
+ numPassedTestSuites: number;
+ numPendingTests: number;
+ numPendingTestSuites: number;
+ numRuntimeErrorTestSuites: number;
+ numTotalTests: number;
+ numTotalTestSuites: number;
+ snapshot: SnapshotSummary;
+ startTime: number;
+ success: boolean;
+ testResults: Array<FormattedTestResult>;
+ wasInterrupted: boolean;
+};
+export declare type CodeCoverageReporter = unknown;
+export declare type CodeCoverageFormatter = (coverage: CoverageMapData | null | undefined, reporter: CodeCoverageReporter) => Record<string, unknown> | null | undefined;
+export declare type UncheckedSnapshot = {
+ filePath: string;
+ keys: Array<string>;
+};
+export declare type SnapshotSummary = {
+ added: number;
+ didUpdate: boolean;
+ failure: boolean;
+ filesAdded: number;
+ filesRemoved: number;
+ filesRemovedList: Array<string>;
+ filesUnmatched: number;
+ filesUpdated: number;
+ matched: number;
+ total: number;
+ unchecked: number;
+ uncheckedKeysByFile: Array<UncheckedSnapshot>;
+ unmatched: number;
+ updated: number;
+};
+export declare type Test = {
+ context: Context;
+ duration?: number;
+ path: Config.Path;
+};
+declare type Context = {
+ config: Config.ProjectConfig;
+ hasteFS: HasteFS;
+ moduleMap: ModuleMap;
+ resolver: Resolver;
+};
+export declare type TestEvents = {
+ 'test-file-start': [Test];
+ 'test-file-success': [Test, TestResult];
+ 'test-file-failure': [Test, SerializableError];
+ 'test-case-result': [Config.Path, AssertionResult];
+};
+export declare type TestFileEvent<T extends keyof TestEvents = keyof TestEvents> = (eventName: T, args: TestEvents[T]) => unknown;
+export {};
diff --git a/node_modules/@jest/test-result/build/types.js b/node_modules/@jest/test-result/build/types.js
new file mode 100644
index 0000000..ad9a93a
--- /dev/null
+++ b/node_modules/@jest/test-result/build/types.js
@@ -0,0 +1 @@
+'use strict';
diff --git a/node_modules/@jest/test-result/package.json b/node_modules/@jest/test-result/package.json
new file mode 100644
index 0000000..bf36bbf
--- /dev/null
+++ b/node_modules/@jest/test-result/package.json
@@ -0,0 +1,32 @@
+{
+ "name": "@jest/test-result",
+ "version": "27.5.1",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/facebook/jest.git",
+ "directory": "packages/jest-test-result"
+ },
+ "license": "MIT",
+ "main": "./build/index.js",
+ "types": "./build/index.d.ts",
+ "exports": {
+ ".": {
+ "types": "./build/index.d.ts",
+ "default": "./build/index.js"
+ },
+ "./package.json": "./package.json"
+ },
+ "dependencies": {
+ "@jest/console": "^27.5.1",
+ "@jest/types": "^27.5.1",
+ "@types/istanbul-lib-coverage": "^2.0.0",
+ "collect-v8-coverage": "^1.0.0"
+ },
+ "engines": {
+ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ },
+ "publishConfig": {
+ "access": "public"
+ },
+ "gitHead": "67c1aa20c5fec31366d733e901fee2b981cb1850"
+}
diff --git a/node_modules/@jest/test-sequencer/LICENSE b/node_modules/@jest/test-sequencer/LICENSE
new file mode 100644
index 0000000..b96dcb0
--- /dev/null
+++ b/node_modules/@jest/test-sequencer/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) Facebook, Inc. and its affiliates.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/node_modules/@jest/test-sequencer/build/index.d.ts b/node_modules/@jest/test-sequencer/build/index.d.ts
new file mode 100644
index 0000000..7b48a2b
--- /dev/null
+++ b/node_modules/@jest/test-sequencer/build/index.d.ts
@@ -0,0 +1,51 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import type { AggregatedResult, Test } from '@jest/test-result';
+import type { Context } from 'jest-runtime';
+declare type Cache = {
+ [key: string]: [0 | 1, number];
+};
+/**
+ * The TestSequencer will ultimately decide which tests should run first.
+ * It is responsible for storing and reading from a local cache
+ * map that stores context information for a given test, such as how long it
+ * took to run during the last run and if it has failed or not.
+ * Such information is used on:
+ * TestSequencer.sort(tests: Array<Test>)
+ * to sort the order of the provided tests.
+ *
+ * After the results are collected,
+ * TestSequencer.cacheResults(tests: Array<Test>, results: AggregatedResult)
+ * is called to store/update this information on the cache map.
+ */
+export default class TestSequencer {
+ private _cache;
+ _getCachePath(context: Context): string;
+ _getCache(test: Test): Cache;
+ /**
+ * Sorting tests is very important because it has a great impact on the
+ * user-perceived responsiveness and speed of the test run.
+ *
+ * If such information is on cache, tests are sorted based on:
+ * -> Has it failed during the last run ?
+ * Since it's important to provide the most expected feedback as quickly
+ * as possible.
+ * -> How long it took to run ?
+ * Because running long tests first is an effort to minimize worker idle
+ * time at the end of a long test run.
+ * And if that information is not available they are sorted based on file size
+ * since big test files usually take longer to complete.
+ *
+ * Note that a possible improvement would be to analyse other information
+ * from the file other than its size.
+ *
+ */
+ sort(tests: Array<Test>): Array<Test>;
+ allFailedTests(tests: Array<Test>): Array<Test>;
+ cacheResults(tests: Array<Test>, results: AggregatedResult): void;
+}
+export {};
diff --git a/node_modules/@jest/test-sequencer/build/index.js b/node_modules/@jest/test-sequencer/build/index.js
new file mode 100644
index 0000000..29fd68c
--- /dev/null
+++ b/node_modules/@jest/test-sequencer/build/index.js
@@ -0,0 +1,237 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+
+function fs() {
+ const data = _interopRequireWildcard(require('graceful-fs'));
+
+ fs = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestHasteMap() {
+ const data = _interopRequireDefault(require('jest-haste-map'));
+
+ _jestHasteMap = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+function _getRequireWildcardCache(nodeInterop) {
+ if (typeof WeakMap !== 'function') return null;
+ var cacheBabelInterop = new WeakMap();
+ var cacheNodeInterop = new WeakMap();
+ return (_getRequireWildcardCache = function (nodeInterop) {
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
+ })(nodeInterop);
+}
+
+function _interopRequireWildcard(obj, nodeInterop) {
+ if (!nodeInterop && obj && obj.__esModule) {
+ return obj;
+ }
+ if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) {
+ return {default: obj};
+ }
+ var cache = _getRequireWildcardCache(nodeInterop);
+ if (cache && cache.has(obj)) {
+ return cache.get(obj);
+ }
+ var newObj = {};
+ var hasPropertyDescriptor =
+ Object.defineProperty && Object.getOwnPropertyDescriptor;
+ for (var key in obj) {
+ if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) {
+ var desc = hasPropertyDescriptor
+ ? Object.getOwnPropertyDescriptor(obj, key)
+ : null;
+ if (desc && (desc.get || desc.set)) {
+ Object.defineProperty(newObj, key, desc);
+ } else {
+ newObj[key] = obj[key];
+ }
+ }
+ }
+ newObj.default = obj;
+ if (cache) {
+ cache.set(obj, newObj);
+ }
+ return newObj;
+}
+
+function _defineProperty(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+}
+
+const FAIL = 0;
+const SUCCESS = 1;
+
+/**
+ * The TestSequencer will ultimately decide which tests should run first.
+ * It is responsible for storing and reading from a local cache
+ * map that stores context information for a given test, such as how long it
+ * took to run during the last run and if it has failed or not.
+ * Such information is used on:
+ * TestSequencer.sort(tests: Array<Test>)
+ * to sort the order of the provided tests.
+ *
+ * After the results are collected,
+ * TestSequencer.cacheResults(tests: Array<Test>, results: AggregatedResult)
+ * is called to store/update this information on the cache map.
+ */
+class TestSequencer {
+ constructor() {
+ _defineProperty(this, '_cache', new Map());
+ }
+
+ _getCachePath(context) {
+ const {config} = context;
+
+ const HasteMapClass = _jestHasteMap().default.getStatic(config);
+
+ return HasteMapClass.getCacheFilePath(
+ config.cacheDirectory,
+ 'perf-cache-' + config.name
+ );
+ }
+
+ _getCache(test) {
+ const {context} = test;
+
+ if (!this._cache.has(context) && context.config.cache) {
+ const cachePath = this._getCachePath(context);
+
+ if (fs().existsSync(cachePath)) {
+ try {
+ this._cache.set(
+ context,
+ JSON.parse(fs().readFileSync(cachePath, 'utf8'))
+ );
+ } catch {}
+ }
+ }
+
+ let cache = this._cache.get(context);
+
+ if (!cache) {
+ cache = {};
+
+ this._cache.set(context, cache);
+ }
+
+ return cache;
+ }
+ /**
+ * Sorting tests is very important because it has a great impact on the
+ * user-perceived responsiveness and speed of the test run.
+ *
+ * If such information is on cache, tests are sorted based on:
+ * -> Has it failed during the last run ?
+ * Since it's important to provide the most expected feedback as quickly
+ * as possible.
+ * -> How long it took to run ?
+ * Because running long tests first is an effort to minimize worker idle
+ * time at the end of a long test run.
+ * And if that information is not available they are sorted based on file size
+ * since big test files usually take longer to complete.
+ *
+ * Note that a possible improvement would be to analyse other information
+ * from the file other than its size.
+ *
+ */
+
+ sort(tests) {
+ const stats = {};
+
+ const fileSize = ({path, context: {hasteFS}}) =>
+ stats[path] || (stats[path] = hasteFS.getSize(path) || 0);
+
+ const hasFailed = (cache, test) =>
+ cache[test.path] && cache[test.path][0] === FAIL;
+
+ const time = (cache, test) => cache[test.path] && cache[test.path][1];
+
+ tests.forEach(test => (test.duration = time(this._getCache(test), test)));
+ return tests.sort((testA, testB) => {
+ const cacheA = this._getCache(testA);
+
+ const cacheB = this._getCache(testB);
+
+ const failedA = hasFailed(cacheA, testA);
+ const failedB = hasFailed(cacheB, testB);
+ const hasTimeA = testA.duration != null;
+
+ if (failedA !== failedB) {
+ return failedA ? -1 : 1;
+ } else if (hasTimeA != (testB.duration != null)) {
+ // If only one of two tests has timing information, run it last
+ return hasTimeA ? 1 : -1;
+ } else if (testA.duration != null && testB.duration != null) {
+ return testA.duration < testB.duration ? 1 : -1;
+ } else {
+ return fileSize(testA) < fileSize(testB) ? 1 : -1;
+ }
+ });
+ }
+
+ allFailedTests(tests) {
+ const hasFailed = (cache, test) => {
+ var _cache$test$path;
+
+ return (
+ ((_cache$test$path = cache[test.path]) === null ||
+ _cache$test$path === void 0
+ ? void 0
+ : _cache$test$path[0]) === FAIL
+ );
+ };
+
+ return this.sort(
+ tests.filter(test => hasFailed(this._getCache(test), test))
+ );
+ }
+
+ cacheResults(tests, results) {
+ const map = Object.create(null);
+ tests.forEach(test => (map[test.path] = test));
+ results.testResults.forEach(testResult => {
+ if (testResult && map[testResult.testFilePath] && !testResult.skipped) {
+ const cache = this._getCache(map[testResult.testFilePath]);
+
+ const perf = testResult.perfStats;
+ cache[testResult.testFilePath] = [
+ testResult.numFailingTests ? FAIL : SUCCESS,
+ perf.runtime || 0
+ ];
+ }
+ });
+
+ this._cache.forEach((cache, context) =>
+ fs().writeFileSync(this._getCachePath(context), JSON.stringify(cache))
+ );
+ }
+}
+
+exports.default = TestSequencer;
diff --git a/node_modules/@jest/test-sequencer/package.json b/node_modules/@jest/test-sequencer/package.json
new file mode 100644
index 0000000..f4eb2c3
--- /dev/null
+++ b/node_modules/@jest/test-sequencer/package.json
@@ -0,0 +1,35 @@
+{
+ "name": "@jest/test-sequencer",
+ "version": "27.5.1",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/facebook/jest.git",
+ "directory": "packages/jest-test-sequencer"
+ },
+ "license": "MIT",
+ "main": "./build/index.js",
+ "types": "./build/index.d.ts",
+ "exports": {
+ ".": {
+ "types": "./build/index.d.ts",
+ "default": "./build/index.js"
+ },
+ "./package.json": "./package.json"
+ },
+ "dependencies": {
+ "@jest/test-result": "^27.5.1",
+ "graceful-fs": "^4.2.9",
+ "jest-haste-map": "^27.5.1",
+ "jest-runtime": "^27.5.1"
+ },
+ "devDependencies": {
+ "@types/graceful-fs": "^4.1.3"
+ },
+ "engines": {
+ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ },
+ "publishConfig": {
+ "access": "public"
+ },
+ "gitHead": "67c1aa20c5fec31366d733e901fee2b981cb1850"
+}
diff --git a/node_modules/@jest/transform/LICENSE b/node_modules/@jest/transform/LICENSE
new file mode 100644
index 0000000..b96dcb0
--- /dev/null
+++ b/node_modules/@jest/transform/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) Facebook, Inc. and its affiliates.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/node_modules/@jest/transform/build/ScriptTransformer.d.ts b/node_modules/@jest/transform/build/ScriptTransformer.d.ts
new file mode 100644
index 0000000..a36c7c7
--- /dev/null
+++ b/node_modules/@jest/transform/build/ScriptTransformer.d.ts
@@ -0,0 +1,40 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import type { Config } from '@jest/types';
+import type { Options, ReducedTransformOptions, RequireAndTranspileModuleOptions, StringMap, TransformResult } from './types';
+declare class ScriptTransformer {
+ private readonly _config;
+ private readonly _cacheFS;
+ private readonly _cache;
+ private readonly _transformCache;
+ private _transformsAreLoaded;
+ constructor(_config: Config.ProjectConfig, _cacheFS: StringMap);
+ private _buildCacheKeyFromFileInfo;
+ private _getCacheKey;
+ private _getCacheKeyAsync;
+ private _createFolderFromCacheKey;
+ private _getFileCachePath;
+ private _getFileCachePathAsync;
+ private _getTransformPath;
+ loadTransformers(): Promise<void>;
+ private _getTransformer;
+ private _instrumentFile;
+ private _buildTransformResult;
+ transformSource(filepath: Config.Path, content: string, options: ReducedTransformOptions): TransformResult;
+ transformSourceAsync(filepath: Config.Path, content: string, options: ReducedTransformOptions): Promise<TransformResult>;
+ private _transformAndBuildScriptAsync;
+ private _transformAndBuildScript;
+ transformAsync(filename: Config.Path, options: Options, fileSource?: string): Promise<TransformResult>;
+ transform(filename: Config.Path, options: Options, fileSource?: string): TransformResult;
+ transformJson(filename: Config.Path, options: Options, fileSource: string): string;
+ requireAndTranspileModule<ModuleType = unknown>(moduleName: string, callback?: (module: ModuleType) => void | Promise<void>, options?: RequireAndTranspileModuleOptions): Promise<ModuleType>;
+ shouldTransform(filename: Config.Path): boolean;
+}
+export declare function createTranspilingRequire(config: Config.ProjectConfig): Promise<(<TModuleType = unknown>(resolverPath: string, applyInteropRequireDefault?: boolean) => Promise<TModuleType>)>;
+export declare type TransformerType = ScriptTransformer;
+export declare function createScriptTransformer(config: Config.ProjectConfig, cacheFS?: StringMap): Promise<TransformerType>;
+export {};
diff --git a/node_modules/@jest/transform/build/ScriptTransformer.js b/node_modules/@jest/transform/build/ScriptTransformer.js
new file mode 100644
index 0000000..edc7f2c
--- /dev/null
+++ b/node_modules/@jest/transform/build/ScriptTransformer.js
@@ -0,0 +1,1115 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.createScriptTransformer = createScriptTransformer;
+exports.createTranspilingRequire = createTranspilingRequire;
+
+function _crypto() {
+ const data = require('crypto');
+
+ _crypto = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function path() {
+ const data = _interopRequireWildcard(require('path'));
+
+ path = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _core() {
+ const data = require('@babel/core');
+
+ _core = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _babelPluginIstanbul() {
+ const data = _interopRequireDefault(require('babel-plugin-istanbul'));
+
+ _babelPluginIstanbul = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _convertSourceMap() {
+ const data = require('convert-source-map');
+
+ _convertSourceMap = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _fastJsonStableStringify() {
+ const data = _interopRequireDefault(require('fast-json-stable-stringify'));
+
+ _fastJsonStableStringify = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function fs() {
+ const data = _interopRequireWildcard(require('graceful-fs'));
+
+ fs = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _pirates() {
+ const data = require('pirates');
+
+ _pirates = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _slash() {
+ const data = _interopRequireDefault(require('slash'));
+
+ _slash = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _writeFileAtomic() {
+ const data = require('write-file-atomic');
+
+ _writeFileAtomic = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestHasteMap() {
+ const data = _interopRequireDefault(require('jest-haste-map'));
+
+ _jestHasteMap = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestUtil() {
+ const data = require('jest-util');
+
+ _jestUtil = function () {
+ return data;
+ };
+
+ return data;
+}
+
+var _enhanceUnexpectedTokenMessage = _interopRequireDefault(
+ require('./enhanceUnexpectedTokenMessage')
+);
+
+var _runtimeErrorsAndWarnings = require('./runtimeErrorsAndWarnings');
+
+var _shouldInstrument = _interopRequireDefault(require('./shouldInstrument'));
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+function _getRequireWildcardCache(nodeInterop) {
+ if (typeof WeakMap !== 'function') return null;
+ var cacheBabelInterop = new WeakMap();
+ var cacheNodeInterop = new WeakMap();
+ return (_getRequireWildcardCache = function (nodeInterop) {
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
+ })(nodeInterop);
+}
+
+function _interopRequireWildcard(obj, nodeInterop) {
+ if (!nodeInterop && obj && obj.__esModule) {
+ return obj;
+ }
+ if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) {
+ return {default: obj};
+ }
+ var cache = _getRequireWildcardCache(nodeInterop);
+ if (cache && cache.has(obj)) {
+ return cache.get(obj);
+ }
+ var newObj = {};
+ var hasPropertyDescriptor =
+ Object.defineProperty && Object.getOwnPropertyDescriptor;
+ for (var key in obj) {
+ if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) {
+ var desc = hasPropertyDescriptor
+ ? Object.getOwnPropertyDescriptor(obj, key)
+ : null;
+ if (desc && (desc.get || desc.set)) {
+ Object.defineProperty(newObj, key, desc);
+ } else {
+ newObj[key] = obj[key];
+ }
+ }
+ }
+ newObj.default = obj;
+ if (cache) {
+ cache.set(obj, newObj);
+ }
+ return newObj;
+}
+
+function _defineProperty(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+}
+
+// Use `require` to avoid TS rootDir
+const {version: VERSION} = require('../package.json');
+
+// This data structure is used to avoid recalculating some data every time that
+// we need to transform a file. Since ScriptTransformer is instantiated for each
+// file we need to keep this object in the local scope of this module.
+const projectCaches = new Map(); // To reset the cache for specific changesets (rather than package version).
+
+const CACHE_VERSION = '1';
+
+async function waitForPromiseWithCleanup(promise, cleanup) {
+ try {
+ await promise;
+ } finally {
+ cleanup();
+ }
+}
+
+class ScriptTransformer {
+ constructor(_config, _cacheFS) {
+ _defineProperty(this, '_cache', void 0);
+
+ _defineProperty(this, '_transformCache', new Map());
+
+ _defineProperty(this, '_transformsAreLoaded', false);
+
+ this._config = _config;
+ this._cacheFS = _cacheFS;
+ const configString = (0, _fastJsonStableStringify().default)(this._config);
+ let projectCache = projectCaches.get(configString);
+
+ if (!projectCache) {
+ projectCache = {
+ configString,
+ ignorePatternsRegExp: calcIgnorePatternRegExp(this._config),
+ transformRegExp: calcTransformRegExp(this._config),
+ transformedFiles: new Map()
+ };
+ projectCaches.set(configString, projectCache);
+ }
+
+ this._cache = projectCache;
+ }
+
+ _buildCacheKeyFromFileInfo(
+ fileData,
+ filename,
+ transformOptions,
+ transformerCacheKey
+ ) {
+ if (transformerCacheKey) {
+ return (0, _crypto().createHash)('md5')
+ .update(transformerCacheKey)
+ .update(CACHE_VERSION)
+ .digest('hex');
+ }
+
+ return (0, _crypto().createHash)('md5')
+ .update(fileData)
+ .update(transformOptions.configString)
+ .update(transformOptions.instrument ? 'instrument' : '')
+ .update(filename)
+ .update(CACHE_VERSION)
+ .digest('hex');
+ }
+
+ _getCacheKey(fileData, filename, options) {
+ const configString = this._cache.configString;
+ const {transformer, transformerConfig = {}} =
+ this._getTransformer(filename) || {};
+ let transformerCacheKey = undefined;
+ const transformOptions = {
+ ...options,
+ cacheFS: this._cacheFS,
+ config: this._config,
+ configString,
+ transformerConfig
+ };
+
+ if (
+ typeof (transformer === null || transformer === void 0
+ ? void 0
+ : transformer.getCacheKey) === 'function'
+ ) {
+ transformerCacheKey = transformer.getCacheKey(
+ fileData,
+ filename,
+ transformOptions
+ );
+ }
+
+ return this._buildCacheKeyFromFileInfo(
+ fileData,
+ filename,
+ transformOptions,
+ transformerCacheKey
+ );
+ }
+
+ async _getCacheKeyAsync(fileData, filename, options) {
+ const configString = this._cache.configString;
+ const {transformer, transformerConfig = {}} =
+ this._getTransformer(filename) || {};
+ let transformerCacheKey = undefined;
+ const transformOptions = {
+ ...options,
+ cacheFS: this._cacheFS,
+ config: this._config,
+ configString,
+ transformerConfig
+ };
+
+ if (transformer) {
+ const getCacheKey =
+ transformer.getCacheKeyAsync || transformer.getCacheKey;
+
+ if (typeof getCacheKey === 'function') {
+ transformerCacheKey = await getCacheKey(
+ fileData,
+ filename,
+ transformOptions
+ );
+ }
+ }
+
+ return this._buildCacheKeyFromFileInfo(
+ fileData,
+ filename,
+ transformOptions,
+ transformerCacheKey
+ );
+ }
+
+ _createFolderFromCacheKey(filename, cacheKey) {
+ const HasteMapClass = _jestHasteMap().default.getStatic(this._config);
+
+ const baseCacheDir = HasteMapClass.getCacheFilePath(
+ this._config.cacheDirectory,
+ 'jest-transform-cache-' + this._config.name,
+ VERSION
+ ); // Create sub folders based on the cacheKey to avoid creating one
+ // directory with many files.
+
+ const cacheDir = path().join(baseCacheDir, cacheKey[0] + cacheKey[1]);
+ const cacheFilenamePrefix = path()
+ .basename(filename, path().extname(filename))
+ .replace(/\W/g, '');
+ const cachePath = (0, _slash().default)(
+ path().join(cacheDir, cacheFilenamePrefix + '_' + cacheKey)
+ );
+ (0, _jestUtil().createDirectory)(cacheDir);
+ return cachePath;
+ }
+
+ _getFileCachePath(filename, content, options) {
+ const cacheKey = this._getCacheKey(content, filename, options);
+
+ return this._createFolderFromCacheKey(filename, cacheKey);
+ }
+
+ async _getFileCachePathAsync(filename, content, options) {
+ const cacheKey = await this._getCacheKeyAsync(content, filename, options);
+ return this._createFolderFromCacheKey(filename, cacheKey);
+ }
+
+ _getTransformPath(filename) {
+ const transformRegExp = this._cache.transformRegExp;
+
+ if (!transformRegExp) {
+ return undefined;
+ }
+
+ for (let i = 0; i < transformRegExp.length; i++) {
+ if (transformRegExp[i][0].test(filename)) {
+ return transformRegExp[i][1];
+ }
+ }
+
+ return undefined;
+ }
+
+ async loadTransformers() {
+ await Promise.all(
+ this._config.transform.map(
+ async ([, transformPath, transformerConfig]) => {
+ let transformer = await (0, _jestUtil().requireOrImportModule)(
+ transformPath
+ );
+
+ if (!transformer) {
+ throw new Error(
+ (0, _runtimeErrorsAndWarnings.makeInvalidTransformerError)(
+ transformPath
+ )
+ );
+ }
+
+ if (typeof transformer.createTransformer === 'function') {
+ transformer = transformer.createTransformer(transformerConfig);
+ }
+
+ if (
+ typeof transformer.process !== 'function' &&
+ typeof transformer.processAsync !== 'function'
+ ) {
+ throw new Error(
+ (0, _runtimeErrorsAndWarnings.makeInvalidTransformerError)(
+ transformPath
+ )
+ );
+ }
+
+ const res = {
+ transformer,
+ transformerConfig
+ };
+
+ this._transformCache.set(transformPath, res);
+ }
+ )
+ );
+ this._transformsAreLoaded = true;
+ }
+
+ _getTransformer(filename) {
+ if (!this._transformsAreLoaded) {
+ throw new Error(
+ 'Jest: Transformers have not been loaded yet - make sure to run `loadTransformers` and wait for it to complete before starting to transform files'
+ );
+ }
+
+ if (this._config.transform.length === 0) {
+ return null;
+ }
+
+ const transformPath = this._getTransformPath(filename);
+
+ if (!transformPath) {
+ return null;
+ }
+
+ const cached = this._transformCache.get(transformPath);
+
+ if (cached) {
+ return cached;
+ }
+
+ throw new Error(
+ `Jest was unable to load the transformer defined for ${filename}. This is a bug in Jest, please open up an issue`
+ );
+ }
+
+ _instrumentFile(filename, input, canMapToInput, options) {
+ const inputCode = typeof input === 'string' ? input : input.code;
+ const inputMap = typeof input === 'string' ? null : input.map;
+ const result = (0, _core().transformSync)(inputCode, {
+ auxiliaryCommentBefore: ' istanbul ignore next ',
+ babelrc: false,
+ caller: {
+ name: '@jest/transform',
+ supportsDynamicImport: options.supportsDynamicImport,
+ supportsExportNamespaceFrom: options.supportsExportNamespaceFrom,
+ supportsStaticESM: options.supportsStaticESM,
+ supportsTopLevelAwait: options.supportsTopLevelAwait
+ },
+ configFile: false,
+ filename,
+ plugins: [
+ [
+ _babelPluginIstanbul().default,
+ {
+ compact: false,
+ // files outside `cwd` will not be instrumented
+ cwd: this._config.rootDir,
+ exclude: [],
+ extension: false,
+ inputSourceMap: inputMap,
+ useInlineSourceMaps: false
+ }
+ ]
+ ],
+ sourceMaps: canMapToInput ? 'both' : false
+ });
+
+ if (result && result.code) {
+ return result;
+ }
+
+ return input;
+ }
+
+ _buildTransformResult(
+ filename,
+ cacheFilePath,
+ content,
+ transformer,
+ shouldCallTransform,
+ options,
+ processed,
+ sourceMapPath
+ ) {
+ let transformed = {
+ code: content,
+ map: null
+ };
+
+ if (transformer && shouldCallTransform) {
+ if (typeof processed === 'string') {
+ transformed.code = processed;
+ } else if (processed != null && typeof processed.code === 'string') {
+ transformed = processed;
+ } else {
+ throw new Error(
+ (0, _runtimeErrorsAndWarnings.makeInvalidReturnValueError)()
+ );
+ }
+ }
+
+ if (!transformed.map) {
+ try {
+ //Could be a potential freeze here.
+ //See: https://github.com/facebook/jest/pull/5177#discussion_r158883570
+ const inlineSourceMap = (0, _convertSourceMap().fromSource)(
+ transformed.code
+ );
+
+ if (inlineSourceMap) {
+ transformed.map = inlineSourceMap.toObject();
+ }
+ } catch {
+ const transformPath = this._getTransformPath(filename);
+
+ invariant(transformPath);
+ console.warn(
+ (0, _runtimeErrorsAndWarnings.makeInvalidSourceMapWarning)(
+ filename,
+ transformPath
+ )
+ );
+ }
+ } // That means that the transform has a custom instrumentation
+ // logic and will handle it based on `config.collectCoverage` option
+
+ const transformWillInstrument =
+ shouldCallTransform && transformer && transformer.canInstrument; // Apply instrumentation to the code if necessary, keeping the instrumented code and new map
+
+ let map = transformed.map;
+ let code;
+
+ if (!transformWillInstrument && options.instrument) {
+ /**
+ * We can map the original source code to the instrumented code ONLY if
+ * - the process of transforming the code produced a source map e.g. ts-jest
+ * - we did not transform the source code
+ *
+ * Otherwise we cannot make any statements about how the instrumented code corresponds to the original code,
+ * and we should NOT emit any source maps
+ *
+ */
+ const shouldEmitSourceMaps =
+ (transformer != null && map != null) || transformer == null;
+
+ const instrumented = this._instrumentFile(
+ filename,
+ transformed,
+ shouldEmitSourceMaps,
+ options
+ );
+
+ code =
+ typeof instrumented === 'string' ? instrumented : instrumented.code;
+ map = typeof instrumented === 'string' ? null : instrumented.map;
+ } else {
+ code = transformed.code;
+ }
+
+ if (map) {
+ const sourceMapContent =
+ typeof map === 'string' ? map : JSON.stringify(map);
+ invariant(sourceMapPath, 'We should always have default sourceMapPath');
+ writeCacheFile(sourceMapPath, sourceMapContent);
+ } else {
+ sourceMapPath = null;
+ }
+
+ writeCodeCacheFile(cacheFilePath, code);
+ return {
+ code,
+ originalCode: content,
+ sourceMapPath
+ };
+ }
+
+ transformSource(filepath, content, options) {
+ const filename = (0, _jestUtil().tryRealpath)(filepath);
+ const {transformer, transformerConfig = {}} =
+ this._getTransformer(filename) || {};
+
+ const cacheFilePath = this._getFileCachePath(filename, content, options);
+
+ const sourceMapPath = cacheFilePath + '.map'; // Ignore cache if `config.cache` is set (--no-cache)
+
+ const code = this._config.cache ? readCodeCacheFile(cacheFilePath) : null;
+
+ if (code) {
+ // This is broken: we return the code, and a path for the source map
+ // directly from the cache. But, nothing ensures the source map actually
+ // matches that source code. They could have gotten out-of-sync in case
+ // two separate processes write concurrently to the same cache files.
+ return {
+ code,
+ originalCode: content,
+ sourceMapPath
+ };
+ }
+
+ let processed = null;
+ let shouldCallTransform = false;
+
+ if (transformer && this.shouldTransform(filename)) {
+ shouldCallTransform = true;
+ assertSyncTransformer(transformer, this._getTransformPath(filename));
+ processed = transformer.process(content, filename, {
+ ...options,
+ cacheFS: this._cacheFS,
+ config: this._config,
+ configString: this._cache.configString,
+ transformerConfig
+ });
+ }
+
+ return this._buildTransformResult(
+ filename,
+ cacheFilePath,
+ content,
+ transformer,
+ shouldCallTransform,
+ options,
+ processed,
+ sourceMapPath
+ );
+ }
+
+ async transformSourceAsync(filepath, content, options) {
+ const filename = (0, _jestUtil().tryRealpath)(filepath);
+ const {transformer, transformerConfig = {}} =
+ this._getTransformer(filename) || {};
+ const cacheFilePath = await this._getFileCachePathAsync(
+ filename,
+ content,
+ options
+ );
+ const sourceMapPath = cacheFilePath + '.map'; // Ignore cache if `config.cache` is set (--no-cache)
+
+ const code = this._config.cache ? readCodeCacheFile(cacheFilePath) : null;
+
+ if (code) {
+ // This is broken: we return the code, and a path for the source map
+ // directly from the cache. But, nothing ensures the source map actually
+ // matches that source code. They could have gotten out-of-sync in case
+ // two separate processes write concurrently to the same cache files.
+ return {
+ code,
+ originalCode: content,
+ sourceMapPath
+ };
+ }
+
+ let processed = null;
+ let shouldCallTransform = false;
+
+ if (transformer && this.shouldTransform(filename)) {
+ shouldCallTransform = true;
+ const process = transformer.processAsync || transformer.process; // This is probably dead code since `_getTransformerAsync` already asserts this
+
+ invariant(
+ typeof process === 'function',
+ 'A transformer must always export either a `process` or `processAsync`'
+ );
+ processed = await process(content, filename, {
+ ...options,
+ cacheFS: this._cacheFS,
+ config: this._config,
+ configString: this._cache.configString,
+ transformerConfig
+ });
+ }
+
+ return this._buildTransformResult(
+ filename,
+ cacheFilePath,
+ content,
+ transformer,
+ shouldCallTransform,
+ options,
+ processed,
+ sourceMapPath
+ );
+ }
+
+ async _transformAndBuildScriptAsync(
+ filename,
+ options,
+ transformOptions,
+ fileSource
+ ) {
+ const {isInternalModule} = options;
+ let fileContent =
+ fileSource !== null && fileSource !== void 0
+ ? fileSource
+ : this._cacheFS.get(filename);
+
+ if (!fileContent) {
+ fileContent = fs().readFileSync(filename, 'utf8');
+
+ this._cacheFS.set(filename, fileContent);
+ }
+
+ const content = stripShebang(fileContent);
+ let code = content;
+ let sourceMapPath = null;
+ const willTransform =
+ !isInternalModule &&
+ (transformOptions.instrument || this.shouldTransform(filename));
+
+ try {
+ if (willTransform) {
+ const transformedSource = await this.transformSourceAsync(
+ filename,
+ content,
+ transformOptions
+ );
+ code = transformedSource.code;
+ sourceMapPath = transformedSource.sourceMapPath;
+ }
+
+ return {
+ code,
+ originalCode: content,
+ sourceMapPath
+ };
+ } catch (e) {
+ throw (0, _enhanceUnexpectedTokenMessage.default)(e);
+ }
+ }
+
+ _transformAndBuildScript(filename, options, transformOptions, fileSource) {
+ const {isInternalModule} = options;
+ let fileContent =
+ fileSource !== null && fileSource !== void 0
+ ? fileSource
+ : this._cacheFS.get(filename);
+
+ if (!fileContent) {
+ fileContent = fs().readFileSync(filename, 'utf8');
+
+ this._cacheFS.set(filename, fileContent);
+ }
+
+ const content = stripShebang(fileContent);
+ let code = content;
+ let sourceMapPath = null;
+ const willTransform =
+ !isInternalModule &&
+ (transformOptions.instrument || this.shouldTransform(filename));
+
+ try {
+ if (willTransform) {
+ const transformedSource = this.transformSource(
+ filename,
+ content,
+ transformOptions
+ );
+ code = transformedSource.code;
+ sourceMapPath = transformedSource.sourceMapPath;
+ }
+
+ return {
+ code,
+ originalCode: content,
+ sourceMapPath
+ };
+ } catch (e) {
+ throw (0, _enhanceUnexpectedTokenMessage.default)(e);
+ }
+ }
+
+ async transformAsync(filename, options, fileSource) {
+ const instrument =
+ options.coverageProvider === 'babel' &&
+ (0, _shouldInstrument.default)(filename, options, this._config);
+ const scriptCacheKey = getScriptCacheKey(filename, instrument);
+
+ let result = this._cache.transformedFiles.get(scriptCacheKey);
+
+ if (result) {
+ return result;
+ }
+
+ result = await this._transformAndBuildScriptAsync(
+ filename,
+ options,
+ {...options, instrument},
+ fileSource
+ );
+
+ if (scriptCacheKey) {
+ this._cache.transformedFiles.set(scriptCacheKey, result);
+ }
+
+ return result;
+ }
+
+ transform(filename, options, fileSource) {
+ const instrument =
+ options.coverageProvider === 'babel' &&
+ (0, _shouldInstrument.default)(filename, options, this._config);
+ const scriptCacheKey = getScriptCacheKey(filename, instrument);
+
+ let result = this._cache.transformedFiles.get(scriptCacheKey);
+
+ if (result) {
+ return result;
+ }
+
+ result = this._transformAndBuildScript(
+ filename,
+ options,
+ {...options, instrument},
+ fileSource
+ );
+
+ if (scriptCacheKey) {
+ this._cache.transformedFiles.set(scriptCacheKey, result);
+ }
+
+ return result;
+ }
+
+ transformJson(filename, options, fileSource) {
+ const {isInternalModule} = options;
+ const willTransform = !isInternalModule && this.shouldTransform(filename);
+
+ if (willTransform) {
+ const {code: transformedJsonSource} = this.transformSource(
+ filename,
+ fileSource,
+ {...options, instrument: false}
+ );
+ return transformedJsonSource;
+ }
+
+ return fileSource;
+ }
+
+ async requireAndTranspileModule(
+ moduleName,
+ callback,
+ options = {
+ applyInteropRequireDefault: true,
+ instrument: false,
+ supportsDynamicImport: false,
+ supportsExportNamespaceFrom: false,
+ supportsStaticESM: false,
+ supportsTopLevelAwait: false
+ }
+ ) {
+ let transforming = false;
+ const {applyInteropRequireDefault, ...transformOptions} = options;
+ const revertHook = (0, _pirates().addHook)(
+ (code, filename) => {
+ try {
+ transforming = true;
+ return (
+ this.transformSource(filename, code, transformOptions).code || code
+ );
+ } finally {
+ transforming = false;
+ }
+ },
+ {
+ exts: this._config.moduleFileExtensions.map(ext => `.${ext}`),
+ ignoreNodeModules: false,
+ matcher: filename => {
+ if (transforming) {
+ // Don't transform any dependency required by the transformer itself
+ return false;
+ }
+
+ return this.shouldTransform(filename);
+ }
+ }
+ );
+
+ try {
+ const module = await (0, _jestUtil().requireOrImportModule)(
+ moduleName,
+ applyInteropRequireDefault
+ );
+
+ if (!callback) {
+ revertHook();
+ return module;
+ }
+
+ const cbResult = callback(module);
+
+ if ((0, _jestUtil().isPromise)(cbResult)) {
+ return waitForPromiseWithCleanup(cbResult, revertHook).then(
+ () => module
+ );
+ }
+
+ return module;
+ } finally {
+ revertHook();
+ }
+ }
+
+ shouldTransform(filename) {
+ const ignoreRegexp = this._cache.ignorePatternsRegExp;
+ const isIgnored = ignoreRegexp ? ignoreRegexp.test(filename) : false;
+ return this._config.transform.length !== 0 && !isIgnored;
+ }
+} // TODO: do we need to define the generics twice?
+
+async function createTranspilingRequire(config) {
+ const transformer = await createScriptTransformer(config);
+ return async function requireAndTranspileModule(
+ resolverPath,
+ applyInteropRequireDefault = false
+ ) {
+ const transpiledModule = await transformer.requireAndTranspileModule(
+ resolverPath,
+ () => {},
+ {
+ applyInteropRequireDefault,
+ instrument: false,
+ supportsDynamicImport: false,
+ // this might be true, depending on node version.
+ supportsExportNamespaceFrom: false,
+ supportsStaticESM: false,
+ supportsTopLevelAwait: false
+ }
+ );
+ return transpiledModule;
+ };
+}
+
+const removeFile = path => {
+ try {
+ fs().unlinkSync(path);
+ } catch {}
+};
+
+const stripShebang = content => {
+ // If the file data starts with a shebang remove it. Leaves the empty line
+ // to keep stack trace line numbers correct.
+ if (content.startsWith('#!')) {
+ return content.replace(/^#!.*/, '');
+ } else {
+ return content;
+ }
+};
+/**
+ * This is like `writeCacheFile` but with an additional sanity checksum. We
+ * cannot use the same technique for source maps because we expose source map
+ * cache file paths directly to callsites, with the expectation they can read
+ * it right away. This is not a great system, because source map cache file
+ * could get corrupted, out-of-sync, etc.
+ */
+
+function writeCodeCacheFile(cachePath, code) {
+ const checksum = (0, _crypto().createHash)('md5').update(code).digest('hex');
+ writeCacheFile(cachePath, checksum + '\n' + code);
+}
+/**
+ * Read counterpart of `writeCodeCacheFile`. We verify that the content of the
+ * file matches the checksum, in case some kind of corruption happened. This
+ * could happen if an older version of `jest-runtime` writes non-atomically to
+ * the same cache, for example.
+ */
+
+function readCodeCacheFile(cachePath) {
+ const content = readCacheFile(cachePath);
+
+ if (content == null) {
+ return null;
+ }
+
+ const code = content.substring(33);
+ const checksum = (0, _crypto().createHash)('md5').update(code).digest('hex');
+
+ if (checksum === content.substring(0, 32)) {
+ return code;
+ }
+
+ return null;
+}
+/**
+ * Writing to the cache atomically relies on 'rename' being atomic on most
+ * file systems. Doing atomic write reduces the risk of corruption by avoiding
+ * two processes to write to the same file at the same time. It also reduces
+ * the risk of reading a file that's being overwritten at the same time.
+ */
+
+const writeCacheFile = (cachePath, fileData) => {
+ try {
+ (0, _writeFileAtomic().sync)(cachePath, fileData, {
+ encoding: 'utf8',
+ fsync: false
+ });
+ } catch (e) {
+ if (cacheWriteErrorSafeToIgnore(e, cachePath)) {
+ return;
+ }
+
+ e.message =
+ 'jest: failed to cache transform results in: ' +
+ cachePath +
+ '\nFailure message: ' +
+ e.message;
+ removeFile(cachePath);
+ throw e;
+ }
+};
+/**
+ * On Windows, renames are not atomic, leading to EPERM exceptions when two
+ * processes attempt to rename to the same target file at the same time.
+ * If the target file exists we can be reasonably sure another process has
+ * legitimately won a cache write race and ignore the error.
+ */
+
+const cacheWriteErrorSafeToIgnore = (e, cachePath) =>
+ process.platform === 'win32' &&
+ e.code === 'EPERM' &&
+ fs().existsSync(cachePath);
+
+const readCacheFile = cachePath => {
+ if (!fs().existsSync(cachePath)) {
+ return null;
+ }
+
+ let fileData;
+
+ try {
+ fileData = fs().readFileSync(cachePath, 'utf8');
+ } catch (e) {
+ e.message =
+ 'jest: failed to read cache file: ' +
+ cachePath +
+ '\nFailure message: ' +
+ e.message;
+ removeFile(cachePath);
+ throw e;
+ }
+
+ if (fileData == null) {
+ // We must have somehow created the file but failed to write to it,
+ // let's delete it and retry.
+ removeFile(cachePath);
+ }
+
+ return fileData;
+};
+
+const getScriptCacheKey = (filename, instrument) => {
+ const mtime = fs().statSync(filename).mtime;
+ return filename + '_' + mtime.getTime() + (instrument ? '_instrumented' : '');
+};
+
+const calcIgnorePatternRegExp = config => {
+ if (
+ !config.transformIgnorePatterns ||
+ config.transformIgnorePatterns.length === 0
+ ) {
+ return undefined;
+ }
+
+ return new RegExp(config.transformIgnorePatterns.join('|'));
+};
+
+const calcTransformRegExp = config => {
+ if (!config.transform.length) {
+ return undefined;
+ }
+
+ const transformRegexp = [];
+
+ for (let i = 0; i < config.transform.length; i++) {
+ transformRegexp.push([
+ new RegExp(config.transform[i][0]),
+ config.transform[i][1],
+ config.transform[i][2]
+ ]);
+ }
+
+ return transformRegexp;
+};
+
+function invariant(condition, message) {
+ if (!condition) {
+ throw new Error(message);
+ }
+}
+
+function assertSyncTransformer(transformer, name) {
+ invariant(name);
+ invariant(
+ typeof transformer.process === 'function',
+ (0, _runtimeErrorsAndWarnings.makeInvalidSyncTransformerError)(name)
+ );
+}
+
+async function createScriptTransformer(config, cacheFS = new Map()) {
+ const transformer = new ScriptTransformer(config, cacheFS);
+ await transformer.loadTransformers();
+ return transformer;
+}
diff --git a/node_modules/@jest/transform/build/enhanceUnexpectedTokenMessage.d.ts b/node_modules/@jest/transform/build/enhanceUnexpectedTokenMessage.d.ts
new file mode 100644
index 0000000..7847dc7
--- /dev/null
+++ b/node_modules/@jest/transform/build/enhanceUnexpectedTokenMessage.d.ts
@@ -0,0 +1,12 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+interface ErrorWithCodeFrame extends Error {
+ codeFrame?: string;
+}
+export default function handlePotentialSyntaxError(e: ErrorWithCodeFrame): ErrorWithCodeFrame;
+export declare function enhanceUnexpectedTokenMessage(e: Error): Error;
+export {};
diff --git a/node_modules/@jest/transform/build/enhanceUnexpectedTokenMessage.js b/node_modules/@jest/transform/build/enhanceUnexpectedTokenMessage.js
new file mode 100644
index 0000000..d2235f5
--- /dev/null
+++ b/node_modules/@jest/transform/build/enhanceUnexpectedTokenMessage.js
@@ -0,0 +1,83 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = handlePotentialSyntaxError;
+exports.enhanceUnexpectedTokenMessage = enhanceUnexpectedTokenMessage;
+
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+
+ _chalk = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+const DOT = ' \u2022 ';
+
+function handlePotentialSyntaxError(e) {
+ if (e.codeFrame) {
+ e.stack = e.message + '\n' + e.codeFrame;
+ }
+
+ if (
+ // `instanceof` might come from the wrong context
+ e.name === 'SyntaxError' &&
+ !e.message.includes(' expected')
+ ) {
+ throw enhanceUnexpectedTokenMessage(e);
+ }
+
+ return e;
+}
+
+function enhanceUnexpectedTokenMessage(e) {
+ e.stack =
+ `${_chalk().default.bold.red('Jest encountered an unexpected token')}
+
+Jest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax.
+
+Out of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration.
+
+By default "node_modules" folder is ignored by transformers.
+
+Here's what you can do:
+${DOT}If you are trying to use ECMAScript Modules, see ${_chalk().default.underline(
+ 'https://jestjs.io/docs/ecmascript-modules'
+ )} for how to enable it.
+${DOT}If you are trying to use TypeScript, see ${_chalk().default.underline(
+ 'https://jestjs.io/docs/getting-started#using-typescript'
+ )}
+${DOT}To have some of your "node_modules" files transformed, you can specify a custom ${_chalk().default.bold(
+ '"transformIgnorePatterns"'
+ )} in your config.
+${DOT}If you need a custom transformation specify a ${_chalk().default.bold(
+ '"transform"'
+ )} option in your config.
+${DOT}If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the ${_chalk().default.bold(
+ '"moduleNameMapper"'
+ )} config option.
+
+You'll find more details and examples of these config options in the docs:
+${_chalk().default.cyan('https://jestjs.io/docs/configuration')}
+For information about custom transformations, see:
+${_chalk().default.cyan('https://jestjs.io/docs/code-transformation')}
+
+${_chalk().default.bold.red('Details:')}
+
+` + e.stack;
+ return e;
+}
diff --git a/node_modules/@jest/transform/build/index.d.ts b/node_modules/@jest/transform/build/index.d.ts
new file mode 100644
index 0000000..09a5081
--- /dev/null
+++ b/node_modules/@jest/transform/build/index.d.ts
@@ -0,0 +1,11 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+export { createScriptTransformer, createTranspilingRequire, } from './ScriptTransformer';
+export type { TransformerType as ScriptTransformer } from './ScriptTransformer';
+export { default as shouldInstrument } from './shouldInstrument';
+export type { CallerTransformOptions, Transformer, SyncTransformer, AsyncTransformer, ShouldInstrumentOptions, Options as TransformationOptions, TransformOptions, TransformResult, TransformedSource, } from './types';
+export { default as handlePotentialSyntaxError } from './enhanceUnexpectedTokenMessage';
diff --git a/node_modules/@jest/transform/build/index.js b/node_modules/@jest/transform/build/index.js
new file mode 100644
index 0000000..ab4d31a
--- /dev/null
+++ b/node_modules/@jest/transform/build/index.js
@@ -0,0 +1,41 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+Object.defineProperty(exports, 'createScriptTransformer', {
+ enumerable: true,
+ get: function () {
+ return _ScriptTransformer.createScriptTransformer;
+ }
+});
+Object.defineProperty(exports, 'createTranspilingRequire', {
+ enumerable: true,
+ get: function () {
+ return _ScriptTransformer.createTranspilingRequire;
+ }
+});
+Object.defineProperty(exports, 'handlePotentialSyntaxError', {
+ enumerable: true,
+ get: function () {
+ return _enhanceUnexpectedTokenMessage.default;
+ }
+});
+Object.defineProperty(exports, 'shouldInstrument', {
+ enumerable: true,
+ get: function () {
+ return _shouldInstrument.default;
+ }
+});
+
+var _ScriptTransformer = require('./ScriptTransformer');
+
+var _shouldInstrument = _interopRequireDefault(require('./shouldInstrument'));
+
+var _enhanceUnexpectedTokenMessage = _interopRequireDefault(
+ require('./enhanceUnexpectedTokenMessage')
+);
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
diff --git a/node_modules/@jest/transform/build/runtimeErrorsAndWarnings.d.ts b/node_modules/@jest/transform/build/runtimeErrorsAndWarnings.d.ts
new file mode 100644
index 0000000..88c8f85
--- /dev/null
+++ b/node_modules/@jest/transform/build/runtimeErrorsAndWarnings.d.ts
@@ -0,0 +1,10 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+export declare const makeInvalidReturnValueError: () => string;
+export declare const makeInvalidSourceMapWarning: (filename: string, transformPath: string) => string;
+export declare const makeInvalidSyncTransformerError: (transformPath: string) => string;
+export declare const makeInvalidTransformerError: (transformPath: string) => string;
diff --git a/node_modules/@jest/transform/build/runtimeErrorsAndWarnings.js b/node_modules/@jest/transform/build/runtimeErrorsAndWarnings.js
new file mode 100644
index 0000000..a88290d
--- /dev/null
+++ b/node_modules/@jest/transform/build/runtimeErrorsAndWarnings.js
@@ -0,0 +1,101 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.makeInvalidTransformerError =
+ exports.makeInvalidSyncTransformerError =
+ exports.makeInvalidSourceMapWarning =
+ exports.makeInvalidReturnValueError =
+ void 0;
+
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+
+ _chalk = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _slash() {
+ const data = _interopRequireDefault(require('slash'));
+
+ _slash = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+const BULLET = '\u25cf ';
+const DOCUMENTATION_NOTE = ` ${_chalk().default.bold(
+ 'Code Transformation Documentation:'
+)}
+ https://jestjs.io/docs/code-transformation
+`;
+
+const makeInvalidReturnValueError = () =>
+ _chalk().default.red(
+ [
+ _chalk().default.bold(BULLET + 'Invalid return value:'),
+ " Code transformer's `process` function must return a string or an object",
+ ' with `code` key containing a string. If `processAsync` function is implemented,',
+ ' it must return a Promise resolving to one of these values.',
+ ''
+ ].join('\n') + DOCUMENTATION_NOTE
+ );
+
+exports.makeInvalidReturnValueError = makeInvalidReturnValueError;
+
+const makeInvalidSourceMapWarning = (filename, transformPath) =>
+ _chalk().default.yellow(
+ [
+ _chalk().default.bold(BULLET + 'Invalid source map:'),
+ ` The source map for "${(0, _slash().default)(
+ filename
+ )}" returned by "${(0, _slash().default)(transformPath)}" is invalid.`,
+ ' Proceeding without source mapping for that file.'
+ ].join('\n')
+ );
+
+exports.makeInvalidSourceMapWarning = makeInvalidSourceMapWarning;
+
+const makeInvalidSyncTransformerError = transformPath =>
+ _chalk().default.red(
+ [
+ _chalk().default.bold(BULLET + 'Invalid synchronous transformer module:'),
+ ` "${(0, _slash().default)(
+ transformPath
+ )}" specified in the "transform" object of Jest configuration`,
+ ' must export a `process` function.',
+ ''
+ ].join('\n') + DOCUMENTATION_NOTE
+ );
+
+exports.makeInvalidSyncTransformerError = makeInvalidSyncTransformerError;
+
+const makeInvalidTransformerError = transformPath =>
+ _chalk().default.red(
+ [
+ _chalk().default.bold(BULLET + 'Invalid transformer module:'),
+ ` "${(0, _slash().default)(
+ transformPath
+ )}" specified in the "transform" object of Jest configuration`,
+ ' must export a `process` or `processAsync` or `createTransformer` function.',
+ ''
+ ].join('\n') + DOCUMENTATION_NOTE
+ );
+
+exports.makeInvalidTransformerError = makeInvalidTransformerError;
diff --git a/node_modules/@jest/transform/build/shouldInstrument.d.ts b/node_modules/@jest/transform/build/shouldInstrument.d.ts
new file mode 100644
index 0000000..2b7b617
--- /dev/null
+++ b/node_modules/@jest/transform/build/shouldInstrument.d.ts
@@ -0,0 +1,9 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import type { Config } from '@jest/types';
+import type { ShouldInstrumentOptions } from './types';
+export default function shouldInstrument(filename: Config.Path, options: ShouldInstrumentOptions, config: Config.ProjectConfig): boolean;
diff --git a/node_modules/@jest/transform/build/shouldInstrument.js b/node_modules/@jest/transform/build/shouldInstrument.js
new file mode 100644
index 0000000..292af31
--- /dev/null
+++ b/node_modules/@jest/transform/build/shouldInstrument.js
@@ -0,0 +1,207 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = shouldInstrument;
+
+function path() {
+ const data = _interopRequireWildcard(require('path'));
+
+ path = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _micromatch() {
+ const data = _interopRequireDefault(require('micromatch'));
+
+ _micromatch = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestRegexUtil() {
+ const data = require('jest-regex-util');
+
+ _jestRegexUtil = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestUtil() {
+ const data = require('jest-util');
+
+ _jestUtil = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+function _getRequireWildcardCache(nodeInterop) {
+ if (typeof WeakMap !== 'function') return null;
+ var cacheBabelInterop = new WeakMap();
+ var cacheNodeInterop = new WeakMap();
+ return (_getRequireWildcardCache = function (nodeInterop) {
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
+ })(nodeInterop);
+}
+
+function _interopRequireWildcard(obj, nodeInterop) {
+ if (!nodeInterop && obj && obj.__esModule) {
+ return obj;
+ }
+ if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) {
+ return {default: obj};
+ }
+ var cache = _getRequireWildcardCache(nodeInterop);
+ if (cache && cache.has(obj)) {
+ return cache.get(obj);
+ }
+ var newObj = {};
+ var hasPropertyDescriptor =
+ Object.defineProperty && Object.getOwnPropertyDescriptor;
+ for (var key in obj) {
+ if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) {
+ var desc = hasPropertyDescriptor
+ ? Object.getOwnPropertyDescriptor(obj, key)
+ : null;
+ if (desc && (desc.get || desc.set)) {
+ Object.defineProperty(newObj, key, desc);
+ } else {
+ newObj[key] = obj[key];
+ }
+ }
+ }
+ newObj.default = obj;
+ if (cache) {
+ cache.set(obj, newObj);
+ }
+ return newObj;
+}
+
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+const MOCKS_PATTERN = new RegExp(
+ (0, _jestRegexUtil().escapePathForRegex)(
+ path().sep + '__mocks__' + path().sep
+ )
+);
+const cachedRegexes = new Map();
+
+const getRegex = regexStr => {
+ if (!cachedRegexes.has(regexStr)) {
+ cachedRegexes.set(regexStr, new RegExp(regexStr));
+ }
+
+ const regex = cachedRegexes.get(regexStr); // prevent stateful regexes from breaking, just in case
+
+ regex.lastIndex = 0;
+ return regex;
+};
+
+function shouldInstrument(filename, options, config) {
+ if (!options.collectCoverage) {
+ return false;
+ }
+
+ if (
+ config.forceCoverageMatch.length &&
+ _micromatch().default.any(filename, config.forceCoverageMatch)
+ ) {
+ return true;
+ }
+
+ if (
+ !config.testPathIgnorePatterns.some(pattern =>
+ getRegex(pattern).test(filename)
+ )
+ ) {
+ if (config.testRegex.some(regex => new RegExp(regex).test(filename))) {
+ return false;
+ }
+
+ if (
+ (0, _jestUtil().globsToMatcher)(config.testMatch)(
+ (0, _jestUtil().replacePathSepForGlob)(filename)
+ )
+ ) {
+ return false;
+ }
+ }
+
+ if (
+ // This configuration field contains an object in the form of:
+ // {'path/to/file.js': true}
+ options.collectCoverageOnlyFrom &&
+ !options.collectCoverageOnlyFrom[filename]
+ ) {
+ return false;
+ }
+
+ if (
+ // still cover if `only` is specified
+ !options.collectCoverageOnlyFrom &&
+ options.collectCoverageFrom.length &&
+ !(0, _jestUtil().globsToMatcher)(options.collectCoverageFrom)(
+ (0, _jestUtil().replacePathSepForGlob)(
+ path().relative(config.rootDir, filename)
+ )
+ )
+ ) {
+ return false;
+ }
+
+ if (
+ config.coveragePathIgnorePatterns.some(pattern => !!filename.match(pattern))
+ ) {
+ return false;
+ }
+
+ if (config.globalSetup === filename) {
+ return false;
+ }
+
+ if (config.globalTeardown === filename) {
+ return false;
+ }
+
+ if (config.setupFiles.includes(filename)) {
+ return false;
+ }
+
+ if (config.setupFilesAfterEnv.includes(filename)) {
+ return false;
+ }
+
+ if (MOCKS_PATTERN.test(filename)) {
+ return false;
+ }
+
+ if (options.changedFiles && !options.changedFiles.has(filename)) {
+ if (!options.sourcesRelatedToTestsInChangedFiles) {
+ return false;
+ }
+
+ if (!options.sourcesRelatedToTestsInChangedFiles.has(filename)) {
+ return false;
+ }
+ }
+
+ return true;
+}
diff --git a/node_modules/@jest/transform/build/types.d.ts b/node_modules/@jest/transform/build/types.d.ts
new file mode 100644
index 0000000..038bf9d
--- /dev/null
+++ b/node_modules/@jest/transform/build/types.d.ts
@@ -0,0 +1,75 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import type { RawSourceMap } from 'source-map';
+import type { Config, TransformTypes } from '@jest/types';
+export interface ShouldInstrumentOptions extends Pick<Config.GlobalConfig, 'collectCoverage' | 'collectCoverageFrom' | 'collectCoverageOnlyFrom' | 'coverageProvider'> {
+ changedFiles?: Set<Config.Path>;
+ sourcesRelatedToTestsInChangedFiles?: Set<Config.Path>;
+}
+export interface Options extends ShouldInstrumentOptions, CallerTransformOptions {
+ isInternalModule?: boolean;
+}
+interface FixedRawSourceMap extends Omit<RawSourceMap, 'version'> {
+ version: number;
+}
+export declare type TransformedSource = {
+ code: string;
+ map?: FixedRawSourceMap | string | null;
+} | string;
+export declare type TransformResult = TransformTypes.TransformResult;
+export interface CallerTransformOptions {
+ supportsDynamicImport: boolean;
+ supportsExportNamespaceFrom: boolean;
+ supportsStaticESM: boolean;
+ supportsTopLevelAwait: boolean;
+}
+export interface ReducedTransformOptions extends CallerTransformOptions {
+ instrument: boolean;
+}
+export interface RequireAndTranspileModuleOptions extends ReducedTransformOptions {
+ applyInteropRequireDefault: boolean;
+}
+export declare type StringMap = Map<string, string>;
+export interface TransformOptions<OptionType = unknown> extends ReducedTransformOptions {
+ /** a cached file system which is used in jest-runtime - useful to improve performance */
+ cacheFS: StringMap;
+ config: Config.ProjectConfig;
+ /** A stringified version of the configuration - useful in cache busting */
+ configString: string;
+ /** the options passed through Jest's config by the user */
+ transformerConfig: OptionType;
+}
+export interface SyncTransformer<OptionType = unknown> {
+ /**
+ * Indicates if the transformer is capable of instrumenting the code for code coverage.
+ *
+ * If V8 coverage is _not_ active, and this is `true`, Jest will assume the code is instrumented.
+ * If V8 coverage is _not_ active, and this is `false`. Jest will instrument the code returned by this transformer using Babel.
+ */
+ canInstrument?: boolean;
+ createTransformer?: (options?: OptionType) => SyncTransformer<OptionType>;
+ getCacheKey?: (sourceText: string, sourcePath: Config.Path, options: TransformOptions<OptionType>) => string;
+ getCacheKeyAsync?: (sourceText: string, sourcePath: Config.Path, options: TransformOptions<OptionType>) => Promise<string>;
+ process: (sourceText: string, sourcePath: Config.Path, options: TransformOptions<OptionType>) => TransformedSource;
+ processAsync?: (sourceText: string, sourcePath: Config.Path, options: TransformOptions<OptionType>) => Promise<TransformedSource>;
+}
+export interface AsyncTransformer<OptionType = unknown> {
+ /**
+ * Indicates if the transformer is capable of instrumenting the code for code coverage.
+ *
+ * If V8 coverage is _not_ active, and this is `true`, Jest will assume the code is instrumented.
+ * If V8 coverage is _not_ active, and this is `false`. Jest will instrument the code returned by this transformer using Babel.
+ */
+ canInstrument?: boolean;
+ createTransformer?: (options?: OptionType) => AsyncTransformer<OptionType>;
+ getCacheKey?: (sourceText: string, sourcePath: Config.Path, options: TransformOptions<OptionType>) => string;
+ getCacheKeyAsync?: (sourceText: string, sourcePath: Config.Path, options: TransformOptions<OptionType>) => Promise<string>;
+ process?: (sourceText: string, sourcePath: Config.Path, options: TransformOptions<OptionType>) => TransformedSource;
+ processAsync: (sourceText: string, sourcePath: Config.Path, options: TransformOptions<OptionType>) => Promise<TransformedSource>;
+}
+export declare type Transformer<OptionType = unknown> = SyncTransformer<OptionType> | AsyncTransformer<OptionType>;
+export {};
diff --git a/node_modules/@jest/transform/build/types.js b/node_modules/@jest/transform/build/types.js
new file mode 100644
index 0000000..ad9a93a
--- /dev/null
+++ b/node_modules/@jest/transform/build/types.js
@@ -0,0 +1 @@
+'use strict';
diff --git a/node_modules/@jest/transform/package.json b/node_modules/@jest/transform/package.json
new file mode 100644
index 0000000..961021e
--- /dev/null
+++ b/node_modules/@jest/transform/package.json
@@ -0,0 +1,53 @@
+{
+ "name": "@jest/transform",
+ "version": "27.5.1",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/facebook/jest.git",
+ "directory": "packages/jest-transform"
+ },
+ "license": "MIT",
+ "main": "./build/index.js",
+ "types": "./build/index.d.ts",
+ "exports": {
+ ".": {
+ "types": "./build/index.d.ts",
+ "default": "./build/index.js"
+ },
+ "./package.json": "./package.json"
+ },
+ "dependencies": {
+ "@babel/core": "^7.1.0",
+ "@jest/types": "^27.5.1",
+ "babel-plugin-istanbul": "^6.1.1",
+ "chalk": "^4.0.0",
+ "convert-source-map": "^1.4.0",
+ "fast-json-stable-stringify": "^2.0.0",
+ "graceful-fs": "^4.2.9",
+ "jest-haste-map": "^27.5.1",
+ "jest-regex-util": "^27.5.1",
+ "jest-util": "^27.5.1",
+ "micromatch": "^4.0.4",
+ "pirates": "^4.0.4",
+ "slash": "^3.0.0",
+ "source-map": "^0.6.1",
+ "write-file-atomic": "^3.0.0"
+ },
+ "devDependencies": {
+ "@jest/test-utils": "^27.5.1",
+ "@types/babel__core": "^7.1.0",
+ "@types/convert-source-map": "^1.5.1",
+ "@types/fast-json-stable-stringify": "^2.0.0",
+ "@types/graceful-fs": "^4.1.2",
+ "@types/micromatch": "^4.0.1",
+ "@types/write-file-atomic": "^3.0.0",
+ "dedent": "^0.7.0"
+ },
+ "engines": {
+ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ },
+ "publishConfig": {
+ "access": "public"
+ },
+ "gitHead": "67c1aa20c5fec31366d733e901fee2b981cb1850"
+}
diff --git a/node_modules/@jest/types/LICENSE b/node_modules/@jest/types/LICENSE
new file mode 100644
index 0000000..b96dcb0
--- /dev/null
+++ b/node_modules/@jest/types/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) Facebook, Inc. and its affiliates.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/node_modules/@jest/types/build/Circus.d.ts b/node_modules/@jest/types/build/Circus.d.ts
new file mode 100644
index 0000000..683832e
--- /dev/null
+++ b/node_modules/@jest/types/build/Circus.d.ts
@@ -0,0 +1,193 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+/// <reference types="node" />
+import type * as Global from './Global';
+declare type Process = NodeJS.Process;
+export declare type DoneFn = Global.DoneFn;
+export declare type BlockFn = Global.BlockFn;
+export declare type BlockName = Global.BlockName;
+export declare type BlockMode = void | 'skip' | 'only' | 'todo';
+export declare type TestMode = BlockMode;
+export declare type TestName = Global.TestName;
+export declare type TestFn = Global.TestFn;
+export declare type HookFn = Global.HookFn;
+export declare type AsyncFn = TestFn | HookFn;
+export declare type SharedHookType = 'afterAll' | 'beforeAll';
+export declare type HookType = SharedHookType | 'afterEach' | 'beforeEach';
+export declare type TestContext = Global.TestContext;
+export declare type Exception = any;
+export declare type FormattedError = string;
+export declare type Hook = {
+ asyncError: Error;
+ fn: HookFn;
+ type: HookType;
+ parent: DescribeBlock;
+ seenDone: boolean;
+ timeout: number | undefined | null;
+};
+export interface EventHandler {
+ (event: AsyncEvent, state: State): void | Promise<void>;
+ (event: SyncEvent, state: State): void;
+}
+export declare type Event = SyncEvent | AsyncEvent;
+interface JestGlobals extends Global.TestFrameworkGlobals {
+ expect: unknown;
+}
+export declare type SyncEvent = {
+ asyncError: Error;
+ mode: BlockMode;
+ name: 'start_describe_definition';
+ blockName: BlockName;
+} | {
+ mode: BlockMode;
+ name: 'finish_describe_definition';
+ blockName: BlockName;
+} | {
+ asyncError: Error;
+ name: 'add_hook';
+ hookType: HookType;
+ fn: HookFn;
+ timeout: number | undefined;
+} | {
+ asyncError: Error;
+ name: 'add_test';
+ testName: TestName;
+ fn: TestFn;
+ mode?: TestMode;
+ timeout: number | undefined;
+} | {
+ name: 'error';
+ error: Exception;
+};
+export declare type AsyncEvent = {
+ name: 'setup';
+ testNamePattern?: string;
+ runtimeGlobals: JestGlobals;
+ parentProcess: Process;
+} | {
+ name: 'include_test_location_in_result';
+} | {
+ name: 'hook_start';
+ hook: Hook;
+} | {
+ name: 'hook_success';
+ describeBlock?: DescribeBlock;
+ test?: TestEntry;
+ hook: Hook;
+} | {
+ name: 'hook_failure';
+ error: string | Exception;
+ describeBlock?: DescribeBlock;
+ test?: TestEntry;
+ hook: Hook;
+} | {
+ name: 'test_fn_start';
+ test: TestEntry;
+} | {
+ name: 'test_fn_success';
+ test: TestEntry;
+} | {
+ name: 'test_fn_failure';
+ error: Exception;
+ test: TestEntry;
+} | {
+ name: 'test_retry';
+ test: TestEntry;
+} | {
+ name: 'test_start';
+ test: TestEntry;
+} | {
+ name: 'test_skip';
+ test: TestEntry;
+} | {
+ name: 'test_todo';
+ test: TestEntry;
+} | {
+ name: 'test_done';
+ test: TestEntry;
+} | {
+ name: 'run_describe_start';
+ describeBlock: DescribeBlock;
+} | {
+ name: 'run_describe_finish';
+ describeBlock: DescribeBlock;
+} | {
+ name: 'run_start';
+} | {
+ name: 'run_finish';
+} | {
+ name: 'teardown';
+};
+export declare type MatcherResults = {
+ actual: unknown;
+ expected: unknown;
+ name: string;
+ pass: boolean;
+};
+export declare type TestStatus = 'skip' | 'done' | 'todo';
+export declare type TestResult = {
+ duration?: number | null;
+ errors: Array<FormattedError>;
+ errorsDetailed: Array<MatcherResults | unknown>;
+ invocations: number;
+ status: TestStatus;
+ location?: {
+ column: number;
+ line: number;
+ } | null;
+ testPath: Array<TestName | BlockName>;
+};
+export declare type RunResult = {
+ unhandledErrors: Array<FormattedError>;
+ testResults: TestResults;
+};
+export declare type TestResults = Array<TestResult>;
+export declare type GlobalErrorHandlers = {
+ uncaughtException: Array<(exception: Exception) => void>;
+ unhandledRejection: Array<(exception: Exception, promise: Promise<unknown>) => void>;
+};
+export declare type State = {
+ currentDescribeBlock: DescribeBlock;
+ currentlyRunningTest?: TestEntry | null;
+ expand?: boolean;
+ hasFocusedTests: boolean;
+ hasStarted: boolean;
+ originalGlobalErrorHandlers?: GlobalErrorHandlers;
+ parentProcess: Process | null;
+ rootDescribeBlock: DescribeBlock;
+ testNamePattern?: RegExp | null;
+ testTimeout: number;
+ unhandledErrors: Array<Exception>;
+ includeTestLocationInResult: boolean;
+};
+export declare type DescribeBlock = {
+ type: 'describeBlock';
+ children: Array<DescribeBlock | TestEntry>;
+ hooks: Array<Hook>;
+ mode: BlockMode;
+ name: BlockName;
+ parent?: DescribeBlock;
+ /** @deprecated Please get from `children` array instead */
+ tests: Array<TestEntry>;
+};
+export declare type TestError = Exception | [Exception | undefined, Exception];
+export declare type TestEntry = {
+ type: 'test';
+ asyncError: Exception;
+ errors: Array<TestError>;
+ fn: TestFn;
+ invocations: number;
+ mode: TestMode;
+ name: TestName;
+ parent: DescribeBlock;
+ startedAt?: number | null;
+ duration?: number | null;
+ seenDone: boolean;
+ status?: TestStatus | null;
+ timeout?: number;
+};
+export {};
diff --git a/node_modules/@jest/types/build/Circus.js b/node_modules/@jest/types/build/Circus.js
new file mode 100644
index 0000000..ad9a93a
--- /dev/null
+++ b/node_modules/@jest/types/build/Circus.js
@@ -0,0 +1 @@
+'use strict';
diff --git a/node_modules/@jest/types/build/Config.d.ts b/node_modules/@jest/types/build/Config.d.ts
new file mode 100644
index 0000000..6290147
--- /dev/null
+++ b/node_modules/@jest/types/build/Config.d.ts
@@ -0,0 +1,462 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import type { ForegroundColor } from 'chalk';
+import type { ReportOptions } from 'istanbul-reports';
+import type { Arguments } from 'yargs';
+declare type CoverageProvider = 'babel' | 'v8';
+declare type Timers = 'real' | 'fake' | 'modern' | 'legacy';
+export declare type Path = string;
+export declare type Glob = string;
+export declare type HasteConfig = {
+ /** Whether to hash files using SHA-1. */
+ computeSha1?: boolean;
+ /** The platform to use as the default, e.g. 'ios'. */
+ defaultPlatform?: string | null;
+ /** Force use of Node's `fs` APIs rather than shelling out to `find` */
+ forceNodeFilesystemAPI?: boolean;
+ /**
+ * Whether to follow symlinks when crawling for files.
+ * This options cannot be used in projects which use watchman.
+ * Projects with `watchman` set to true will error if this option is set to true.
+ */
+ enableSymlinks?: boolean;
+ /** Path to a custom implementation of Haste. */
+ hasteImplModulePath?: string;
+ /** All platforms to target, e.g ['ios', 'android']. */
+ platforms?: Array<string>;
+ /** Whether to throw on error on module collision. */
+ throwOnModuleCollision?: boolean;
+ /** Custom HasteMap module */
+ hasteMapModulePath?: string;
+};
+export declare type CoverageReporterName = keyof ReportOptions;
+export declare type CoverageReporterWithOptions<K = CoverageReporterName> = K extends CoverageReporterName ? ReportOptions[K] extends never ? never : [K, Partial<ReportOptions[K]>] : never;
+export declare type CoverageReporters = Array<CoverageReporterName | CoverageReporterWithOptions>;
+export declare type ReporterConfig = [string, Record<string, unknown>];
+export declare type TransformerConfig = [string, Record<string, unknown>];
+export interface ConfigGlobals {
+ [K: string]: unknown;
+}
+export interface PrettyFormatOptions {
+}
+export declare type DefaultOptions = {
+ automock: boolean;
+ bail: number;
+ cache: boolean;
+ cacheDirectory: Path;
+ changedFilesWithAncestor: boolean;
+ ci: boolean;
+ clearMocks: boolean;
+ collectCoverage: boolean;
+ coveragePathIgnorePatterns: Array<string>;
+ coverageReporters: Array<CoverageReporterName>;
+ coverageProvider: CoverageProvider;
+ detectLeaks: boolean;
+ detectOpenHandles: boolean;
+ errorOnDeprecated: boolean;
+ expand: boolean;
+ extensionsToTreatAsEsm: Array<Path>;
+ forceCoverageMatch: Array<Glob>;
+ globals: ConfigGlobals;
+ haste: HasteConfig;
+ injectGlobals: boolean;
+ listTests: boolean;
+ maxConcurrency: number;
+ maxWorkers: number | string;
+ moduleDirectories: Array<string>;
+ moduleFileExtensions: Array<string>;
+ moduleNameMapper: Record<string, string | Array<string>>;
+ modulePathIgnorePatterns: Array<string>;
+ noStackTrace: boolean;
+ notify: boolean;
+ notifyMode: NotifyMode;
+ passWithNoTests: boolean;
+ prettierPath: string;
+ resetMocks: boolean;
+ resetModules: boolean;
+ restoreMocks: boolean;
+ roots: Array<Path>;
+ runTestsByPath: boolean;
+ runner: string;
+ setupFiles: Array<Path>;
+ setupFilesAfterEnv: Array<Path>;
+ skipFilter: boolean;
+ slowTestThreshold: number;
+ snapshotSerializers: Array<Path>;
+ testEnvironment: string;
+ testEnvironmentOptions: Record<string, unknown>;
+ testFailureExitCode: string | number;
+ testLocationInResults: boolean;
+ testMatch: Array<Glob>;
+ testPathIgnorePatterns: Array<string>;
+ testRegex: Array<string>;
+ testRunner: string;
+ testSequencer: string;
+ testURL: string;
+ timers: Timers;
+ transformIgnorePatterns: Array<Glob>;
+ useStderr: boolean;
+ watch: boolean;
+ watchPathIgnorePatterns: Array<string>;
+ watchman: boolean;
+};
+export declare type DisplayName = {
+ name: string;
+ color: typeof ForegroundColor;
+};
+export declare type InitialOptionsWithRootDir = InitialOptions & Required<Pick<InitialOptions, 'rootDir'>>;
+export declare type InitialProjectOptions = Pick<InitialOptions & {
+ cwd?: string;
+}, keyof ProjectConfig>;
+export declare type InitialOptions = Partial<{
+ automock: boolean;
+ bail: boolean | number;
+ cache: boolean;
+ cacheDirectory: Path;
+ ci: boolean;
+ clearMocks: boolean;
+ changedFilesWithAncestor: boolean;
+ changedSince: string;
+ collectCoverage: boolean;
+ collectCoverageFrom: Array<Glob>;
+ collectCoverageOnlyFrom: {
+ [key: string]: boolean;
+ };
+ coverageDirectory: string;
+ coveragePathIgnorePatterns: Array<string>;
+ coverageProvider: CoverageProvider;
+ coverageReporters: CoverageReporters;
+ coverageThreshold: CoverageThreshold;
+ dependencyExtractor: string;
+ detectLeaks: boolean;
+ detectOpenHandles: boolean;
+ displayName: string | DisplayName;
+ expand: boolean;
+ extensionsToTreatAsEsm: Array<Path>;
+ extraGlobals: Array<string>;
+ filter: Path;
+ findRelatedTests: boolean;
+ forceCoverageMatch: Array<Glob>;
+ forceExit: boolean;
+ json: boolean;
+ globals: ConfigGlobals;
+ globalSetup: string | null | undefined;
+ globalTeardown: string | null | undefined;
+ haste: HasteConfig;
+ injectGlobals: boolean;
+ reporters: Array<string | ReporterConfig>;
+ logHeapUsage: boolean;
+ lastCommit: boolean;
+ listTests: boolean;
+ maxConcurrency: number;
+ maxWorkers: number | string;
+ moduleDirectories: Array<string>;
+ moduleFileExtensions: Array<string>;
+ moduleLoader: Path;
+ moduleNameMapper: {
+ [key: string]: string | Array<string>;
+ };
+ modulePathIgnorePatterns: Array<string>;
+ modulePaths: Array<string>;
+ name: string;
+ noStackTrace: boolean;
+ notify: boolean;
+ notifyMode: string;
+ onlyChanged: boolean;
+ onlyFailures: boolean;
+ outputFile: Path;
+ passWithNoTests: boolean;
+ /**
+ * @deprecated Use `transformIgnorePatterns` options instead.
+ */
+ preprocessorIgnorePatterns: Array<Glob>;
+ preset: string | null | undefined;
+ prettierPath: string | null | undefined;
+ projects: Array<Glob | InitialProjectOptions>;
+ replname: string | null | undefined;
+ resetMocks: boolean;
+ resetModules: boolean;
+ resolver: Path | null | undefined;
+ restoreMocks: boolean;
+ rootDir: Path;
+ roots: Array<Path>;
+ runner: string;
+ runTestsByPath: boolean;
+ /**
+ * @deprecated Use `transform` options instead.
+ */
+ scriptPreprocessor: string;
+ setupFiles: Array<Path>;
+ /**
+ * @deprecated Use `setupFilesAfterEnv` options instead.
+ */
+ setupTestFrameworkScriptFile: Path;
+ setupFilesAfterEnv: Array<Path>;
+ silent: boolean;
+ skipFilter: boolean;
+ skipNodeResolution: boolean;
+ slowTestThreshold: number;
+ snapshotResolver: Path;
+ snapshotSerializers: Array<Path>;
+ snapshotFormat: PrettyFormatOptions;
+ errorOnDeprecated: boolean;
+ testEnvironment: string;
+ testEnvironmentOptions: Record<string, unknown>;
+ testFailureExitCode: string | number;
+ testLocationInResults: boolean;
+ testMatch: Array<Glob>;
+ testNamePattern: string;
+ /**
+ * @deprecated Use `roots` options instead.
+ */
+ testPathDirs: Array<Path>;
+ testPathIgnorePatterns: Array<string>;
+ testRegex: string | Array<string>;
+ testResultsProcessor: string;
+ testRunner: string;
+ testSequencer: string;
+ testURL: string;
+ testTimeout: number;
+ timers: Timers;
+ transform: {
+ [regex: string]: Path | TransformerConfig;
+ };
+ transformIgnorePatterns: Array<Glob>;
+ watchPathIgnorePatterns: Array<string>;
+ unmockedModulePathPatterns: Array<string>;
+ updateSnapshot: boolean;
+ useStderr: boolean;
+ verbose?: boolean;
+ watch: boolean;
+ watchAll: boolean;
+ watchman: boolean;
+ watchPlugins: Array<string | [string, Record<string, unknown>]>;
+}>;
+export declare type SnapshotUpdateState = 'all' | 'new' | 'none';
+declare type NotifyMode = 'always' | 'failure' | 'success' | 'change' | 'success-change' | 'failure-change';
+export declare type CoverageThresholdValue = {
+ branches?: number;
+ functions?: number;
+ lines?: number;
+ statements?: number;
+};
+declare type CoverageThreshold = {
+ [path: string]: CoverageThresholdValue;
+ global: CoverageThresholdValue;
+};
+export declare type GlobalConfig = {
+ bail: number;
+ changedSince?: string;
+ changedFilesWithAncestor: boolean;
+ collectCoverage: boolean;
+ collectCoverageFrom: Array<Glob>;
+ collectCoverageOnlyFrom?: {
+ [key: string]: boolean;
+ };
+ coverageDirectory: string;
+ coveragePathIgnorePatterns?: Array<string>;
+ coverageProvider: CoverageProvider;
+ coverageReporters: CoverageReporters;
+ coverageThreshold?: CoverageThreshold;
+ detectLeaks: boolean;
+ detectOpenHandles: boolean;
+ expand: boolean;
+ filter?: Path;
+ findRelatedTests: boolean;
+ forceExit: boolean;
+ json: boolean;
+ globalSetup?: string;
+ globalTeardown?: string;
+ lastCommit: boolean;
+ logHeapUsage: boolean;
+ listTests: boolean;
+ maxConcurrency: number;
+ maxWorkers: number;
+ noStackTrace: boolean;
+ nonFlagArgs: Array<string>;
+ noSCM?: boolean;
+ notify: boolean;
+ notifyMode: NotifyMode;
+ outputFile?: Path;
+ onlyChanged: boolean;
+ onlyFailures: boolean;
+ passWithNoTests: boolean;
+ projects: Array<Glob>;
+ replname?: string;
+ reporters?: Array<string | ReporterConfig>;
+ runTestsByPath: boolean;
+ rootDir: Path;
+ silent?: boolean;
+ skipFilter: boolean;
+ snapshotFormat: PrettyFormatOptions;
+ errorOnDeprecated: boolean;
+ testFailureExitCode: number;
+ testNamePattern?: string;
+ testPathPattern: string;
+ testResultsProcessor?: string;
+ testSequencer: string;
+ testTimeout?: number;
+ updateSnapshot: SnapshotUpdateState;
+ useStderr: boolean;
+ verbose?: boolean;
+ watch: boolean;
+ watchAll: boolean;
+ watchman: boolean;
+ watchPlugins?: Array<{
+ path: string;
+ config: Record<string, unknown>;
+ }> | null;
+};
+export declare type ProjectConfig = {
+ automock: boolean;
+ cache: boolean;
+ cacheDirectory: Path;
+ clearMocks: boolean;
+ coveragePathIgnorePatterns: Array<string>;
+ cwd: Path;
+ dependencyExtractor?: string;
+ detectLeaks: boolean;
+ detectOpenHandles: boolean;
+ displayName?: DisplayName;
+ errorOnDeprecated: boolean;
+ extensionsToTreatAsEsm: Array<Path>;
+ extraGlobals: Array<keyof typeof globalThis>;
+ filter?: Path;
+ forceCoverageMatch: Array<Glob>;
+ globalSetup?: string;
+ globalTeardown?: string;
+ globals: ConfigGlobals;
+ haste: HasteConfig;
+ injectGlobals: boolean;
+ moduleDirectories: Array<string>;
+ moduleFileExtensions: Array<string>;
+ moduleLoader?: Path;
+ moduleNameMapper: Array<[string, string]>;
+ modulePathIgnorePatterns: Array<string>;
+ modulePaths?: Array<string>;
+ name: string;
+ prettierPath: string;
+ resetMocks: boolean;
+ resetModules: boolean;
+ resolver?: Path;
+ restoreMocks: boolean;
+ rootDir: Path;
+ roots: Array<Path>;
+ runner: string;
+ setupFiles: Array<Path>;
+ setupFilesAfterEnv: Array<Path>;
+ skipFilter: boolean;
+ skipNodeResolution?: boolean;
+ slowTestThreshold: number;
+ snapshotResolver?: Path;
+ snapshotSerializers: Array<Path>;
+ snapshotFormat: PrettyFormatOptions;
+ testEnvironment: string;
+ testEnvironmentOptions: Record<string, unknown>;
+ testMatch: Array<Glob>;
+ testLocationInResults: boolean;
+ testPathIgnorePatterns: Array<string>;
+ testRegex: Array<string | RegExp>;
+ testRunner: string;
+ testURL: string;
+ timers: Timers;
+ transform: Array<[string, Path, Record<string, unknown>]>;
+ transformIgnorePatterns: Array<Glob>;
+ watchPathIgnorePatterns: Array<string>;
+ unmockedModulePathPatterns?: Array<string>;
+};
+export declare type Argv = Arguments<Partial<{
+ all: boolean;
+ automock: boolean;
+ bail: boolean | number;
+ cache: boolean;
+ cacheDirectory: string;
+ changedFilesWithAncestor: boolean;
+ changedSince: string;
+ ci: boolean;
+ clearCache: boolean;
+ clearMocks: boolean;
+ collectCoverage: boolean;
+ collectCoverageFrom: string;
+ collectCoverageOnlyFrom: Array<string>;
+ color: boolean;
+ colors: boolean;
+ config: string;
+ coverage: boolean;
+ coverageDirectory: string;
+ coveragePathIgnorePatterns: Array<string>;
+ coverageReporters: Array<string>;
+ coverageThreshold: string;
+ debug: boolean;
+ env: string;
+ expand: boolean;
+ findRelatedTests: boolean;
+ forceExit: boolean;
+ globals: string;
+ globalSetup: string | null | undefined;
+ globalTeardown: string | null | undefined;
+ haste: string;
+ init: boolean;
+ injectGlobals: boolean;
+ json: boolean;
+ lastCommit: boolean;
+ logHeapUsage: boolean;
+ maxWorkers: number | string;
+ moduleDirectories: Array<string>;
+ moduleFileExtensions: Array<string>;
+ moduleNameMapper: string;
+ modulePathIgnorePatterns: Array<string>;
+ modulePaths: Array<string>;
+ noStackTrace: boolean;
+ notify: boolean;
+ notifyMode: string;
+ onlyChanged: boolean;
+ onlyFailures: boolean;
+ outputFile: string;
+ preset: string | null | undefined;
+ projects: Array<string>;
+ prettierPath: string | null | undefined;
+ resetMocks: boolean;
+ resetModules: boolean;
+ resolver: string | null | undefined;
+ restoreMocks: boolean;
+ rootDir: string;
+ roots: Array<string>;
+ runInBand: boolean;
+ selectProjects: Array<string>;
+ setupFiles: Array<string>;
+ setupFilesAfterEnv: Array<string>;
+ showConfig: boolean;
+ silent: boolean;
+ snapshotSerializers: Array<string>;
+ testEnvironment: string;
+ testEnvironmentOptions: string;
+ testFailureExitCode: string | null | undefined;
+ testMatch: Array<string>;
+ testNamePattern: string;
+ testPathIgnorePatterns: Array<string>;
+ testPathPattern: Array<string>;
+ testRegex: string | Array<string>;
+ testResultsProcessor: string;
+ testRunner: string;
+ testSequencer: string;
+ testURL: string;
+ testTimeout: number | null | undefined;
+ timers: string;
+ transform: string;
+ transformIgnorePatterns: Array<string>;
+ unmockedModulePathPatterns: Array<string> | null | undefined;
+ updateSnapshot: boolean;
+ useStderr: boolean;
+ verbose: boolean;
+ version: boolean;
+ watch: boolean;
+ watchAll: boolean;
+ watchman: boolean;
+ watchPathIgnorePatterns: Array<string>;
+}>>;
+export {};
diff --git a/node_modules/@jest/types/build/Config.js b/node_modules/@jest/types/build/Config.js
new file mode 100644
index 0000000..ad9a93a
--- /dev/null
+++ b/node_modules/@jest/types/build/Config.js
@@ -0,0 +1 @@
+'use strict';
diff --git a/node_modules/@jest/types/build/Global.d.ts b/node_modules/@jest/types/build/Global.d.ts
new file mode 100644
index 0000000..ed498e5
--- /dev/null
+++ b/node_modules/@jest/types/build/Global.d.ts
@@ -0,0 +1,95 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import type { CoverageMapData } from 'istanbul-lib-coverage';
+export declare type ValidTestReturnValues = void | undefined;
+declare type TestReturnValuePromise = Promise<unknown>;
+declare type TestReturnValueGenerator = Generator<void, unknown, void>;
+export declare type TestReturnValue = ValidTestReturnValues | TestReturnValuePromise;
+export declare type TestContext = Record<string, unknown>;
+export declare type DoneFn = (reason?: string | Error) => void;
+export declare type DoneTakingTestFn = (this: TestContext | undefined, done: DoneFn) => ValidTestReturnValues;
+export declare type PromiseReturningTestFn = (this: TestContext | undefined) => TestReturnValue;
+export declare type GeneratorReturningTestFn = (this: TestContext | undefined) => TestReturnValueGenerator;
+export declare type TestName = string;
+export declare type TestFn = PromiseReturningTestFn | GeneratorReturningTestFn | DoneTakingTestFn;
+export declare type ConcurrentTestFn = () => TestReturnValuePromise;
+export declare type BlockFn = () => void;
+export declare type BlockName = string;
+export declare type HookFn = TestFn;
+export declare type Col = unknown;
+export declare type Row = ReadonlyArray<Col>;
+export declare type Table = ReadonlyArray<Row>;
+export declare type ArrayTable = Table | Row;
+export declare type TemplateTable = TemplateStringsArray;
+export declare type TemplateData = ReadonlyArray<unknown>;
+export declare type EachTable = ArrayTable | TemplateTable;
+export declare type TestCallback = BlockFn | TestFn | ConcurrentTestFn;
+export declare type EachTestFn<EachCallback extends TestCallback> = (...args: ReadonlyArray<any>) => ReturnType<EachCallback>;
+declare type Jasmine = {
+ _DEFAULT_TIMEOUT_INTERVAL?: number;
+ addMatchers: (matchers: Record<string, unknown>) => void;
+};
+declare type Each<EachCallback extends TestCallback> = ((table: EachTable, ...taggedTemplateData: TemplateData) => (name: BlockName | TestName, test: EachTestFn<EachCallback>, timeout?: number) => void) | (() => () => void);
+export interface HookBase {
+ (fn: HookFn, timeout?: number): void;
+}
+export interface ItBase {
+ (testName: TestName, fn: TestFn, timeout?: number): void;
+ each: Each<TestFn>;
+}
+export interface It extends ItBase {
+ only: ItBase;
+ skip: ItBase;
+ todo: (testName: TestName) => void;
+}
+export interface ItConcurrentBase {
+ (testName: TestName, testFn: ConcurrentTestFn, timeout?: number): void;
+ each: Each<ConcurrentTestFn>;
+}
+export interface ItConcurrentExtended extends ItConcurrentBase {
+ only: ItConcurrentBase;
+ skip: ItConcurrentBase;
+}
+export interface ItConcurrent extends It {
+ concurrent: ItConcurrentExtended;
+}
+export interface DescribeBase {
+ (blockName: BlockName, blockFn: BlockFn): void;
+ each: Each<BlockFn>;
+}
+export interface Describe extends DescribeBase {
+ only: DescribeBase;
+ skip: DescribeBase;
+}
+export interface TestFrameworkGlobals {
+ it: ItConcurrent;
+ test: ItConcurrent;
+ fit: ItBase & {
+ concurrent?: ItConcurrentBase;
+ };
+ xit: ItBase;
+ xtest: ItBase;
+ describe: Describe;
+ xdescribe: DescribeBase;
+ fdescribe: DescribeBase;
+ beforeAll: HookBase;
+ beforeEach: HookBase;
+ afterEach: HookBase;
+ afterAll: HookBase;
+}
+export interface GlobalAdditions extends TestFrameworkGlobals {
+ __coverage__: CoverageMapData;
+ jasmine: Jasmine;
+ fail: () => void;
+ pending: () => void;
+ spyOn: () => void;
+ spyOnProperty: () => void;
+}
+export interface Global extends GlobalAdditions, Omit<typeof globalThis, keyof GlobalAdditions> {
+ [extras: string]: unknown;
+}
+export {};
diff --git a/node_modules/@jest/types/build/Global.js b/node_modules/@jest/types/build/Global.js
new file mode 100644
index 0000000..ad9a93a
--- /dev/null
+++ b/node_modules/@jest/types/build/Global.js
@@ -0,0 +1 @@
+'use strict';
diff --git a/node_modules/@jest/types/build/TestResult.d.ts b/node_modules/@jest/types/build/TestResult.d.ts
new file mode 100644
index 0000000..a05dca9
--- /dev/null
+++ b/node_modules/@jest/types/build/TestResult.d.ts
@@ -0,0 +1,31 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+export declare type Milliseconds = number;
+declare type Status = 'passed' | 'failed' | 'skipped' | 'pending' | 'todo' | 'disabled';
+declare type Callsite = {
+ column: number;
+ line: number;
+};
+export declare type AssertionResult = {
+ ancestorTitles: Array<string>;
+ duration?: Milliseconds | null;
+ failureDetails: Array<unknown>;
+ failureMessages: Array<string>;
+ fullName: string;
+ invocations?: number;
+ location?: Callsite | null;
+ numPassingAsserts: number;
+ status: Status;
+ title: string;
+};
+export declare type SerializableError = {
+ code?: unknown;
+ message: string;
+ stack: string | null | undefined;
+ type?: string;
+};
+export {};
diff --git a/node_modules/@jest/types/build/TestResult.js b/node_modules/@jest/types/build/TestResult.js
new file mode 100644
index 0000000..ad9a93a
--- /dev/null
+++ b/node_modules/@jest/types/build/TestResult.js
@@ -0,0 +1 @@
+'use strict';
diff --git a/node_modules/@jest/types/build/Transform.d.ts b/node_modules/@jest/types/build/Transform.d.ts
new file mode 100644
index 0000000..69abd92
--- /dev/null
+++ b/node_modules/@jest/types/build/Transform.d.ts
@@ -0,0 +1,11 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+export declare type TransformResult = {
+ code: string;
+ originalCode: string;
+ sourceMapPath: string | null;
+};
diff --git a/node_modules/@jest/types/build/Transform.js b/node_modules/@jest/types/build/Transform.js
new file mode 100644
index 0000000..ad9a93a
--- /dev/null
+++ b/node_modules/@jest/types/build/Transform.js
@@ -0,0 +1 @@
+'use strict';
diff --git a/node_modules/@jest/types/build/index.d.ts b/node_modules/@jest/types/build/index.d.ts
new file mode 100644
index 0000000..be82158
--- /dev/null
+++ b/node_modules/@jest/types/build/index.d.ts
@@ -0,0 +1,12 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import type * as Circus from './Circus';
+import type * as Config from './Config';
+import type * as Global from './Global';
+import type * as TestResult from './TestResult';
+import type * as TransformTypes from './Transform';
+export type { Circus, Config, Global, TestResult, TransformTypes };
diff --git a/node_modules/@jest/types/build/index.js b/node_modules/@jest/types/build/index.js
new file mode 100644
index 0000000..ad9a93a
--- /dev/null
+++ b/node_modules/@jest/types/build/index.js
@@ -0,0 +1 @@
+'use strict';
diff --git a/node_modules/@jest/types/package.json b/node_modules/@jest/types/package.json
new file mode 100644
index 0000000..9f7100a
--- /dev/null
+++ b/node_modules/@jest/types/package.json
@@ -0,0 +1,37 @@
+{
+ "name": "@jest/types",
+ "version": "27.5.1",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/facebook/jest.git",
+ "directory": "packages/jest-types"
+ },
+ "engines": {
+ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ },
+ "license": "MIT",
+ "main": "./build/index.js",
+ "types": "./build/index.d.ts",
+ "exports": {
+ ".": {
+ "types": "./build/index.d.ts",
+ "default": "./build/index.js"
+ },
+ "./package.json": "./package.json"
+ },
+ "dependencies": {
+ "@types/istanbul-lib-coverage": "^2.0.0",
+ "@types/istanbul-reports": "^3.0.0",
+ "@types/node": "*",
+ "@types/yargs": "^16.0.0",
+ "chalk": "^4.0.0"
+ },
+ "devDependencies": {
+ "@tsd/typescript": "~4.1.5",
+ "tsd-lite": "^0.5.1"
+ },
+ "publishConfig": {
+ "access": "public"
+ },
+ "gitHead": "67c1aa20c5fec31366d733e901fee2b981cb1850"
+}