/
presets.ts
55 lines (51 loc) · 1.57 KB
/
presets.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import { TsJestPresets } from '../../types'
/** @internal */
export enum JestPresetNames {
default = 'ts-jest/presets/default',
jsWithTs = 'ts-jest/presets/js-with-ts',
jsWIthBabel = 'ts-jest/presets/js-with-babel',
}
/** @internal */
export interface TsJestPresetDescriptor {
name: string
fullName: string
label: string
jsVarName: string
value: TsJestPresets
isDefault: boolean
jsImport(varName?: string): string
}
const definePreset = (fullName: string): TsJestPresetDescriptor => ({
fullName,
get name() {
return this.isDefault ? 'ts-jest' : fullName
},
get label() {
return fullName.split('/').pop()!
},
get jsVarName() {
return this.isDefault
? 'defaults'
: fullName
.split('/')
.pop()!
.replace(/\-([a-z])/g, (_, l) => l.toUpperCase())
},
get value() {
return require(`../../../${fullName.replace(/^ts-jest\//, '')}/jest-preset`)
},
jsImport(varName = 'tsjPreset') {
return `const { ${this.jsVarName}: ${varName} } = require('${this.fullName}')`
},
get isDefault() {
return fullName === JestPresetNames.default
},
})
/** @internal */
export const allPresets: Record<JestPresetNames, TsJestPresetDescriptor> = {} as any
/** @internal */
export const defaults = (allPresets[JestPresetNames.default] = definePreset(JestPresetNames.default))
/** @internal */
export const jsWithTs = (allPresets[JestPresetNames.jsWithTs] = definePreset(JestPresetNames.jsWithTs))
/** @internal */
export const jsWIthBabel = (allPresets[JestPresetNames.jsWIthBabel] = definePreset(JestPresetNames.jsWIthBabel))