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);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
};
|