ts-jest 26.3.0 → 26.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.ts-jest-digest +1 -1
- package/CHANGELOG.md +52 -0
- package/README.md +0 -1
- package/dist/cli/config/init.d.ts +0 -5
- package/dist/cli/config/init.js +3 -18
- package/dist/cli/config/migrate.js +11 -41
- package/dist/cli/help.js +1 -7
- package/dist/cli/helpers/presets.js +5 -11
- package/dist/cli/index.js +11 -12
- package/dist/compiler/instance.d.ts +2 -1
- package/dist/compiler/instance.js +8 -27
- package/dist/compiler/language-service.js +11 -62
- package/dist/compiler/transpiler.js +5 -10
- package/dist/config/config-set.d.ts +19 -26
- package/dist/config/config-set.js +305 -727
- package/dist/config/paths-to-module-name-mapper.d.ts +1 -1
- package/dist/config/paths-to-module-name-mapper.js +13 -12
- package/dist/constants.d.ts +2 -1
- package/dist/constants.js +1 -22
- package/dist/index.d.ts +4 -120
- package/dist/index.js +9 -87
- package/dist/{config → presets}/create-jest-preset.d.ts +2 -1
- package/dist/{config → presets}/create-jest-preset.js +1 -1
- package/dist/transformers/hoist-jest.js +48 -73
- package/dist/transformers/index.js +20 -4
- package/dist/transformers/path-mapping.d.ts +3 -0
- package/dist/transformers/path-mapping.js +121 -0
- package/dist/ts-jest-transformer.d.ts +5 -22
- package/dist/ts-jest-transformer.js +54 -103
- package/dist/types.d.ts +14 -90
- package/dist/{util → utils}/backports.d.ts +0 -0
- package/dist/{util → utils}/backports.js +4 -11
- package/dist/{util → utils}/get-package-version.d.ts +0 -0
- package/dist/{util → utils}/get-package-version.js +0 -3
- package/dist/{util → utils}/importer.d.ts +0 -0
- package/dist/{util → utils}/importer.js +4 -29
- package/dist/utils/json.d.ts +2 -0
- package/dist/{util → utils}/json.js +0 -14
- package/dist/utils/jsonable-value.d.ts +10 -0
- package/dist/{util → utils}/jsonable-value.js +1 -4
- package/dist/{util → utils}/logger.d.ts +0 -0
- package/dist/{util → utils}/logger.js +0 -4
- package/dist/{util → utils}/memoize.d.ts +0 -0
- package/dist/{util → utils}/memoize.js +0 -8
- package/dist/{util → utils}/messages.d.ts +0 -0
- package/dist/{util → utils}/messages.js +0 -4
- package/dist/{util → utils}/normalize-slashes.d.ts +0 -0
- package/dist/{util → utils}/normalize-slashes.js +0 -3
- package/dist/{util → utils}/sha1.d.ts +0 -0
- package/dist/{util → utils}/sha1.js +0 -10
- package/dist/{util → utils}/testing.d.ts +1 -1
- package/dist/{util → utils}/testing.js +0 -0
- package/dist/{util → utils}/ts-error.d.ts +0 -0
- package/dist/{util → utils}/ts-error.js +2 -12
- package/dist/{util → utils}/version-checkers.d.ts +0 -0
- package/dist/{util → utils}/version-checkers.js +5 -8
- package/jest-preset.js +1 -1
- package/package.json +8 -7
- package/presets/index.js +4 -4
- package/utils/index.d.ts +3 -1
- package/utils/index.js +15 -1
- package/dist/util/index.d.ts +0 -3
- package/dist/util/index.js +0 -9
- package/dist/util/json.d.ts +0 -1
- package/dist/util/jsonable-value.d.ts +0 -1
- package/presets/create.js +0 -1
- package/presets/index.d.ts +0 -5
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Config } from '@jest/types';
|
|
2
2
|
declare type JestPathMapping = Config.InitialOptions['moduleNameMapper'];
|
|
3
3
|
export declare const pathsToModuleNameMapper: (mapping: import("typescript").MapLike<string[]>, { prefix }?: {
|
|
4
|
-
prefix
|
|
4
|
+
prefix: string;
|
|
5
5
|
}) => JestPathMapping;
|
|
6
6
|
export {};
|
|
@@ -14,41 +14,42 @@ var _a;
|
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.pathsToModuleNameMapper = void 0;
|
|
16
16
|
var bs_logger_1 = require("bs-logger");
|
|
17
|
-
var logger_1 = require("../
|
|
18
|
-
var messages_1 = require("../
|
|
19
|
-
// we don't need to escape all chars, so commented out is the real one
|
|
20
|
-
// const escapeRegex = (str: string) => str.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&')
|
|
17
|
+
var logger_1 = require("../utils/logger");
|
|
18
|
+
var messages_1 = require("../utils/messages");
|
|
21
19
|
var escapeRegex = function (str) { return str.replace(/[-\\^$*+?.()|[\]{}]/g, '\\$&'); };
|
|
22
20
|
var logger = logger_1.rootLogger.child((_a = {}, _a[bs_logger_1.LogContexts.namespace] = 'path-mapper', _a));
|
|
23
21
|
exports.pathsToModuleNameMapper = function (mapping, _a) {
|
|
24
22
|
var e_1, _b;
|
|
25
|
-
var _c = (_a === void 0 ?
|
|
23
|
+
var _c = (_a === void 0 ? Object.create(null) : _a).prefix, prefix = _c === void 0 ? '' : _c;
|
|
26
24
|
var jestMap = {};
|
|
27
25
|
try {
|
|
28
26
|
for (var _d = __values(Object.keys(mapping)), _e = _d.next(); !_e.done; _e = _d.next()) {
|
|
29
27
|
var fromPath = _e.value;
|
|
30
28
|
var pattern = void 0;
|
|
31
29
|
var toPaths = mapping[fromPath];
|
|
32
|
-
// check that we have only one target path
|
|
33
30
|
if (toPaths.length === 0) {
|
|
34
|
-
logger.warn(messages_1.interpolate("Not mapping \"{{path}}\" because it has no target."
|
|
31
|
+
logger.warn(messages_1.interpolate("Not mapping \"{{path}}\" because it has no target.", { path: fromPath }));
|
|
35
32
|
continue;
|
|
36
33
|
}
|
|
37
|
-
// split with '*'
|
|
38
34
|
var segments = fromPath.split(/\*/g);
|
|
39
35
|
if (segments.length === 1) {
|
|
40
|
-
var paths = toPaths.map(function (target) {
|
|
36
|
+
var paths = toPaths.map(function (target) {
|
|
37
|
+
var enrichedPrefix = prefix !== '' && !prefix.endsWith('/') ? prefix + "/" : prefix;
|
|
38
|
+
return "" + enrichedPrefix + target;
|
|
39
|
+
});
|
|
41
40
|
pattern = "^" + escapeRegex(fromPath) + "$";
|
|
42
41
|
jestMap[pattern] = paths.length === 1 ? paths[0] : paths;
|
|
43
42
|
}
|
|
44
43
|
else if (segments.length === 2) {
|
|
45
|
-
var paths = toPaths.map(function (target) {
|
|
44
|
+
var paths = toPaths.map(function (target) {
|
|
45
|
+
var enrichedPrefix = prefix !== '' && !prefix.endsWith('/') ? prefix + "/" : prefix;
|
|
46
|
+
return "" + enrichedPrefix + target.replace(/\*/g, '$1');
|
|
47
|
+
});
|
|
46
48
|
pattern = "^" + escapeRegex(segments[0]) + "(.*)" + escapeRegex(segments[1]) + "$";
|
|
47
49
|
jestMap[pattern] = paths.length === 1 ? paths[0] : paths;
|
|
48
50
|
}
|
|
49
51
|
else {
|
|
50
|
-
logger.warn(messages_1.interpolate("Not mapping \"{{path}}\" because it has more than one star (`*`)."
|
|
51
|
-
continue;
|
|
52
|
+
logger.warn(messages_1.interpolate("Not mapping \"{{path}}\" because it has more than one star (`*`).", { path: fromPath }));
|
|
52
53
|
}
|
|
53
54
|
}
|
|
54
55
|
}
|
package/dist/constants.d.ts
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
export
|
|
1
|
+
export declare const TS_TSX_REGEX: RegExp;
|
|
2
|
+
export declare const JS_JSX_REGEX: RegExp;
|
package/dist/constants.js
CHANGED
|
@@ -1,28 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DEFAULT_JEST_TEST_MATCH = exports.
|
|
4
|
-
/**
|
|
5
|
-
* @internal
|
|
6
|
-
*/
|
|
3
|
+
exports.DEFAULT_JEST_TEST_MATCH = exports.JS_JSX_REGEX = exports.TS_TSX_REGEX = exports.LINE_FEED = void 0;
|
|
7
4
|
exports.LINE_FEED = '\n';
|
|
8
|
-
/**
|
|
9
|
-
* @internal
|
|
10
|
-
*/
|
|
11
|
-
exports.EXTENSION_REGEX = /\.[^.]+$/;
|
|
12
|
-
/**
|
|
13
|
-
* @internal
|
|
14
|
-
*/
|
|
15
5
|
exports.TS_TSX_REGEX = /\.tsx?$/;
|
|
16
|
-
/**
|
|
17
|
-
* @internal
|
|
18
|
-
*/
|
|
19
6
|
exports.JS_JSX_REGEX = /\.jsx?$/;
|
|
20
|
-
/**
|
|
21
|
-
* @internal
|
|
22
|
-
*/
|
|
23
|
-
exports.JSON_REGEX = /\.json$/i;
|
|
24
|
-
/**
|
|
25
|
-
* @internal
|
|
26
|
-
* See https://jestjs.io/docs/en/configuration#testmatch-arraystring
|
|
27
|
-
*/
|
|
28
7
|
exports.DEFAULT_JEST_TEST_MATCH = ['**/__tests__/**/*.[jt]s?(x)', '**/?(*.)+(spec|test).[jt]s?(x)'];
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { createJestPreset as createJestPresetCore } from './
|
|
1
|
+
import { createJestPreset as createJestPresetCore } from './presets/create-jest-preset';
|
|
2
2
|
import { TsJestTransformer } from './ts-jest-transformer';
|
|
3
3
|
import type { TsJestGlobalOptions } from './types';
|
|
4
|
-
import { mocked as mockedCore } from './
|
|
4
|
+
import { mocked as mockedCore } from './utils/testing';
|
|
5
5
|
declare module '@jest/types' {
|
|
6
6
|
namespace Config {
|
|
7
7
|
interface ConfigGlobals {
|
|
@@ -9,127 +9,11 @@ declare module '@jest/types' {
|
|
|
9
9
|
}
|
|
10
10
|
}
|
|
11
11
|
}
|
|
12
|
-
/** @deprecated */
|
|
13
12
|
export declare const mocked: typeof mockedCore;
|
|
14
|
-
/** @deprecated */
|
|
15
13
|
export declare const createJestPreset: typeof createJestPresetCore;
|
|
16
|
-
/** @deprecated */
|
|
17
14
|
export declare const pathsToModuleNameMapper: (mapping: import("typescript").MapLike<string[]>, { prefix }?: {
|
|
18
|
-
prefix
|
|
15
|
+
prefix: string;
|
|
19
16
|
}) => {
|
|
20
17
|
[key: string]: string | string[];
|
|
21
18
|
} | undefined;
|
|
22
|
-
export declare function createTransformer(
|
|
23
|
-
declare const jestPreset: Pick<Partial<{
|
|
24
|
-
automock: boolean;
|
|
25
|
-
bail: number | boolean;
|
|
26
|
-
cache: boolean;
|
|
27
|
-
cacheDirectory: string;
|
|
28
|
-
clearMocks: boolean;
|
|
29
|
-
changedFilesWithAncestor: boolean;
|
|
30
|
-
changedSince: string;
|
|
31
|
-
collectCoverage: boolean;
|
|
32
|
-
collectCoverageFrom: string[];
|
|
33
|
-
collectCoverageOnlyFrom: {
|
|
34
|
-
[key: string]: boolean;
|
|
35
|
-
};
|
|
36
|
-
coverageDirectory: string;
|
|
37
|
-
coveragePathIgnorePatterns: string[];
|
|
38
|
-
coverageProvider: "babel" | "v8";
|
|
39
|
-
coverageReporters: import("@jest/types/build/Config").CoverageReporters;
|
|
40
|
-
coverageThreshold: {
|
|
41
|
-
global: {
|
|
42
|
-
[key: string]: number;
|
|
43
|
-
};
|
|
44
|
-
};
|
|
45
|
-
dependencyExtractor: string;
|
|
46
|
-
detectLeaks: boolean;
|
|
47
|
-
detectOpenHandles: boolean;
|
|
48
|
-
displayName: string | import("@jest/types/build/Config").DisplayName;
|
|
49
|
-
expand: boolean;
|
|
50
|
-
extraGlobals: string[];
|
|
51
|
-
filter: string;
|
|
52
|
-
findRelatedTests: boolean;
|
|
53
|
-
forceCoverageMatch: string[];
|
|
54
|
-
forceExit: boolean;
|
|
55
|
-
json: boolean;
|
|
56
|
-
globals: import("@jest/types/build/Config").ConfigGlobals;
|
|
57
|
-
globalSetup: string | null | undefined;
|
|
58
|
-
globalTeardown: string | null | undefined;
|
|
59
|
-
haste: import("@jest/types/build/Config").HasteConfig;
|
|
60
|
-
reporters: (string | import("@jest/types/build/Config").ReporterConfig)[];
|
|
61
|
-
logHeapUsage: boolean;
|
|
62
|
-
lastCommit: boolean;
|
|
63
|
-
listTests: boolean;
|
|
64
|
-
mapCoverage: boolean;
|
|
65
|
-
maxConcurrency: number;
|
|
66
|
-
maxWorkers: string | number;
|
|
67
|
-
moduleDirectories: string[];
|
|
68
|
-
moduleFileExtensions: string[];
|
|
69
|
-
moduleLoader: string;
|
|
70
|
-
moduleNameMapper: {
|
|
71
|
-
[key: string]: string | string[];
|
|
72
|
-
};
|
|
73
|
-
modulePathIgnorePatterns: string[];
|
|
74
|
-
modulePaths: string[];
|
|
75
|
-
name: string;
|
|
76
|
-
noStackTrace: boolean;
|
|
77
|
-
notify: boolean;
|
|
78
|
-
notifyMode: string;
|
|
79
|
-
onlyChanged: boolean;
|
|
80
|
-
outputFile: string;
|
|
81
|
-
passWithNoTests: boolean;
|
|
82
|
-
preprocessorIgnorePatterns: string[];
|
|
83
|
-
preset: string | null | undefined;
|
|
84
|
-
prettierPath: string | null | undefined;
|
|
85
|
-
projects: string[];
|
|
86
|
-
replname: string | null | undefined;
|
|
87
|
-
resetMocks: boolean;
|
|
88
|
-
resetModules: boolean;
|
|
89
|
-
resolver: string | null | undefined;
|
|
90
|
-
restoreMocks: boolean;
|
|
91
|
-
rootDir: string;
|
|
92
|
-
roots: string[];
|
|
93
|
-
runner: string;
|
|
94
|
-
runTestsByPath: boolean;
|
|
95
|
-
scriptPreprocessor: string;
|
|
96
|
-
setupFiles: string[];
|
|
97
|
-
setupTestFrameworkScriptFile: string;
|
|
98
|
-
setupFilesAfterEnv: string[];
|
|
99
|
-
silent: boolean;
|
|
100
|
-
skipFilter: boolean;
|
|
101
|
-
skipNodeResolution: boolean;
|
|
102
|
-
slowTestThreshold: number;
|
|
103
|
-
snapshotResolver: string;
|
|
104
|
-
snapshotSerializers: string[];
|
|
105
|
-
errorOnDeprecated: boolean;
|
|
106
|
-
testEnvironment: string;
|
|
107
|
-
testEnvironmentOptions: Record<string, any>;
|
|
108
|
-
testFailureExitCode: string | number;
|
|
109
|
-
testLocationInResults: boolean;
|
|
110
|
-
testMatch: string[];
|
|
111
|
-
testNamePattern: string;
|
|
112
|
-
testPathDirs: string[];
|
|
113
|
-
testPathIgnorePatterns: string[];
|
|
114
|
-
testRegex: string | string[];
|
|
115
|
-
testResultsProcessor: string;
|
|
116
|
-
testRunner: string;
|
|
117
|
-
testSequencer: string;
|
|
118
|
-
testURL: string;
|
|
119
|
-
testTimeout: number;
|
|
120
|
-
timers: "real" | "fake";
|
|
121
|
-
transform: {
|
|
122
|
-
[regex: string]: string | import("@jest/types/build/Config").TransformerConfig;
|
|
123
|
-
};
|
|
124
|
-
transformIgnorePatterns: string[];
|
|
125
|
-
watchPathIgnorePatterns: string[];
|
|
126
|
-
unmockedModulePathPatterns: string[];
|
|
127
|
-
updateSnapshot: boolean;
|
|
128
|
-
useStderr: boolean;
|
|
129
|
-
verbose?: boolean | undefined;
|
|
130
|
-
watch: boolean;
|
|
131
|
-
watchAll: boolean;
|
|
132
|
-
watchman: boolean;
|
|
133
|
-
watchPlugins: (string | [string, Record<string, any>])[];
|
|
134
|
-
}>, "moduleFileExtensions" | "testMatch" | "transform">;
|
|
135
|
-
export { jestPreset, };
|
|
19
|
+
export declare function createTransformer(): TsJestTransformer;
|
package/dist/index.js
CHANGED
|
@@ -1,102 +1,24 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __read = (this && this.__read) || function (o, n) {
|
|
3
|
-
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
4
|
-
if (!m) return o;
|
|
5
|
-
var i = m.call(o), r, ar = [], e;
|
|
6
|
-
try {
|
|
7
|
-
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
8
|
-
}
|
|
9
|
-
catch (error) { e = { error: error }; }
|
|
10
|
-
finally {
|
|
11
|
-
try {
|
|
12
|
-
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
13
|
-
}
|
|
14
|
-
finally { if (e) throw e.error; }
|
|
15
|
-
}
|
|
16
|
-
return ar;
|
|
17
|
-
};
|
|
18
|
-
var __spread = (this && this.__spread) || function () {
|
|
19
|
-
for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));
|
|
20
|
-
return ar;
|
|
21
|
-
};
|
|
22
2
|
var _a;
|
|
23
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
-
exports.
|
|
4
|
+
exports.createTransformer = exports.pathsToModuleNameMapper = exports.createJestPreset = exports.mocked = void 0;
|
|
25
5
|
var bs_logger_1 = require("bs-logger");
|
|
26
|
-
var
|
|
27
|
-
var path_1 = require("path");
|
|
28
|
-
var create_jest_preset_1 = require("./config/create-jest-preset");
|
|
6
|
+
var create_jest_preset_1 = require("./presets/create-jest-preset");
|
|
29
7
|
var paths_to_module_name_mapper_1 = require("./config/paths-to-module-name-mapper");
|
|
30
8
|
var ts_jest_transformer_1 = require("./ts-jest-transformer");
|
|
31
|
-
var logger_1 = require("./
|
|
32
|
-
var messages_1 = require("./
|
|
33
|
-
var testing_1 = require("./
|
|
34
|
-
var version_checkers_1 = require("./
|
|
35
|
-
// deprecate helpers
|
|
9
|
+
var logger_1 = require("./utils/logger");
|
|
10
|
+
var messages_1 = require("./utils/messages");
|
|
11
|
+
var testing_1 = require("./utils/testing");
|
|
12
|
+
var version_checkers_1 = require("./utils/version-checkers");
|
|
36
13
|
var warn = logger_1.rootLogger.child((_a = {}, _a[bs_logger_1.LogContexts.logLevel] = bs_logger_1.LogLevels.warn, _a));
|
|
37
14
|
var helperMoved = function (name, helper) {
|
|
38
|
-
return warn.wrap(messages_1.interpolate("The `{{helper}}` helper has been moved to `ts-jest/utils`. Use `import { {{helper}} } from 'ts-jest/utils'` instead."
|
|
15
|
+
return warn.wrap(messages_1.interpolate("The `{{helper}}` helper has been moved to `ts-jest/utils`. Use `import { {{helper}} } from 'ts-jest/utils'` instead.", { helper: name }), helper);
|
|
39
16
|
};
|
|
40
|
-
/** @deprecated */
|
|
41
17
|
exports.mocked = helperMoved('mocked', testing_1.mocked);
|
|
42
|
-
/** @deprecated */
|
|
43
18
|
exports.createJestPreset = helperMoved('createJestPreset', create_jest_preset_1.createJestPreset);
|
|
44
|
-
/** @deprecated */
|
|
45
19
|
exports.pathsToModuleNameMapper = helperMoved('pathsToModuleNameMapper', paths_to_module_name_mapper_1.pathsToModuleNameMapper);
|
|
46
|
-
|
|
47
|
-
* @internal
|
|
48
|
-
*/
|
|
49
|
-
exports.version = require('../package.json').version;
|
|
50
|
-
/**
|
|
51
|
-
* @internal
|
|
52
|
-
*/
|
|
53
|
-
exports.digest = fs_1.readFileSync(path_1.resolve(__dirname, '..', '.ts-jest-digest'), 'utf8');
|
|
54
|
-
var transformer;
|
|
55
|
-
function defaultTransformer() {
|
|
56
|
-
return transformer || (transformer = createTransformer());
|
|
57
|
-
}
|
|
58
|
-
function createTransformer(baseConfig) {
|
|
20
|
+
function createTransformer() {
|
|
59
21
|
version_checkers_1.VersionCheckers.jest.warn();
|
|
60
|
-
return new ts_jest_transformer_1.TsJestTransformer(
|
|
22
|
+
return new ts_jest_transformer_1.TsJestTransformer();
|
|
61
23
|
}
|
|
62
24
|
exports.createTransformer = createTransformer;
|
|
63
|
-
/**
|
|
64
|
-
* @internal
|
|
65
|
-
*/
|
|
66
|
-
function process() {
|
|
67
|
-
var _a;
|
|
68
|
-
var args = [];
|
|
69
|
-
for (var _i = 0; _i < arguments.length; _i++) {
|
|
70
|
-
args[_i] = arguments[_i];
|
|
71
|
-
}
|
|
72
|
-
return (_a = defaultTransformer()).process.apply(_a, __spread(args));
|
|
73
|
-
}
|
|
74
|
-
exports.process = process;
|
|
75
|
-
/**
|
|
76
|
-
* @internal
|
|
77
|
-
*/
|
|
78
|
-
function getCacheKey() {
|
|
79
|
-
var _a;
|
|
80
|
-
var args = [];
|
|
81
|
-
for (var _i = 0; _i < arguments.length; _i++) {
|
|
82
|
-
args[_i] = arguments[_i];
|
|
83
|
-
}
|
|
84
|
-
return (_a = defaultTransformer()).getCacheKey.apply(_a, __spread(args));
|
|
85
|
-
}
|
|
86
|
-
exports.getCacheKey = getCacheKey;
|
|
87
|
-
/**
|
|
88
|
-
* @internal
|
|
89
|
-
*/
|
|
90
|
-
// we let jest doing the instrumentation, it does it well
|
|
91
|
-
exports.canInstrument = false;
|
|
92
|
-
var jestPreset = create_jest_preset_1.createJestPreset();
|
|
93
|
-
exports.jestPreset = jestPreset;
|
|
94
|
-
/**
|
|
95
|
-
* @internal
|
|
96
|
-
*/
|
|
97
|
-
// for tests
|
|
98
|
-
exports.__singleton = function () { return transformer; };
|
|
99
|
-
/**
|
|
100
|
-
* @internal
|
|
101
|
-
*/
|
|
102
|
-
exports.__resetModule = function () { return (transformer = undefined); };
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { Config } from '@jest/types';
|
|
2
2
|
export declare type TsJestPresets = Pick<Config.InitialOptions, 'moduleFileExtensions' | 'transform' | 'testMatch'>;
|
|
3
|
-
|
|
3
|
+
interface CreateJestPresetOptions {
|
|
4
4
|
allowJs?: boolean;
|
|
5
5
|
}
|
|
6
6
|
export declare function createJestPreset({ allowJs }?: CreateJestPresetOptions, from?: Config.InitialOptions): TsJestPresets;
|
|
7
|
+
export {};
|
|
@@ -12,7 +12,7 @@ var __assign = (this && this.__assign) || function () {
|
|
|
12
12
|
};
|
|
13
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
14
|
exports.createJestPreset = void 0;
|
|
15
|
-
var logger_1 = require("../
|
|
15
|
+
var logger_1 = require("../utils/logger");
|
|
16
16
|
var logger = logger_1.rootLogger.child({ namespace: 'jest-preset' });
|
|
17
17
|
function createJestPreset(_a, from) {
|
|
18
18
|
var _b;
|
|
@@ -32,83 +32,53 @@ var __spread = (this && this.__spread) || function () {
|
|
|
32
32
|
};
|
|
33
33
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
34
34
|
exports.factory = exports.version = exports.name = void 0;
|
|
35
|
-
// take care of including ONLY TYPES here, for the rest use `ts`
|
|
36
35
|
var bs_logger_1 = require("bs-logger");
|
|
37
|
-
/**
|
|
38
|
-
* What methods of `jest` should we hoist
|
|
39
|
-
*/
|
|
40
36
|
var HOIST_METHODS = ['mock', 'unmock', 'enableAutomock', 'disableAutomock', 'deepUnmock'];
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
37
|
+
var JEST_GLOBALS_MODULE_NAME = '@jest/globals';
|
|
38
|
+
var JEST_GLOBAL_NAME = 'jest';
|
|
39
|
+
var ROOT_LEVEL_AST = 1;
|
|
44
40
|
exports.name = 'hoisting-jest-mock';
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* @internal
|
|
48
|
-
*/
|
|
49
|
-
exports.version = 1;
|
|
50
|
-
/**
|
|
51
|
-
* The factory of hoisting transformer factory
|
|
52
|
-
*
|
|
53
|
-
* @param cs Current jest configuration-set
|
|
54
|
-
* @internal
|
|
55
|
-
*/
|
|
41
|
+
exports.version = 4;
|
|
56
42
|
function factory(cs) {
|
|
57
43
|
var logger = cs.logger.child({ namespace: 'ts-hoisting' });
|
|
58
|
-
/**
|
|
59
|
-
* Our compiler (typescript, or a module with typescript-like interface)
|
|
60
|
-
* To access Program or TypeChecker, do: cs.tsCompiler.program or cs.tsCompiler.program.getTypeChecker()
|
|
61
|
-
*/
|
|
62
44
|
var ts = cs.compilerModule;
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
45
|
+
var importNames = [];
|
|
46
|
+
function shouldHoistExpression(node) {
|
|
47
|
+
if (ts.isCallExpression(node) &&
|
|
48
|
+
ts.isPropertyAccessExpression(node.expression) &&
|
|
49
|
+
HOIST_METHODS.includes(node.expression.name.text)) {
|
|
50
|
+
if (importNames.length) {
|
|
51
|
+
return ((ts.isIdentifier(node.expression.expression) && importNames.includes(node.expression.expression.text)) ||
|
|
52
|
+
(ts.isPropertyAccessExpression(node.expression.expression) &&
|
|
53
|
+
ts.isIdentifier(node.expression.expression.expression) &&
|
|
54
|
+
importNames.includes(node.expression.expression.expression.text)) ||
|
|
55
|
+
shouldHoistExpression(node.expression.expression));
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
return ((ts.isIdentifier(node.expression.expression) && node.expression.expression.text === JEST_GLOBAL_NAME) ||
|
|
59
|
+
shouldHoistExpression(node.expression.expression));
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return false;
|
|
69
63
|
}
|
|
70
|
-
/**
|
|
71
|
-
* Checks whether given node is a statement that we need to hoist
|
|
72
|
-
*
|
|
73
|
-
* @param node The node to test
|
|
74
|
-
*/
|
|
75
64
|
function shouldHoistNode(node) {
|
|
76
65
|
return ts.isExpressionStatement(node) && shouldHoistExpression(node.expression);
|
|
77
66
|
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
*/
|
|
67
|
+
function isJestGlobalImport(node) {
|
|
68
|
+
return (ts.isImportDeclaration(node) &&
|
|
69
|
+
ts.isStringLiteral(node.moduleSpecifier) &&
|
|
70
|
+
node.moduleSpecifier.text === JEST_GLOBALS_MODULE_NAME);
|
|
71
|
+
}
|
|
84
72
|
function createVisitor(ctx, _) {
|
|
85
|
-
/**
|
|
86
|
-
* Current block level
|
|
87
|
-
*/
|
|
88
73
|
var level = 0;
|
|
89
|
-
/**
|
|
90
|
-
* List of nodes which needs to be hoisted, indexed by their owning level
|
|
91
|
-
*/
|
|
92
74
|
var hoisted = [];
|
|
93
|
-
/**
|
|
94
|
-
* Called when we enter a block to increase the level
|
|
95
|
-
*/
|
|
96
75
|
var enter = function () {
|
|
97
76
|
level++;
|
|
98
|
-
// reuse arrays
|
|
99
77
|
if (hoisted[level]) {
|
|
100
78
|
hoisted[level].splice(0, hoisted[level].length);
|
|
101
79
|
}
|
|
102
80
|
};
|
|
103
|
-
/**
|
|
104
|
-
* Called when we leave a block to decrease the level
|
|
105
|
-
*/
|
|
106
81
|
var exit = function () { return level--; };
|
|
107
|
-
/**
|
|
108
|
-
* Adds a node to the list of nodes to be hoisted in the current level
|
|
109
|
-
*
|
|
110
|
-
* @param node The node to hoist
|
|
111
|
-
*/
|
|
112
82
|
var hoist = function (node) {
|
|
113
83
|
if (hoisted[level]) {
|
|
114
84
|
hoisted[level].push(node);
|
|
@@ -117,37 +87,42 @@ function factory(cs) {
|
|
|
117
87
|
hoisted[level] = [node];
|
|
118
88
|
}
|
|
119
89
|
};
|
|
120
|
-
/**
|
|
121
|
-
* Our main visitor, which will be called recursively for each node in the source file's AST
|
|
122
|
-
*
|
|
123
|
-
* @param node The node to be visited
|
|
124
|
-
*/
|
|
125
90
|
var visitor = function (node) {
|
|
126
|
-
|
|
91
|
+
var _a, _b;
|
|
127
92
|
enter();
|
|
128
|
-
// visit each child
|
|
129
93
|
var resultNode = ts.visitEachChild(node, visitor, ctx);
|
|
130
|
-
|
|
94
|
+
if (isJestGlobalImport(resultNode) && ((_a = resultNode.importClause) === null || _a === void 0 ? void 0 : _a.namedBindings) &&
|
|
95
|
+
(ts.isNamespaceImport(resultNode.importClause.namedBindings) ||
|
|
96
|
+
ts.isNamedImports(resultNode.importClause.namedBindings))) {
|
|
97
|
+
var namedBindings = resultNode.importClause.namedBindings;
|
|
98
|
+
var jestImportName = ts.isNamespaceImport(namedBindings)
|
|
99
|
+
? namedBindings.name.text
|
|
100
|
+
: (_b = namedBindings.elements.find(function (element) { var _a; return element.name.text === JEST_GLOBAL_NAME || ((_a = element.propertyName) === null || _a === void 0 ? void 0 : _a.text) === JEST_GLOBAL_NAME; })) === null || _b === void 0 ? void 0 : _b.name.text;
|
|
101
|
+
if (jestImportName) {
|
|
102
|
+
importNames.push(jestImportName);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
131
105
|
if (hoisted[level] && hoisted[level].length) {
|
|
132
|
-
// re-order children so that hoisted ones appear first
|
|
133
|
-
// this is actually the main job of this transformer
|
|
134
106
|
var hoistedStmts_1 = hoisted[level];
|
|
135
|
-
var otherStmts = resultNode.statements.filter(function (s) { return !hoistedStmts_1.includes(s); });
|
|
107
|
+
var otherStmts = resultNode.statements.filter(function (s) { return !hoistedStmts_1.includes(s) && !isJestGlobalImport(s); });
|
|
136
108
|
var newNode = ts.getMutableClone(resultNode);
|
|
137
|
-
|
|
109
|
+
var newStatements = __spread(hoistedStmts_1, otherStmts);
|
|
110
|
+
if (level === ROOT_LEVEL_AST) {
|
|
111
|
+
var jestGlobalsImportStmts = resultNode.statements.filter(function (s) { return isJestGlobalImport(s); });
|
|
112
|
+
resultNode = __assign(__assign({}, newNode), { statements: ts.createNodeArray(__spread(jestGlobalsImportStmts, newStatements)) });
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
resultNode = __assign(__assign({}, newNode), { statements: ts.createNodeArray(newStatements) });
|
|
116
|
+
}
|
|
138
117
|
}
|
|
139
|
-
// exit the level
|
|
140
118
|
exit();
|
|
141
119
|
if (shouldHoistNode(resultNode)) {
|
|
142
|
-
// hoist into current level
|
|
143
120
|
hoist(resultNode);
|
|
144
121
|
}
|
|
145
|
-
// finally returns the currently visited node
|
|
146
122
|
return resultNode;
|
|
147
123
|
};
|
|
148
124
|
return visitor;
|
|
149
125
|
}
|
|
150
|
-
// returns the transformer factory
|
|
151
126
|
return function (ctx) {
|
|
152
127
|
var _a;
|
|
153
128
|
return logger.wrap((_a = {}, _a[bs_logger_1.LogContexts.logLevel] = bs_logger_1.LogLevels.debug, _a.call = null, _a), 'visitSourceFileNode(): hoisting', function (sf) { return ts.visitNode(sf, createVisitor(ctx, sf)); });
|
|
@@ -1,8 +1,24 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
2
21
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
22
|
exports.internals = void 0;
|
|
4
|
-
var hoisting = require("./hoist-jest");
|
|
5
|
-
/**
|
|
6
|
-
* @internal
|
|
7
|
-
*/
|
|
23
|
+
var hoisting = __importStar(require("./hoist-jest"));
|
|
8
24
|
exports.internals = [hoisting];
|