diff options
Diffstat (limited to 'node_modules/jest-runner/build')
-rw-r--r-- | node_modules/jest-runner/build/index.d.ts | 24 | ||||
-rw-r--r-- | node_modules/jest-runner/build/index.js | 300 | ||||
-rw-r--r-- | node_modules/jest-runner/build/runTest.d.ts | 12 | ||||
-rw-r--r-- | node_modules/jest-runner/build/runTest.js | 494 | ||||
-rw-r--r-- | node_modules/jest-runner/build/testWorker.d.ts | 26 | ||||
-rw-r--r-- | node_modules/jest-runner/build/testWorker.js | 150 | ||||
-rw-r--r-- | node_modules/jest-runner/build/types.d.ts | 41 | ||||
-rw-r--r-- | node_modules/jest-runner/build/types.js | 15 |
8 files changed, 1062 insertions, 0 deletions
diff --git a/node_modules/jest-runner/build/index.d.ts b/node_modules/jest-runner/build/index.d.ts new file mode 100644 index 0000000..310f542 --- /dev/null +++ b/node_modules/jest-runner/build/index.d.ts @@ -0,0 +1,24 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +import Emittery = require('emittery'); +import type { Test, TestEvents } from '@jest/test-result'; +import type { Config } from '@jest/types'; +import type { OnTestFailure, OnTestStart, OnTestSuccess, TestRunnerContext, TestRunnerOptions, TestWatcher } from './types'; +export type { Test, TestFileEvent, TestEvents } from '@jest/test-result'; +export type { OnTestFailure, OnTestStart, OnTestSuccess, TestWatcher, TestRunnerContext, TestRunnerOptions, } from './types'; +export default class TestRunner { + private readonly _globalConfig; + private readonly _context; + private readonly eventEmitter; + readonly __PRIVATE_UNSTABLE_API_supportsEventEmitters__: boolean; + readonly isSerial?: boolean; + constructor(globalConfig: Config.GlobalConfig, context?: TestRunnerContext); + runTests(tests: Array<Test>, watcher: TestWatcher, onStart: OnTestStart | undefined, onResult: OnTestSuccess | undefined, onFailure: OnTestFailure | undefined, options: TestRunnerOptions): Promise<void>; + private _createInBandTestRun; + private _createParallelTestRun; + on<Name extends keyof TestEvents>(eventName: Name, listener: (eventData: TestEvents[Name]) => void | Promise<void>): Emittery.UnsubscribeFn; +} diff --git a/node_modules/jest-runner/build/index.js b/node_modules/jest-runner/build/index.js new file mode 100644 index 0000000..c4d926b --- /dev/null +++ b/node_modules/jest-runner/build/index.js @@ -0,0 +1,300 @@ +'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 _emittery() { + const data = _interopRequireDefault(require('emittery')); + + _emittery = function () { + return data; + }; + + return data; +} + +function _throat() { + const data = _interopRequireDefault(require('throat')); + + _throat = function () { + return data; + }; + + return data; +} + +function _jestUtil() { + const data = require('jest-util'); + + _jestUtil = function () { + return data; + }; + + return data; +} + +function _jestWorker() { + const data = require('jest-worker'); + + _jestWorker = function () { + return data; + }; + + return data; +} + +var _runTest = _interopRequireDefault(require('./runTest')); + +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} + +function _defineProperty(obj, key, value) { + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + return obj; +} + +const TEST_WORKER_PATH = require.resolve('./testWorker'); + +class TestRunner { + constructor(globalConfig, context) { + _defineProperty(this, '_globalConfig', void 0); + + _defineProperty(this, '_context', void 0); + + _defineProperty(this, 'eventEmitter', new (_emittery().default)()); + + _defineProperty( + this, + '__PRIVATE_UNSTABLE_API_supportsEventEmitters__', + true + ); + + _defineProperty(this, 'isSerial', void 0); + + this._globalConfig = globalConfig; + this._context = context || {}; + } + + async runTests(tests, watcher, onStart, onResult, onFailure, options) { + return await (options.serial + ? this._createInBandTestRun(tests, watcher, onStart, onResult, onFailure) + : this._createParallelTestRun( + tests, + watcher, + onStart, + onResult, + onFailure + )); + } + + async _createInBandTestRun(tests, watcher, onStart, onResult, onFailure) { + process.env.JEST_WORKER_ID = '1'; + const mutex = (0, _throat().default)(1); + return tests.reduce( + (promise, test) => + mutex(() => + promise + .then(async () => { + if (watcher.isInterrupted()) { + throw new CancelRun(); + } // Remove `if(onStart)` in Jest 27 + + if (onStart) { + await onStart(test); + return (0, _runTest.default)( + test.path, + this._globalConfig, + test.context.config, + test.context.resolver, + this._context, + undefined + ); + } // `deepCyclicCopy` used here to avoid mem-leak + + const sendMessageToJest = (eventName, args) => + this.eventEmitter.emit( + eventName, + (0, _jestUtil().deepCyclicCopy)(args, { + keepPrototype: false + }) + ); + + await this.eventEmitter.emit('test-file-start', [test]); + return (0, _runTest.default)( + test.path, + this._globalConfig, + test.context.config, + test.context.resolver, + this._context, + sendMessageToJest + ); + }) + .then(result => { + if (onResult) { + return onResult(test, result); + } + + return this.eventEmitter.emit('test-file-success', [ + test, + result + ]); + }) + .catch(err => { + if (onFailure) { + return onFailure(test, err); + } + + return this.eventEmitter.emit('test-file-failure', [test, err]); + }) + ), + Promise.resolve() + ); + } + + async _createParallelTestRun(tests, watcher, onStart, onResult, onFailure) { + const resolvers = new Map(); + + for (const test of tests) { + if (!resolvers.has(test.context.config.name)) { + resolvers.set(test.context.config.name, { + config: test.context.config, + serializableModuleMap: test.context.moduleMap.toJSON() + }); + } + } + + const worker = new (_jestWorker().Worker)(TEST_WORKER_PATH, { + exposedMethods: ['worker'], + forkOptions: { + stdio: 'pipe' + }, + maxRetries: 3, + numWorkers: this._globalConfig.maxWorkers, + setupArgs: [ + { + serializableResolvers: Array.from(resolvers.values()) + } + ] + }); + if (worker.getStdout()) worker.getStdout().pipe(process.stdout); + if (worker.getStderr()) worker.getStderr().pipe(process.stderr); + const mutex = (0, _throat().default)(this._globalConfig.maxWorkers); // Send test suites to workers continuously instead of all at once to track + // the start time of individual tests. + + const runTestInWorker = test => + mutex(async () => { + if (watcher.isInterrupted()) { + return Promise.reject(); + } // Remove `if(onStart)` in Jest 27 + + if (onStart) { + await onStart(test); + } else { + await this.eventEmitter.emit('test-file-start', [test]); + } + + const promise = worker.worker({ + config: test.context.config, + context: { + ...this._context, + changedFiles: + this._context.changedFiles && + Array.from(this._context.changedFiles), + sourcesRelatedToTestsInChangedFiles: + this._context.sourcesRelatedToTestsInChangedFiles && + Array.from(this._context.sourcesRelatedToTestsInChangedFiles) + }, + globalConfig: this._globalConfig, + path: test.path + }); + + if (promise.UNSTABLE_onCustomMessage) { + // TODO: Get appropriate type for `onCustomMessage` + promise.UNSTABLE_onCustomMessage(([event, payload]) => { + this.eventEmitter.emit(event, payload); + }); + } + + return promise; + }); + + const onInterrupt = new Promise((_, reject) => { + watcher.on('change', state => { + if (state.interrupted) { + reject(new CancelRun()); + } + }); + }); + const runAllTests = Promise.all( + tests.map(test => + runTestInWorker(test) + .then(result => { + if (onResult) { + return onResult(test, result); + } + + return this.eventEmitter.emit('test-file-success', [test, result]); + }) + .catch(error => { + if (onFailure) { + return onFailure(test, error); + } + + return this.eventEmitter.emit('test-file-failure', [test, error]); + }) + ) + ); + + const cleanup = async () => { + const {forceExited} = await worker.end(); + + if (forceExited) { + console.error( + _chalk().default.yellow( + 'A worker process has failed to exit gracefully and has been force exited. ' + + 'This is likely caused by tests leaking due to improper teardown. ' + + 'Try running with --detectOpenHandles to find leaks. ' + + 'Active timers can also cause this, ensure that .unref() was called on them.' + ) + ); + } + }; + + return Promise.race([runAllTests, onInterrupt]).then(cleanup, cleanup); + } + + on(eventName, listener) { + return this.eventEmitter.on(eventName, listener); + } +} + +exports.default = TestRunner; + +class CancelRun extends Error { + constructor(message) { + super(message); + this.name = 'CancelRun'; + } +} diff --git a/node_modules/jest-runner/build/runTest.d.ts b/node_modules/jest-runner/build/runTest.d.ts new file mode 100644 index 0000000..e7fb746 --- /dev/null +++ b/node_modules/jest-runner/build/runTest.d.ts @@ -0,0 +1,12 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ +import type { TestFileEvent, TestResult } from '@jest/test-result'; +import type { Config } from '@jest/types'; +import Resolver from 'jest-resolve'; +import type { TestRunnerContext } from './types'; +export default function runTest(path: Config.Path, globalConfig: Config.GlobalConfig, config: Config.ProjectConfig, resolver: Resolver, context?: TestRunnerContext, sendMessageToJest?: TestFileEvent): Promise<TestResult>; diff --git a/node_modules/jest-runner/build/runTest.js b/node_modules/jest-runner/build/runTest.js new file mode 100644 index 0000000..1631e75 --- /dev/null +++ b/node_modules/jest-runner/build/runTest.js @@ -0,0 +1,494 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.default = runTest; + +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 _sourceMapSupport() { + const data = _interopRequireDefault(require('source-map-support')); + + _sourceMapSupport = function () { + return data; + }; + + return data; +} + +function _console() { + const data = require('@jest/console'); + + _console = function () { + return data; + }; + + return data; +} + +function _transform() { + const data = require('@jest/transform'); + + _transform = function () { + return data; + }; + + return data; +} + +function docblock() { + const data = _interopRequireWildcard(require('jest-docblock')); + + docblock = function () { + return data; + }; + + return data; +} + +function _jestLeakDetector() { + const data = _interopRequireDefault(require('jest-leak-detector')); + + _jestLeakDetector = function () { + return data; + }; + + return data; +} + +function _jestMessageUtil() { + const data = require('jest-message-util'); + + _jestMessageUtil = function () { + return data; + }; + + return data; +} + +function _jestResolve() { + const data = require('jest-resolve'); + + _jestResolve = 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; +} + +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} + +/** + * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ +function freezeConsole(testConsole, config) { + // @ts-expect-error: `_log` is `private` - we should figure out some proper API here + testConsole._log = function fakeConsolePush(_type, message) { + const error = new (_jestUtil().ErrorWithStack)( + `${_chalk().default.red( + `${_chalk().default.bold( + 'Cannot log after tests are done.' + )} Did you forget to wait for something async in your test?` + )}\nAttempted to log "${message}".`, + fakeConsolePush + ); + const formattedError = (0, _jestMessageUtil().formatExecError)( + error, + config, + { + noStackTrace: false + }, + undefined, + true + ); + process.stderr.write('\n' + formattedError + '\n'); + process.exitCode = 1; + }; +} // Keeping the core of "runTest" as a separate function (as "runTestInternal") +// is key to be able to detect memory leaks. Since all variables are local to +// the function, when "runTestInternal" finishes its execution, they can all be +// freed, UNLESS something else is leaking them (and that's why we can detect +// the leak!). +// +// If we had all the code in a single function, we should manually nullify all +// references to verify if there is a leak, which is not maintainable and error +// prone. That's why "runTestInternal" CANNOT be inlined inside "runTest". + +async function runTestInternal( + path, + globalConfig, + config, + resolver, + context, + sendMessageToJest +) { + const testSource = fs().readFileSync(path, 'utf8'); + const docblockPragmas = docblock().parse(docblock().extract(testSource)); + const customEnvironment = docblockPragmas['jest-environment']; + let testEnvironment = config.testEnvironment; + + if (customEnvironment) { + if (Array.isArray(customEnvironment)) { + throw new Error( + `You can only define a single test environment through docblocks, got "${customEnvironment.join( + ', ' + )}"` + ); + } + + testEnvironment = (0, _jestResolve().resolveTestEnvironment)({ + ...config, + requireResolveFunction: require.resolve, + testEnvironment: customEnvironment + }); + } + + const cacheFS = new Map([[path, testSource]]); + const transformer = await (0, _transform().createScriptTransformer)( + config, + cacheFS + ); + const TestEnvironment = await transformer.requireAndTranspileModule( + testEnvironment + ); + const testFramework = await transformer.requireAndTranspileModule( + process.env.JEST_JASMINE === '1' + ? require.resolve('jest-jasmine2') + : config.testRunner + ); + const Runtime = (0, _jestUtil().interopRequireDefault)( + config.moduleLoader ? require(config.moduleLoader) : require('jest-runtime') + ).default; + const consoleOut = globalConfig.useStderr ? process.stderr : process.stdout; + + const consoleFormatter = (type, message) => + (0, _console().getConsoleOutput)( + // 4 = the console call is buried 4 stack frames deep + _console().BufferedConsole.write([], type, message, 4), + config, + globalConfig + ); + + let testConsole; + + if (globalConfig.silent) { + testConsole = new (_console().NullConsole)( + consoleOut, + consoleOut, + consoleFormatter + ); + } else if (globalConfig.verbose) { + testConsole = new (_console().CustomConsole)( + consoleOut, + consoleOut, + consoleFormatter + ); + } else { + testConsole = new (_console().BufferedConsole)(); + } + + const environment = new TestEnvironment(config, { + console: testConsole, + docblockPragmas, + testPath: path + }); + + if (typeof environment.getVmContext !== 'function') { + console.error( + `Test environment found at "${testEnvironment}" does not export a "getVmContext" method, which is mandatory from Jest 27. This method is a replacement for "runScript".` + ); + process.exit(1); + } + + const leakDetector = config.detectLeaks + ? new (_jestLeakDetector().default)(environment) + : null; + (0, _jestUtil().setGlobal)(environment.global, 'console', testConsole); + const runtime = new Runtime( + config, + environment, + resolver, + transformer, + cacheFS, + { + changedFiles: + context === null || context === void 0 ? void 0 : context.changedFiles, + collectCoverage: globalConfig.collectCoverage, + collectCoverageFrom: globalConfig.collectCoverageFrom, + collectCoverageOnlyFrom: globalConfig.collectCoverageOnlyFrom, + coverageProvider: globalConfig.coverageProvider, + sourcesRelatedToTestsInChangedFiles: + context === null || context === void 0 + ? void 0 + : context.sourcesRelatedToTestsInChangedFiles + }, + path + ); + const start = Date.now(); + + for (const path of config.setupFiles) { + const esm = runtime.unstable_shouldLoadAsEsm(path); + + if (esm) { + await runtime.unstable_importModule(path); + } else { + runtime.requireModule(path); + } + } + + const sourcemapOptions = { + environment: 'node', + handleUncaughtExceptions: false, + retrieveSourceMap: source => { + var _runtime$getSourceMap; + + const sourceMapSource = + (_runtime$getSourceMap = runtime.getSourceMaps()) === null || + _runtime$getSourceMap === void 0 + ? void 0 + : _runtime$getSourceMap.get(source); + + if (sourceMapSource) { + try { + return { + map: JSON.parse(fs().readFileSync(sourceMapSource, 'utf8')), + url: source + }; + } catch {} + } + + return null; + } + }; // For tests + + runtime + .requireInternalModule( + require.resolve('source-map-support'), + 'source-map-support' + ) + .install(sourcemapOptions); // For runtime errors + + _sourceMapSupport().default.install(sourcemapOptions); + + if ( + environment.global && + environment.global.process && + environment.global.process.exit + ) { + const realExit = environment.global.process.exit; + + environment.global.process.exit = function exit(...args) { + const error = new (_jestUtil().ErrorWithStack)( + `process.exit called with "${args.join(', ')}"`, + exit + ); + const formattedError = (0, _jestMessageUtil().formatExecError)( + error, + config, + { + noStackTrace: false + }, + undefined, + true + ); + process.stderr.write(formattedError); + return realExit(...args); + }; + } // if we don't have `getVmContext` on the env skip coverage + + const collectV8Coverage = + globalConfig.coverageProvider === 'v8' && + typeof environment.getVmContext === 'function'; + + try { + await environment.setup(); + let result; + + try { + if (collectV8Coverage) { + await runtime.collectV8Coverage(); + } + + result = await testFramework( + globalConfig, + config, + environment, + runtime, + path, + sendMessageToJest + ); + } catch (err) { + // Access stack before uninstalling sourcemaps + err.stack; + throw err; + } finally { + if (collectV8Coverage) { + await runtime.stopCollectingV8Coverage(); + } + } + + freezeConsole(testConsole, config); + const testCount = + result.numPassingTests + + result.numFailingTests + + result.numPendingTests + + result.numTodoTests; + const end = Date.now(); + const testRuntime = end - start; + result.perfStats = { + end, + runtime: testRuntime, + slow: testRuntime / 1000 > config.slowTestThreshold, + start + }; + result.testFilePath = path; + result.console = testConsole.getBuffer(); + result.skipped = testCount === result.numPendingTests; + result.displayName = config.displayName; + const coverage = runtime.getAllCoverageInfoCopy(); + + if (coverage) { + const coverageKeys = Object.keys(coverage); + + if (coverageKeys.length) { + result.coverage = coverage; + } + } + + if (collectV8Coverage) { + const v8Coverage = runtime.getAllV8CoverageInfoCopy(); + + if (v8Coverage && v8Coverage.length > 0) { + result.v8Coverage = v8Coverage; + } + } + + if (globalConfig.logHeapUsage) { + if (global.gc) { + global.gc(); + } + + result.memoryUsage = process.memoryUsage().heapUsed; + } // Delay the resolution to allow log messages to be output. + + return new Promise(resolve => { + setImmediate(() => + resolve({ + leakDetector, + result + }) + ); + }); + } finally { + runtime.teardown(); + await environment.teardown(); + + _sourceMapSupport().default.resetRetrieveHandlers(); + } +} + +async function runTest( + path, + globalConfig, + config, + resolver, + context, + sendMessageToJest +) { + const {leakDetector, result} = await runTestInternal( + path, + globalConfig, + config, + resolver, + context, + sendMessageToJest + ); + + if (leakDetector) { + // We wanna allow a tiny but time to pass to allow last-minute cleanup + await new Promise(resolve => setTimeout(resolve, 100)); // Resolve leak detector, outside the "runTestInternal" closure. + + result.leaks = await leakDetector.isLeaking(); + } else { + result.leaks = false; + } + + return result; +} diff --git a/node_modules/jest-runner/build/testWorker.d.ts b/node_modules/jest-runner/build/testWorker.d.ts new file mode 100644 index 0000000..a74bb88 --- /dev/null +++ b/node_modules/jest-runner/build/testWorker.d.ts @@ -0,0 +1,26 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ +import type { TestResult } from '@jest/test-result'; +import type { Config } from '@jest/types'; +import { SerializableModuleMap } from 'jest-haste-map'; +import type { TestRunnerSerializedContext } from './types'; +export declare type SerializableResolver = { + config: Config.ProjectConfig; + serializableModuleMap: SerializableModuleMap; +}; +declare type WorkerData = { + config: Config.ProjectConfig; + globalConfig: Config.GlobalConfig; + path: Config.Path; + context?: TestRunnerSerializedContext; +}; +export declare function setup(setupData: { + serializableResolvers: Array<SerializableResolver>; +}): void; +export declare function worker({ config, globalConfig, path, context, }: WorkerData): Promise<TestResult>; +export {}; diff --git a/node_modules/jest-runner/build/testWorker.js b/node_modules/jest-runner/build/testWorker.js new file mode 100644 index 0000000..2345443 --- /dev/null +++ b/node_modules/jest-runner/build/testWorker.js @@ -0,0 +1,150 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { + value: true +}); +exports.setup = setup; +exports.worker = worker; + +function _exit() { + const data = _interopRequireDefault(require('exit')); + + _exit = function () { + return data; + }; + + return data; +} + +function _jestHasteMap() { + const data = _interopRequireDefault(require('jest-haste-map')); + + _jestHasteMap = function () { + return data; + }; + + return data; +} + +function _jestMessageUtil() { + const data = require('jest-message-util'); + + _jestMessageUtil = function () { + return data; + }; + + return data; +} + +function _jestRuntime() { + const data = _interopRequireDefault(require('jest-runtime')); + + _jestRuntime = function () { + return data; + }; + + return data; +} + +function _jestWorker() { + const data = require('jest-worker'); + + _jestWorker = function () { + return data; + }; + + return data; +} + +var _runTest = _interopRequireDefault(require('./runTest')); + +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} + +/** + * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ +// Make sure uncaught errors are logged before we exit. +process.on('uncaughtException', err => { + console.error(err.stack); + (0, _exit().default)(1); +}); + +const formatError = error => { + if (typeof error === 'string') { + const {message, stack} = (0, _jestMessageUtil().separateMessageFromStack)( + error + ); + return { + message, + stack, + type: 'Error' + }; + } + + return { + code: error.code || undefined, + message: error.message, + stack: error.stack, + type: 'Error' + }; +}; + +const resolvers = new Map(); + +const getResolver = config => { + const resolver = resolvers.get(config.name); + + if (!resolver) { + throw new Error('Cannot find resolver for: ' + config.name); + } + + return resolver; +}; + +function setup(setupData) { + // Module maps that will be needed for the test runs are passed. + for (const { + config, + serializableModuleMap + } of setupData.serializableResolvers) { + const moduleMap = _jestHasteMap() + .default.getStatic(config) + .getModuleMapFromJSON(serializableModuleMap); + + resolvers.set( + config.name, + _jestRuntime().default.createResolver(config, moduleMap) + ); + } +} + +const sendMessageToJest = (eventName, args) => { + (0, _jestWorker().messageParent)([eventName, args]); +}; + +async function worker({config, globalConfig, path, context}) { + try { + return await (0, _runTest.default)( + path, + globalConfig, + config, + getResolver(config), + context && { + ...context, + changedFiles: context.changedFiles && new Set(context.changedFiles), + sourcesRelatedToTestsInChangedFiles: + context.sourcesRelatedToTestsInChangedFiles && + new Set(context.sourcesRelatedToTestsInChangedFiles) + }, + sendMessageToJest + ); + } catch (error) { + throw formatError(error); + } +} diff --git a/node_modules/jest-runner/build/types.d.ts b/node_modules/jest-runner/build/types.d.ts new file mode 100644 index 0000000..d972415 --- /dev/null +++ b/node_modules/jest-runner/build/types.d.ts @@ -0,0 +1,41 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +import Emittery = require('emittery'); +import type { JestEnvironment } from '@jest/environment'; +import type { SerializableError, Test, TestFileEvent, TestResult } from '@jest/test-result'; +import type { Config } from '@jest/types'; +import type RuntimeType from 'jest-runtime'; +export declare type ErrorWithCode = Error & { + code?: string; +}; +export declare type OnTestStart = (test: Test) => Promise<void>; +export declare type OnTestFailure = (test: Test, serializableError: SerializableError) => Promise<void>; +export declare type OnTestSuccess = (test: Test, testResult: TestResult) => Promise<void>; +export declare type TestFramework = (globalConfig: Config.GlobalConfig, config: Config.ProjectConfig, environment: JestEnvironment, runtime: RuntimeType, testPath: string, sendMessageToJest?: TestFileEvent) => Promise<TestResult>; +export declare type TestRunnerOptions = { + serial: boolean; +}; +export declare type TestRunnerContext = { + changedFiles?: Set<Config.Path>; + sourcesRelatedToTestsInChangedFiles?: Set<Config.Path>; +}; +export declare type TestRunnerSerializedContext = { + changedFiles?: Array<Config.Path>; + sourcesRelatedToTestsInChangedFiles?: Array<Config.Path>; +}; +declare type WatcherState = { + interrupted: boolean; +}; +export interface TestWatcher extends Emittery<{ + change: WatcherState; +}> { + state: WatcherState; + setState(state: WatcherState): void; + isInterrupted(): boolean; + isWatchMode(): boolean; +} +export {}; diff --git a/node_modules/jest-runner/build/types.js b/node_modules/jest-runner/build/types.js new file mode 100644 index 0000000..9ddbe87 --- /dev/null +++ b/node_modules/jest-runner/build/types.js @@ -0,0 +1,15 @@ +'use strict'; + +function _emittery() { + const data = _interopRequireDefault(require('emittery')); + + _emittery = function () { + return data; + }; + + return data; +} + +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : {default: obj}; +} |