aboutsummaryrefslogtreecommitdiff
path: root/node_modules/babel-plugin-espower/lib/create-espower-visitor.js
blob: eab911ab81aded78117c4aa04c57e493128a5a82 (plain)
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
'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);
            }
        }
    };
};