aboutsummaryrefslogtreecommitdiff
path: root/node_modules/jest-config/build
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/jest-config/build')
-rw-r--r--node_modules/jest-config/build/Defaults.d.ts9
-rw-r--r--node_modules/jest-config/build/Defaults.js125
-rw-r--r--node_modules/jest-config/build/Deprecated.d.ts9
-rw-r--r--node_modules/jest-config/build/Deprecated.js98
-rw-r--r--node_modules/jest-config/build/Descriptions.d.ts11
-rw-r--r--node_modules/jest-config/build/Descriptions.js107
-rw-r--r--node_modules/jest-config/build/ReporterValidationErrors.d.ts19
-rw-r--r--node_modules/jest-config/build/ReporterValidationErrors.js138
-rw-r--r--node_modules/jest-config/build/ValidConfig.d.ts9
-rw-r--r--node_modules/jest-config/build/ValidConfig.js199
-rw-r--r--node_modules/jest-config/build/color.d.ts10
-rw-r--r--node_modules/jest-config/build/color.js37
-rw-r--r--node_modules/jest-config/build/constants.d.ts17
-rw-r--r--node_modules/jest-config/build/constants.js104
-rw-r--r--node_modules/jest-config/build/getCacheDirectory.d.ts9
-rw-r--r--node_modules/jest-config/build/getCacheDirectory.js104
-rw-r--r--node_modules/jest-config/build/getMaxWorkers.d.ts8
-rw-r--r--node_modules/jest-config/build/getMaxWorkers.js65
-rw-r--r--node_modules/jest-config/build/index.d.ts28
-rw-r--r--node_modules/jest-config/build/index.js495
-rw-r--r--node_modules/jest-config/build/normalize.d.ts13
-rw-r--r--node_modules/jest-config/build/normalize.js1372
-rw-r--r--node_modules/jest-config/build/readConfigFileAndSetRootDir.d.ts8
-rw-r--r--node_modules/jest-config/build/readConfigFileAndSetRootDir.js204
-rw-r--r--node_modules/jest-config/build/resolveConfigPath.d.ts8
-rw-r--r--node_modules/jest-config/build/resolveConfigPath.js247
-rw-r--r--node_modules/jest-config/build/setFromArgv.d.ts8
-rw-r--r--node_modules/jest-config/build/setFromArgv.js68
-rw-r--r--node_modules/jest-config/build/utils.d.ts27
-rw-r--r--node_modules/jest-config/build/utils.js209
-rw-r--r--node_modules/jest-config/build/validatePattern.d.ts7
-rw-r--r--node_modules/jest-config/build/validatePattern.js25
32 files changed, 3797 insertions, 0 deletions
diff --git a/node_modules/jest-config/build/Defaults.d.ts b/node_modules/jest-config/build/Defaults.d.ts
new file mode 100644
index 0000000..8a26ee6
--- /dev/null
+++ b/node_modules/jest-config/build/Defaults.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 defaultOptions: Config.DefaultOptions;
+export default defaultOptions;
diff --git a/node_modules/jest-config/build/Defaults.js b/node_modules/jest-config/build/Defaults.js
new file mode 100644
index 0000000..988fd9f
--- /dev/null
+++ b/node_modules/jest-config/build/Defaults.js
@@ -0,0 +1,125 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+
+function _path() {
+ const data = require('path');
+
+ _path = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _ciInfo() {
+ const data = require('ci-info');
+
+ _ciInfo = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestRegexUtil() {
+ const data = require('jest-regex-util');
+
+ _jestRegexUtil = function () {
+ return data;
+ };
+
+ return data;
+}
+
+var _constants = require('./constants');
+
+var _getCacheDirectory = _interopRequireDefault(require('./getCacheDirectory'));
+
+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 NODE_MODULES_REGEXP = (0, _jestRegexUtil().replacePathSepForRegex)(
+ _constants.NODE_MODULES
+);
+const defaultOptions = {
+ automock: false,
+ bail: 0,
+ cache: true,
+ cacheDirectory: (0, _getCacheDirectory.default)(),
+ changedFilesWithAncestor: false,
+ ci: _ciInfo().isCI,
+ clearMocks: false,
+ collectCoverage: false,
+ coveragePathIgnorePatterns: [NODE_MODULES_REGEXP],
+ coverageProvider: 'babel',
+ coverageReporters: ['json', 'text', 'lcov', 'clover'],
+ detectLeaks: false,
+ detectOpenHandles: false,
+ errorOnDeprecated: false,
+ expand: false,
+ extensionsToTreatAsEsm: [],
+ forceCoverageMatch: [],
+ globals: {},
+ haste: {
+ computeSha1: false,
+ enableSymlinks: false,
+ forceNodeFilesystemAPI: false,
+ throwOnModuleCollision: false
+ },
+ injectGlobals: true,
+ listTests: false,
+ maxConcurrency: 5,
+ maxWorkers: '50%',
+ moduleDirectories: ['node_modules'],
+ moduleFileExtensions: ['js', 'jsx', 'ts', 'tsx', 'json', 'node'],
+ moduleNameMapper: {},
+ modulePathIgnorePatterns: [],
+ noStackTrace: false,
+ notify: false,
+ notifyMode: 'failure-change',
+ passWithNoTests: false,
+ prettierPath: 'prettier',
+ resetMocks: false,
+ resetModules: false,
+ restoreMocks: false,
+ roots: ['<rootDir>'],
+ runTestsByPath: false,
+ runner: 'jest-runner',
+ setupFiles: [],
+ setupFilesAfterEnv: [],
+ skipFilter: false,
+ slowTestThreshold: 5,
+ snapshotSerializers: [],
+ testEnvironment: 'jest-environment-node',
+ testEnvironmentOptions: {},
+ testFailureExitCode: 1,
+ testLocationInResults: false,
+ testMatch: ['**/__tests__/**/*.[jt]s?(x)', '**/?(*.)+(spec|test).[tj]s?(x)'],
+ testPathIgnorePatterns: [NODE_MODULES_REGEXP],
+ testRegex: [],
+ testRunner: 'jest-circus/runner',
+ testSequencer: '@jest/test-sequencer',
+ testURL: 'http://localhost',
+ timers: 'real',
+ transformIgnorePatterns: [
+ NODE_MODULES_REGEXP,
+ `\\.pnp\\.[^\\${_path().sep}]+$`
+ ],
+ useStderr: false,
+ watch: false,
+ watchPathIgnorePatterns: [],
+ watchman: true
+};
+var _default = defaultOptions;
+exports.default = _default;
diff --git a/node_modules/jest-config/build/Deprecated.d.ts b/node_modules/jest-config/build/Deprecated.d.ts
new file mode 100644
index 0000000..4c05472
--- /dev/null
+++ b/node_modules/jest-config/build/Deprecated.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 { DeprecatedOptions } from 'jest-validate';
+declare const deprecatedOptions: DeprecatedOptions;
+export default deprecatedOptions;
diff --git a/node_modules/jest-config/build/Deprecated.js b/node_modules/jest-config/build/Deprecated.js
new file mode 100644
index 0000000..1ba4fc1
--- /dev/null
+++ b/node_modules/jest-config/build/Deprecated.js
@@ -0,0 +1,98 @@
+'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 _prettyFormat() {
+ const data = require('pretty-format');
+
+ _prettyFormat = 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 format = value =>
+ (0, _prettyFormat().format)(value, {
+ min: true
+ });
+
+const deprecatedOptions = {
+ browser: () =>
+ ` Option ${_chalk().default.bold(
+ '"browser"'
+ )} has been deprecated. Please install "browser-resolve" and use the "resolver" option in Jest configuration as shown in the documentation: https://jestjs.io/docs/configuration#resolver-string`,
+ preprocessorIgnorePatterns: options => ` Option ${_chalk().default.bold(
+ '"preprocessorIgnorePatterns"'
+ )} was replaced by ${_chalk().default.bold(
+ '"transformIgnorePatterns"'
+ )}, which support multiple preprocessors.
+
+ Jest now treats your current configuration as:
+ {
+ ${_chalk().default.bold(
+ '"transformIgnorePatterns"'
+ )}: ${_chalk().default.bold(format(options.preprocessorIgnorePatterns))}
+ }
+
+ Please update your configuration.`,
+ scriptPreprocessor: options => ` Option ${_chalk().default.bold(
+ '"scriptPreprocessor"'
+ )} was replaced by ${_chalk().default.bold(
+ '"transform"'
+ )}, which support multiple preprocessors.
+
+ Jest now treats your current configuration as:
+ {
+ ${_chalk().default.bold('"transform"')}: ${_chalk().default.bold(
+ `{".*": ${format(options.scriptPreprocessor)}}`
+ )}
+ }
+
+ Please update your configuration.`,
+ setupTestFrameworkScriptFile: _options => ` Option ${_chalk().default.bold(
+ '"setupTestFrameworkScriptFile"'
+ )} was replaced by configuration ${_chalk().default.bold(
+ '"setupFilesAfterEnv"'
+ )}, which supports multiple paths.
+
+ Please update your configuration.`,
+ testPathDirs: options => ` Option ${_chalk().default.bold(
+ '"testPathDirs"'
+ )} was replaced by ${_chalk().default.bold('"roots"')}.
+
+ Jest now treats your current configuration as:
+ {
+ ${_chalk().default.bold('"roots"')}: ${_chalk().default.bold(
+ format(options.testPathDirs)
+ )}
+ }
+
+ Please update your configuration.
+ `
+};
+var _default = deprecatedOptions;
+exports.default = _default;
diff --git a/node_modules/jest-config/build/Descriptions.d.ts b/node_modules/jest-config/build/Descriptions.d.ts
new file mode 100644
index 0000000..acf6e3b
--- /dev/null
+++ b/node_modules/jest-config/build/Descriptions.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';
+declare const descriptions: {
+ [key in keyof Config.InitialOptions]: string;
+};
+export default descriptions;
diff --git a/node_modules/jest-config/build/Descriptions.js b/node_modules/jest-config/build/Descriptions.js
new file mode 100644
index 0000000..1c05241
--- /dev/null
+++ b/node_modules/jest-config/build/Descriptions.js
@@ -0,0 +1,107 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = 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 descriptions = {
+ automock: 'All imported modules in your tests should be mocked automatically',
+ bail: 'Stop running tests after `n` failures',
+ cacheDirectory:
+ 'The directory where Jest should store its cached dependency information',
+ clearMocks:
+ 'Automatically clear mock calls, instances and results before every test',
+ collectCoverage:
+ 'Indicates whether the coverage information should be collected while executing the test',
+ collectCoverageFrom:
+ 'An array of glob patterns indicating a set of files for which coverage information should be collected',
+ coverageDirectory:
+ 'The directory where Jest should output its coverage files',
+ coveragePathIgnorePatterns:
+ 'An array of regexp pattern strings used to skip coverage collection',
+ coverageProvider:
+ 'Indicates which provider should be used to instrument code for coverage',
+ coverageReporters:
+ 'A list of reporter names that Jest uses when writing coverage reports',
+ coverageThreshold:
+ 'An object that configures minimum threshold enforcement for coverage results',
+ dependencyExtractor: 'A path to a custom dependency extractor',
+ errorOnDeprecated:
+ 'Make calling deprecated APIs throw helpful error messages',
+ forceCoverageMatch:
+ 'Force coverage collection from ignored files using an array of glob patterns',
+ globalSetup:
+ 'A path to a module which exports an async function that is triggered once before all test suites',
+ globalTeardown:
+ 'A path to a module which exports an async function that is triggered once after all test suites',
+ globals:
+ 'A set of global variables that need to be available in all test environments',
+ maxWorkers:
+ 'The maximum amount of workers used to run your tests. Can be specified as % or a number. E.g. maxWorkers: 10% will use 10% of your CPU amount + 1 as the maximum worker number. maxWorkers: 2 will use a maximum of 2 workers.',
+ moduleDirectories:
+ "An array of directory names to be searched recursively up from the requiring module's location",
+ moduleFileExtensions: 'An array of file extensions your modules use',
+ moduleNameMapper:
+ 'A map from regular expressions to module names or to arrays of module names that allow to stub out resources with a single module',
+ modulePathIgnorePatterns:
+ "An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader",
+ notify: 'Activates notifications for test results',
+ notifyMode:
+ 'An enum that specifies notification mode. Requires { notify: true }',
+ preset: "A preset that is used as a base for Jest's configuration",
+ projects: 'Run tests from one or more projects',
+ reporters: 'Use this configuration option to add custom reporters to Jest',
+ resetMocks: 'Automatically reset mock state before every test',
+ resetModules: 'Reset the module registry before running each individual test',
+ resolver: 'A path to a custom resolver',
+ restoreMocks:
+ 'Automatically restore mock state and implementation before every test',
+ rootDir:
+ 'The root directory that Jest should scan for tests and modules within',
+ roots:
+ 'A list of paths to directories that Jest should use to search for files in',
+ runner:
+ "Allows you to use a custom runner instead of Jest's default test runner",
+ setupFiles:
+ 'The paths to modules that run some code to configure or set up the testing environment before each test',
+ setupFilesAfterEnv:
+ 'A list of paths to modules that run some code to configure or set up the testing framework before each test',
+ slowTestThreshold:
+ 'The number of seconds after which a test is considered as slow and reported as such in the results.',
+ snapshotSerializers:
+ 'A list of paths to snapshot serializer modules Jest should use for snapshot testing',
+ testEnvironment: 'The test environment that will be used for testing',
+ testEnvironmentOptions: 'Options that will be passed to the testEnvironment',
+ testLocationInResults: 'Adds a location field to test results',
+ testMatch: 'The glob patterns Jest uses to detect test files',
+ testPathIgnorePatterns:
+ 'An array of regexp pattern strings that are matched against all test paths, matched tests are skipped',
+ testRegex:
+ 'The regexp pattern or array of patterns that Jest uses to detect test files',
+ testResultsProcessor:
+ 'This option allows the use of a custom results processor',
+ testRunner: 'This option allows use of a custom test runner',
+ testURL:
+ 'This option sets the URL for the jsdom environment. It is reflected in properties such as location.href',
+ timers:
+ 'Setting this value to "fake" allows the use of fake timers for functions such as "setTimeout"',
+ transform: 'A map from regular expressions to paths to transformers',
+ transformIgnorePatterns:
+ 'An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation',
+ unmockedModulePathPatterns:
+ 'An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them',
+ verbose:
+ 'Indicates whether each individual test should be reported during the run',
+ watchPathIgnorePatterns:
+ 'An array of regexp patterns that are matched against all source file paths before re-running tests in watch mode',
+ watchman: 'Whether to use watchman for file crawling'
+};
+var _default = descriptions;
+exports.default = _default;
diff --git a/node_modules/jest-config/build/ReporterValidationErrors.d.ts b/node_modules/jest-config/build/ReporterValidationErrors.d.ts
new file mode 100644
index 0000000..642fdae
--- /dev/null
+++ b/node_modules/jest-config/build/ReporterValidationErrors.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 { Config } from '@jest/types';
+import { ValidationError } from 'jest-validate';
+/**
+ * Reporter Validation Error is thrown if the given arguments
+ * within the reporter are not valid.
+ *
+ * This is a highly specific reporter error and in the future will be
+ * merged with jest-validate. Till then, we can make use of it. It works
+ * and that's what counts most at this time.
+ */
+export declare function createReporterError(reporterIndex: number, reporterValue: Array<Config.ReporterConfig> | string): ValidationError;
+export declare function createArrayReporterError(arrayReporter: Config.ReporterConfig, reporterIndex: number, valueIndex: number, value: string | Record<string, unknown>, expectedType: string, valueName: string): ValidationError;
+export declare function validateReporters(reporterConfig: Array<Config.ReporterConfig | string>): boolean;
diff --git a/node_modules/jest-config/build/ReporterValidationErrors.js b/node_modules/jest-config/build/ReporterValidationErrors.js
new file mode 100644
index 0000000..9e576e6
--- /dev/null
+++ b/node_modules/jest-config/build/ReporterValidationErrors.js
@@ -0,0 +1,138 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.createArrayReporterError = createArrayReporterError;
+exports.createReporterError = createReporterError;
+exports.validateReporters = validateReporters;
+
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+
+ _chalk = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestGetType() {
+ const data = require('jest-get-type');
+
+ _jestGetType = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestValidate() {
+ const data = require('jest-validate');
+
+ _jestValidate = 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 validReporterTypes = ['array', 'string'];
+const ERROR = `${_utils.BULLET}Reporter Validation Error`;
+/**
+ * Reporter Validation Error is thrown if the given arguments
+ * within the reporter are not valid.
+ *
+ * This is a highly specific reporter error and in the future will be
+ * merged with jest-validate. Till then, we can make use of it. It works
+ * and that's what counts most at this time.
+ */
+
+function createReporterError(reporterIndex, reporterValue) {
+ const errorMessage =
+ ` Reporter at index ${reporterIndex} must be of type:\n` +
+ ` ${_chalk().default.bold.green(validReporterTypes.join(' or '))}\n` +
+ ' but instead received:\n' +
+ ` ${_chalk().default.bold.red(
+ (0, _jestGetType().getType)(reporterValue)
+ )}`;
+ return new (_jestValidate().ValidationError)(
+ ERROR,
+ errorMessage,
+ _utils.DOCUMENTATION_NOTE
+ );
+}
+
+function createArrayReporterError(
+ arrayReporter,
+ reporterIndex,
+ valueIndex,
+ value,
+ expectedType,
+ valueName
+) {
+ const errorMessage =
+ ` Unexpected value for ${valueName} ` +
+ `at index ${valueIndex} of reporter at index ${reporterIndex}\n` +
+ ' Expected:\n' +
+ ` ${_chalk().default.bold.red(expectedType)}\n` +
+ ' Got:\n' +
+ ` ${_chalk().default.bold.green((0, _jestGetType().getType)(value))}\n` +
+ ' Reporter configuration:\n' +
+ ` ${_chalk().default.bold.green(
+ JSON.stringify(arrayReporter, null, 2).split('\n').join('\n ')
+ )}`;
+ return new (_jestValidate().ValidationError)(
+ ERROR,
+ errorMessage,
+ _utils.DOCUMENTATION_NOTE
+ );
+}
+
+function validateReporters(reporterConfig) {
+ return reporterConfig.every((reporter, index) => {
+ if (Array.isArray(reporter)) {
+ validateArrayReporter(reporter, index);
+ } else if (typeof reporter !== 'string') {
+ throw createReporterError(index, reporter);
+ }
+
+ return true;
+ });
+}
+
+function validateArrayReporter(arrayReporter, reporterIndex) {
+ const [path, options] = arrayReporter;
+
+ if (typeof path !== 'string') {
+ throw createArrayReporterError(
+ arrayReporter,
+ reporterIndex,
+ 0,
+ path,
+ 'string',
+ 'Path'
+ );
+ } else if (typeof options !== 'object') {
+ throw createArrayReporterError(
+ arrayReporter,
+ reporterIndex,
+ 1,
+ options,
+ 'object',
+ 'Reporter Configuration'
+ );
+ }
+}
diff --git a/node_modules/jest-config/build/ValidConfig.d.ts b/node_modules/jest-config/build/ValidConfig.d.ts
new file mode 100644
index 0000000..a58484f
--- /dev/null
+++ b/node_modules/jest-config/build/ValidConfig.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 initialOptions: Config.InitialOptions;
+export default initialOptions;
diff --git a/node_modules/jest-config/build/ValidConfig.js b/node_modules/jest-config/build/ValidConfig.js
new file mode 100644
index 0000000..fcd5815
--- /dev/null
+++ b/node_modules/jest-config/build/ValidConfig.js
@@ -0,0 +1,199 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+
+function _jestRegexUtil() {
+ const data = require('jest-regex-util');
+
+ _jestRegexUtil = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestValidate() {
+ const data = require('jest-validate');
+
+ _jestValidate = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _prettyFormat() {
+ const data = require('pretty-format');
+
+ _prettyFormat = function () {
+ return data;
+ };
+
+ return data;
+}
+
+var _constants = require('./constants');
+
+/**
+ * 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 NODE_MODULES_REGEXP = (0, _jestRegexUtil().replacePathSepForRegex)(
+ _constants.NODE_MODULES
+);
+const initialOptions = {
+ automock: false,
+ bail: (0, _jestValidate().multipleValidOptions)(false, 0),
+ cache: true,
+ cacheDirectory: '/tmp/user/jest',
+ changedFilesWithAncestor: false,
+ changedSince: 'master',
+ ci: false,
+ clearMocks: false,
+ collectCoverage: true,
+ collectCoverageFrom: ['src', '!public'],
+ collectCoverageOnlyFrom: {
+ '<rootDir>/this-directory-is-covered/Covered.js': true
+ },
+ coverageDirectory: 'coverage',
+ coveragePathIgnorePatterns: [NODE_MODULES_REGEXP],
+ coverageProvider: 'v8',
+ coverageReporters: ['json', 'text', 'lcov', 'clover'],
+ coverageThreshold: {
+ global: {
+ branches: 50,
+ functions: 100,
+ lines: 100,
+ statements: 100
+ }
+ },
+ dependencyExtractor: '<rootDir>/dependencyExtractor.js',
+ detectLeaks: false,
+ detectOpenHandles: false,
+ displayName: (0, _jestValidate().multipleValidOptions)('test-config', {
+ color: 'blue',
+ name: 'test-config'
+ }),
+ errorOnDeprecated: false,
+ expand: false,
+ extensionsToTreatAsEsm: [],
+ extraGlobals: [],
+ filter: '<rootDir>/filter.js',
+ forceCoverageMatch: ['**/*.t.js'],
+ forceExit: false,
+ globalSetup: 'setup.js',
+ globalTeardown: 'teardown.js',
+ globals: {
+ __DEV__: true
+ },
+ haste: {
+ computeSha1: true,
+ defaultPlatform: 'ios',
+ enableSymlinks: false,
+ forceNodeFilesystemAPI: false,
+ hasteImplModulePath: '<rootDir>/haste_impl.js',
+ hasteMapModulePath: '',
+ platforms: ['ios', 'android'],
+ throwOnModuleCollision: false
+ },
+ injectGlobals: true,
+ json: false,
+ lastCommit: false,
+ listTests: false,
+ logHeapUsage: true,
+ maxConcurrency: 5,
+ maxWorkers: '50%',
+ moduleDirectories: ['node_modules'],
+ moduleFileExtensions: ['js', 'json', 'jsx', 'ts', 'tsx', 'node'],
+ moduleLoader: '<rootDir>',
+ moduleNameMapper: {
+ '^React$': '<rootDir>/node_modules/react'
+ },
+ modulePathIgnorePatterns: ['<rootDir>/build/'],
+ modulePaths: ['/shared/vendor/modules'],
+ name: 'string',
+ noStackTrace: false,
+ notify: false,
+ notifyMode: 'failure-change',
+ onlyChanged: false,
+ onlyFailures: false,
+ passWithNoTests: false,
+ preset: 'react-native',
+ prettierPath: '<rootDir>/node_modules/prettier',
+ projects: ['project-a', 'project-b/'],
+ reporters: [
+ 'default',
+ 'custom-reporter-1',
+ [
+ 'custom-reporter-2',
+ {
+ configValue: true
+ }
+ ]
+ ],
+ resetMocks: false,
+ resetModules: false,
+ resolver: '<rootDir>/resolver.js',
+ restoreMocks: false,
+ rootDir: '/',
+ roots: ['<rootDir>'],
+ runTestsByPath: false,
+ runner: 'jest-runner',
+ setupFiles: ['<rootDir>/setup.js'],
+ setupFilesAfterEnv: ['<rootDir>/testSetupFile.js'],
+ silent: true,
+ skipFilter: false,
+ skipNodeResolution: false,
+ slowTestThreshold: 5,
+ snapshotFormat: _prettyFormat().DEFAULT_OPTIONS,
+ snapshotResolver: '<rootDir>/snapshotResolver.js',
+ snapshotSerializers: ['my-serializer-module'],
+ testEnvironment: 'jest-environment-jsdom',
+ testEnvironmentOptions: {
+ userAgent: 'Agent/007'
+ },
+ testFailureExitCode: 1,
+ testLocationInResults: false,
+ testMatch: ['**/__tests__/**/*.[jt]s?(x)', '**/?(*.)+(spec|test).[jt]s?(x)'],
+ testNamePattern: 'test signature',
+ testPathIgnorePatterns: [NODE_MODULES_REGEXP],
+ testRegex: (0, _jestValidate().multipleValidOptions)(
+ '(/__tests__/.*|(\\.|/)(test|spec))\\.[jt]sx?$',
+ ['/__tests__/\\.test\\.[jt]sx?$', '/__tests__/\\.spec\\.[jt]sx?$']
+ ),
+ testResultsProcessor: 'processor-node-module',
+ testRunner: 'circus',
+ testSequencer: '@jest/test-sequencer',
+ testTimeout: 5000,
+ testURL: 'http://localhost',
+ timers: 'real',
+ transform: {
+ '\\.js$': '<rootDir>/preprocessor.js'
+ },
+ transformIgnorePatterns: [NODE_MODULES_REGEXP],
+ unmockedModulePathPatterns: ['mock'],
+ updateSnapshot: true,
+ useStderr: false,
+ verbose: false,
+ watch: false,
+ watchAll: false,
+ watchPathIgnorePatterns: ['<rootDir>/e2e/'],
+ watchPlugins: [
+ 'path/to/yourWatchPlugin',
+ [
+ 'jest-watch-typeahead/filename',
+ {
+ key: 'k',
+ prompt: 'do something with my custom prompt'
+ }
+ ]
+ ],
+ watchman: true
+};
+var _default = initialOptions;
+exports.default = _default;
diff --git a/node_modules/jest-config/build/color.d.ts b/node_modules/jest-config/build/color.d.ts
new file mode 100644
index 0000000..e6822a5
--- /dev/null
+++ b/node_modules/jest-config/build/color.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 { ForegroundColor } from 'chalk';
+declare type Color = typeof ForegroundColor;
+export declare const getDisplayNameColor: (seed?: string | undefined) => Color;
+export {};
diff --git a/node_modules/jest-config/build/color.js b/node_modules/jest-config/build/color.js
new file mode 100644
index 0000000..4955faf
--- /dev/null
+++ b/node_modules/jest-config/build/color.js
@@ -0,0 +1,37 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.getDisplayNameColor = void 0;
+
+function _crypto() {
+ const data = require('crypto');
+
+ _crypto = 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.
+ */
+const colors = ['red', 'green', 'yellow', 'blue', 'magenta', 'cyan', 'white'];
+
+const getDisplayNameColor = seed => {
+ if (seed === undefined) {
+ return 'white';
+ }
+
+ const hash = (0, _crypto().createHash)('sha256');
+ hash.update(seed);
+ const num = hash.digest().readUInt32LE(0);
+ return colors[num % colors.length];
+};
+
+exports.getDisplayNameColor = getDisplayNameColor;
diff --git a/node_modules/jest-config/build/constants.d.ts b/node_modules/jest-config/build/constants.d.ts
new file mode 100644
index 0000000..90de36b
--- /dev/null
+++ b/node_modules/jest-config/build/constants.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.
+ */
+export declare const NODE_MODULES: string;
+export declare const DEFAULT_JS_PATTERN = "\\.[jt]sx?$";
+export declare const DEFAULT_REPORTER_LABEL = "default";
+export declare const PACKAGE_JSON = "package.json";
+export declare const JEST_CONFIG_BASE_NAME = "jest.config";
+export declare const JEST_CONFIG_EXT_CJS = ".cjs";
+export declare const JEST_CONFIG_EXT_MJS = ".mjs";
+export declare const JEST_CONFIG_EXT_JS = ".js";
+export declare const JEST_CONFIG_EXT_TS = ".ts";
+export declare const JEST_CONFIG_EXT_JSON = ".json";
+export declare const JEST_CONFIG_EXT_ORDER: readonly string[];
diff --git a/node_modules/jest-config/build/constants.js b/node_modules/jest-config/build/constants.js
new file mode 100644
index 0000000..3b86d59
--- /dev/null
+++ b/node_modules/jest-config/build/constants.js
@@ -0,0 +1,104 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.PACKAGE_JSON =
+ exports.NODE_MODULES =
+ exports.JEST_CONFIG_EXT_TS =
+ exports.JEST_CONFIG_EXT_ORDER =
+ exports.JEST_CONFIG_EXT_MJS =
+ exports.JEST_CONFIG_EXT_JSON =
+ exports.JEST_CONFIG_EXT_JS =
+ exports.JEST_CONFIG_EXT_CJS =
+ exports.JEST_CONFIG_BASE_NAME =
+ exports.DEFAULT_REPORTER_LABEL =
+ exports.DEFAULT_JS_PATTERN =
+ void 0;
+
+function path() {
+ const data = _interopRequireWildcard(require('path'));
+
+ path = 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.
+ */
+const NODE_MODULES = path().sep + 'node_modules' + path().sep;
+exports.NODE_MODULES = NODE_MODULES;
+const DEFAULT_JS_PATTERN = '\\.[jt]sx?$';
+exports.DEFAULT_JS_PATTERN = DEFAULT_JS_PATTERN;
+const DEFAULT_REPORTER_LABEL = 'default';
+exports.DEFAULT_REPORTER_LABEL = DEFAULT_REPORTER_LABEL;
+const PACKAGE_JSON = 'package.json';
+exports.PACKAGE_JSON = PACKAGE_JSON;
+const JEST_CONFIG_BASE_NAME = 'jest.config';
+exports.JEST_CONFIG_BASE_NAME = JEST_CONFIG_BASE_NAME;
+const JEST_CONFIG_EXT_CJS = '.cjs';
+exports.JEST_CONFIG_EXT_CJS = JEST_CONFIG_EXT_CJS;
+const JEST_CONFIG_EXT_MJS = '.mjs';
+exports.JEST_CONFIG_EXT_MJS = JEST_CONFIG_EXT_MJS;
+const JEST_CONFIG_EXT_JS = '.js';
+exports.JEST_CONFIG_EXT_JS = JEST_CONFIG_EXT_JS;
+const JEST_CONFIG_EXT_TS = '.ts';
+exports.JEST_CONFIG_EXT_TS = JEST_CONFIG_EXT_TS;
+const JEST_CONFIG_EXT_JSON = '.json';
+exports.JEST_CONFIG_EXT_JSON = JEST_CONFIG_EXT_JSON;
+const JEST_CONFIG_EXT_ORDER = Object.freeze([
+ JEST_CONFIG_EXT_JS,
+ JEST_CONFIG_EXT_TS,
+ JEST_CONFIG_EXT_MJS,
+ JEST_CONFIG_EXT_CJS,
+ JEST_CONFIG_EXT_JSON
+]);
+exports.JEST_CONFIG_EXT_ORDER = JEST_CONFIG_EXT_ORDER;
diff --git a/node_modules/jest-config/build/getCacheDirectory.d.ts b/node_modules/jest-config/build/getCacheDirectory.d.ts
new file mode 100644
index 0000000..c642e93
--- /dev/null
+++ b/node_modules/jest-config/build/getCacheDirectory.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 getCacheDirectory: () => Config.Path;
+export default getCacheDirectory;
diff --git a/node_modules/jest-config/build/getCacheDirectory.js b/node_modules/jest-config/build/getCacheDirectory.js
new file mode 100644
index 0000000..5373c1c
--- /dev/null
+++ b/node_modules/jest-config/build/getCacheDirectory.js
@@ -0,0 +1,104 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+
+function _os() {
+ const data = require('os');
+
+ _os = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function path() {
+ const data = _interopRequireWildcard(require('path'));
+
+ path = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestUtil() {
+ const data = require('jest-util');
+
+ _jestUtil = 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.
+ */
+const getCacheDirectory = () => {
+ const {getuid} = process;
+ const tmpdirPath = path().join(
+ (0, _jestUtil().tryRealpath)((0, _os().tmpdir)()),
+ 'jest'
+ );
+
+ if (getuid == null) {
+ return tmpdirPath;
+ } else {
+ // On some platforms tmpdir() is `/tmp`, causing conflicts between different
+ // users and permission issues. Adding an additional subdivision by UID can
+ // help.
+ return `${tmpdirPath}_${getuid.call(process).toString(36)}`;
+ }
+};
+
+var _default = getCacheDirectory;
+exports.default = _default;
diff --git a/node_modules/jest-config/build/getMaxWorkers.d.ts b/node_modules/jest-config/build/getMaxWorkers.d.ts
new file mode 100644
index 0000000..81dfedc
--- /dev/null
+++ b/node_modules/jest-config/build/getMaxWorkers.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 getMaxWorkers(argv: Partial<Pick<Config.Argv, 'maxWorkers' | 'runInBand' | 'watch' | 'watchAll'>>, defaultOptions?: Partial<Pick<Config.Argv, 'maxWorkers'>>): number;
diff --git a/node_modules/jest-config/build/getMaxWorkers.js b/node_modules/jest-config/build/getMaxWorkers.js
new file mode 100644
index 0000000..30b7afa
--- /dev/null
+++ b/node_modules/jest-config/build/getMaxWorkers.js
@@ -0,0 +1,65 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = getMaxWorkers;
+
+function _os() {
+ const data = require('os');
+
+ _os = 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 getMaxWorkers(argv, defaultOptions) {
+ if (argv.runInBand) {
+ return 1;
+ } else if (argv.maxWorkers) {
+ return parseWorkers(argv.maxWorkers);
+ } else if (defaultOptions && defaultOptions.maxWorkers) {
+ return parseWorkers(defaultOptions.maxWorkers);
+ } else {
+ var _cpusInfo$length;
+
+ // In watch mode, Jest should be unobtrusive and not use all available CPUs.
+ const cpusInfo = (0, _os().cpus)();
+ const numCpus =
+ (_cpusInfo$length =
+ cpusInfo === null || cpusInfo === void 0 ? void 0 : cpusInfo.length) !==
+ null && _cpusInfo$length !== void 0
+ ? _cpusInfo$length
+ : 1;
+ const isWatchModeEnabled = argv.watch || argv.watchAll;
+ return Math.max(
+ isWatchModeEnabled ? Math.floor(numCpus / 2) : numCpus - 1,
+ 1
+ );
+ }
+}
+
+const parseWorkers = maxWorkers => {
+ const parsed = parseInt(maxWorkers.toString(), 10);
+
+ if (
+ typeof maxWorkers === 'string' &&
+ maxWorkers.trim().endsWith('%') &&
+ parsed > 0 &&
+ parsed <= 100
+ ) {
+ const numCpus = (0, _os().cpus)().length;
+ const workers = Math.floor((parsed / 100) * numCpus);
+ return Math.max(workers, 1);
+ }
+
+ return parsed > 0 ? parsed : 1;
+};
diff --git a/node_modules/jest-config/build/index.d.ts b/node_modules/jest-config/build/index.d.ts
new file mode 100644
index 0000000..d9a107d
--- /dev/null
+++ b/node_modules/jest-config/build/index.d.ts
@@ -0,0 +1,28 @@
+/**
+ * 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 * as constants from './constants';
+export { resolveTestEnvironment as getTestEnvironment } from 'jest-resolve';
+export { isJSONString } from './utils';
+export { default as normalize } from './normalize';
+export { default as deprecationEntries } from './Deprecated';
+export { replaceRootDirInPath } from './utils';
+export { default as defaults } from './Defaults';
+export { default as descriptions } from './Descriptions';
+export { constants };
+declare type ReadConfig = {
+ configPath: Config.Path | null | undefined;
+ globalConfig: Config.GlobalConfig;
+ hasDeprecationWarnings: boolean;
+ projectConfig: Config.ProjectConfig;
+};
+export declare function readConfig(argv: Config.Argv, packageRootOrConfig: Config.Path | Config.InitialOptions, skipArgvConfigOption?: boolean, parentConfigDirname?: Config.Path | null, projectIndex?: number, skipMultipleConfigWarning?: boolean): Promise<ReadConfig>;
+export declare function readConfigs(argv: Config.Argv, projectPaths: Array<Config.Path>): Promise<{
+ globalConfig: Config.GlobalConfig;
+ configs: Array<Config.ProjectConfig>;
+ hasDeprecationWarnings: boolean;
+}>;
diff --git a/node_modules/jest-config/build/index.js b/node_modules/jest-config/build/index.js
new file mode 100644
index 0000000..b346c01
--- /dev/null
+++ b/node_modules/jest-config/build/index.js
@@ -0,0 +1,495 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.constants = void 0;
+Object.defineProperty(exports, 'defaults', {
+ enumerable: true,
+ get: function () {
+ return _Defaults.default;
+ }
+});
+Object.defineProperty(exports, 'deprecationEntries', {
+ enumerable: true,
+ get: function () {
+ return _Deprecated.default;
+ }
+});
+Object.defineProperty(exports, 'descriptions', {
+ enumerable: true,
+ get: function () {
+ return _Descriptions.default;
+ }
+});
+Object.defineProperty(exports, 'getTestEnvironment', {
+ enumerable: true,
+ get: function () {
+ return _jestResolve().resolveTestEnvironment;
+ }
+});
+Object.defineProperty(exports, 'isJSONString', {
+ enumerable: true,
+ get: function () {
+ return _utils.isJSONString;
+ }
+});
+Object.defineProperty(exports, 'normalize', {
+ enumerable: true,
+ get: function () {
+ return _normalize.default;
+ }
+});
+exports.readConfig = readConfig;
+exports.readConfigs = readConfigs;
+Object.defineProperty(exports, 'replaceRootDirInPath', {
+ enumerable: true,
+ get: function () {
+ return _utils.replaceRootDirInPath;
+ }
+});
+
+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 fs() {
+ const data = _interopRequireWildcard(require('graceful-fs'));
+
+ fs = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestUtil() {
+ const data = require('jest-util');
+
+ _jestUtil = function () {
+ return data;
+ };
+
+ return data;
+}
+
+var constants = _interopRequireWildcard(require('./constants'));
+
+exports.constants = constants;
+
+var _normalize = _interopRequireDefault(require('./normalize'));
+
+var _readConfigFileAndSetRootDir = _interopRequireDefault(
+ require('./readConfigFileAndSetRootDir')
+);
+
+var _resolveConfigPath = _interopRequireDefault(require('./resolveConfigPath'));
+
+var _utils = require('./utils');
+
+function _jestResolve() {
+ const data = require('jest-resolve');
+
+ _jestResolve = function () {
+ return data;
+ };
+
+ return data;
+}
+
+var _Deprecated = _interopRequireDefault(require('./Deprecated'));
+
+var _Defaults = _interopRequireDefault(require('./Defaults'));
+
+var _Descriptions = _interopRequireDefault(require('./Descriptions'));
+
+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.
+ */
+// TODO: remove export in Jest 28
+async function readConfig(
+ argv,
+ packageRootOrConfig, // Whether it needs to look into `--config` arg passed to CLI.
+ // It only used to read initial config. If the initial config contains
+ // `project` property, we don't want to read `--config` value and rather
+ // read individual configs for every project.
+ skipArgvConfigOption,
+ parentConfigDirname,
+ projectIndex = Infinity,
+ skipMultipleConfigWarning = false
+) {
+ let rawOptions;
+ let configPath = null;
+
+ if (typeof packageRootOrConfig !== 'string') {
+ if (parentConfigDirname) {
+ rawOptions = packageRootOrConfig;
+ rawOptions.rootDir = rawOptions.rootDir
+ ? (0, _utils.replaceRootDirInPath)(
+ parentConfigDirname,
+ rawOptions.rootDir
+ )
+ : parentConfigDirname;
+ } else {
+ throw new Error(
+ 'Jest: Cannot use configuration as an object without a file path.'
+ );
+ }
+ } else if ((0, _utils.isJSONString)(argv.config)) {
+ // A JSON string was passed to `--config` argument and we can parse it
+ // and use as is.
+ let config;
+
+ try {
+ config = JSON.parse(argv.config);
+ } catch {
+ throw new Error(
+ 'There was an error while parsing the `--config` argument as a JSON string.'
+ );
+ } // NOTE: we might need to resolve this dir to an absolute path in the future
+
+ config.rootDir = config.rootDir || packageRootOrConfig;
+ rawOptions = config; // A string passed to `--config`, which is either a direct path to the config
+ // or a path to directory containing `package.json`, `jest.config.js` or `jest.config.ts`
+ } else if (!skipArgvConfigOption && typeof argv.config == 'string') {
+ configPath = (0, _resolveConfigPath.default)(
+ argv.config,
+ process.cwd(),
+ skipMultipleConfigWarning
+ );
+ rawOptions = await (0, _readConfigFileAndSetRootDir.default)(configPath);
+ } else {
+ // Otherwise just try to find config in the current rootDir.
+ configPath = (0, _resolveConfigPath.default)(
+ packageRootOrConfig,
+ process.cwd(),
+ skipMultipleConfigWarning
+ );
+ rawOptions = await (0, _readConfigFileAndSetRootDir.default)(configPath);
+ }
+
+ const {options, hasDeprecationWarnings} = await (0, _normalize.default)(
+ rawOptions,
+ argv,
+ configPath,
+ projectIndex
+ );
+ const {globalConfig, projectConfig} = groupOptions(options);
+ return {
+ configPath,
+ globalConfig,
+ hasDeprecationWarnings,
+ projectConfig
+ };
+}
+
+const groupOptions = options => ({
+ globalConfig: Object.freeze({
+ bail: options.bail,
+ changedFilesWithAncestor: options.changedFilesWithAncestor,
+ changedSince: options.changedSince,
+ collectCoverage: options.collectCoverage,
+ collectCoverageFrom: options.collectCoverageFrom,
+ collectCoverageOnlyFrom: options.collectCoverageOnlyFrom,
+ coverageDirectory: options.coverageDirectory,
+ coverageProvider: options.coverageProvider,
+ coverageReporters: options.coverageReporters,
+ coverageThreshold: options.coverageThreshold,
+ detectLeaks: options.detectLeaks,
+ detectOpenHandles: options.detectOpenHandles,
+ errorOnDeprecated: options.errorOnDeprecated,
+ expand: options.expand,
+ filter: options.filter,
+ findRelatedTests: options.findRelatedTests,
+ forceExit: options.forceExit,
+ globalSetup: options.globalSetup,
+ globalTeardown: options.globalTeardown,
+ json: options.json,
+ lastCommit: options.lastCommit,
+ listTests: options.listTests,
+ logHeapUsage: options.logHeapUsage,
+ maxConcurrency: options.maxConcurrency,
+ maxWorkers: options.maxWorkers,
+ noSCM: undefined,
+ noStackTrace: options.noStackTrace,
+ nonFlagArgs: options.nonFlagArgs,
+ notify: options.notify,
+ notifyMode: options.notifyMode,
+ onlyChanged: options.onlyChanged,
+ onlyFailures: options.onlyFailures,
+ outputFile: options.outputFile,
+ passWithNoTests: options.passWithNoTests,
+ projects: options.projects,
+ replname: options.replname,
+ reporters: options.reporters,
+ rootDir: options.rootDir,
+ runTestsByPath: options.runTestsByPath,
+ silent: options.silent,
+ skipFilter: options.skipFilter,
+ snapshotFormat: options.snapshotFormat,
+ testFailureExitCode: options.testFailureExitCode,
+ testNamePattern: options.testNamePattern,
+ testPathPattern: options.testPathPattern,
+ testResultsProcessor: options.testResultsProcessor,
+ testSequencer: options.testSequencer,
+ testTimeout: options.testTimeout,
+ updateSnapshot: options.updateSnapshot,
+ useStderr: options.useStderr,
+ verbose: options.verbose,
+ watch: options.watch,
+ watchAll: options.watchAll,
+ watchPlugins: options.watchPlugins,
+ watchman: options.watchman
+ }),
+ projectConfig: Object.freeze({
+ automock: options.automock,
+ cache: options.cache,
+ cacheDirectory: options.cacheDirectory,
+ clearMocks: options.clearMocks,
+ coveragePathIgnorePatterns: options.coveragePathIgnorePatterns,
+ cwd: options.cwd,
+ dependencyExtractor: options.dependencyExtractor,
+ detectLeaks: options.detectLeaks,
+ detectOpenHandles: options.detectOpenHandles,
+ displayName: options.displayName,
+ errorOnDeprecated: options.errorOnDeprecated,
+ extensionsToTreatAsEsm: options.extensionsToTreatAsEsm,
+ extraGlobals: options.extraGlobals,
+ filter: options.filter,
+ forceCoverageMatch: options.forceCoverageMatch,
+ globalSetup: options.globalSetup,
+ globalTeardown: options.globalTeardown,
+ globals: options.globals,
+ haste: options.haste,
+ injectGlobals: options.injectGlobals,
+ moduleDirectories: options.moduleDirectories,
+ moduleFileExtensions: options.moduleFileExtensions,
+ moduleLoader: options.moduleLoader,
+ moduleNameMapper: options.moduleNameMapper,
+ modulePathIgnorePatterns: options.modulePathIgnorePatterns,
+ modulePaths: options.modulePaths,
+ name: options.name,
+ prettierPath: options.prettierPath,
+ resetMocks: options.resetMocks,
+ resetModules: options.resetModules,
+ resolver: options.resolver,
+ restoreMocks: options.restoreMocks,
+ rootDir: options.rootDir,
+ roots: options.roots,
+ runner: options.runner,
+ setupFiles: options.setupFiles,
+ setupFilesAfterEnv: options.setupFilesAfterEnv,
+ skipFilter: options.skipFilter,
+ skipNodeResolution: options.skipNodeResolution,
+ slowTestThreshold: options.slowTestThreshold,
+ snapshotFormat: options.snapshotFormat,
+ snapshotResolver: options.snapshotResolver,
+ snapshotSerializers: options.snapshotSerializers,
+ testEnvironment: options.testEnvironment,
+ testEnvironmentOptions: options.testEnvironmentOptions,
+ testLocationInResults: options.testLocationInResults,
+ testMatch: options.testMatch,
+ testPathIgnorePatterns: options.testPathIgnorePatterns,
+ testRegex: options.testRegex,
+ testRunner: options.testRunner,
+ testURL: options.testURL,
+ timers: options.timers,
+ transform: options.transform,
+ transformIgnorePatterns: options.transformIgnorePatterns,
+ unmockedModulePathPatterns: options.unmockedModulePathPatterns,
+ watchPathIgnorePatterns: options.watchPathIgnorePatterns
+ })
+});
+
+const ensureNoDuplicateConfigs = (parsedConfigs, projects) => {
+ if (projects.length <= 1) {
+ return;
+ }
+
+ const configPathMap = new Map();
+
+ for (const config of parsedConfigs) {
+ const {configPath} = config;
+
+ if (configPathMap.has(configPath)) {
+ const message = `Whoops! Two projects resolved to the same config path: ${_chalk().default.bold(
+ String(configPath)
+ )}:
+
+ Project 1: ${_chalk().default.bold(
+ projects[parsedConfigs.findIndex(x => x === config)]
+ )}
+ Project 2: ${_chalk().default.bold(
+ projects[parsedConfigs.findIndex(x => x === configPathMap.get(configPath))]
+ )}
+
+This usually means that your ${_chalk().default.bold(
+ '"projects"'
+ )} config includes a directory that doesn't have any configuration recognizable by Jest. Please fix it.
+`;
+ throw new Error(message);
+ }
+
+ if (configPath !== null) {
+ configPathMap.set(configPath, config);
+ }
+ }
+}; // Possible scenarios:
+// 1. jest --config config.json
+// 2. jest --projects p1 p2
+// 3. jest --projects p1 p2 --config config.json
+// 4. jest --projects p1
+// 5. jest
+//
+// If no projects are specified, process.cwd() will be used as the default
+// (and only) project.
+
+async function readConfigs(argv, projectPaths) {
+ let globalConfig;
+ let hasDeprecationWarnings;
+ let configs = [];
+ let projects = projectPaths;
+ let configPath;
+
+ if (projectPaths.length === 1) {
+ const parsedConfig = await readConfig(argv, projects[0]);
+ configPath = parsedConfig.configPath;
+ hasDeprecationWarnings = parsedConfig.hasDeprecationWarnings;
+ globalConfig = parsedConfig.globalConfig;
+ configs = [parsedConfig.projectConfig];
+
+ if (globalConfig.projects && globalConfig.projects.length) {
+ // Even though we had one project in CLI args, there might be more
+ // projects defined in the config.
+ // In other words, if this was a single project,
+ // and its config has `projects` settings, use that value instead.
+ projects = globalConfig.projects;
+ }
+ }
+
+ if (projects.length > 0) {
+ const cwd =
+ process.platform === 'win32'
+ ? (0, _jestUtil().tryRealpath)(process.cwd())
+ : process.cwd();
+ const projectIsCwd = projects[0] === cwd;
+ const parsedConfigs = await Promise.all(
+ projects
+ .filter(root => {
+ // Ignore globbed files that cannot be `require`d.
+ if (
+ typeof root === 'string' &&
+ fs().existsSync(root) &&
+ !fs().lstatSync(root).isDirectory() &&
+ !constants.JEST_CONFIG_EXT_ORDER.some(ext => root.endsWith(ext))
+ ) {
+ return false;
+ }
+
+ return true;
+ })
+ .map((root, projectIndex) => {
+ const projectIsTheOnlyProject =
+ projectIndex === 0 && projects.length === 1;
+ const skipArgvConfigOption = !(
+ projectIsTheOnlyProject && projectIsCwd
+ );
+ return readConfig(
+ argv,
+ root,
+ skipArgvConfigOption,
+ configPath ? path().dirname(configPath) : cwd,
+ projectIndex, // we wanna skip the warning if this is the "main" project
+ projectIsCwd
+ );
+ })
+ );
+ ensureNoDuplicateConfigs(parsedConfigs, projects);
+ configs = parsedConfigs.map(({projectConfig}) => projectConfig);
+
+ if (!hasDeprecationWarnings) {
+ hasDeprecationWarnings = parsedConfigs.some(
+ ({hasDeprecationWarnings}) => !!hasDeprecationWarnings
+ );
+ } // If no config was passed initially, use the one from the first project
+
+ if (!globalConfig) {
+ globalConfig = parsedConfigs[0].globalConfig;
+ }
+ }
+
+ if (!globalConfig || !configs.length) {
+ throw new Error('jest: No configuration found for any project.');
+ }
+
+ return {
+ configs,
+ globalConfig,
+ hasDeprecationWarnings: !!hasDeprecationWarnings
+ };
+}
diff --git a/node_modules/jest-config/build/normalize.d.ts b/node_modules/jest-config/build/normalize.d.ts
new file mode 100644
index 0000000..657c94a
--- /dev/null
+++ b/node_modules/jest-config/build/normalize.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 { Config } from '@jest/types';
+declare type AllOptions = Config.ProjectConfig & Config.GlobalConfig;
+export default function normalize(initialOptions: Config.InitialOptions, argv: Config.Argv, configPath?: Config.Path | null, projectIndex?: number): Promise<{
+ hasDeprecationWarnings: boolean;
+ options: AllOptions;
+}>;
+export {};
diff --git a/node_modules/jest-config/build/normalize.js b/node_modules/jest-config/build/normalize.js
new file mode 100644
index 0000000..78f2b20
--- /dev/null
+++ b/node_modules/jest-config/build/normalize.js
@@ -0,0 +1,1372 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = normalize;
+
+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 _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+
+ _chalk = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _deepmerge() {
+ const data = _interopRequireDefault(require('deepmerge'));
+
+ _deepmerge = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _glob() {
+ const data = require('glob');
+
+ _glob = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _gracefulFs() {
+ const data = require('graceful-fs');
+
+ _gracefulFs = 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 _jestResolve() {
+ const data = _interopRequireWildcard(require('jest-resolve'));
+
+ _jestResolve = 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;
+}
+
+var _Defaults = _interopRequireDefault(require('./Defaults'));
+
+var _Deprecated = _interopRequireDefault(require('./Deprecated'));
+
+var _ReporterValidationErrors = require('./ReporterValidationErrors');
+
+var _ValidConfig = _interopRequireDefault(require('./ValidConfig'));
+
+var _color = require('./color');
+
+var _constants = require('./constants');
+
+var _getMaxWorkers = _interopRequireDefault(require('./getMaxWorkers'));
+
+var _setFromArgv = _interopRequireDefault(require('./setFromArgv'));
+
+var _utils = require('./utils');
+
+var _validatePattern = _interopRequireDefault(require('./validatePattern'));
+
+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 ERROR = `${_utils.BULLET}Validation Error`;
+const PRESET_EXTENSIONS = ['.json', '.js', '.cjs', '.mjs'];
+const PRESET_NAME = 'jest-preset';
+
+const createConfigError = message =>
+ new (_jestValidate().ValidationError)(
+ ERROR,
+ message,
+ _utils.DOCUMENTATION_NOTE
+ );
+
+function verifyDirectoryExists(path, key) {
+ try {
+ const rootStat = (0, _gracefulFs().statSync)(path);
+
+ if (!rootStat.isDirectory()) {
+ throw createConfigError(
+ ` ${_chalk().default.bold(path)} in the ${_chalk().default.bold(
+ key
+ )} option is not a directory.`
+ );
+ }
+ } catch (err) {
+ if (err instanceof _jestValidate().ValidationError) {
+ throw err;
+ }
+
+ if (err.code === 'ENOENT') {
+ throw createConfigError(
+ ` Directory ${_chalk().default.bold(
+ path
+ )} in the ${_chalk().default.bold(key)} option was not found.`
+ );
+ } // Not sure in which cases `statSync` can throw, so let's just show the underlying error to the user
+
+ throw createConfigError(
+ ` Got an error trying to find ${_chalk().default.bold(
+ path
+ )} in the ${_chalk().default.bold(key)} option.\n\n Error was: ${
+ err.message
+ }`
+ );
+ }
+} // TS 3.5 forces us to split these into 2
+
+const mergeModuleNameMapperWithPreset = (options, preset) => {
+ if (options['moduleNameMapper'] && preset['moduleNameMapper']) {
+ options['moduleNameMapper'] = {
+ ...options['moduleNameMapper'],
+ ...preset['moduleNameMapper'],
+ ...options['moduleNameMapper']
+ };
+ }
+};
+
+const mergeTransformWithPreset = (options, preset) => {
+ if (options['transform'] && preset['transform']) {
+ options['transform'] = {
+ ...options['transform'],
+ ...preset['transform'],
+ ...options['transform']
+ };
+ }
+};
+
+const mergeGlobalsWithPreset = (options, preset) => {
+ if (options['globals'] && preset['globals']) {
+ options['globals'] = (0, _deepmerge().default)(
+ preset['globals'],
+ options['globals']
+ );
+ }
+};
+
+const setupPreset = async (options, optionsPreset) => {
+ let preset;
+ const presetPath = (0, _utils.replaceRootDirInPath)(
+ options.rootDir,
+ optionsPreset
+ );
+
+ const presetModule = _jestResolve().default.findNodeModule(
+ presetPath.startsWith('.')
+ ? presetPath
+ : path().join(presetPath, PRESET_NAME),
+ {
+ basedir: options.rootDir,
+ extensions: PRESET_EXTENSIONS
+ }
+ );
+
+ try {
+ if (!presetModule) {
+ throw new Error(`Cannot find module '${presetPath}'`);
+ } // Force re-evaluation to support multiple projects
+
+ try {
+ delete require.cache[require.resolve(presetModule)];
+ } catch {}
+
+ preset = await (0, _jestUtil().requireOrImportModule)(presetModule);
+ } catch (error) {
+ if (error instanceof SyntaxError || error instanceof TypeError) {
+ throw createConfigError(
+ ` Preset ${_chalk().default.bold(presetPath)} is invalid:\n\n ${
+ error.message
+ }\n ${error.stack}`
+ );
+ }
+
+ if (error.message.includes('Cannot find module')) {
+ if (error.message.includes(presetPath)) {
+ const preset = _jestResolve().default.findNodeModule(presetPath, {
+ basedir: options.rootDir
+ });
+
+ if (preset) {
+ throw createConfigError(
+ ` Module ${_chalk().default.bold(
+ presetPath
+ )} should have "jest-preset.js" or "jest-preset.json" file at the root.`
+ );
+ }
+
+ throw createConfigError(
+ ` Preset ${_chalk().default.bold(presetPath)} not found.`
+ );
+ }
+
+ throw createConfigError(
+ ` Missing dependency in ${_chalk().default.bold(presetPath)}:\n\n ${
+ error.message
+ }\n ${error.stack}`
+ );
+ }
+
+ throw createConfigError(
+ ` An unknown error occurred in ${_chalk().default.bold(
+ presetPath
+ )}:\n\n ${error.message}\n ${error.stack}`
+ );
+ }
+
+ if (options.setupFiles) {
+ options.setupFiles = (preset.setupFiles || []).concat(options.setupFiles);
+ }
+
+ if (options.setupFilesAfterEnv) {
+ options.setupFilesAfterEnv = (preset.setupFilesAfterEnv || []).concat(
+ options.setupFilesAfterEnv
+ );
+ }
+
+ if (options.modulePathIgnorePatterns && preset.modulePathIgnorePatterns) {
+ options.modulePathIgnorePatterns = preset.modulePathIgnorePatterns.concat(
+ options.modulePathIgnorePatterns
+ );
+ }
+
+ mergeModuleNameMapperWithPreset(options, preset);
+ mergeTransformWithPreset(options, preset);
+ mergeGlobalsWithPreset(options, preset);
+ return {...preset, ...options};
+};
+
+const setupBabelJest = options => {
+ const transform = options.transform;
+ let babelJest;
+
+ if (transform) {
+ const customJSPattern = Object.keys(transform).find(pattern => {
+ const regex = new RegExp(pattern);
+ return regex.test('a.js') || regex.test('a.jsx');
+ });
+ const customTSPattern = Object.keys(transform).find(pattern => {
+ const regex = new RegExp(pattern);
+ return regex.test('a.ts') || regex.test('a.tsx');
+ });
+ [customJSPattern, customTSPattern].forEach(pattern => {
+ if (pattern) {
+ const customTransformer = transform[pattern];
+
+ if (Array.isArray(customTransformer)) {
+ if (customTransformer[0] === 'babel-jest') {
+ babelJest = require.resolve('babel-jest');
+ customTransformer[0] = babelJest;
+ } else if (customTransformer[0].includes('babel-jest')) {
+ babelJest = customTransformer[0];
+ }
+ } else {
+ if (customTransformer === 'babel-jest') {
+ babelJest = require.resolve('babel-jest');
+ transform[pattern] = babelJest;
+ } else if (customTransformer.includes('babel-jest')) {
+ babelJest = customTransformer;
+ }
+ }
+ }
+ });
+ } else {
+ babelJest = require.resolve('babel-jest');
+ options.transform = {
+ [_constants.DEFAULT_JS_PATTERN]: babelJest
+ };
+ }
+};
+
+const normalizeCollectCoverageOnlyFrom = (options, key) => {
+ const initialCollectCoverageFrom = options[key];
+ const collectCoverageOnlyFrom = Array.isArray(initialCollectCoverageFrom)
+ ? initialCollectCoverageFrom // passed from argv
+ : Object.keys(initialCollectCoverageFrom); // passed from options
+
+ return collectCoverageOnlyFrom.reduce((map, filePath) => {
+ filePath = path().resolve(
+ options.rootDir,
+ (0, _utils.replaceRootDirInPath)(options.rootDir, filePath)
+ );
+ map[filePath] = true;
+ return map;
+ }, Object.create(null));
+};
+
+const normalizeCollectCoverageFrom = (options, key) => {
+ const initialCollectCoverageFrom = options[key];
+ let value;
+
+ if (!initialCollectCoverageFrom) {
+ value = [];
+ }
+
+ if (!Array.isArray(initialCollectCoverageFrom)) {
+ try {
+ value = JSON.parse(initialCollectCoverageFrom);
+ } catch {}
+
+ if (options[key] && !Array.isArray(value)) {
+ value = [initialCollectCoverageFrom];
+ }
+ } else {
+ value = initialCollectCoverageFrom;
+ }
+
+ if (value) {
+ value = value.map(filePath =>
+ filePath.replace(/^(!?)(<rootDir>\/)(.*)/, '$1$3')
+ );
+ }
+
+ return value;
+};
+
+const normalizeUnmockedModulePathPatterns = (
+ options,
+ key // _replaceRootDirTags is specifically well-suited for substituting
+) =>
+ // <rootDir> in paths (it deals with properly interpreting relative path
+ // separators, etc).
+ //
+ // For patterns, direct global substitution is far more ideal, so we
+ // special case substitutions for patterns here.
+ options[key].map(pattern =>
+ (0, _jestRegexUtil().replacePathSepForRegex)(
+ pattern.replace(/<rootDir>/g, options.rootDir)
+ )
+ );
+
+const normalizePreprocessor = options => {
+ if (options.scriptPreprocessor && options.transform) {
+ throw createConfigError(` Options: ${_chalk().default.bold(
+ 'scriptPreprocessor'
+ )} and ${_chalk().default.bold('transform')} cannot be used together.
+ Please change your configuration to only use ${_chalk().default.bold(
+ 'transform'
+ )}.`);
+ }
+
+ if (options.preprocessorIgnorePatterns && options.transformIgnorePatterns) {
+ throw createConfigError(` Options ${_chalk().default.bold(
+ 'preprocessorIgnorePatterns'
+ )} and ${_chalk().default.bold(
+ 'transformIgnorePatterns'
+ )} cannot be used together.
+ Please change your configuration to only use ${_chalk().default.bold(
+ 'transformIgnorePatterns'
+ )}.`);
+ }
+
+ if (options.scriptPreprocessor) {
+ options.transform = {
+ '.*': options.scriptPreprocessor
+ };
+ }
+
+ if (options.preprocessorIgnorePatterns) {
+ options.transformIgnorePatterns = options.preprocessorIgnorePatterns;
+ }
+
+ delete options.scriptPreprocessor;
+ delete options.preprocessorIgnorePatterns;
+ return options;
+};
+
+const normalizeMissingOptions = (options, configPath, projectIndex) => {
+ if (!options.name) {
+ options.name = (0, _crypto().createHash)('md5')
+ .update(options.rootDir) // In case we load config from some path that has the same root dir
+ .update(configPath || '')
+ .update(String(projectIndex))
+ .digest('hex');
+ }
+
+ if (!options.setupFiles) {
+ options.setupFiles = [];
+ }
+
+ return options;
+};
+
+const normalizeRootDir = options => {
+ // Assert that there *is* a rootDir
+ if (!options.rootDir) {
+ throw createConfigError(
+ ` Configuration option ${_chalk().default.bold(
+ 'rootDir'
+ )} must be specified.`
+ );
+ }
+
+ options.rootDir = path().normalize(options.rootDir);
+
+ try {
+ // try to resolve windows short paths, ignoring errors (permission errors, mostly)
+ options.rootDir = (0, _jestUtil().tryRealpath)(options.rootDir);
+ } catch {
+ // ignored
+ }
+
+ verifyDirectoryExists(options.rootDir, 'rootDir');
+ return {...options, rootDir: options.rootDir};
+};
+
+const normalizeReporters = options => {
+ const reporters = options.reporters;
+
+ if (!reporters || !Array.isArray(reporters)) {
+ return options;
+ }
+
+ (0, _ReporterValidationErrors.validateReporters)(reporters);
+ options.reporters = reporters.map(reporterConfig => {
+ const normalizedReporterConfig =
+ typeof reporterConfig === 'string' // if reporter config is a string, we wrap it in an array
+ ? // and pass an empty object for options argument, to normalize
+ // the shape.
+ [reporterConfig, {}]
+ : reporterConfig;
+ const reporterPath = (0, _utils.replaceRootDirInPath)(
+ options.rootDir,
+ normalizedReporterConfig[0]
+ );
+
+ if (reporterPath !== _constants.DEFAULT_REPORTER_LABEL) {
+ const reporter = _jestResolve().default.findNodeModule(reporterPath, {
+ basedir: options.rootDir
+ });
+
+ if (!reporter) {
+ throw new (_jestResolve().default.ModuleNotFoundError)(
+ 'Could not resolve a module for a custom reporter.\n' +
+ ` Module name: ${reporterPath}`
+ );
+ }
+
+ normalizedReporterConfig[0] = reporter;
+ }
+
+ return normalizedReporterConfig;
+ });
+ return options;
+};
+
+const buildTestPathPattern = argv => {
+ const patterns = [];
+
+ if (argv._) {
+ patterns.push(...argv._);
+ }
+
+ if (argv.testPathPattern) {
+ patterns.push(...argv.testPathPattern);
+ }
+
+ const replacePosixSep = pattern => {
+ // yargs coerces positional args into numbers
+ const patternAsString = pattern.toString();
+
+ if (path().sep === '/') {
+ return patternAsString;
+ }
+
+ return patternAsString.replace(/\//g, '\\\\');
+ };
+
+ const testPathPattern = patterns.map(replacePosixSep).join('|');
+
+ if ((0, _validatePattern.default)(testPathPattern)) {
+ return testPathPattern;
+ } else {
+ showTestPathPatternError(testPathPattern);
+ return '';
+ }
+};
+
+const showTestPathPatternError = testPathPattern => {
+ (0, _jestUtil().clearLine)(process.stdout); // eslint-disable-next-line no-console
+
+ console.log(
+ _chalk().default.red(
+ ` Invalid testPattern ${testPathPattern} supplied. ` +
+ 'Running all tests instead.'
+ )
+ );
+};
+
+function validateExtensionsToTreatAsEsm(extensionsToTreatAsEsm) {
+ if (!extensionsToTreatAsEsm || extensionsToTreatAsEsm.length === 0) {
+ return;
+ }
+
+ function printConfig(opts) {
+ const string = opts.map(ext => `'${ext}'`).join(', ');
+ return _chalk().default.bold(`extensionsToTreatAsEsm: [${string}]`);
+ }
+
+ const extensionWithoutDot = extensionsToTreatAsEsm.some(
+ ext => !ext.startsWith('.')
+ );
+
+ if (extensionWithoutDot) {
+ throw createConfigError(` Option: ${printConfig(
+ extensionsToTreatAsEsm
+ )} includes a string that does not start with a period (${_chalk().default.bold(
+ '.'
+ )}).
+ Please change your configuration to ${printConfig(
+ extensionsToTreatAsEsm.map(ext => (ext.startsWith('.') ? ext : `.${ext}`))
+ )}.`);
+ }
+
+ if (extensionsToTreatAsEsm.includes('.js')) {
+ throw createConfigError(
+ ` Option: ${printConfig(
+ extensionsToTreatAsEsm
+ )} includes ${_chalk().default.bold(
+ "'.js'"
+ )} which is always inferred based on ${_chalk().default.bold(
+ 'type'
+ )} in its nearest ${_chalk().default.bold('package.json')}.`
+ );
+ }
+
+ if (extensionsToTreatAsEsm.includes('.cjs')) {
+ throw createConfigError(
+ ` Option: ${printConfig(
+ extensionsToTreatAsEsm
+ )} includes ${_chalk().default.bold(
+ "'.cjs'"
+ )} which is always treated as CommonJS.`
+ );
+ }
+
+ if (extensionsToTreatAsEsm.includes('.mjs')) {
+ throw createConfigError(
+ ` Option: ${printConfig(
+ extensionsToTreatAsEsm
+ )} includes ${_chalk().default.bold(
+ "'.mjs'"
+ )} which is always treated as an ECMAScript Module.`
+ );
+ }
+}
+
+async function normalize(
+ initialOptions,
+ argv,
+ configPath,
+ projectIndex = Infinity
+) {
+ var _options$haste, _argv$_;
+
+ const {hasDeprecationWarnings} = (0, _jestValidate().validate)(
+ initialOptions,
+ {
+ comment: _utils.DOCUMENTATION_NOTE,
+ deprecatedConfig: _Deprecated.default,
+ exampleConfig: _ValidConfig.default,
+ recursiveDenylist: [
+ 'collectCoverageOnlyFrom', // 'coverageThreshold' allows to use 'global' and glob strings on the same
+ // level, there's currently no way we can deal with such config
+ 'coverageThreshold',
+ 'globals',
+ 'moduleNameMapper',
+ 'testEnvironmentOptions',
+ 'transform'
+ ]
+ }
+ );
+ let options = normalizePreprocessor(
+ normalizeReporters(
+ normalizeMissingOptions(
+ normalizeRootDir((0, _setFromArgv.default)(initialOptions, argv)),
+ configPath,
+ projectIndex
+ )
+ )
+ );
+
+ if (options.preset) {
+ options = await setupPreset(options, options.preset);
+ }
+
+ if (!options.setupFilesAfterEnv) {
+ options.setupFilesAfterEnv = [];
+ }
+
+ if (
+ options.setupTestFrameworkScriptFile &&
+ options.setupFilesAfterEnv.length > 0
+ ) {
+ throw createConfigError(` Options: ${_chalk().default.bold(
+ 'setupTestFrameworkScriptFile'
+ )} and ${_chalk().default.bold(
+ 'setupFilesAfterEnv'
+ )} cannot be used together.
+ Please change your configuration to only use ${_chalk().default.bold(
+ 'setupFilesAfterEnv'
+ )}.`);
+ }
+
+ if (options.setupTestFrameworkScriptFile) {
+ options.setupFilesAfterEnv.push(options.setupTestFrameworkScriptFile);
+ }
+
+ options.testEnvironment = (0, _jestResolve().resolveTestEnvironment)({
+ requireResolveFunction: require.resolve,
+ rootDir: options.rootDir,
+ testEnvironment:
+ options.testEnvironment ||
+ require.resolve(_Defaults.default.testEnvironment)
+ });
+
+ if (!options.roots && options.testPathDirs) {
+ options.roots = options.testPathDirs;
+ delete options.testPathDirs;
+ }
+
+ if (!options.roots) {
+ options.roots = [options.rootDir];
+ }
+
+ if (
+ !options.testRunner ||
+ options.testRunner === 'circus' ||
+ options.testRunner === 'jest-circus'
+ ) {
+ options.testRunner = require.resolve('jest-circus/runner');
+ } else if (options.testRunner === 'jasmine2') {
+ options.testRunner = require.resolve('jest-jasmine2');
+ }
+
+ if (!options.coverageDirectory) {
+ options.coverageDirectory = path().resolve(options.rootDir, 'coverage');
+ }
+
+ setupBabelJest(options); // TODO: Type this properly
+
+ const newOptions = {..._Defaults.default};
+
+ if (options.resolver) {
+ newOptions.resolver = (0, _utils.resolve)(null, {
+ filePath: options.resolver,
+ key: 'resolver',
+ rootDir: options.rootDir
+ });
+ }
+
+ validateExtensionsToTreatAsEsm(options.extensionsToTreatAsEsm);
+
+ if (options.watchman == null) {
+ options.watchman = _Defaults.default.watchman;
+ }
+
+ const optionKeys = Object.keys(options);
+ optionKeys.reduce((newOptions, key) => {
+ // The resolver has been resolved separately; skip it
+ if (key === 'resolver') {
+ return newOptions;
+ } // This is cheating, because it claims that all keys of InitialOptions are Required.
+ // We only really know it's Required for oldOptions[key], not for oldOptions.someOtherKey,
+ // so oldOptions[key] is the only way it should be used.
+
+ const oldOptions = options;
+ let value;
+
+ switch (key) {
+ case 'collectCoverageOnlyFrom':
+ value = normalizeCollectCoverageOnlyFrom(oldOptions, key);
+ break;
+
+ case 'setupFiles':
+ case 'setupFilesAfterEnv':
+ case 'snapshotSerializers':
+ {
+ const option = oldOptions[key];
+ value =
+ option &&
+ option.map(filePath =>
+ (0, _utils.resolve)(newOptions.resolver, {
+ filePath,
+ key,
+ rootDir: options.rootDir
+ })
+ );
+ }
+ break;
+
+ case 'modulePaths':
+ case 'roots':
+ {
+ const option = oldOptions[key];
+ value =
+ option &&
+ option.map(filePath =>
+ path().resolve(
+ options.rootDir,
+ (0, _utils.replaceRootDirInPath)(options.rootDir, filePath)
+ )
+ );
+ }
+ break;
+
+ case 'collectCoverageFrom':
+ value = normalizeCollectCoverageFrom(oldOptions, key);
+ break;
+
+ case 'cacheDirectory':
+ case 'coverageDirectory':
+ {
+ const option = oldOptions[key];
+ value =
+ option &&
+ path().resolve(
+ options.rootDir,
+ (0, _utils.replaceRootDirInPath)(options.rootDir, option)
+ );
+ }
+ break;
+
+ case 'dependencyExtractor':
+ case 'globalSetup':
+ case 'globalTeardown':
+ case 'moduleLoader':
+ case 'snapshotResolver':
+ case 'testResultsProcessor':
+ case 'testRunner':
+ case 'filter':
+ {
+ const option = oldOptions[key];
+ value =
+ option &&
+ (0, _utils.resolve)(newOptions.resolver, {
+ filePath: option,
+ key,
+ rootDir: options.rootDir
+ });
+ }
+ break;
+
+ case 'runner':
+ {
+ const option = oldOptions[key];
+ value =
+ option &&
+ (0, _jestResolve().resolveRunner)(newOptions.resolver, {
+ filePath: option,
+ requireResolveFunction: require.resolve,
+ rootDir: options.rootDir
+ });
+ }
+ break;
+
+ case 'prettierPath':
+ {
+ // We only want this to throw if "prettierPath" is explicitly passed
+ // from config or CLI, and the requested path isn't found. Otherwise we
+ // set it to null and throw an error lazily when it is used.
+ const option = oldOptions[key];
+ value =
+ option &&
+ (0, _utils.resolve)(newOptions.resolver, {
+ filePath: option,
+ key,
+ optional: option === _Defaults.default[key],
+ rootDir: options.rootDir
+ });
+ }
+ break;
+
+ case 'moduleNameMapper':
+ const moduleNameMapper = oldOptions[key];
+ value =
+ moduleNameMapper &&
+ Object.keys(moduleNameMapper).map(regex => {
+ const item = moduleNameMapper && moduleNameMapper[regex];
+ return (
+ item && [
+ regex,
+ (0, _utils._replaceRootDirTags)(options.rootDir, item)
+ ]
+ );
+ });
+ break;
+
+ case 'transform':
+ const transform = oldOptions[key];
+ value =
+ transform &&
+ Object.keys(transform).map(regex => {
+ const transformElement = transform[regex];
+ return [
+ regex,
+ (0, _utils.resolve)(newOptions.resolver, {
+ filePath: Array.isArray(transformElement)
+ ? transformElement[0]
+ : transformElement,
+ key,
+ rootDir: options.rootDir
+ }),
+ Array.isArray(transformElement) ? transformElement[1] : {}
+ ];
+ });
+ break;
+
+ case 'coveragePathIgnorePatterns':
+ case 'modulePathIgnorePatterns':
+ case 'testPathIgnorePatterns':
+ case 'transformIgnorePatterns':
+ case 'watchPathIgnorePatterns':
+ case 'unmockedModulePathPatterns':
+ value = normalizeUnmockedModulePathPatterns(oldOptions, key);
+ break;
+
+ case 'haste':
+ value = {...oldOptions[key]};
+
+ if (value.hasteImplModulePath != null) {
+ const resolvedHasteImpl = (0, _utils.resolve)(newOptions.resolver, {
+ filePath: (0, _utils.replaceRootDirInPath)(
+ options.rootDir,
+ value.hasteImplModulePath
+ ),
+ key: 'haste.hasteImplModulePath',
+ rootDir: options.rootDir
+ });
+ value.hasteImplModulePath = resolvedHasteImpl || undefined;
+ }
+
+ break;
+
+ case 'projects':
+ value = (oldOptions[key] || [])
+ .map(project =>
+ typeof project === 'string'
+ ? (0, _utils._replaceRootDirTags)(options.rootDir, project)
+ : project
+ )
+ .reduce((projects, project) => {
+ // Project can be specified as globs. If a glob matches any files,
+ // We expand it to these paths. If not, we keep the original path
+ // for the future resolution.
+ const globMatches =
+ typeof project === 'string' ? (0, _glob().sync)(project) : [];
+ return projects.concat(globMatches.length ? globMatches : project);
+ }, []);
+ break;
+
+ case 'moduleDirectories':
+ case 'testMatch':
+ {
+ const replacedRootDirTags = (0, _utils._replaceRootDirTags)(
+ (0, _utils.escapeGlobCharacters)(options.rootDir),
+ oldOptions[key]
+ );
+
+ if (replacedRootDirTags) {
+ value = Array.isArray(replacedRootDirTags)
+ ? replacedRootDirTags.map(_jestUtil().replacePathSepForGlob)
+ : (0, _jestUtil().replacePathSepForGlob)(replacedRootDirTags);
+ } else {
+ value = replacedRootDirTags;
+ }
+ }
+ break;
+
+ case 'testRegex':
+ {
+ const option = oldOptions[key];
+ value = option
+ ? (Array.isArray(option) ? option : [option]).map(
+ _jestRegexUtil().replacePathSepForRegex
+ )
+ : [];
+ }
+ break;
+
+ case 'moduleFileExtensions': {
+ value = oldOptions[key];
+
+ if (
+ Array.isArray(value) && // If it's the wrong type, it can throw at a later time
+ (options.runner === undefined ||
+ options.runner === _Defaults.default.runner) && // Only require 'js' for the default jest-runner
+ !value.includes('js')
+ ) {
+ const errorMessage =
+ " moduleFileExtensions must include 'js':\n" +
+ ' but instead received:\n' +
+ ` ${_chalk().default.bold.red(JSON.stringify(value))}`; // If `js` is not included, any dependency Jest itself injects into
+ // the environment, like jasmine or sourcemap-support, will need to
+ // `require` its modules with a file extension. This is not plausible
+ // in the long run, so it's way easier to just fail hard early.
+ // We might consider throwing if `json` is missing as well, as it's a
+ // fair assumption from modules that they can do
+ // `require('some-package/package') without the trailing `.json` as it
+ // works in Node normally.
+
+ throw createConfigError(
+ errorMessage +
+ "\n Please change your configuration to include 'js'."
+ );
+ }
+
+ break;
+ }
+
+ case 'bail': {
+ const bail = oldOptions[key];
+
+ if (typeof bail === 'boolean') {
+ value = bail ? 1 : 0;
+ } else if (typeof bail === 'string') {
+ value = 1; // If Jest is invoked as `jest --bail someTestPattern` then need to
+ // move the pattern from the `bail` configuration and into `argv._`
+ // to be processed as an extra parameter
+
+ argv._.push(bail);
+ } else {
+ value = oldOptions[key];
+ }
+
+ break;
+ }
+
+ case 'displayName': {
+ const displayName = oldOptions[key];
+ /**
+ * Ensuring that displayName shape is correct here so that the
+ * reporters can trust the shape of the data
+ */
+
+ if (typeof displayName === 'object') {
+ const {name, color} = displayName;
+
+ if (
+ !name ||
+ !color ||
+ typeof name !== 'string' ||
+ typeof color !== 'string'
+ ) {
+ const errorMessage =
+ ` Option "${_chalk().default.bold(
+ 'displayName'
+ )}" must be of type:\n\n` +
+ ' {\n' +
+ ' name: string;\n' +
+ ' color: string;\n' +
+ ' }\n';
+ throw createConfigError(errorMessage);
+ }
+
+ value = oldOptions[key];
+ } else {
+ value = {
+ color: (0, _color.getDisplayNameColor)(options.runner),
+ name: displayName
+ };
+ }
+
+ break;
+ }
+
+ case 'testTimeout': {
+ if (oldOptions[key] < 0) {
+ throw createConfigError(
+ ` Option "${_chalk().default.bold(
+ 'testTimeout'
+ )}" must be a natural number.`
+ );
+ }
+
+ value = oldOptions[key];
+ break;
+ }
+
+ case 'automock':
+ case 'cache':
+ case 'changedSince':
+ case 'changedFilesWithAncestor':
+ case 'clearMocks':
+ case 'collectCoverage':
+ case 'coverageProvider':
+ case 'coverageReporters':
+ case 'coverageThreshold':
+ case 'detectLeaks':
+ case 'detectOpenHandles':
+ case 'errorOnDeprecated':
+ case 'expand':
+ case 'extensionsToTreatAsEsm':
+ case 'extraGlobals':
+ case 'globals':
+ case 'findRelatedTests':
+ case 'forceCoverageMatch':
+ case 'forceExit':
+ case 'injectGlobals':
+ case 'lastCommit':
+ case 'listTests':
+ case 'logHeapUsage':
+ case 'maxConcurrency':
+ case 'name':
+ case 'noStackTrace':
+ case 'notify':
+ case 'notifyMode':
+ case 'onlyChanged':
+ case 'onlyFailures':
+ case 'outputFile':
+ case 'passWithNoTests':
+ case 'replname':
+ case 'reporters':
+ case 'resetMocks':
+ case 'resetModules':
+ case 'restoreMocks':
+ case 'rootDir':
+ case 'runTestsByPath':
+ case 'silent':
+ case 'skipFilter':
+ case 'skipNodeResolution':
+ case 'slowTestThreshold':
+ case 'snapshotFormat':
+ case 'testEnvironment':
+ case 'testEnvironmentOptions':
+ case 'testFailureExitCode':
+ case 'testLocationInResults':
+ case 'testNamePattern':
+ case 'testURL':
+ case 'timers':
+ case 'useStderr':
+ case 'verbose':
+ case 'watch':
+ case 'watchAll':
+ case 'watchman':
+ value = oldOptions[key];
+ break;
+
+ case 'watchPlugins':
+ value = (oldOptions[key] || []).map(watchPlugin => {
+ if (typeof watchPlugin === 'string') {
+ return {
+ config: {},
+ path: (0, _jestResolve().resolveWatchPlugin)(
+ newOptions.resolver,
+ {
+ filePath: watchPlugin,
+ requireResolveFunction: require.resolve,
+ rootDir: options.rootDir
+ }
+ )
+ };
+ } else {
+ return {
+ config: watchPlugin[1] || {},
+ path: (0, _jestResolve().resolveWatchPlugin)(
+ newOptions.resolver,
+ {
+ filePath: watchPlugin[0],
+ requireResolveFunction: require.resolve,
+ rootDir: options.rootDir
+ }
+ )
+ };
+ }
+ });
+ break;
+ } // @ts-expect-error: automock is missing in GlobalConfig, so what
+
+ newOptions[key] = value;
+ return newOptions;
+ }, newOptions);
+
+ if (
+ options.watchman &&
+ (_options$haste = options.haste) !== null &&
+ _options$haste !== void 0 &&
+ _options$haste.enableSymlinks
+ ) {
+ throw new (_jestValidate().ValidationError)(
+ 'Validation Error',
+ 'haste.enableSymlinks is incompatible with watchman',
+ 'Either set haste.enableSymlinks to false or do not use watchman'
+ );
+ }
+
+ newOptions.roots.forEach((root, i) => {
+ verifyDirectoryExists(root, `roots[${i}]`);
+ });
+
+ try {
+ // try to resolve windows short paths, ignoring errors (permission errors, mostly)
+ newOptions.cwd = (0, _jestUtil().tryRealpath)(process.cwd());
+ } catch {
+ // ignored
+ }
+
+ newOptions.testSequencer = (0, _jestResolve().resolveSequencer)(
+ newOptions.resolver,
+ {
+ filePath:
+ options.testSequencer ||
+ require.resolve(_Defaults.default.testSequencer),
+ requireResolveFunction: require.resolve,
+ rootDir: options.rootDir
+ }
+ );
+
+ if (newOptions.runner === _Defaults.default.runner) {
+ newOptions.runner = require.resolve(newOptions.runner);
+ }
+
+ newOptions.nonFlagArgs =
+ (_argv$_ = argv._) === null || _argv$_ === void 0
+ ? void 0
+ : _argv$_.map(arg => `${arg}`);
+ newOptions.testPathPattern = buildTestPathPattern(argv);
+ newOptions.json = !!argv.json;
+ newOptions.testFailureExitCode = parseInt(newOptions.testFailureExitCode, 10);
+
+ if (
+ newOptions.lastCommit ||
+ newOptions.changedFilesWithAncestor ||
+ newOptions.changedSince
+ ) {
+ newOptions.onlyChanged = true;
+ }
+
+ if (argv.all) {
+ newOptions.onlyChanged = false;
+ newOptions.onlyFailures = false;
+ } else if (newOptions.testPathPattern) {
+ // When passing a test path pattern we don't want to only monitor changed
+ // files unless `--watch` is also passed.
+ newOptions.onlyChanged = newOptions.watch;
+ }
+
+ if (!newOptions.onlyChanged) {
+ newOptions.onlyChanged = false;
+ }
+
+ if (!newOptions.lastCommit) {
+ newOptions.lastCommit = false;
+ }
+
+ if (!newOptions.onlyFailures) {
+ newOptions.onlyFailures = false;
+ }
+
+ if (!newOptions.watchAll) {
+ newOptions.watchAll = false;
+ } // as unknown since it can happen. We really need to fix the types here
+
+ if (newOptions.moduleNameMapper === _Defaults.default.moduleNameMapper) {
+ newOptions.moduleNameMapper = [];
+ }
+
+ newOptions.updateSnapshot =
+ argv.ci && !argv.updateSnapshot
+ ? 'none'
+ : argv.updateSnapshot
+ ? 'all'
+ : 'new';
+ newOptions.maxConcurrency = parseInt(newOptions.maxConcurrency, 10);
+ newOptions.maxWorkers = (0, _getMaxWorkers.default)(argv, options);
+
+ if (newOptions.testRegex.length && options.testMatch) {
+ throw createConfigError(
+ ` Configuration options ${_chalk().default.bold('testMatch')} and` +
+ ` ${_chalk().default.bold('testRegex')} cannot be used together.`
+ );
+ }
+
+ if (newOptions.testRegex.length && !options.testMatch) {
+ // Prevent the default testMatch conflicting with any explicitly
+ // configured `testRegex` value
+ newOptions.testMatch = [];
+ } // If argv.json is set, coverageReporters shouldn't print a text report.
+
+ if (argv.json) {
+ newOptions.coverageReporters = (newOptions.coverageReporters || []).filter(
+ reporter => reporter !== 'text'
+ );
+ } // If collectCoverage is enabled while using --findRelatedTests we need to
+ // avoid having false negatives in the generated coverage report.
+ // The following: `--findRelatedTests '/rootDir/file1.js' --coverage`
+ // Is transformed to: `--findRelatedTests '/rootDir/file1.js' --coverage --collectCoverageFrom 'file1.js'`
+ // where arguments to `--collectCoverageFrom` should be globs (or relative
+ // paths to the rootDir)
+
+ if (newOptions.collectCoverage && argv.findRelatedTests) {
+ let collectCoverageFrom = newOptions.nonFlagArgs.map(filename => {
+ filename = (0, _utils.replaceRootDirInPath)(options.rootDir, filename);
+ return path().isAbsolute(filename)
+ ? path().relative(options.rootDir, filename)
+ : filename;
+ }); // Don't override existing collectCoverageFrom options
+
+ if (newOptions.collectCoverageFrom) {
+ collectCoverageFrom = collectCoverageFrom.reduce((patterns, filename) => {
+ if (
+ (0, _micromatch().default)(
+ [
+ (0, _jestUtil().replacePathSepForGlob)(
+ path().relative(options.rootDir, filename)
+ )
+ ],
+ newOptions.collectCoverageFrom
+ ).length === 0
+ ) {
+ return patterns;
+ }
+
+ return [...patterns, filename];
+ }, newOptions.collectCoverageFrom);
+ }
+
+ newOptions.collectCoverageFrom = collectCoverageFrom;
+ } else if (!newOptions.collectCoverageFrom) {
+ newOptions.collectCoverageFrom = [];
+ }
+
+ if (!newOptions.findRelatedTests) {
+ newOptions.findRelatedTests = false;
+ }
+
+ if (!newOptions.projects) {
+ newOptions.projects = [];
+ }
+
+ if (!newOptions.extraGlobals) {
+ newOptions.extraGlobals = [];
+ }
+
+ if (!newOptions.forceExit) {
+ newOptions.forceExit = false;
+ }
+
+ if (!newOptions.logHeapUsage) {
+ newOptions.logHeapUsage = false;
+ }
+
+ return {
+ hasDeprecationWarnings,
+ options: newOptions
+ };
+}
diff --git a/node_modules/jest-config/build/readConfigFileAndSetRootDir.d.ts b/node_modules/jest-config/build/readConfigFileAndSetRootDir.d.ts
new file mode 100644
index 0000000..0b5a48f
--- /dev/null
+++ b/node_modules/jest-config/build/readConfigFileAndSetRootDir.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 readConfigFileAndSetRootDir(configPath: Config.Path): Promise<Config.InitialOptions>;
diff --git a/node_modules/jest-config/build/readConfigFileAndSetRootDir.js b/node_modules/jest-config/build/readConfigFileAndSetRootDir.js
new file mode 100644
index 0000000..af94d21
--- /dev/null
+++ b/node_modules/jest-config/build/readConfigFileAndSetRootDir.js
@@ -0,0 +1,204 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = readConfigFileAndSetRootDir;
+
+function path() {
+ const data = _interopRequireWildcard(require('path'));
+
+ path = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function fs() {
+ const data = _interopRequireWildcard(require('graceful-fs'));
+
+ fs = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _parseJson() {
+ const data = _interopRequireDefault(require('parse-json'));
+
+ _parseJson = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _stripJsonComments() {
+ const data = _interopRequireDefault(require('strip-json-comments'));
+
+ _stripJsonComments = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestUtil() {
+ const data = require('jest-util');
+
+ _jestUtil = function () {
+ return data;
+ };
+
+ return data;
+}
+
+var _constants = require('./constants');
+
+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.
+ */
+// Read the configuration and set its `rootDir`
+// 1. If it's a `package.json` file, we look into its "jest" property
+// 2. If it's a `jest.config.ts` file, we use `ts-node` to transpile & require it
+// 3. For any other file, we just require it. If we receive an 'ERR_REQUIRE_ESM'
+// from node, perform a dynamic import instead.
+async function readConfigFileAndSetRootDir(configPath) {
+ const isTS = configPath.endsWith(_constants.JEST_CONFIG_EXT_TS);
+ const isJSON = configPath.endsWith(_constants.JEST_CONFIG_EXT_JSON);
+ let configObject;
+
+ try {
+ if (isTS) {
+ configObject = await loadTSConfigFile(configPath);
+ } else if (isJSON) {
+ const fileContent = fs().readFileSync(configPath, 'utf8');
+ configObject = (0, _parseJson().default)(
+ (0, _stripJsonComments().default)(fileContent),
+ configPath
+ );
+ } else {
+ configObject = await (0, _jestUtil().requireOrImportModule)(configPath);
+ }
+ } catch (error) {
+ if (isTS) {
+ throw new Error(
+ `Jest: Failed to parse the TypeScript config file ${configPath}\n` +
+ ` ${error}`
+ );
+ }
+
+ throw error;
+ }
+
+ if (configPath.endsWith(_constants.PACKAGE_JSON)) {
+ // Event if there's no "jest" property in package.json we will still use
+ // an empty object.
+ configObject = configObject.jest || {};
+ }
+
+ if (typeof configObject === 'function') {
+ configObject = await configObject();
+ }
+
+ if (configObject.rootDir) {
+ // We don't touch it if it has an absolute path specified
+ if (!path().isAbsolute(configObject.rootDir)) {
+ // otherwise, we'll resolve it relative to the file's __dirname
+ configObject.rootDir = path().resolve(
+ path().dirname(configPath),
+ configObject.rootDir
+ );
+ }
+ } else {
+ // If rootDir is not there, we'll set it to this file's __dirname
+ configObject.rootDir = path().dirname(configPath);
+ }
+
+ return configObject;
+}
+
+let registerer; // Load the TypeScript configuration
+
+const loadTSConfigFile = async configPath => {
+ // Register TypeScript compiler instance
+ try {
+ registerer ||
+ (registerer = require('ts-node').register({
+ compilerOptions: {
+ module: 'CommonJS'
+ }
+ }));
+ } catch (e) {
+ if (e.code === 'MODULE_NOT_FOUND') {
+ throw new Error(
+ `Jest: 'ts-node' is required for the TypeScript configuration files. Make sure it is installed\nError: ${e.message}`
+ );
+ }
+
+ throw e;
+ }
+
+ registerer.enabled(true);
+ let configObject = (0, _jestUtil().interopRequireDefault)(
+ require(configPath)
+ ).default; // In case the config is a function which imports more Typescript code
+
+ if (typeof configObject === 'function') {
+ configObject = await configObject();
+ }
+
+ registerer.enabled(false);
+ return configObject;
+};
diff --git a/node_modules/jest-config/build/resolveConfigPath.d.ts b/node_modules/jest-config/build/resolveConfigPath.d.ts
new file mode 100644
index 0000000..cb7ae74
--- /dev/null
+++ b/node_modules/jest-config/build/resolveConfigPath.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 resolveConfigPath(pathToResolve: Config.Path, cwd: Config.Path, skipMultipleConfigWarning?: boolean): Config.Path;
diff --git a/node_modules/jest-config/build/resolveConfigPath.js b/node_modules/jest-config/build/resolveConfigPath.js
new file mode 100644
index 0000000..12472b0
--- /dev/null
+++ b/node_modules/jest-config/build/resolveConfigPath.js
@@ -0,0 +1,247 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = resolveConfigPath;
+
+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 fs() {
+ const data = _interopRequireWildcard(require('graceful-fs'));
+
+ fs = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _slash() {
+ const data = _interopRequireDefault(require('slash'));
+
+ _slash = function () {
+ return data;
+ };
+
+ return data;
+}
+
+var _constants = require('./constants');
+
+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 isFile = filePath =>
+ fs().existsSync(filePath) && !fs().lstatSync(filePath).isDirectory();
+
+const getConfigFilename = ext => _constants.JEST_CONFIG_BASE_NAME + ext;
+
+function resolveConfigPath(
+ pathToResolve,
+ cwd,
+ skipMultipleConfigWarning = false
+) {
+ if (!path().isAbsolute(cwd)) {
+ throw new Error(`"cwd" must be an absolute path. cwd: ${cwd}`);
+ }
+
+ const absolutePath = path().isAbsolute(pathToResolve)
+ ? pathToResolve
+ : path().resolve(cwd, pathToResolve);
+
+ if (isFile(absolutePath)) {
+ return absolutePath;
+ } // This is a guard against passing non existing path as a project/config,
+ // that will otherwise result in a very confusing situation.
+ // e.g.
+ // With a directory structure like this:
+ // my_project/
+ // package.json
+ //
+ // Passing a `my_project/some_directory_that_doesnt_exist` as a project
+ // name will resolve into a (possibly empty) `my_project/package.json` and
+ // try to run all tests it finds under `my_project` directory.
+
+ if (!fs().existsSync(absolutePath)) {
+ throw new Error(
+ "Can't find a root directory while resolving a config file path.\n" +
+ `Provided path to resolve: ${pathToResolve}\n` +
+ `cwd: ${cwd}`
+ );
+ }
+
+ return resolveConfigPathByTraversing(
+ absolutePath,
+ pathToResolve,
+ cwd,
+ skipMultipleConfigWarning
+ );
+}
+
+const resolveConfigPathByTraversing = (
+ pathToResolve,
+ initialPath,
+ cwd,
+ skipMultipleConfigWarning
+) => {
+ const configFiles = _constants.JEST_CONFIG_EXT_ORDER.map(ext =>
+ path().resolve(pathToResolve, getConfigFilename(ext))
+ ).filter(isFile);
+
+ const packageJson = findPackageJson(pathToResolve);
+
+ if (packageJson && hasPackageJsonJestKey(packageJson)) {
+ configFiles.push(packageJson);
+ }
+
+ if (!skipMultipleConfigWarning && configFiles.length > 1) {
+ console.warn(makeMultipleConfigsWarning(configFiles));
+ }
+
+ if (configFiles.length > 0 || packageJson) {
+ var _configFiles$;
+
+ return (_configFiles$ = configFiles[0]) !== null && _configFiles$ !== void 0
+ ? _configFiles$
+ : packageJson;
+ } // This is the system root.
+ // We tried everything, config is nowhere to be found ¯\_(ツ)_/¯
+
+ if (pathToResolve === path().dirname(pathToResolve)) {
+ throw new Error(makeResolutionErrorMessage(initialPath, cwd));
+ } // go up a level and try it again
+
+ return resolveConfigPathByTraversing(
+ path().dirname(pathToResolve),
+ initialPath,
+ cwd,
+ skipMultipleConfigWarning
+ );
+};
+
+const findPackageJson = pathToResolve => {
+ const packagePath = path().resolve(pathToResolve, _constants.PACKAGE_JSON);
+
+ if (isFile(packagePath)) {
+ return packagePath;
+ }
+
+ return undefined;
+};
+
+const hasPackageJsonJestKey = packagePath => {
+ const content = fs().readFileSync(packagePath, 'utf8');
+
+ try {
+ return 'jest' in JSON.parse(content);
+ } catch {
+ // If package is not a valid JSON
+ return false;
+ }
+};
+
+const makeResolutionErrorMessage = (initialPath, cwd) =>
+ 'Could not find a config file based on provided values:\n' +
+ `path: "${initialPath}"\n` +
+ `cwd: "${cwd}"\n` +
+ 'Config paths must be specified by either a direct path to a config\n' +
+ 'file, or a path to a directory. If directory is given, Jest will try to\n' +
+ `traverse directory tree up, until it finds one of those files in exact order: ${_constants.JEST_CONFIG_EXT_ORDER.map(
+ ext => `"${getConfigFilename(ext)}"`
+ ).join(' or ')}.`;
+
+function extraIfPackageJson(configPath) {
+ if (configPath.endsWith(_constants.PACKAGE_JSON)) {
+ return '`jest` key in ';
+ }
+
+ return '';
+}
+
+const makeMultipleConfigsWarning = configPaths =>
+ _chalk().default.yellow(
+ [
+ _chalk().default.bold('\u25cf Multiple configurations found:'),
+ ...configPaths.map(
+ configPath =>
+ ` * ${extraIfPackageJson(configPath)}${(0, _slash().default)(
+ configPath
+ )}`
+ ),
+ '',
+ ' Implicit config resolution does not allow multiple configuration files.',
+ ' Either remove unused config files or select one explicitly with `--config`.',
+ '',
+ ' Configuration Documentation:',
+ ' https://jestjs.io/docs/configuration.html',
+ ''
+ ].join('\n')
+ );
diff --git a/node_modules/jest-config/build/setFromArgv.d.ts b/node_modules/jest-config/build/setFromArgv.d.ts
new file mode 100644
index 0000000..1e45a95
--- /dev/null
+++ b/node_modules/jest-config/build/setFromArgv.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 setFromArgv(options: Config.InitialOptions, argv: Config.Argv): Config.InitialOptions;
diff --git a/node_modules/jest-config/build/setFromArgv.js b/node_modules/jest-config/build/setFromArgv.js
new file mode 100644
index 0000000..1cc08bd
--- /dev/null
+++ b/node_modules/jest-config/build/setFromArgv.js
@@ -0,0 +1,68 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = setFromArgv;
+
+var _utils = require('./utils');
+
+/**
+ * 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 specialArgs = ['_', '$0', 'h', 'help', 'config'];
+
+function setFromArgv(options, argv) {
+ const argvToOptions = Object.keys(argv)
+ .filter(key => argv[key] !== undefined && specialArgs.indexOf(key) === -1)
+ .reduce((options, key) => {
+ switch (key) {
+ case 'coverage':
+ options.collectCoverage = argv[key];
+ break;
+
+ case 'json':
+ options.useStderr = argv[key];
+ break;
+
+ case 'watchAll':
+ options.watch = false;
+ options.watchAll = argv[key];
+ break;
+
+ case 'env':
+ options.testEnvironment = argv[key];
+ break;
+
+ case 'config':
+ break;
+
+ case 'coverageThreshold':
+ case 'globals':
+ case 'haste':
+ case 'moduleNameMapper':
+ case 'testEnvironmentOptions':
+ case 'transform':
+ const str = argv[key];
+
+ if ((0, _utils.isJSONString)(str)) {
+ options[key] = JSON.parse(str);
+ }
+
+ break;
+
+ default:
+ options[key] = argv[key];
+ }
+
+ return options;
+ }, {});
+ return {
+ ...options,
+ ...((0, _utils.isJSONString)(argv.config) ? JSON.parse(argv.config) : null),
+ ...argvToOptions
+ };
+}
diff --git a/node_modules/jest-config/build/utils.d.ts b/node_modules/jest-config/build/utils.d.ts
new file mode 100644
index 0000000..11fe1af
--- /dev/null
+++ b/node_modules/jest-config/build/utils.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 type { Config } from '@jest/types';
+declare type ResolveOptions = {
+ rootDir: Config.Path;
+ key: string;
+ filePath: Config.Path;
+ optional?: boolean;
+};
+export declare const BULLET: string;
+export declare const DOCUMENTATION_NOTE: string;
+export declare const resolve: (resolver: string | null | undefined, { key, filePath, rootDir, optional }: ResolveOptions) => string;
+export declare const escapeGlobCharacters: (path: Config.Path) => Config.Glob;
+export declare const replaceRootDirInPath: (rootDir: Config.Path, filePath: Config.Path) => string;
+declare type OrArray<T> = T | Array<T>;
+declare type ReplaceRootDirConfigObj = Record<string, Config.Path>;
+declare type ReplaceRootDirConfigValues = OrArray<ReplaceRootDirConfigObj> | OrArray<RegExp> | OrArray<Config.Path>;
+export declare const _replaceRootDirTags: <T extends ReplaceRootDirConfigValues>(rootDir: Config.Path, config: T) => T;
+declare type JSONString = string & {
+ readonly $$type: never;
+};
+export declare const isJSONString: (text?: string | JSONString | undefined) => text is JSONString;
+export {};
diff --git a/node_modules/jest-config/build/utils.js b/node_modules/jest-config/build/utils.js
new file mode 100644
index 0000000..21fde86
--- /dev/null
+++ b/node_modules/jest-config/build/utils.js
@@ -0,0 +1,209 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.resolve =
+ exports.replaceRootDirInPath =
+ exports.isJSONString =
+ exports.escapeGlobCharacters =
+ exports._replaceRootDirTags =
+ exports.DOCUMENTATION_NOTE =
+ exports.BULLET =
+ 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 _jestResolve() {
+ const data = _interopRequireDefault(require('jest-resolve'));
+
+ _jestResolve = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestValidate() {
+ const data = require('jest-validate');
+
+ _jestValidate = 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 BULLET = _chalk().default.bold('\u25cf ');
+
+exports.BULLET = BULLET;
+const DOCUMENTATION_NOTE = ` ${_chalk().default.bold(
+ 'Configuration Documentation:'
+)}
+ https://jestjs.io/docs/configuration
+`;
+exports.DOCUMENTATION_NOTE = DOCUMENTATION_NOTE;
+
+const createValidationError = message =>
+ new (_jestValidate().ValidationError)(
+ `${BULLET}Validation Error`,
+ message,
+ DOCUMENTATION_NOTE
+ );
+
+const resolve = (resolver, {key, filePath, rootDir, optional}) => {
+ const module = _jestResolve().default.findNodeModule(
+ replaceRootDirInPath(rootDir, filePath),
+ {
+ basedir: rootDir,
+ resolver: resolver || undefined
+ }
+ );
+
+ if (!module && !optional) {
+ throw createValidationError(` Module ${_chalk().default.bold(
+ filePath
+ )} in the ${_chalk().default.bold(key)} option was not found.
+ ${_chalk().default.bold('<rootDir>')} is: ${rootDir}`);
+ } /// can cast as string since nulls will be thrown
+
+ return module;
+};
+
+exports.resolve = resolve;
+
+const escapeGlobCharacters = path => path.replace(/([()*{}\[\]!?\\])/g, '\\$1');
+
+exports.escapeGlobCharacters = escapeGlobCharacters;
+
+const replaceRootDirInPath = (rootDir, filePath) => {
+ if (!/^<rootDir>/.test(filePath)) {
+ return filePath;
+ }
+
+ return path().resolve(
+ rootDir,
+ path().normalize('./' + filePath.substring('<rootDir>'.length))
+ );
+};
+
+exports.replaceRootDirInPath = replaceRootDirInPath;
+
+const _replaceRootDirInObject = (rootDir, config) => {
+ const newConfig = {};
+
+ for (const configKey in config) {
+ newConfig[configKey] =
+ configKey === 'rootDir'
+ ? config[configKey]
+ : _replaceRootDirTags(rootDir, config[configKey]);
+ }
+
+ return newConfig;
+};
+
+const _replaceRootDirTags = (rootDir, config) => {
+ if (config == null) {
+ return config;
+ }
+
+ switch (typeof config) {
+ case 'object':
+ if (Array.isArray(config)) {
+ /// can be string[] or {}[]
+ return config.map(item => _replaceRootDirTags(rootDir, item));
+ }
+
+ if (config instanceof RegExp) {
+ return config;
+ }
+
+ return _replaceRootDirInObject(rootDir, config);
+
+ case 'string':
+ return replaceRootDirInPath(rootDir, config);
+ }
+
+ return config;
+};
+
+exports._replaceRootDirTags = _replaceRootDirTags;
+
+// newtype
+const isJSONString = text =>
+ text != null &&
+ typeof text === 'string' &&
+ text.startsWith('{') &&
+ text.endsWith('}');
+
+exports.isJSONString = isJSONString;
diff --git a/node_modules/jest-config/build/validatePattern.d.ts b/node_modules/jest-config/build/validatePattern.d.ts
new file mode 100644
index 0000000..8f15207
--- /dev/null
+++ b/node_modules/jest-config/build/validatePattern.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 validatePattern(pattern?: string): boolean;
diff --git a/node_modules/jest-config/build/validatePattern.js b/node_modules/jest-config/build/validatePattern.js
new file mode 100644
index 0000000..d18752e
--- /dev/null
+++ b/node_modules/jest-config/build/validatePattern.js
@@ -0,0 +1,25 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = validatePattern;
+
+/**
+ * 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 validatePattern(pattern) {
+ if (pattern) {
+ try {
+ // eslint-disable-next-line no-new
+ new RegExp(pattern, 'i');
+ } catch {
+ return false;
+ }
+ }
+
+ return true;
+}