-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
31 lines (27 loc) · 871 Bytes
/
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
const parser = require('../parser');
const traverse = require('../traverse');
const generate = require('../generator');
const template = require('../template');
function transformSync(code, options) {
const ast = parser.parse(code, options.parserOpts);
const pluginApi = {
template
}
const visitors = {};
options.plugins && options.plugins.forEach(([plugin, options]) => {
const res = plugin(pluginApi, options);
Object.assign(visitors, res.visitor);
});
options.presets && options.presets.reverse().forEach(([preset, options]) => {
const plugins = preset(pluginApi, options);
plugins.forEach(([plugin, options]) => {
const res = plugin(pluginApi, options);
Object.assign(visitors, res.visitor);
})
})
traverse(ast, visitors);
return generate(ast, code, options.fileName);
}
module.exports = {
transformSync
}