ts-jest 29.0.2 → 29.0.4

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 CHANGED
@@ -1 +1 @@
1
- 60d16d7ed3a05cdc98e1c7fc94b0fb03a86f0172
1
+ d7ebfa3b6fc584faace1c29e045fdf049e8e9803
package/CHANGELOG.md CHANGED
@@ -1,3 +1,28 @@
1
+ ## [29.0.4](https://github.com/kulshekhar/ts-jest/compare/v29.0.3...v29.0.4) (2023-01-10)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * **transformer:** don't use cache when `tsJestConfig` is different ([#3966](https://github.com/kulshekhar/ts-jest/issues/3966)) ([a445638](https://github.com/kulshekhar/ts-jest/commit/a445638ca631911e8ab1a896ffdfcd21506ce71a))
7
+ * bump `json5` to `2.2.3` ([#3976](https://github.com/kulshekhar/ts-jest/pull/3976))([b9f7809](https://github.com/kulshekhar/ts-jest/commit/b9f7809948309f92534aeba63f3ffb01cb7dc536))
8
+
9
+
10
+
11
+ ## [29.0.3](https://github.com/kulshekhar/ts-jest/compare/v29.0.2...v29.0.3) (2022-09-28)
12
+
13
+
14
+ ### Bug Fixes
15
+
16
+ * merge config from `globals` with transformer config correctly ([#3842](https://github.com/kulshekhar/ts-jest/issues/3842)) ([9c9fd60](https://github.com/kulshekhar/ts-jest/commit/9c9fd6097aea36a6e8b06b0e8841df22896f9121)), closes [#3841](https://github.com/kulshekhar/ts-jest/issues/3841)
17
+ * **presets:** allow merging transform config when using presets ([#3833](https://github.com/kulshekhar/ts-jest/issues/3833)) ([afc6a94](https://github.com/kulshekhar/ts-jest/commit/afc6a948b17c2dc22be51b1a9475a0f6ecbbc372))
18
+
19
+
20
+ ### Features
21
+
22
+ * add `useESM` option to `pathsToModuleNameMapper` options ([#3792](https://github.com/kulshekhar/ts-jest/issues/3792)) ([eabe906](https://github.com/kulshekhar/ts-jest/commit/eabe906e1dd6b132a7b0d05ffc13172cd8a6b73b))
23
+
24
+
25
+
1
26
  ## [29.0.2](https://github.com/kulshekhar/ts-jest/compare/v29.0.1...v29.0.2) (2022-09-23)
2
27
 
3
28
 
@@ -133,19 +133,18 @@ var run = function (args /* , logger: Logger */) { return __awaiter(void 0, void
133
133
  jestConfig.testEnvironment = 'node';
134
134
  transformerConfig = Object.entries((_d = jestConfig.transform) !== null && _d !== void 0 ? _d : {}).reduce(function (acc, _a) {
135
135
  var _b, _c;
136
- var _d = __read(_a, 2), fileRegex = _d[0], transformerName = _d[1];
137
- if (transformerName === 'ts-jest') {
138
- if (tsconfig || shouldPostProcessWithBabel) {
139
- var tsJestConf = {};
140
- if (tsconfig)
141
- tsJestConf.tsconfig = tsconfig;
142
- if (shouldPostProcessWithBabel)
143
- tsJestConf.babelConfig = true;
144
- return __assign(__assign({}, acc), (_b = {}, _b[fileRegex] = [transformerName, tsJestConf], _b));
145
- }
146
- return __assign(__assign({}, acc), (_c = {}, _c[fileRegex] = transformerName, _c));
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));
147
146
  }
148
- return acc;
147
+ return __assign(__assign({}, acc), (_c = {}, _c[fileRegex] = transformerConfig, _c));
149
148
  }, {});
150
149
  if (Object.keys(transformerConfig).length) {
151
150
  jestConfig.transform = __assign(__assign({}, jestConfig.transform), transformerConfig);
@@ -1,4 +1,15 @@
1
1
  "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
2
13
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
14
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
15
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -76,7 +87,7 @@ var presets_1 = require("../helpers/presets");
76
87
  * @internal
77
88
  */
78
89
  var run = function (args /* , logger: Logger*/) { return __awaiter(void 0, void 0, void 0, function () {
79
- var nullLogger, file, filePath, footNotes, name, isPackage, actualConfig, migratedConfig, presetName, preset, jsTransformers, jsWithTs, jsWithBabel, presetValue, migratedValue, presetValue, migratedValue, globalsTsJestConfig, before, after, stringify, prefix;
90
+ var nullLogger, file, filePath, footNotes, name, isPackage, actualConfig, migratedConfig, presetName, preset, jsTransformers, jsWithTs, jsWithBabel, presetValue, migratedValue, presetValue, migratedValue, globalsTsJestConfig, migratedConfigTransform, presetValueTransform_1, before, after, stringify, prefix;
80
91
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
81
92
  return __generator(this, function (_l) {
82
93
  nullLogger = (0, bs_logger_1.createLogger)({ targets: [] });
@@ -194,10 +205,32 @@ var run = function (args /* , logger: Logger*/) { return __awaiter(void 0, void
194
205
  delete ((_k = migratedConfig.globals) !== null && _k !== void 0 ? _k : Object.create(null))['ts-jest'];
195
206
  }
196
207
  // check if it's the same as the preset's one
197
- if (preset &&
198
- migratedConfig.transform &&
199
- (0, fast_json_stable_stringify_1.default)(migratedConfig.transform) === (0, fast_json_stable_stringify_1.default)(preset.value.transform)) {
200
- delete migratedConfig.transform;
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
+ }
201
234
  }
202
235
  // cleanup
203
236
  cleanupConfig(actualConfig);
@@ -1,6 +1,7 @@
1
1
  import type { Config } from '@jest/types';
2
2
  declare type JestPathMapping = Config.InitialOptions['moduleNameMapper'];
3
- export declare const pathsToModuleNameMapper: (mapping: import("typescript").MapLike<string[]>, { prefix }?: {
4
- prefix: string;
3
+ export declare const pathsToModuleNameMapper: (mapping: import("typescript").MapLike<string[]>, { prefix, useESM }?: {
4
+ prefix?: string | undefined;
5
+ useESM?: boolean | undefined;
5
6
  }) => JestPathMapping;
6
7
  export {};
@@ -22,12 +22,11 @@ var escapeRegex = function (str) { return str.replace(/[-\\^$*+?.()|[\]{}]/g, '\
22
22
  var logger = utils_1.rootLogger.child((_a = {}, _a[bs_logger_1.LogContexts.namespace] = 'path-mapper', _a));
23
23
  var pathsToModuleNameMapper = function (mapping, _a) {
24
24
  var e_1, _b;
25
- var _c = _a === void 0 ? Object.create(null) : _a, _d = _c.prefix, prefix = _d === void 0 ? '' : _d;
25
+ var _c = _a === void 0 ? {} : _a, _d = _c.prefix, prefix = _d === void 0 ? '' : _d, _e = _c.useESM, useESM = _e === void 0 ? false : _e;
26
26
  var jestMap = {};
27
27
  try {
28
- for (var _e = __values(Object.keys(mapping)), _f = _e.next(); !_f.done; _f = _e.next()) {
29
- var fromPath = _f.value;
30
- var pattern = void 0;
28
+ for (var _f = __values(Object.keys(mapping)), _g = _f.next(); !_g.done; _g = _f.next()) {
29
+ var fromPath = _g.value;
31
30
  var toPaths = mapping[fromPath];
32
31
  // check that we have only one target path
33
32
  if (toPaths.length === 0) {
@@ -41,8 +40,8 @@ var pathsToModuleNameMapper = function (mapping, _a) {
41
40
  var enrichedPrefix = prefix !== '' && !prefix.endsWith('/') ? "".concat(prefix, "/") : prefix;
42
41
  return "".concat(enrichedPrefix).concat(target);
43
42
  });
44
- pattern = "^".concat(escapeRegex(fromPath), "$");
45
- jestMap[pattern] = paths.length === 1 ? paths[0] : paths;
43
+ var cjsPattern = "^".concat(escapeRegex(fromPath), "$");
44
+ jestMap[cjsPattern] = paths.length === 1 ? paths[0] : paths;
46
45
  }
47
46
  else if (segments.length === 2) {
48
47
  var paths = toPaths.map(function (target) {
@@ -50,8 +49,12 @@ var pathsToModuleNameMapper = function (mapping, _a) {
50
49
  var enrichedPrefix = prefix !== '' && !prefix.endsWith('/') ? "".concat(prefix, "/") : prefix;
51
50
  return "".concat(enrichedPrefix).concat(enrichedTarget.replace(/\*/g, '$1'));
52
51
  });
53
- pattern = "^".concat(escapeRegex(segments[0]), "(.*)").concat(escapeRegex(segments[1]), "$");
54
- jestMap[pattern] = paths.length === 1 ? paths[0] : paths;
52
+ if (useESM) {
53
+ var esmPattern = "^".concat(escapeRegex(segments[0]), "(.*)").concat(escapeRegex(segments[1]), "\\.js$");
54
+ jestMap[esmPattern] = paths.length === 1 ? paths[0] : paths;
55
+ }
56
+ var cjsPattern = "^".concat(escapeRegex(segments[0]), "(.*)").concat(escapeRegex(segments[1]), "$");
57
+ jestMap[cjsPattern] = paths.length === 1 ? paths[0] : paths;
55
58
  }
56
59
  else {
57
60
  logger.warn((0, messages_1.interpolate)("Not mapping \"{{path}}\" because it has more than one star (`*`)." /* Errors.NotMappingMultiStarPath */, { path: fromPath }));
@@ -61,10 +64,13 @@ var pathsToModuleNameMapper = function (mapping, _a) {
61
64
  catch (e_1_1) { e_1 = { error: e_1_1 }; }
62
65
  finally {
63
66
  try {
64
- if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
67
+ if (_g && !_g.done && (_b = _f.return)) _b.call(_f);
65
68
  }
66
69
  finally { if (e_1) throw e_1.error; }
67
70
  }
71
+ if (useESM) {
72
+ jestMap['^(\\.{1,2}/.*)\\.js$'] = '$1';
73
+ }
68
74
  return jestMap;
69
75
  };
70
76
  exports.pathsToModuleNameMapper = pathsToModuleNameMapper;
@@ -109,7 +109,7 @@ var TsJestTransformer = /** @class */ (function () {
109
109
  process.env.TS_JEST = '1';
110
110
  }
111
111
  TsJestTransformer.prototype._configsFor = function (transformOptions) {
112
- var _a, _b;
112
+ var _a, _b, _c;
113
113
  var config = transformOptions.config, cacheFS = transformOptions.cacheFS;
114
114
  var ccs = TsJestTransformer._cachedConfigSets.find(function (cs) { return cs.jestConfig.value === config; });
115
115
  var configSet;
@@ -122,8 +122,15 @@ var TsJestTransformer = /** @class */ (function () {
122
122
  configSet = ccs.configSet;
123
123
  }
124
124
  else {
125
+ if ((_a = config.globals) === null || _a === void 0 ? void 0 : _a['ts-jest']) {
126
+ this._logger.warn("Define `ts-jest` config under `globals` is deprecated. Please do\ntransform: {\n <transform_regex>: ['ts-jest', { /* ts-jest config goes here in Jest */ }],\n}," /* Deprecations.GlobalsTsJestConfigOption */);
127
+ }
128
+ var jestGlobalsConfig = (_b = config.globals) !== null && _b !== void 0 ? _b : {};
129
+ var tsJestGlobalsConfig = (_c = jestGlobalsConfig['ts-jest']) !== null && _c !== void 0 ? _c : {};
130
+ var migratedConfig = this.tsJestConfig
131
+ ? __assign(__assign({}, config), { globals: __assign(__assign({}, jestGlobalsConfig), { 'ts-jest': __assign(__assign({}, tsJestGlobalsConfig), this.tsJestConfig) }) }) : config;
125
132
  // try to look-it up by stringified version
126
- var serializedJestCfg_1 = (0, utils_1.stringify)(config);
133
+ var serializedJestCfg_1 = (0, utils_1.stringify)(migratedConfig);
127
134
  var serializedCcs = TsJestTransformer._cachedConfigSets.find(function (cs) { return cs.jestConfig.serialized === serializedJestCfg_1; });
128
135
  if (serializedCcs) {
129
136
  // update the object so that we can find it later
@@ -140,11 +147,6 @@ var TsJestTransformer = /** @class */ (function () {
140
147
  else {
141
148
  // create the new record in the index
142
149
  this._logger.info('no matching config-set found, creating a new one');
143
- if ((_a = config.globals) === null || _a === void 0 ? void 0 : _a['ts-jest']) {
144
- this._logger.warn("Define `ts-jest` config under `globals` is deprecated. Please do\ntransform: {\n <transform_regex>: ['ts-jest', { /* ts-jest config goes here in Jest */ }],\n}," /* Deprecations.GlobalsTsJestConfigOption */);
145
- }
146
- var migratedConfig = this.tsJestConfig
147
- ? __assign(__assign({}, config), { globals: __assign(__assign({}, ((_b = config.globals) !== null && _b !== void 0 ? _b : Object.create(null))), { 'ts-jest': this.tsJestConfig }) }) : config;
148
150
  configSet = this._createConfigSet(migratedConfig);
149
151
  var jest_1 = __assign({}, migratedConfig);
150
152
  // we need to remove some stuff from jest config
@@ -22,8 +22,9 @@ function createJestPreset(legacy, allowJs, extraOptions) {
22
22
  logger.debug({ allowJs: allowJs }, 'creating jest presets', allowJs ? 'handling' : 'not handling', 'JavaScript files');
23
23
  var extensionsToTreatAsEsm = extraOptions.extensionsToTreatAsEsm, moduleFileExtensions = extraOptions.moduleFileExtensions, testMatch = extraOptions.testMatch;
24
24
  var supportESM = extensionsToTreatAsEsm === null || extensionsToTreatAsEsm === void 0 ? void 0 : extensionsToTreatAsEsm.length;
25
+ var tsJestTransformOptions = supportESM ? { useESM: true } : {};
25
26
  return __assign(__assign(__assign(__assign({}, (extensionsToTreatAsEsm ? { extensionsToTreatAsEsm: extensionsToTreatAsEsm } : undefined)), (moduleFileExtensions ? { moduleFileExtensions: moduleFileExtensions } : undefined)), (testMatch ? { testMatch: testMatch } : undefined)), { transform: __assign(__assign({}, extraOptions.transform), (_a = {}, _a[allowJs ? (supportESM ? '^.+\\.m?[tj]sx?$' : '^.+\\.[tj]sx?$') : '^.+\\.tsx?$'] = legacy
26
- ? 'ts-jest/legacy'
27
- : 'ts-jest', _a)) });
27
+ ? ['ts-jest/legacy', tsJestTransformOptions]
28
+ : ['ts-jest', tsJestTransformOptions], _a)) });
28
29
  }
29
30
  exports.createJestPreset = createJestPreset;
package/dist/types.d.ts CHANGED
@@ -20,7 +20,6 @@ export declare type TTypeScript = typeof _ts;
20
20
  * Don't mark as internal because it is used in TsJestGlobalOptions which is an exposed type
21
21
  */
22
22
  export declare type BabelConfig = _babel.TransformOptions;
23
- export declare type TsJestPresets = Pick<Config.InitialOptions, 'extensionsToTreatAsEsm' | 'moduleFileExtensions' | 'transform' | 'testMatch'>;
24
23
  export interface AstTransformer<T = Record<string, unknown>> {
25
24
  path: string;
26
25
  options?: T;
@@ -145,9 +144,10 @@ export interface InitialOptionsTsJest extends Config.InitialOptions {
145
144
  export declare type TsJestTransformerOptions = TsJestGlobalOptions;
146
145
  export interface JestConfigWithTsJest extends Omit<Config.InitialOptions, 'transform'> {
147
146
  transform?: {
148
- [regex: string]: 'ts-jest' | ['ts-jest', TsJestTransformerOptions] | string | [string, Record<string, unknown>];
147
+ [regex: string]: 'ts-jest' | 'ts-jest/legacy' | ['ts-jest', TsJestTransformerOptions] | ['ts-jest/legacy', TsJestTransformerOptions] | string | Config.TransformerConfig;
149
148
  };
150
149
  }
150
+ export declare type TsJestPresets = Pick<JestConfigWithTsJest, 'extensionsToTreatAsEsm' | 'moduleFileExtensions' | 'transform' | 'testMatch'>;
151
151
  export declare type StringMap = Map<string, string>;
152
152
  export interface DepGraphInfo {
153
153
  fileContent: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ts-jest",
3
- "version": "29.0.2",
3
+ "version": "29.0.4",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "bin": {
@@ -54,7 +54,7 @@
54
54
  "bs-logger": "0.x",
55
55
  "fast-json-stable-stringify": "2.x",
56
56
  "jest-util": "^29.0.0",
57
- "json5": "^2.2.1",
57
+ "json5": "^2.2.3",
58
58
  "lodash.memoize": "4.x",
59
59
  "make-error": "1.x",
60
60
  "semver": "7.x",
@@ -90,9 +90,9 @@
90
90
  },
91
91
  "devDependencies": {
92
92
  "@commitlint/cli": "17.x",
93
- "@commitlint/config-angular": "^17.1.0",
94
- "@jest/transform": "^29.0.3",
95
- "@jest/types": "^29.0.3",
93
+ "@commitlint/config-angular": "^17.4.0",
94
+ "@jest/transform": "^29.1.2",
95
+ "@jest/types": "^29.1.2",
96
96
  "@types/babel__core": "7.x",
97
97
  "@types/cross-spawn": "latest",
98
98
  "@types/fs-extra": "latest",
@@ -101,20 +101,20 @@
101
101
  "@types/lodash.memoize": "4.x",
102
102
  "@types/lodash.set": "4.x",
103
103
  "@types/micromatch": "4.x",
104
- "@types/node": "17.0.35",
104
+ "@types/node": "18.11.18",
105
105
  "@types/node-fetch": "^3.0.3",
106
106
  "@types/react": "18.x",
107
107
  "@types/rimraf": "^3.0.2",
108
108
  "@types/semver": "latest",
109
109
  "@types/yargs": "latest",
110
110
  "@types/yargs-parser": "21.x",
111
- "@typescript-eslint/eslint-plugin": "^5.38.0",
112
- "@typescript-eslint/parser": "^5.38.0",
113
- "babel-jest": "^29.0.3",
111
+ "@typescript-eslint/eslint-plugin": "^5.48.1",
112
+ "@typescript-eslint/parser": "^5.48.1",
113
+ "babel-jest": "^29.1.2",
114
114
  "conventional-changelog-cli": "2.x",
115
115
  "cross-spawn": "latest",
116
- "esbuild": "~0.15.9",
117
- "eslint": "^8.23.1",
116
+ "esbuild": "~0.16.16",
117
+ "eslint": "^8.31.0",
118
118
  "eslint-config-prettier": "latest",
119
119
  "eslint-plugin-import": "latest",
120
120
  "eslint-plugin-jest": "latest",
@@ -122,20 +122,20 @@
122
122
  "eslint-plugin-prefer-arrow": "latest",
123
123
  "eslint-plugin-prettier": "latest",
124
124
  "execa": "5.1.1",
125
- "fs-extra": "10.x",
125
+ "fs-extra": "11.x",
126
126
  "glob": "^8.0.3",
127
127
  "glob-gitignore": "latest",
128
128
  "husky": "4.x",
129
- "jest": "^29.0.3",
129
+ "jest": "^29.1.2",
130
130
  "jest-snapshot-serializer-raw": "^1.2.0",
131
131
  "js-yaml": "latest",
132
132
  "json-schema-to-typescript": "^11.0.2",
133
133
  "lint-staged": "latest",
134
134
  "lodash.camelcase": "^4.3.0",
135
135
  "lodash.set": "^4.3.2",
136
- "node-fetch": "^3.2.10",
137
- "prettier": "^2.7.1",
138
- "typescript": "~4.8.3"
136
+ "node-fetch": "^3.3.0",
137
+ "prettier": "^2.8.2",
138
+ "typescript": "~4.8.4"
139
139
  },
140
140
  "lint-staged": {
141
141
  "*.{ts,tsx,js,jsx}": [