Skip to content

Commit 89ac224

Browse files
committed
Fix plugin transpiler
1 parent 20996b1 commit 89ac224

File tree

5 files changed

+36
-18
lines changed

5 files changed

+36
-18
lines changed

packages/core/jest.config.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,7 @@ export default async () => ({
44
},
55
moduleNameMapper: {
66
'^react$': '<rootDir>/../../node_modules/react'
7-
}
7+
},
8+
testEnvironment: 'node',
9+
setupFilesAfterEnv: ['./test/jest-setup.ts']
810
});

packages/core/src/plugins/plugins.test.ts

+4-3
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,19 @@ describe('Plugin tests', () => {
1313
});
1414

1515
it('transform some code', async () => {
16-
const result: any = await transformSource('const f = (a,b) => a+b; const test = f(2,3); export default test;');
17-
expect(eval(result.code)).toEqual(5);
16+
const result = await transformSource('const f = (a,b) => a+b; const test = f(2,3); export default test;');
17+
expect(result.default).toEqual(5);
1818
});
1919

2020
it('throw an error on invalid code', async () => {
2121
expect(transformSource('()asd')).rejects.toThrow();
2222
});
2323

2424
it('transform jsx', async () => {
25+
2526
const result: any = await transformSource(
2627
'import React from \'react\'; export const component = () => <div />;'
2728
);
28-
expect(() => eval(result.code)).not.toThrow();
29+
expect(result.component).toBeDefined();
2930
});
3031
});

packages/core/src/plugins/transform.ts

+11-13
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,10 @@ import { createConfigItem, transform, transformFile } from '@babel/core';
22
import presetEnv from '@babel/preset-env';
33
import presetReact from '@babel/preset-react';
44

5-
interface BabelConfig {
6-
configFile: boolean;
7-
sourceType: string;
8-
presets: any[];
9-
}
10-
115
interface TransformResult {
12-
metadata: any;
13-
options: BabelConfig;
6+
[key: string]: any;
147
}
158

16-
type Cb = (err: Error, result: TransformResult) => void;
179
type Transformer = typeof transform | typeof transformFile;
1810

1911
const transformGeneric = (transformer: Transformer) =>
@@ -23,19 +15,25 @@ const transformGeneric = (transformer: Transformer) =>
2315
input,
2416
{
2517
configFile: false,
26-
sourceType: 'unambiguous',
18+
sourceType: 'module',
2719
presets: [
2820
createConfigItem([
2921
presetEnv,
3022
{
31-
targets: {electron: '4'}
23+
targets: {electron: '12'}
3224
}
3325
]),
3426
createConfigItem(presetReact)
3527
]
3628
},
37-
(err: Error, result: TransformResult) => {
38-
err ? reject(err) : resolve(result);
29+
(err: Error, result) => {
30+
if (err) {
31+
reject(err);
32+
} else {
33+
const module = { exports: {} };
34+
new Function('exports', result.code)(module.exports);
35+
resolve(module.exports as TransformResult);
36+
}
3937
}
4038
);
4139
});

packages/core/test/jest-setup.ts

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
/* eslint-disable node/no-unsupported-features/node-builtins */
2+
import * as util from 'util';
3+
4+
// ref: https://jestjs.io/docs/manual-mocks#mocking-methods-which-are-not-implemented-in-jsdom
5+
// ref: https://github.com/jsdom/jsdom/issues/2524
6+
Object.defineProperty(global, 'TextEncoder', {
7+
writable: true,
8+
value: util.TextEncoder
9+
});
10+
Object.defineProperty(global, 'TextDecoder', {
11+
writable: true,
12+
value: util.TextDecoder
13+
});
14+
Object.defineProperty(global, 'require', {
15+
writable: true,
16+
value: require
17+
});

packages/core/tsconfig.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
"src",
1919
"typings",
2020
"test"
21-
],
21+
],
2222
"exclude": [
2323
"lib"
2424
]

0 commit comments

Comments
 (0)