@@ -11,10 +11,21 @@ import ejs from 'ejs'
11
11
import { stringify as stringifyJson5 } from 'json5'
12
12
13
13
import type { CliCommand , CliCommandArgs } from '..'
14
- import { JEST_CONFIG_EJS_TEMPLATE } from '../../constants'
15
14
import { createDefaultPreset , createJsWithTsPreset , createJsWithBabelPreset } from '../../presets/create-jest-preset'
16
15
import type { DefaultPreset , JsWithBabelPreset , JsWithTsPreset , TsJestTransformerOptions } from '../../types'
17
16
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
+
18
29
const ensureOnlyUsingDoubleQuotes = ( str : string ) : string => {
19
30
return str
20
31
. replace ( / " ' ( .* ?) ' " / g, '"$1"' )
@@ -62,16 +73,18 @@ export const run: CliCommand = async (args: CliCommandArgs /* , logger: Logger *
62
73
}
63
74
64
75
let body : string
65
- const resolvedTsconfigOption = tsconfig ? { tsconfig : `${ stringifyJson5 ( tsconfig ) } ` } : undefined
76
+ const transformOpts : TsJestTransformerOptions | undefined = tsconfig
77
+ ? { tsconfig : `${ stringifyJson5 ( tsconfig ) } ` }
78
+ : undefined
66
79
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
- }
74
80
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
+ }
75
88
body = ensureOnlyUsingDoubleQuotes (
76
89
JSON . stringify (
77
90
{
@@ -83,12 +96,19 @@ export const run: CliCommand = async (args: CliCommandArgs /* , logger: Logger *
83
96
) ,
84
97
)
85
98
} 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
+ }
87
107
body = ejs . render ( JEST_CONFIG_EJS_TEMPLATE , {
88
108
exportKind : pkgJsonContent . type === 'module' ? 'export default' : 'module.exports =' ,
89
109
testEnvironment : jsdom ? 'jsdom' : 'node' ,
90
- transformPattern ,
91
- transformValue : ensureOnlyUsingDoubleQuotes ( stringifyJson5 ( transformValue ) ) ,
110
+ presetCreatorFn ,
111
+ transformOpts : transformOpts ? ensureOnlyUsingDoubleQuotes ( JSON . stringify ( transformOpts , null , 2 ) ) : undefined ,
92
112
} )
93
113
}
94
114
0 commit comments