| "use strict"; | 
|   | 
| var _utils = require("./utils"); | 
| const defineType = (0, _utils.defineAliasedType)("Flow"); | 
| const defineInterfaceishType = name => { | 
|   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)("TypeParameterDeclaration"), | 
|       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: { | 
|       validate: (0, _utils.arrayOfType)("ObjectTypeIndexer"), | 
|       optional: true, | 
|       default: [] | 
|     }, | 
|     callProperties: { | 
|       validate: (0, _utils.arrayOfType)("ObjectTypeCallProperty"), | 
|       optional: true, | 
|       default: [] | 
|     }, | 
|     internalSlots: { | 
|       validate: (0, _utils.arrayOfType)("ObjectTypeInternalSlot"), | 
|       optional: true, | 
|       default: [] | 
|     }, | 
|     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")) | 
|   } | 
| }); | 
|   | 
| //# sourceMappingURL=flow.js.map |