ts-jest 29.0.2 → 29.0.3

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
+ 7378fcb54a209ca78cc5680b6d7f7243b480d5bb
package/CHANGELOG.md CHANGED
@@ -1,3 +1,18 @@
1
+ ## [29.0.3](https://github.com/kulshekhar/ts-jest/compare/v29.0.2...v29.0.3) (2022-09-28)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * 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)
7
+ * **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))
8
+
9
+
10
+ ### Features
11
+
12
+ * add `useESM` option to `pathsToModuleNameMapper` options ([#3792](https://github.com/kulshekhar/ts-jest/issues/3792)) ([eabe906](https://github.com/kulshekhar/ts-jest/commit/eabe906e1dd6b132a7b0d05ffc13172cd8a6b73b))
13
+
14
+
15
+
1
16
  ## [29.0.2](https://github.com/kulshekhar/ts-jest/compare/v29.0.1...v29.0.2) (2022-09-23)
2
17
 
3
18
 
@@ -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;
@@ -143,8 +143,10 @@ var TsJestTransformer = /** @class */ (function () {
143
143
  if ((_a = config.globals) === null || _a === void 0 ? void 0 : _a['ts-jest']) {
144
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
145
  }
146
+ var jestGlobalsConfig = (_b = config.globals) !== null && _b !== void 0 ? _b : {};
147
+ var tsJestGlobalsConfig = (_c = jestGlobalsConfig['ts-jest']) !== null && _c !== void 0 ? _c : {};
146
148
  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;
149
+ ? __assign(__assign({}, config), { globals: __assign(__assign({}, jestGlobalsConfig), { 'ts-jest': __assign(__assign({}, tsJestGlobalsConfig), 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.3",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "bin": {
@@ -108,13 +108,13 @@
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",
111
+ "@typescript-eslint/eslint-plugin": "^5.38.1",
112
+ "@typescript-eslint/parser": "^5.38.1",
113
113
  "babel-jest": "^29.0.3",
114
114
  "conventional-changelog-cli": "2.x",
115
115
  "cross-spawn": "latest",
116
116
  "esbuild": "~0.15.9",
117
- "eslint": "^8.23.1",
117
+ "eslint": "^8.24.0",
118
118
  "eslint-config-prettier": "latest",
119
119
  "eslint-plugin-import": "latest",
120
120
  "eslint-plugin-jest": "latest",