-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
92 lines (86 loc) · 2.86 KB
/
index.js
File metadata and controls
92 lines (86 loc) · 2.86 KB
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
/*!
* cube-jsx: index.js
*/
'use strict';
const babelCore = require('babel-core');
function genRule(rule) {
if (rule.indexOf('/') === 0) {
rule = '^' + rule;
}
return new RegExp(rule.replace(/\./g, '\\.').replace(/\*/g, '.*'));
}
function ES2015Processor(cube) {
this.cube = cube;
let config = this.cube.config;
let exclude = [];
if (config.build && config.build.es2015) {
config.build.es2015.exclude && config.build.es2015.exclude.forEach(function (rule) {
exclude.push(genRule(rule));
});
} else {
exclude.push(/^\/node_modules/);
}
this.excludeRules = exclude;
let flagStrict = this.cube.config && this.cube.config.strictModel;
this.plugins = [
[
require('babel-plugin-transform-runtime'),
{polyfill: false, regenerator: true}
],
require('babel-plugin-transform-es2015-template-literals'),
require('babel-plugin-transform-es2015-literals'),
require('babel-plugin-transform-es2015-function-name'),
require('babel-plugin-transform-es2015-arrow-functions'),
require('babel-plugin-transform-es2015-block-scoped-functions'),
require('babel-plugin-transform-es2015-classes'),
require('babel-plugin-transform-es2015-object-super'),
require('babel-plugin-transform-es2015-shorthand-properties'),
require('babel-plugin-transform-es2015-duplicate-keys'),
require('babel-plugin-transform-es2015-computed-properties'),
require('babel-plugin-transform-es2015-for-of'),
require('babel-plugin-transform-es2015-sticky-regex'),
require('babel-plugin-transform-es2015-unicode-regex'),
require('babel-plugin-check-es2015-constants'),
require('babel-plugin-transform-es2015-spread'),
require('babel-plugin-transform-es2015-parameters'),
require('babel-plugin-transform-es2015-destructuring'),
require('babel-plugin-transform-es2015-block-scoping'),
require('babel-plugin-transform-es2015-typeof-symbol'),
[
require('babel-plugin-transform-es2015-modules-commonjs'),
{strict: flagStrict || false, allowTopLevelThis: true}
],
[
require('babel-plugin-transform-regenerator'),
{async: false, asyncGenerators: false}
]
];
}
ES2015Processor.type = 'script';
ES2015Processor.ext = '.*';
ES2015Processor.prototype.process = function (data, callback) {
let code = data.code;
let res;
let exclude = this.excludeRules;
for (let i = 0, len = exclude.length; i < len; i++) {
if (exclude[i].test(data.queryPath)) {
return callback(null, data);
}
}
try {
res = babelCore.transform(code, {
ast: true,
code: true,
filename: data.realPath,
sourceRoot: this.cube.config.root,
comments: false,
plugins: this.plugins
});
} catch (e) {
e.message = 'transform to es2015 error, ' + e.message;
return callback(e);
}
data.code = res.code;
callback(null, data);
};
module.exports = ES2015Processor;