aboutsummaryrefslogtreecommitdiff
path: root/node_modules/jest-config/build/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/jest-config/build/index.js')
-rw-r--r--node_modules/jest-config/build/index.js495
1 files changed, 495 insertions, 0 deletions
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
+ };
+}