|
|
@@ -0,0 +1,693 @@
|
|
|
+"use strict";
|
|
|
+
|
|
|
+exports.__esModule = true;
|
|
|
+exports.patternLikeCommon = exports.functionDeclarationCommon = exports.functionTypeAnnotationCommon = exports.functionCommon = void 0;
|
|
|
+
|
|
|
+var _isValidIdentifier = _interopRequireDefault(require("../validators/isValidIdentifier"));
|
|
|
+
|
|
|
+var _constants = require("../constants");
|
|
|
+
|
|
|
+var _utils = _interopRequireWildcard(require("./utils"));
|
|
|
+
|
|
|
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }
|
|
|
+
|
|
|
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
+
|
|
|
+(0, _utils.default)("ArrayExpression", {
|
|
|
+ fields: {
|
|
|
+ elements: {
|
|
|
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeOrValueType)("null", "Expression", "SpreadElement"))),
|
|
|
+ default: []
|
|
|
+ }
|
|
|
+ },
|
|
|
+ visitor: ["elements"],
|
|
|
+ aliases: ["Expression"]
|
|
|
+});
|
|
|
+(0, _utils.default)("AssignmentExpression", {
|
|
|
+ fields: {
|
|
|
+ operator: {
|
|
|
+ validate: (0, _utils.assertValueType)("string")
|
|
|
+ },
|
|
|
+ left: {
|
|
|
+ validate: (0, _utils.assertNodeType)("LVal")
|
|
|
+ },
|
|
|
+ right: {
|
|
|
+ validate: (0, _utils.assertNodeType)("Expression")
|
|
|
+ }
|
|
|
+ },
|
|
|
+ builder: ["operator", "left", "right"],
|
|
|
+ visitor: ["left", "right"],
|
|
|
+ aliases: ["Expression"]
|
|
|
+});
|
|
|
+(0, _utils.default)("BinaryExpression", {
|
|
|
+ builder: ["operator", "left", "right"],
|
|
|
+ fields: {
|
|
|
+ operator: {
|
|
|
+ validate: _utils.assertOneOf.apply(void 0, _constants.BINARY_OPERATORS)
|
|
|
+ },
|
|
|
+ left: {
|
|
|
+ validate: (0, _utils.assertNodeType)("Expression")
|
|
|
+ },
|
|
|
+ right: {
|
|
|
+ validate: (0, _utils.assertNodeType)("Expression")
|
|
|
+ }
|
|
|
+ },
|
|
|
+ visitor: ["left", "right"],
|
|
|
+ aliases: ["Binary", "Expression"]
|
|
|
+});
|
|
|
+(0, _utils.default)("Directive", {
|
|
|
+ visitor: ["value"],
|
|
|
+ fields: {
|
|
|
+ value: {
|
|
|
+ validate: (0, _utils.assertNodeType)("DirectiveLiteral")
|
|
|
+ }
|
|
|
+ }
|
|
|
+});
|
|
|
+(0, _utils.default)("DirectiveLiteral", {
|
|
|
+ builder: ["value"],
|
|
|
+ fields: {
|
|
|
+ value: {
|
|
|
+ validate: (0, _utils.assertValueType)("string")
|
|
|
+ }
|
|
|
+ }
|
|
|
+});
|
|
|
+(0, _utils.default)("BlockStatement", {
|
|
|
+ builder: ["body", "directives"],
|
|
|
+ visitor: ["directives", "body"],
|
|
|
+ fields: {
|
|
|
+ directives: {
|
|
|
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Directive"))),
|
|
|
+ default: []
|
|
|
+ },
|
|
|
+ body: {
|
|
|
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Statement")))
|
|
|
+ }
|
|
|
+ },
|
|
|
+ aliases: ["Scopable", "BlockParent", "Block", "Statement"]
|
|
|
+});
|
|
|
+(0, _utils.default)("BreakStatement", {
|
|
|
+ visitor: ["label"],
|
|
|
+ fields: {
|
|
|
+ label: {
|
|
|
+ validate: (0, _utils.assertNodeType)("Identifier"),
|
|
|
+ optional: true
|
|
|
+ }
|
|
|
+ },
|
|
|
+ aliases: ["Statement", "Terminatorless", "CompletionStatement"]
|
|
|
+});
|
|
|
+(0, _utils.default)("CallExpression", {
|
|
|
+ visitor: ["callee", "arguments", "typeParameters"],
|
|
|
+ builder: ["callee", "arguments"],
|
|
|
+ aliases: ["Expression"],
|
|
|
+ fields: {
|
|
|
+ callee: {
|
|
|
+ validate: (0, _utils.assertNodeType)("Expression")
|
|
|
+ },
|
|
|
+ arguments: {
|
|
|
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Expression", "SpreadElement", "JSXNamespacedName")))
|
|
|
+ },
|
|
|
+ optional: {
|
|
|
+ validate: (0, _utils.assertOneOf)(true, false),
|
|
|
+ optional: true
|
|
|
+ },
|
|
|
+ typeParameters: {
|
|
|
+ validate: (0, _utils.assertNodeType)("TypeParameterInstantiation", "TSTypeParameterInstantiation"),
|
|
|
+ optional: true
|
|
|
+ }
|
|
|
+ }
|
|
|
+});
|
|
|
+(0, _utils.default)("CatchClause", {
|
|
|
+ visitor: ["param", "body"],
|
|
|
+ fields: {
|
|
|
+ param: {
|
|
|
+ validate: (0, _utils.assertNodeType)("Identifier"),
|
|
|
+ optional: true
|
|
|
+ },
|
|
|
+ body: {
|
|
|
+ validate: (0, _utils.assertNodeType)("BlockStatement")
|
|
|
+ }
|
|
|
+ },
|
|
|
+ aliases: ["Scopable", "BlockParent"]
|
|
|
+});
|
|
|
+(0, _utils.default)("ConditionalExpression", {
|
|
|
+ visitor: ["test", "consequent", "alternate"],
|
|
|
+ fields: {
|
|
|
+ test: {
|
|
|
+ validate: (0, _utils.assertNodeType)("Expression")
|
|
|
+ },
|
|
|
+ consequent: {
|
|
|
+ validate: (0, _utils.assertNodeType)("Expression")
|
|
|
+ },
|
|
|
+ alternate: {
|
|
|
+ validate: (0, _utils.assertNodeType)("Expression")
|
|
|
+ }
|
|
|
+ },
|
|
|
+ aliases: ["Expression", "Conditional"]
|
|
|
+});
|
|
|
+(0, _utils.default)("ContinueStatement", {
|
|
|
+ visitor: ["label"],
|
|
|
+ fields: {
|
|
|
+ label: {
|
|
|
+ validate: (0, _utils.assertNodeType)("Identifier"),
|
|
|
+ optional: true
|
|
|
+ }
|
|
|
+ },
|
|
|
+ aliases: ["Statement", "Terminatorless", "CompletionStatement"]
|
|
|
+});
|
|
|
+(0, _utils.default)("DebuggerStatement", {
|
|
|
+ aliases: ["Statement"]
|
|
|
+});
|
|
|
+(0, _utils.default)("DoWhileStatement", {
|
|
|
+ visitor: ["test", "body"],
|
|
|
+ fields: {
|
|
|
+ test: {
|
|
|
+ validate: (0, _utils.assertNodeType)("Expression")
|
|
|
+ },
|
|
|
+ body: {
|
|
|
+ validate: (0, _utils.assertNodeType)("Statement")
|
|
|
+ }
|
|
|
+ },
|
|
|
+ aliases: ["Statement", "BlockParent", "Loop", "While", "Scopable"]
|
|
|
+});
|
|
|
+(0, _utils.default)("EmptyStatement", {
|
|
|
+ aliases: ["Statement"]
|
|
|
+});
|
|
|
+(0, _utils.default)("ExpressionStatement", {
|
|
|
+ visitor: ["expression"],
|
|
|
+ fields: {
|
|
|
+ expression: {
|
|
|
+ validate: (0, _utils.assertNodeType)("Expression")
|
|
|
+ }
|
|
|
+ },
|
|
|
+ aliases: ["Statement", "ExpressionWrapper"]
|
|
|
+});
|
|
|
+(0, _utils.default)("File", {
|
|
|
+ builder: ["program", "comments", "tokens"],
|
|
|
+ visitor: ["program"],
|
|
|
+ fields: {
|
|
|
+ program: {
|
|
|
+ validate: (0, _utils.assertNodeType)("Program")
|
|
|
+ }
|
|
|
+ }
|
|
|
+});
|
|
|
+(0, _utils.default)("ForInStatement", {
|
|
|
+ visitor: ["left", "right", "body"],
|
|
|
+ aliases: ["Scopable", "Statement", "For", "BlockParent", "Loop", "ForXStatement"],
|
|
|
+ fields: {
|
|
|
+ left: {
|
|
|
+ validate: (0, _utils.assertNodeType)("VariableDeclaration", "LVal")
|
|
|
+ },
|
|
|
+ right: {
|
|
|
+ validate: (0, _utils.assertNodeType)("Expression")
|
|
|
+ },
|
|
|
+ body: {
|
|
|
+ validate: (0, _utils.assertNodeType)("Statement")
|
|
|
+ }
|
|
|
+ }
|
|
|
+});
|
|
|
+(0, _utils.default)("ForStatement", {
|
|
|
+ visitor: ["init", "test", "update", "body"],
|
|
|
+ aliases: ["Scopable", "Statement", "For", "BlockParent", "Loop"],
|
|
|
+ fields: {
|
|
|
+ init: {
|
|
|
+ validate: (0, _utils.assertNodeType)("VariableDeclaration", "Expression"),
|
|
|
+ optional: true
|
|
|
+ },
|
|
|
+ test: {
|
|
|
+ validate: (0, _utils.assertNodeType)("Expression"),
|
|
|
+ optional: true
|
|
|
+ },
|
|
|
+ update: {
|
|
|
+ validate: (0, _utils.assertNodeType)("Expression"),
|
|
|
+ optional: true
|
|
|
+ },
|
|
|
+ body: {
|
|
|
+ validate: (0, _utils.assertNodeType)("Statement")
|
|
|
+ }
|
|
|
+ }
|
|
|
+});
|
|
|
+var functionCommon = {
|
|
|
+ params: {
|
|
|
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("LVal")))
|
|
|
+ },
|
|
|
+ generator: {
|
|
|
+ default: false,
|
|
|
+ validate: (0, _utils.assertValueType)("boolean")
|
|
|
+ },
|
|
|
+ async: {
|
|
|
+ validate: (0, _utils.assertValueType)("boolean"),
|
|
|
+ default: false
|
|
|
+ }
|
|
|
+};
|
|
|
+exports.functionCommon = functionCommon;
|
|
|
+var functionTypeAnnotationCommon = {
|
|
|
+ returnType: {
|
|
|
+ validate: (0, _utils.assertNodeType)("TypeAnnotation", "TSTypeAnnotation", "Noop"),
|
|
|
+ optional: true
|
|
|
+ },
|
|
|
+ typeParameters: {
|
|
|
+ validate: (0, _utils.assertNodeType)("TypeParameterDeclaration", "TSTypeParameterDeclaration", "Noop"),
|
|
|
+ optional: true
|
|
|
+ }
|
|
|
+};
|
|
|
+exports.functionTypeAnnotationCommon = functionTypeAnnotationCommon;
|
|
|
+var functionDeclarationCommon = Object.assign({}, functionCommon, {
|
|
|
+ declare: {
|
|
|
+ validate: (0, _utils.assertValueType)("boolean"),
|
|
|
+ optional: true
|
|
|
+ },
|
|
|
+ id: {
|
|
|
+ validate: (0, _utils.assertNodeType)("Identifier"),
|
|
|
+ optional: true
|
|
|
+ }
|
|
|
+});
|
|
|
+exports.functionDeclarationCommon = functionDeclarationCommon;
|
|
|
+(0, _utils.default)("FunctionDeclaration", {
|
|
|
+ builder: ["id", "params", "body", "generator", "async"],
|
|
|
+ visitor: ["id", "params", "body", "returnType", "typeParameters"],
|
|
|
+ fields: Object.assign({}, functionDeclarationCommon, functionTypeAnnotationCommon, {
|
|
|
+ body: {
|
|
|
+ validate: (0, _utils.assertNodeType)("BlockStatement")
|
|
|
+ }
|
|
|
+ }),
|
|
|
+ aliases: ["Scopable", "Function", "BlockParent", "FunctionParent", "Statement", "Pureish", "Declaration"]
|
|
|
+});
|
|
|
+(0, _utils.default)("FunctionExpression", {
|
|
|
+ inherits: "FunctionDeclaration",
|
|
|
+ aliases: ["Scopable", "Function", "BlockParent", "FunctionParent", "Expression", "Pureish"],
|
|
|
+ fields: Object.assign({}, functionCommon, functionTypeAnnotationCommon, {
|
|
|
+ id: {
|
|
|
+ validate: (0, _utils.assertNodeType)("Identifier"),
|
|
|
+ optional: true
|
|
|
+ },
|
|
|
+ body: {
|
|
|
+ validate: (0, _utils.assertNodeType)("BlockStatement")
|
|
|
+ }
|
|
|
+ })
|
|
|
+});
|
|
|
+var patternLikeCommon = {
|
|
|
+ typeAnnotation: {
|
|
|
+ validate: (0, _utils.assertNodeType)("TypeAnnotation", "TSTypeAnnotation", "Noop"),
|
|
|
+ optional: true
|
|
|
+ },
|
|
|
+ decorators: {
|
|
|
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Decorator")))
|
|
|
+ }
|
|
|
+};
|
|
|
+exports.patternLikeCommon = patternLikeCommon;
|
|
|
+(0, _utils.default)("Identifier", {
|
|
|
+ builder: ["name"],
|
|
|
+ visitor: ["typeAnnotation"],
|
|
|
+ aliases: ["Expression", "PatternLike", "LVal", "TSEntityName"],
|
|
|
+ fields: Object.assign({}, patternLikeCommon, {
|
|
|
+ name: {
|
|
|
+ validate: function validate(node, key, val) {
|
|
|
+ if (!(0, _isValidIdentifier.default)(val)) {}
|
|
|
+ }
|
|
|
+ },
|
|
|
+ optional: {
|
|
|
+ validate: (0, _utils.assertValueType)("boolean"),
|
|
|
+ optional: true
|
|
|
+ }
|
|
|
+ })
|
|
|
+});
|
|
|
+(0, _utils.default)("IfStatement", {
|
|
|
+ visitor: ["test", "consequent", "alternate"],
|
|
|
+ aliases: ["Statement", "Conditional"],
|
|
|
+ fields: {
|
|
|
+ test: {
|
|
|
+ validate: (0, _utils.assertNodeType)("Expression")
|
|
|
+ },
|
|
|
+ consequent: {
|
|
|
+ validate: (0, _utils.assertNodeType)("Statement")
|
|
|
+ },
|
|
|
+ alternate: {
|
|
|
+ optional: true,
|
|
|
+ validate: (0, _utils.assertNodeType)("Statement")
|
|
|
+ }
|
|
|
+ }
|
|
|
+});
|
|
|
+(0, _utils.default)("LabeledStatement", {
|
|
|
+ visitor: ["label", "body"],
|
|
|
+ aliases: ["Statement"],
|
|
|
+ fields: {
|
|
|
+ label: {
|
|
|
+ validate: (0, _utils.assertNodeType)("Identifier")
|
|
|
+ },
|
|
|
+ body: {
|
|
|
+ validate: (0, _utils.assertNodeType)("Statement")
|
|
|
+ }
|
|
|
+ }
|
|
|
+});
|
|
|
+(0, _utils.default)("StringLiteral", {
|
|
|
+ builder: ["value"],
|
|
|
+ fields: {
|
|
|
+ value: {
|
|
|
+ validate: (0, _utils.assertValueType)("string")
|
|
|
+ }
|
|
|
+ },
|
|
|
+ aliases: ["Expression", "Pureish", "Literal", "Immutable"]
|
|
|
+});
|
|
|
+(0, _utils.default)("NumericLiteral", {
|
|
|
+ builder: ["value"],
|
|
|
+ deprecatedAlias: "NumberLiteral",
|
|
|
+ fields: {
|
|
|
+ value: {
|
|
|
+ validate: (0, _utils.assertValueType)("number")
|
|
|
+ }
|
|
|
+ },
|
|
|
+ aliases: ["Expression", "Pureish", "Literal", "Immutable"]
|
|
|
+});
|
|
|
+(0, _utils.default)("NullLiteral", {
|
|
|
+ aliases: ["Expression", "Pureish", "Literal", "Immutable"]
|
|
|
+});
|
|
|
+(0, _utils.default)("BooleanLiteral", {
|
|
|
+ builder: ["value"],
|
|
|
+ fields: {
|
|
|
+ value: {
|
|
|
+ validate: (0, _utils.assertValueType)("boolean")
|
|
|
+ }
|
|
|
+ },
|
|
|
+ aliases: ["Expression", "Pureish", "Literal", "Immutable"]
|
|
|
+});
|
|
|
+(0, _utils.default)("RegExpLiteral", {
|
|
|
+ builder: ["pattern", "flags"],
|
|
|
+ deprecatedAlias: "RegexLiteral",
|
|
|
+ aliases: ["Expression", "Literal"],
|
|
|
+ fields: {
|
|
|
+ pattern: {
|
|
|
+ validate: (0, _utils.assertValueType)("string")
|
|
|
+ },
|
|
|
+ flags: {
|
|
|
+ validate: (0, _utils.assertValueType)("string"),
|
|
|
+ default: ""
|
|
|
+ }
|
|
|
+ }
|
|
|
+});
|
|
|
+(0, _utils.default)("LogicalExpression", {
|
|
|
+ builder: ["operator", "left", "right"],
|
|
|
+ visitor: ["left", "right"],
|
|
|
+ aliases: ["Binary", "Expression"],
|
|
|
+ fields: {
|
|
|
+ operator: {
|
|
|
+ validate: _utils.assertOneOf.apply(void 0, _constants.LOGICAL_OPERATORS)
|
|
|
+ },
|
|
|
+ left: {
|
|
|
+ validate: (0, _utils.assertNodeType)("Expression")
|
|
|
+ },
|
|
|
+ right: {
|
|
|
+ validate: (0, _utils.assertNodeType)("Expression")
|
|
|
+ }
|
|
|
+ }
|
|
|
+});
|
|
|
+(0, _utils.default)("MemberExpression", {
|
|
|
+ builder: ["object", "property", "computed", "optional"],
|
|
|
+ visitor: ["object", "property"],
|
|
|
+ aliases: ["Expression", "LVal"],
|
|
|
+ fields: {
|
|
|
+ object: {
|
|
|
+ validate: (0, _utils.assertNodeType)("Expression")
|
|
|
+ },
|
|
|
+ property: {
|
|
|
+ validate: function () {
|
|
|
+ var normal = (0, _utils.assertNodeType)("Identifier");
|
|
|
+ var computed = (0, _utils.assertNodeType)("Expression");
|
|
|
+ return function (node, key, val) {
|
|
|
+ var validator = node.computed ? computed : normal;
|
|
|
+ validator(node, key, val);
|
|
|
+ };
|
|
|
+ }()
|
|
|
+ },
|
|
|
+ computed: {
|
|
|
+ default: false
|
|
|
+ },
|
|
|
+ optional: {
|
|
|
+ validate: (0, _utils.assertOneOf)(true, false),
|
|
|
+ optional: true
|
|
|
+ }
|
|
|
+ }
|
|
|
+});
|
|
|
+(0, _utils.default)("NewExpression", {
|
|
|
+ inherits: "CallExpression"
|
|
|
+});
|
|
|
+(0, _utils.default)("Program", {
|
|
|
+ visitor: ["directives", "body"],
|
|
|
+ builder: ["body", "directives", "sourceType"],
|
|
|
+ fields: {
|
|
|
+ sourceFile: {
|
|
|
+ validate: (0, _utils.assertValueType)("string")
|
|
|
+ },
|
|
|
+ sourceType: {
|
|
|
+ validate: (0, _utils.assertOneOf)("script", "module"),
|
|
|
+ default: "script"
|
|
|
+ },
|
|
|
+ directives: {
|
|
|
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Directive"))),
|
|
|
+ default: []
|
|
|
+ },
|
|
|
+ body: {
|
|
|
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Statement")))
|
|
|
+ }
|
|
|
+ },
|
|
|
+ aliases: ["Scopable", "BlockParent", "Block"]
|
|
|
+});
|
|
|
+(0, _utils.default)("ObjectExpression", {
|
|
|
+ visitor: ["properties"],
|
|
|
+ aliases: ["Expression"],
|
|
|
+ fields: {
|
|
|
+ properties: {
|
|
|
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("ObjectMethod", "ObjectProperty", "SpreadElement")))
|
|
|
+ }
|
|
|
+ }
|
|
|
+});
|
|
|
+(0, _utils.default)("ObjectMethod", {
|
|
|
+ builder: ["kind", "key", "params", "body", "computed"],
|
|
|
+ fields: Object.assign({}, functionCommon, functionTypeAnnotationCommon, {
|
|
|
+ kind: {
|
|
|
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("string"), (0, _utils.assertOneOf)("method", "get", "set")),
|
|
|
+ default: "method"
|
|
|
+ },
|
|
|
+ computed: {
|
|
|
+ validate: (0, _utils.assertValueType)("boolean"),
|
|
|
+ default: false
|
|
|
+ },
|
|
|
+ key: {
|
|
|
+ validate: function () {
|
|
|
+ var normal = (0, _utils.assertNodeType)("Identifier", "StringLiteral", "NumericLiteral");
|
|
|
+ var computed = (0, _utils.assertNodeType)("Expression");
|
|
|
+ return function (node, key, val) {
|
|
|
+ var validator = node.computed ? computed : normal;
|
|
|
+ validator(node, key, val);
|
|
|
+ };
|
|
|
+ }()
|
|
|
+ },
|
|
|
+ decorators: {
|
|
|
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Decorator")))
|
|
|
+ },
|
|
|
+ body: {
|
|
|
+ validate: (0, _utils.assertNodeType)("BlockStatement")
|
|
|
+ }
|
|
|
+ }),
|
|
|
+ visitor: ["key", "params", "body", "decorators", "returnType", "typeParameters"],
|
|
|
+ aliases: ["UserWhitespacable", "Function", "Scopable", "BlockParent", "FunctionParent", "Method", "ObjectMember"]
|
|
|
+});
|
|
|
+(0, _utils.default)("ObjectProperty", {
|
|
|
+ builder: ["key", "value", "computed", "shorthand", "decorators"],
|
|
|
+ fields: {
|
|
|
+ computed: {
|
|
|
+ validate: (0, _utils.assertValueType)("boolean"),
|
|
|
+ default: false
|
|
|
+ },
|
|
|
+ key: {
|
|
|
+ validate: function () {
|
|
|
+ var normal = (0, _utils.assertNodeType)("Identifier", "StringLiteral", "NumericLiteral");
|
|
|
+ var computed = (0, _utils.assertNodeType)("Expression");
|
|
|
+ return function (node, key, val) {
|
|
|
+ var validator = node.computed ? computed : normal;
|
|
|
+ validator(node, key, val);
|
|
|
+ };
|
|
|
+ }()
|
|
|
+ },
|
|
|
+ value: {
|
|
|
+ validate: (0, _utils.assertNodeType)("Expression", "PatternLike")
|
|
|
+ },
|
|
|
+ shorthand: {
|
|
|
+ validate: (0, _utils.assertValueType)("boolean"),
|
|
|
+ default: false
|
|
|
+ },
|
|
|
+ decorators: {
|
|
|
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Decorator"))),
|
|
|
+ optional: true
|
|
|
+ }
|
|
|
+ },
|
|
|
+ visitor: ["key", "value", "decorators"],
|
|
|
+ aliases: ["UserWhitespacable", "Property", "ObjectMember"]
|
|
|
+});
|
|
|
+(0, _utils.default)("RestElement", {
|
|
|
+ visitor: ["argument", "typeAnnotation"],
|
|
|
+ builder: ["argument"],
|
|
|
+ aliases: ["LVal", "PatternLike"],
|
|
|
+ deprecatedAlias: "RestProperty",
|
|
|
+ fields: Object.assign({}, patternLikeCommon, {
|
|
|
+ argument: {
|
|
|
+ validate: (0, _utils.assertNodeType)("LVal")
|
|
|
+ }
|
|
|
+ })
|
|
|
+});
|
|
|
+(0, _utils.default)("ReturnStatement", {
|
|
|
+ visitor: ["argument"],
|
|
|
+ aliases: ["Statement", "Terminatorless", "CompletionStatement"],
|
|
|
+ fields: {
|
|
|
+ argument: {
|
|
|
+ validate: (0, _utils.assertNodeType)("Expression"),
|
|
|
+ optional: true
|
|
|
+ }
|
|
|
+ }
|
|
|
+});
|
|
|
+(0, _utils.default)("SequenceExpression", {
|
|
|
+ visitor: ["expressions"],
|
|
|
+ fields: {
|
|
|
+ expressions: {
|
|
|
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Expression")))
|
|
|
+ }
|
|
|
+ },
|
|
|
+ aliases: ["Expression"]
|
|
|
+});
|
|
|
+(0, _utils.default)("SwitchCase", {
|
|
|
+ visitor: ["test", "consequent"],
|
|
|
+ fields: {
|
|
|
+ test: {
|
|
|
+ validate: (0, _utils.assertNodeType)("Expression"),
|
|
|
+ optional: true
|
|
|
+ },
|
|
|
+ consequent: {
|
|
|
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Statement")))
|
|
|
+ }
|
|
|
+ }
|
|
|
+});
|
|
|
+(0, _utils.default)("SwitchStatement", {
|
|
|
+ visitor: ["discriminant", "cases"],
|
|
|
+ aliases: ["Statement", "BlockParent", "Scopable"],
|
|
|
+ fields: {
|
|
|
+ discriminant: {
|
|
|
+ validate: (0, _utils.assertNodeType)("Expression")
|
|
|
+ },
|
|
|
+ cases: {
|
|
|
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("SwitchCase")))
|
|
|
+ }
|
|
|
+ }
|
|
|
+});
|
|
|
+(0, _utils.default)("ThisExpression", {
|
|
|
+ aliases: ["Expression"]
|
|
|
+});
|
|
|
+(0, _utils.default)("ThrowStatement", {
|
|
|
+ visitor: ["argument"],
|
|
|
+ aliases: ["Statement", "Terminatorless", "CompletionStatement"],
|
|
|
+ fields: {
|
|
|
+ argument: {
|
|
|
+ validate: (0, _utils.assertNodeType)("Expression")
|
|
|
+ }
|
|
|
+ }
|
|
|
+});
|
|
|
+(0, _utils.default)("TryStatement", {
|
|
|
+ visitor: ["block", "handler", "finalizer"],
|
|
|
+ aliases: ["Statement"],
|
|
|
+ fields: {
|
|
|
+ block: {
|
|
|
+ validate: (0, _utils.assertNodeType)("BlockStatement")
|
|
|
+ },
|
|
|
+ handler: {
|
|
|
+ optional: true,
|
|
|
+ validate: (0, _utils.assertNodeType)("CatchClause")
|
|
|
+ },
|
|
|
+ finalizer: {
|
|
|
+ optional: true,
|
|
|
+ validate: (0, _utils.assertNodeType)("BlockStatement")
|
|
|
+ }
|
|
|
+ }
|
|
|
+});
|
|
|
+(0, _utils.default)("UnaryExpression", {
|
|
|
+ builder: ["operator", "argument", "prefix"],
|
|
|
+ fields: {
|
|
|
+ prefix: {
|
|
|
+ default: true
|
|
|
+ },
|
|
|
+ argument: {
|
|
|
+ validate: (0, _utils.assertNodeType)("Expression")
|
|
|
+ },
|
|
|
+ operator: {
|
|
|
+ validate: _utils.assertOneOf.apply(void 0, _constants.UNARY_OPERATORS)
|
|
|
+ }
|
|
|
+ },
|
|
|
+ visitor: ["argument"],
|
|
|
+ aliases: ["UnaryLike", "Expression"]
|
|
|
+});
|
|
|
+(0, _utils.default)("UpdateExpression", {
|
|
|
+ builder: ["operator", "argument", "prefix"],
|
|
|
+ fields: {
|
|
|
+ prefix: {
|
|
|
+ default: false
|
|
|
+ },
|
|
|
+ argument: {
|
|
|
+ validate: (0, _utils.assertNodeType)("Expression")
|
|
|
+ },
|
|
|
+ operator: {
|
|
|
+ validate: _utils.assertOneOf.apply(void 0, _constants.UPDATE_OPERATORS)
|
|
|
+ }
|
|
|
+ },
|
|
|
+ visitor: ["argument"],
|
|
|
+ aliases: ["Expression"]
|
|
|
+});
|
|
|
+(0, _utils.default)("VariableDeclaration", {
|
|
|
+ builder: ["kind", "declarations"],
|
|
|
+ visitor: ["declarations"],
|
|
|
+ aliases: ["Statement", "Declaration"],
|
|
|
+ fields: {
|
|
|
+ declare: {
|
|
|
+ validate: (0, _utils.assertValueType)("boolean"),
|
|
|
+ optional: true
|
|
|
+ },
|
|
|
+ kind: {
|
|
|
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("string"), (0, _utils.assertOneOf)("var", "let", "const"))
|
|
|
+ },
|
|
|
+ declarations: {
|
|
|
+ validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("VariableDeclarator")))
|
|
|
+ }
|
|
|
+ }
|
|
|
+});
|
|
|
+(0, _utils.default)("VariableDeclarator", {
|
|
|
+ visitor: ["id", "init"],
|
|
|
+ fields: {
|
|
|
+ id: {
|
|
|
+ validate: (0, _utils.assertNodeType)("LVal")
|
|
|
+ },
|
|
|
+ init: {
|
|
|
+ optional: true,
|
|
|
+ validate: (0, _utils.assertNodeType)("Expression")
|
|
|
+ }
|
|
|
+ }
|
|
|
+});
|
|
|
+(0, _utils.default)("WhileStatement", {
|
|
|
+ visitor: ["test", "body"],
|
|
|
+ aliases: ["Statement", "BlockParent", "Loop", "While", "Scopable"],
|
|
|
+ fields: {
|
|
|
+ test: {
|
|
|
+ validate: (0, _utils.assertNodeType)("Expression")
|
|
|
+ },
|
|
|
+ body: {
|
|
|
+ validate: (0, _utils.assertNodeType)("BlockStatement", "Statement")
|
|
|
+ }
|
|
|
+ }
|
|
|
+});
|
|
|
+(0, _utils.default)("WithStatement", {
|
|
|
+ visitor: ["object", "body"],
|
|
|
+ aliases: ["Statement"],
|
|
|
+ fields: {
|
|
|
+ object: {
|
|
|
+ validate: (0, _utils.assertNodeType)("Expression")
|
|
|
+ },
|
|
|
+ body: {
|
|
|
+ validate: (0, _utils.assertNodeType)("BlockStatement", "Statement")
|
|
|
+ }
|
|
|
+ }
|
|
|
+});
|