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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy