{"version":3,"names":["_types","require","_context","_identifier","_scope","_scopeflags","_parseError","_node","reservedTypes","Set","FlowErrors","ParseErrorEnum","AmbiguousConditionalArrow","AmbiguousDeclareModuleKind","AssignReservedType","reservedType","DeclareClassElement","DeclareClassFieldInitializer","DuplicateDeclareModuleExports","EnumBooleanMemberNotInitialized","memberName","enumName","EnumDuplicateMemberName","EnumInconsistentMemberValues","EnumInvalidExplicitType","invalidEnumType","EnumInvalidExplicitTypeUnknownSupplied","EnumInvalidMemberInitializerPrimaryType","explicitType","EnumInvalidMemberInitializerSymbolType","EnumInvalidMemberInitializerUnknownType","EnumInvalidMemberName","suggestion","EnumNumberMemberNotInitialized","EnumStringMemberInconsistentlyInitailized","GetterMayNotHaveThisParam","ImportReflectionHasImportType","ImportTypeShorthandOnlyInPureImport","InexactInsideExact","InexactInsideNonObject","InexactVariance","InvalidNonTypeImportInDeclareModule","MissingTypeParamDefault","NestedDeclareModule","NestedFlowComment","PatternIsOptional","Object","assign","message","reasonCode","SetterMayNotHaveThisParam","SpreadVariance","ThisParamAnnotationRequired","ThisParamBannedInConstructor","ThisParamMayNotBeOptional","ThisParamMustBeFirst","ThisParamNoDefault","TypeBeforeInitializer","TypeCastInPattern","UnexpectedExplicitInexactInObject","UnexpectedReservedType","UnexpectedReservedUnderscore","UnexpectedSpaceBetweenModuloChecks","UnexpectedSpreadType","UnexpectedSubtractionOperand","UnexpectedTokenAfterTypeParameter","UnexpectedTypeParameterBeforeAsyncArrowFunction","UnsupportedDeclareExportKind","unsupportedExportKind","UnsupportedStatementInDeclareModule","UnterminatedFlowComment","isEsModuleType","bodyElement","type","declaration","hasTypeImportKind","node","importKind","exportSuggestions","const","let","interface","partition","list","test","list1","list2","i","length","push","FLOW_PRAGMA_REGEX","_default","superClass","FlowParserMixin","constructor","args","flowPragma","undefined","getScopeHandler","FlowScopeHandler","shouldParseTypes","getPluginOption","shouldParseEnums","finishToken","val","addComment","comment","matches","exec","value","Error","flowParseTypeInitialiser","tok","oldInType","state","inType","expect","flowParseType","flowParsePredicate","startNode","moduloLoc","startLoc","next","expectContextual","lastTokStart","index","raise","at","eat","parseExpression","finishNode","flowParseTypeAndPredicateInitialiser","predicate","match","flowParseDeclareClass","flowParseInterfaceish","flowParseDeclareFunction","id","parseIdentifier","typeNode","typeContainer","typeParameters","flowParseTypeParameterDeclaration","tmp","flowParseFunctionTypeParams","params","rest","this","_this","returnType","typeAnnotation","resetEndLocation","semicolon","scope","declareName","name","BIND_FLOW_DECLARE_FN","loc","start","flowParseDeclare","insideModule","flowParseDeclareVariable","eatContextual","flowParseDeclareModuleExports","lastTokStartLoc","flowParseDeclareModule","isContextual","flowParseDeclareTypeAlias","flowParseDeclareOpaqueType","flowParseDeclareInterface","flowParseDeclareExportDeclaration","unexpected","flowParseTypeAnnotatableIdentifier","BIND_VAR","enter","SCOPE_OTHER","parseExprAtom","bodyNode","body","parseImport","exit","kind","hasModuleExport","forEach","default","isLet","label","parseExport","exportKind","flowParseTypeAnnotation","finished","flowParseTypeAlias","flowParseOpaqueType","isClass","flowParseRestrictedIdentifier","BIND_FUNCTION","BIND_LEXICAL","extends","flowParseInterfaceExtends","implements","mixins","flowParseObjectType","allowStatic","allowExact","allowSpread","allowProto","allowInexact","flowParseQualifiedTypeIdentifier","flowParseTypeParameterInstantiation","flowParseInterface","checkNotUnderscore","word","checkReservedType","has","liberal","right","declare","supertype","impltype","flowParseTypeParameter","requireDefault","nodeStartLoc","variance","flowParseVariance","ident","bound","defaultRequired","typeParameter","oldNoAnonFunctionType","noAnonFunctionType","flowParseTypeParameterInstantiationCallOrNew","flowParseTypeOrImplicitInstantiation","flowParseInterfaceType","flowParseObjectPropertyKey","flowParseObjectTypeIndexer","isStatic","static","lookahead","key","flowParseObjectTypeInternalSlot","method","optional","flowParseObjectTypeMethodish","startNodeAt","flowParseFunctionTypeParam","flowParseObjectTypeCallProperty","valueNode","nodeStart","callProperties","properties","indexers","internalSlots","endDelim","exact","inexact","protoStartLoc","inexactStartLoc","tokenIsLiteralPropertyName","propOrInexact","flowParseObjectTypeProperty","flowObjectTypeSemicolon","out","isInexactToken","argument","proto","flowCheckGetterSetterParams","property","paramCount","Errors","BadGetterArity","BadSetterArity","BadSetterRestParameter","_startLoc","node2","qualification","flowParseGenericType","flowParseTypeofType","flowParsePrimaryType","flowParseTupleType","types","pos","first","lh","isThis","reinterpretTypeAsFunctionTypeParam","flowIdentToTypeAnnotation","isGroupedType","tokenIsIdentifier","token","parseLiteral","parseLiteralAtNode","tokenIsKeyword","tokenLabelName","createIdentifier","flowParsePostfixType","seenOptionalIndexedAccess","canInsertSemicolon","elementType","objectType","indexType","flowParsePrefixType","flowParseAnonFunctionWithoutParens","param","flowParseIntersectionType","flowParseUnionType","allowPrimitiveOverride","typeCastToParameter","expression","end","parseFunctionBody","allowExpressionBody","isMethod","forwardNoArrowParamsConversionAt","parseFunctionBodyAndFinish","parseStatementLike","flags","strict","tokenIsKeywordOrIdentifier","flowParseEnumDeclaration","stmt","isValidDirective","parseExpressionStatement","expr","decorators","shouldParseExportDeclaration","tokenIsFlowInterfaceOrTypeOrOpaque","containsEsc","isExportDefaultSpecifier","parseExportDefaultExpression","parseConditional","refExpressionErrors","maybeInArrowParameters","nextCh","lookaheadCharCode","setOptionalParametersError","clone","originalNoArrowAt","noArrowAt","consequent","failed","tryParseConditionalConsequent","valid","invalid","getArrowLikeExpressions","alternate","parseMaybeAssign","noArrowParamsConversionAt","parseMaybeAssignAllowIn","pop","disallowInvalid","stack","arrows","finishArrowValidation","every","isAssignable","_node$extra","toAssignableList","extra","trailingCommaLoc","SCOPE_FUNCTION","SCOPE_ARROW","checkParams","parse","result","indexOf","parseParenItem","typeCastNode","assertModuleNodeAllowed","parseExportDeclaration","declarationNode","specifiers","parseExportSpecifiers","parseExportFrom","eatExportStar","maybeParseExportNamespaceSpecifier","hasNamespace","parseClassId","isStatement","optionalId","parseClassMember","classBody","member","parseClassMemberFromModifier","isIterator","readIterator","readWord1","fullWord","InvalidIdentifier","curPosition","identifierName","getTokenFromCode","code","input","charCodeAt","finishOp","isIteratorStart","isBinding","toAssignable","isLHS","left","exprList","toReferencedList","isParenthesizedExpr","_expr$extra","parenthesized","parseArrayLike","close","canBePattern","isTuple","elements","isValidLVal","isParenthesized","binding","parseClassProperty","parseClassPrivateProperty","isClassMethod","isClassProperty","isNonstaticConstructor","pushClassMethod","isGenerator","isAsync","isConstructor","allowsDirectSuper","isThisParam","pushClassPrivateMethod","parseClassSuper","superTypeParameters","implemented","checkGetterSetterParams","getObjectOrClassMethodParams","parsePropertyNamePrefixOperator","parseObjPropValue","prop","isPattern","isAccessor","parseAssignableListItemTypes","parseMaybeDefault","checkImportReflection","module","parseImportSpecifierLocal","specifier","local","finishImportSpecifier","isPotentialImportPhase","isExport","ch","applyImportPhase","phase","parseImportSpecifier","importedIsString","isInTypeOnlyImport","isMaybeTypeOnly","bindingType","firstIdent","imported","specifierTypeKind","isLookaheadContextual","as_ident","cloneIdentifier","ImportBindingIsString","importName","specifierIsTypeImport","checkReservedWord","parseBindingAtom","parseFunctionParams","parseVarId","decl","parseAsyncArrowFromCallExpression","call","shouldParseAsyncArrow","afterLeftParse","_jsx","jsx","hasPlugin","tryParse","error","context","currentContext","tc","j_oTag","j_expr","_jsx2","_jsx3","arrow","abort","_arrowExpression$extr","arrowExpression","resetStartLocationFromNode","maybeUnwrapTypeCastExpression","aborted","async","failState","thrown","parseArrow","shouldParseArrow","setArrowFunctionParameters","allowDuplicates","isArrowFunction","strictModeChanged","parseParenAndDistinguishExpression","canBeArrow","parseSubscripts","base","noCalls","callee","arguments","parseCallExpressionArguments","parseAsyncArrowWithTypeParameters","parseSubscript","subscriptState","isLookaheadToken_lt","optionalChainMember","stop","typeArguments","finishCallExpression","parseNewCallee","targs","parseArrowExpression","readToken_mult_modulo","hasFlowComment","nextToken","readToken_pipe_amp","parseTopLevel","file","program","fileNode","skipBlockComment","skipFlowComment","hasFlowCommentCompletion","commentSkip","shiftToFirstNonWhiteSpace","includes","ch2","ch3","slice","UnterminatedComment","flowEnumErrorBooleanMemberNotInitialized","flowEnumErrorInvalidMemberInitializer","enumContext","flowEnumErrorNumberMemberNotInitialized","flowEnumErrorStringMemberInconsistentlyInitailized","flowEnumMemberInit","endOfInit","literal","parseNumericLiteral","parseStringLiteral","parseBooleanLiteral","flowEnumMemberRaw","init","flowEnumCheckExplicitTypeMismatch","expectedType","flowEnumMembers","seenNames","members","booleanMembers","numberMembers","stringMembers","defaultedMembers","hasUnknownMembers","memberNode","toUpperCase","add","flowEnumStringMembers","initializedMembers","flowEnumParseExplicitType","flowEnumBody","nameLoc","empty","boolsLen","numsLen","strsLen","defaultedLen","nextTokenStart","afterNext","exports"],"sources":["../../../src/plugins/flow/index.ts"],"sourcesContent":["/*:: declare var invariant; */\n\nimport type Parser from \"../../parser\";\nimport {\n tokenIsIdentifier,\n tokenIsKeyword,\n tokenIsKeywordOrIdentifier,\n tokenIsLiteralPropertyName,\n tokenLabelName,\n tt,\n type TokenType,\n tokenIsFlowInterfaceOrTypeOrOpaque,\n} from \"../../tokenizer/types\";\nimport type * as N from \"../../types\";\nimport type { Position } from \"../../util/location\";\nimport { types as tc } from \"../../tokenizer/context\";\nimport * as charCodes from \"charcodes\";\nimport { isIteratorStart } from \"../../util/identifier\";\nimport FlowScopeHandler from \"./scope\";\nimport {\n BIND_LEXICAL,\n BIND_VAR,\n BIND_FUNCTION,\n BIND_FLOW_DECLARE_FN,\n SCOPE_ARROW,\n SCOPE_FUNCTION,\n SCOPE_OTHER,\n type BindingTypes,\n} from \"../../util/scopeflags\";\nimport type { ExpressionErrors } from \"../../parser/util\";\nimport type { ParseStatementFlag } from \"../../parser/statement\";\nimport { Errors, ParseErrorEnum } from \"../../parse-error\";\nimport { cloneIdentifier, type Undone } from \"../../parser/node\";\n\nconst reservedTypes = new Set([\n \"_\",\n \"any\",\n \"bool\",\n \"boolean\",\n \"empty\",\n \"extends\",\n \"false\",\n \"interface\",\n \"mixed\",\n \"null\",\n \"number\",\n \"static\",\n \"string\",\n \"true\",\n \"typeof\",\n \"void\",\n]);\n\n/* eslint sort-keys: \"error\" */\n// The Errors key follows https://github.com/facebook/flow/blob/master/src/parser/parse_error.ml unless it does not exist\nconst FlowErrors = ParseErrorEnum`flow`({\n AmbiguousConditionalArrow:\n \"Ambiguous expression: wrap the arrow functions in parentheses to disambiguate.\",\n AmbiguousDeclareModuleKind:\n \"Found both `declare module.exports` and `declare export` in the same module. Modules can only have 1 since they are either an ES module or they are a CommonJS module.\",\n // TODO: When we get proper string enums in typescript make this ReservedType.\n // Not really worth it to do the whole $Values dance with reservedTypes set.\n AssignReservedType: ({ reservedType }: { reservedType: string }) =>\n `Cannot overwrite reserved type ${reservedType}.`,\n DeclareClassElement:\n \"The `declare` modifier can only appear on class fields.\",\n DeclareClassFieldInitializer:\n \"Initializers are not allowed in fields with the `declare` modifier.\",\n DuplicateDeclareModuleExports:\n \"Duplicate `declare module.exports` statement.\",\n EnumBooleanMemberNotInitialized: ({\n memberName,\n enumName,\n }: {\n memberName: string;\n enumName: string;\n }) =>\n `Boolean enum members need to be initialized. Use either \\`${memberName} = true,\\` or \\`${memberName} = false,\\` in enum \\`${enumName}\\`.`,\n EnumDuplicateMemberName: ({\n memberName,\n enumName,\n }: {\n memberName: string;\n enumName: string;\n }) =>\n `Enum member names need to be unique, but the name \\`${memberName}\\` has already been used before in enum \\`${enumName}\\`.`,\n EnumInconsistentMemberValues: ({ enumName }: { enumName: string }) =>\n `Enum \\`${enumName}\\` has inconsistent member initializers. Either use no initializers, or consistently use literals (either booleans, numbers, or strings) for all member initializers.`,\n EnumInvalidExplicitType: ({\n invalidEnumType,\n enumName,\n }: {\n invalidEnumType: string;\n enumName: string;\n }) =>\n `Enum type \\`${invalidEnumType}\\` is not valid. Use one of \\`boolean\\`, \\`number\\`, \\`string\\`, or \\`symbol\\` in enum \\`${enumName}\\`.`,\n EnumInvalidExplicitTypeUnknownSupplied: ({\n enumName,\n }: {\n enumName: string;\n }) =>\n `Supplied enum type is not valid. Use one of \\`boolean\\`, \\`number\\`, \\`string\\`, or \\`symbol\\` in enum \\`${enumName}\\`.`,\n\n // TODO: When moving to typescript, we should either have each of the\n // following errors only accept the specific strings they want:\n //\n // ...PrimaryType: explicitType: \"string\" | \"number\" | \"boolean\"\n // ...SymbolType: explicitType: \"symbol\"\n // ...UnknownType: explicitType: null\n //\n // Or, alternatively, merge these three errors together into one\n // `EnumInvalidMemberInitializer` error that can accept `EnumExplicitType`\n // without alteration, and then just have its message change based on the\n // explicitType.\n EnumInvalidMemberInitializerPrimaryType: ({\n enumName,\n memberName,\n explicitType,\n }: {\n enumName: string;\n memberName: string;\n explicitType: EnumExplicitType;\n }) =>\n `Enum \\`${enumName}\\` has type \\`${explicitType}\\`, so the initializer of \\`${memberName}\\` needs to be a ${explicitType} literal.`,\n EnumInvalidMemberInitializerSymbolType: ({\n enumName,\n memberName,\n }: {\n enumName: string;\n memberName: string;\n explicitType: EnumExplicitType;\n }) =>\n `Symbol enum members cannot be initialized. Use \\`${memberName},\\` in enum \\`${enumName}\\`.`,\n EnumInvalidMemberInitializerUnknownType: ({\n enumName,\n memberName,\n }: {\n enumName: string;\n memberName: string;\n explicitType: EnumExplicitType;\n }) =>\n `The enum member initializer for \\`${memberName}\\` needs to be a literal (either a boolean, number, or string) in enum \\`${enumName}\\`.`,\n EnumInvalidMemberName: ({\n enumName,\n memberName,\n suggestion,\n }: {\n enumName: string;\n memberName: string;\n suggestion: string;\n }) =>\n `Enum member names cannot start with lowercase 'a' through 'z'. Instead of using \\`${memberName}\\`, consider using \\`${suggestion}\\`, in enum \\`${enumName}\\`.`,\n EnumNumberMemberNotInitialized: ({\n enumName,\n memberName,\n }: {\n enumName: string;\n memberName: string;\n }) =>\n `Number enum members need to be initialized, e.g. \\`${memberName} = 1\\` in enum \\`${enumName}\\`.`,\n EnumStringMemberInconsistentlyInitailized: ({\n enumName,\n }: {\n enumName: string;\n }) =>\n `String enum members need to consistently either all use initializers, or use no initializers, in enum \\`${enumName}\\`.`,\n GetterMayNotHaveThisParam: \"A getter cannot have a `this` parameter.\",\n ImportReflectionHasImportType:\n \"An `import module` declaration can not use `type` or `typeof` keyword.\",\n ImportTypeShorthandOnlyInPureImport:\n \"The `type` and `typeof` keywords on named imports can only be used on regular `import` statements. It cannot be used with `import type` or `import typeof` statements.\",\n InexactInsideExact:\n \"Explicit inexact syntax cannot appear inside an explicit exact object type.\",\n InexactInsideNonObject:\n \"Explicit inexact syntax cannot appear in class or interface definitions.\",\n InexactVariance: \"Explicit inexact syntax cannot have variance.\",\n InvalidNonTypeImportInDeclareModule:\n \"Imports within a `declare module` body must always be `import type` or `import typeof`.\",\n MissingTypeParamDefault:\n \"Type parameter declaration needs a default, since a preceding type parameter declaration has a default.\",\n NestedDeclareModule:\n \"`declare module` cannot be used inside another `declare module`.\",\n NestedFlowComment: \"Cannot have a flow comment inside another flow comment.\",\n PatternIsOptional: {\n message:\n \"A binding pattern parameter cannot be optional in an implementation signature.\",\n // For consistency in TypeScript and Flow error codes\n ...(!process.env.BABEL_8_BREAKING\n ? { reasonCode: \"OptionalBindingPattern\" }\n : {}),\n },\n SetterMayNotHaveThisParam: \"A setter cannot have a `this` parameter.\",\n SpreadVariance: \"Spread properties cannot have variance.\",\n ThisParamAnnotationRequired:\n \"A type annotation is required for the `this` parameter.\",\n ThisParamBannedInConstructor:\n \"Constructors cannot have a `this` parameter; constructors don't bind `this` like other functions.\",\n ThisParamMayNotBeOptional: \"The `this` parameter cannot be optional.\",\n ThisParamMustBeFirst:\n \"The `this` parameter must be the first function parameter.\",\n ThisParamNoDefault: \"The `this` parameter may not have a default value.\",\n TypeBeforeInitializer:\n \"Type annotations must come before default assignments, e.g. instead of `age = 25: number` use `age: number = 25`.\",\n TypeCastInPattern:\n \"The type cast expression is expected to be wrapped with parenthesis.\",\n UnexpectedExplicitInexactInObject:\n \"Explicit inexact syntax must appear at the end of an inexact object.\",\n UnexpectedReservedType: ({ reservedType }: { reservedType: string }) =>\n `Unexpected reserved type ${reservedType}.`,\n UnexpectedReservedUnderscore:\n \"`_` is only allowed as a type argument to call or new.\",\n UnexpectedSpaceBetweenModuloChecks:\n \"Spaces between `%` and `checks` are not allowed here.\",\n UnexpectedSpreadType:\n \"Spread operator cannot appear in class or interface definitions.\",\n UnexpectedSubtractionOperand:\n 'Unexpected token, expected \"number\" or \"bigint\".',\n UnexpectedTokenAfterTypeParameter:\n \"Expected an arrow function after this type parameter declaration.\",\n UnexpectedTypeParameterBeforeAsyncArrowFunction:\n \"Type parameters must come after the async keyword, e.g. instead of ` async () => {}`, use `async () => {}`.\",\n UnsupportedDeclareExportKind: ({\n unsupportedExportKind,\n suggestion,\n }: {\n unsupportedExportKind: string;\n suggestion: string;\n }) =>\n `\\`declare export ${unsupportedExportKind}\\` is not supported. Use \\`${suggestion}\\` instead.`,\n UnsupportedStatementInDeclareModule:\n \"Only declares and type imports are allowed inside declare module.\",\n UnterminatedFlowComment: \"Unterminated flow-comment.\",\n});\n/* eslint-disable sort-keys */\n\nfunction isEsModuleType(bodyElement: N.Node): boolean {\n return (\n bodyElement.type === \"DeclareExportAllDeclaration\" ||\n (bodyElement.type === \"DeclareExportDeclaration\" &&\n (!bodyElement.declaration ||\n (bodyElement.declaration.type !== \"TypeAlias\" &&\n bodyElement.declaration.type !== \"InterfaceDeclaration\")))\n );\n}\n\nfunction hasTypeImportKind(node: N.Node): boolean {\n return node.importKind === \"type\" || node.importKind === \"typeof\";\n}\n\nconst exportSuggestions = {\n const: \"declare export var\",\n let: \"declare export var\",\n type: \"export type\",\n interface: \"export interface\",\n};\n\n// Like Array#filter, but returns a tuple [ acceptedElements, discardedElements ]\nfunction partition(\n list: T[],\n test: (c: T, b: number, a: T[]) => boolean | undefined | null,\n): [T[], T[]] {\n const list1: T[] = [];\n const list2: T[] = [];\n for (let i = 0; i < list.length; i++) {\n (test(list[i], i, list) ? list1 : list2).push(list[i]);\n }\n return [list1, list2];\n}\n\nconst FLOW_PRAGMA_REGEX = /\\*?\\s*@((?:no)?flow)\\b/;\n\n// Flow enums types\ntype EnumExplicitType = null | \"boolean\" | \"number\" | \"string\" | \"symbol\";\n\ntype EnumContext = {\n enumName: string;\n explicitType: EnumExplicitType;\n memberName: string;\n};\n\ntype EnumMemberInit =\n | {\n type: \"number\";\n loc: Position;\n value: N.Node;\n }\n | {\n type: \"string\";\n loc: Position;\n value: N.Node;\n }\n | {\n type: \"boolean\";\n loc: Position;\n value: N.Node;\n }\n | {\n type: \"invalid\";\n loc: Position;\n }\n | {\n type: \"none\";\n loc: Position;\n };\n\nexport default (superClass: typeof Parser) =>\n class FlowParserMixin extends superClass implements Parser {\n // The value of the @flow/@noflow pragma. Initially undefined, transitions\n // to \"@flow\" or \"@noflow\" if we see a pragma. Transitions to null if we are\n // past the initial comment.\n flowPragma: void | null | \"flow\" | \"noflow\" = undefined;\n\n getScopeHandler(): {\n new (...args: any): FlowScopeHandler;\n } {\n return FlowScopeHandler;\n }\n\n shouldParseTypes(): boolean {\n return this.getPluginOption(\"flow\", \"all\") || this.flowPragma === \"flow\";\n }\n\n shouldParseEnums(): boolean {\n return !!this.getPluginOption(\"flow\", \"enums\");\n }\n\n finishToken(type: TokenType, val: any): void {\n if (\n type !== tt.string &&\n type !== tt.semi &&\n type !== tt.interpreterDirective\n ) {\n if (this.flowPragma === undefined) {\n this.flowPragma = null;\n }\n }\n super.finishToken(type, val);\n }\n\n addComment(comment: N.Comment): void {\n if (this.flowPragma === undefined) {\n // Try to parse a flow pragma.\n const matches = FLOW_PRAGMA_REGEX.exec(comment.value);\n if (!matches) {\n // do nothing\n } else if (matches[1] === \"flow\") {\n this.flowPragma = \"flow\";\n } else if (matches[1] === \"noflow\") {\n this.flowPragma = \"noflow\";\n } else {\n throw new Error(\"Unexpected flow pragma\");\n }\n }\n super.addComment(comment);\n }\n\n flowParseTypeInitialiser(tok?: TokenType): N.FlowType {\n const oldInType = this.state.inType;\n this.state.inType = true;\n this.expect(tok || tt.colon);\n\n const type = this.flowParseType();\n this.state.inType = oldInType;\n return type;\n }\n\n flowParsePredicate(): N.FlowPredicate {\n const node = this.startNode();\n const moduloLoc = this.state.startLoc;\n this.next(); // eat `%`\n this.expectContextual(tt._checks);\n // Force '%' and 'checks' to be adjacent\n if (this.state.lastTokStart > moduloLoc.index + 1) {\n this.raise(FlowErrors.UnexpectedSpaceBetweenModuloChecks, {\n at: moduloLoc,\n });\n }\n if (this.eat(tt.parenL)) {\n node.value = super.parseExpression();\n this.expect(tt.parenR);\n return this.finishNode(node, \"DeclaredPredicate\");\n } else {\n return this.finishNode(node, \"InferredPredicate\");\n }\n }\n\n flowParseTypeAndPredicateInitialiser(): [\n N.FlowType | undefined | null,\n N.FlowPredicate | undefined | null,\n ] {\n const oldInType = this.state.inType;\n this.state.inType = true;\n this.expect(tt.colon);\n let type = null;\n let predicate = null;\n if (this.match(tt.modulo)) {\n this.state.inType = oldInType;\n predicate = this.flowParsePredicate();\n } else {\n type = this.flowParseType();\n this.state.inType = oldInType;\n if (this.match(tt.modulo)) {\n predicate = this.flowParsePredicate();\n }\n }\n return [type, predicate];\n }\n\n flowParseDeclareClass(\n node: Undone,\n ): N.FlowDeclareClass {\n this.next();\n this.flowParseInterfaceish(node, /*isClass*/ true);\n return this.finishNode(node, \"DeclareClass\");\n }\n\n flowParseDeclareFunction(\n node: Undone,\n ): N.FlowDeclareFunction {\n this.next();\n\n const id = (node.id = this.parseIdentifier());\n\n const typeNode = this.startNode();\n const typeContainer = this.startNode();\n\n if (this.match(tt.lt)) {\n typeNode.typeParameters = this.flowParseTypeParameterDeclaration();\n } else {\n typeNode.typeParameters = null;\n }\n\n this.expect(tt.parenL);\n const tmp = this.flowParseFunctionTypeParams();\n typeNode.params = tmp.params;\n typeNode.rest = tmp.rest;\n typeNode.this = tmp._this;\n this.expect(tt.parenR);\n\n [typeNode.returnType, node.predicate] =\n this.flowParseTypeAndPredicateInitialiser();\n\n typeContainer.typeAnnotation = this.finishNode(\n typeNode,\n \"FunctionTypeAnnotation\",\n );\n\n id.typeAnnotation = this.finishNode(typeContainer, \"TypeAnnotation\");\n\n this.resetEndLocation(id);\n this.semicolon();\n\n this.scope.declareName(\n node.id.name,\n BIND_FLOW_DECLARE_FN,\n node.id.loc.start,\n );\n\n return this.finishNode(node, \"DeclareFunction\");\n }\n\n flowParseDeclare(\n node: Undone,\n insideModule?: boolean,\n ): N.FlowDeclare {\n if (this.match(tt._class)) {\n return this.flowParseDeclareClass(node);\n } else if (this.match(tt._function)) {\n return this.flowParseDeclareFunction(node);\n } else if (this.match(tt._var)) {\n return this.flowParseDeclareVariable(node);\n } else if (this.eatContextual(tt._module)) {\n if (this.match(tt.dot)) {\n return this.flowParseDeclareModuleExports(node);\n } else {\n if (insideModule) {\n this.raise(FlowErrors.NestedDeclareModule, {\n at: this.state.lastTokStartLoc,\n });\n }\n return this.flowParseDeclareModule(node);\n }\n } else if (this.isContextual(tt._type)) {\n return this.flowParseDeclareTypeAlias(node);\n } else if (this.isContextual(tt._opaque)) {\n return this.flowParseDeclareOpaqueType(node);\n } else if (this.isContextual(tt._interface)) {\n return this.flowParseDeclareInterface(node);\n } else if (this.match(tt._export)) {\n return this.flowParseDeclareExportDeclaration(node, insideModule);\n } else {\n this.unexpected();\n }\n }\n\n flowParseDeclareVariable(\n node: Undone,\n ): N.FlowDeclareVariable {\n this.next();\n node.id = this.flowParseTypeAnnotatableIdentifier(\n /*allowPrimitiveOverride*/ true,\n );\n this.scope.declareName(node.id.name, BIND_VAR, node.id.loc.start);\n this.semicolon();\n return this.finishNode(node, \"DeclareVariable\");\n }\n\n flowParseDeclareModule(\n node: Undone,\n ): N.FlowDeclareModule {\n this.scope.enter(SCOPE_OTHER);\n\n if (this.match(tt.string)) {\n node.id = super.parseExprAtom();\n } else {\n node.id = this.parseIdentifier();\n }\n\n const bodyNode = (node.body = this.startNode());\n // @ts-expect-error refine typings\n const body = (bodyNode.body = []);\n this.expect(tt.braceL);\n while (!this.match(tt.braceR)) {\n let bodyNode = this.startNode();\n\n if (this.match(tt._import)) {\n this.next();\n if (!this.isContextual(tt._type) && !this.match(tt._typeof)) {\n this.raise(FlowErrors.InvalidNonTypeImportInDeclareModule, {\n at: this.state.lastTokStartLoc,\n });\n }\n super.parseImport(bodyNode);\n } else {\n this.expectContextual(\n tt._declare,\n FlowErrors.UnsupportedStatementInDeclareModule,\n );\n // @ts-expect-error refine typings\n bodyNode = this.flowParseDeclare(bodyNode, true);\n }\n\n body.push(bodyNode);\n }\n\n this.scope.exit();\n\n this.expect(tt.braceR);\n\n this.finishNode(bodyNode, \"BlockStatement\");\n\n let kind: \"CommonJS\" | \"ES\" | null = null;\n let hasModuleExport = false;\n body.forEach(bodyElement => {\n if (isEsModuleType(bodyElement)) {\n if (kind === \"CommonJS\") {\n this.raise(FlowErrors.AmbiguousDeclareModuleKind, {\n at: bodyElement,\n });\n }\n kind = \"ES\";\n } else if (bodyElement.type === \"DeclareModuleExports\") {\n if (hasModuleExport) {\n this.raise(FlowErrors.DuplicateDeclareModuleExports, {\n at: bodyElement,\n });\n }\n if (kind === \"ES\") {\n this.raise(FlowErrors.AmbiguousDeclareModuleKind, {\n at: bodyElement,\n });\n }\n kind = \"CommonJS\";\n hasModuleExport = true;\n }\n });\n\n node.kind = kind || \"CommonJS\";\n return this.finishNode(node, \"DeclareModule\");\n }\n\n flowParseDeclareExportDeclaration(\n node: Undone,\n insideModule?: boolean | null,\n ): N.FlowDeclareExportDeclaration {\n this.expect(tt._export);\n\n if (this.eat(tt._default)) {\n if (this.match(tt._function) || this.match(tt._class)) {\n // declare export default class ...\n // declare export default function ...\n node.declaration = this.flowParseDeclare(this.startNode());\n } else {\n // declare export default [type];\n node.declaration = this.flowParseType();\n this.semicolon();\n }\n node.default = true;\n\n return this.finishNode(node, \"DeclareExportDeclaration\");\n } else {\n if (\n this.match(tt._const) ||\n this.isLet() ||\n ((this.isContextual(tt._type) || this.isContextual(tt._interface)) &&\n !insideModule)\n ) {\n const label = this.state.value as\n | \"const\"\n | \"let\"\n | \"type\"\n | \"interface\";\n throw this.raise(FlowErrors.UnsupportedDeclareExportKind, {\n at: this.state.startLoc,\n unsupportedExportKind: label,\n suggestion: exportSuggestions[label],\n });\n }\n\n if (\n this.match(tt._var) || // declare export var ...\n this.match(tt._function) || // declare export function ...\n this.match(tt._class) || // declare export class ...\n this.isContextual(tt._opaque) // declare export opaque ..\n ) {\n node.declaration = this.flowParseDeclare(this.startNode());\n node.default = false;\n\n return this.finishNode(node, \"DeclareExportDeclaration\");\n } else if (\n this.match(tt.star) || // declare export * from ''\n this.match(tt.braceL) || // declare export {} ...\n this.isContextual(tt._interface) || // declare export interface ...\n this.isContextual(tt._type) || // declare export type ...\n this.isContextual(tt._opaque) // declare export opaque type ...\n ) {\n node = this.parseExport(\n node as Undone,\n /* decorators */ null,\n );\n if (node.type === \"ExportNamedDeclaration\") {\n node.type = \"ExportDeclaration\";\n node.default = false;\n delete node.exportKind;\n }\n\n node.type = \"Declare\" + node.type;\n\n return node as N.Node;\n }\n }\n\n this.unexpected();\n }\n\n flowParseDeclareModuleExports(\n node: Undone,\n ): N.FlowDeclareModuleExports {\n this.next();\n this.expectContextual(tt._exports);\n node.typeAnnotation = this.flowParseTypeAnnotation();\n this.semicolon();\n\n return this.finishNode(node, \"DeclareModuleExports\");\n }\n\n flowParseDeclareTypeAlias(\n node: Undone,\n ): N.FlowDeclareTypeAlias {\n this.next();\n const finished = this.flowParseTypeAlias(node);\n // Don't do finishNode as we don't want to process comments twice\n finished.type = \"DeclareTypeAlias\";\n return finished;\n }\n\n flowParseDeclareOpaqueType(\n node: Undone,\n ): N.FlowDeclareOpaqueType {\n this.next();\n const finished = this.flowParseOpaqueType(node, true);\n // Don't do finishNode as we don't want to process comments twice\n finished.type = \"DeclareOpaqueType\";\n return finished;\n }\n\n flowParseDeclareInterface(\n node: Undone,\n ): N.FlowDeclareInterface {\n this.next();\n this.flowParseInterfaceish(node, /* isClass */ false);\n return this.finishNode(node, \"DeclareInterface\");\n }\n\n // Interfaces\n\n flowParseInterfaceish(node: Undone, isClass: boolean): void {\n node.id = this.flowParseRestrictedIdentifier(\n /* liberal */ !isClass,\n /* declaration */ true,\n );\n\n this.scope.declareName(\n node.id.name,\n isClass ? BIND_FUNCTION : BIND_LEXICAL,\n node.id.loc.start,\n );\n\n if (this.match(tt.lt)) {\n node.typeParameters = this.flowParseTypeParameterDeclaration();\n } else {\n node.typeParameters = null;\n }\n\n node.extends = [];\n\n if (this.eat(tt._extends)) {\n do {\n node.extends.push(this.flowParseInterfaceExtends());\n } while (!isClass && this.eat(tt.comma));\n }\n\n if (isClass) {\n node.implements = [];\n node.mixins = [];\n\n if (this.eatContextual(tt._mixins)) {\n do {\n node.mixins.push(this.flowParseInterfaceExtends());\n } while (this.eat(tt.comma));\n }\n\n if (this.eatContextual(tt._implements)) {\n do {\n node.implements.push(this.flowParseInterfaceExtends());\n } while (this.eat(tt.comma));\n }\n }\n\n node.body = this.flowParseObjectType({\n allowStatic: isClass,\n allowExact: false,\n allowSpread: false,\n allowProto: isClass,\n allowInexact: false,\n });\n }\n\n flowParseInterfaceExtends(): N.FlowInterfaceExtends {\n const node = this.startNode();\n\n node.id = this.flowParseQualifiedTypeIdentifier();\n if (this.match(tt.lt)) {\n node.typeParameters = this.flowParseTypeParameterInstantiation();\n } else {\n node.typeParameters = null;\n }\n\n return this.finishNode(node, \"InterfaceExtends\");\n }\n\n flowParseInterface(node: Undone): N.FlowInterface {\n this.flowParseInterfaceish(node, /* isClass */ false);\n return this.finishNode(node, \"InterfaceDeclaration\");\n }\n\n checkNotUnderscore(word: string) {\n if (word === \"_\") {\n this.raise(FlowErrors.UnexpectedReservedUnderscore, {\n at: this.state.startLoc,\n });\n }\n }\n\n checkReservedType(word: string, startLoc: Position, declaration?: boolean) {\n if (!reservedTypes.has(word)) return;\n\n this.raise(\n declaration\n ? FlowErrors.AssignReservedType\n : FlowErrors.UnexpectedReservedType,\n {\n at: startLoc,\n reservedType: word,\n },\n );\n }\n\n flowParseRestrictedIdentifier(\n liberal?: boolean,\n declaration?: boolean,\n ): N.Identifier {\n this.checkReservedType(\n this.state.value,\n this.state.startLoc,\n declaration,\n );\n return this.parseIdentifier(liberal);\n }\n\n // Type aliases\n\n flowParseTypeAlias(node: Undone): N.FlowTypeAlias {\n node.id = this.flowParseRestrictedIdentifier(\n /* liberal */ false,\n /* declaration */ true,\n );\n this.scope.declareName(node.id.name, BIND_LEXICAL, node.id.loc.start);\n\n if (this.match(tt.lt)) {\n node.typeParameters = this.flowParseTypeParameterDeclaration();\n } else {\n node.typeParameters = null;\n }\n\n node.right = this.flowParseTypeInitialiser(tt.eq);\n this.semicolon();\n\n return this.finishNode(node, \"TypeAlias\");\n }\n\n flowParseOpaqueType(\n node: Undone,\n declare: boolean,\n ): N.FlowOpaqueType {\n this.expectContextual(tt._type);\n node.id = this.flowParseRestrictedIdentifier(\n /* liberal */ true,\n /* declaration */ true,\n );\n this.scope.declareName(node.id.name, BIND_LEXICAL, node.id.loc.start);\n\n if (this.match(tt.lt)) {\n node.typeParameters = this.flowParseTypeParameterDeclaration();\n } else {\n node.typeParameters = null;\n }\n\n // Parse the supertype\n node.supertype = null;\n if (this.match(tt.colon)) {\n node.supertype = this.flowParseTypeInitialiser(tt.colon);\n }\n\n node.impltype = null;\n if (!declare) {\n node.impltype = this.flowParseTypeInitialiser(tt.eq);\n }\n this.semicolon();\n\n return this.finishNode(node, \"OpaqueType\");\n }\n\n // Type annotations\n\n flowParseTypeParameter(requireDefault: boolean = false): N.TypeParameter {\n const nodeStartLoc = this.state.startLoc;\n\n const node = this.startNode();\n\n const variance = this.flowParseVariance();\n\n const ident = this.flowParseTypeAnnotatableIdentifier();\n node.name = ident.name;\n // @ts-expect-error migrate to Babel types\n node.variance = variance;\n // @ts-expect-error migrate to Babel types\n node.bound = ident.typeAnnotation;\n\n if (this.match(tt.eq)) {\n this.eat(tt.eq);\n // @ts-expect-error migrate to Babel types\n node.default = this.flowParseType();\n } else {\n if (requireDefault) {\n this.raise(FlowErrors.MissingTypeParamDefault, { at: nodeStartLoc });\n }\n }\n\n return this.finishNode(node, \"TypeParameter\");\n }\n\n flowParseTypeParameterDeclaration(): N.TypeParameterDeclaration {\n const oldInType = this.state.inType;\n const node = this.startNode();\n node.params = [];\n\n this.state.inType = true;\n\n // istanbul ignore else: this condition is already checked at all call sites\n if (this.match(tt.lt) || this.match(tt.jsxTagStart)) {\n this.next();\n } else {\n this.unexpected();\n }\n\n let defaultRequired = false;\n\n do {\n const typeParameter = this.flowParseTypeParameter(defaultRequired);\n\n node.params.push(typeParameter);\n\n if (typeParameter.default) {\n defaultRequired = true;\n }\n\n if (!this.match(tt.gt)) {\n this.expect(tt.comma);\n }\n } while (!this.match(tt.gt));\n this.expect(tt.gt);\n\n this.state.inType = oldInType;\n\n return this.finishNode(node, \"TypeParameterDeclaration\");\n }\n\n flowParseTypeParameterInstantiation(): N.TypeParameterInstantiation {\n const node = this.startNode();\n const oldInType = this.state.inType;\n node.params = [];\n\n this.state.inType = true;\n\n this.expect(tt.lt);\n const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n this.state.noAnonFunctionType = false;\n while (!this.match(tt.gt)) {\n node.params.push(this.flowParseType());\n if (!this.match(tt.gt)) {\n this.expect(tt.comma);\n }\n }\n this.state.noAnonFunctionType = oldNoAnonFunctionType;\n this.expect(tt.gt);\n\n this.state.inType = oldInType;\n\n return this.finishNode(node, \"TypeParameterInstantiation\");\n }\n\n flowParseTypeParameterInstantiationCallOrNew(): N.TypeParameterInstantiation {\n const node = this.startNode();\n const oldInType = this.state.inType;\n node.params = [];\n\n this.state.inType = true;\n\n this.expect(tt.lt);\n while (!this.match(tt.gt)) {\n node.params.push(this.flowParseTypeOrImplicitInstantiation());\n if (!this.match(tt.gt)) {\n this.expect(tt.comma);\n }\n }\n this.expect(tt.gt);\n\n this.state.inType = oldInType;\n\n return this.finishNode(node, \"TypeParameterInstantiation\");\n }\n\n flowParseInterfaceType(): N.FlowInterfaceType {\n const node = this.startNode();\n this.expectContextual(tt._interface);\n\n node.extends = [];\n if (this.eat(tt._extends)) {\n do {\n node.extends.push(this.flowParseInterfaceExtends());\n } while (this.eat(tt.comma));\n }\n\n node.body = this.flowParseObjectType({\n allowStatic: false,\n allowExact: false,\n allowSpread: false,\n allowProto: false,\n allowInexact: false,\n });\n\n return this.finishNode(node, \"InterfaceTypeAnnotation\");\n }\n\n flowParseObjectPropertyKey(): N.Expression {\n return this.match(tt.num) || this.match(tt.string)\n ? super.parseExprAtom()\n : this.parseIdentifier(true);\n }\n\n flowParseObjectTypeIndexer(\n node: Undone,\n isStatic: boolean,\n variance?: N.FlowVariance | null,\n ): N.FlowObjectTypeIndexer {\n node.static = isStatic;\n\n // Note: bracketL has already been consumed\n if (this.lookahead().type === tt.colon) {\n node.id = this.flowParseObjectPropertyKey();\n node.key = this.flowParseTypeInitialiser();\n } else {\n node.id = null;\n node.key = this.flowParseType();\n }\n this.expect(tt.bracketR);\n node.value = this.flowParseTypeInitialiser();\n node.variance = variance;\n\n return this.finishNode(node, \"ObjectTypeIndexer\");\n }\n\n flowParseObjectTypeInternalSlot(\n node: Undone,\n isStatic: boolean,\n ): N.FlowObjectTypeInternalSlot {\n node.static = isStatic;\n // Note: both bracketL have already been consumed\n node.id = this.flowParseObjectPropertyKey();\n this.expect(tt.bracketR);\n this.expect(tt.bracketR);\n if (this.match(tt.lt) || this.match(tt.parenL)) {\n node.method = true;\n node.optional = false;\n node.value = this.flowParseObjectTypeMethodish(\n this.startNodeAt(node.loc.start),\n );\n } else {\n node.method = false;\n if (this.eat(tt.question)) {\n node.optional = true;\n }\n node.value = this.flowParseTypeInitialiser();\n }\n return this.finishNode(node, \"ObjectTypeInternalSlot\");\n }\n\n flowParseObjectTypeMethodish(\n node: Undone,\n ): N.FlowFunctionTypeAnnotation {\n node.params = [];\n node.rest = null;\n node.typeParameters = null;\n node.this = null;\n\n if (this.match(tt.lt)) {\n node.typeParameters = this.flowParseTypeParameterDeclaration();\n }\n\n this.expect(tt.parenL);\n if (this.match(tt._this)) {\n node.this = this.flowParseFunctionTypeParam(/* first */ true);\n // match Flow parser behavior\n node.this.name = null;\n if (!this.match(tt.parenR)) {\n this.expect(tt.comma);\n }\n }\n while (!this.match(tt.parenR) && !this.match(tt.ellipsis)) {\n node.params.push(this.flowParseFunctionTypeParam(false));\n if (!this.match(tt.parenR)) {\n this.expect(tt.comma);\n }\n }\n\n if (this.eat(tt.ellipsis)) {\n node.rest = this.flowParseFunctionTypeParam(false);\n }\n this.expect(tt.parenR);\n node.returnType = this.flowParseTypeInitialiser();\n\n return this.finishNode(node, \"FunctionTypeAnnotation\");\n }\n\n flowParseObjectTypeCallProperty(\n node: Undone,\n isStatic: boolean,\n ): N.FlowObjectTypeCallProperty {\n const valueNode = this.startNode();\n node.static = isStatic;\n node.value = this.flowParseObjectTypeMethodish(valueNode);\n return this.finishNode(node, \"ObjectTypeCallProperty\");\n }\n\n flowParseObjectType({\n allowStatic,\n allowExact,\n allowSpread,\n allowProto,\n allowInexact,\n }: {\n allowStatic: boolean;\n allowExact: boolean;\n allowSpread: boolean;\n allowProto: boolean;\n allowInexact: boolean;\n }): N.FlowObjectTypeAnnotation {\n const oldInType = this.state.inType;\n this.state.inType = true;\n\n const nodeStart = this.startNode();\n\n nodeStart.callProperties = [];\n nodeStart.properties = [];\n nodeStart.indexers = [];\n nodeStart.internalSlots = [];\n\n let endDelim;\n let exact;\n let inexact = false;\n if (allowExact && this.match(tt.braceBarL)) {\n this.expect(tt.braceBarL);\n endDelim = tt.braceBarR;\n exact = true;\n } else {\n this.expect(tt.braceL);\n endDelim = tt.braceR;\n exact = false;\n }\n\n nodeStart.exact = exact;\n\n while (!this.match(endDelim)) {\n let isStatic = false;\n let protoStartLoc: Position | undefined | null = null;\n let inexactStartLoc: Position | undefined | null = null;\n const node = this.startNode();\n\n if (allowProto && this.isContextual(tt._proto)) {\n const lookahead = this.lookahead();\n\n if (lookahead.type !== tt.colon && lookahead.type !== tt.question) {\n this.next();\n protoStartLoc = this.state.startLoc;\n allowStatic = false;\n }\n }\n\n if (allowStatic && this.isContextual(tt._static)) {\n const lookahead = this.lookahead();\n\n // static is a valid identifier name\n if (lookahead.type !== tt.colon && lookahead.type !== tt.question) {\n this.next();\n isStatic = true;\n }\n }\n\n const variance = this.flowParseVariance();\n\n if (this.eat(tt.bracketL)) {\n if (protoStartLoc != null) {\n this.unexpected(protoStartLoc);\n }\n if (this.eat(tt.bracketL)) {\n if (variance) {\n this.unexpected(variance.loc.start);\n }\n nodeStart.internalSlots.push(\n this.flowParseObjectTypeInternalSlot(node, isStatic),\n );\n } else {\n nodeStart.indexers.push(\n this.flowParseObjectTypeIndexer(node, isStatic, variance),\n );\n }\n } else if (this.match(tt.parenL) || this.match(tt.lt)) {\n if (protoStartLoc != null) {\n this.unexpected(protoStartLoc);\n }\n if (variance) {\n this.unexpected(variance.loc.start);\n }\n nodeStart.callProperties.push(\n this.flowParseObjectTypeCallProperty(node, isStatic),\n );\n } else {\n let kind = \"init\";\n\n if (this.isContextual(tt._get) || this.isContextual(tt._set)) {\n const lookahead = this.lookahead();\n if (tokenIsLiteralPropertyName(lookahead.type)) {\n kind = this.state.value;\n this.next();\n }\n }\n\n const propOrInexact = this.flowParseObjectTypeProperty(\n node,\n isStatic,\n protoStartLoc,\n variance,\n kind,\n allowSpread,\n allowInexact ?? !exact,\n );\n\n if (propOrInexact === null) {\n inexact = true;\n inexactStartLoc = this.state.lastTokStartLoc;\n } else {\n nodeStart.properties.push(propOrInexact);\n }\n }\n\n this.flowObjectTypeSemicolon();\n\n if (\n inexactStartLoc &&\n !this.match(tt.braceR) &&\n !this.match(tt.braceBarR)\n ) {\n this.raise(FlowErrors.UnexpectedExplicitInexactInObject, {\n at: inexactStartLoc,\n });\n }\n }\n\n this.expect(endDelim);\n\n /* The inexact flag should only be added on ObjectTypeAnnotations that\n * are not the body of an interface, declare interface, or declare class.\n * Since spreads are only allowed in object types, checking that is\n * sufficient here.\n */\n if (allowSpread) {\n nodeStart.inexact = inexact;\n }\n\n const out = this.finishNode(nodeStart, \"ObjectTypeAnnotation\");\n\n this.state.inType = oldInType;\n\n return out;\n }\n\n flowParseObjectTypeProperty(\n node: Undone,\n isStatic: boolean,\n protoStartLoc: Position | undefined | null,\n variance: N.FlowVariance | undefined | null,\n kind: string,\n allowSpread: boolean,\n allowInexact: boolean,\n ): N.FlowObjectTypeProperty | N.FlowObjectTypeSpreadProperty | null {\n if (this.eat(tt.ellipsis)) {\n const isInexactToken =\n this.match(tt.comma) ||\n this.match(tt.semi) ||\n this.match(tt.braceR) ||\n this.match(tt.braceBarR);\n\n if (isInexactToken) {\n if (!allowSpread) {\n this.raise(FlowErrors.InexactInsideNonObject, {\n at: this.state.lastTokStartLoc,\n });\n } else if (!allowInexact) {\n this.raise(FlowErrors.InexactInsideExact, {\n at: this.state.lastTokStartLoc,\n });\n }\n if (variance) {\n this.raise(FlowErrors.InexactVariance, { at: variance });\n }\n\n return null;\n }\n\n if (!allowSpread) {\n this.raise(FlowErrors.UnexpectedSpreadType, {\n at: this.state.lastTokStartLoc,\n });\n }\n if (protoStartLoc != null) {\n this.unexpected(protoStartLoc);\n }\n if (variance) {\n this.raise(FlowErrors.SpreadVariance, { at: variance });\n }\n\n node.argument = this.flowParseType();\n return this.finishNode(node, \"ObjectTypeSpreadProperty\");\n } else {\n node.key = this.flowParseObjectPropertyKey();\n node.static = isStatic;\n node.proto = protoStartLoc != null;\n node.kind = kind;\n\n let optional = false;\n if (this.match(tt.lt) || this.match(tt.parenL)) {\n // This is a method property\n node.method = true;\n\n if (protoStartLoc != null) {\n this.unexpected(protoStartLoc);\n }\n if (variance) {\n this.unexpected(variance.loc.start);\n }\n\n node.value = this.flowParseObjectTypeMethodish(\n this.startNodeAt(node.loc.start),\n );\n if (kind === \"get\" || kind === \"set\") {\n this.flowCheckGetterSetterParams(node);\n }\n /** Declared classes/interfaces do not allow spread */\n if (\n !allowSpread &&\n node.key.name === \"constructor\" &&\n node.value.this\n ) {\n this.raise(FlowErrors.ThisParamBannedInConstructor, {\n at: node.value.this,\n });\n }\n } else {\n if (kind !== \"init\") this.unexpected();\n\n node.method = false;\n\n if (this.eat(tt.question)) {\n optional = true;\n }\n node.value = this.flowParseTypeInitialiser();\n node.variance = variance;\n }\n\n node.optional = optional;\n\n return this.finishNode(node, \"ObjectTypeProperty\");\n }\n }\n\n // This is similar to checkGetterSetterParams, but as\n // @babel/parser uses non estree properties we cannot reuse it here\n flowCheckGetterSetterParams(\n property: Undone<\n N.FlowObjectTypeProperty | N.FlowObjectTypeSpreadProperty\n >,\n ): void {\n const paramCount = property.kind === \"get\" ? 0 : 1;\n const length =\n property.value.params.length + (property.value.rest ? 1 : 0);\n\n if (property.value.this) {\n this.raise(\n property.kind === \"get\"\n ? FlowErrors.GetterMayNotHaveThisParam\n : FlowErrors.SetterMayNotHaveThisParam,\n { at: property.value.this },\n );\n }\n\n if (length !== paramCount) {\n this.raise(\n property.kind === \"get\"\n ? Errors.BadGetterArity\n : Errors.BadSetterArity,\n { at: property },\n );\n }\n\n if (property.kind === \"set\" && property.value.rest) {\n this.raise(Errors.BadSetterRestParameter, { at: property });\n }\n }\n\n flowObjectTypeSemicolon(): void {\n if (\n !this.eat(tt.semi) &&\n !this.eat(tt.comma) &&\n !this.match(tt.braceR) &&\n !this.match(tt.braceBarR)\n ) {\n this.unexpected();\n }\n }\n\n flowParseQualifiedTypeIdentifier(\n startLoc?: Position,\n id?: N.Identifier,\n ): N.FlowQualifiedTypeIdentifier {\n startLoc ??= this.state.startLoc;\n let node: N.Identifier | N.FlowQualifiedTypeIdentifier =\n id || this.flowParseRestrictedIdentifier(true);\n\n while (this.eat(tt.dot)) {\n const node2 = this.startNodeAt(startLoc);\n node2.qualification = node;\n node2.id = this.flowParseRestrictedIdentifier(true);\n node = this.finishNode(node2, \"QualifiedTypeIdentifier\");\n }\n\n return node;\n }\n\n flowParseGenericType(\n startLoc: Position,\n id: N.Identifier,\n ): N.FlowGenericTypeAnnotation {\n const node = this.startNodeAt(startLoc);\n\n node.typeParameters = null;\n node.id = this.flowParseQualifiedTypeIdentifier(startLoc, id);\n\n if (this.match(tt.lt)) {\n node.typeParameters = this.flowParseTypeParameterInstantiation();\n }\n\n return this.finishNode(node, \"GenericTypeAnnotation\");\n }\n\n flowParseTypeofType(): N.FlowTypeofTypeAnnotation {\n const node = this.startNode();\n this.expect(tt._typeof);\n node.argument = this.flowParsePrimaryType();\n return this.finishNode(node, \"TypeofTypeAnnotation\");\n }\n\n flowParseTupleType(): N.FlowTupleTypeAnnotation {\n const node = this.startNode();\n node.types = [];\n this.expect(tt.bracketL);\n // We allow trailing commas\n while (this.state.pos < this.length && !this.match(tt.bracketR)) {\n node.types.push(this.flowParseType());\n if (this.match(tt.bracketR)) break;\n this.expect(tt.comma);\n }\n this.expect(tt.bracketR);\n return this.finishNode(node, \"TupleTypeAnnotation\");\n }\n\n flowParseFunctionTypeParam(first: boolean): N.FlowFunctionTypeParam {\n let name = null;\n let optional = false;\n let typeAnnotation = null;\n const node = this.startNode();\n const lh = this.lookahead();\n const isThis = this.state.type === tt._this;\n\n if (lh.type === tt.colon || lh.type === tt.question) {\n if (isThis && !first) {\n this.raise(FlowErrors.ThisParamMustBeFirst, { at: node });\n }\n name = this.parseIdentifier(isThis);\n if (this.eat(tt.question)) {\n optional = true;\n if (isThis) {\n this.raise(FlowErrors.ThisParamMayNotBeOptional, { at: node });\n }\n }\n typeAnnotation = this.flowParseTypeInitialiser();\n } else {\n typeAnnotation = this.flowParseType();\n }\n node.name = name;\n node.optional = optional;\n node.typeAnnotation = typeAnnotation;\n return this.finishNode(node, \"FunctionTypeParam\");\n }\n\n reinterpretTypeAsFunctionTypeParam(\n type: N.FlowType,\n ): N.FlowFunctionTypeParam {\n const node = this.startNodeAt(type.loc.start);\n node.name = null;\n node.optional = false;\n node.typeAnnotation = type;\n return this.finishNode(node, \"FunctionTypeParam\");\n }\n\n flowParseFunctionTypeParams(params: N.FlowFunctionTypeParam[] = []): {\n params: N.FlowFunctionTypeParam[];\n rest: N.FlowFunctionTypeParam | undefined | null;\n _this: N.FlowFunctionTypeParam | undefined | null;\n } {\n let rest: N.FlowFunctionTypeParam | undefined | null = null;\n let _this: N.FlowFunctionTypeParam | undefined | null = null;\n if (this.match(tt._this)) {\n _this = this.flowParseFunctionTypeParam(/* first */ true);\n // match Flow parser behavior\n _this.name = null;\n if (!this.match(tt.parenR)) {\n this.expect(tt.comma);\n }\n }\n while (!this.match(tt.parenR) && !this.match(tt.ellipsis)) {\n params.push(this.flowParseFunctionTypeParam(false));\n if (!this.match(tt.parenR)) {\n this.expect(tt.comma);\n }\n }\n if (this.eat(tt.ellipsis)) {\n rest = this.flowParseFunctionTypeParam(false);\n }\n return { params, rest, _this };\n }\n\n flowIdentToTypeAnnotation(\n startLoc: Position,\n node: Undone,\n id: N.Identifier,\n ): N.FlowTypeAnnotation {\n switch (id.name) {\n case \"any\":\n return this.finishNode(node, \"AnyTypeAnnotation\");\n\n case \"bool\":\n case \"boolean\":\n return this.finishNode(node, \"BooleanTypeAnnotation\");\n\n case \"mixed\":\n return this.finishNode(node, \"MixedTypeAnnotation\");\n\n case \"empty\":\n return this.finishNode(node, \"EmptyTypeAnnotation\");\n\n case \"number\":\n return this.finishNode(node, \"NumberTypeAnnotation\");\n\n case \"string\":\n return this.finishNode(node, \"StringTypeAnnotation\");\n\n case \"symbol\":\n return this.finishNode(node, \"SymbolTypeAnnotation\");\n\n default:\n this.checkNotUnderscore(id.name);\n return this.flowParseGenericType(startLoc, id);\n }\n }\n\n // The parsing of types roughly parallels the parsing of expressions, and\n // primary types are kind of like primary expressions...they're the\n // primitives with which other types are constructed.\n flowParsePrimaryType(): N.FlowTypeAnnotation {\n const startLoc = this.state.startLoc;\n const node = this.startNode();\n let tmp;\n let type;\n let isGroupedType = false;\n const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n\n switch (this.state.type) {\n case tt.braceL:\n return this.flowParseObjectType({\n allowStatic: false,\n allowExact: false,\n allowSpread: true,\n allowProto: false,\n allowInexact: true,\n });\n\n case tt.braceBarL:\n return this.flowParseObjectType({\n allowStatic: false,\n allowExact: true,\n allowSpread: true,\n allowProto: false,\n allowInexact: false,\n });\n\n case tt.bracketL:\n this.state.noAnonFunctionType = false;\n type = this.flowParseTupleType();\n this.state.noAnonFunctionType = oldNoAnonFunctionType;\n return type;\n\n case tt.lt:\n node.typeParameters = this.flowParseTypeParameterDeclaration();\n this.expect(tt.parenL);\n tmp = this.flowParseFunctionTypeParams();\n node.params = tmp.params;\n node.rest = tmp.rest;\n node.this = tmp._this;\n this.expect(tt.parenR);\n\n this.expect(tt.arrow);\n\n node.returnType = this.flowParseType();\n\n return this.finishNode(node, \"FunctionTypeAnnotation\");\n\n case tt.parenL:\n this.next();\n\n // Check to see if this is actually a grouped type\n if (!this.match(tt.parenR) && !this.match(tt.ellipsis)) {\n if (tokenIsIdentifier(this.state.type) || this.match(tt._this)) {\n const token = this.lookahead().type;\n isGroupedType = token !== tt.question && token !== tt.colon;\n } else {\n isGroupedType = true;\n }\n }\n\n if (isGroupedType) {\n this.state.noAnonFunctionType = false;\n type = this.flowParseType();\n this.state.noAnonFunctionType = oldNoAnonFunctionType;\n\n // A `,` or a `) =>` means this is an anonymous function type\n if (\n this.state.noAnonFunctionType ||\n !(\n this.match(tt.comma) ||\n (this.match(tt.parenR) && this.lookahead().type === tt.arrow)\n )\n ) {\n this.expect(tt.parenR);\n return type;\n } else {\n // Eat a comma if there is one\n this.eat(tt.comma);\n }\n }\n\n if (type) {\n tmp = this.flowParseFunctionTypeParams([\n this.reinterpretTypeAsFunctionTypeParam(type),\n ]);\n } else {\n tmp = this.flowParseFunctionTypeParams();\n }\n\n node.params = tmp.params;\n node.rest = tmp.rest;\n node.this = tmp._this;\n\n this.expect(tt.parenR);\n\n this.expect(tt.arrow);\n\n node.returnType = this.flowParseType();\n\n node.typeParameters = null;\n\n return this.finishNode(node, \"FunctionTypeAnnotation\");\n\n case tt.string:\n return this.parseLiteral(\n this.state.value,\n \"StringLiteralTypeAnnotation\",\n );\n\n case tt._true:\n case tt._false:\n node.value = this.match(tt._true);\n this.next();\n return this.finishNode(\n node as Undone,\n \"BooleanLiteralTypeAnnotation\",\n );\n\n case tt.plusMin:\n if (this.state.value === \"-\") {\n this.next();\n if (this.match(tt.num)) {\n return this.parseLiteralAtNode(\n -this.state.value,\n \"NumberLiteralTypeAnnotation\",\n node,\n );\n }\n\n if (this.match(tt.bigint)) {\n return this.parseLiteralAtNode(\n -this.state.value,\n \"BigIntLiteralTypeAnnotation\",\n node,\n );\n }\n\n throw this.raise(FlowErrors.UnexpectedSubtractionOperand, {\n at: this.state.startLoc,\n });\n }\n this.unexpected();\n return;\n case tt.num:\n return this.parseLiteral(\n this.state.value,\n \"NumberLiteralTypeAnnotation\",\n );\n\n case tt.bigint:\n return this.parseLiteral(\n this.state.value,\n \"BigIntLiteralTypeAnnotation\",\n );\n\n case tt._void:\n this.next();\n return this.finishNode(node, \"VoidTypeAnnotation\");\n\n case tt._null:\n this.next();\n return this.finishNode(node, \"NullLiteralTypeAnnotation\");\n\n case tt._this:\n this.next();\n return this.finishNode(node, \"ThisTypeAnnotation\");\n\n case tt.star:\n this.next();\n return this.finishNode(node, \"ExistsTypeAnnotation\");\n\n case tt._typeof:\n return this.flowParseTypeofType();\n\n default:\n if (tokenIsKeyword(this.state.type)) {\n const label = tokenLabelName(this.state.type);\n this.next();\n return super.createIdentifier(node as Undone, label);\n } else if (tokenIsIdentifier(this.state.type)) {\n if (this.isContextual(tt._interface)) {\n return this.flowParseInterfaceType();\n }\n\n return this.flowIdentToTypeAnnotation(\n startLoc,\n node,\n this.parseIdentifier(),\n );\n }\n }\n\n this.unexpected();\n }\n\n flowParsePostfixType(): N.FlowTypeAnnotation {\n const startLoc = this.state.startLoc;\n let type = this.flowParsePrimaryType();\n let seenOptionalIndexedAccess = false;\n while (\n (this.match(tt.bracketL) || this.match(tt.questionDot)) &&\n !this.canInsertSemicolon()\n ) {\n const node = this.startNodeAt(startLoc);\n const optional = this.eat(tt.questionDot);\n seenOptionalIndexedAccess = seenOptionalIndexedAccess || optional;\n this.expect(tt.bracketL);\n if (!optional && this.match(tt.bracketR)) {\n node.elementType = type;\n this.next(); // eat `]`\n type = this.finishNode(node, \"ArrayTypeAnnotation\");\n } else {\n node.objectType = type;\n node.indexType = this.flowParseType();\n this.expect(tt.bracketR);\n if (seenOptionalIndexedAccess) {\n node.optional = optional;\n type = this.finishNode(\n // @ts-expect-error todo(flow->ts)\n node,\n \"OptionalIndexedAccessType\",\n );\n } else {\n type = this.finishNode(\n // @ts-expect-error todo(flow->ts)\n node,\n \"IndexedAccessType\",\n );\n }\n }\n }\n return type;\n }\n\n flowParsePrefixType(): N.FlowTypeAnnotation {\n const node = this.startNode();\n if (this.eat(tt.question)) {\n node.typeAnnotation = this.flowParsePrefixType();\n return this.finishNode(node, \"NullableTypeAnnotation\");\n } else {\n return this.flowParsePostfixType();\n }\n }\n\n flowParseAnonFunctionWithoutParens(): N.FlowTypeAnnotation {\n const param = this.flowParsePrefixType();\n if (!this.state.noAnonFunctionType && this.eat(tt.arrow)) {\n // TODO: This should be a type error. Passing in a SourceLocation, and it expects a Position.\n const node = this.startNodeAt(param.loc.start);\n node.params = [this.reinterpretTypeAsFunctionTypeParam(param)];\n node.rest = null;\n node.this = null;\n node.returnType = this.flowParseType();\n node.typeParameters = null;\n return this.finishNode(node, \"FunctionTypeAnnotation\");\n }\n return param;\n }\n\n flowParseIntersectionType(): N.FlowTypeAnnotation {\n const node = this.startNode();\n this.eat(tt.bitwiseAND);\n const type = this.flowParseAnonFunctionWithoutParens();\n node.types = [type];\n while (this.eat(tt.bitwiseAND)) {\n node.types.push(this.flowParseAnonFunctionWithoutParens());\n }\n return node.types.length === 1\n ? type\n : this.finishNode(node, \"IntersectionTypeAnnotation\");\n }\n\n flowParseUnionType(): N.FlowTypeAnnotation {\n const node = this.startNode();\n this.eat(tt.bitwiseOR);\n const type = this.flowParseIntersectionType();\n node.types = [type];\n while (this.eat(tt.bitwiseOR)) {\n node.types.push(this.flowParseIntersectionType());\n }\n return node.types.length === 1\n ? type\n : this.finishNode(node, \"UnionTypeAnnotation\");\n }\n\n flowParseType(): N.FlowTypeAnnotation {\n const oldInType = this.state.inType;\n this.state.inType = true;\n const type = this.flowParseUnionType();\n this.state.inType = oldInType;\n return type;\n }\n\n flowParseTypeOrImplicitInstantiation(): N.FlowTypeAnnotation {\n if (this.state.type === tt.name && this.state.value === \"_\") {\n const startLoc = this.state.startLoc;\n const node = this.parseIdentifier();\n return this.flowParseGenericType(startLoc, node);\n } else {\n return this.flowParseType();\n }\n }\n\n flowParseTypeAnnotation(): N.FlowTypeAnnotation {\n const node = this.startNode();\n node.typeAnnotation = this.flowParseTypeInitialiser();\n return this.finishNode(node, \"TypeAnnotation\");\n }\n\n flowParseTypeAnnotatableIdentifier(\n allowPrimitiveOverride?: boolean,\n ): N.Identifier {\n const ident = allowPrimitiveOverride\n ? this.parseIdentifier()\n : this.flowParseRestrictedIdentifier();\n if (this.match(tt.colon)) {\n // @ts-expect-error: refine typings\n ident.typeAnnotation = this.flowParseTypeAnnotation();\n this.resetEndLocation(ident);\n }\n return ident;\n }\n\n typeCastToParameter(node: N.Node): N.Node {\n node.expression.typeAnnotation = node.typeAnnotation;\n\n this.resetEndLocation(node.expression, node.typeAnnotation.loc.end);\n\n return node.expression;\n }\n\n flowParseVariance(): N.FlowVariance | undefined | null {\n let variance = null;\n if (this.match(tt.plusMin)) {\n variance = this.startNode();\n if (this.state.value === \"+\") {\n variance.kind = \"plus\";\n } else {\n variance.kind = \"minus\";\n }\n this.next();\n return this.finishNode(variance, \"Variance\");\n }\n return variance;\n }\n\n // ==================================\n // Overrides\n // ==================================\n\n parseFunctionBody(\n node: N.Function,\n allowExpressionBody?: boolean | null,\n isMethod: boolean = false,\n ): void {\n if (allowExpressionBody) {\n this.forwardNoArrowParamsConversionAt(node, () =>\n super.parseFunctionBody(node, true, isMethod),\n );\n return;\n }\n\n super.parseFunctionBody(node, false, isMethod);\n }\n\n parseFunctionBodyAndFinish<\n T extends\n | N.Function\n | N.TSDeclareMethod\n | N.TSDeclareFunction\n | N.ClassPrivateMethod,\n >(node: Undone, type: T[\"type\"], isMethod: boolean = false): T {\n if (this.match(tt.colon)) {\n const typeNode = this.startNode();\n\n [\n typeNode.typeAnnotation,\n // @ts-expect-error predicate may not exist\n node.predicate,\n ] = this.flowParseTypeAndPredicateInitialiser();\n\n node.returnType = typeNode.typeAnnotation\n ? this.finishNode(typeNode, \"TypeAnnotation\")\n : null;\n }\n\n return super.parseFunctionBodyAndFinish(node, type, isMethod);\n }\n\n // interfaces and enums\n parseStatementLike(flags: ParseStatementFlag): N.Statement {\n // strict mode handling of `interface` since it's a reserved word\n if (this.state.strict && this.isContextual(tt._interface)) {\n const lookahead = this.lookahead();\n if (tokenIsKeywordOrIdentifier(lookahead.type)) {\n const node = this.startNode();\n this.next();\n return this.flowParseInterface(node);\n }\n } else if (this.shouldParseEnums() && this.isContextual(tt._enum)) {\n const node = this.startNode();\n this.next();\n return this.flowParseEnumDeclaration(node);\n }\n const stmt = super.parseStatementLike(flags);\n // We will parse a flow pragma in any comment before the first statement.\n if (this.flowPragma === undefined && !this.isValidDirective(stmt)) {\n this.flowPragma = null;\n }\n return stmt;\n }\n\n // declares, interfaces and type aliases\n parseExpressionStatement(\n node: N.ExpressionStatement,\n expr: N.Expression,\n decorators: N.Decorator[] | null,\n ): N.ExpressionStatement {\n if (expr.type === \"Identifier\") {\n if (expr.name === \"declare\") {\n if (\n this.match(tt._class) ||\n tokenIsIdentifier(this.state.type) ||\n this.match(tt._function) ||\n this.match(tt._var) ||\n this.match(tt._export)\n ) {\n // @ts-expect-error: refine typings\n return this.flowParseDeclare(node);\n }\n } else if (tokenIsIdentifier(this.state.type)) {\n if (expr.name === \"interface\") {\n // @ts-expect-error: refine typings\n return this.flowParseInterface(node);\n } else if (expr.name === \"type\") {\n // @ts-expect-error: refine typings\n return this.flowParseTypeAlias(node);\n } else if (expr.name === \"opaque\") {\n // @ts-expect-error: refine typings\n return this.flowParseOpaqueType(node, false);\n }\n }\n }\n\n return super.parseExpressionStatement(node, expr, decorators);\n }\n\n // export type\n shouldParseExportDeclaration(): boolean {\n const { type } = this.state;\n if (\n tokenIsFlowInterfaceOrTypeOrOpaque(type) ||\n (this.shouldParseEnums() && type === tt._enum)\n ) {\n return !this.state.containsEsc;\n }\n return super.shouldParseExportDeclaration();\n }\n\n isExportDefaultSpecifier(): boolean {\n const { type } = this.state;\n if (\n tokenIsFlowInterfaceOrTypeOrOpaque(type) ||\n (this.shouldParseEnums() && type === tt._enum)\n ) {\n return this.state.containsEsc;\n }\n\n return super.isExportDefaultSpecifier();\n }\n\n parseExportDefaultExpression(): N.Expression | N.Declaration {\n if (this.shouldParseEnums() && this.isContextual(tt._enum)) {\n const node = this.startNode();\n this.next();\n return this.flowParseEnumDeclaration(node);\n }\n return super.parseExportDefaultExpression();\n }\n\n parseConditional(\n expr: N.Expression,\n\n startLoc: Position,\n refExpressionErrors?: ExpressionErrors | null,\n ): N.Expression {\n if (!this.match(tt.question)) return expr;\n\n if (this.state.maybeInArrowParameters) {\n const nextCh = this.lookaheadCharCode();\n // These tokens cannot start an expression, so if one of them follows\n // ? then we are probably in an arrow function parameters list and we\n // don't parse the conditional expression.\n if (\n nextCh === charCodes.comma || // (a?, b) => c\n nextCh === charCodes.equalsTo || // (a? = b) => c\n nextCh === charCodes.colon || // (a?: b) => c\n nextCh === charCodes.rightParenthesis // (a?) => c\n ) {\n /*:: invariant(refExpressionErrors != null) */\n this.setOptionalParametersError(refExpressionErrors);\n return expr;\n }\n }\n\n this.expect(tt.question);\n const state = this.state.clone();\n const originalNoArrowAt = this.state.noArrowAt;\n const node = this.startNodeAt(startLoc);\n let { consequent, failed } = this.tryParseConditionalConsequent();\n let [valid, invalid] = this.getArrowLikeExpressions(consequent);\n\n if (failed || invalid.length > 0) {\n const noArrowAt = [...originalNoArrowAt];\n\n if (invalid.length > 0) {\n this.state = state;\n this.state.noArrowAt = noArrowAt;\n\n for (let i = 0; i < invalid.length; i++) {\n noArrowAt.push(invalid[i].start);\n }\n\n ({ consequent, failed } = this.tryParseConditionalConsequent());\n [valid, invalid] = this.getArrowLikeExpressions(consequent);\n }\n\n if (failed && valid.length > 1) {\n // if there are two or more possible correct ways of parsing, throw an\n // error.\n // e.g. Source: a ? (b): c => (d): e => f\n // Result 1: a ? b : (c => ((d): e => f))\n // Result 2: a ? ((b): c => d) : (e => f)\n this.raise(FlowErrors.AmbiguousConditionalArrow, {\n at: state.startLoc,\n });\n }\n\n if (failed && valid.length === 1) {\n this.state = state;\n noArrowAt.push(valid[0].start);\n this.state.noArrowAt = noArrowAt;\n ({ consequent, failed } = this.tryParseConditionalConsequent());\n }\n }\n\n this.getArrowLikeExpressions(consequent, true);\n\n this.state.noArrowAt = originalNoArrowAt;\n this.expect(tt.colon);\n\n node.test = expr;\n node.consequent = consequent;\n node.alternate = this.forwardNoArrowParamsConversionAt(node, () =>\n this.parseMaybeAssign(undefined, undefined),\n );\n\n return this.finishNode(node, \"ConditionalExpression\");\n }\n\n tryParseConditionalConsequent(): {\n consequent: N.Expression;\n failed: boolean;\n } {\n this.state.noArrowParamsConversionAt.push(this.state.start);\n\n const consequent = this.parseMaybeAssignAllowIn();\n const failed = !this.match(tt.colon);\n\n this.state.noArrowParamsConversionAt.pop();\n\n return { consequent, failed };\n }\n\n // Given an expression, walks through out its arrow functions whose body is\n // an expression and through out conditional expressions. It returns every\n // function which has been parsed with a return type but could have been\n // parenthesized expressions.\n // These functions are separated into two arrays: one containing the ones\n // whose parameters can be converted to assignable lists, one containing the\n // others.\n getArrowLikeExpressions(\n node: N.Expression,\n disallowInvalid?: boolean,\n ): [N.ArrowFunctionExpression[], N.ArrowFunctionExpression[]] {\n const stack = [node];\n const arrows: N.ArrowFunctionExpression[] = [];\n\n while (stack.length !== 0) {\n const node = stack.pop();\n if (node.type === \"ArrowFunctionExpression\") {\n if (node.typeParameters || !node.returnType) {\n // This is an arrow expression without ambiguity, so check its parameters\n // @ts-expect-error: refine typings\n this.finishArrowValidation(node);\n } else {\n // @ts-expect-error: refine typings\n arrows.push(node);\n }\n stack.push(node.body);\n } else if (node.type === \"ConditionalExpression\") {\n stack.push(node.consequent);\n stack.push(node.alternate);\n }\n }\n\n if (disallowInvalid) {\n arrows.forEach(node => this.finishArrowValidation(node));\n return [arrows, []];\n }\n\n return partition(arrows, node =>\n node.params.every(param => this.isAssignable(param, true)),\n );\n }\n\n finishArrowValidation(node: N.ArrowFunctionExpression) {\n this.toAssignableList(\n // node.params is Expression[] instead of $ReadOnlyArray because it\n // has not been converted yet.\n node.params as any as N.Expression[],\n node.extra?.trailingCommaLoc,\n /* isLHS */ false,\n );\n // Enter scope, as checkParams defines bindings\n this.scope.enter(SCOPE_FUNCTION | SCOPE_ARROW);\n // Use super's method to force the parameters to be checked\n super.checkParams(node, false, true);\n this.scope.exit();\n }\n\n forwardNoArrowParamsConversionAt(\n node: Undone,\n parse: () => T,\n ): T {\n let result: T;\n if (this.state.noArrowParamsConversionAt.indexOf(node.start) !== -1) {\n this.state.noArrowParamsConversionAt.push(this.state.start);\n result = parse();\n this.state.noArrowParamsConversionAt.pop();\n } else {\n result = parse();\n }\n\n return result;\n }\n\n parseParenItem(\n node: N.Expression,\n\n startLoc: Position,\n ): N.Expression {\n node = super.parseParenItem(node, startLoc);\n if (this.eat(tt.question)) {\n node.optional = true;\n // Include questionmark in location of node\n // Don't use this.finishNode() as otherwise we might process comments twice and\n // include already consumed parens\n this.resetEndLocation(node);\n }\n\n if (this.match(tt.colon)) {\n const typeCastNode = this.startNodeAt(startLoc);\n typeCastNode.expression = node;\n typeCastNode.typeAnnotation = this.flowParseTypeAnnotation();\n\n return this.finishNode(typeCastNode, \"TypeCastExpression\");\n }\n\n return node;\n }\n\n assertModuleNodeAllowed(node: N.Node) {\n if (\n (node.type === \"ImportDeclaration\" &&\n (node.importKind === \"type\" || node.importKind === \"typeof\")) ||\n (node.type === \"ExportNamedDeclaration\" &&\n node.exportKind === \"type\") ||\n (node.type === \"ExportAllDeclaration\" && node.exportKind === \"type\")\n ) {\n // Allow Flowtype imports and exports in all conditions because\n // Flow itself does not care about 'sourceType'.\n return;\n }\n\n super.assertModuleNodeAllowed(node);\n }\n\n parseExportDeclaration(\n node: N.ExportNamedDeclaration,\n ): N.Declaration | undefined | null {\n if (this.isContextual(tt._type)) {\n node.exportKind = \"type\";\n\n const declarationNode = this.startNode();\n this.next();\n\n if (this.match(tt.braceL)) {\n // export type { foo, bar };\n node.specifiers = this.parseExportSpecifiers(\n /* isInTypeExport */ true,\n );\n super.parseExportFrom(node);\n return null;\n } else {\n // export type Foo = Bar;\n // @ts-expect-error: refine typings\n return this.flowParseTypeAlias(declarationNode);\n }\n } else if (this.isContextual(tt._opaque)) {\n node.exportKind = \"type\";\n\n const declarationNode = this.startNode();\n this.next();\n // export opaque type Foo = Bar;\n // @ts-expect-error: refine typings\n return this.flowParseOpaqueType(declarationNode, false);\n } else if (this.isContextual(tt._interface)) {\n node.exportKind = \"type\";\n const declarationNode = this.startNode();\n this.next();\n // @ts-expect-error: refine typings\n return this.flowParseInterface(declarationNode);\n } else if (this.shouldParseEnums() && this.isContextual(tt._enum)) {\n node.exportKind = \"value\";\n const declarationNode = this.startNode();\n this.next();\n // @ts-expect-error: refine typings\n return this.flowParseEnumDeclaration(declarationNode);\n } else {\n return super.parseExportDeclaration(node);\n }\n }\n\n eatExportStar(node: N.Node): boolean {\n if (super.eatExportStar(node)) return true;\n\n if (this.isContextual(tt._type) && this.lookahead().type === tt.star) {\n node.exportKind = \"type\";\n this.next();\n this.next();\n return true;\n }\n\n return false;\n }\n\n maybeParseExportNamespaceSpecifier(node: N.Node): boolean {\n const { startLoc } = this.state;\n const hasNamespace = super.maybeParseExportNamespaceSpecifier(node);\n if (hasNamespace && node.exportKind === \"type\") {\n this.unexpected(startLoc);\n }\n return hasNamespace;\n }\n\n parseClassId(\n node: N.Class,\n isStatement: boolean,\n optionalId?: boolean | null,\n ) {\n super.parseClassId(node, isStatement, optionalId);\n if (this.match(tt.lt)) {\n node.typeParameters = this.flowParseTypeParameterDeclaration();\n }\n }\n\n parseClassMember(\n classBody: N.ClassBody,\n member: any,\n state: N.ParseClassMemberState,\n ): void {\n const { startLoc } = this.state;\n if (this.isContextual(tt._declare)) {\n if (super.parseClassMemberFromModifier(classBody, member)) {\n // 'declare' is a class element name\n return;\n }\n\n member.declare = true;\n }\n\n super.parseClassMember(classBody, member, state);\n\n if (member.declare) {\n if (\n member.type !== \"ClassProperty\" &&\n member.type !== \"ClassPrivateProperty\" &&\n member.type !== \"PropertyDefinition\" // Used by estree plugin\n ) {\n this.raise(FlowErrors.DeclareClassElement, { at: startLoc });\n } else if (member.value) {\n this.raise(FlowErrors.DeclareClassFieldInitializer, {\n at: member.value,\n });\n }\n }\n }\n\n isIterator(word: string): boolean {\n return word === \"iterator\" || word === \"asyncIterator\";\n }\n\n readIterator(): void {\n const word = super.readWord1();\n const fullWord = \"@@\" + word;\n\n // Allow @@iterator and @@asyncIterator as a identifier only inside type\n if (!this.isIterator(word) || !this.state.inType) {\n this.raise(Errors.InvalidIdentifier, {\n at: this.state.curPosition(),\n identifierName: fullWord,\n });\n }\n\n this.finishToken(tt.name, fullWord);\n }\n\n // ensure that inside flow types, we bypass the jsx parser plugin\n getTokenFromCode(code: number): void {\n const next = this.input.charCodeAt(this.state.pos + 1);\n if (code === charCodes.leftCurlyBrace && next === charCodes.verticalBar) {\n this.finishOp(tt.braceBarL, 2);\n } else if (\n this.state.inType &&\n (code === charCodes.greaterThan || code === charCodes.lessThan)\n ) {\n this.finishOp(code === charCodes.greaterThan ? tt.gt : tt.lt, 1);\n } else if (this.state.inType && code === charCodes.questionMark) {\n if (next === charCodes.dot) {\n this.finishOp(tt.questionDot, 2);\n } else {\n // allow double nullable types in Flow: ??string\n this.finishOp(tt.question, 1);\n }\n } else if (\n isIteratorStart(code, next, this.input.charCodeAt(this.state.pos + 2))\n ) {\n this.state.pos += 2; // eat \"@@\"\n this.readIterator();\n } else {\n super.getTokenFromCode(code);\n }\n }\n\n isAssignable(node: N.Node, isBinding?: boolean): boolean {\n if (node.type === \"TypeCastExpression\") {\n return this.isAssignable(node.expression, isBinding);\n } else {\n return super.isAssignable(node, isBinding);\n }\n }\n\n toAssignable(node: N.Node, isLHS: boolean = false): void {\n if (\n !isLHS &&\n node.type === \"AssignmentExpression\" &&\n node.left.type === \"TypeCastExpression\"\n ) {\n node.left = this.typeCastToParameter(node.left);\n }\n super.toAssignable(node, isLHS);\n }\n\n // turn type casts that we found in function parameter head into type annotated params\n toAssignableList(\n exprList: N.Expression[],\n trailingCommaLoc: Position | undefined | null,\n isLHS: boolean,\n ): void {\n for (let i = 0; i < exprList.length; i++) {\n const expr = exprList[i];\n if (expr?.type === \"TypeCastExpression\") {\n exprList[i] = this.typeCastToParameter(expr);\n }\n }\n super.toAssignableList(exprList, trailingCommaLoc, isLHS);\n }\n\n // this is a list of nodes, from something like a call expression, we need to filter the\n // type casts that we've found that are illegal in this context\n toReferencedList(\n exprList: ReadonlyArray,\n isParenthesizedExpr?: boolean,\n ): ReadonlyArray {\n for (let i = 0; i < exprList.length; i++) {\n const expr = exprList[i];\n if (\n expr &&\n expr.type === \"TypeCastExpression\" &&\n !expr.extra?.parenthesized &&\n (exprList.length > 1 || !isParenthesizedExpr)\n ) {\n this.raise(FlowErrors.TypeCastInPattern, {\n at: expr.typeAnnotation,\n });\n }\n }\n\n return exprList;\n }\n\n parseArrayLike(\n close: TokenType,\n canBePattern: boolean,\n isTuple: boolean,\n refExpressionErrors?: ExpressionErrors | null,\n ): N.ArrayExpression | N.TupleExpression {\n const node = super.parseArrayLike(\n close,\n canBePattern,\n isTuple,\n refExpressionErrors,\n );\n\n // This could be an array pattern:\n // ([a: string, b: string]) => {}\n // In this case, we don't have to call toReferencedList. We will\n // call it, if needed, when we are sure that it is a parenthesized\n // expression by calling toReferencedListDeep.\n if (canBePattern && !this.state.maybeInArrowParameters) {\n this.toReferencedList(node.elements);\n }\n\n return node;\n }\n\n isValidLVal(type: string, isParenthesized: boolean, binding: BindingTypes) {\n return (\n type === \"TypeCastExpression\" ||\n super.isValidLVal(type, isParenthesized, binding)\n );\n }\n\n // parse class property type annotations\n parseClassProperty(node: N.ClassProperty): N.ClassProperty {\n if (this.match(tt.colon)) {\n // @ts-expect-error refine typings\n node.typeAnnotation = this.flowParseTypeAnnotation();\n }\n return super.parseClassProperty(node);\n }\n\n parseClassPrivateProperty(\n node: N.ClassPrivateProperty,\n ): N.ClassPrivateProperty {\n if (this.match(tt.colon)) {\n // @ts-expect-error refine typings\n node.typeAnnotation = this.flowParseTypeAnnotation();\n }\n return super.parseClassPrivateProperty(node);\n }\n\n // determine whether or not we're currently in the position where a class method would appear\n isClassMethod(): boolean {\n return this.match(tt.lt) || super.isClassMethod();\n }\n\n // determine whether or not we're currently in the position where a class property would appear\n isClassProperty(): boolean {\n return this.match(tt.colon) || super.isClassProperty();\n }\n\n isNonstaticConstructor(method: N.ClassMethod | N.ClassProperty): boolean {\n return !this.match(tt.colon) && super.isNonstaticConstructor(method);\n }\n\n // parse type parameters for class methods\n pushClassMethod(\n classBody: N.ClassBody,\n method: N.ClassMethod,\n isGenerator: boolean,\n isAsync: boolean,\n isConstructor: boolean,\n allowsDirectSuper: boolean,\n ): void {\n if ((method as any).variance) {\n this.unexpected((method as any).variance.loc.start);\n }\n delete (method as any).variance;\n if (this.match(tt.lt)) {\n method.typeParameters = this.flowParseTypeParameterDeclaration();\n }\n\n super.pushClassMethod(\n classBody,\n method,\n isGenerator,\n isAsync,\n isConstructor,\n allowsDirectSuper,\n );\n\n if (method.params && isConstructor) {\n const params = method.params;\n if (params.length > 0 && this.isThisParam(params[0])) {\n this.raise(FlowErrors.ThisParamBannedInConstructor, { at: method });\n }\n // estree support\n } else if (\n // @ts-expect-error TS does not know about the face that estree can replace ClassMethod with MethodDefinition\n method.type === \"MethodDefinition\" &&\n isConstructor &&\n // @ts-expect-error estree\n method.value.params\n ) {\n // @ts-expect-error estree\n const params = method.value.params;\n if (params.length > 0 && this.isThisParam(params[0])) {\n this.raise(FlowErrors.ThisParamBannedInConstructor, { at: method });\n }\n }\n }\n\n pushClassPrivateMethod(\n classBody: N.ClassBody,\n method: N.ClassPrivateMethod,\n isGenerator: boolean,\n isAsync: boolean,\n ): void {\n if ((method as any).variance) {\n this.unexpected((method as any).variance.loc.start);\n }\n delete (method as any).variance;\n if (this.match(tt.lt)) {\n method.typeParameters = this.flowParseTypeParameterDeclaration();\n }\n\n super.pushClassPrivateMethod(classBody, method, isGenerator, isAsync);\n }\n\n // parse a the super class type parameters and implements\n parseClassSuper(node: N.Class): void {\n super.parseClassSuper(node);\n if (node.superClass && this.match(tt.lt)) {\n node.superTypeParameters = this.flowParseTypeParameterInstantiation();\n }\n if (this.isContextual(tt._implements)) {\n this.next();\n const implemented: N.FlowClassImplements[] = (node.implements = []);\n do {\n const node = this.startNode();\n node.id = this.flowParseRestrictedIdentifier(/*liberal*/ true);\n if (this.match(tt.lt)) {\n node.typeParameters = this.flowParseTypeParameterInstantiation();\n } else {\n node.typeParameters = null;\n }\n implemented.push(this.finishNode(node, \"ClassImplements\"));\n } while (this.eat(tt.comma));\n }\n }\n\n checkGetterSetterParams(method: N.ObjectMethod | N.ClassMethod): void {\n super.checkGetterSetterParams(method);\n const params = this.getObjectOrClassMethodParams(method);\n if (params.length > 0) {\n const param = params[0];\n if (this.isThisParam(param) && method.kind === \"get\") {\n this.raise(FlowErrors.GetterMayNotHaveThisParam, { at: param });\n } else if (this.isThisParam(param)) {\n this.raise(FlowErrors.SetterMayNotHaveThisParam, { at: param });\n }\n }\n }\n\n parsePropertyNamePrefixOperator(\n node: N.ObjectOrClassMember | N.ClassMember,\n ): void {\n node.variance = this.flowParseVariance();\n }\n\n // parse type parameters for object method shorthand\n parseObjPropValue(\n prop: Undone,\n startLoc: Position | undefined | null,\n isGenerator: boolean,\n isAsync: boolean,\n isPattern: boolean,\n isAccessor: boolean,\n refExpressionErrors?: ExpressionErrors | null,\n ): N.ObjectMethod | N.ObjectProperty {\n if ((prop as any).variance) {\n this.unexpected((prop as any).variance.loc.start);\n }\n delete (prop as any).variance;\n\n let typeParameters;\n\n // method shorthand\n if (this.match(tt.lt) && !isAccessor) {\n typeParameters = this.flowParseTypeParameterDeclaration();\n if (!this.match(tt.parenL)) this.unexpected();\n }\n\n const result = super.parseObjPropValue(\n prop,\n startLoc,\n isGenerator,\n isAsync,\n isPattern,\n isAccessor,\n refExpressionErrors,\n );\n\n // add typeParameters if we found them\n if (typeParameters) {\n // @ts-expect-error: refine typings\n (result.value || result).typeParameters = typeParameters;\n }\n return result;\n }\n\n parseAssignableListItemTypes(param: N.Pattern): N.Pattern {\n if (this.eat(tt.question)) {\n if (param.type !== \"Identifier\") {\n this.raise(FlowErrors.PatternIsOptional, { at: param });\n }\n if (this.isThisParam(param)) {\n this.raise(FlowErrors.ThisParamMayNotBeOptional, { at: param });\n }\n\n (param as any as N.Identifier).optional = true;\n }\n if (this.match(tt.colon)) {\n // @ts-expect-error: refine typings\n param.typeAnnotation = this.flowParseTypeAnnotation();\n } else if (this.isThisParam(param)) {\n this.raise(FlowErrors.ThisParamAnnotationRequired, { at: param });\n }\n\n if (this.match(tt.eq) && this.isThisParam(param)) {\n this.raise(FlowErrors.ThisParamNoDefault, { at: param });\n }\n\n this.resetEndLocation(param);\n return param;\n }\n\n parseMaybeDefault(\n startLoc?: Position | null,\n left?: N.Pattern | null,\n ): N.Pattern {\n const node = super.parseMaybeDefault(startLoc, left);\n\n if (\n node.type === \"AssignmentPattern\" &&\n node.typeAnnotation &&\n node.right.start < node.typeAnnotation.start\n ) {\n this.raise(FlowErrors.TypeBeforeInitializer, {\n at: node.typeAnnotation,\n });\n }\n\n return node;\n }\n\n checkImportReflection(node: Undone) {\n super.checkImportReflection(node);\n if (node.module && node.importKind !== \"value\") {\n this.raise(FlowErrors.ImportReflectionHasImportType, {\n at: node.specifiers[0].loc.start,\n });\n }\n }\n\n parseImportSpecifierLocal<\n T extends\n | N.ImportSpecifier\n | N.ImportDefaultSpecifier\n | N.ImportNamespaceSpecifier,\n >(node: N.ImportDeclaration, specifier: Undone, type: T[\"type\"]): void {\n specifier.local = hasTypeImportKind(node)\n ? this.flowParseRestrictedIdentifier(\n /* liberal */ true,\n /* declaration */ true,\n )\n : this.parseIdentifier();\n\n node.specifiers.push(this.finishImportSpecifier(specifier, type));\n }\n\n isPotentialImportPhase(isExport: boolean): boolean {\n if (super.isPotentialImportPhase(isExport)) return true;\n if (this.isContextual(tt._type)) {\n if (!isExport) return true;\n const ch = this.lookaheadCharCode();\n return ch === charCodes.leftCurlyBrace || ch === charCodes.asterisk;\n }\n return !isExport && this.isContextual(tt._typeof);\n }\n\n applyImportPhase(\n node: Undone,\n isExport: boolean,\n phase: string | null,\n loc?: Position,\n ): void {\n super.applyImportPhase(node, isExport, phase, loc);\n if (isExport) {\n if (!phase && this.match(tt._default)) {\n // TODO: Align with our TS AST and always add .exportKind\n return;\n }\n (node as N.ExportNamedDeclaration).exportKind =\n phase === \"type\" ? phase : \"value\";\n } else {\n if (phase === \"type\" && this.match(tt.star)) this.unexpected();\n (node as N.ImportDeclaration).importKind =\n phase === \"type\" || phase === \"typeof\" ? phase : \"value\";\n }\n }\n\n // parse import-type/typeof shorthand\n parseImportSpecifier(\n specifier: any,\n importedIsString: boolean,\n isInTypeOnlyImport: boolean,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n isMaybeTypeOnly: boolean,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n bindingType: BindingTypes | undefined,\n ): N.ImportSpecifier {\n const firstIdent = specifier.imported;\n\n let specifierTypeKind = null;\n if (firstIdent.type === \"Identifier\") {\n if (firstIdent.name === \"type\") {\n specifierTypeKind = \"type\";\n } else if (firstIdent.name === \"typeof\") {\n specifierTypeKind = \"typeof\";\n }\n }\n\n let isBinding = false;\n if (this.isContextual(tt._as) && !this.isLookaheadContextual(\"as\")) {\n const as_ident = this.parseIdentifier(true);\n if (\n specifierTypeKind !== null &&\n !tokenIsKeywordOrIdentifier(this.state.type)\n ) {\n // `import {type as ,` or `import {type as }`\n specifier.imported = as_ident;\n specifier.importKind = specifierTypeKind;\n specifier.local = cloneIdentifier(as_ident);\n } else {\n // `import {type as foo`\n specifier.imported = firstIdent;\n specifier.importKind = null;\n specifier.local = this.parseIdentifier();\n }\n } else {\n if (\n specifierTypeKind !== null &&\n tokenIsKeywordOrIdentifier(this.state.type)\n ) {\n // `import {type foo`\n specifier.imported = this.parseIdentifier(true);\n specifier.importKind = specifierTypeKind;\n } else {\n if (importedIsString) {\n /*:: invariant(firstIdent instanceof N.StringLiteral) */\n throw this.raise(Errors.ImportBindingIsString, {\n at: specifier,\n importName: firstIdent.value,\n });\n }\n /*:: invariant(firstIdent instanceof N.Node) */\n specifier.imported = firstIdent;\n specifier.importKind = null;\n }\n\n if (this.eatContextual(tt._as)) {\n specifier.local = this.parseIdentifier();\n } else {\n isBinding = true;\n specifier.local = cloneIdentifier(specifier.imported);\n }\n }\n\n const specifierIsTypeImport = hasTypeImportKind(specifier);\n\n if (isInTypeOnlyImport && specifierIsTypeImport) {\n this.raise(FlowErrors.ImportTypeShorthandOnlyInPureImport, {\n at: specifier,\n });\n }\n\n if (isInTypeOnlyImport || specifierIsTypeImport) {\n this.checkReservedType(\n specifier.local.name,\n specifier.local.loc.start,\n /* declaration */ true,\n );\n }\n\n if (isBinding && !isInTypeOnlyImport && !specifierIsTypeImport) {\n this.checkReservedWord(\n specifier.local.name,\n specifier.loc.start,\n true,\n true,\n );\n }\n\n return this.finishImportSpecifier(specifier, \"ImportSpecifier\");\n }\n\n parseBindingAtom(): N.Pattern {\n switch (this.state.type) {\n case tt._this:\n // \"this\" may be the name of a parameter, so allow it.\n return this.parseIdentifier(/* liberal */ true);\n default:\n return super.parseBindingAtom();\n }\n }\n\n // parse function type parameters - function foo() {}\n parseFunctionParams(\n node: Undone,\n isConstructor: boolean,\n ): void {\n // @ts-expect-error kind may not index node\n const kind = node.kind;\n if (kind !== \"get\" && kind !== \"set\" && this.match(tt.lt)) {\n node.typeParameters = this.flowParseTypeParameterDeclaration();\n }\n super.parseFunctionParams(node, isConstructor);\n }\n\n // parse flow type annotations on variable declarator heads - let foo: string = bar\n parseVarId(\n decl: N.VariableDeclarator,\n kind: \"var\" | \"let\" | \"const\",\n ): void {\n super.parseVarId(decl, kind);\n if (this.match(tt.colon)) {\n // @ts-expect-error: refine typings\n decl.id.typeAnnotation = this.flowParseTypeAnnotation();\n this.resetEndLocation(decl.id); // set end position to end of type\n }\n }\n\n // parse the return type of an async arrow function - let foo = (async (): number => {});\n parseAsyncArrowFromCallExpression(\n node: N.ArrowFunctionExpression,\n call: N.CallExpression,\n ): N.ArrowFunctionExpression {\n if (this.match(tt.colon)) {\n const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n this.state.noAnonFunctionType = true;\n // @ts-expect-error refine typings\n node.returnType = this.flowParseTypeAnnotation();\n this.state.noAnonFunctionType = oldNoAnonFunctionType;\n }\n\n return super.parseAsyncArrowFromCallExpression(node, call);\n }\n\n // todo description\n shouldParseAsyncArrow(): boolean {\n return this.match(tt.colon) || super.shouldParseAsyncArrow();\n }\n\n // We need to support type parameter declarations for arrow functions. This\n // is tricky. There are three situations we need to handle\n //\n // 1. This is either JSX or an arrow function. We'll try JSX first. If that\n // fails, we'll try an arrow function. If that fails, we'll throw the JSX\n // error.\n // 2. This is an arrow function. We'll parse the type parameter declaration,\n // parse the rest, make sure the rest is an arrow function, and go from\n // there\n // 3. This is neither. Just call the super method\n parseMaybeAssign(\n refExpressionErrors?: ExpressionErrors | null,\n afterLeftParse?: Function,\n ): N.Expression {\n let state = null;\n\n let jsx;\n\n if (\n this.hasPlugin(\"jsx\") &&\n (this.match(tt.jsxTagStart) || this.match(tt.lt))\n ) {\n state = this.state.clone();\n\n jsx = this.tryParse(\n () => super.parseMaybeAssign(refExpressionErrors, afterLeftParse),\n state,\n );\n\n /*:: invariant(!jsx.aborted) */\n /*:: invariant(jsx.node != null) */\n if (!jsx.error) return jsx.node;\n\n // Remove `tc.j_expr` and `tc.j_oTag` from context added\n // by parsing `jsxTagStart` to stop the JSX plugin from\n // messing with the tokens\n const { context } = this.state;\n const currentContext = context[context.length - 1];\n if (currentContext === tc.j_oTag || currentContext === tc.j_expr) {\n context.pop();\n }\n }\n\n if (jsx?.error || this.match(tt.lt)) {\n state = state || this.state.clone();\n\n let typeParameters: N.TypeParameterDeclaration;\n\n const arrow = this.tryParse(abort => {\n typeParameters = this.flowParseTypeParameterDeclaration();\n\n const arrowExpression = this.forwardNoArrowParamsConversionAt(\n typeParameters,\n () => {\n const result = super.parseMaybeAssign(\n refExpressionErrors,\n afterLeftParse,\n );\n\n this.resetStartLocationFromNode(result, typeParameters);\n\n return result;\n },\n );\n\n // (() => {});\n // (() => {}: any);\n if (arrowExpression.extra?.parenthesized) abort();\n\n // The above can return a TypeCastExpression when the arrow\n // expression is not wrapped in parens. See also `this.parseParenItem`.\n // (() => {}: any);\n const expr = this.maybeUnwrapTypeCastExpression(arrowExpression);\n\n if (expr.type !== \"ArrowFunctionExpression\") abort();\n\n expr.typeParameters = typeParameters;\n this.resetStartLocationFromNode(expr, typeParameters);\n\n return arrowExpression;\n }, state);\n\n let arrowExpression:\n | N.ArrowFunctionExpression\n | N.TypeCastExpression\n | undefined\n | null = null;\n\n if (\n arrow.node &&\n // @ts-expect-error: refine tryParse typings\n this.maybeUnwrapTypeCastExpression(arrow.node).type ===\n \"ArrowFunctionExpression\"\n ) {\n if (!arrow.error && !arrow.aborted) {\n // async () => {}\n // @ts-expect-error: refine tryParse typings\n if (arrow.node.async) {\n /*:: invariant(typeParameters) */\n this.raise(\n FlowErrors.UnexpectedTypeParameterBeforeAsyncArrowFunction,\n { at: typeParameters },\n );\n }\n // @ts-expect-error: refine tryParse typings\n return arrow.node;\n }\n\n // @ts-expect-error: refine typings\n arrowExpression = arrow.node;\n }\n\n // If we are here, both JSX and Flow parsing attempts failed.\n // Give the precedence to the JSX error, except if JSX had an\n // unrecoverable error while Flow didn't.\n // If the error is recoverable, we can only re-report it if there is\n // a node we can return.\n\n if (jsx?.node) {\n /*:: invariant(jsx.failState) */\n this.state = jsx.failState;\n return jsx.node;\n }\n\n if (arrowExpression) {\n /*:: invariant(arrow.failState) */\n this.state = arrow.failState;\n return arrowExpression;\n }\n\n if (jsx?.thrown) throw jsx.error;\n if (arrow.thrown) throw arrow.error;\n\n /*:: invariant(typeParameters) */\n throw this.raise(FlowErrors.UnexpectedTokenAfterTypeParameter, {\n at: typeParameters,\n });\n }\n\n return super.parseMaybeAssign(refExpressionErrors, afterLeftParse);\n }\n\n // handle return types for arrow functions\n parseArrow(\n node: Undone,\n ): Undone | undefined | null {\n if (this.match(tt.colon)) {\n // @ts-expect-error todo(flow->ts)\n const result = this.tryParse(() => {\n const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n this.state.noAnonFunctionType = true;\n\n const typeNode = this.startNode();\n\n [\n typeNode.typeAnnotation,\n // @ts-expect-error (destructuring not supported yet)\n node.predicate,\n ] = this.flowParseTypeAndPredicateInitialiser();\n\n this.state.noAnonFunctionType = oldNoAnonFunctionType;\n\n if (this.canInsertSemicolon()) this.unexpected();\n if (!this.match(tt.arrow)) this.unexpected();\n\n return typeNode;\n });\n\n if (result.thrown) return null;\n /*:: invariant(result.node) */\n\n if (result.error) this.state = result.failState;\n\n // assign after it is clear it is an arrow\n // @ts-expect-error todo(flow->ts)\n node.returnType = result.node.typeAnnotation\n ? this.finishNode(result.node, \"TypeAnnotation\")\n : null;\n }\n\n return super.parseArrow(node);\n }\n\n shouldParseArrow(params: Array): boolean {\n return this.match(tt.colon) || super.shouldParseArrow(params);\n }\n\n setArrowFunctionParameters(\n node: N.ArrowFunctionExpression,\n params: N.Pattern[],\n ): void {\n if (this.state.noArrowParamsConversionAt.indexOf(node.start) !== -1) {\n node.params = params;\n } else {\n super.setArrowFunctionParameters(node, params);\n }\n }\n\n checkParams(\n node: N.Function,\n allowDuplicates: boolean,\n isArrowFunction?: boolean | null,\n strictModeChanged: boolean = true,\n ): void {\n if (\n isArrowFunction &&\n this.state.noArrowParamsConversionAt.indexOf(node.start) !== -1\n ) {\n return;\n }\n\n // ensure the `this` param is first, if it exists\n for (let i = 0; i < node.params.length; i++) {\n if (this.isThisParam(node.params[i]) && i > 0) {\n this.raise(FlowErrors.ThisParamMustBeFirst, { at: node.params[i] });\n }\n }\n\n super.checkParams(\n node,\n allowDuplicates,\n isArrowFunction,\n strictModeChanged,\n );\n }\n\n parseParenAndDistinguishExpression(canBeArrow: boolean): N.Expression {\n return super.parseParenAndDistinguishExpression(\n canBeArrow && this.state.noArrowAt.indexOf(this.state.start) === -1,\n );\n }\n\n parseSubscripts(\n base: N.Expression,\n\n startLoc: Position,\n noCalls?: boolean | null,\n ): N.Expression {\n if (\n base.type === \"Identifier\" &&\n base.name === \"async\" &&\n this.state.noArrowAt.indexOf(startLoc.index) !== -1\n ) {\n this.next();\n\n const node = this.startNodeAt(startLoc);\n node.callee = base;\n node.arguments = super.parseCallExpressionArguments(tt.parenR, false);\n base = this.finishNode(node, \"CallExpression\");\n } else if (\n base.type === \"Identifier\" &&\n base.name === \"async\" &&\n this.match(tt.lt)\n ) {\n const state = this.state.clone();\n const arrow = this.tryParse(\n abort => this.parseAsyncArrowWithTypeParameters(startLoc) || abort(),\n state,\n );\n\n /*:: invariant(arrow.node != null) */\n // @ts-expect-error: refine tryParse typings\n if (!arrow.error && !arrow.aborted) return arrow.node;\n\n const result = this.tryParse(\n () => super.parseSubscripts(base, startLoc, noCalls),\n state,\n );\n\n if (result.node && !result.error) return result.node;\n\n if (arrow.node) {\n this.state = arrow.failState;\n // @ts-expect-error: refine tryParse typings\n return arrow.node;\n }\n\n if (result.node) {\n this.state = result.failState;\n return result.node;\n }\n\n throw arrow.error || result.error;\n }\n\n return super.parseSubscripts(base, startLoc, noCalls);\n }\n\n parseSubscript(\n base: N.Expression,\n\n startLoc: Position,\n noCalls: boolean | undefined | null,\n subscriptState: N.ParseSubscriptState,\n ): N.Expression {\n if (this.match(tt.questionDot) && this.isLookaheadToken_lt()) {\n subscriptState.optionalChainMember = true;\n if (noCalls) {\n subscriptState.stop = true;\n return base;\n }\n this.next();\n const node = this.startNodeAt(startLoc);\n node.callee = base;\n node.typeArguments = this.flowParseTypeParameterInstantiation();\n this.expect(tt.parenL);\n node.arguments = this.parseCallExpressionArguments(tt.parenR, false);\n node.optional = true;\n return this.finishCallExpression(node, /* optional */ true);\n } else if (!noCalls && this.shouldParseTypes() && this.match(tt.lt)) {\n const node = this.startNodeAt<\n N.OptionalCallExpression | N.CallExpression\n >(startLoc);\n node.callee = base;\n\n const result = this.tryParse(() => {\n node.typeArguments =\n this.flowParseTypeParameterInstantiationCallOrNew();\n this.expect(tt.parenL);\n node.arguments = super.parseCallExpressionArguments(tt.parenR, false);\n if (subscriptState.optionalChainMember) {\n (node as Undone).optional = false;\n }\n return this.finishCallExpression(\n node,\n subscriptState.optionalChainMember,\n );\n });\n\n if (result.node) {\n if (result.error) this.state = result.failState;\n return result.node;\n }\n }\n\n return super.parseSubscript(\n base,\n\n startLoc,\n noCalls,\n subscriptState,\n );\n }\n\n parseNewCallee(node: N.NewExpression): void {\n super.parseNewCallee(node);\n\n let targs = null;\n if (this.shouldParseTypes() && this.match(tt.lt)) {\n targs = this.tryParse(() =>\n this.flowParseTypeParameterInstantiationCallOrNew(),\n ).node;\n }\n node.typeArguments = targs;\n }\n\n parseAsyncArrowWithTypeParameters(\n startLoc: Position,\n ): N.ArrowFunctionExpression | undefined | null {\n const node = this.startNodeAt(startLoc);\n this.parseFunctionParams(node, false);\n if (!this.parseArrow(node)) return;\n return super.parseArrowExpression(\n node,\n /* params */ undefined,\n /* isAsync */ true,\n );\n }\n\n readToken_mult_modulo(code: number): void {\n const next = this.input.charCodeAt(this.state.pos + 1);\n if (\n code === charCodes.asterisk &&\n next === charCodes.slash &&\n this.state.hasFlowComment\n ) {\n this.state.hasFlowComment = false;\n this.state.pos += 2;\n this.nextToken();\n return;\n }\n\n super.readToken_mult_modulo(code);\n }\n\n readToken_pipe_amp(code: number): void {\n const next = this.input.charCodeAt(this.state.pos + 1);\n if (\n code === charCodes.verticalBar &&\n next === charCodes.rightCurlyBrace\n ) {\n // '|}'\n this.finishOp(tt.braceBarR, 2);\n return;\n }\n\n super.readToken_pipe_amp(code);\n }\n\n parseTopLevel(file: N.File, program: N.Program): N.File {\n const fileNode = super.parseTopLevel(file, program);\n if (this.state.hasFlowComment) {\n this.raise(FlowErrors.UnterminatedFlowComment, {\n at: this.state.curPosition(),\n });\n }\n return fileNode;\n }\n\n skipBlockComment(): N.CommentBlock | undefined {\n if (this.hasPlugin(\"flowComments\") && this.skipFlowComment()) {\n if (this.state.hasFlowComment) {\n throw this.raise(FlowErrors.NestedFlowComment, {\n at: this.state.startLoc,\n });\n }\n this.hasFlowCommentCompletion();\n const commentSkip = this.skipFlowComment();\n if (commentSkip) {\n this.state.pos += commentSkip;\n this.state.hasFlowComment = true;\n }\n return;\n }\n\n return super.skipBlockComment(this.state.hasFlowComment ? \"*-/\" : \"*/\");\n }\n\n skipFlowComment(): number | false {\n const { pos } = this.state;\n let shiftToFirstNonWhiteSpace = 2;\n while (\n [charCodes.space, charCodes.tab].includes(\n // @ts-expect-error testing whether a number is included\n this.input.charCodeAt(pos + shiftToFirstNonWhiteSpace),\n )\n ) {\n shiftToFirstNonWhiteSpace++;\n }\n\n const ch2 = this.input.charCodeAt(shiftToFirstNonWhiteSpace + pos);\n const ch3 = this.input.charCodeAt(shiftToFirstNonWhiteSpace + pos + 1);\n\n if (ch2 === charCodes.colon && ch3 === charCodes.colon) {\n return shiftToFirstNonWhiteSpace + 2; // check for /*::\n }\n if (\n this.input.slice(\n shiftToFirstNonWhiteSpace + pos,\n shiftToFirstNonWhiteSpace + pos + 12,\n ) === \"flow-include\"\n ) {\n return shiftToFirstNonWhiteSpace + 12; // check for /*flow-include\n }\n if (ch2 === charCodes.colon && ch3 !== charCodes.colon) {\n return shiftToFirstNonWhiteSpace; // check for /*:, advance up to :\n }\n return false;\n }\n\n hasFlowCommentCompletion(): void {\n const end = this.input.indexOf(\"*/\", this.state.pos);\n if (end === -1) {\n throw this.raise(Errors.UnterminatedComment, {\n at: this.state.curPosition(),\n });\n }\n }\n\n // Flow enum parsing\n\n flowEnumErrorBooleanMemberNotInitialized(\n loc: Position,\n {\n enumName,\n memberName,\n }: {\n enumName: string;\n memberName: string;\n },\n ): void {\n this.raise(FlowErrors.EnumBooleanMemberNotInitialized, {\n at: loc,\n memberName,\n enumName,\n });\n }\n\n flowEnumErrorInvalidMemberInitializer(\n loc: Position,\n enumContext: EnumContext,\n ) {\n return this.raise(\n !enumContext.explicitType\n ? FlowErrors.EnumInvalidMemberInitializerUnknownType\n : enumContext.explicitType === \"symbol\"\n ? FlowErrors.EnumInvalidMemberInitializerSymbolType\n : FlowErrors.EnumInvalidMemberInitializerPrimaryType,\n {\n at: loc,\n ...enumContext,\n },\n );\n }\n\n flowEnumErrorNumberMemberNotInitialized(\n loc: Position,\n {\n enumName,\n memberName,\n }: {\n enumName: string;\n memberName: string;\n },\n ): void {\n this.raise(FlowErrors.EnumNumberMemberNotInitialized, {\n at: loc,\n enumName,\n memberName,\n });\n }\n\n flowEnumErrorStringMemberInconsistentlyInitailized(\n node: N.Node,\n {\n enumName,\n }: {\n enumName: string;\n },\n ): void {\n this.raise(FlowErrors.EnumStringMemberInconsistentlyInitailized, {\n at: node,\n enumName,\n });\n }\n\n flowEnumMemberInit(): EnumMemberInit {\n const startLoc = this.state.startLoc;\n const endOfInit = () => this.match(tt.comma) || this.match(tt.braceR);\n switch (this.state.type) {\n case tt.num: {\n const literal = this.parseNumericLiteral(this.state.value);\n if (endOfInit()) {\n return { type: \"number\", loc: literal.loc.start, value: literal };\n }\n return { type: \"invalid\", loc: startLoc };\n }\n case tt.string: {\n const literal = this.parseStringLiteral(this.state.value);\n if (endOfInit()) {\n return { type: \"string\", loc: literal.loc.start, value: literal };\n }\n return { type: \"invalid\", loc: startLoc };\n }\n case tt._true:\n case tt._false: {\n const literal = this.parseBooleanLiteral(this.match(tt._true));\n if (endOfInit()) {\n return {\n type: \"boolean\",\n loc: literal.loc.start,\n value: literal,\n };\n }\n return { type: \"invalid\", loc: startLoc };\n }\n default:\n return { type: \"invalid\", loc: startLoc };\n }\n }\n\n flowEnumMemberRaw(): {\n id: N.Node;\n init: EnumMemberInit;\n } {\n const loc = this.state.startLoc;\n const id = this.parseIdentifier(true);\n const init = this.eat(tt.eq)\n ? this.flowEnumMemberInit()\n : { type: \"none\" as const, loc };\n return { id, init };\n }\n\n flowEnumCheckExplicitTypeMismatch(\n loc: Position,\n context: EnumContext,\n expectedType: EnumExplicitType,\n ): void {\n const { explicitType } = context;\n if (explicitType === null) {\n return;\n }\n if (explicitType !== expectedType) {\n this.flowEnumErrorInvalidMemberInitializer(loc, context);\n }\n }\n\n flowEnumMembers({\n enumName,\n explicitType,\n }: {\n enumName: string;\n explicitType: EnumExplicitType;\n }): {\n members: {\n booleanMembers: Array;\n numberMembers: Array;\n stringMembers: Array;\n defaultedMembers: Array;\n };\n hasUnknownMembers: boolean;\n } {\n const seenNames = new Set();\n const members = {\n // @ts-expect-error: migrate to Babel types\n booleanMembers: [],\n // @ts-expect-error: migrate to Babel types\n numberMembers: [],\n // @ts-expect-error: migrate to Babel types\n stringMembers: [],\n // @ts-expect-error: migrate to Babel types\n defaultedMembers: [],\n };\n let hasUnknownMembers = false;\n while (!this.match(tt.braceR)) {\n if (this.eat(tt.ellipsis)) {\n hasUnknownMembers = true;\n break;\n }\n const memberNode = this.startNode();\n const { id, init } = this.flowEnumMemberRaw();\n const memberName = id.name;\n if (memberName === \"\") {\n continue;\n }\n if (/^[a-z]/.test(memberName)) {\n this.raise(FlowErrors.EnumInvalidMemberName, {\n at: id,\n memberName,\n suggestion: memberName[0].toUpperCase() + memberName.slice(1),\n enumName,\n });\n }\n if (seenNames.has(memberName)) {\n this.raise(FlowErrors.EnumDuplicateMemberName, {\n at: id,\n memberName,\n enumName,\n });\n }\n seenNames.add(memberName);\n const context = { enumName, explicitType, memberName };\n memberNode.id = id;\n switch (init.type) {\n case \"boolean\": {\n this.flowEnumCheckExplicitTypeMismatch(\n init.loc,\n context,\n \"boolean\",\n );\n memberNode.init = init.value;\n members.booleanMembers.push(\n this.finishNode(memberNode, \"EnumBooleanMember\"),\n );\n break;\n }\n case \"number\": {\n this.flowEnumCheckExplicitTypeMismatch(init.loc, context, \"number\");\n memberNode.init = init.value;\n members.numberMembers.push(\n this.finishNode(memberNode, \"EnumNumberMember\"),\n );\n break;\n }\n case \"string\": {\n this.flowEnumCheckExplicitTypeMismatch(init.loc, context, \"string\");\n memberNode.init = init.value;\n members.stringMembers.push(\n this.finishNode(memberNode, \"EnumStringMember\"),\n );\n break;\n }\n case \"invalid\": {\n throw this.flowEnumErrorInvalidMemberInitializer(init.loc, context);\n }\n case \"none\": {\n switch (explicitType) {\n case \"boolean\":\n this.flowEnumErrorBooleanMemberNotInitialized(\n init.loc,\n context,\n );\n break;\n case \"number\":\n this.flowEnumErrorNumberMemberNotInitialized(init.loc, context);\n break;\n default:\n members.defaultedMembers.push(\n this.finishNode(memberNode, \"EnumDefaultedMember\"),\n );\n }\n }\n }\n\n if (!this.match(tt.braceR)) {\n this.expect(tt.comma);\n }\n }\n return { members, hasUnknownMembers };\n }\n\n flowEnumStringMembers(\n initializedMembers: Array,\n defaultedMembers: Array,\n {\n enumName,\n }: {\n enumName: string;\n },\n ): Array {\n if (initializedMembers.length === 0) {\n return defaultedMembers;\n } else if (defaultedMembers.length === 0) {\n return initializedMembers;\n } else if (defaultedMembers.length > initializedMembers.length) {\n for (const member of initializedMembers) {\n this.flowEnumErrorStringMemberInconsistentlyInitailized(member, {\n enumName,\n });\n }\n return defaultedMembers;\n } else {\n for (const member of defaultedMembers) {\n this.flowEnumErrorStringMemberInconsistentlyInitailized(member, {\n enumName,\n });\n }\n return initializedMembers;\n }\n }\n\n flowEnumParseExplicitType({\n enumName,\n }: {\n enumName: string;\n }): EnumExplicitType {\n if (!this.eatContextual(tt._of)) return null;\n\n if (!tokenIsIdentifier(this.state.type)) {\n throw this.raise(FlowErrors.EnumInvalidExplicitTypeUnknownSupplied, {\n at: this.state.startLoc,\n enumName,\n });\n }\n\n const { value } = this.state;\n this.next();\n\n if (\n value !== \"boolean\" &&\n value !== \"number\" &&\n value !== \"string\" &&\n value !== \"symbol\"\n ) {\n this.raise(FlowErrors.EnumInvalidExplicitType, {\n at: this.state.startLoc,\n enumName,\n invalidEnumType: value,\n });\n }\n\n return value;\n }\n\n flowEnumBody(node: Undone, id: N.Node): N.Node {\n const enumName = id.name;\n const nameLoc = id.loc.start;\n const explicitType = this.flowEnumParseExplicitType({ enumName });\n this.expect(tt.braceL);\n const { members, hasUnknownMembers } = this.flowEnumMembers({\n enumName,\n explicitType,\n });\n node.hasUnknownMembers = hasUnknownMembers;\n\n switch (explicitType) {\n case \"boolean\":\n node.explicitType = true;\n node.members = members.booleanMembers;\n this.expect(tt.braceR);\n return this.finishNode(node, \"EnumBooleanBody\");\n case \"number\":\n node.explicitType = true;\n node.members = members.numberMembers;\n this.expect(tt.braceR);\n return this.finishNode(node, \"EnumNumberBody\");\n case \"string\":\n node.explicitType = true;\n node.members = this.flowEnumStringMembers(\n members.stringMembers,\n members.defaultedMembers,\n { enumName },\n );\n this.expect(tt.braceR);\n return this.finishNode(node, \"EnumStringBody\");\n case \"symbol\":\n node.members = members.defaultedMembers;\n this.expect(tt.braceR);\n return this.finishNode(node, \"EnumSymbolBody\");\n default: {\n // `explicitType` is `null`\n const empty = () => {\n node.members = [];\n this.expect(tt.braceR);\n return this.finishNode(node, \"EnumStringBody\");\n };\n node.explicitType = false;\n\n const boolsLen = members.booleanMembers.length;\n const numsLen = members.numberMembers.length;\n const strsLen = members.stringMembers.length;\n const defaultedLen = members.defaultedMembers.length;\n\n if (!boolsLen && !numsLen && !strsLen && !defaultedLen) {\n return empty();\n } else if (!boolsLen && !numsLen) {\n node.members = this.flowEnumStringMembers(\n members.stringMembers,\n members.defaultedMembers,\n { enumName },\n );\n this.expect(tt.braceR);\n return this.finishNode(node, \"EnumStringBody\");\n } else if (!numsLen && !strsLen && boolsLen >= defaultedLen) {\n for (const member of members.defaultedMembers) {\n this.flowEnumErrorBooleanMemberNotInitialized(member.loc.start, {\n enumName,\n memberName: member.id.name,\n });\n }\n node.members = members.booleanMembers;\n this.expect(tt.braceR);\n return this.finishNode(node, \"EnumBooleanBody\");\n } else if (!boolsLen && !strsLen && numsLen >= defaultedLen) {\n for (const member of members.defaultedMembers) {\n this.flowEnumErrorNumberMemberNotInitialized(member.loc.start, {\n enumName,\n memberName: member.id.name,\n });\n }\n node.members = members.numberMembers;\n this.expect(tt.braceR);\n return this.finishNode(node, \"EnumNumberBody\");\n } else {\n this.raise(FlowErrors.EnumInconsistentMemberValues, {\n at: nameLoc,\n enumName,\n });\n return empty();\n }\n }\n }\n }\n\n flowParseEnumDeclaration(node: Undone): N.Node {\n const id = this.parseIdentifier();\n node.id = id;\n node.body = this.flowEnumBody(this.startNode(), id);\n return this.finishNode(node, \"EnumDeclaration\");\n }\n\n // check if the next token is a tt.lt\n isLookaheadToken_lt(): boolean {\n const next = this.nextTokenStart();\n if (this.input.charCodeAt(next) === charCodes.lessThan) {\n const afterNext = this.input.charCodeAt(next + 1);\n return (\n afterNext !== charCodes.lessThan && afterNext !== charCodes.equalsTo\n );\n }\n return false;\n }\n\n maybeUnwrapTypeCastExpression(node: N.Node) {\n return node.type === \"TypeCastExpression\" ? node.expression : node;\n }\n };\n"],"mappings":"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"}