| "use strict"; |
| |
| var _utils = require("./utils"); |
| |
| const defineType = (0, _utils.defineAliasedType)("Flow"); |
| |
| const defineInterfaceishType = (name, typeParameterType = "TypeParameterDeclaration") => { |
| defineType(name, { |
| builder: ["id", "typeParameters", "extends", "body"], |
| visitor: ["id", "typeParameters", "extends", "mixins", "implements", "body"], |
| aliases: ["FlowDeclaration", "Statement", "Declaration"], |
| fields: { |
| id: (0, _utils.validateType)("Identifier"), |
| typeParameters: (0, _utils.validateOptionalType)(typeParameterType), |
| extends: (0, _utils.validateOptional)((0, _utils.arrayOfType)("InterfaceExtends")), |
| mixins: (0, _utils.validateOptional)((0, _utils.arrayOfType)("InterfaceExtends")), |
| implements: (0, _utils.validateOptional)((0, _utils.arrayOfType)("ClassImplements")), |
| body: (0, _utils.validateType)("ObjectTypeAnnotation") |
| } |
| }); |
| }; |
| |
| defineType("AnyTypeAnnotation", { |
| aliases: ["FlowType", "FlowBaseAnnotation"] |
| }); |
| defineType("ArrayTypeAnnotation", { |
| visitor: ["elementType"], |
| aliases: ["FlowType"], |
| fields: { |
| elementType: (0, _utils.validateType)("FlowType") |
| } |
| }); |
| defineType("BooleanTypeAnnotation", { |
| aliases: ["FlowType", "FlowBaseAnnotation"] |
| }); |
| defineType("BooleanLiteralTypeAnnotation", { |
| builder: ["value"], |
| aliases: ["FlowType"], |
| fields: { |
| value: (0, _utils.validate)((0, _utils.assertValueType)("boolean")) |
| } |
| }); |
| defineType("NullLiteralTypeAnnotation", { |
| aliases: ["FlowType", "FlowBaseAnnotation"] |
| }); |
| defineType("ClassImplements", { |
| visitor: ["id", "typeParameters"], |
| fields: { |
| id: (0, _utils.validateType)("Identifier"), |
| typeParameters: (0, _utils.validateOptionalType)("TypeParameterInstantiation") |
| } |
| }); |
| defineInterfaceishType("DeclareClass"); |
| defineType("DeclareFunction", { |
| visitor: ["id"], |
| aliases: ["FlowDeclaration", "Statement", "Declaration"], |
| fields: { |
| id: (0, _utils.validateType)("Identifier"), |
| predicate: (0, _utils.validateOptionalType)("DeclaredPredicate") |
| } |
| }); |
| defineInterfaceishType("DeclareInterface"); |
| defineType("DeclareModule", { |
| builder: ["id", "body", "kind"], |
| visitor: ["id", "body"], |
| aliases: ["FlowDeclaration", "Statement", "Declaration"], |
| fields: { |
| id: (0, _utils.validateType)(["Identifier", "StringLiteral"]), |
| body: (0, _utils.validateType)("BlockStatement"), |
| kind: (0, _utils.validateOptional)((0, _utils.assertOneOf)("CommonJS", "ES")) |
| } |
| }); |
| defineType("DeclareModuleExports", { |
| visitor: ["typeAnnotation"], |
| aliases: ["FlowDeclaration", "Statement", "Declaration"], |
| fields: { |
| typeAnnotation: (0, _utils.validateType)("TypeAnnotation") |
| } |
| }); |
| defineType("DeclareTypeAlias", { |
| visitor: ["id", "typeParameters", "right"], |
| aliases: ["FlowDeclaration", "Statement", "Declaration"], |
| fields: { |
| id: (0, _utils.validateType)("Identifier"), |
| typeParameters: (0, _utils.validateOptionalType)("TypeParameterDeclaration"), |
| right: (0, _utils.validateType)("FlowType") |
| } |
| }); |
| defineType("DeclareOpaqueType", { |
| visitor: ["id", "typeParameters", "supertype"], |
| aliases: ["FlowDeclaration", "Statement", "Declaration"], |
| fields: { |
| id: (0, _utils.validateType)("Identifier"), |
| typeParameters: (0, _utils.validateOptionalType)("TypeParameterDeclaration"), |
| supertype: (0, _utils.validateOptionalType)("FlowType"), |
| impltype: (0, _utils.validateOptionalType)("FlowType") |
| } |
| }); |
| defineType("DeclareVariable", { |
| visitor: ["id"], |
| aliases: ["FlowDeclaration", "Statement", "Declaration"], |
| fields: { |
| id: (0, _utils.validateType)("Identifier") |
| } |
| }); |
| defineType("DeclareExportDeclaration", { |
| visitor: ["declaration", "specifiers", "source"], |
| aliases: ["FlowDeclaration", "Statement", "Declaration"], |
| fields: { |
| declaration: (0, _utils.validateOptionalType)("Flow"), |
| specifiers: (0, _utils.validateOptional)((0, _utils.arrayOfType)(["ExportSpecifier", "ExportNamespaceSpecifier"])), |
| source: (0, _utils.validateOptionalType)("StringLiteral"), |
| default: (0, _utils.validateOptional)((0, _utils.assertValueType)("boolean")) |
| } |
| }); |
| defineType("DeclareExportAllDeclaration", { |
| visitor: ["source"], |
| aliases: ["FlowDeclaration", "Statement", "Declaration"], |
| fields: { |
| source: (0, _utils.validateType)("StringLiteral"), |
| exportKind: (0, _utils.validateOptional)((0, _utils.assertOneOf)("type", "value")) |
| } |
| }); |
| defineType("DeclaredPredicate", { |
| visitor: ["value"], |
| aliases: ["FlowPredicate"], |
| fields: { |
| value: (0, _utils.validateType)("Flow") |
| } |
| }); |
| defineType("ExistsTypeAnnotation", { |
| aliases: ["FlowType"] |
| }); |
| defineType("FunctionTypeAnnotation", { |
| visitor: ["typeParameters", "params", "rest", "returnType"], |
| aliases: ["FlowType"], |
| fields: { |
| typeParameters: (0, _utils.validateOptionalType)("TypeParameterDeclaration"), |
| params: (0, _utils.validate)((0, _utils.arrayOfType)("FunctionTypeParam")), |
| rest: (0, _utils.validateOptionalType)("FunctionTypeParam"), |
| this: (0, _utils.validateOptionalType)("FunctionTypeParam"), |
| returnType: (0, _utils.validateType)("FlowType") |
| } |
| }); |
| defineType("FunctionTypeParam", { |
| visitor: ["name", "typeAnnotation"], |
| fields: { |
| name: (0, _utils.validateOptionalType)("Identifier"), |
| typeAnnotation: (0, _utils.validateType)("FlowType"), |
| optional: (0, _utils.validateOptional)((0, _utils.assertValueType)("boolean")) |
| } |
| }); |
| defineType("GenericTypeAnnotation", { |
| visitor: ["id", "typeParameters"], |
| aliases: ["FlowType"], |
| fields: { |
| id: (0, _utils.validateType)(["Identifier", "QualifiedTypeIdentifier"]), |
| typeParameters: (0, _utils.validateOptionalType)("TypeParameterInstantiation") |
| } |
| }); |
| defineType("InferredPredicate", { |
| aliases: ["FlowPredicate"] |
| }); |
| defineType("InterfaceExtends", { |
| visitor: ["id", "typeParameters"], |
| fields: { |
| id: (0, _utils.validateType)(["Identifier", "QualifiedTypeIdentifier"]), |
| typeParameters: (0, _utils.validateOptionalType)("TypeParameterInstantiation") |
| } |
| }); |
| defineInterfaceishType("InterfaceDeclaration"); |
| defineType("InterfaceTypeAnnotation", { |
| visitor: ["extends", "body"], |
| aliases: ["FlowType"], |
| fields: { |
| extends: (0, _utils.validateOptional)((0, _utils.arrayOfType)("InterfaceExtends")), |
| body: (0, _utils.validateType)("ObjectTypeAnnotation") |
| } |
| }); |
| defineType("IntersectionTypeAnnotation", { |
| visitor: ["types"], |
| aliases: ["FlowType"], |
| fields: { |
| types: (0, _utils.validate)((0, _utils.arrayOfType)("FlowType")) |
| } |
| }); |
| defineType("MixedTypeAnnotation", { |
| aliases: ["FlowType", "FlowBaseAnnotation"] |
| }); |
| defineType("EmptyTypeAnnotation", { |
| aliases: ["FlowType", "FlowBaseAnnotation"] |
| }); |
| defineType("NullableTypeAnnotation", { |
| visitor: ["typeAnnotation"], |
| aliases: ["FlowType"], |
| fields: { |
| typeAnnotation: (0, _utils.validateType)("FlowType") |
| } |
| }); |
| defineType("NumberLiteralTypeAnnotation", { |
| builder: ["value"], |
| aliases: ["FlowType"], |
| fields: { |
| value: (0, _utils.validate)((0, _utils.assertValueType)("number")) |
| } |
| }); |
| defineType("NumberTypeAnnotation", { |
| aliases: ["FlowType", "FlowBaseAnnotation"] |
| }); |
| defineType("ObjectTypeAnnotation", { |
| visitor: ["properties", "indexers", "callProperties", "internalSlots"], |
| aliases: ["FlowType"], |
| builder: ["properties", "indexers", "callProperties", "internalSlots", "exact"], |
| fields: { |
| properties: (0, _utils.validate)((0, _utils.arrayOfType)(["ObjectTypeProperty", "ObjectTypeSpreadProperty"])), |
| indexers: (0, _utils.validateOptional)((0, _utils.arrayOfType)("ObjectTypeIndexer")), |
| callProperties: (0, _utils.validateOptional)((0, _utils.arrayOfType)("ObjectTypeCallProperty")), |
| internalSlots: (0, _utils.validateOptional)((0, _utils.arrayOfType)("ObjectTypeInternalSlot")), |
| exact: { |
| validate: (0, _utils.assertValueType)("boolean"), |
| default: false |
| }, |
| inexact: (0, _utils.validateOptional)((0, _utils.assertValueType)("boolean")) |
| } |
| }); |
| defineType("ObjectTypeInternalSlot", { |
| visitor: ["id", "value", "optional", "static", "method"], |
| aliases: ["UserWhitespacable"], |
| fields: { |
| id: (0, _utils.validateType)("Identifier"), |
| value: (0, _utils.validateType)("FlowType"), |
| optional: (0, _utils.validate)((0, _utils.assertValueType)("boolean")), |
| static: (0, _utils.validate)((0, _utils.assertValueType)("boolean")), |
| method: (0, _utils.validate)((0, _utils.assertValueType)("boolean")) |
| } |
| }); |
| defineType("ObjectTypeCallProperty", { |
| visitor: ["value"], |
| aliases: ["UserWhitespacable"], |
| fields: { |
| value: (0, _utils.validateType)("FlowType"), |
| static: (0, _utils.validate)((0, _utils.assertValueType)("boolean")) |
| } |
| }); |
| defineType("ObjectTypeIndexer", { |
| visitor: ["id", "key", "value", "variance"], |
| aliases: ["UserWhitespacable"], |
| fields: { |
| id: (0, _utils.validateOptionalType)("Identifier"), |
| key: (0, _utils.validateType)("FlowType"), |
| value: (0, _utils.validateType)("FlowType"), |
| static: (0, _utils.validate)((0, _utils.assertValueType)("boolean")), |
| variance: (0, _utils.validateOptionalType)("Variance") |
| } |
| }); |
| defineType("ObjectTypeProperty", { |
| visitor: ["key", "value", "variance"], |
| aliases: ["UserWhitespacable"], |
| fields: { |
| key: (0, _utils.validateType)(["Identifier", "StringLiteral"]), |
| value: (0, _utils.validateType)("FlowType"), |
| kind: (0, _utils.validate)((0, _utils.assertOneOf)("init", "get", "set")), |
| static: (0, _utils.validate)((0, _utils.assertValueType)("boolean")), |
| proto: (0, _utils.validate)((0, _utils.assertValueType)("boolean")), |
| optional: (0, _utils.validate)((0, _utils.assertValueType)("boolean")), |
| variance: (0, _utils.validateOptionalType)("Variance"), |
| method: (0, _utils.validate)((0, _utils.assertValueType)("boolean")) |
| } |
| }); |
| defineType("ObjectTypeSpreadProperty", { |
| visitor: ["argument"], |
| aliases: ["UserWhitespacable"], |
| fields: { |
| argument: (0, _utils.validateType)("FlowType") |
| } |
| }); |
| defineType("OpaqueType", { |
| visitor: ["id", "typeParameters", "supertype", "impltype"], |
| aliases: ["FlowDeclaration", "Statement", "Declaration"], |
| fields: { |
| id: (0, _utils.validateType)("Identifier"), |
| typeParameters: (0, _utils.validateOptionalType)("TypeParameterDeclaration"), |
| supertype: (0, _utils.validateOptionalType)("FlowType"), |
| impltype: (0, _utils.validateType)("FlowType") |
| } |
| }); |
| defineType("QualifiedTypeIdentifier", { |
| visitor: ["id", "qualification"], |
| fields: { |
| id: (0, _utils.validateType)("Identifier"), |
| qualification: (0, _utils.validateType)(["Identifier", "QualifiedTypeIdentifier"]) |
| } |
| }); |
| defineType("StringLiteralTypeAnnotation", { |
| builder: ["value"], |
| aliases: ["FlowType"], |
| fields: { |
| value: (0, _utils.validate)((0, _utils.assertValueType)("string")) |
| } |
| }); |
| defineType("StringTypeAnnotation", { |
| aliases: ["FlowType", "FlowBaseAnnotation"] |
| }); |
| defineType("SymbolTypeAnnotation", { |
| aliases: ["FlowType", "FlowBaseAnnotation"] |
| }); |
| defineType("ThisTypeAnnotation", { |
| aliases: ["FlowType", "FlowBaseAnnotation"] |
| }); |
| defineType("TupleTypeAnnotation", { |
| visitor: ["types"], |
| aliases: ["FlowType"], |
| fields: { |
| types: (0, _utils.validate)((0, _utils.arrayOfType)("FlowType")) |
| } |
| }); |
| defineType("TypeofTypeAnnotation", { |
| visitor: ["argument"], |
| aliases: ["FlowType"], |
| fields: { |
| argument: (0, _utils.validateType)("FlowType") |
| } |
| }); |
| defineType("TypeAlias", { |
| visitor: ["id", "typeParameters", "right"], |
| aliases: ["FlowDeclaration", "Statement", "Declaration"], |
| fields: { |
| id: (0, _utils.validateType)("Identifier"), |
| typeParameters: (0, _utils.validateOptionalType)("TypeParameterDeclaration"), |
| right: (0, _utils.validateType)("FlowType") |
| } |
| }); |
| defineType("TypeAnnotation", { |
| visitor: ["typeAnnotation"], |
| fields: { |
| typeAnnotation: (0, _utils.validateType)("FlowType") |
| } |
| }); |
| defineType("TypeCastExpression", { |
| visitor: ["expression", "typeAnnotation"], |
| aliases: ["ExpressionWrapper", "Expression"], |
| fields: { |
| expression: (0, _utils.validateType)("Expression"), |
| typeAnnotation: (0, _utils.validateType)("TypeAnnotation") |
| } |
| }); |
| defineType("TypeParameter", { |
| visitor: ["bound", "default", "variance"], |
| fields: { |
| name: (0, _utils.validate)((0, _utils.assertValueType)("string")), |
| bound: (0, _utils.validateOptionalType)("TypeAnnotation"), |
| default: (0, _utils.validateOptionalType)("FlowType"), |
| variance: (0, _utils.validateOptionalType)("Variance") |
| } |
| }); |
| defineType("TypeParameterDeclaration", { |
| visitor: ["params"], |
| fields: { |
| params: (0, _utils.validate)((0, _utils.arrayOfType)("TypeParameter")) |
| } |
| }); |
| defineType("TypeParameterInstantiation", { |
| visitor: ["params"], |
| fields: { |
| params: (0, _utils.validate)((0, _utils.arrayOfType)("FlowType")) |
| } |
| }); |
| defineType("UnionTypeAnnotation", { |
| visitor: ["types"], |
| aliases: ["FlowType"], |
| fields: { |
| types: (0, _utils.validate)((0, _utils.arrayOfType)("FlowType")) |
| } |
| }); |
| defineType("Variance", { |
| builder: ["kind"], |
| fields: { |
| kind: (0, _utils.validate)((0, _utils.assertOneOf)("minus", "plus")) |
| } |
| }); |
| defineType("VoidTypeAnnotation", { |
| aliases: ["FlowType", "FlowBaseAnnotation"] |
| }); |
| defineType("EnumDeclaration", { |
| aliases: ["Statement", "Declaration"], |
| visitor: ["id", "body"], |
| fields: { |
| id: (0, _utils.validateType)("Identifier"), |
| body: (0, _utils.validateType)(["EnumBooleanBody", "EnumNumberBody", "EnumStringBody", "EnumSymbolBody"]) |
| } |
| }); |
| defineType("EnumBooleanBody", { |
| aliases: ["EnumBody"], |
| visitor: ["members"], |
| fields: { |
| explicitType: (0, _utils.validate)((0, _utils.assertValueType)("boolean")), |
| members: (0, _utils.validateArrayOfType)("EnumBooleanMember"), |
| hasUnknownMembers: (0, _utils.validate)((0, _utils.assertValueType)("boolean")) |
| } |
| }); |
| defineType("EnumNumberBody", { |
| aliases: ["EnumBody"], |
| visitor: ["members"], |
| fields: { |
| explicitType: (0, _utils.validate)((0, _utils.assertValueType)("boolean")), |
| members: (0, _utils.validateArrayOfType)("EnumNumberMember"), |
| hasUnknownMembers: (0, _utils.validate)((0, _utils.assertValueType)("boolean")) |
| } |
| }); |
| defineType("EnumStringBody", { |
| aliases: ["EnumBody"], |
| visitor: ["members"], |
| fields: { |
| explicitType: (0, _utils.validate)((0, _utils.assertValueType)("boolean")), |
| members: (0, _utils.validateArrayOfType)(["EnumStringMember", "EnumDefaultedMember"]), |
| hasUnknownMembers: (0, _utils.validate)((0, _utils.assertValueType)("boolean")) |
| } |
| }); |
| defineType("EnumSymbolBody", { |
| aliases: ["EnumBody"], |
| visitor: ["members"], |
| fields: { |
| members: (0, _utils.validateArrayOfType)("EnumDefaultedMember"), |
| hasUnknownMembers: (0, _utils.validate)((0, _utils.assertValueType)("boolean")) |
| } |
| }); |
| defineType("EnumBooleanMember", { |
| aliases: ["EnumMember"], |
| visitor: ["id"], |
| fields: { |
| id: (0, _utils.validateType)("Identifier"), |
| init: (0, _utils.validateType)("BooleanLiteral") |
| } |
| }); |
| defineType("EnumNumberMember", { |
| aliases: ["EnumMember"], |
| visitor: ["id", "init"], |
| fields: { |
| id: (0, _utils.validateType)("Identifier"), |
| init: (0, _utils.validateType)("NumericLiteral") |
| } |
| }); |
| defineType("EnumStringMember", { |
| aliases: ["EnumMember"], |
| visitor: ["id", "init"], |
| fields: { |
| id: (0, _utils.validateType)("Identifier"), |
| init: (0, _utils.validateType)("StringLiteral") |
| } |
| }); |
| defineType("EnumDefaultedMember", { |
| aliases: ["EnumMember"], |
| visitor: ["id"], |
| fields: { |
| id: (0, _utils.validateType)("Identifier") |
| } |
| }); |
| defineType("IndexedAccessType", { |
| visitor: ["objectType", "indexType"], |
| aliases: ["FlowType"], |
| fields: { |
| objectType: (0, _utils.validateType)("FlowType"), |
| indexType: (0, _utils.validateType)("FlowType") |
| } |
| }); |
| defineType("OptionalIndexedAccessType", { |
| visitor: ["objectType", "indexType"], |
| aliases: ["FlowType"], |
| fields: { |
| objectType: (0, _utils.validateType)("FlowType"), |
| indexType: (0, _utils.validateType)("FlowType"), |
| optional: (0, _utils.validate)((0, _utils.assertValueType)("boolean")) |
| } |
| }); |