ts-jest 29.1.5 → 29.2.1
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 -19
- package/dist/cli/config/init.js +51 -87
- package/dist/cli/config/migrate.js +45 -141
- package/dist/cli/index.js +1 -2
- package/dist/config/paths-to-module-name-mapper.d.ts +5 -3
- package/dist/constants.d.ts +6 -0
- package/dist/constants.js +11 -1
- package/dist/index.d.ts +2 -2
- package/dist/legacy/compiler/compiler-utils.js +2 -2
- package/dist/legacy/compiler/ts-compiler.d.ts +1 -0
- package/dist/legacy/compiler/ts-compiler.js +20 -18
- package/dist/legacy/config/config-set.js +10 -10
- package/dist/legacy/index.d.ts +2 -2
- package/dist/legacy/index.js +3 -1
- package/dist/legacy/ts-jest-transformer.d.ts +2 -2
- package/dist/legacy/ts-jest-transformer.js +10 -10
- package/dist/presets/create-jest-preset.d.ts +16 -1
- package/dist/presets/create-jest-preset.js +190 -2
- package/dist/raw-compiler-options.d.ts +254 -104
- package/dist/transformers/hoist-jest.js +2 -2
- package/dist/types.d.ts +104 -12
- package/dist/types.js +1 -0
- package/dist/utils/get-package-version.js +1 -2
- package/dist/utils/importer.js +4 -3
- package/dist/utils/json.js +3 -4
- package/dist/utils/logger.d.ts +1 -1
- package/dist/utils/memoize.js +1 -2
- package/dist/utils/messages.js +1 -2
- package/dist/utils/normalize-slashes.js +1 -2
- package/dist/utils/sha1.js +2 -2
- package/package.json +14 -15
- package/presets/index.js +26 -36
package/.ts-jest-digest
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
c4213aa1dd0f0a90f21d975c76687678d1de0842
|
package/CHANGELOG.md
CHANGED
|
@@ -1,4 +1,46 @@
|
|
|
1
|
-
|
|
1
|
+
### [29.2.1](https://github.com/kulshekhar/ts-jest/compare/v29.2.0...v29.2.1) (2024-07-10)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* fix: move `ejs` to `dep` instead of `peerDep` ([26e31a7](https://github.com/kulshekhar/ts-jest/commit/26e31a7))
|
|
7
|
+
* fix: set `allowSyntheticDefaultImports` properly ([ff4b302](https://github.com/kulshekhar/ts-jest/commit/ff4b302)), closes [#4156](https://github.com/kulshekhar/ts-jest/issues/4156)
|
|
8
|
+
* fix(compiler): support `Node16/NodeNext` value for `target` ([2f5cc0c](https://github.com/kulshekhar/ts-jest/commit/2f5cc0c)), closes [#4198](https://github.com/kulshekhar/ts-jest/issues/4198)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
## [29.2.0](https://github.com/kulshekhar/ts-jest/compare/v29.1.5...v29.2.0) (2024-07-08)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
### Bug Fixes
|
|
16
|
+
|
|
17
|
+
* fix: don't show warning message with Node16/NodeNext ([99c4f49](https://github.com/kulshekhar/ts-jest/commit/99c4f49)), closes [#4266](https://github.com/kulshekhar/ts-jest/issues/4266)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### Features
|
|
21
|
+
|
|
22
|
+
* feat(cli): allow migrating cjs `presets` to `transform` config ([22fb027](https://github.com/kulshekhar/ts-jest/commit/22fb027))
|
|
23
|
+
* feat(presets): add util functions to create ESM presets ([06f78ed](https://github.com/kulshekhar/ts-jest/commit/06f78ed)), close [#4200](https://github.com/kulshekhar/ts-jest/issues/4200)
|
|
24
|
+
* feat(presets): add util functions to create CJS presets ([f9cc3c0](https://github.com/kulshekhar/ts-jest/commit/f9cc3c0)), close [#4200](https://github.com/kulshekhar/ts-jest/issues/4200)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
### Code refactoring
|
|
28
|
+
|
|
29
|
+
* refactor: replace lodash deps with native js implementation ([40f1708](https://github.com/kulshekhar/ts-jest/commit/40f1708))
|
|
30
|
+
* refactor: use `TsJestTransformerOptions` type everywhere possibly ([7d001be](https://github.com/kulshekhar/ts-jest/commit/7d001be))
|
|
31
|
+
* refactor(cli): use new preset util functions to initialize test config ([c2b56ca](https://github.com/kulshekhar/ts-jest/commit/c2b56ca))
|
|
32
|
+
* refactor(presets): use create preset util functions for cjs presets ([922d6d0](https://github.com/kulshekhar/ts-jest/commit/922d6d0))
|
|
33
|
+
* test: switch `react-app` to use Vite ([827c8ad](https://github.com/kulshekhar/ts-jest/commit/827c8ad))
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
## DEPRECATIONS
|
|
37
|
+
|
|
38
|
+
* refactor(cli): deprecate cli option `babel` ([9617029](https://github.com/kulshekhar/ts-jest/commit/9617029)). Please use CLI argument `--js babel` instead.
|
|
39
|
+
* `createJestPreset` is deprecated. Please check documentation at https://kulshekhar.github.io/ts-jest/docs/getting-started/presets to see alternative solutions.
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
### [29.1.5](https://github.com/kulshekhar/ts-jest/compare/v29.1.4...v29.1.5) (2024-06-16)
|
|
2
44
|
|
|
3
45
|
|
|
4
46
|
### Bug Fixes
|
|
@@ -7,7 +49,7 @@
|
|
|
7
49
|
|
|
8
50
|
|
|
9
51
|
|
|
10
|
-
|
|
52
|
+
### [29.1.4](https://github.com/kulshekhar/ts-jest/compare/v29.1.3...v29.1.4) (2024-05-28)
|
|
11
53
|
|
|
12
54
|
|
|
13
55
|
### Bug Fixes
|
|
@@ -21,7 +63,7 @@
|
|
|
21
63
|
|
|
22
64
|
|
|
23
65
|
|
|
24
|
-
|
|
66
|
+
### [29.1.3](https://github.com/kulshekhar/ts-jest/compare/v29.1.2...v29.1.3) (2024-05-21)
|
|
25
67
|
|
|
26
68
|
|
|
27
69
|
### Bug Fixes
|
|
@@ -36,7 +78,7 @@
|
|
|
36
78
|
|
|
37
79
|
|
|
38
80
|
|
|
39
|
-
|
|
81
|
+
### [29.1.2](https://github.com/kulshekhar/ts-jest/compare/v29.1.1...v29.1.2) (2024-01-22)
|
|
40
82
|
|
|
41
83
|
|
|
42
84
|
### Bug Fixes
|
|
@@ -56,7 +98,7 @@
|
|
|
56
98
|
|
|
57
99
|
|
|
58
100
|
|
|
59
|
-
|
|
101
|
+
## [29.1.0](https://github.com/kulshekhar/ts-jest/compare/v29.0.5...v29.1.0) (2023-03-26)
|
|
60
102
|
|
|
61
103
|
|
|
62
104
|
### Features
|
|
@@ -65,7 +107,7 @@
|
|
|
65
107
|
|
|
66
108
|
|
|
67
109
|
|
|
68
|
-
|
|
110
|
+
### [29.0.5](https://github.com/kulshekhar/ts-jest/compare/v29.0.4...v29.0.5) (2023-01-13)
|
|
69
111
|
|
|
70
112
|
|
|
71
113
|
### Reverts
|
|
@@ -74,7 +116,7 @@
|
|
|
74
116
|
|
|
75
117
|
|
|
76
118
|
|
|
77
|
-
|
|
119
|
+
### [29.0.4](https://github.com/kulshekhar/ts-jest/compare/v29.0.3...v29.0.4) (2023-01-10)
|
|
78
120
|
|
|
79
121
|
|
|
80
122
|
### Bug Fixes
|
|
@@ -84,7 +126,7 @@
|
|
|
84
126
|
|
|
85
127
|
|
|
86
128
|
|
|
87
|
-
|
|
129
|
+
### [29.0.3](https://github.com/kulshekhar/ts-jest/compare/v29.0.2...v29.0.3) (2022-09-28)
|
|
88
130
|
|
|
89
131
|
|
|
90
132
|
### Bug Fixes
|
|
@@ -99,7 +141,7 @@
|
|
|
99
141
|
|
|
100
142
|
|
|
101
143
|
|
|
102
|
-
|
|
144
|
+
### [29.0.2](https://github.com/kulshekhar/ts-jest/compare/v29.0.1...v29.0.2) (2022-09-23)
|
|
103
145
|
|
|
104
146
|
|
|
105
147
|
### Bug Fixes
|
|
@@ -109,16 +151,7 @@
|
|
|
109
151
|
|
|
110
152
|
|
|
111
153
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
### Bug Fixes
|
|
116
|
-
|
|
117
|
-
* mark `ts-jest` as optional in `ConfigGlobals` ([#3816](https://github.com/kulshekhar/ts-jest/issues/3816)) ([cbb88bb](https://github.com/kulshekhar/ts-jest/commit/cbb88bba34dbb852d8f4013be6e020769feb306d)), closes [#3815](https://github.com/kulshekhar/ts-jest/issues/3815)
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
## [29.0.1](https://github.com/kulshekhar/ts-jest/compare/v29.0.0...v29.0.1) (2022-09-13)
|
|
154
|
+
### [29.0.1](https://github.com/kulshekhar/ts-jest/compare/v29.0.0...v29.0.1) (2022-09-13)
|
|
122
155
|
|
|
123
156
|
|
|
124
157
|
### Bug Fixes
|
package/dist/cli/config/init.js
CHANGED
|
@@ -67,119 +67,83 @@ var __read = (this && this.__read) || function (o, n) {
|
|
|
67
67
|
}
|
|
68
68
|
return ar;
|
|
69
69
|
};
|
|
70
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
71
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
72
|
+
};
|
|
70
73
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
71
74
|
exports.help = exports.run = void 0;
|
|
72
75
|
var fs_1 = require("fs");
|
|
73
76
|
var path_1 = require("path");
|
|
77
|
+
var ejs_1 = __importDefault(require("ejs"));
|
|
74
78
|
var json5_1 = require("json5");
|
|
75
|
-
var
|
|
79
|
+
var constants_1 = require("../../constants");
|
|
80
|
+
var create_jest_preset_1 = require("../../presets/create-jest-preset");
|
|
81
|
+
var ensureOnlyUsingDoubleQuotes = function (str) {
|
|
82
|
+
return str
|
|
83
|
+
.replace(/"'(.*?)'"/g, '"$1"')
|
|
84
|
+
.replace(/'ts-jest'/g, '"ts-jest"')
|
|
85
|
+
.replace(/'babel-jest'/g, '"babel-jest"');
|
|
86
|
+
};
|
|
76
87
|
/**
|
|
77
88
|
* @internal
|
|
78
89
|
*/
|
|
79
90
|
var run = function (args /* , logger: Logger */) { return __awaiter(void 0, void 0, void 0, function () {
|
|
80
|
-
var
|
|
81
|
-
var _b, _c
|
|
82
|
-
return __generator(this, function (
|
|
91
|
+
var askedTsconfig, force, jsdom, jsFilesProcessor, shouldPostProcessWithBabel, file, filePath, name, isPackageJsonConfig, isJestConfigFileExisted, pkgFile, isPackageJsonExisted, tsconfig, pkgJsonContent, body, resolvedTsconfigOption, transformConfig, _a, transformPattern, transformValue;
|
|
92
|
+
var _b, _c;
|
|
93
|
+
return __generator(this, function (_d) {
|
|
94
|
+
askedTsconfig = args.tsconfig, force = args.force, jsdom = args.jsdom, jsFilesProcessor = args.js, shouldPostProcessWithBabel = args.babel;
|
|
83
95
|
file = (_c = (_b = args._[0]) === null || _b === void 0 ? void 0 : _b.toString()) !== null && _c !== void 0 ? _c : 'jest.config.js';
|
|
84
96
|
filePath = (0, path_1.join)(process.cwd(), file);
|
|
85
97
|
name = (0, path_1.basename)(file);
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
pkgFile =
|
|
89
|
-
|
|
90
|
-
_a = args.jestPreset, jestPreset = _a === void 0 ? true : _a, askedTsconfig = args.tsconfig, force = args.force, jsdom = args.jsdom;
|
|
98
|
+
isPackageJsonConfig = name === 'package.json';
|
|
99
|
+
isJestConfigFileExisted = (0, fs_1.existsSync)(filePath);
|
|
100
|
+
pkgFile = isPackageJsonConfig ? filePath : (0, path_1.join)(process.cwd(), 'package.json');
|
|
101
|
+
isPackageJsonExisted = isPackageJsonConfig || (0, fs_1.existsSync)(pkgFile);
|
|
91
102
|
tsconfig = askedTsconfig === 'tsconfig.json' ? undefined : askedTsconfig;
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
// set default js files processor depending on whether the user wants to post-process with babel
|
|
97
|
-
jsFilesProcessor = shouldPostProcessWithBabel ? 'babel' : undefined;
|
|
98
|
-
}
|
|
99
|
-
else if (shouldPostProcessWithBabel == null) {
|
|
100
|
-
// auto enables babel post-processing if the user wants babel to process js files
|
|
101
|
-
shouldPostProcessWithBabel = jsFilesProcessor === 'babel';
|
|
103
|
+
pkgJsonContent = isPackageJsonExisted ? JSON.parse((0, fs_1.readFileSync)(pkgFile, 'utf8')) : {};
|
|
104
|
+
if (shouldPostProcessWithBabel) {
|
|
105
|
+
console.warn("The option --babel is deprecated and will be removed in the next major version." +
|
|
106
|
+
" Please specify 'js' option value (see more with npx ts-jest help) if you wish 'ts-jest' to process 'js' with TypeScript API or Babel.");
|
|
102
107
|
}
|
|
103
|
-
if (
|
|
104
|
-
preset = presets_1.jsWIthBabel;
|
|
105
|
-
}
|
|
106
|
-
else if (jsFilesProcessor === 'ts') {
|
|
107
|
-
preset = presets_1.jsWithTs;
|
|
108
|
-
}
|
|
109
|
-
else {
|
|
110
|
-
preset = presets_1.defaults;
|
|
111
|
-
}
|
|
112
|
-
if (isPackage && !exists) {
|
|
108
|
+
if (isPackageJsonConfig && !isJestConfigFileExisted) {
|
|
113
109
|
throw new Error("File ".concat(file, " does not exists."));
|
|
114
110
|
}
|
|
115
|
-
else if (!
|
|
111
|
+
else if (!isPackageJsonConfig && isJestConfigFileExisted && !force) {
|
|
116
112
|
throw new Error("Configuration file ".concat(file, " already exists."));
|
|
117
113
|
}
|
|
118
|
-
if (!
|
|
114
|
+
if (!isPackageJsonConfig && !name.endsWith('.js')) {
|
|
119
115
|
throw new TypeError("Configuration file ".concat(file, " must be a .js file or the package.json."));
|
|
120
116
|
}
|
|
121
|
-
if (
|
|
122
|
-
if (force && !
|
|
123
|
-
delete
|
|
124
|
-
(0, fs_1.writeFileSync)(pkgFile, JSON.stringify(
|
|
117
|
+
if (isPackageJsonExisted && pkgJsonContent.jest) {
|
|
118
|
+
if (force && !isPackageJsonConfig) {
|
|
119
|
+
delete pkgJsonContent.jest;
|
|
120
|
+
(0, fs_1.writeFileSync)(pkgFile, JSON.stringify(pkgJsonContent, undefined, ' '));
|
|
125
121
|
}
|
|
126
122
|
else if (!force) {
|
|
127
123
|
throw new Error("A Jest configuration is already set in ".concat(pkgFile, "."));
|
|
128
124
|
}
|
|
129
125
|
}
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
var _d = __read(_a, 2), fileRegex = _d[0], transformerConfig = _d[1];
|
|
137
|
-
if (tsconfig || shouldPostProcessWithBabel) {
|
|
138
|
-
var tsJestConf = {};
|
|
139
|
-
if (tsconfig)
|
|
140
|
-
tsJestConf.tsconfig = tsconfig;
|
|
141
|
-
if (shouldPostProcessWithBabel)
|
|
142
|
-
tsJestConf.babelConfig = true;
|
|
143
|
-
return __assign(__assign({}, acc), (_b = {}, _b[fileRegex] = typeof transformerConfig === 'string'
|
|
144
|
-
? [transformerConfig, tsJestConf]
|
|
145
|
-
: [transformerConfig[0], __assign(__assign({}, transformerConfig[1]), tsJestConf)], _b));
|
|
146
|
-
}
|
|
147
|
-
return __assign(__assign({}, acc), (_c = {}, _c[fileRegex] = transformerConfig, _c));
|
|
148
|
-
}, {});
|
|
149
|
-
if (Object.keys(transformerConfig).length) {
|
|
150
|
-
jestConfig.transform = __assign(__assign({}, jestConfig.transform), transformerConfig);
|
|
151
|
-
}
|
|
152
|
-
body = JSON.stringify(__assign(__assign({}, pkgJson), { jest: jestConfig }), undefined, ' ');
|
|
126
|
+
resolvedTsconfigOption = tsconfig ? { tsconfig: "".concat((0, json5_1.stringify)(tsconfig)) } : undefined;
|
|
127
|
+
if (jsFilesProcessor === 'babel' || shouldPostProcessWithBabel) {
|
|
128
|
+
transformConfig = (0, create_jest_preset_1.createJsWithBabelPreset)(resolvedTsconfigOption);
|
|
129
|
+
}
|
|
130
|
+
else if (jsFilesProcessor === 'ts') {
|
|
131
|
+
transformConfig = (0, create_jest_preset_1.createJsWithTsPreset)(resolvedTsconfigOption);
|
|
153
132
|
}
|
|
154
133
|
else {
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
}
|
|
168
|
-
if (!jsdom)
|
|
169
|
-
content.push(" testEnvironment: 'node',");
|
|
170
|
-
if (tsconfig || shouldPostProcessWithBabel) {
|
|
171
|
-
content.push(' transform: {');
|
|
172
|
-
content.push(" '^.+\\\\.[tj]sx?$': ['ts-jest', {");
|
|
173
|
-
if (tsconfig)
|
|
174
|
-
content.push(" tsconfig: ".concat((0, json5_1.stringify)(tsconfig), ","));
|
|
175
|
-
if (shouldPostProcessWithBabel)
|
|
176
|
-
content.push(' babelConfig: true,');
|
|
177
|
-
content.push(' }],');
|
|
178
|
-
content.push(' },');
|
|
179
|
-
}
|
|
180
|
-
content.push('};');
|
|
181
|
-
// join all together
|
|
182
|
-
body = content.join('\n');
|
|
134
|
+
transformConfig = (0, create_jest_preset_1.createDefaultPreset)(resolvedTsconfigOption);
|
|
135
|
+
}
|
|
136
|
+
if (isPackageJsonConfig) {
|
|
137
|
+
body = ensureOnlyUsingDoubleQuotes(JSON.stringify(__assign(__assign({}, pkgJsonContent), { jest: transformConfig }), undefined, ' '));
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
_a = __read(Object.entries(transformConfig.transform)[0], 2), transformPattern = _a[0], transformValue = _a[1];
|
|
141
|
+
body = ejs_1.default.render(constants_1.JEST_CONFIG_EJS_TEMPLATE, {
|
|
142
|
+
exportKind: pkgJsonContent.type === 'module' ? 'export default' : 'module.exports =',
|
|
143
|
+
testEnvironment: jsdom ? 'jsdom' : 'node',
|
|
144
|
+
transformPattern: transformPattern,
|
|
145
|
+
transformValue: ensureOnlyUsingDoubleQuotes((0, json5_1.stringify)(transformValue)),
|
|
146
|
+
});
|
|
183
147
|
}
|
|
184
148
|
(0, fs_1.writeFileSync)(filePath, body);
|
|
185
149
|
process.stderr.write("\nJest configuration written to \"".concat(filePath, "\".\n"));
|
|
@@ -192,7 +156,7 @@ exports.run = run;
|
|
|
192
156
|
*/
|
|
193
157
|
var help = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
194
158
|
return __generator(this, function (_a) {
|
|
195
|
-
process.stdout.write("\nUsage:\n ts-jest config:init [options] [<config-file>]\n\nArguments:\n <config-file> Can be a js or json Jest config file. If it is a\n package.json file, the configuration will be read from\n the \"jest\" property.\n Default: jest.config.js\n\nOptions:\n --force Discard any existing Jest config\n --js ts|babel Process .js files with ts-jest if 'ts' or with\n babel-jest if 'babel'\n --no-jest-preset Disable the use of Jest presets\n --tsconfig <file> Path to the tsconfig.json file\n --babel
|
|
159
|
+
process.stdout.write("\nUsage:\n ts-jest config:init [options] [<config-file>]\n\nArguments:\n <config-file> Can be a js or json Jest config file. If it is a\n package.json file, the configuration will be read from\n the \"jest\" property.\n Default: jest.config.js\n\nOptions:\n --force Discard any existing Jest config\n --js ts|babel Process '.js' files with ts-jest if 'ts' or with\n babel-jest if 'babel'\n --no-jest-preset Disable the use of Jest presets\n --tsconfig <file> Path to the tsconfig.json file\n --babel Enable using Babel to process 'js' resulted content from 'ts-jest' processing\n --jsdom Use 'jsdom' as test environment instead of 'node'\n");
|
|
196
160
|
return [2 /*return*/];
|
|
197
161
|
});
|
|
198
162
|
}); };
|
|
@@ -62,15 +62,6 @@ var __read = (this && this.__read) || function (o, n) {
|
|
|
62
62
|
}
|
|
63
63
|
return ar;
|
|
64
64
|
};
|
|
65
|
-
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
66
|
-
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
67
|
-
if (ar || !(i in from)) {
|
|
68
|
-
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
69
|
-
ar[i] = from[i];
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
return to.concat(ar || Array.prototype.slice.call(from));
|
|
73
|
-
};
|
|
74
65
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
75
66
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
76
67
|
};
|
|
@@ -81,19 +72,43 @@ var path_1 = require("path");
|
|
|
81
72
|
var bs_logger_1 = require("bs-logger");
|
|
82
73
|
var fast_json_stable_stringify_1 = __importDefault(require("fast-json-stable-stringify"));
|
|
83
74
|
var json5_1 = require("json5");
|
|
75
|
+
var create_jest_preset_1 = require("../../presets/create-jest-preset");
|
|
84
76
|
var backports_1 = require("../../utils/backports");
|
|
85
77
|
var presets_1 = require("../helpers/presets");
|
|
78
|
+
var migrateGlobalConfigToTransformConfig = function (transformConfig, globalsTsJestConfig) {
|
|
79
|
+
if (transformConfig) {
|
|
80
|
+
return Object.entries(transformConfig).reduce(function (previousValue, currentValue) {
|
|
81
|
+
var _a, _b;
|
|
82
|
+
var _c = __read(currentValue, 2), key = _c[0], transformOptions = _c[1];
|
|
83
|
+
if (typeof transformOptions === 'string' && transformOptions.includes('ts-jest')) {
|
|
84
|
+
return __assign(__assign({}, previousValue), (_a = {}, _a[key] = globalsTsJestConfig ? ['ts-jest', globalsTsJestConfig] : 'ts-jest', _a));
|
|
85
|
+
}
|
|
86
|
+
return __assign(__assign({}, previousValue), (_b = {}, _b[key] = transformOptions, _b));
|
|
87
|
+
}, {});
|
|
88
|
+
}
|
|
89
|
+
return {};
|
|
90
|
+
};
|
|
91
|
+
var migratePresetToTransformConfig = function (transformConfig, preset, globalsTsJestConfig) {
|
|
92
|
+
if (preset) {
|
|
93
|
+
var transformConfigFromPreset = preset.name === "ts-jest/presets/js-with-ts" /* JestPresetNames.jsWithTs */
|
|
94
|
+
? (0, create_jest_preset_1.createJsWithTsPreset)(globalsTsJestConfig)
|
|
95
|
+
: preset.name === "ts-jest/presets/js-with-babel" /* JestPresetNames.jsWIthBabel */
|
|
96
|
+
? (0, create_jest_preset_1.createJsWithBabelPreset)(globalsTsJestConfig)
|
|
97
|
+
: (0, create_jest_preset_1.createDefaultPreset)(globalsTsJestConfig);
|
|
98
|
+
return __assign(__assign({}, transformConfig), transformConfigFromPreset.transform);
|
|
99
|
+
}
|
|
100
|
+
return transformConfig;
|
|
101
|
+
};
|
|
86
102
|
/**
|
|
87
103
|
* @internal
|
|
88
104
|
*/
|
|
89
105
|
var run = function (args /* , logger: Logger*/) { return __awaiter(void 0, void 0, void 0, function () {
|
|
90
|
-
var nullLogger, file, filePath,
|
|
91
|
-
var _a, _b, _c, _d, _e, _f, _g, _h
|
|
92
|
-
return __generator(this, function (
|
|
106
|
+
var nullLogger, file, filePath, name, isPackage, actualConfig, migratedConfig, preset, presetValue, migratedValue, presetValue, migratedValue, globalsTsJestConfig, before, after, stringify, prefix;
|
|
107
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
108
|
+
return __generator(this, function (_j) {
|
|
93
109
|
nullLogger = (0, bs_logger_1.createLogger)({ targets: [] });
|
|
94
110
|
file = (_a = args._[0]) === null || _a === void 0 ? void 0 : _a.toString();
|
|
95
111
|
filePath = (0, path_1.resolve)(process.cwd(), file);
|
|
96
|
-
footNotes = [];
|
|
97
112
|
if (!(0, fs_1.existsSync)(filePath)) {
|
|
98
113
|
throw new Error("Configuration file ".concat(file, " does not exists."));
|
|
99
114
|
}
|
|
@@ -110,129 +125,41 @@ var run = function (args /* , logger: Logger*/) { return __awaiter(void 0, void
|
|
|
110
125
|
if (!actualConfig)
|
|
111
126
|
actualConfig = {};
|
|
112
127
|
migratedConfig = (0, backports_1.backportJestConfig)(nullLogger, actualConfig);
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
if (args.js) {
|
|
117
|
-
presetName = args.js === 'babel' ? "ts-jest/presets/js-with-babel" /* JestPresetNames.jsWIthBabel */ : "ts-jest/presets/js-with-ts" /* JestPresetNames.jsWithTs */;
|
|
118
|
-
}
|
|
119
|
-
else {
|
|
120
|
-
jsTransformers = Object.keys(migratedConfig.transform || {}).reduce(function (list, pattern) {
|
|
121
|
-
if (RegExp(pattern.replace(/^<rootDir>\/?/, '/dummy-project/')).test('/dummy-project/src/foo.js')) {
|
|
122
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
123
|
-
var transformer = migratedConfig.transform[pattern];
|
|
124
|
-
if (/\bbabel-jest\b/.test(transformer))
|
|
125
|
-
transformer = 'babel-jest';
|
|
126
|
-
else if (/\ts-jest\b/.test(transformer))
|
|
127
|
-
transformer = 'ts-jest';
|
|
128
|
-
return __spreadArray(__spreadArray([], __read(list), false), [transformer], false);
|
|
129
|
-
}
|
|
130
|
-
return list;
|
|
131
|
-
}, []);
|
|
132
|
-
jsWithTs = jsTransformers.includes('ts-jest');
|
|
133
|
-
jsWithBabel = jsTransformers.includes('babel-jest');
|
|
134
|
-
if (jsWithBabel && !jsWithTs) {
|
|
135
|
-
presetName = "ts-jest/presets/js-with-babel" /* JestPresetNames.jsWIthBabel */;
|
|
136
|
-
}
|
|
137
|
-
else if (jsWithTs && !jsWithBabel) {
|
|
138
|
-
presetName = "ts-jest/presets/js-with-ts" /* JestPresetNames.jsWithTs */;
|
|
139
|
-
}
|
|
140
|
-
else {
|
|
141
|
-
// sounds like js files are NOT handled, or handled with a unknown transformer, so we do not need to handle it
|
|
142
|
-
presetName = "ts-jest/presets/default" /* JestPresetNames.default */;
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
// ensure we are using a preset
|
|
146
|
-
presetName = presetName !== null && presetName !== void 0 ? presetName : "ts-jest/presets/default" /* JestPresetNames.default */;
|
|
147
|
-
preset = presets_1.allPresets[presetName];
|
|
148
|
-
footNotes.push("Detected preset '".concat(preset.label, "' as the best matching preset for your configuration.\nVisit https://kulshekhar.github.io/ts-jest/user/config/#jest-preset for more information about presets.\n"));
|
|
128
|
+
if (migratedConfig.preset) {
|
|
129
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
130
|
+
preset = (_b = presets_1.allPresets[migratedConfig.preset]) !== null && _b !== void 0 ? _b : presets_1.allPresets["ts-jest/presets/default" /* JestPresetNames.default */];
|
|
149
131
|
}
|
|
150
|
-
else
|
|
151
|
-
if (args.
|
|
152
|
-
|
|
132
|
+
else {
|
|
133
|
+
if (args.js) {
|
|
134
|
+
preset = args.js === 'babel' ? presets_1.allPresets["ts-jest/presets/js-with-babel" /* JestPresetNames.jsWIthBabel */] : presets_1.allPresets["ts-jest/presets/js-with-ts" /* JestPresetNames.jsWithTs */];
|
|
153
135
|
}
|
|
154
136
|
else {
|
|
155
|
-
|
|
156
|
-
preset = (_c = presets_1.allPresets[migratedConfig.preset]) !== null && _c !== void 0 ? _c : presets_1.defaults;
|
|
137
|
+
preset = presets_1.allPresets["ts-jest/presets/default" /* JestPresetNames.default */];
|
|
157
138
|
}
|
|
158
139
|
}
|
|
159
|
-
// enforce the correct name
|
|
160
|
-
if (preset)
|
|
161
|
-
migratedConfig.preset = preset.name;
|
|
162
140
|
// check the extensions
|
|
163
|
-
if (((
|
|
164
|
-
presetValue = dedupSort((
|
|
141
|
+
if (((_c = migratedConfig.moduleFileExtensions) === null || _c === void 0 ? void 0 : _c.length) && preset) {
|
|
142
|
+
presetValue = dedupSort((_d = preset.value.moduleFileExtensions) !== null && _d !== void 0 ? _d : []).join('::');
|
|
165
143
|
migratedValue = dedupSort(migratedConfig.moduleFileExtensions).join('::');
|
|
166
144
|
if (presetValue === migratedValue) {
|
|
167
145
|
delete migratedConfig.moduleFileExtensions;
|
|
168
146
|
}
|
|
169
147
|
}
|
|
170
148
|
// there is a testRegex, remove our testMatch
|
|
171
|
-
if (
|
|
149
|
+
if (typeof migratedConfig.testRegex === 'string' || ((_e = migratedConfig.testRegex) === null || _e === void 0 ? void 0 : _e.length)) {
|
|
172
150
|
delete migratedConfig.testMatch;
|
|
173
151
|
}
|
|
174
152
|
// check the testMatch
|
|
175
|
-
else if (((
|
|
176
|
-
presetValue = dedupSort((
|
|
153
|
+
else if (((_f = migratedConfig.testMatch) === null || _f === void 0 ? void 0 : _f.length) && preset) {
|
|
154
|
+
presetValue = dedupSort((_g = preset.value.testMatch) !== null && _g !== void 0 ? _g : []).join('::');
|
|
177
155
|
migratedValue = dedupSort(migratedConfig.testMatch).join('::');
|
|
178
156
|
if (presetValue === migratedValue) {
|
|
179
157
|
delete migratedConfig.testMatch;
|
|
180
158
|
}
|
|
181
159
|
}
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
186
|
-
var val = migratedConfig.transform[key];
|
|
187
|
-
if (typeof val === 'string' && /\/?ts-jest?(?:\/preprocessor\.js)?$/.test(val)) {
|
|
188
|
-
// eslint-disable-next-line
|
|
189
|
-
;
|
|
190
|
-
migratedConfig.transform[key] = 'ts-jest';
|
|
191
|
-
}
|
|
192
|
-
});
|
|
193
|
-
}
|
|
194
|
-
globalsTsJestConfig = (_j = migratedConfig.globals) === null || _j === void 0 ? void 0 : _j['ts-jest'];
|
|
195
|
-
if (globalsTsJestConfig && migratedConfig.transform) {
|
|
196
|
-
Object.keys(migratedConfig.transform).forEach(function (key) {
|
|
197
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
198
|
-
var val = migratedConfig.transform[key];
|
|
199
|
-
if (typeof val === 'string' && val.includes('ts-jest')) {
|
|
200
|
-
// eslint-disable-next-line
|
|
201
|
-
;
|
|
202
|
-
migratedConfig.transform[key] = Object.keys(globalsTsJestConfig).length ? [val, globalsTsJestConfig] : val;
|
|
203
|
-
}
|
|
204
|
-
});
|
|
205
|
-
delete ((_k = migratedConfig.globals) !== null && _k !== void 0 ? _k : Object.create(null))['ts-jest'];
|
|
206
|
-
}
|
|
207
|
-
// check if it's the same as the preset's one
|
|
208
|
-
if (preset && migratedConfig.transform) {
|
|
209
|
-
if ((0, fast_json_stable_stringify_1.default)(migratedConfig.transform) === (0, fast_json_stable_stringify_1.default)(preset.value.transform)) {
|
|
210
|
-
delete migratedConfig.transform;
|
|
211
|
-
}
|
|
212
|
-
else {
|
|
213
|
-
migratedConfigTransform = migratedConfig.transform;
|
|
214
|
-
presetValueTransform_1 = preset.value.transform;
|
|
215
|
-
if (migratedConfigTransform && presetValueTransform_1) {
|
|
216
|
-
migratedConfig.transform = Object.entries(migratedConfigTransform).reduce(
|
|
217
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
218
|
-
function (acc, _a) {
|
|
219
|
-
var _b, _c;
|
|
220
|
-
var _d = __read(_a, 2), fileRegex = _d[0], transformerConfig = _d[1];
|
|
221
|
-
var presetValueTransformerConfig = presetValueTransform_1[fileRegex];
|
|
222
|
-
var shouldRemoveDuplicatedConfig = (presetValueTransformerConfig &&
|
|
223
|
-
Array.isArray(presetValueTransformerConfig) &&
|
|
224
|
-
transformerConfig === presetValueTransformerConfig[0] &&
|
|
225
|
-
!Object.keys(presetValueTransformerConfig[1]).length) ||
|
|
226
|
-
transformerConfig === presetValueTransformerConfig;
|
|
227
|
-
return shouldRemoveDuplicatedConfig
|
|
228
|
-
? acc
|
|
229
|
-
: acc
|
|
230
|
-
? __assign(__assign({}, acc), (_b = {}, _b[fileRegex] = transformerConfig, _b)) : (_c = {}, _c[fileRegex] = transformerConfig, _c);
|
|
231
|
-
}, undefined);
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
// cleanup
|
|
160
|
+
globalsTsJestConfig = (_h = migratedConfig.globals) === null || _h === void 0 ? void 0 : _h['ts-jest'];
|
|
161
|
+
migratedConfig.transform = migrateGlobalConfigToTransformConfig(migratedConfig.transform, globalsTsJestConfig);
|
|
162
|
+
migratedConfig.transform = migratePresetToTransformConfig(migratedConfig.transform, preset, globalsTsJestConfig);
|
|
236
163
|
cleanupConfig(actualConfig);
|
|
237
164
|
cleanupConfig(migratedConfig);
|
|
238
165
|
before = (0, fast_json_stable_stringify_1.default)(actualConfig);
|
|
@@ -243,38 +170,16 @@ var run = function (args /* , logger: Logger*/) { return __awaiter(void 0, void
|
|
|
243
170
|
}
|
|
244
171
|
stringify = file.endsWith('.json') ? JSON.stringify : json5_1.stringify;
|
|
245
172
|
prefix = file.endsWith('.json') ? '"jest": ' : 'module.exports = ';
|
|
246
|
-
// if we are using preset, inform the user that he might be able to remove some section(s)
|
|
247
|
-
// we couldn't check for equality
|
|
248
|
-
// if (usesPreset && migratedConfig.testMatch) {
|
|
249
|
-
// footNotes.push(`
|
|
250
|
-
// I couldn't check if your "testMatch" value is the same as mine which is: ${stringify(
|
|
251
|
-
// presets.testMatch,
|
|
252
|
-
// undefined,
|
|
253
|
-
// ' ',
|
|
254
|
-
// )}
|
|
255
|
-
// If it is the case, you can safely remove the "testMatch" from what I've migrated.
|
|
256
|
-
// `)
|
|
257
|
-
// }
|
|
258
|
-
if (preset && migratedConfig.transform) {
|
|
259
|
-
footNotes.push("\nI couldn't check if your \"transform\" value is the same as mine which is: ".concat(stringify(preset.value.transform, undefined, ' '), "\nIf it is the case, you can safely remove the \"transform\" from what I've migrated.\n"));
|
|
260
|
-
}
|
|
261
173
|
// output new config
|
|
262
174
|
process.stderr.write("\nMigrated Jest configuration:\n");
|
|
263
175
|
process.stdout.write("".concat(prefix).concat(stringify(migratedConfig, undefined, ' '), "\n"));
|
|
264
|
-
if (footNotes.length) {
|
|
265
|
-
process.stderr.write("\n".concat(footNotes.join('\n'), "\n"));
|
|
266
|
-
}
|
|
267
176
|
return [2 /*return*/];
|
|
268
177
|
});
|
|
269
178
|
}); };
|
|
270
179
|
exports.run = run;
|
|
271
180
|
function cleanupConfig(config) {
|
|
272
181
|
if (config.globals) {
|
|
273
|
-
|
|
274
|
-
if (config.globals['ts-jest'] && Object.keys(config.globals['ts-jest']).length === 0) {
|
|
275
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
276
|
-
delete config.globals['ts-jest'];
|
|
277
|
-
}
|
|
182
|
+
delete config.globals['ts-jest'];
|
|
278
183
|
if (!Object.keys(config.globals).length) {
|
|
279
184
|
delete config.globals;
|
|
280
185
|
}
|
|
@@ -292,8 +197,7 @@ function cleanupConfig(config) {
|
|
|
292
197
|
if (!config.testMatch.length)
|
|
293
198
|
delete config.testMatch;
|
|
294
199
|
}
|
|
295
|
-
|
|
296
|
-
config.preset = presets_1.defaults.name;
|
|
200
|
+
delete config.preset;
|
|
297
201
|
}
|
|
298
202
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
299
203
|
function dedupSort(arr) {
|
package/dist/cli/index.js
CHANGED
|
@@ -40,7 +40,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
40
40
|
};
|
|
41
41
|
var _a;
|
|
42
42
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
|
-
exports.processArgv =
|
|
43
|
+
exports.processArgv = processArgv;
|
|
44
44
|
var bs_logger_1 = require("bs-logger");
|
|
45
45
|
var yargs_parser_1 = __importDefault(require("yargs-parser"));
|
|
46
46
|
var utils_1 = require("../utils");
|
|
@@ -115,4 +115,3 @@ function processArgv() {
|
|
|
115
115
|
});
|
|
116
116
|
});
|
|
117
117
|
}
|
|
118
|
-
exports.processArgv = processArgv;
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import type { Config } from '@jest/types';
|
|
2
|
+
import type { CompilerOptions } from 'typescript';
|
|
3
|
+
type TsPathMapping = Exclude<CompilerOptions['paths'], undefined>;
|
|
2
4
|
type JestPathMapping = Config.InitialOptions['moduleNameMapper'];
|
|
3
|
-
export declare const pathsToModuleNameMapper: (mapping:
|
|
4
|
-
prefix?: string
|
|
5
|
-
useESM?: boolean
|
|
5
|
+
export declare const pathsToModuleNameMapper: (mapping: TsPathMapping, { prefix, useESM }?: {
|
|
6
|
+
prefix?: string;
|
|
7
|
+
useESM?: boolean;
|
|
6
8
|
}) => JestPathMapping;
|
|
7
9
|
export {};
|
package/dist/constants.d.ts
CHANGED
|
@@ -3,5 +3,11 @@ export declare const DECLARATION_TYPE_EXT = ".d.ts";
|
|
|
3
3
|
export declare const JS_JSX_EXTENSIONS: string[];
|
|
4
4
|
export declare const TS_TSX_REGEX: RegExp;
|
|
5
5
|
export declare const JS_JSX_REGEX: RegExp;
|
|
6
|
+
export declare const TS_TRANSFORM_PATTERN = "^.+.tsx?$";
|
|
7
|
+
export declare const ESM_TS_TRANSFORM_PATTERN = "^.+\\.m?tsx?$";
|
|
8
|
+
export declare const TS_JS_TRANSFORM_PATTERN = "^.+.[tj]sx?$";
|
|
9
|
+
export declare const ESM_TS_JS_TRANSFORM_PATTERN = "^.+\\.m?[tj]sx?$";
|
|
10
|
+
export declare const JS_TRANSFORM_PATTERN = "^.+.jsx?$";
|
|
11
|
+
export declare const ESM_JS_TRANSFORM_PATTERN = "^.+\\.m?jsx?$";
|
|
6
12
|
export declare const TS_EXT_TO_TREAT_AS_ESM: string[];
|
|
7
13
|
export declare const JS_EXT_TO_TREAT_AS_ESM: string[];
|