@@ -11,10 +11,21 @@ import ejs from 'ejs'
1111import { stringify as stringifyJson5 } from 'json5'
1212
1313import type { CliCommand , CliCommandArgs } from '..'
14- import { JEST_CONFIG_EJS_TEMPLATE } from '../../constants'
1514import { createDefaultPreset , createJsWithTsPreset , createJsWithBabelPreset } from '../../presets/create-jest-preset'
1615import 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+
1829const 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
0 commit comments