1 | /**
|
2 | * @fileoverview Patch for estraverse
|
3 | * @author Toru Nagashima
|
4 | * @copyright 2015 Toru Nagashima. All rights reserved.
|
5 | * See LICENSE file in root directory for full license.
|
6 | */
|
7 | ;
|
8 |
|
9 | //------------------------------------------------------------------------------
|
10 | // Requirements
|
11 | //------------------------------------------------------------------------------
|
12 |
|
13 | var estraverse = require("estraverse"),
|
14 | jsxKeys = require("estraverse-fb/keys");
|
15 |
|
16 | //------------------------------------------------------------------------------
|
17 | // Helers
|
18 | //------------------------------------------------------------------------------
|
19 |
|
20 | var experimentalKeys = {
|
21 | ExperimentalRestProperty: ["argument"],
|
22 | ExperimentalSpreadProperty: ["argument"]
|
23 | };
|
24 |
|
25 | /**
|
26 | * Adds a given keys to Syntax and VisitorKeys of estraverse.
|
27 | *
|
28 | * @param {object} keys - Key definitions to add.
|
29 | * This is an object as map.
|
30 | * Keys are the node type.
|
31 | * Values are an array of property names to visit.
|
32 | * @returns {void}
|
33 | */
|
34 | function installKeys(keys) {
|
35 | for (var key in keys) {
|
36 | /* istanbul ignore else */
|
37 | if (keys.hasOwnProperty(key)) {
|
38 | estraverse.Syntax[key] = key;
|
39 | if (keys[key]) {
|
40 | estraverse.VisitorKeys[key] = keys[key];
|
41 | }
|
42 | }
|
43 | }
|
44 | }
|
45 |
|
46 | // Add JSX node types.
|
47 | installKeys(jsxKeys);
|
48 | // Add Experimental node types.
|
49 | installKeys(experimentalKeys);
|
50 |
|
51 | //------------------------------------------------------------------------------
|
52 | // Public Interface
|
53 | //------------------------------------------------------------------------------
|
54 |
|
55 | module.exports = estraverse;
|