You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
33 lines
1.3 KiB
JavaScript
33 lines
1.3 KiB
JavaScript
'use strict';
|
|
|
|
var defaultOptions = require('./default-options');
|
|
var assign = require('core-js/library/fn/object/assign');
|
|
var BabelEspowerVisitor = require('./babel-espower-visitor');
|
|
|
|
module.exports = function createEspowerVisitor (babel, options) {
|
|
return {
|
|
visitor: {
|
|
Program: function (path, state) {
|
|
var opts = assign(defaultOptions(), {
|
|
astWhiteList: babel.types.BUILDER_KEYS,
|
|
visitorKeys: babel.types.VISITOR_KEYS,
|
|
sourceRoot: process.cwd()
|
|
}, options, state.opts);
|
|
var espowerVisitor = new BabelEspowerVisitor(babel, opts);
|
|
var innerVisitor = Object.keys(opts.visitorKeys).reduce(function (handlers, nodeType) {
|
|
handlers[nodeType] = {
|
|
enter: function (nodePath, pluginPass) {
|
|
espowerVisitor.enter(nodePath);
|
|
},
|
|
exit: function (nodePath, pluginPass) {
|
|
espowerVisitor.exit(nodePath);
|
|
}
|
|
};
|
|
return handlers;
|
|
}, {});
|
|
path.traverse(innerVisitor, state);
|
|
}
|
|
}
|
|
};
|
|
};
|