1 | var babel = require("babel-standalone");
|
2 | var assign = require("lodash/assign");
|
3 |
|
4 | function getBabelPlugins(userDefinedPlugins, options) {
|
5 | var plugins = userDefinedPlugins || [];
|
6 | var transformModulesPlugin = "transform-es2015-modules-amd";
|
7 |
|
8 |
|
9 |
|
10 | if (options.forceES5 === false && !plugins.includes(transformModulesPlugin)) {
|
11 | plugins.push(transformModulesPlugin);
|
12 | }
|
13 |
|
14 | return plugins;
|
15 | }
|
16 |
|
17 | function getBabelPresets(userDefinedPresets, modules, options) {
|
18 | var presets;
|
19 | var es2015Preset = ["es2015", {loose: false, modules: modules}];
|
20 |
|
21 |
|
22 | if(userDefinedPresets && userDefinedPresets.length) {
|
23 | presets = options.forceES5 !== false
|
24 | ? [es2015Preset].concat(userDefinedPresets)
|
25 | : userDefinedPresets
|
26 | } else {
|
27 | presets = options.forceES5 !== false
|
28 | ? ["react", "stage-0", es2015Preset]
|
29 | : ["react"]
|
30 | }
|
31 |
|
32 | return presets;
|
33 | }
|
34 |
|
35 | module.exports = function(source, compileOptions, options){
|
36 | var opts = assign({}, options.babelOptions, {
|
37 | sourceMap: compileOptions.sourceMaps || false
|
38 | });
|
39 |
|
40 | opts.presets = getBabelPresets(opts.presets, compileOptions.modules, options);
|
41 | opts.plugins = getBabelPlugins(opts.plugins, options);
|
42 |
|
43 |
|
44 | delete opts.optional;
|
45 | delete opts.whitelist;
|
46 | delete opts.blacklist;
|
47 |
|
48 | if(opts.sourceMap) {
|
49 | opts.sourceMapTarget = options.sourceMapFileName;
|
50 | opts.sourceFileName = options.sourceMapFileName;
|
51 | }
|
52 |
|
53 | return babel.transform(source, opts);
|
54 | };
|