diff --git a/CHANGELOG.md b/CHANGELOG.md index 9d328e2a912c..a22b3f2bbf6c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -78,6 +78,7 @@ - `[jest-validate]`: Migrate to TypeScript ([#7991](https://github.com/facebook/jest/pull/7991)) - `[docs]`: Update CONTRIBUTING.md to add information about running jest with `jest-circus` locally ([#8013](https://github.com/facebook/jest/pull/8013)). - `[@jest/core]`: Migrate to TypeScript ([#7998](https://github.com/facebook/jest/pull/7998)) +- `[@jest/source-map]`: Extract `getCallsite` function from `jest-util` into a new separate package ([#8029](https://github.com/facebook/jest/pull/8029)) ### Performance diff --git a/e2e/__tests__/__snapshots__/consoleAfterTeardown.test.ts.snap b/e2e/__tests__/__snapshots__/consoleAfterTeardown.test.ts.snap index 6638d30b4faa..19dd01c49fcf 100644 --- a/e2e/__tests__/__snapshots__/consoleAfterTeardown.test.ts.snap +++ b/e2e/__tests__/__snapshots__/consoleAfterTeardown.test.ts.snap @@ -15,6 +15,6 @@ PASS __tests__/console.test.js 15 | }); 16 | - at BufferedConsole.log (../../packages/jest-util/build/BufferedConsole.js:172:10) + at BufferedConsole.log (../../packages/jest-util/build/BufferedConsole.js:180:10) at log (__tests__/console.test.js:13:13) `; diff --git a/packages/jest-runtime/package.json b/packages/jest-runtime/package.json index f2f36459e08b..2015d8139ca5 100644 --- a/packages/jest-runtime/package.json +++ b/packages/jest-runtime/package.json @@ -11,6 +11,7 @@ "types": "build/index.d.ts", "dependencies": { "@jest/environment": "^24.1.0", + "@jest/source-map": "^24.1.0", "@jest/transform": "^24.1.0", "@jest/types": "^24.1.0", "@types/yargs": "^12.0.2", diff --git a/packages/jest-runtime/src/index.ts b/packages/jest-runtime/src/index.ts index e6e4fbaae8fa..ef1a43efc119 100644 --- a/packages/jest-runtime/src/index.ts +++ b/packages/jest-runtime/src/index.ts @@ -6,13 +6,14 @@ */ import path from 'path'; -import {Config, SourceMaps} from '@jest/types'; +import {Config} from '@jest/types'; import { Jest, JestEnvironment, LocalModuleRequire, Module, } from '@jest/environment'; +import {SourceMapRegistry} from '@jest/source-map'; import jestMock, {MockFunctionMetadata} from 'jest-mock'; import HasteMap, {ModuleMap} from 'jest-haste-map'; import {formatStackTrace, separateMessageFromStack} from 'jest-message-util'; @@ -102,7 +103,7 @@ class Runtime { private _shouldAutoMock: boolean; private _shouldMockModuleCache: BooleanObject; private _shouldUnmockTransitiveDependenciesCache: BooleanObject; - private _sourceMapRegistry: SourceMaps.SourceMapRegistry; + private _sourceMapRegistry: SourceMapRegistry; private _scriptTransformer: ScriptTransformer; private _transitiveShouldMock: BooleanObject; private _unmockList: RegExp | undefined; @@ -523,7 +524,7 @@ class Runtime { }, {}); } - getSourceMaps(): SourceMaps.SourceMapRegistry { + getSourceMaps(): SourceMapRegistry { return this._sourceMapRegistry; } diff --git a/packages/jest-runtime/tsconfig.json b/packages/jest-runtime/tsconfig.json index 1623a915ab6b..51952766fb90 100644 --- a/packages/jest-runtime/tsconfig.json +++ b/packages/jest-runtime/tsconfig.json @@ -14,6 +14,7 @@ {"path": "../jest-regex-util"}, {"path": "../jest-resolve"}, {"path": "../jest-snapshot"}, + {"path": "../jest-source-map"}, {"path": "../jest-types"}, {"path": "../jest-util"}, {"path": "../jest-validate"}, diff --git a/packages/jest-source-map/.npmignore b/packages/jest-source-map/.npmignore new file mode 100644 index 000000000000..85e48fe7b0a4 --- /dev/null +++ b/packages/jest-source-map/.npmignore @@ -0,0 +1,3 @@ +**/__mocks__/** +**/__tests__/** +src diff --git a/packages/jest-source-map/package.json b/packages/jest-source-map/package.json new file mode 100644 index 000000000000..4e3a2a4e9b10 --- /dev/null +++ b/packages/jest-source-map/package.json @@ -0,0 +1,24 @@ +{ + "name": "@jest/source-map", + "version": "24.1.0", + "repository": { + "type": "git", + "url": "https://github.com/facebook/jest.git", + "directory": "packages/jest-source-map" + }, + "license": "MIT", + "main": "build/index.js", + "types": "build/index.d.ts", + "dependencies": { + "callsites": "^3.0.0", + "graceful-fs": "^4.1.15", + "source-map": "^0.6.0" + }, + "devDependencies": { + "@types/graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">= 6" + }, + "gitHead": "634e5a54f46b2a62d1dc81a170562e6f4e55ad60" +} diff --git a/packages/jest-util/src/__tests__/getCallsite.test.ts b/packages/jest-source-map/src/__tests__/getCallsite.test.ts similarity index 100% rename from packages/jest-util/src/__tests__/getCallsite.test.ts rename to packages/jest-source-map/src/__tests__/getCallsite.test.ts diff --git a/packages/jest-util/src/getCallsite.ts b/packages/jest-source-map/src/getCallsite.ts similarity index 93% rename from packages/jest-util/src/getCallsite.ts rename to packages/jest-source-map/src/getCallsite.ts index 6a266c9823de..a5fe70514c27 100644 --- a/packages/jest-util/src/getCallsite.ts +++ b/packages/jest-source-map/src/getCallsite.ts @@ -8,7 +8,7 @@ import fs from 'graceful-fs'; import callsites, {CallSite} from 'callsites'; import {SourceMapConsumer} from 'source-map'; -import {SourceMaps} from '@jest/types'; +import {SourceMapRegistry} from './types'; // Copied from https://github.com/rexxars/sourcemap-decorate-callsites/blob/5b9735a156964973a75dc62fd2c7f0c1975458e8/lib/index.js#L113-L158 const addSourceMapConsumer = ( @@ -46,10 +46,7 @@ const addSourceMapConsumer = ( }); }; -export default ( - level: number, - sourceMaps?: SourceMaps.SourceMapRegistry | null, -) => { +export default (level: number, sourceMaps?: SourceMapRegistry | null) => { const levelAfterThisCall = level + 1; const stack = callsites()[levelAfterThisCall]; const sourceMapFileName = sourceMaps && sourceMaps[stack.getFileName() || '']; diff --git a/packages/jest-source-map/src/index.ts b/packages/jest-source-map/src/index.ts new file mode 100644 index 000000000000..318df8573985 --- /dev/null +++ b/packages/jest-source-map/src/index.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. + */ + +export {default as getCallsite} from './getCallsite'; +export {SourceMapRegistry} from './types'; diff --git a/packages/jest-types/src/SourceMaps.ts b/packages/jest-source-map/src/types.ts similarity index 100% rename from packages/jest-types/src/SourceMaps.ts rename to packages/jest-source-map/src/types.ts diff --git a/packages/jest-source-map/tsconfig.json b/packages/jest-source-map/tsconfig.json new file mode 100644 index 000000000000..7bb06bce6d20 --- /dev/null +++ b/packages/jest-source-map/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "rootDir": "src", + "outDir": "build" + } +} diff --git a/packages/jest-types/src/index.ts b/packages/jest-types/src/index.ts index 458831633460..00215efafd54 100644 --- a/packages/jest-types/src/index.ts +++ b/packages/jest-types/src/index.ts @@ -8,8 +8,7 @@ import * as Config from './Config'; import * as Console from './Console'; import * as Matchers from './Matchers'; -import * as SourceMaps from './SourceMaps'; import * as TestResult from './TestResult'; import * as Global from './Global'; -export {Config, Console, Matchers, SourceMaps, TestResult, Global}; +export {Config, Console, Matchers, TestResult, Global}; diff --git a/packages/jest-util/package.json b/packages/jest-util/package.json index 5808a8f03640..83718f437c2c 100644 --- a/packages/jest-util/package.json +++ b/packages/jest-util/package.json @@ -11,6 +11,7 @@ "types": "build/index.d.ts", "dependencies": { "@jest/fake-timers": "^24.1.0", + "@jest/source-map": "^24.1.0", "@jest/types": "^24.1.0", "@types/node": "*", "callsites": "^3.0.0", diff --git a/packages/jest-util/src/BufferedConsole.ts b/packages/jest-util/src/BufferedConsole.ts index 04f7f01b6e4a..989fda5c0d91 100644 --- a/packages/jest-util/src/BufferedConsole.ts +++ b/packages/jest-util/src/BufferedConsole.ts @@ -9,19 +9,17 @@ import assert from 'assert'; import {Console} from 'console'; import {format} from 'util'; import chalk from 'chalk'; -import {Console as ConsoleType, SourceMaps} from '@jest/types'; -import getCallsite from './getCallsite'; +import {Console as ConsoleType} from '@jest/types'; +import {getCallsite, SourceMapRegistry} from '@jest/source-map'; export default class BufferedConsole extends Console { private _buffer: ConsoleType.ConsoleBuffer; private _counters: ConsoleType.LogCounters; private _timers: ConsoleType.LogTimers; private _groupDepth: number; - private _getSourceMaps: () => SourceMaps.SourceMapRegistry | null | undefined; + private _getSourceMaps: () => SourceMapRegistry | null | undefined; - constructor( - getSourceMaps: () => SourceMaps.SourceMapRegistry | null | undefined, - ) { + constructor(getSourceMaps: () => SourceMapRegistry | null | undefined) { const buffer: ConsoleType.ConsoleBuffer = []; super({ write: (message: string) => { @@ -42,7 +40,7 @@ export default class BufferedConsole extends Console { type: ConsoleType.LogType, message: ConsoleType.LogMessage, level?: number | null, - sourceMaps?: SourceMaps.SourceMapRegistry | null, + sourceMaps?: SourceMapRegistry | null, ) { const callsite = getCallsite(level != null ? level : 2, sourceMaps); const origin = callsite.getFileName() + ':' + callsite.getLineNumber(); diff --git a/packages/jest-util/src/index.ts b/packages/jest-util/src/index.ts index a7291e0ae7e1..8171c1c18548 100644 --- a/packages/jest-util/src/index.ts +++ b/packages/jest-util/src/index.ts @@ -7,6 +7,7 @@ // TODO: Remove this export in the next major import {JestFakeTimers as FakeTimers} from '@jest/fake-timers'; +import {getCallsite} from '@jest/source-map'; import BufferedConsole from './BufferedConsole'; import clearLine from './clearLine'; import CustomConsole from './CustomConsole'; @@ -18,7 +19,6 @@ import getConsoleOutput from './getConsoleOutput'; import installCommonGlobals from './installCommonGlobals'; import NullConsole from './NullConsole'; import isInteractive from './isInteractive'; -import getCallsite from './getCallsite'; import setGlobal from './setGlobal'; import deepCyclicCopy from './deepCyclicCopy'; import convertDescriptorToString from './convertDescriptorToString'; diff --git a/packages/jest-util/tsconfig.json b/packages/jest-util/tsconfig.json index 876baa6cf5c8..506468d169f1 100644 --- a/packages/jest-util/tsconfig.json +++ b/packages/jest-util/tsconfig.json @@ -6,6 +6,7 @@ }, "references": [ {"path": "../jest-fake-timers"}, + {"path": "../jest-source-map"}, {"path": "../jest-types"} ] } diff --git a/yarn.lock b/yarn.lock index d7670b5c202f..2a165b6d6a2f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1784,14 +1784,6 @@ "@types/prop-types" "*" csstype "^2.2.0" -"@types/readable-stream@^2.3.0": - version "2.3.1" - resolved "https://registry.yarnpkg.com/@types/readable-stream/-/readable-stream-2.3.1.tgz#59d458b51c84c585caea06e296e2225057c9ea8e" - integrity sha512-Dp6t95yGEOm2y669mQrSl0kUg+oL+bJEiCWMyDv0Yq+FcVvjzNRLTAqJks2LDBYYrazZXNI7lZXq3lp7MOvt4A== - dependencies: - "@types/node" "*" - safe-buffer "*" - "@types/resolve@*": version "0.0.8" resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-0.0.8.tgz#f26074d238e02659e323ce1a13d041eee280e194" @@ -11516,7 +11508,7 @@ rxjs@^6.4.0: dependencies: tslib "^1.9.0" -safe-buffer@*, safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: +safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==