aboutsummaryrefslogtreecommitdiff
path: root/node_modules/@jest/core/build/cli/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/@jest/core/build/cli/index.js')
-rw-r--r--node_modules/@jest/core/build/cli/index.js399
1 files changed, 399 insertions, 0 deletions
diff --git a/node_modules/@jest/core/build/cli/index.js b/node_modules/@jest/core/build/cli/index.js
new file mode 100644
index 0000000..2844390
--- /dev/null
+++ b/node_modules/@jest/core/build/cli/index.js
@@ -0,0 +1,399 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.runCLI = runCLI;
+
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+
+ _chalk = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _exit() {
+ const data = _interopRequireDefault(require('exit'));
+
+ _exit = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _rimraf() {
+ const data = _interopRequireDefault(require('rimraf'));
+
+ _rimraf = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _console() {
+ const data = require('@jest/console');
+
+ _console = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestConfig() {
+ const data = require('jest-config');
+
+ _jestConfig = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestRuntime() {
+ const data = _interopRequireDefault(require('jest-runtime'));
+
+ _jestRuntime = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestUtil() {
+ const data = require('jest-util');
+
+ _jestUtil = function () {
+ return data;
+ };
+
+ return data;
+}
+
+var _TestWatcher = _interopRequireDefault(require('../TestWatcher'));
+
+var _collectHandles = require('../collectHandles');
+
+var _getChangedFilesPromise = _interopRequireDefault(
+ require('../getChangedFilesPromise')
+);
+
+var _getConfigsOfProjectsToRun = _interopRequireDefault(
+ require('../getConfigsOfProjectsToRun')
+);
+
+var _getProjectNamesMissingWarning = _interopRequireDefault(
+ require('../getProjectNamesMissingWarning')
+);
+
+var _getSelectProjectsMessage = _interopRequireDefault(
+ require('../getSelectProjectsMessage')
+);
+
+var _createContext = _interopRequireDefault(require('../lib/createContext'));
+
+var _handleDeprecationWarnings = _interopRequireDefault(
+ require('../lib/handleDeprecationWarnings')
+);
+
+var _logDebugMessages = _interopRequireDefault(
+ require('../lib/logDebugMessages')
+);
+
+var _pluralize = _interopRequireDefault(require('../pluralize'));
+
+var _runJest = _interopRequireDefault(require('../runJest'));
+
+var _watch = _interopRequireDefault(require('../watch'));
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+const {print: preRunMessagePrint} = _jestUtil().preRunMessage;
+
+async function runCLI(argv, projects) {
+ let results; // If we output a JSON object, we can't write anything to stdout, since
+ // it'll break the JSON structure and it won't be valid.
+
+ const outputStream =
+ argv.json || argv.useStderr ? process.stderr : process.stdout;
+ const {globalConfig, configs, hasDeprecationWarnings} = await (0,
+ _jestConfig().readConfigs)(argv, projects);
+
+ if (argv.debug) {
+ (0, _logDebugMessages.default)(globalConfig, configs, outputStream);
+ }
+
+ if (argv.showConfig) {
+ (0, _logDebugMessages.default)(globalConfig, configs, process.stdout);
+ (0, _exit().default)(0);
+ }
+
+ if (argv.clearCache) {
+ configs.forEach(config => {
+ _rimraf().default.sync(config.cacheDirectory);
+
+ process.stdout.write(`Cleared ${config.cacheDirectory}\n`);
+ });
+ (0, _exit().default)(0);
+ }
+
+ let configsOfProjectsToRun = configs;
+
+ if (argv.selectProjects) {
+ const namesMissingWarning = (0, _getProjectNamesMissingWarning.default)(
+ configs
+ );
+
+ if (namesMissingWarning) {
+ outputStream.write(namesMissingWarning);
+ }
+
+ configsOfProjectsToRun = (0, _getConfigsOfProjectsToRun.default)(
+ argv.selectProjects,
+ configs
+ );
+ outputStream.write(
+ (0, _getSelectProjectsMessage.default)(configsOfProjectsToRun)
+ );
+ }
+
+ await _run10000(
+ globalConfig,
+ configsOfProjectsToRun,
+ hasDeprecationWarnings,
+ outputStream,
+ r => {
+ results = r;
+ }
+ );
+
+ if (argv.watch || argv.watchAll) {
+ // If in watch mode, return the promise that will never resolve.
+ // If the watch mode is interrupted, watch should handle the process
+ // shutdown.
+ return new Promise(() => {});
+ }
+
+ if (!results) {
+ throw new Error(
+ 'AggregatedResult must be present after test run is complete'
+ );
+ }
+
+ const {openHandles} = results;
+
+ if (openHandles && openHandles.length) {
+ const formatted = (0, _collectHandles.formatHandleErrors)(
+ openHandles,
+ configs[0]
+ );
+ const openHandlesString = (0, _pluralize.default)(
+ 'open handle',
+ formatted.length,
+ 's'
+ );
+ const message =
+ _chalk().default.red(
+ `\nJest has detected the following ${openHandlesString} potentially keeping Jest from exiting:\n\n`
+ ) + formatted.join('\n\n');
+ console.error(message);
+ }
+
+ return {
+ globalConfig,
+ results
+ };
+}
+
+const buildContextsAndHasteMaps = async (
+ configs,
+ globalConfig,
+ outputStream
+) => {
+ const hasteMapInstances = Array(configs.length);
+ const contexts = await Promise.all(
+ configs.map(async (config, index) => {
+ (0, _jestUtil().createDirectory)(config.cacheDirectory);
+
+ const hasteMapInstance = _jestRuntime().default.createHasteMap(config, {
+ console: new (_console().CustomConsole)(outputStream, outputStream),
+ maxWorkers: Math.max(
+ 1,
+ Math.floor(globalConfig.maxWorkers / configs.length)
+ ),
+ resetCache: !config.cache,
+ watch: globalConfig.watch || globalConfig.watchAll,
+ watchman: globalConfig.watchman
+ });
+
+ hasteMapInstances[index] = hasteMapInstance;
+ return (0, _createContext.default)(
+ config,
+ await hasteMapInstance.build()
+ );
+ })
+ );
+ return {
+ contexts,
+ hasteMapInstances
+ };
+};
+
+const _run10000 = async (
+ globalConfig,
+ configs,
+ hasDeprecationWarnings,
+ outputStream,
+ onComplete
+) => {
+ // Queries to hg/git can take a while, so we need to start the process
+ // as soon as possible, so by the time we need the result it's already there.
+ const changedFilesPromise = (0, _getChangedFilesPromise.default)(
+ globalConfig,
+ configs
+ ); // Filter may need to do an HTTP call or something similar to setup.
+ // We will wait on an async response from this before using the filter.
+
+ let filter;
+
+ if (globalConfig.filter && !globalConfig.skipFilter) {
+ const rawFilter = require(globalConfig.filter);
+
+ let filterSetupPromise;
+
+ if (rawFilter.setup) {
+ // Wrap filter setup Promise to avoid "uncaught Promise" error.
+ // If an error is returned, we surface it in the return value.
+ filterSetupPromise = (async () => {
+ try {
+ await rawFilter.setup();
+ } catch (err) {
+ return err;
+ }
+
+ return undefined;
+ })();
+ }
+
+ filter = async testPaths => {
+ if (filterSetupPromise) {
+ // Expect an undefined return value unless there was an error.
+ const err = await filterSetupPromise;
+
+ if (err) {
+ throw err;
+ }
+ }
+
+ return rawFilter(testPaths);
+ };
+ }
+
+ const {contexts, hasteMapInstances} = await buildContextsAndHasteMaps(
+ configs,
+ globalConfig,
+ outputStream
+ );
+ globalConfig.watch || globalConfig.watchAll
+ ? await runWatch(
+ contexts,
+ configs,
+ hasDeprecationWarnings,
+ globalConfig,
+ outputStream,
+ hasteMapInstances,
+ filter
+ )
+ : await runWithoutWatch(
+ globalConfig,
+ contexts,
+ outputStream,
+ onComplete,
+ changedFilesPromise,
+ filter
+ );
+};
+
+const runWatch = async (
+ contexts,
+ _configs,
+ hasDeprecationWarnings,
+ globalConfig,
+ outputStream,
+ hasteMapInstances,
+ filter
+) => {
+ if (hasDeprecationWarnings) {
+ try {
+ await (0, _handleDeprecationWarnings.default)(
+ outputStream,
+ process.stdin
+ );
+ return (0, _watch.default)(
+ globalConfig,
+ contexts,
+ outputStream,
+ hasteMapInstances,
+ undefined,
+ undefined,
+ filter
+ );
+ } catch {
+ (0, _exit().default)(0);
+ }
+ }
+
+ return (0, _watch.default)(
+ globalConfig,
+ contexts,
+ outputStream,
+ hasteMapInstances,
+ undefined,
+ undefined,
+ filter
+ );
+};
+
+const runWithoutWatch = async (
+ globalConfig,
+ contexts,
+ outputStream,
+ onComplete,
+ changedFilesPromise,
+ filter
+) => {
+ const startRun = async () => {
+ if (!globalConfig.listTests) {
+ preRunMessagePrint(outputStream);
+ }
+
+ return (0, _runJest.default)({
+ changedFilesPromise,
+ contexts,
+ failedTestsCache: undefined,
+ filter,
+ globalConfig,
+ onComplete,
+ outputStream,
+ startRun,
+ testWatcher: new _TestWatcher.default({
+ isWatchMode: false
+ })
+ });
+ };
+
+ return startRun();
+};