ast-types 0.9.7 → 0.9.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,7 +1,4 @@
1
- AST Types
2
- ===
3
-
4
- [![Greenkeeper badge](https://badges.greenkeeper.io/benjamn/ast-types.svg)](https://greenkeeper.io/)
1
+ # AST Types [![Build Status](https://travis-ci.org/benjamn/ast-types.svg?branch=master)](https://travis-ci.org/benjamn/ast-types) [![Greenkeeper badge](https://badges.greenkeeper.io/benjamn/ast-types.svg)](https://greenkeeper.io/)
5
2
 
6
3
  This module provides an efficient, modular,
7
4
  [Esprima](https://github.com/ariya/esprima)-compatible implementation of
@@ -10,8 +7,6 @@ tree](http://en.wikipedia.org/wiki/Abstract_syntax_tree) type hierarchy
10
7
  pioneered by the [Mozilla Parser
11
8
  API](https://developer.mozilla.org/en-US/docs/SpiderMonkey/Parser_API).
12
9
 
13
- [![Build Status](https://travis-ci.org/benjamn/ast-types.png?branch=master)](https://travis-ci.org/benjamn/ast-types)
14
-
15
10
  Installation
16
11
  ---
17
12
 
@@ -0,0 +1,168 @@
1
+ module.exports = function (fork) {
2
+ fork.use(require("./babel"));
3
+
4
+ // var types = fork.types;
5
+ var types = fork.use(require("../lib/types"));
6
+ // var defaults = fork.shared.defaults;
7
+ var defaults = fork.use(require("../lib/shared")).defaults;
8
+ var def = types.Type.def;
9
+ var or = types.Type.or;
10
+
11
+ def("Directive")
12
+ .bases("Node")
13
+ .build("value")
14
+ .field("value", def("DirectiveLiteral"));
15
+
16
+ def("DirectiveLiteral")
17
+ .bases("Node", "Expression")
18
+ .build("value")
19
+ .field("value", String, defaults["use strict"]);
20
+
21
+ def("BlockStatement")
22
+ .bases("Statement")
23
+ .build("body")
24
+ .field("body", [def("Statement")])
25
+ .field("directives", [def("Directive")], defaults.emptyArray);
26
+
27
+ def("Program")
28
+ .bases("Node")
29
+ .build("body")
30
+ .field("body", [def("Statement")])
31
+ .field("directives", [def("Directive")], defaults.emptyArray);
32
+
33
+ // Split Literal
34
+ def("StringLiteral")
35
+ .bases("Literal")
36
+ .build("value")
37
+ .field("value", String);
38
+
39
+ def("NumericLiteral")
40
+ .bases("Literal")
41
+ .build("value")
42
+ .field("value", Number);
43
+
44
+ def("NullLiteral")
45
+ .bases("Literal")
46
+ .build()
47
+ .field("value", null, defaults["null"]);
48
+
49
+ def("BooleanLiteral")
50
+ .bases("Literal")
51
+ .build("value")
52
+ .field("value", Boolean);
53
+
54
+ def("RegExpLiteral")
55
+ .bases("Literal")
56
+ .build("pattern", "flags")
57
+ .field("pattern", String)
58
+ .field("flags", String)
59
+ .field("value", RegExp, function () {
60
+ return new RegExp(this.pattern, this.flags);
61
+ });
62
+
63
+ var ObjectExpressionProperty = or(
64
+ def("Property"),
65
+ def("ObjectMethod"),
66
+ def("ObjectProperty"),
67
+ def("SpreadProperty")
68
+ );
69
+
70
+ // Split Property -> ObjectProperty and ObjectMethod
71
+ def("ObjectExpression")
72
+ .bases("Expression")
73
+ .build("properties")
74
+ .field("properties", [ObjectExpressionProperty]);
75
+
76
+ // ObjectMethod hoist .value properties to own properties
77
+ def("ObjectMethod")
78
+ .bases("Node", "Function")
79
+ .build("kind", "key", "params", "body", "computed")
80
+ .field("kind", or("method", "get", "set"))
81
+ .field("key", or(def("Literal"), def("Identifier"), def("Expression")))
82
+ .field("params", [def("Pattern")])
83
+ .field("body", def("BlockStatement"))
84
+ .field("computed", Boolean, defaults["false"])
85
+ .field("generator", Boolean, defaults["false"])
86
+ .field("async", Boolean, defaults["false"])
87
+ .field("decorators",
88
+ or([def("Decorator")], null),
89
+ defaults["null"]);
90
+
91
+ def("ObjectProperty")
92
+ .bases("Node")
93
+ .build("key", "value")
94
+ .field("key", or(def("Literal"), def("Identifier"), def("Expression")))
95
+ .field("value", or(def("Expression"), def("Pattern")))
96
+ .field("computed", Boolean, defaults["false"]);
97
+
98
+ var ClassBodyElement = or(
99
+ def("MethodDefinition"),
100
+ def("VariableDeclarator"),
101
+ def("ClassPropertyDefinition"),
102
+ def("ClassProperty"),
103
+ def("ClassMethod")
104
+ );
105
+
106
+ // MethodDefinition -> ClassMethod
107
+ def("ClassBody")
108
+ .bases("Declaration")
109
+ .build("body")
110
+ .field("body", [ClassBodyElement]);
111
+
112
+ def("ClassMethod")
113
+ .bases("Declaration", "Function")
114
+ .build("kind", "key", "params", "body", "computed", "static")
115
+ .field("kind", or("get", "set", "method", "constructor"))
116
+ .field("key", or(def("Literal"), def("Identifier"), def("Expression")))
117
+ .field("params", [def("Pattern")])
118
+ .field("body", def("BlockStatement"))
119
+ .field("computed", Boolean, defaults["false"])
120
+ .field("static", Boolean, defaults["false"])
121
+ .field("generator", Boolean, defaults["false"])
122
+ .field("async", Boolean, defaults["false"])
123
+ .field("decorators",
124
+ or([def("Decorator")], null),
125
+ defaults["null"]);
126
+
127
+ var ObjectPatternProperty = or(
128
+ def("Property"),
129
+ def("PropertyPattern"),
130
+ def("SpreadPropertyPattern"),
131
+ def("SpreadProperty"), // Used by Esprima
132
+ def("ObjectProperty"), // Babel 6
133
+ def("RestProperty") // Babel 6
134
+ );
135
+
136
+ // Split into RestProperty and SpreadProperty
137
+ def("ObjectPattern")
138
+ .bases("Pattern")
139
+ .build("properties")
140
+ .field("properties", [ObjectPatternProperty])
141
+ .field("decorators",
142
+ or([def("Decorator")], null),
143
+ defaults["null"]);
144
+
145
+ def("SpreadProperty")
146
+ .bases("Node")
147
+ .build("argument")
148
+ .field("argument", def("Expression"));
149
+
150
+ def("RestProperty")
151
+ .bases("Node")
152
+ .build("argument")
153
+ .field("argument", def("Expression"));
154
+
155
+ def("ForAwaitStatement")
156
+ .bases("Statement")
157
+ .build("left", "right", "body")
158
+ .field("left", or(
159
+ def("VariableDeclaration"),
160
+ def("Expression")))
161
+ .field("right", def("Expression"))
162
+ .field("body", def("Statement"));
163
+
164
+ // The callee node of a dynamic import(...) expression.
165
+ def("Import")
166
+ .bases("Expression")
167
+ .build();
168
+ };
package/def/babel6.js CHANGED
@@ -1,169 +1,4 @@
1
1
  module.exports = function (fork) {
2
- fork.use(require("./babel"));
2
+ fork.use(require("./babel6-core"));
3
3
  fork.use(require("./flow"));
4
-
5
- // var types = fork.types;
6
- var types = fork.use(require("../lib/types"));
7
- // var defaults = fork.shared.defaults;
8
- var defaults = fork.use(require("../lib/shared")).defaults;
9
- var def = types.Type.def;
10
- var or = types.Type.or;
11
-
12
- def("Directive")
13
- .bases("Node")
14
- .build("value")
15
- .field("value", def("DirectiveLiteral"));
16
-
17
- def("DirectiveLiteral")
18
- .bases("Node", "Expression")
19
- .build("value")
20
- .field("value", String, defaults["use strict"]);
21
-
22
- def("BlockStatement")
23
- .bases("Statement")
24
- .build("body")
25
- .field("body", [def("Statement")])
26
- .field("directives", [def("Directive")], defaults.emptyArray);
27
-
28
- def("Program")
29
- .bases("Node")
30
- .build("body")
31
- .field("body", [def("Statement")])
32
- .field("directives", [def("Directive")], defaults.emptyArray);
33
-
34
- // Split Literal
35
- def("StringLiteral")
36
- .bases("Literal")
37
- .build("value")
38
- .field("value", String);
39
-
40
- def("NumericLiteral")
41
- .bases("Literal")
42
- .build("value")
43
- .field("value", Number);
44
-
45
- def("NullLiteral")
46
- .bases("Literal")
47
- .build()
48
- .field("value", null, defaults["null"]);
49
-
50
- def("BooleanLiteral")
51
- .bases("Literal")
52
- .build("value")
53
- .field("value", Boolean);
54
-
55
- def("RegExpLiteral")
56
- .bases("Literal")
57
- .build("pattern", "flags")
58
- .field("pattern", String)
59
- .field("flags", String)
60
- .field("value", RegExp, function () {
61
- return new RegExp(this.pattern, this.flags);
62
- });
63
-
64
- var ObjectExpressionProperty = or(
65
- def("Property"),
66
- def("ObjectMethod"),
67
- def("ObjectProperty"),
68
- def("SpreadProperty")
69
- );
70
-
71
- // Split Property -> ObjectProperty and ObjectMethod
72
- def("ObjectExpression")
73
- .bases("Expression")
74
- .build("properties")
75
- .field("properties", [ObjectExpressionProperty]);
76
-
77
- // ObjectMethod hoist .value properties to own properties
78
- def("ObjectMethod")
79
- .bases("Node", "Function")
80
- .build("kind", "key", "params", "body", "computed")
81
- .field("kind", or("method", "get", "set"))
82
- .field("key", or(def("Literal"), def("Identifier"), def("Expression")))
83
- .field("params", [def("Pattern")])
84
- .field("body", def("BlockStatement"))
85
- .field("computed", Boolean, defaults["false"])
86
- .field("generator", Boolean, defaults["false"])
87
- .field("async", Boolean, defaults["false"])
88
- .field("decorators",
89
- or([def("Decorator")], null),
90
- defaults["null"]);
91
-
92
- def("ObjectProperty")
93
- .bases("Node")
94
- .build("key", "value")
95
- .field("key", or(def("Literal"), def("Identifier"), def("Expression")))
96
- .field("value", or(def("Expression"), def("Pattern")))
97
- .field("computed", Boolean, defaults["false"]);
98
-
99
- var ClassBodyElement = or(
100
- def("MethodDefinition"),
101
- def("VariableDeclarator"),
102
- def("ClassPropertyDefinition"),
103
- def("ClassProperty"),
104
- def("ClassMethod")
105
- );
106
-
107
- // MethodDefinition -> ClassMethod
108
- def("ClassBody")
109
- .bases("Declaration")
110
- .build("body")
111
- .field("body", [ClassBodyElement]);
112
-
113
- def("ClassMethod")
114
- .bases("Declaration", "Function")
115
- .build("kind", "key", "params", "body", "computed", "static")
116
- .field("kind", or("get", "set", "method", "constructor"))
117
- .field("key", or(def("Literal"), def("Identifier"), def("Expression")))
118
- .field("params", [def("Pattern")])
119
- .field("body", def("BlockStatement"))
120
- .field("computed", Boolean, defaults["false"])
121
- .field("static", Boolean, defaults["false"])
122
- .field("generator", Boolean, defaults["false"])
123
- .field("async", Boolean, defaults["false"])
124
- .field("decorators",
125
- or([def("Decorator")], null),
126
- defaults["null"]);
127
-
128
- var ObjectPatternProperty = or(
129
- def("Property"),
130
- def("PropertyPattern"),
131
- def("SpreadPropertyPattern"),
132
- def("SpreadProperty"), // Used by Esprima
133
- def("ObjectProperty"), // Babel 6
134
- def("RestProperty") // Babel 6
135
- );
136
-
137
- // Split into RestProperty and SpreadProperty
138
- def("ObjectPattern")
139
- .bases("Pattern")
140
- .build("properties")
141
- .field("properties", [ObjectPatternProperty])
142
- .field("decorators",
143
- or([def("Decorator")], null),
144
- defaults["null"]);
145
-
146
- def("SpreadProperty")
147
- .bases("Node")
148
- .build("argument")
149
- .field("argument", def("Expression"));
150
-
151
- def("RestProperty")
152
- .bases("Node")
153
- .build("argument")
154
- .field("argument", def("Expression"));
155
-
156
- def("ForAwaitStatement")
157
- .bases("Statement")
158
- .build("left", "right", "body")
159
- .field("left", or(
160
- def("VariableDeclaration"),
161
- def("Expression")))
162
- .field("right", def("Expression"))
163
- .field("body", def("Statement"));
164
-
165
- // The callee node of a dynamic import(...) expression.
166
- def("Import")
167
- .bases("Expression")
168
- .build();
169
4
  };
package/def/es6.js CHANGED
@@ -1,219 +1,228 @@
1
1
  module.exports = function (fork) {
2
- fork.use(require("./core"));
3
- var types = fork.use(require("../lib/types"));
4
- var def = types.Type.def;
5
- var or = types.Type.or;
6
- var defaults = fork.use(require("../lib/shared")).defaults;
7
-
8
- def("Function")
9
- .field("generator", Boolean, defaults["false"])
10
- .field("expression", Boolean, defaults["false"])
11
- .field("defaults", [or(def("Expression"), null)], defaults.emptyArray)
12
- // TODO This could be represented as a RestElement in .params.
13
- .field("rest", or(def("Identifier"), null), defaults["null"]);
14
-
15
- // The ESTree way of representing a ...rest parameter.
16
- def("RestElement")
17
- .bases("Pattern")
18
- .build("argument")
19
- .field("argument", def("Pattern"));
20
-
21
- def("SpreadElementPattern")
22
- .bases("Pattern")
23
- .build("argument")
24
- .field("argument", def("Pattern"));
25
-
26
- def("FunctionDeclaration")
27
- .build("id", "params", "body", "generator", "expression");
28
-
29
- def("FunctionExpression")
30
- .build("id", "params", "body", "generator", "expression");
31
-
32
- // The Parser API calls this ArrowExpression, but Esprima and all other
33
- // actual parsers use ArrowFunctionExpression.
34
- def("ArrowFunctionExpression")
35
- .bases("Function", "Expression")
36
- .build("params", "body", "expression")
37
- // The forced null value here is compatible with the overridden
38
- // definition of the "id" field in the Function interface.
39
- .field("id", null, defaults["null"])
40
- // Arrow function bodies are allowed to be expressions.
41
- .field("body", or(def("BlockStatement"), def("Expression")))
42
- // The current spec forbids arrow generators, so I have taken the
43
- // liberty of enforcing that. TODO Report this.
44
- .field("generator", false, defaults["false"]);
45
-
46
- def("YieldExpression")
47
- .bases("Expression")
48
- .build("argument", "delegate")
49
- .field("argument", or(def("Expression"), null))
50
- .field("delegate", Boolean, defaults["false"]);
51
-
52
- def("GeneratorExpression")
53
- .bases("Expression")
54
- .build("body", "blocks", "filter")
55
- .field("body", def("Expression"))
56
- .field("blocks", [def("ComprehensionBlock")])
57
- .field("filter", or(def("Expression"), null));
58
-
59
- def("ComprehensionExpression")
60
- .bases("Expression")
61
- .build("body", "blocks", "filter")
62
- .field("body", def("Expression"))
63
- .field("blocks", [def("ComprehensionBlock")])
64
- .field("filter", or(def("Expression"), null));
65
-
66
- def("ComprehensionBlock")
67
- .bases("Node")
68
- .build("left", "right", "each")
69
- .field("left", def("Pattern"))
70
- .field("right", def("Expression"))
71
- .field("each", Boolean);
72
-
73
- def("Property")
74
- .field("key", or(def("Literal"), def("Identifier"), def("Expression")))
75
- .field("value", or(def("Expression"), def("Pattern")))
76
- .field("method", Boolean, defaults["false"])
77
- .field("shorthand", Boolean, defaults["false"])
78
- .field("computed", Boolean, defaults["false"]);
79
-
80
- def("PropertyPattern")
81
- .bases("Pattern")
82
- .build("key", "pattern")
83
- .field("key", or(def("Literal"), def("Identifier"), def("Expression")))
84
- .field("pattern", def("Pattern"))
85
- .field("computed", Boolean, defaults["false"]);
86
-
87
- def("ObjectPattern")
88
- .bases("Pattern")
89
- .build("properties")
90
- .field("properties", [or(def("PropertyPattern"), def("Property"))]);
91
-
92
- def("ArrayPattern")
93
- .bases("Pattern")
94
- .build("elements")
95
- .field("elements", [or(def("Pattern"), null)]);
96
-
97
- def("MethodDefinition")
98
- .bases("Declaration")
99
- .build("kind", "key", "value", "static")
100
- .field("kind", or("constructor", "method", "get", "set"))
101
- .field("key", or(def("Literal"), def("Identifier"), def("Expression")))
102
- .field("value", def("Function"))
103
- .field("computed", Boolean, defaults["false"])
104
- .field("static", Boolean, defaults["false"]);
105
-
106
- def("SpreadElement")
107
- .bases("Node")
108
- .build("argument")
109
- .field("argument", def("Expression"));
110
-
111
- def("ArrayExpression")
112
- .field("elements", [or(
113
- def("Expression"),
114
- def("SpreadElement"),
115
- def("RestElement"),
116
- null
117
- )]);
118
-
119
- def("NewExpression")
120
- .field("arguments", [or(def("Expression"), def("SpreadElement"))]);
121
-
122
- def("CallExpression")
123
- .field("arguments", [or(def("Expression"), def("SpreadElement"))]);
124
-
125
- // Note: this node type is *not* an AssignmentExpression with a Pattern on
126
- // the left-hand side! The existing AssignmentExpression type already
127
- // supports destructuring assignments. AssignmentPattern nodes may appear
128
- // wherever a Pattern is allowed, and the right-hand side represents a
129
- // default value to be destructured against the left-hand side, if no
130
- // value is otherwise provided. For example: default parameter values.
131
- def("AssignmentPattern")
132
- .bases("Pattern")
133
- .build("left", "right")
134
- .field("left", def("Pattern"))
135
- .field("right", def("Expression"));
136
-
137
- var ClassBodyElement = or(
138
- def("MethodDefinition"),
139
- def("VariableDeclarator"),
140
- def("ClassPropertyDefinition"),
141
- def("ClassProperty")
142
- );
143
-
2
+ fork.use(require("./core"));
3
+ var types = fork.use(require("../lib/types"));
4
+ var def = types.Type.def;
5
+ var or = types.Type.or;
6
+ var defaults = fork.use(require("../lib/shared")).defaults;
7
+
8
+ def("Function")
9
+ .field("generator", Boolean, defaults["false"])
10
+ .field("expression", Boolean, defaults["false"])
11
+ .field("defaults", [or(def("Expression"), null)], defaults.emptyArray)
12
+ // TODO This could be represented as a RestElement in .params.
13
+ .field("rest", or(def("Identifier"), null), defaults["null"]);
14
+
15
+ // The ESTree way of representing a ...rest parameter.
16
+ def("RestElement")
17
+ .bases("Pattern")
18
+ .build("argument")
19
+ .field("argument", def("Pattern"));
20
+
21
+ def("SpreadElementPattern")
22
+ .bases("Pattern")
23
+ .build("argument")
24
+ .field("argument", def("Pattern"));
25
+
26
+ def("FunctionDeclaration")
27
+ .build("id", "params", "body", "generator", "expression");
28
+
29
+ def("FunctionExpression")
30
+ .build("id", "params", "body", "generator", "expression");
31
+
32
+ // The Parser API calls this ArrowExpression, but Esprima and all other
33
+ // actual parsers use ArrowFunctionExpression.
34
+ def("ArrowFunctionExpression")
35
+ .bases("Function", "Expression")
36
+ .build("params", "body", "expression")
37
+ // The forced null value here is compatible with the overridden
38
+ // definition of the "id" field in the Function interface.
39
+ .field("id", null, defaults["null"])
40
+ // Arrow function bodies are allowed to be expressions.
41
+ .field("body", or(def("BlockStatement"), def("Expression")))
42
+ // The current spec forbids arrow generators, so I have taken the
43
+ // liberty of enforcing that. TODO Report this.
44
+ .field("generator", false, defaults["false"]);
45
+
46
+ def("ForOfStatement")
47
+ .bases("Statement")
48
+ .build("left", "right", "body")
49
+ .field("left", or(
50
+ def("VariableDeclaration"),
51
+ def("Pattern")))
52
+ .field("right", def("Expression"))
53
+ .field("body", def("Statement"));
54
+
55
+ def("YieldExpression")
56
+ .bases("Expression")
57
+ .build("argument", "delegate")
58
+ .field("argument", or(def("Expression"), null))
59
+ .field("delegate", Boolean, defaults["false"]);
60
+
61
+ def("GeneratorExpression")
62
+ .bases("Expression")
63
+ .build("body", "blocks", "filter")
64
+ .field("body", def("Expression"))
65
+ .field("blocks", [def("ComprehensionBlock")])
66
+ .field("filter", or(def("Expression"), null));
67
+
68
+ def("ComprehensionExpression")
69
+ .bases("Expression")
70
+ .build("body", "blocks", "filter")
71
+ .field("body", def("Expression"))
72
+ .field("blocks", [def("ComprehensionBlock")])
73
+ .field("filter", or(def("Expression"), null));
74
+
75
+ def("ComprehensionBlock")
76
+ .bases("Node")
77
+ .build("left", "right", "each")
78
+ .field("left", def("Pattern"))
79
+ .field("right", def("Expression"))
80
+ .field("each", Boolean);
81
+
82
+ def("Property")
83
+ .field("key", or(def("Literal"), def("Identifier"), def("Expression")))
84
+ .field("value", or(def("Expression"), def("Pattern")))
85
+ .field("method", Boolean, defaults["false"])
86
+ .field("shorthand", Boolean, defaults["false"])
87
+ .field("computed", Boolean, defaults["false"]);
88
+
89
+ def("PropertyPattern")
90
+ .bases("Pattern")
91
+ .build("key", "pattern")
92
+ .field("key", or(def("Literal"), def("Identifier"), def("Expression")))
93
+ .field("pattern", def("Pattern"))
94
+ .field("computed", Boolean, defaults["false"]);
95
+
96
+ def("ObjectPattern")
97
+ .bases("Pattern")
98
+ .build("properties")
99
+ .field("properties", [or(def("PropertyPattern"), def("Property"))]);
100
+
101
+ def("ArrayPattern")
102
+ .bases("Pattern")
103
+ .build("elements")
104
+ .field("elements", [or(def("Pattern"), null)]);
105
+
106
+ def("MethodDefinition")
107
+ .bases("Declaration")
108
+ .build("kind", "key", "value", "static")
109
+ .field("kind", or("constructor", "method", "get", "set"))
110
+ .field("key", or(def("Literal"), def("Identifier"), def("Expression")))
111
+ .field("value", def("Function"))
112
+ .field("computed", Boolean, defaults["false"])
113
+ .field("static", Boolean, defaults["false"]);
114
+
115
+ def("SpreadElement")
116
+ .bases("Node")
117
+ .build("argument")
118
+ .field("argument", def("Expression"));
119
+
120
+ def("ArrayExpression")
121
+ .field("elements", [or(
122
+ def("Expression"),
123
+ def("SpreadElement"),
124
+ def("RestElement"),
125
+ null
126
+ )]);
127
+
128
+ def("NewExpression")
129
+ .field("arguments", [or(def("Expression"), def("SpreadElement"))]);
130
+
131
+ def("CallExpression")
132
+ .field("arguments", [or(def("Expression"), def("SpreadElement"))]);
133
+
134
+ // Note: this node type is *not* an AssignmentExpression with a Pattern on
135
+ // the left-hand side! The existing AssignmentExpression type already
136
+ // supports destructuring assignments. AssignmentPattern nodes may appear
137
+ // wherever a Pattern is allowed, and the right-hand side represents a
138
+ // default value to be destructured against the left-hand side, if no
139
+ // value is otherwise provided. For example: default parameter values.
140
+ def("AssignmentPattern")
141
+ .bases("Pattern")
142
+ .build("left", "right")
143
+ .field("left", def("Pattern"))
144
+ .field("right", def("Expression"));
145
+
146
+ var ClassBodyElement = or(
147
+ def("MethodDefinition"),
148
+ def("VariableDeclarator"),
149
+ def("ClassPropertyDefinition"),
144
150
  def("ClassProperty")
145
- .bases("Declaration")
146
- .build("key")
147
- .field("key", or(def("Literal"), def("Identifier"), def("Expression")))
148
- .field("computed", Boolean, defaults["false"]);
149
-
150
- def("ClassPropertyDefinition") // static property
151
- .bases("Declaration")
152
- .build("definition")
153
- // Yes, Virginia, circular definitions are permitted.
154
- .field("definition", ClassBodyElement);
155
-
156
- def("ClassBody")
157
- .bases("Declaration")
158
- .build("body")
159
- .field("body", [ClassBodyElement]);
160
-
161
- def("ClassDeclaration")
162
- .bases("Declaration")
163
- .build("id", "body", "superClass")
164
- .field("id", or(def("Identifier"), null))
165
- .field("body", def("ClassBody"))
166
- .field("superClass", or(def("Expression"), null), defaults["null"]);
167
-
168
- def("ClassExpression")
169
- .bases("Expression")
170
- .build("id", "body", "superClass")
171
- .field("id", or(def("Identifier"), null), defaults["null"])
172
- .field("body", def("ClassBody"))
173
- .field("superClass", or(def("Expression"), null), defaults["null"])
174
- .field("implements", [def("ClassImplements")], defaults.emptyArray);
175
-
176
- def("ClassImplements")
177
- .bases("Node")
178
- .build("id")
179
- .field("id", def("Identifier"))
180
- .field("superClass", or(def("Expression"), null), defaults["null"]);
181
-
182
- // Specifier and ModuleSpecifier are abstract non-standard types
183
- // introduced for definitional convenience.
184
- def("Specifier").bases("Node");
185
-
186
- // This supertype is shared/abused by both def/babel.js and
187
- // def/esprima.js. In the future, it will be possible to load only one set
188
- // of definitions appropriate for a given parser, but until then we must
189
- // rely on default functions to reconcile the conflicting AST formats.
190
- def("ModuleSpecifier")
191
- .bases("Specifier")
192
- // This local field is used by Babel/Acorn. It should not technically
193
- // be optional in the Babel/Acorn AST format, but it must be optional
194
- // in the Esprima AST format.
195
- .field("local", or(def("Identifier"), null), defaults["null"])
196
- // The id and name fields are used by Esprima. The id field should not
197
- // technically be optional in the Esprima AST format, but it must be
198
- // optional in the Babel/Acorn AST format.
199
- .field("id", or(def("Identifier"), null), defaults["null"])
200
- .field("name", or(def("Identifier"), null), defaults["null"]);
201
-
202
- def("TaggedTemplateExpression")
203
- .bases("Expression")
204
- .build("tag", "quasi")
205
- .field("tag", def("Expression"))
206
- .field("quasi", def("TemplateLiteral"));
207
-
208
- def("TemplateLiteral")
209
- .bases("Expression")
210
- .build("quasis", "expressions")
211
- .field("quasis", [def("TemplateElement")])
212
- .field("expressions", [def("Expression")]);
213
-
214
- def("TemplateElement")
215
- .bases("Node")
216
- .build("value", "tail")
217
- .field("value", {"cooked": String, "raw": String})
218
- .field("tail", Boolean);
151
+ );
152
+
153
+ def("ClassProperty")
154
+ .bases("Declaration")
155
+ .build("key")
156
+ .field("key", or(def("Literal"), def("Identifier"), def("Expression")))
157
+ .field("computed", Boolean, defaults["false"]);
158
+
159
+ def("ClassPropertyDefinition") // static property
160
+ .bases("Declaration")
161
+ .build("definition")
162
+ // Yes, Virginia, circular definitions are permitted.
163
+ .field("definition", ClassBodyElement);
164
+
165
+ def("ClassBody")
166
+ .bases("Declaration")
167
+ .build("body")
168
+ .field("body", [ClassBodyElement]);
169
+
170
+ def("ClassDeclaration")
171
+ .bases("Declaration")
172
+ .build("id", "body", "superClass")
173
+ .field("id", or(def("Identifier"), null))
174
+ .field("body", def("ClassBody"))
175
+ .field("superClass", or(def("Expression"), null), defaults["null"]);
176
+
177
+ def("ClassExpression")
178
+ .bases("Expression")
179
+ .build("id", "body", "superClass")
180
+ .field("id", or(def("Identifier"), null), defaults["null"])
181
+ .field("body", def("ClassBody"))
182
+ .field("superClass", or(def("Expression"), null), defaults["null"])
183
+ .field("implements", [def("ClassImplements")], defaults.emptyArray);
184
+
185
+ def("ClassImplements")
186
+ .bases("Node")
187
+ .build("id")
188
+ .field("id", def("Identifier"))
189
+ .field("superClass", or(def("Expression"), null), defaults["null"]);
190
+
191
+ // Specifier and ModuleSpecifier are abstract non-standard types
192
+ // introduced for definitional convenience.
193
+ def("Specifier").bases("Node");
194
+
195
+ // This supertype is shared/abused by both def/babel.js and
196
+ // def/esprima.js. In the future, it will be possible to load only one set
197
+ // of definitions appropriate for a given parser, but until then we must
198
+ // rely on default functions to reconcile the conflicting AST formats.
199
+ def("ModuleSpecifier")
200
+ .bases("Specifier")
201
+ // This local field is used by Babel/Acorn. It should not technically
202
+ // be optional in the Babel/Acorn AST format, but it must be optional
203
+ // in the Esprima AST format.
204
+ .field("local", or(def("Identifier"), null), defaults["null"])
205
+ // The id and name fields are used by Esprima. The id field should not
206
+ // technically be optional in the Esprima AST format, but it must be
207
+ // optional in the Babel/Acorn AST format.
208
+ .field("id", or(def("Identifier"), null), defaults["null"])
209
+ .field("name", or(def("Identifier"), null), defaults["null"]);
210
+
211
+ def("TaggedTemplateExpression")
212
+ .bases("Expression")
213
+ .build("tag", "quasi")
214
+ .field("tag", def("Expression"))
215
+ .field("quasi", def("TemplateLiteral"));
216
+
217
+ def("TemplateLiteral")
218
+ .bases("Expression")
219
+ .build("quasis", "expressions")
220
+ .field("quasis", [def("TemplateElement")])
221
+ .field("expressions", [def("Expression")]);
222
+
223
+ def("TemplateElement")
224
+ .bases("Node")
225
+ .build("value", "tail")
226
+ .field("value", {"cooked": String, "raw": String})
227
+ .field("tail", Boolean);
219
228
  };
package/def/flow.js CHANGED
@@ -189,6 +189,9 @@ module.exports = function (fork) {
189
189
  def("Identifier")
190
190
  .field("typeAnnotation", or(def("TypeAnnotation"), null), defaults["null"]);
191
191
 
192
+ def("ObjectPattern")
193
+ .field("typeAnnotation", or(def("TypeAnnotation"), null), defaults["null"]);
194
+
192
195
  def("TypeParameterDeclaration")
193
196
  .bases("Node")
194
197
  .build("params")
package/def/mozilla.js CHANGED
@@ -15,15 +15,6 @@ module.exports = function (fork) {
15
15
  .build("left", "right", "body", "each")
16
16
  .field("each", Boolean, defaults["false"]);
17
17
 
18
- def("ForOfStatement")
19
- .bases("Statement")
20
- .build("left", "right", "body")
21
- .field("left", or(
22
- def("VariableDeclaration"),
23
- def("Expression")))
24
- .field("right", def("Expression"))
25
- .field("body", def("Statement"));
26
-
27
18
  def("LetStatement")
28
19
  .bases("Statement")
29
20
  .build("head", "body")
package/package.json CHANGED
@@ -18,7 +18,7 @@
18
18
  "transformation",
19
19
  "syntax"
20
20
  ],
21
- "version": "0.9.7",
21
+ "version": "0.9.11",
22
22
  "homepage": "http://github.com/benjamn/ast-types",
23
23
  "repository": {
24
24
  "type": "git",