123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488 |
- 'use strict';
-
- Object.defineProperty(exports, '__esModule', {
- value: true
- });
- exports.readConfig = readConfig;
- exports.readConfigs = readConfigs;
- Object.defineProperty(exports, 'normalize', {
- enumerable: true,
- get: function () {
- return _normalize.default;
- }
- });
- Object.defineProperty(exports, 'isJSONString', {
- enumerable: true,
- get: function () {
- return _utils.isJSONString;
- }
- });
- Object.defineProperty(exports, 'replaceRootDirInPath', {
- enumerable: true,
- get: function () {
- return _utils.replaceRootDirInPath;
- }
- });
- Object.defineProperty(exports, 'getTestEnvironment', {
- enumerable: true,
- get: function () {
- return _jestResolve().resolveTestEnvironment;
- }
- });
- Object.defineProperty(exports, 'deprecationEntries', {
- enumerable: true,
- get: function () {
- return _Deprecated.default;
- }
- });
- Object.defineProperty(exports, 'defaults', {
- enumerable: true,
- get: function () {
- return _Defaults.default;
- }
- });
- Object.defineProperty(exports, 'descriptions', {
- enumerable: true,
- get: function () {
- return _Descriptions.default;
- }
- });
- exports.constants = 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 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
- ) {
- 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());
- rawOptions = await (0, _readConfigFileAndSetRootDir.default)(configPath);
- } else {
- // Otherwise just try to find config in the current rootDir.
- configPath = (0, _resolveConfigPath.default)(
- packageRootOrConfig,
- process.cwd()
- );
- 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
- );
- })
- );
- 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
- };
- }
|