-
Notifications
You must be signed in to change notification settings - Fork 751
/
Copy pathindex.js
54 lines (50 loc) · 1.51 KB
/
index.js
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
import compileModule from '../../../utils/compileModule';
import pkg from 'babel7/package.json';
const ID = 'babelv7';
function checkForTypescript(data) {
if (data.includes("typescript")) {
return true;
}
for (let item of data) {
if (Array.isArray(item)) {
if (checkForTypescript(item)) {
return true;
}
}
}
return false;
}
export default {
id: ID,
displayName: ID,
version: pkg.version,
homepage: pkg.homepage,
defaultParserID: 'babylon7',
loadTransformer(callback) {
require([
'../../../transpilers/babel',
'../../../transpilers/typescript',
'babel7',
'recast',
'../../babylon7.js',
], (transpile, transpileTs, babel, recast, babylon7) => callback({ transpile: transpile.default, transpileTs: transpileTs.default, babel, recast, babylon7 }));
},
transform({ transpile, transpileTs, babel, recast, babylon7 }, transformCode, code) {
transformCode = checkForTypescript(babylon7.parserOptions) ? transpileTs(transformCode, babylon7.parserOptions) : transpile(transformCode, babylon7.parserOptions);
let transform = compileModule( // eslint-disable-line no-shadow
transformCode,
);
return babel.transformAsync(code, {
parserOpts: {
parser: recast.parse,
plugins: babylon7.parserOptions,
},
retainLines: false,
generatorOpts: {
generator: recast.print,
},
plugins: [(transform.default || transform)(babel)],
sourceMaps: true,
});
},
};