1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 | var recast = require("recast");
|
9 | var types = recast.types;
|
10 | var n = types.namedTypes;
|
11 | var util = require("./util.js");
|
12 |
|
13 | exports.transform = function transform(node, options) {
|
14 | options = util.defaults(options || {}, {
|
15 | includeRuntime: false
|
16 | });
|
17 |
|
18 | var result = require("@babel/core").transformFromAstSync(node, null, {
|
19 | presets: [require("regenerator-preset")],
|
20 | code: false,
|
21 | ast: true
|
22 | });
|
23 |
|
24 | node = result.ast;
|
25 |
|
26 | if (options.includeRuntime === true) {
|
27 | injectRuntime(n.File.check(node) ? node.program : node);
|
28 | }
|
29 |
|
30 | return node;
|
31 | };
|
32 |
|
33 | function injectRuntime(program) {
|
34 | n.Program.assert(program);
|
35 |
|
36 |
|
37 |
|
38 | var runtimePath = require("..").runtime.path;
|
39 | var runtime = fs.readFileSync(runtimePath, "utf8");
|
40 | var runtimeBody = recast.parse(runtime, {
|
41 | sourceFileName: runtimePath
|
42 | }).program.body;
|
43 |
|
44 | var body = program.body;
|
45 | body.unshift.apply(body, runtimeBody);
|
46 | }
|