aboutsummaryrefslogtreecommitdiffstats
path: root/config/jestEsbuildCjsTransformer.cjs
diff options
context:
space:
mode:
Diffstat (limited to 'config/jestEsbuildCjsTransformer.cjs')
-rw-r--r--config/jestEsbuildCjsTransformer.cjs57
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 @@
1const { readFileSync } = require('node:fs');
2const path = require('node:path');
3
4const { transformSync } = require('esbuild');
5
6const 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
13const { node: nodeVersion } = JSON.parse(electronVendorsJson);
14
15/**
16 * @param {string} source
17 * @param {string} filePath
18 * @return {import('@jest/transform').TransformedSource}
19 */
20function 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>} */
54module.exports = {
55 canInstrument: false,
56 process,
57};