Skip to content

Commit cdd3039

Browse files
authored
fix(cli): init config with preset creator functions (#4846)
Fixes #4840
1 parent d7d91e0 commit cdd3039

File tree

3 files changed

+76
-34
lines changed

3 files changed

+76
-34
lines changed

src/cli/__snapshots__/cli.spec.ts.snap

Lines changed: 44 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,61 +1,93 @@
11
// Jest Snapshot v1, https://goo.gl/fbAQLP
22

33
exports[`config init should create a jest config file with cli options for config type default 1`] = `
4-
"/** @type {import('ts-jest').JestConfigWithTsJest} **/
4+
"const { createDefaultPreset } = require("ts-jest/presets")
5+
6+
const tsJestTransformCfg = createDefaultPreset().transform
7+
8+
/** @type {import("jest").Config} **/
59
module.exports = {
610
testEnvironment: "node",
711
transform: {
8-
"^.+\\.tsx?$": ["ts-jest",{}],
12+
...tsJestTransformCfg,
913
},
1014
};"
1115
`;
1216

1317
exports[`config init should create a jest config file with cli options for config type default and type "module" package.json 1`] = `
14-
"/** @type {import('ts-jest').JestConfigWithTsJest} **/
18+
"const { createDefaultPreset } = require("ts-jest/presets")
19+
20+
const tsJestTransformCfg = createDefaultPreset().transform
21+
22+
/** @type {import("jest").Config} **/
1523
export default {
1624
testEnvironment: "node",
1725
transform: {
18-
"^.+\\.tsx?$": ["ts-jest",{}],
26+
...tsJestTransformCfg,
1927
},
2028
};"
2129
`;
2230

2331
exports[`config init should create a jest config file with cli options for config type js-with-babel-full-options 1`] = `
24-
"/** @type {import('ts-jest').JestConfigWithTsJest} **/
32+
"const { createJsWithBabelPreset } = require("ts-jest/presets")
33+
34+
const tsJestTransformCfg = createJsWithBabelPreset({
35+
"tsconfig": "tsconfig.test.json"
36+
}).transform
37+
38+
/** @type {import("jest").Config} **/
2539
module.exports = {
2640
testEnvironment: "jsdom",
2741
transform: {
28-
"^.+\\.jsx?$": "babel-jest",
42+
...tsJestTransformCfg,
2943
},
3044
};"
3145
`;
3246

3347
exports[`config init should create a jest config file with cli options for config type js-with-babel-full-options and type "module" package.json 1`] = `
34-
"/** @type {import('ts-jest').JestConfigWithTsJest} **/
48+
"const { createJsWithBabelPreset } = require("ts-jest/presets")
49+
50+
const tsJestTransformCfg = createJsWithBabelPreset({
51+
"tsconfig": "tsconfig.test.json"
52+
}).transform
53+
54+
/** @type {import("jest").Config} **/
3555
export default {
3656
testEnvironment: "jsdom",
3757
transform: {
38-
"^.+\\.jsx?$": "babel-jest",
58+
...tsJestTransformCfg,
3959
},
4060
};"
4161
`;
4262

4363
exports[`config init should create a jest config file with cli options for config type js-with-ts-full-options 1`] = `
44-
"/** @type {import('ts-jest').JestConfigWithTsJest} **/
64+
"const { createJsWithTsPreset } = require("ts-jest/presets")
65+
66+
const tsJestTransformCfg = createJsWithTsPreset({
67+
"tsconfig": "tsconfig.test.json"
68+
}).transform
69+
70+
/** @type {import("jest").Config} **/
4571
module.exports = {
4672
testEnvironment: "jsdom",
4773
transform: {
48-
"^.+\\.[tj]sx?$": ["ts-jest",{tsconfig:"tsconfig.test.json"}],
74+
...tsJestTransformCfg,
4975
},
5076
};"
5177
`;
5278

5379
exports[`config init should create a jest config file with cli options for config type js-with-ts-full-options and type "module" package.json 1`] = `
54-
"/** @type {import('ts-jest').JestConfigWithTsJest} **/
80+
"const { createJsWithTsPreset } = require("ts-jest/presets")
81+
82+
const tsJestTransformCfg = createJsWithTsPreset({
83+
"tsconfig": "tsconfig.test.json"
84+
}).transform
85+
86+
/** @type {import("jest").Config} **/
5587
export default {
5688
testEnvironment: "jsdom",
5789
transform: {
58-
"^.+\\.[tj]sx?$": ["ts-jest",{tsconfig:"tsconfig.test.json"}],
90+
...tsJestTransformCfg,
5991
},
6092
};"
6193
`;

src/cli/config/init.ts

Lines changed: 32 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,21 @@ import ejs from 'ejs'
1111
import { stringify as stringifyJson5 } from 'json5'
1212

1313
import type { CliCommand, CliCommandArgs } from '..'
14-
import { JEST_CONFIG_EJS_TEMPLATE } from '../../constants'
1514
import { createDefaultPreset, createJsWithTsPreset, createJsWithBabelPreset } from '../../presets/create-jest-preset'
1615
import type { DefaultPreset, JsWithBabelPreset, JsWithTsPreset, TsJestTransformerOptions } from '../../types'
1716

17+
const JEST_CONFIG_EJS_TEMPLATE = `const { <%= presetCreatorFn %> } = require("ts-jest/presets")
18+
19+
const tsJestTransformCfg = <%= presetCreatorFn %>(<%- transformOpts %>).transform
20+
21+
/** @type {import("jest").Config} **/
22+
<%= exportKind %> {
23+
testEnvironment: "<%= testEnvironment %>",
24+
transform: {
25+
...tsJestTransformCfg,
26+
},
27+
};`
28+
1829
const ensureOnlyUsingDoubleQuotes = (str: string): string => {
1930
return str
2031
.replace(/"'(.*?)'"/g, '"$1"')
@@ -62,16 +73,18 @@ export const run: CliCommand = async (args: CliCommandArgs /* , logger: Logger *
6273
}
6374

6475
let body: string
65-
const resolvedTsconfigOption = tsconfig ? { tsconfig: `${stringifyJson5(tsconfig)}` } : undefined
76+
const transformOpts: TsJestTransformerOptions | undefined = tsconfig
77+
? { tsconfig: `${stringifyJson5(tsconfig)}` }
78+
: undefined
6679
let transformConfig: DefaultPreset | JsWithTsPreset | JsWithBabelPreset
67-
if (jsFilesProcessor === 'babel' || shouldPostProcessWithBabel) {
68-
transformConfig = createJsWithBabelPreset(resolvedTsconfigOption)
69-
} else if (jsFilesProcessor === 'ts') {
70-
transformConfig = createJsWithTsPreset(resolvedTsconfigOption)
71-
} else {
72-
transformConfig = createDefaultPreset(resolvedTsconfigOption)
73-
}
7480
if (isPackageJsonConfig) {
81+
if (jsFilesProcessor === 'babel' || shouldPostProcessWithBabel) {
82+
transformConfig = createJsWithBabelPreset(transformOpts)
83+
} else if (jsFilesProcessor === 'ts') {
84+
transformConfig = createJsWithTsPreset(transformOpts)
85+
} else {
86+
transformConfig = createDefaultPreset(transformOpts)
87+
}
7588
body = ensureOnlyUsingDoubleQuotes(
7689
JSON.stringify(
7790
{
@@ -83,12 +96,19 @@ export const run: CliCommand = async (args: CliCommandArgs /* , logger: Logger *
8396
),
8497
)
8598
} else {
86-
const [transformPattern, transformValue] = Object.entries(transformConfig.transform)[0]
99+
let presetCreatorFn: string
100+
if (jsFilesProcessor === 'babel' || shouldPostProcessWithBabel) {
101+
presetCreatorFn = 'createJsWithBabelPreset'
102+
} else if (jsFilesProcessor === 'ts') {
103+
presetCreatorFn = 'createJsWithTsPreset'
104+
} else {
105+
presetCreatorFn = 'createDefaultPreset'
106+
}
87107
body = ejs.render(JEST_CONFIG_EJS_TEMPLATE, {
88108
exportKind: pkgJsonContent.type === 'module' ? 'export default' : 'module.exports =',
89109
testEnvironment: jsdom ? 'jsdom' : 'node',
90-
transformPattern,
91-
transformValue: ensureOnlyUsingDoubleQuotes(stringifyJson5(transformValue)),
110+
presetCreatorFn,
111+
transformOpts: transformOpts ? ensureOnlyUsingDoubleQuotes(JSON.stringify(transformOpts, null, 2)) : undefined,
92112
})
93113
}
94114

src/constants.ts

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,3 @@ export const JS_EXT_TO_TREAT_AS_ESM = ['.jsx']
1717
* See https://jestjs.io/docs/en/configuration#testmatch-arraystring
1818
*/
1919
export const DEFAULT_JEST_TEST_MATCH = ['**/__tests__/**/*.[jt]s?(x)', '**/?(*.)+(spec|test).[jt]s?(x)']
20-
/**
21-
* @internal
22-
*/
23-
export const JEST_CONFIG_EJS_TEMPLATE = `/** @type {import('ts-jest').JestConfigWithTsJest} **/
24-
<%= exportKind %> {
25-
testEnvironment: "<%= testEnvironment %>",
26-
transform: {
27-
"<%= transformPattern %>": <%- transformValue %>,
28-
},
29-
};`

0 commit comments

Comments
 (0)