diff options
Diffstat (limited to 'config/jestEsbuildCjsTransformer.cjs')
-rw-r--r-- | config/jestEsbuildCjsTransformer.cjs | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/config/jestEsbuildCjsTransformer.cjs b/config/jestEsbuildCjsTransformer.cjs new file mode 100644 index 0000000..419d7b2 --- /dev/null +++ b/config/jestEsbuildCjsTransformer.cjs | |||
@@ -0,0 +1,57 @@ | |||
1 | const { readFileSync } = require('node:fs'); | ||
2 | const path = require('node:path'); | ||
3 | |||
4 | const { transformSync } = require('esbuild'); | ||
5 | |||
6 | const electronVendorsJson = readFileSync( | ||
7 | path.join(__dirname, '../.electron-vendors.cache.json'), | ||
8 | 'utf8', | ||
9 | ); | ||
10 | |||
11 | /** @type {{ node: number; }} */ | ||
12 | // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment | ||
13 | const { node: nodeVersion } = JSON.parse(electronVendorsJson); | ||
14 | |||
15 | /** | ||
16 | * @param {string} source | ||
17 | * @param {string} filePath | ||
18 | * @return {import('@jest/transform').TransformedSource} | ||
19 | */ | ||
20 | function process(source, filePath) { | ||
21 | /** @type {import('esbuild').Loader} */ | ||
22 | let loader; | ||
23 | if (filePath.endsWith('tsx')) { | ||
24 | loader = 'tsx'; | ||
25 | } else if (filePath.endsWith('ts')) { | ||
26 | loader = 'ts'; | ||
27 | } else { | ||
28 | loader = 'js'; | ||
29 | } | ||
30 | const { code, map } = transformSync(source, { | ||
31 | loader, | ||
32 | sourcefile: filePath, | ||
33 | format: 'cjs', | ||
34 | target: `node${nodeVersion}`, | ||
35 | sourcemap: true, | ||
36 | define: { | ||
37 | __DEV__: JSON.stringify(false), // For mobx | ||
38 | 'process.env.NODE_ENV': 'test', | ||
39 | 'process.env.MODE': 'test', | ||
40 | 'import.meta.env': JSON.stringify({ | ||
41 | DEV: false, | ||
42 | MODE: 'test', | ||
43 | PROD: true, | ||
44 | }), | ||
45 | }, | ||
46 | }); | ||
47 | return { | ||
48 | code, | ||
49 | map, | ||
50 | }; | ||
51 | } | ||
52 | |||
53 | /** @type {import('@jest/transform').Transformer<void>} */ | ||
54 | module.exports = { | ||
55 | canInstrument: false, | ||
56 | process, | ||
57 | }; | ||