You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1 line
1.3 MiB

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

{"version":3,"file":"index.js","sources":["../src/util/location.ts","../src/parse-error/module-errors.ts","../src/parse-error/to-node-description.ts","../src/parse-error/standard-errors.ts","../src/parse-error/strict-mode-errors.ts","../src/parse-error/pipeline-operator-errors.ts","../src/parse-error.ts","../src/plugins/estree.ts","../src/tokenizer/context.ts","../src/tokenizer/types.ts","../../babel-helper-validator-identifier/src/identifier.ts","../../babel-helper-validator-identifier/src/keyword.ts","../src/util/identifier.ts","../src/util/scope.ts","../src/plugins/flow/scope.ts","../src/parser/base.ts","../src/parser/comments.ts","../src/util/whitespace.ts","../src/tokenizer/state.ts","../../babel-helper-string-parser/src/index.ts","../src/tokenizer/index.ts","../src/util/class-scope.ts","../src/util/expression-scope.ts","../src/util/production-parameter.ts","../src/parser/util.ts","../src/parser/node.ts","../src/plugins/flow/index.ts","../src/plugins/jsx/xhtml.ts","../src/plugins/jsx/index.ts","../src/plugins/typescript/scope.ts","../src/parser/lval.ts","../src/plugins/typescript/index.ts","../src/plugins/placeholders.ts","../src/plugins/v8intrinsic.ts","../src/plugin-utils.ts","../src/options.ts","../src/parser/expression.ts","../src/parser/statement.ts","../src/parser/index.ts","../src/index.ts"],"sourcesContent":["export type Pos = {\n start: number;\n};\n\n// These are used when `options.locations` is on, for the\n// `startLoc` and `endLoc` properties.\n\nexport class Position {\n line: number;\n column: number;\n index: number;\n\n constructor(line: number, col: number, index: number) {\n this.line = line;\n this.column = col;\n this.index = index;\n }\n}\n\nexport class SourceLocation {\n start: Position;\n end: Position;\n filename: string;\n identifierName: string | undefined | null;\n\n constructor(start: Position, end?: Position) {\n this.start = start;\n // (may start as null, but initialized later)\n this.end = end;\n }\n}\n\n/**\n * creates a new position with a non-zero column offset from the given position.\n * This function should be only be used when we create AST node out of the token\n * boundaries, such as TemplateElement ends before tt.templateNonTail. This\n * function does not skip whitespaces.\n */\nexport function createPositionWithColumnOffset(\n position: Position,\n columnOffset: number,\n) {\n const { line, column, index } = position;\n return new Position(line, column + columnOffset, index + columnOffset);\n}\n","import type { ParseErrorTemplates } from \"../parse-error.ts\";\n\nconst code = \"BABEL_PARSER_SOURCETYPE_MODULE_REQUIRED\";\n\nexport default {\n ImportMetaOutsideModule: {\n message: `import.meta may appear only with 'sourceType: \"module\"'`,\n code,\n },\n ImportOutsideModule: {\n message: `'import' and 'export' may appear only with 'sourceType: \"module\"'`,\n code,\n },\n} satisfies ParseErrorTemplates;\n","const NodeDescriptions = {\n ArrayPattern: \"array destructuring pattern\",\n AssignmentExpression: \"assignment expression\",\n AssignmentPattern: \"assignment expression\",\n ArrowFunctionExpression: \"arrow function expression\",\n ConditionalExpression: \"conditional expression\",\n CatchClause: \"catch clause\",\n ForOfStatement: \"for-of statement\",\n ForInStatement: \"for-in statement\",\n ForStatement: \"for-loop\",\n FormalParameters: \"function parameter list\",\n Identifier: \"identifier\",\n ImportSpecifier: \"import specifier\",\n ImportDefaultSpecifier: \"import default specifier\",\n ImportNamespaceSpecifier: \"import namespace specifier\",\n ObjectPattern: \"object destructuring pattern\",\n ParenthesizedExpression: \"parenthesized expression\",\n RestElement: \"rest element\",\n UpdateExpression: {\n true: \"prefix operation\",\n false: \"postfix operation\",\n },\n VariableDeclarator: \"variable declaration\",\n YieldExpression: \"yield expression\",\n};\n\ntype NodeTypesWithDescriptions = keyof Omit<\n typeof NodeDescriptions,\n \"UpdateExpression\"\n>;\n\ntype NodeWithDescription =\n | {\n type: \"UpdateExpression\";\n prefix: boolean;\n }\n | {\n type: NodeTypesWithDescriptions;\n };\n\n// @ts-expect-error prefix is specified only when type is UpdateExpression\n// eslint-disable-next-line no-confusing-arrow\nconst toNodeDescription = ({ type, prefix }: NodeWithDescription) =>\n type === \"UpdateExpression\"\n ? NodeDescriptions.UpdateExpression[String(prefix) as \"true\" | \"false\"]\n : NodeDescriptions[type];\n\nexport default toNodeDescription;\n","import type { ParseErrorTemplates } from \"../parse-error.ts\";\nimport toNodeDescription from \"./to-node-description.ts\";\n\nexport type LValAncestor =\n | { type: \"UpdateExpression\"; prefix: boolean }\n | {\n type:\n | \"ArrayPattern\"\n | \"AssignmentExpression\"\n | \"CatchClause\"\n | \"ForOfStatement\"\n | \"FormalParameters\"\n | \"ForInStatement\"\n | \"ForStatement\"\n | \"ImportSpecifier\"\n | \"ImportNamespaceSpecifier\"\n | \"ImportDefaultSpecifier\"\n | \"ParenthesizedExpression\"\n | \"ObjectPattern\"\n | \"RestElement\"\n | \"VariableDeclarator\";\n };\n\nexport default {\n AccessorIsGenerator: ({ kind }: { kind: \"get\" | \"set\" }) =>\n `A ${kind}ter cannot be a generator.`,\n ArgumentsInClass:\n \"'arguments' is only allowed in functions and class methods.\",\n AsyncFunctionInSingleStatementContext:\n \"Async functions can only be declared at the top level or inside a block.\",\n AwaitBindingIdentifier:\n \"Can not use 'await' as identifier inside an async function.\",\n AwaitBindingIdentifierInStaticBlock:\n \"Can not use 'await' as identifier inside a static block.\",\n AwaitExpressionFormalParameter:\n \"'await' is not allowed in async function parameters.\",\n AwaitUsingNotInAsyncContext:\n \"'await using' is only allowed within async functions and at the top levels of modules.\",\n AwaitNotInAsyncContext:\n \"'await' is only allowed within async functions and at the top levels of modules.\",\n AwaitNotInAsyncFunction: \"'await' is only allowed within async functions.\",\n BadGetterArity: \"A 'get' accessor must not have any formal parameters.\",\n BadSetterArity: \"A 'set' accessor must have exactly one formal parameter.\",\n BadSetterRestParameter:\n \"A 'set' accessor function argument must not be a rest parameter.\",\n ConstructorClassField: \"Classes may not have a field named 'constructor'.\",\n ConstructorClassPrivateField:\n \"Classes may not have a private field named '#constructor'.\",\n ConstructorIsAccessor: \"Class constructor may not be an accessor.\",\n ConstructorIsAsync: \"Constructor can't be an async function.\",\n ConstructorIsGenerator: \"Constructor can't be a generator.\",\n DeclarationMissingInitializer: ({\n kind,\n }: {\n kind: \"const\" | \"destructuring\";\n }) => `Missing initializer in ${kind} declaration.`,\n DecoratorArgumentsOutsideParentheses:\n \"Decorator arguments must be moved inside parentheses: use '@(decorator(args))' instead of '@(decorator)(args)'.\",\n DecoratorBeforeExport:\n \"Decorators must be placed *before* the 'export' keyword. Remove the 'decoratorsBeforeExport: true' option to use the 'export @decorator class {}' syntax.\",\n DecoratorsBeforeAfterExport:\n \"Decorators can be placed *either* before or after the 'export' keyword, but not in both locations at the same time.\",\n DecoratorConstructor:\n \"Decorators can't be used with a constructor. Did you mean '@dec class { ... }'?\",\n DecoratorExportClass:\n \"Decorators must be placed *after* the 'export' keyword. Remove the 'decoratorsBeforeExport: false' option to use the '@decorator export class {}' syntax.\",\n DecoratorSemicolon: \"Decorators must not be followed by a semicolon.\",\n DecoratorStaticBlock: \"Decorators can't be used with a static block.\",\n DeferImportRequiresNamespace:\n 'Only `import defer * as x from \"./module\"` is valid.',\n DeletePrivateField: \"Deleting a private field is not allowed.\",\n DestructureNamedImport:\n \"ES2015 named imports do not destructure. Use another statement for destructuring after the import.\",\n DuplicateConstructor: \"Duplicate constructor in the same class.\",\n DuplicateDefaultExport: \"Only one default export allowed per module.\",\n DuplicateExport: ({ exportName }: { exportName: string }) =>\n `\\`${exportName}\\` has already been exported. Exported identifiers must be unique.`,\n DuplicateProto: \"Redefinition of __proto__ property.\",\n DuplicateRegExpFlags: \"Duplicate regular expression flag.\",\n DynamicImportPhaseRequiresImportExpressions: ({ phase }: { phase: string }) =>\n `'import.${phase}(...)' can only be parsed when using the 'createImportExpressions' option.`,\n ElementAfterRest: \"Rest element must be last element.\",\n EscapedCharNotAnIdentifier: \"Invalid Unicode escape.\",\n ExportBindingIsString: ({\n localName,\n exportName,\n }: {\n localName: string;\n exportName: string;\n }) =>\n `A string literal cannot be used as an exported binding without \\`from\\`.\\n- Did you mean \\`export { '${localName}' as '${exportName}' } from 'some-module'\\`?`,\n ExportDefaultFromAsIdentifier:\n \"'from' is not allowed as an identifier after 'export default'.\",\n\n ForInOfLoopInitializer: ({\n type,\n }: {\n type: \"ForInStatement\" | \"ForOfStatement\";\n }) =>\n `'${\n type === \"ForInStatement\" ? \"for-in\" : \"for-of\"\n }' loop variable declaration may not have an initializer.`,\n ForInUsing: \"For-in loop may not start with 'using' declaration.\",\n\n ForOfAsync: \"The left-hand side of a for-of loop may not be 'async'.\",\n ForOfLet: \"The left-hand side of a for-of loop may not start with 'let'.\",\n GeneratorInSingleStatementContext:\n \"Generators can only be declared at the top level or inside a block.\",\n\n IllegalBreakContinue: ({\n type,\n }: {\n type: \"BreakStatement\" | \"ContinueStatement\";\n }) => `Unsyntactic ${type === \"BreakStatement\" ? \"break\" : \"continue\"}.`,\n\n IllegalLanguageModeDirective:\n \"Illegal 'use strict' directive in function with non-simple parameter list.\",\n IllegalReturn: \"'return' outside of function.\",\n ImportAttributesUseAssert:\n \"The `assert` keyword in import attributes is deprecated and it has been replaced by the `with` keyword. You can enable the `deprecatedAssertSyntax: true` option in the import attributes plugin to suppress this error.\",\n ImportBindingIsString: ({ importName }: { importName: string }) =>\n `A string literal cannot be used as an imported binding.\\n- Did you mean \\`import { \"${importName}\" as foo }\\`?`,\n ImportCallArgumentTrailingComma:\n \"Trailing comma is disallowed inside import(...) arguments.\",\n ImportCallArity: ({ maxArgumentCount }: { maxArgumentCount: 1 | 2 }) =>\n `\\`import()\\` requires exactly ${\n maxArgumentCount === 1 ? \"one argument\" : \"one or two arguments\"\n }.`,\n ImportCallNotNewExpression: \"Cannot use new with import(...).\",\n ImportCallSpreadArgument: \"`...` is not allowed in `import()`.\",\n ImportJSONBindingNotDefault:\n \"A JSON module can only be imported with `default`.\",\n ImportReflectionHasAssertion: \"`import module x` cannot have assertions.\",\n ImportReflectionNotBinding:\n 'Only `import module x from \"./module\"` is valid.',\n IncompatibleRegExpUVFlags:\n \"The 'u' and 'v' regular expression flags cannot be enabled at the same time.\",\n InvalidBigIntLiteral: \"Invalid BigIntLiteral.\",\n InvalidCodePoint: \"Code point out of bounds.\",\n InvalidCoverInitializedName: \"Invalid shorthand property initializer.\",\n InvalidDecimal: \"Invalid decimal.\",\n InvalidDigit: ({ radix }: { radix: number }) =>\n `Expected number in radix ${radix}.`,\n InvalidEscapeSequence: \"Bad character escape sequence.\",\n InvalidEscapeSequenceTemplate: \"Invalid escape sequence in template.\",\n InvalidEscapedReservedWord: ({ reservedWord }: { reservedWord: string }) =>\n `Escape sequence in keyword ${reservedWord}.`,\n InvalidIdentifier: ({ identifierName }: { identifierName: string }) =>\n `Invalid identifier ${identifierName}.`,\n InvalidLhs: ({ ancestor }: { ancestor: LValAncestor }) =>\n `Invalid left-hand side in ${toNodeDescription(ancestor)}.`,\n InvalidLhsBinding: ({ ancestor }: { ancestor: LValAncestor }) =>\n `Binding invalid left-hand side in ${toNodeDescription(ancestor)}.`,\n InvalidLhsOptionalChaining: ({ ancestor }: { ancestor: LValAncestor }) =>\n `Invalid optional chaining in the left-hand side of ${toNodeDescription(\n ancestor,\n )}.`,\n InvalidNumber: \"Invalid number.\",\n InvalidOrMissingExponent:\n \"Floating-point numbers require a valid exponent after the 'e'.\",\n InvalidOrUnexpectedToken: ({ unexpected }: { unexpected: string }) =>\n `Unexpected character '${unexpected}'.`,\n InvalidParenthesizedAssignment: \"Invalid parenthesized assignment pattern.\",\n InvalidPrivateFieldResolution: ({\n identifierName,\n }: {\n identifierName: string;\n }) => `Private name #${identifierName} is not defined.`,\n InvalidPropertyBindingPattern: \"Binding member expression.\",\n InvalidRecordProperty:\n \"Only properties and spread elements are allowed in record definitions.\",\n InvalidRestAssignmentPattern: \"Invalid rest operator's argument.\",\n LabelRedeclaration: ({ labelName }: { labelName: string }) =>\n `Label '${labelName}' is already declared.`,\n LetInLexicalBinding: \"'let' is disallowed as a lexically bound name.\",\n LineTerminatorBeforeArrow: \"No line break is allowed before '=>'.\",\n MalformedRegExpFlags: \"Invalid regular expression flag.\",\n MissingClassName: \"A class name is required.\",\n MissingEqInAssignment:\n \"Only '=' operator can be used for specifying default value.\",\n MissingSemicolon: \"Missing semicolon.\",\n MissingPlugin: ({ missingPlugin }: { missingPlugin: [string] }) =>\n `This experimental syntax requires enabling the parser plugin: ${missingPlugin\n .map(name => JSON.stringify(name))\n .join(\", \")}.`,\n // FIXME: Would be nice to make this \"missingPlugins\" instead.\n // Also, seems like we can drop the \"(s)\" from the message and just make it \"s\".\n MissingOneOfPlugins: ({ missingPlugin }: { missingPlugin: string[] }) =>\n `This experimental syntax requires enabling one of the following parser plugin(s): ${missingPlugin\n .map(name => JSON.stringify(name))\n .join(\", \")}.`,\n MissingUnicodeEscape: \"Expecting Unicode escape sequence \\\\uXXXX.\",\n MixingCoalesceWithLogical:\n \"Nullish coalescing operator(??) requires parens when mixing with logical operators.\",\n ModuleAttributeDifferentFromType:\n \"The only accepted module attribute is `type`.\",\n ModuleAttributeInvalidValue:\n \"Only string literals are allowed as module attribute values.\",\n ModuleAttributesWithDuplicateKeys: ({ key }: { key: string }) =>\n `Duplicate key \"${key}\" is not allowed in module attributes.`,\n ModuleExportNameHasLoneSurrogate: ({\n surrogateCharCode,\n }: {\n surrogateCharCode: number;\n }) =>\n `An export name cannot include a lone surrogate, found '\\\\u${surrogateCharCode.toString(\n 16,\n )}'.`,\n ModuleExportUndefined: ({ localName }: { localName: string }) =>\n `Export '${localName}' is not defined.`,\n MultipleDefaultsInSwitch: \"Multiple default clauses.\",\n NewlineAfterThrow: \"Illegal newline after throw.\",\n NoCatchOrFinally: \"Missing catch or finally clause.\",\n NumberIdentifier: \"Identifier directly after number.\",\n NumericSeparatorInEscapeSequence:\n \"Numeric separators are not allowed inside unicode escape sequences or hex escape sequences.\",\n ObsoleteAwaitStar:\n \"'await*' has been removed from the async functions proposal. Use Promise.all() instead.\",\n OptionalChainingNoNew:\n \"Constructors in/after an Optional Chain are not allowed.\",\n OptionalChainingNoTemplate:\n \"Tagged Template Literals are not allowed in optionalChain.\",\n OverrideOnConstructor:\n \"'override' modifier cannot appear on a constructor declaration.\",\n ParamDupe: \"Argument name clash.\",\n PatternHasAccessor: \"Object pattern can't contain getter or setter.\",\n PatternHasMethod: \"Object pattern can't contain methods.\",\n PrivateInExpectedIn: ({ identifierName }: { identifierName: string }) =>\n `Private names are only allowed in property accesses (\\`obj.#${identifierName}\\`) or in \\`in\\` expressions (\\`#${identifierName} in obj\\`).`,\n PrivateNameRedeclaration: ({ identifierName }: { identifierName: string }) =>\n `Duplicate private name #${identifierName}.`,\n RecordExpressionBarIncorrectEndSyntaxType:\n \"Record expressions ending with '|}' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.\",\n RecordExpressionBarIncorrectStartSyntaxType:\n \"Record expressions starting with '{|' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.\",\n RecordExpressionHashIncorrectStartSyntaxType:\n \"Record expressions starting with '#{' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'hash'.\",\n RecordNoProto: \"'__proto__' is not allowed in Record expressions.\",\n RestTrailingComma: \"Unexpected trailing comma after rest element.\",\n SloppyFunction:\n \"In non-strict mode code, functions can only be declared at top level or inside a block.\",\n SloppyFunctionAnnexB:\n \"In non-strict mode code, functions can only be declared at top level, inside a block, or as the body of an if statement.\",\n SourcePhaseImportRequiresDefault:\n 'Only `import source x from \"./module\"` is valid.',\n StaticPrototype: \"Classes may not have static property named prototype.\",\n SuperNotAllowed:\n \"`super()` is only valid inside a class constructor of a subclass. Maybe a typo in the method name ('constructor') or not extending another class?\",\n SuperPrivateField: \"Private fields can't be accessed on super.\",\n TrailingDecorator: \"Decorators must be attached to a class element.\",\n TupleExpressionBarIncorrectEndSyntaxType:\n \"Tuple expressions ending with '|]' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.\",\n TupleExpressionBarIncorrectStartSyntaxType:\n \"Tuple expressions starting with '[|' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.\",\n TupleExpressionHashIncorrectStartSyntaxType:\n \"Tuple expressions starting with '#[' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'hash'.\",\n UnexpectedArgumentPlaceholder: \"Unexpected argument placeholder.\",\n UnexpectedAwaitAfterPipelineBody:\n 'Unexpected \"await\" after pipeline body; await must have parentheses in minimal proposal.',\n UnexpectedDigitAfterHash: \"Unexpected digit after hash token.\",\n UnexpectedImportExport:\n \"'import' and 'export' may only appear at the top level.\",\n UnexpectedKeyword: ({ keyword }: { keyword: string }) =>\n `Unexpected keyword '${keyword}'.`,\n UnexpectedLeadingDecorator:\n \"Leading decorators must be attached to a class declaration.\",\n UnexpectedLexicalDeclaration:\n \"Lexical declaration cannot appear in a single-statement context.\",\n UnexpectedNewTarget:\n \"`new.target` can only be used in functions or class properties.\",\n UnexpectedNumericSeparator:\n \"A numeric separator is only allowed between two digits.\",\n UnexpectedPrivateField: \"Unexpected private name.\",\n UnexpectedReservedWord: ({ reservedWord }: { reservedWord: string }) =>\n `Unexpected reserved word '${reservedWord}'.`,\n UnexpectedSuper: \"'super' is only allowed in object methods and classes.\",\n UnexpectedToken: ({\n expected,\n unexpected,\n }: {\n expected?: string | null;\n unexpected?: string | null;\n }) =>\n `Unexpected token${unexpected ? ` '${unexpected}'.` : \"\"}${\n expected ? `, expected \"${expected}\"` : \"\"\n }`,\n UnexpectedTokenUnaryExponentiation:\n \"Illegal expression. Wrap left hand side or entire exponentiation in parentheses.\",\n UnexpectedUsingDeclaration:\n \"Using declaration cannot appear in the top level when source type is `script`.\",\n UnsupportedBind: \"Binding should be performed on object property.\",\n UnsupportedDecoratorExport:\n \"A decorated export must export a class declaration.\",\n UnsupportedDefaultExport:\n \"Only expressions, functions or classes are allowed as the `default` export.\",\n UnsupportedImport:\n \"`import` can only be used in `import()` or `import.meta`.\",\n UnsupportedMetaProperty: ({\n target,\n onlyValidPropertyName,\n }: {\n target: string;\n onlyValidPropertyName: string;\n }) =>\n `The only valid meta property for ${target} is ${target}.${onlyValidPropertyName}.`,\n UnsupportedParameterDecorator:\n \"Decorators cannot be used to decorate parameters.\",\n UnsupportedPropertyDecorator:\n \"Decorators cannot be used to decorate object literal properties.\",\n UnsupportedSuper:\n \"'super' can only be used with function calls (i.e. super()) or in property accesses (i.e. super.prop or super[prop]).\",\n UnterminatedComment: \"Unterminated comment.\",\n UnterminatedRegExp: \"Unterminated regular expression.\",\n UnterminatedString: \"Unterminated string constant.\",\n UnterminatedTemplate: \"Unterminated template.\",\n UsingDeclarationHasBindingPattern:\n \"Using declaration cannot have destructuring patterns.\",\n VarRedeclaration: ({ identifierName }: { identifierName: string }) =>\n `Identifier '${identifierName}' has already been declared.`,\n YieldBindingIdentifier:\n \"Can not use 'yield' as identifier inside a generator.\",\n YieldInParameter: \"Yield expression is not allowed in formal parameters.\",\n ZeroDigitNumericSeparator:\n \"Numeric separator can not be used after leading 0.\",\n} satisfies ParseErrorTemplates;\n","import type { ParseErrorTemplates } from \"../parse-error\";\n\nexport default {\n StrictDelete: \"Deleting local variable in strict mode.\",\n\n // `referenceName` is the StringValue[1] of an IdentifierReference[2], which\n // is represented as just an `Identifier`[3] in the Babel AST.\n // 1. https://tc39.es/ecma262/#sec-static-semantics-stringvalue\n // 2. https://tc39.es/ecma262/#prod-IdentifierReference\n // 3. https://github.com/babel/babel/blob/main/packages/babel-parser/ast/spec.md#identifier\n StrictEvalArguments: ({ referenceName }: { referenceName: string }) =>\n `Assigning to '${referenceName}' in strict mode.`,\n\n // `bindingName` is the StringValue[1] of a BindingIdentifier[2], which is\n // represented as just an `Identifier`[3] in the Babel AST.\n // 1. https://tc39.es/ecma262/#sec-static-semantics-stringvalue\n // 2. https://tc39.es/ecma262/#prod-BindingIdentifier\n // 3. https://github.com/babel/babel/blob/main/packages/babel-parser/ast/spec.md#identifier\n StrictEvalArgumentsBinding: ({ bindingName }: { bindingName: string }) =>\n `Binding '${bindingName}' in strict mode.`,\n\n StrictFunction:\n \"In strict mode code, functions can only be declared at top level or inside a block.\",\n\n StrictNumericEscape: \"The only valid numeric escape in strict mode is '\\\\0'.\",\n\n StrictOctalLiteral: \"Legacy octal literals are not allowed in strict mode.\",\n\n StrictWith: \"'with' in strict mode.\",\n} satisfies ParseErrorTemplates;\n","import type { ParseErrorTemplates } from \"../parse-error.ts\";\nimport toNodeDescription from \"./to-node-description.ts\";\n\nexport const UnparenthesizedPipeBodyDescriptions = new Set([\n \"ArrowFunctionExpression\",\n \"AssignmentExpression\",\n \"ConditionalExpression\",\n \"YieldExpression\",\n] as const);\n\ntype GetSetMemberType<T extends Set<any>> = T extends Set<infer M>\n ? M\n : unknown;\n\ntype UnparenthesizedPipeBodyTypes = GetSetMemberType<\n typeof UnparenthesizedPipeBodyDescriptions\n>;\n\nexport default {\n // This error is only used by the smart-mix proposal\n PipeBodyIsTighter:\n \"Unexpected yield after pipeline body; any yield expression acting as Hack-style pipe body must be parenthesized due to its loose operator precedence.\",\n PipeTopicRequiresHackPipes:\n 'Topic reference is used, but the pipelineOperator plugin was not passed a \"proposal\": \"hack\" or \"smart\" option.',\n PipeTopicUnbound:\n \"Topic reference is unbound; it must be inside a pipe body.\",\n PipeTopicUnconfiguredToken: ({ token }: { token: string }) =>\n `Invalid topic token ${token}. In order to use ${token} as a topic reference, the pipelineOperator plugin must be configured with { \"proposal\": \"hack\", \"topicToken\": \"${token}\" }.`,\n PipeTopicUnused:\n \"Hack-style pipe body does not contain a topic reference; Hack-style pipes must use topic at least once.\",\n PipeUnparenthesizedBody: ({ type }: { type: UnparenthesizedPipeBodyTypes }) =>\n `Hack-style pipe body cannot be an unparenthesized ${toNodeDescription({\n type,\n })}; please wrap it in parentheses.`,\n\n // Messages whose codes start with “Pipeline” or “PrimaryTopic”\n // are retained for backwards compatibility\n // with the deprecated smart-mix pipe operator proposal plugin.\n // They are subject to removal in a future major version.\n PipelineBodyNoArrow:\n 'Unexpected arrow \"=>\" after pipeline body; arrow function in pipeline body must be parenthesized.',\n PipelineBodySequenceExpression:\n \"Pipeline body may not be a comma-separated sequence expression.\",\n PipelineHeadSequenceExpression:\n \"Pipeline head should not be a comma-separated sequence expression.\",\n PipelineTopicUnused:\n \"Pipeline is in topic style but does not use topic reference.\",\n PrimaryTopicNotAllowed:\n \"Topic reference was used in a lexical context without topic binding.\",\n PrimaryTopicRequiresSmartPipeline:\n 'Topic reference is used, but the pipelineOperator plugin was not passed a \"proposal\": \"hack\" or \"smart\" option.',\n} satisfies ParseErrorTemplates;\n","import { Position } from \"./util/location.ts\";\nimport type { Undone } from \"./parser/node.ts\";\nimport type { Node } from \"./types.ts\";\n\ntype SyntaxPlugin =\n | \"flow\"\n | \"typescript\"\n | \"jsx\"\n | \"pipelineOperator\"\n | \"placeholders\";\n\ntype ParseErrorCode =\n | \"BABEL_PARSER_SYNTAX_ERROR\"\n | \"BABEL_PARSER_SOURCETYPE_MODULE_REQUIRED\";\n\n// Babel uses \"normal\" SyntaxErrors for it's errors, but adds some extra\n// functionality. This functionality is defined in the\n// `ParseErrorSpecification` interface below. We may choose to change to someday\n// give our errors their own full-blown class, but until then this allow us to\n// keep all the desirable properties of SyntaxErrors (like their name in stack\n// traces, etc.), and also allows us to punt on any publicly facing\n// class-hierarchy decisions until Babel 8.\ninterface ParseErrorSpecification<ErrorDetails> {\n // Look, these *could* be readonly, but then Flow complains when we initially\n // set them. We could do a whole dance and make a special interface that's not\n // readonly for when we create the error, then cast it to the readonly\n // interface for public use, but the previous implementation didn't have them\n // as readonly, so let's just not worry about it for now.\n code: ParseErrorCode;\n reasonCode: string;\n syntaxPlugin?: SyntaxPlugin;\n missingPlugin?: string | string[];\n loc: Position;\n details: ErrorDetails;\n\n // We should consider removing this as it now just contains the same\n // information as `loc.index`.\n // pos: number;\n}\n\nexport type ParseError<ErrorDetails> = SyntaxError &\n ParseErrorSpecification<ErrorDetails>;\n\n// By `ParseErrorConstructor`, we mean something like the new-less style\n// `ErrorConstructor`[1], since `ParseError`'s are not themselves actually\n// separate classes from `SyntaxError`'s.\n//\n// 1. https://github.com/microsoft/TypeScript/blob/v4.5.5/lib/lib.es5.d.ts#L1027\nexport type ParseErrorConstructor<ErrorDetails> = (a: {\n loc: Position;\n details: ErrorDetails;\n}) => ParseError<ErrorDetails>;\n\ntype ToMessage<ErrorDetails> = (self: ErrorDetails) => string;\n\ntype ParseErrorCredentials<ErrorDetails> = {\n code: string;\n reasonCode: string;\n syntaxPlugin?: SyntaxPlugin;\n toMessage: ToMessage<ErrorDetails>;\n};\n\nfunction defineHidden(obj: object, key: string, value: unknown) {\n Object.defineProperty(obj, key, {\n enumerable: false,\n configurable: true,\n value,\n });\n}\n\nfunction toParseErrorConstructor<ErrorDetails extends object>({\n toMessage,\n ...properties\n}: ParseErrorCredentials<ErrorDetails>): ParseErrorConstructor<ErrorDetails> {\n type ConstructorArgument = {\n loc: Position;\n details: ErrorDetails;\n };\n\n return function constructor({ loc, details }: ConstructorArgument) {\n const error = new SyntaxError();\n Object.assign(error, properties, { loc, pos: loc.index });\n if (\"missingPlugin\" in details) {\n Object.assign(error, { missingPlugin: details.missingPlugin });\n }\n\n type Overrides = {\n loc?: Position;\n details?: ErrorDetails;\n };\n defineHidden(error, \"clone\", function clone(overrides: Overrides = {}) {\n const { line, column, index } = overrides.loc ?? loc;\n return constructor({\n loc: new Position(line, column, index),\n details: { ...details, ...overrides.details },\n });\n });\n\n defineHidden(error, \"details\", details);\n\n Object.defineProperty(error, \"message\", {\n configurable: true,\n get(this: ParseError<ErrorDetails>): string {\n const message = `${toMessage(details)} (${loc.line}:${loc.column})`;\n this.message = message;\n return message;\n },\n set(value: string) {\n Object.defineProperty(this, \"message\", { value, writable: true });\n },\n });\n\n return error as ParseError<ErrorDetails>;\n };\n}\n\ntype ParseErrorTemplate =\n | string\n | ToMessage<any>\n | { message: string | ToMessage<any>; code?: ParseErrorCode };\n\nexport type ParseErrorTemplates = { [reasonCode: string]: ParseErrorTemplate };\n\n// This is the templated form of `ParseErrorEnum`.\n//\n// Note: We could factor out the return type calculation into something like\n// `ParseErrorConstructor<T extends ParseErrorTemplates>`, and then we could\n// reuse it in the non-templated form of `ParseErrorEnum`, but TypeScript\n// doesn't seem to drill down that far when showing you the computed type of\n// an object in an editor, so we'll leave it inlined for now.\nexport function ParseErrorEnum(a: TemplateStringsArray): <\n T extends ParseErrorTemplates,\n>(\n parseErrorTemplates: T,\n) => {\n [K in keyof T]: ParseErrorConstructor<\n T[K] extends { message: string | ToMessage<any> }\n ? T[K][\"message\"] extends ToMessage<any>\n ? Parameters<T[K][\"message\"]>[0]\n : {}\n : T[K] extends ToMessage<any>\n ? Parameters<T[K]>[0]\n : {}\n >;\n};\n\nexport function ParseErrorEnum<T extends ParseErrorTemplates>(\n parseErrorTemplates: T,\n syntaxPlugin?: SyntaxPlugin,\n): {\n [K in keyof T]: ParseErrorConstructor<\n T[K] extends { message: string | ToMessage<any> }\n ? T[K][\"message\"] extends ToMessage<any>\n ? Parameters<T[K][\"message\"]>[0]\n : {}\n : T[K] extends ToMessage<any>\n ? Parameters<T[K]>[0]\n : {}\n >;\n};\n\n// You call `ParseErrorEnum` with a mapping from `ReasonCode`'s to either:\n//\n// 1. a static error message,\n// 2. `toMessage` functions that define additional necessary `details` needed by\n// the `ParseError`, or\n// 3. Objects that contain a `message` of one of the above and overridden `code`\n// and/or `reasonCode`:\n//\n// ParseErrorEnum `optionalSyntaxPlugin` ({\n// ErrorWithStaticMessage: \"message\",\n// ErrorWithDynamicMessage: ({ type } : { type: string }) => `${type}`),\n// ErrorWithOverriddenCodeAndOrReasonCode: {\n// message: ({ type }: { type: string }) => `${type}`),\n// code: \"AN_ERROR_CODE\",\n// ...(BABEL_8_BREAKING ? { } : { reasonCode: \"CustomErrorReasonCode\" })\n// }\n// });\n//\nexport function ParseErrorEnum(\n argument: TemplateStringsArray | ParseErrorTemplates,\n syntaxPlugin?: SyntaxPlugin,\n) {\n // If the first parameter is an array, that means we were called with a tagged\n // template literal. Extract the syntaxPlugin from this, and call again in\n // the \"normalized\" form.\n if (Array.isArray(argument)) {\n return (parseErrorTemplates: ParseErrorTemplates) =>\n ParseErrorEnum(parseErrorTemplates, argument[0]);\n }\n\n const ParseErrorConstructors = {} as Record<\n string,\n ParseErrorConstructor<unknown>\n >;\n\n for (const reasonCode of Object.keys(argument)) {\n const template = (argument as ParseErrorTemplates)[reasonCode];\n const { message, ...rest } =\n typeof template === \"string\"\n ? { message: () => template }\n : typeof template === \"function\"\n ? { message: template }\n : template;\n const toMessage = typeof message === \"string\" ? () => message : message;\n\n ParseErrorConstructors[reasonCode] = toParseErrorConstructor({\n code: \"BABEL_PARSER_SYNTAX_ERROR\",\n reasonCode,\n toMessage,\n ...(syntaxPlugin ? { syntaxPlugin } : {}),\n ...rest,\n });\n }\n\n return ParseErrorConstructors;\n}\n\nexport type RaiseProperties<ErrorDetails> = {\n at: Position | Undone<Node>;\n} & ErrorDetails;\n\nimport ModuleErrors from \"./parse-error/module-errors.ts\";\nimport StandardErrors from \"./parse-error/standard-errors.ts\";\nimport StrictModeErrors from \"./parse-error/strict-mode-errors.ts\";\nimport PipelineOperatorErrors from \"./parse-error/pipeline-operator-errors.ts\";\n\nexport const Errors = {\n ...ParseErrorEnum(ModuleErrors),\n ...ParseErrorEnum(StandardErrors),\n ...ParseErrorEnum(StrictModeErrors),\n ...ParseErrorEnum`pipelineOperator`(PipelineOperatorErrors),\n};\n\nexport type { LValAncestor } from \"./parse-error/standard-errors.ts\";\n","import type { TokenType } from \"../tokenizer/types.ts\";\nimport type Parser from \"../parser/index.ts\";\nimport type { ExpressionErrors } from \"../parser/util.ts\";\nimport type * as N from \"../types.ts\";\nimport type { Node as NodeType, NodeBase, File } from \"../types.ts\";\nimport type { Position } from \"../util/location.ts\";\nimport { Errors } from \"../parse-error.ts\";\nimport type { Undone } from \"../parser/node.ts\";\nimport type { BindingTypes } from \"../util/scopeflags.ts\";\n\nconst { defineProperty } = Object;\nconst toUnenumerable = (object: any, key: string) =>\n defineProperty(object, key, { enumerable: false, value: object[key] });\n\nfunction toESTreeLocation(node: any) {\n node.loc.start && toUnenumerable(node.loc.start, \"index\");\n node.loc.end && toUnenumerable(node.loc.end, \"index\");\n\n return node;\n}\n\nexport default (superClass: typeof Parser) =>\n class ESTreeParserMixin extends superClass implements Parser {\n parse(): File {\n const file = toESTreeLocation(super.parse());\n\n if (this.options.tokens) {\n file.tokens = file.tokens.map(toESTreeLocation);\n }\n\n return file;\n }\n\n // @ts-expect-error ESTree plugin changes node types\n parseRegExpLiteral({ pattern, flags }): N.EstreeRegExpLiteral {\n let regex: RegExp | null = null;\n try {\n regex = new RegExp(pattern, flags);\n } catch (e) {\n // In environments that don't support these flags value will\n // be null as the regex can't be represented natively.\n }\n const node = this.estreeParseLiteral<N.EstreeRegExpLiteral>(regex);\n node.regex = { pattern, flags };\n\n return node;\n }\n\n // @ts-expect-error ESTree plugin changes node types\n parseBigIntLiteral(value: any): N.Node {\n // https://github.com/estree/estree/blob/master/es2020.md#bigintliteral\n let bigInt: BigInt | null;\n try {\n bigInt = BigInt(value);\n } catch {\n bigInt = null;\n }\n const node = this.estreeParseLiteral<N.EstreeBigIntLiteral>(bigInt);\n node.bigint = String(node.value || value);\n\n return node;\n }\n\n // @ts-expect-error ESTree plugin changes node types\n parseDecimalLiteral(value: any): N.Node {\n // https://github.com/estree/estree/blob/master/experimental/decimal.md\n // todo: use BigDecimal when node supports it.\n const decimal: null = null;\n const node = this.estreeParseLiteral(decimal);\n node.decimal = String(node.value || value);\n\n return node;\n }\n\n estreeParseLiteral<T extends N.Node>(value: any) {\n // @ts-expect-error ESTree plugin changes node types\n return this.parseLiteral<T>(value, \"Literal\");\n }\n\n // @ts-expect-error ESTree plugin changes node types\n parseStringLiteral(value: any): N.Node {\n return this.estreeParseLiteral(value);\n }\n\n parseNumericLiteral(value: any): any {\n return this.estreeParseLiteral(value);\n }\n\n // @ts-expect-error ESTree plugin changes node types\n parseNullLiteral(): N.Node {\n return this.estreeParseLiteral(null);\n }\n\n parseBooleanLiteral(value: boolean): N.BooleanLiteral {\n return this.estreeParseLiteral(value);\n }\n\n // Cast a Directive to an ExpressionStatement. Mutates the input Directive.\n directiveToStmt(directive: N.Directive): N.ExpressionStatement {\n const expression = directive.value as any as N.EstreeLiteral;\n delete directive.value;\n\n expression.type = \"Literal\";\n // @ts-expect-error N.EstreeLiteral.raw is not defined.\n expression.raw = expression.extra.raw;\n expression.value = expression.extra.expressionValue;\n\n const stmt = directive as any as N.ExpressionStatement;\n stmt.type = \"ExpressionStatement\";\n stmt.expression = expression;\n // @ts-expect-error N.ExpressionStatement.directive is not defined\n stmt.directive = expression.extra.rawValue;\n\n delete expression.extra;\n\n return stmt;\n }\n\n // ==================================\n // Overrides\n // ==================================\n\n initFunction(node: N.BodilessFunctionOrMethodBase, isAsync: boolean): void {\n super.initFunction(node, isAsync);\n node.expression = false;\n }\n\n checkDeclaration(node: N.Pattern | N.ObjectProperty): void {\n if (node != null && this.isObjectProperty(node)) {\n // @ts-expect-error plugin typings\n this.checkDeclaration((node as unknown as N.EstreeProperty).value);\n } else {\n super.checkDeclaration(node);\n }\n }\n\n getObjectOrClassMethodParams(method: N.ObjectMethod | N.ClassMethod) {\n return (method as any as N.EstreeProperty | N.EstreeMethodDefinition)\n .value.params;\n }\n\n isValidDirective(stmt: N.Statement): boolean {\n return (\n stmt.type === \"ExpressionStatement\" &&\n stmt.expression.type === \"Literal\" &&\n typeof stmt.expression.value === \"string\" &&\n !stmt.expression.extra?.parenthesized\n );\n }\n\n parseBlockBody(\n node: N.BlockStatementLike,\n allowDirectives: boolean | undefined | null,\n topLevel: boolean,\n end: TokenType,\n afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n ): void {\n super.parseBlockBody(\n node,\n allowDirectives,\n topLevel,\n end,\n afterBlockParse,\n );\n\n const directiveStatements = node.directives.map(d =>\n this.directiveToStmt(d),\n );\n // @ts-expect-error estree plugin typings\n node.body = directiveStatements.concat(node.body);\n delete node.directives;\n }\n\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 this.parseMethod(\n method,\n isGenerator,\n isAsync,\n isConstructor,\n allowsDirectSuper,\n \"ClassMethod\",\n true,\n );\n if (method.typeParameters) {\n // @ts-expect-error mutate AST types\n method.value.typeParameters = method.typeParameters;\n delete method.typeParameters;\n }\n classBody.body.push(method);\n }\n\n parsePrivateName(): any {\n const node = super.parsePrivateName();\n if (!process.env.BABEL_8_BREAKING) {\n if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n return node;\n }\n }\n return this.convertPrivateNameToPrivateIdentifier(node);\n }\n\n convertPrivateNameToPrivateIdentifier(\n node: N.PrivateName,\n ): N.EstreePrivateIdentifier {\n const name = super.getPrivateNameSV(node);\n node = node as any;\n delete node.id;\n // @ts-expect-error mutate AST types\n node.name = name;\n // @ts-expect-error mutate AST types\n node.type = \"PrivateIdentifier\";\n return node as unknown as N.EstreePrivateIdentifier;\n }\n\n isPrivateName(node: N.Node): boolean {\n if (!process.env.BABEL_8_BREAKING) {\n if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n return super.isPrivateName(node);\n }\n }\n return node.type === \"PrivateIdentifier\";\n }\n\n getPrivateNameSV(node: N.Node): string {\n if (!process.env.BABEL_8_BREAKING) {\n if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n return super.getPrivateNameSV(node);\n }\n }\n return node.name;\n }\n\n // @ts-expect-error plugin may override interfaces\n parseLiteral<T extends N.Literal>(value: any, type: T[\"type\"]): T {\n const node = super.parseLiteral<T>(value, type);\n // @ts-expect-error mutating AST types\n node.raw = node.extra.raw;\n delete node.extra;\n\n return node;\n }\n\n parseFunctionBody(\n node: N.Function,\n allowExpression?: boolean | null,\n isMethod: boolean = false,\n ): void {\n super.parseFunctionBody(node, allowExpression, isMethod);\n node.expression = node.body.type !== \"BlockStatement\";\n }\n\n // @ts-expect-error plugin may override interfaces\n parseMethod<\n T extends N.ClassPrivateMethod | N.ObjectMethod | N.ClassMethod,\n >(\n node: Undone<T>,\n isGenerator: boolean,\n isAsync: boolean,\n isConstructor: boolean,\n allowDirectSuper: boolean,\n type: T[\"type\"],\n inClassScope: boolean = false,\n ): N.EstreeMethodDefinition {\n let funcNode = this.startNode<N.MethodLike>();\n funcNode.kind = node.kind; // provide kind, so super method correctly sets state\n funcNode = super.parseMethod(\n // @ts-expect-error todo(flow->ts)\n funcNode,\n isGenerator,\n isAsync,\n isConstructor,\n allowDirectSuper,\n type,\n inClassScope,\n );\n // @ts-expect-error mutate AST types\n funcNode.type = \"FunctionExpression\";\n delete funcNode.kind;\n // @ts-expect-error mutate AST types\n node.value = funcNode;\n if (type === \"ClassPrivateMethod\") {\n node.computed = false;\n }\n return this.finishNode(\n // @ts-expect-error cast methods to estree types\n node as Undone<N.EstreeMethodDefinition>,\n \"MethodDefinition\",\n );\n }\n\n parseClassProperty(...args: [N.ClassProperty]): any {\n const propertyNode = super.parseClassProperty(...args) as any;\n if (!process.env.BABEL_8_BREAKING) {\n if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n return propertyNode as N.EstreePropertyDefinition;\n }\n }\n propertyNode.type = \"PropertyDefinition\";\n return propertyNode as N.EstreePropertyDefinition;\n }\n\n parseClassPrivateProperty(...args: [N.ClassPrivateProperty]): any {\n const propertyNode = super.parseClassPrivateProperty(...args) as any;\n if (!process.env.BABEL_8_BREAKING) {\n if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n return propertyNode as N.EstreePropertyDefinition;\n }\n }\n propertyNode.type = \"PropertyDefinition\";\n propertyNode.computed = false;\n return propertyNode as N.EstreePropertyDefinition;\n }\n\n parseObjectMethod(\n prop: N.ObjectMethod,\n isGenerator: boolean,\n isAsync: boolean,\n isPattern: boolean,\n isAccessor: boolean,\n ): N.ObjectMethod | undefined | null {\n const node: N.EstreeProperty = super.parseObjectMethod(\n prop,\n isGenerator,\n isAsync,\n isPattern,\n isAccessor,\n ) as any;\n\n if (node) {\n node.type = \"Property\";\n if ((node as any as N.ClassMethod).kind === \"method\") {\n node.kind = \"init\";\n }\n node.shorthand = false;\n }\n\n return node as any;\n }\n\n parseObjectProperty(\n prop: N.ObjectProperty,\n startLoc: Position | undefined | null,\n isPattern: boolean,\n refExpressionErrors?: ExpressionErrors | null,\n ): N.ObjectProperty | undefined | null {\n const node: N.EstreeProperty = super.parseObjectProperty(\n prop,\n startLoc,\n isPattern,\n refExpressionErrors,\n ) as any;\n\n if (node) {\n node.kind = \"init\";\n node.type = \"Property\";\n }\n\n return node as any;\n }\n\n isValidLVal(\n type: string,\n isUnparenthesizedInAssign: boolean,\n binding: BindingTypes,\n ) {\n return type === \"Property\"\n ? \"value\"\n : super.isValidLVal(type, isUnparenthesizedInAssign, binding);\n }\n\n isAssignable(node: N.Node, isBinding?: boolean): boolean {\n if (node != null && this.isObjectProperty(node)) {\n return this.isAssignable(node.value, isBinding);\n }\n return super.isAssignable(node, isBinding);\n }\n\n toAssignable(node: N.Node, isLHS: boolean = false): void {\n if (node != null && this.isObjectProperty(node)) {\n const { key, value } = node;\n if (this.isPrivateName(key)) {\n this.classScope.usePrivateName(\n this.getPrivateNameSV(key),\n key.loc.start,\n );\n }\n this.toAssignable(value, isLHS);\n } else {\n super.toAssignable(node, isLHS);\n }\n }\n\n toAssignableObjectExpressionProp(\n prop: N.Node,\n isLast: boolean,\n isLHS: boolean,\n ) {\n if (prop.kind === \"get\" || prop.kind === \"set\") {\n this.raise(Errors.PatternHasAccessor, { at: prop.key });\n } else if (prop.method) {\n this.raise(Errors.PatternHasMethod, { at: prop.key });\n } else {\n super.toAssignableObjectExpressionProp(prop, isLast, isLHS);\n }\n }\n\n finishCallExpression<T extends N.CallExpression | N.OptionalCallExpression>(\n unfinished: Undone<T>,\n optional: boolean,\n ): T {\n const node = super.finishCallExpression(unfinished, optional);\n\n if (node.callee.type === \"Import\") {\n (node as N.Node as N.EstreeImportExpression).type = \"ImportExpression\";\n (node as N.Node as N.EstreeImportExpression).source = node.arguments[0];\n if (\n this.hasPlugin(\"importAttributes\") ||\n this.hasPlugin(\"importAssertions\")\n ) {\n (node as N.Node as N.EstreeImportExpression).options =\n node.arguments[1] ?? null;\n // compatibility with previous ESTree AST\n (node as N.Node as N.EstreeImportExpression).attributes =\n node.arguments[1] ?? null;\n }\n // arguments isn't optional in the type definition\n delete node.arguments;\n // callee isn't optional in the type definition\n delete node.callee;\n }\n\n return node;\n }\n\n toReferencedArguments(\n node:\n | N.CallExpression\n | N.OptionalCallExpression\n | N.EstreeImportExpression,\n /* isParenthesizedExpr?: boolean, */\n ) {\n // ImportExpressions do not have an arguments array.\n if (node.type === \"ImportExpression\") {\n return;\n }\n\n super.toReferencedArguments(node);\n }\n\n parseExport(\n unfinished: Undone<N.AnyExport>,\n decorators: N.Decorator[] | null,\n ) {\n const exportStartLoc = this.state.lastTokStartLoc;\n const node = super.parseExport(unfinished, decorators);\n\n switch (node.type) {\n case \"ExportAllDeclaration\":\n // @ts-expect-error mutating AST types\n node.exported = null;\n break;\n\n case \"ExportNamedDeclaration\":\n if (\n node.specifiers.length === 1 &&\n // @ts-expect-error mutating AST types\n node.specifiers[0].type === \"ExportNamespaceSpecifier\"\n ) {\n // @ts-expect-error mutating AST types\n node.type = \"ExportAllDeclaration\";\n // @ts-expect-error mutating AST types\n node.exported = node.specifiers[0].exported;\n delete node.specifiers;\n }\n\n // fallthrough\n case \"ExportDefaultDeclaration\":\n {\n const { declaration } = node;\n if (\n declaration?.type === \"ClassDeclaration\" &&\n declaration.decorators?.length > 0 &&\n // decorator comes before export\n declaration.start === node.start\n ) {\n this.resetStartLocation(\n node,\n // For compatibility with ESLint's keyword-spacing rule, which assumes that an\n // export declaration must start with export.\n // https://github.com/babel/babel/issues/15085\n // Here we reset export declaration's start to be the start of the export token\n exportStartLoc,\n );\n }\n }\n\n break;\n }\n\n return node;\n }\n\n parseSubscript(\n base: N.Expression,\n startLoc: Position,\n noCalls: boolean | undefined | null,\n state: N.ParseSubscriptState,\n ) {\n const node = super.parseSubscript(base, startLoc, noCalls, state);\n\n if (state.optionalChainMember) {\n // https://github.com/estree/estree/blob/master/es2020.md#chainexpression\n if (\n node.type === \"OptionalMemberExpression\" ||\n node.type === \"OptionalCallExpression\"\n ) {\n node.type = node.type.substring(8); // strip Optional prefix\n }\n if (state.stop) {\n const chain = this.startNodeAtNode(node);\n chain.expression = node;\n return this.finishNode(chain, \"ChainExpression\");\n }\n } else if (\n node.type === \"MemberExpression\" ||\n node.type === \"CallExpression\"\n ) {\n node.optional = false;\n }\n\n return node;\n }\n\n isOptionalMemberExpression(node: N.Node) {\n if (node.type === \"ChainExpression\") {\n return node.expression.type === \"MemberExpression\";\n }\n return super.isOptionalMemberExpression(node);\n }\n\n hasPropertyAsPrivateName(node: N.Node): boolean {\n if (node.type === \"ChainExpression\") {\n node = node.expression;\n }\n return super.hasPropertyAsPrivateName(node);\n }\n\n // @ts-expect-error override interfaces\n isObjectProperty(node: N.Node): boolean {\n return node.type === \"Property\" && node.kind === \"init\" && !node.method;\n }\n\n isObjectMethod(node: N.Node): boolean {\n return node.method || node.kind === \"get\" || node.kind === \"set\";\n }\n\n finishNodeAt<T extends NodeType>(\n node: Undone<T>,\n type: T[\"type\"],\n endLoc: Position,\n ): T {\n return toESTreeLocation(super.finishNodeAt(node, type, endLoc));\n }\n\n resetStartLocation(node: N.Node, startLoc: Position) {\n super.resetStartLocation(node, startLoc);\n toESTreeLocation(node);\n }\n\n resetEndLocation(\n node: NodeBase,\n endLoc: Position = this.state.lastTokEndLoc,\n ): void {\n super.resetEndLocation(node, endLoc);\n toESTreeLocation(node);\n }\n };\n","// The token context is used in JSX plugin to track\n// jsx tag / jsx text / normal JavaScript expression\n\nexport class TokContext {\n constructor(token: string, preserveSpace?: boolean) {\n this.token = token;\n this.preserveSpace = !!preserveSpace;\n }\n\n token: string;\n preserveSpace: boolean;\n}\n\nconst types: {\n [key: string]: TokContext;\n} = {\n brace: new TokContext(\"{\"), // normal JavaScript expression\n j_oTag: new TokContext(\"<tag\"), // JSX opening tag\n j_cTag: new TokContext(\"</tag\"), // JSX closing tag\n j_expr: new TokContext(\"<tag>...</tag>\", true), // JSX expressions\n};\n\nif (!process.env.BABEL_8_BREAKING) {\n types.template = new TokContext(\"`\", true);\n}\n\nexport { types };\n","import { types as tc, type TokContext } from \"./context.ts\";\n// ## Token types\n\n// The assignment of fine-grained, information-carrying type objects\n// allows the tokenizer to store the information it has about a\n// token in a way that is very cheap for the parser to look up.\n\n// All token type variables start with an underscore, to make them\n// easy to recognize.\n\n// The `beforeExpr` property is used to disambiguate between 1) binary\n// expression (<) and JSX Tag start (<name>); 2) object literal and JSX\n// texts. It is set on the `updateContext` function in the JSX plugin.\n\n// The `startsExpr` property is used to determine whether an expression\n// may be the “argument” subexpression of a `yield` expression or\n// `yield` statement. It is set on all token types that may be at the\n// start of a subexpression.\n\n// `isLoop` marks a keyword as starting a loop, which is important\n// to know when parsing a label, in order to allow or disallow\n// continue jumps to that label.\n\nconst beforeExpr = true;\nconst startsExpr = true;\nconst isLoop = true;\nconst isAssign = true;\nconst prefix = true;\nconst postfix = true;\n\ntype TokenOptions = {\n keyword?: string;\n beforeExpr?: boolean;\n startsExpr?: boolean;\n rightAssociative?: boolean;\n isLoop?: boolean;\n isAssign?: boolean;\n prefix?: boolean;\n postfix?: boolean;\n binop?: number | null;\n};\n\n// Internally the tokenizer stores token as a number\nexport type TokenType = number;\n\n// The `ExportedTokenType` is exported via `tokTypes` and accessible\n// when `tokens: true` is enabled. Unlike internal token type, it provides\n// metadata of the tokens.\nexport class ExportedTokenType {\n label: string;\n keyword: string | undefined | null;\n beforeExpr: boolean;\n startsExpr: boolean;\n rightAssociative: boolean;\n isLoop: boolean;\n isAssign: boolean;\n prefix: boolean;\n postfix: boolean;\n binop: number | undefined | null;\n // todo(Babel 8): remove updateContext from exposed token layout\n declare updateContext:\n | ((context: Array<TokContext>) => void)\n | undefined\n | null;\n\n constructor(label: string, conf: TokenOptions = {}) {\n this.label = label;\n this.keyword = conf.keyword;\n this.beforeExpr = !!conf.beforeExpr;\n this.startsExpr = !!conf.startsExpr;\n this.rightAssociative = !!conf.rightAssociative;\n this.isLoop = !!conf.isLoop;\n this.isAssign = !!conf.isAssign;\n this.prefix = !!conf.prefix;\n this.postfix = !!conf.postfix;\n this.binop = conf.binop != null ? conf.binop : null;\n if (!process.env.BABEL_8_BREAKING) {\n this.updateContext = null;\n }\n }\n}\n\n// A map from keyword/keyword-like string value to the token type\nexport const keywords = new Map<string, TokenType>();\n\nfunction createKeyword(name: string, options: TokenOptions = {}): TokenType {\n options.keyword = name;\n const token = createToken(name, options);\n keywords.set(name, token);\n return token;\n}\n\nfunction createBinop(name: string, binop: number) {\n return createToken(name, { beforeExpr, binop });\n}\n\nlet tokenTypeCounter = -1;\nexport const tokenTypes: ExportedTokenType[] = [];\nconst tokenLabels: string[] = [];\nconst tokenBinops: number[] = [];\nconst tokenBeforeExprs: boolean[] = [];\nconst tokenStartsExprs: boolean[] = [];\nconst tokenPrefixes: boolean[] = [];\n\nfunction createToken(name: string, options: TokenOptions = {}): TokenType {\n ++tokenTypeCounter;\n tokenLabels.push(name);\n tokenBinops.push(options.binop ?? -1);\n tokenBeforeExprs.push(options.beforeExpr ?? false);\n tokenStartsExprs.push(options.startsExpr ?? false);\n tokenPrefixes.push(options.prefix ?? false);\n tokenTypes.push(new ExportedTokenType(name, options));\n\n return tokenTypeCounter;\n}\n\nfunction createKeywordLike(\n name: string,\n options: TokenOptions = {},\n): TokenType {\n ++tokenTypeCounter;\n keywords.set(name, tokenTypeCounter);\n tokenLabels.push(name);\n tokenBinops.push(options.binop ?? -1);\n tokenBeforeExprs.push(options.beforeExpr ?? false);\n tokenStartsExprs.push(options.startsExpr ?? false);\n tokenPrefixes.push(options.prefix ?? false);\n // In the exported token type, we set the label as \"name\" for backward compatibility with Babel 7\n tokenTypes.push(new ExportedTokenType(\"name\", options));\n\n return tokenTypeCounter;\n}\n\n// For performance the token type helpers depend on the following declarations order.\n// When adding new token types, please also check if the token helpers need update.\n\nexport type InternalTokenTypes = typeof tt;\n\nexport const tt = {\n // Punctuation token types.\n bracketL: createToken(\"[\", { beforeExpr, startsExpr }),\n bracketHashL: createToken(\"#[\", { beforeExpr, startsExpr }),\n bracketBarL: createToken(\"[|\", { beforeExpr, startsExpr }),\n bracketR: createToken(\"]\"),\n bracketBarR: createToken(\"|]\"),\n braceL: createToken(\"{\", { beforeExpr, startsExpr }),\n braceBarL: createToken(\"{|\", { beforeExpr, startsExpr }),\n braceHashL: createToken(\"#{\", { beforeExpr, startsExpr }),\n braceR: createToken(\"}\"),\n braceBarR: createToken(\"|}\"),\n parenL: createToken(\"(\", { beforeExpr, startsExpr }),\n parenR: createToken(\")\"),\n comma: createToken(\",\", { beforeExpr }),\n semi: createToken(\";\", { beforeExpr }),\n colon: createToken(\":\", { beforeExpr }),\n doubleColon: createToken(\"::\", { beforeExpr }),\n dot: createToken(\".\"),\n question: createToken(\"?\", { beforeExpr }),\n questionDot: createToken(\"?.\"),\n arrow: createToken(\"=>\", { beforeExpr }),\n template: createToken(\"template\"),\n ellipsis: createToken(\"...\", { beforeExpr }),\n backQuote: createToken(\"`\", { startsExpr }),\n dollarBraceL: createToken(\"${\", { beforeExpr, startsExpr }),\n // start: isTemplate\n templateTail: createToken(\"...`\", { startsExpr }),\n templateNonTail: createToken(\"...${\", { beforeExpr, startsExpr }),\n // end: isTemplate\n at: createToken(\"@\"),\n hash: createToken(\"#\", { startsExpr }),\n\n // Special hashbang token.\n interpreterDirective: createToken(\"#!...\"),\n\n // Operators. These carry several kinds of properties to help the\n // parser use them properly (the presence of these properties is\n // what categorizes them as operators).\n //\n // `binop`, when present, specifies that this operator is a binary\n // operator, and will refer to its precedence.\n //\n // `prefix` and `postfix` mark the operator as a prefix or postfix\n // unary operator.\n //\n // `isAssign` marks all of `=`, `+=`, `-=` etcetera, which act as\n // binary operators with a very low precedence, that should result\n // in AssignmentExpression nodes.\n\n // start: isAssign\n eq: createToken(\"=\", { beforeExpr, isAssign }),\n assign: createToken(\"_=\", { beforeExpr, isAssign }),\n slashAssign: createToken(\"_=\", { beforeExpr, isAssign }),\n // These are only needed to support % and ^ as a Hack-pipe topic token.\n // When the proposal settles on a token, the others can be merged with\n // tt.assign.\n xorAssign: createToken(\"_=\", { beforeExpr, isAssign }),\n moduloAssign: createToken(\"_=\", { beforeExpr, isAssign }),\n // end: isAssign\n\n incDec: createToken(\"++/--\", { prefix, postfix, startsExpr }),\n bang: createToken(\"!\", { beforeExpr, prefix, startsExpr }),\n tilde: createToken(\"~\", { beforeExpr, prefix, startsExpr }),\n\n // More possible topic tokens.\n // When the proposal settles on a token, at least one of these may be removed.\n doubleCaret: createToken(\"^^\", { startsExpr }),\n doubleAt: createToken(\"@@\", { startsExpr }),\n\n // start: isBinop\n pipeline: createBinop(\"|>\", 0),\n nullishCoalescing: createBinop(\"??\", 1),\n logicalOR: createBinop(\"||\", 1),\n logicalAND: createBinop(\"&&\", 2),\n bitwiseOR: createBinop(\"|\", 3),\n bitwiseXOR: createBinop(\"^\", 4),\n bitwiseAND: createBinop(\"&\", 5),\n equality: createBinop(\"==/!=/===/!==\", 6),\n lt: createBinop(\"</>/<=/>=\", 7),\n gt: createBinop(\"</>/<=/>=\", 7),\n relational: createBinop(\"</>/<=/>=\", 7),\n bitShift: createBinop(\"<</>>/>>>\", 8),\n bitShiftL: createBinop(\"<</>>/>>>\", 8),\n bitShiftR: createBinop(\"<</>>/>>>\", 8),\n plusMin: createToken(\"+/-\", { beforeExpr, binop: 9, prefix, startsExpr }),\n // startsExpr: required by v8intrinsic plugin\n modulo: createToken(\"%\", { binop: 10, startsExpr }),\n // unset `beforeExpr` as it can be `function *`\n star: createToken(\"*\", { binop: 10 }),\n slash: createBinop(\"/\", 10),\n exponent: createToken(\"**\", {\n beforeExpr,\n binop: 11,\n rightAssociative: true,\n }),\n\n // Keywords\n // Don't forget to update packages/babel-helper-validator-identifier/src/keyword.js\n // when new keywords are added\n // start: isLiteralPropertyName\n // start: isKeyword\n _in: createKeyword(\"in\", { beforeExpr, binop: 7 }),\n _instanceof: createKeyword(\"instanceof\", { beforeExpr, binop: 7 }),\n // end: isBinop\n _break: createKeyword(\"break\"),\n _case: createKeyword(\"case\", { beforeExpr }),\n _catch: createKeyword(\"catch\"),\n _continue: createKeyword(\"continue\"),\n _debugger: createKeyword(\"debugger\"),\n _default: createKeyword(\"default\", { beforeExpr }),\n _else: createKeyword(\"else\", { beforeExpr }),\n _finally: createKeyword(\"finally\"),\n _function: createKeyword(\"function\", { startsExpr }),\n _if: createKeyword(\"if\"),\n _return: createKeyword(\"return\", { beforeExpr }),\n _switch: createKeyword(\"switch\"),\n _throw: createKeyword(\"throw\", { beforeExpr, prefix, startsExpr }),\n _try: createKeyword(\"try\"),\n _var: createKeyword(\"var\"),\n _const: createKeyword(\"const\"),\n _with: createKeyword(\"with\"),\n _new: createKeyword(\"new\", { beforeExpr, startsExpr }),\n _this: createKeyword(\"this\", { startsExpr }),\n _super: createKeyword(\"super\", { startsExpr }),\n _class: createKeyword(\"class\", { startsExpr }),\n _extends: createKeyword(\"extends\", { beforeExpr }),\n _export: createKeyword(\"export\"),\n _import: createKeyword(\"import\", { startsExpr }),\n _null: createKeyword(\"null\", { startsExpr }),\n _true: createKeyword(\"true\", { startsExpr }),\n _false: createKeyword(\"false\", { startsExpr }),\n _typeof: createKeyword(\"typeof\", { beforeExpr, prefix, startsExpr }),\n _void: createKeyword(\"void\", { beforeExpr, prefix, startsExpr }),\n _delete: createKeyword(\"delete\", { beforeExpr, prefix, startsExpr }),\n // start: isLoop\n _do: createKeyword(\"do\", { isLoop, beforeExpr }),\n _for: createKeyword(\"for\", { isLoop }),\n _while: createKeyword(\"while\", { isLoop }),\n // end: isLoop\n // end: isKeyword\n\n // Primary literals\n // start: isIdentifier\n _as: createKeywordLike(\"as\", { startsExpr }),\n _assert: createKeywordLike(\"assert\", { startsExpr }),\n _async: createKeywordLike(\"async\", { startsExpr }),\n _await: createKeywordLike(\"await\", { startsExpr }),\n _defer: createKeywordLike(\"defer\", { startsExpr }),\n _from: createKeywordLike(\"from\", { startsExpr }),\n _get: createKeywordLike(\"get\", { startsExpr }),\n _let: createKeywordLike(\"let\", { startsExpr }),\n _meta: createKeywordLike(\"meta\", { startsExpr }),\n _of: createKeywordLike(\"of\", { startsExpr }),\n _sent: createKeywordLike(\"sent\", { startsExpr }),\n _set: createKeywordLike(\"set\", { startsExpr }),\n _source: createKeywordLike(\"source\", { startsExpr }),\n _static: createKeywordLike(\"static\", { startsExpr }),\n _using: createKeywordLike(\"using\", { startsExpr }),\n _yield: createKeywordLike(\"yield\", { startsExpr }),\n\n // Flow and TypeScript Keywordlike\n _asserts: createKeywordLike(\"asserts\", { startsExpr }),\n _checks: createKeywordLike(\"checks\", { startsExpr }),\n _exports: createKeywordLike(\"exports\", { startsExpr }),\n _global: createKeywordLike(\"global\", { startsExpr }),\n _implements: createKeywordLike(\"implements\", { startsExpr }),\n _intrinsic: createKeywordLike(\"intrinsic\", { startsExpr }),\n _infer: createKeywordLike(\"infer\", { startsExpr }),\n _is: createKeywordLike(\"is\", { startsExpr }),\n _mixins: createKeywordLike(\"mixins\", { startsExpr }),\n _proto: createKeywordLike(\"proto\", { startsExpr }),\n _require: createKeywordLike(\"require\", { startsExpr }),\n _satisfies: createKeywordLike(\"satisfies\", { startsExpr }),\n // start: isTSTypeOperator\n _keyof: createKeywordLike(\"keyof\", { startsExpr }),\n _readonly: createKeywordLike(\"readonly\", { startsExpr }),\n _unique: createKeywordLike(\"unique\", { startsExpr }),\n // end: isTSTypeOperator\n // start: isTSDeclarationStart\n _abstract: createKeywordLike(\"abstract\", { startsExpr }),\n _declare: createKeywordLike(\"declare\", { startsExpr }),\n _enum: createKeywordLike(\"enum\", { startsExpr }),\n _module: createKeywordLike(\"module\", { startsExpr }),\n _namespace: createKeywordLike(\"namespace\", { startsExpr }),\n // start: isFlowInterfaceOrTypeOrOpaque\n _interface: createKeywordLike(\"interface\", { startsExpr }),\n _type: createKeywordLike(\"type\", { startsExpr }),\n // end: isTSDeclarationStart\n _opaque: createKeywordLike(\"opaque\", { startsExpr }),\n // end: isFlowInterfaceOrTypeOrOpaque\n name: createToken(\"name\", { startsExpr }),\n // end: isIdentifier\n\n string: createToken(\"string\", { startsExpr }),\n num: createToken(\"num\", { startsExpr }),\n bigint: createToken(\"bigint\", { startsExpr }),\n decimal: createToken(\"decimal\", { startsExpr }),\n // end: isLiteralPropertyName\n regexp: createToken(\"regexp\", { startsExpr }),\n privateName: createToken(\"#name\", { startsExpr }),\n eof: createToken(\"eof\"),\n\n // jsx plugin\n jsxName: createToken(\"jsxName\"),\n jsxText: createToken(\"jsxText\", { beforeExpr: true }),\n jsxTagStart: createToken(\"jsxTagStart\", { startsExpr: true }),\n jsxTagEnd: createToken(\"jsxTagEnd\"),\n\n // placeholder plugin\n placeholder: createToken(\"%%\", { startsExpr: true }),\n} as const;\n\nexport function tokenIsIdentifier(token: TokenType): boolean {\n return token >= tt._as && token <= tt.name;\n}\n\nexport function tokenKeywordOrIdentifierIsKeyword(token: TokenType): boolean {\n // we can remove the token >= tt._in check when we\n // know a token is either keyword or identifier\n return token <= tt._while;\n}\n\nexport function tokenIsKeywordOrIdentifier(token: TokenType): boolean {\n return token >= tt._in && token <= tt.name;\n}\n\nexport function tokenIsLiteralPropertyName(token: TokenType): boolean {\n return token >= tt._in && token <= tt.decimal;\n}\n\nexport function tokenComesBeforeExpression(token: TokenType): boolean {\n return tokenBeforeExprs[token];\n}\n\nexport function tokenCanStartExpression(token: TokenType): boolean {\n return tokenStartsExprs[token];\n}\n\nexport function tokenIsAssignment(token: TokenType): boolean {\n return token >= tt.eq && token <= tt.moduloAssign;\n}\n\nexport function tokenIsFlowInterfaceOrTypeOrOpaque(token: TokenType): boolean {\n return token >= tt._interface && token <= tt._opaque;\n}\n\nexport function tokenIsLoop(token: TokenType): boolean {\n return token >= tt._do && token <= tt._while;\n}\n\nexport function tokenIsKeyword(token: TokenType): boolean {\n return token >= tt._in && token <= tt._while;\n}\n\nexport function tokenIsOperator(token: TokenType): boolean {\n return token >= tt.pipeline && token <= tt._instanceof;\n}\n\nexport function tokenIsPostfix(token: TokenType): boolean {\n return token === tt.incDec;\n}\n\nexport function tokenIsPrefix(token: TokenType): boolean {\n return tokenPrefixes[token];\n}\n\nexport function tokenIsTSTypeOperator(token: TokenType): boolean {\n return token >= tt._keyof && token <= tt._unique;\n}\n\nexport function tokenIsTSDeclarationStart(token: TokenType): boolean {\n return token >= tt._abstract && token <= tt._type;\n}\n\nexport function tokenLabelName(token: TokenType): string {\n return tokenLabels[token];\n}\n\nexport function tokenOperatorPrecedence(token: TokenType): number {\n return tokenBinops[token];\n}\n\nexport function tokenIsBinaryOperator(token: TokenType): boolean {\n return tokenBinops[token] !== -1;\n}\n\nexport function tokenIsRightAssociative(token: TokenType): boolean {\n return token === tt.exponent;\n}\n\nexport function tokenIsTemplate(token: TokenType): boolean {\n return token >= tt.templateTail && token <= tt.templateNonTail;\n}\n\nexport function getExportedToken(token: TokenType): ExportedTokenType {\n return tokenTypes[token];\n}\n\nexport function isTokenType(obj: any): boolean {\n return typeof obj === \"number\";\n}\n\nif (!process.env.BABEL_8_BREAKING) {\n tokenTypes[tt.braceR].updateContext = context => {\n context.pop();\n };\n\n tokenTypes[tt.braceL].updateContext =\n tokenTypes[tt.braceHashL].updateContext =\n tokenTypes[tt.dollarBraceL].updateContext =\n context => {\n context.push(tc.brace);\n };\n\n tokenTypes[tt.backQuote].updateContext = context => {\n if (context[context.length - 1] === tc.template) {\n context.pop();\n } else {\n context.push(tc.template);\n }\n };\n\n tokenTypes[tt.jsxTagStart].updateContext = context => {\n context.push(tc.j_expr, tc.j_oTag);\n };\n}\n","import * as charCodes from \"charcodes\";\n\n// ## Character categories\n\n// Big ugly regular expressions that match characters in the\n// whitespace, identifier, and identifier-start categories. These\n// are only applied when a character is found to actually have a\n// code point between 0x80 and 0xffff.\n// Generated by `scripts/generate-identifier-regex.js`.\n\n/* prettier-ignore */\nlet nonASCIIidentifierStartChars = \"\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u037f\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u052f\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05d0-\\u05ea\\u05ef-\\u05f2\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086a\\u0870-\\u0887\\u0889-\\u088e\\u08a0-\\u08c9\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u09fc\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0af9\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d\\u0c58-\\u0c5a\\u0c5d\\u0c60\\u0c61\\u0c80\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cdd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d04-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d54-\\u0d56\\u0d5f-\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e86-\\u0e8a\\u0e8c-\\u0ea3\\u0ea5\\u0ea7-\\u0eb0\\u0eb2\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f5\\u13f8-\\u13fd\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f8\\u1700-\\u1711\\u171f-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1878\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4c\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1c80-\\u1c88\\u1c90-\\u1cba\\u1cbd-\\u1cbf\\u1ce9-\\u1cec\\u1cee-\\u1cf3\\u1cf5\\u1cf6\\u1cfa\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2118-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2ce4\\u2ceb-\\u2cee\\u2cf2\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309b-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312f\\u3131-\\u318e\\u31a0-\\u31bf\\u31f0-\\u31ff\\u3400-\\u4dbf\\u4e00-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua69d\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7ca\\ua7d0\\ua7d1\\ua7d3\\ua7d5-\\ua7d9\\ua7f2-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua8fd\\ua8fe\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\ua9e0-\\ua9e4\\ua9e6-\\ua9ef\\ua9fa-\\ua9fe\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa7e-\\uaaaf\\uaab1\\uaab5\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab5a\\uab5c-\\uab69\\uab70-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc\";\n/* prettier-ignore */\nlet nonASCIIidentifierChars = \"\\u200c\\u200d\\xb7\\u0300-\\u036f\\u0387\\u0483-\\u0487\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u0669\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u06f0-\\u06f9\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07c0-\\u07c9\\u07eb-\\u07f3\\u07fd\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u0898-\\u089f\\u08ca-\\u08e1\\u08e3-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962\\u0963\\u0966-\\u096f\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09cb-\\u09cd\\u09d7\\u09e2\\u09e3\\u09e6-\\u09ef\\u09fe\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a66-\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2\\u0ae3\\u0ae6-\\u0aef\\u0afa-\\u0aff\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b55-\\u0b57\\u0b62\\u0b63\\u0b66-\\u0b6f\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0be6-\\u0bef\\u0c00-\\u0c04\\u0c3c\\u0c3e-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0c66-\\u0c6f\\u0c81-\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0ce6-\\u0cef\\u0cf3\\u0d00-\\u0d03\\u0d3b\\u0d3c\\u0d3e-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4d\\u0d57\\u0d62\\u0d63\\u0d66-\\u0d6f\\u0d81-\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0de6-\\u0def\\u0df2\\u0df3\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0e50-\\u0e59\\u0eb1\\u0eb4-\\u0ebc\\u0ec8-\\u0ece\\u0ed0-\\u0ed9\\u0f18\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f3e\\u0f3f\\u0f71-\\u0f84\\u0f86\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102b-\\u103e\\u1040-\\u1049\\u1056-\\u1059\\u105e-\\u1060\\u1062-\\u1064\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f-\\u109d\\u135d-\\u135f\\u1369-\\u1371\\u1712-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b4-\\u17d3\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u180f-\\u1819\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u194f\\u19d0-\\u19da\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1ab0-\\u1abd\\u1abf-\\u1ace\\u1b00-\\u1b04\\u1b34-\\u1b44\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1b80-\\u1b82\\u1ba1-\\u1bad\\u1bb0-\\u1bb9\\u1be6-\\u1bf3\\u1c24-\\u1c37\\u1c40-\\u1c49\\u1c50-\\u1c59\\u1cd0-\\u1cd2\\u1cd4-\\u1ce8\\u1ced\\u1cf4\\u1cf7-\\u1cf9\\u1dc0-\\u1dff\\u200c\\u200d\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\u30fb\\ua620-\\ua629\\ua66f\\ua674-\\ua67d\\ua69e\\ua69f\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua823-\\ua827\\ua82c\\ua880\\ua881\\ua8b4-\\ua8c5\\ua8d0-\\ua8d9\\ua8e0-\\ua8f1\\ua8ff-\\ua909\\ua926-\\ua92d\\ua947-\\ua953\\ua980-\\ua983\\ua9b3-\\ua9c0\\ua9d0-\\ua9d9\\ua9e5\\ua9f0-\\ua9f9\\uaa29-\\uaa36\\uaa43\\uaa4c\\uaa4d\\uaa50-\\uaa59\\uaa7b-\\uaa7d\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uaaeb-\\uaaef\\uaaf5\\uaaf6\\uabe3-\\uabea\\uabec\\uabed\\uabf0-\\uabf9\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe2f\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff10-\\uff19\\uff3f\\uff65\";\n\nconst nonASCIIidentifierStart = new RegExp(\n \"[\" + nonASCIIidentifierStartChars + \"]\",\n);\nconst nonASCIIidentifier = new RegExp(\n \"[\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"]\",\n);\n\nnonASCIIidentifierStartChars = nonASCIIidentifierChars = null;\n\n// These are a run-length and offset-encoded representation of the\n// >0xffff code points that are a valid part of identifiers. The\n// offset starts at 0x10000, and each pair of numbers represents an\n// offset to the next range, and then a size of the range. They were\n// generated by `scripts/generate-identifier-regex.js`.\n/* prettier-ignore */\nconst astralIdentifierStartCodes = [0,11,2,25,2,18,2,1,2,14,3,13,35,122,70,52,268,28,4,48,48,31,14,29,6,37,11,29,3,35,5,7,2,4,43,157,19,35,5,35,5,39,9,51,13,10,2,14,2,6,2,1,2,10,2,14,2,6,2,1,68,310,10,21,11,7,25,5,2,41,2,8,70,5,3,0,2,43,2,1,4,0,3,22,11,22,10,30,66,18,2,1,11,21,11,25,71,55,7,1,65,0,16,3,2,2,2,28,43,28,4,28,36,7,2,27,28,53,11,21,11,18,14,17,111,72,56,50,14,50,14,35,349,41,7,1,79,28,11,0,9,21,43,17,47,20,28,22,13,52,58,1,3,0,14,44,33,24,27,35,30,0,3,0,9,34,4,0,13,47,15,3,22,0,2,0,36,17,2,24,20,1,64,6,2,0,2,3,2,14,2,9,8,46,39,7,3,1,3,21,2,6,2,1,2,4,4,0,19,0,13,4,159,52,19,3,21,2,31,47,21,1,2,0,185,46,42,3,37,47,21,0,60,42,14,0,72,26,38,6,186,43,117,63,32,7,3,0,3,7,2,1,2,23,16,0,2,0,95,7,3,38,17,0,2,0,29,0,11,39,8,0,22,0,12,45,20,0,19,72,264,8,2,36,18,0,50,29,113,6,2,1,2,37,22,0,26,5,2,1,2,31,15,0,328,18,16,0,2,12,2,33,125,0,80,921,103,110,18,195,2637,96,16,1071,18,5,4026,582,8634,568,8,30,18,78,18,29,19,47,17,3,32,20,6,18,689,63,129,74,6,0,67,12,65,1,2,0,29,6135,9,1237,43,8,8936,3,2,6,2,1,2,290,16,0,30,2,3,0,15,3,9,395,2309,106,6,12,4,8,8,9,5991,84,2,70,2,1,3,0,3,1,3,3,2,11,2,0,2,6,2,64,2,3,3,7,2,6,2,27,2,3,2,4,2,0,4,6,2,339,3,24,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,7,1845,30,7,5,262,61,147,44,11,6,17,0,322,29,19,43,485,27,757,6,2,3,2,1,2,14,2,196,60,67,8,0,1205,3,2,26,2,1,2,0,3,0,2,9,2,3,2,0,2,0,7,0,5,0,2,0,2,0,2,2,2,1,2,0,3,0,2,0,2,0,2,0,2,0,2,1,2,0,3,3,2,6,2,3,2,3,2,0,2,9,2,16,6,2,2,4,2,16,4421,42719,33,4153,7,221,3,5761,15,7472,16,621,2467,541,1507,4938,6,4191];\n/* prettier-ignore */\nconst astralIdentifierCodes = [509,0,227,0,150,4,294,9,1368,2,2,1,6,3,41,2,5,0,166,1,574,3,9,9,370,1,81,2,71,10,50,3,123,2,54,14,32,10,3,1,11,3,46,10,8,0,46,9,7,2,37,13,2,9,6,1,45,0,13,2,49,13,9,3,2,11,83,11,7,0,3,0,158,11,6,9,7,3,56,1,2,6,3,1,3,2,10,0,11,1,3,6,4,4,193,17,10,9,5,0,82,19,13,9,214,6,3,8,28,1,83,16,16,9,82,12,9,9,84,14,5,9,243,14,166,9,71,5,2,1,3,3,2,0,2,1,13,9,120,6,3,6,4,0,29,9,41,6,2,3,9,0,10,10,47,15,406,7,2,7,17,9,57,21,2,13,123,5,4,0,2,1,2,6,2,0,9,9,49,4,2,1,2,4,9,9,330,3,10,1,2,0,49,6,4,4,14,9,5351,0,7,14,13835,9,87,9,39,4,60,6,26,9,1014,0,2,54,8,3,82,0,12,1,19628,1,4706,45,3,22,543,4,4,5,9,7,3,6,31,3,149,2,1418,49,513,54,5,49,9,0,15,0,23,4,2,14,1361,6,2,16,3,6,2,1,2,4,101,0,161,6,10,9,357,0,62,13,499,13,983,6,110,6,6,9,4759,9,787719,239];\n\n// This has a complexity linear to the value of the code. The\n// assumption is that looking up astral identifier characters is\n// rare.\nfunction isInAstralSet(code: number, set: readonly number[]): boolean {\n let pos = 0x10000;\n for (let i = 0, length = set.length; i < length; i += 2) {\n pos += set[i];\n if (pos > code) return false;\n\n pos += set[i + 1];\n if (pos >= code) return true;\n }\n return false;\n}\n\n// Test whether a given character code starts an identifier.\n\nexport function isIdentifierStart(code: number): boolean {\n if (code < charCodes.uppercaseA) return code === charCodes.dollarSign;\n if (code <= charCodes.uppercaseZ) return true;\n if (code < charCodes.lowercaseA) return code === charCodes.underscore;\n if (code <= charCodes.lowercaseZ) return true;\n if (code <= 0xffff) {\n return (\n code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code))\n );\n }\n return isInAstralSet(code, astralIdentifierStartCodes);\n}\n\n// Test whether a given character is part of an identifier.\n\nexport function isIdentifierChar(code: number): boolean {\n if (code < charCodes.digit0) return code === charCodes.dollarSign;\n if (code < charCodes.colon) return true;\n if (code < charCodes.uppercaseA) return false;\n if (code <= charCodes.uppercaseZ) return true;\n if (code < charCodes.lowercaseA) return code === charCodes.underscore;\n if (code <= charCodes.lowercaseZ) return true;\n if (code <= 0xffff) {\n return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code));\n }\n return (\n isInAstralSet(code, astralIdentifierStartCodes) ||\n isInAstralSet(code, astralIdentifierCodes)\n );\n}\n\n// Test whether a given string is a valid identifier name\n\nexport function isIdentifierName(name: string): boolean {\n let isFirst = true;\n for (let i = 0; i < name.length; i++) {\n // The implementation is based on\n // https://source.chromium.org/chromium/chromium/src/+/master:v8/src/builtins/builtins-string-gen.cc;l=1455;drc=221e331b49dfefadbc6fa40b0c68e6f97606d0b3;bpv=0;bpt=1\n // We reimplement `codePointAt` because `codePointAt` is a V8 builtin which is not inlined by TurboFan (as of M91)\n // since `name` is mostly ASCII, an inlined `charCodeAt` wins here\n let cp = name.charCodeAt(i);\n if ((cp & 0xfc00) === 0xd800 && i + 1 < name.length) {\n const trail = name.charCodeAt(++i);\n if ((trail & 0xfc00) === 0xdc00) {\n cp = 0x10000 + ((cp & 0x3ff) << 10) + (trail & 0x3ff);\n }\n }\n if (isFirst) {\n isFirst = false;\n if (!isIdentifierStart(cp)) {\n return false;\n }\n } else if (!isIdentifierChar(cp)) {\n return false;\n }\n }\n return !isFirst;\n}\n","const reservedWords = {\n keyword: [\n \"break\",\n \"case\",\n \"catch\",\n \"continue\",\n \"debugger\",\n \"default\",\n \"do\",\n \"else\",\n \"finally\",\n \"for\",\n \"function\",\n \"if\",\n \"return\",\n \"switch\",\n \"throw\",\n \"try\",\n \"var\",\n \"const\",\n \"while\",\n \"with\",\n \"new\",\n \"this\",\n \"super\",\n \"class\",\n \"extends\",\n \"export\",\n \"import\",\n \"null\",\n \"true\",\n \"false\",\n \"in\",\n \"instanceof\",\n \"typeof\",\n \"void\",\n \"delete\",\n ],\n strict: [\n \"implements\",\n \"interface\",\n \"let\",\n \"package\",\n \"private\",\n \"protected\",\n \"public\",\n \"static\",\n \"yield\",\n ],\n strictBind: [\"eval\", \"arguments\"],\n};\nconst keywords = new Set(reservedWords.keyword);\nconst reservedWordsStrictSet = new Set(reservedWords.strict);\nconst reservedWordsStrictBindSet = new Set(reservedWords.strictBind);\n\n/**\n * Checks if word is a reserved word in non-strict mode\n */\nexport function isReservedWord(word: string, inModule: boolean): boolean {\n return (inModule && word === \"await\") || word === \"enum\";\n}\n\n/**\n * Checks if word is a reserved word in non-binding strict mode\n *\n * Includes non-strict reserved words\n */\nexport function isStrictReservedWord(word: string, inModule: boolean): boolean {\n return isReservedWord(word, inModule) || reservedWordsStrictSet.has(word);\n}\n\n/**\n * Checks if word is a reserved word in binding strict mode, but it is allowed as\n * a normal identifier.\n */\nexport function isStrictBindOnlyReservedWord(word: string): boolean {\n return reservedWordsStrictBindSet.has(word);\n}\n\n/**\n * Checks if word is a reserved word in binding strict mode\n *\n * Includes non-strict reserved words and non-binding strict reserved words\n */\nexport function isStrictBindReservedWord(\n word: string,\n inModule: boolean,\n): boolean {\n return (\n isStrictReservedWord(word, inModule) || isStrictBindOnlyReservedWord(word)\n );\n}\n\nexport function isKeyword(word: string): boolean {\n return keywords.has(word);\n}\n","import * as charCodes from \"charcodes\";\nimport { isIdentifierStart } from \"@babel/helper-validator-identifier\";\n\nexport {\n isIdentifierStart,\n isIdentifierChar,\n isReservedWord,\n isStrictBindOnlyReservedWord,\n isStrictBindReservedWord,\n isStrictReservedWord,\n isKeyword,\n} from \"@babel/helper-validator-identifier\";\n\nexport const keywordRelationalOperator = /^in(stanceof)?$/;\n\n// Test whether a current state character code and next character code is @\n\nexport function isIteratorStart(\n current: number,\n next: number,\n next2: number,\n): boolean {\n return (\n current === charCodes.atSign &&\n next === charCodes.atSign &&\n isIdentifierStart(next2)\n );\n}\n\n// This is the comprehensive set of JavaScript reserved words\n// If a word is in this set, it could be a reserved word,\n// depending on sourceType/strictMode/binding info. In other words\n// if a word is not in this set, it is not a reserved word under\n// any circumstance.\nconst reservedWordLikeSet = new Set([\n \"break\",\n \"case\",\n \"catch\",\n \"continue\",\n \"debugger\",\n \"default\",\n \"do\",\n \"else\",\n \"finally\",\n \"for\",\n \"function\",\n \"if\",\n \"return\",\n \"switch\",\n \"throw\",\n \"try\",\n \"var\",\n \"const\",\n \"while\",\n \"with\",\n \"new\",\n \"this\",\n \"super\",\n \"class\",\n \"extends\",\n \"export\",\n \"import\",\n \"null\",\n \"true\",\n \"false\",\n \"in\",\n \"instanceof\",\n \"typeof\",\n \"void\",\n \"delete\",\n // strict\n \"implements\",\n \"interface\",\n \"let\",\n \"package\",\n \"private\",\n \"protected\",\n \"public\",\n \"static\",\n \"yield\",\n // strictBind\n \"eval\",\n \"arguments\",\n // reservedWorkLike\n \"enum\",\n \"await\",\n]);\n\nexport function canBeReservedWord(word: string): boolean {\n return reservedWordLikeSet.has(word);\n}\n","import { ScopeFlag, BindingFlag, type BindingTypes } from \"./scopeflags.ts\";\nimport type { Position } from \"./location.ts\";\nimport type * as N from \"../types.ts\";\nimport { Errors } from \"../parse-error.ts\";\nimport type Tokenizer from \"../tokenizer/index.ts\";\n\n// Start an AST node, attaching a start offset.\nexport class Scope {\n declare flags: ScopeFlag;\n // A set of var-declared names in the current lexical scope\n var: Set<string> = new Set();\n // A set of lexically-declared names in the current lexical scope\n lexical: Set<string> = new Set();\n // A set of lexically-declared FunctionDeclaration names in the current lexical scope\n functions: Set<string> = new Set();\n\n constructor(flags: ScopeFlag) {\n this.flags = flags;\n }\n}\n\n// The functions in this module keep track of declared variables in the\n// current scope in order to detect duplicate variable names.\nexport default class ScopeHandler<IScope extends Scope = Scope> {\n parser: Tokenizer;\n scopeStack: Array<IScope> = [];\n inModule: boolean;\n undefinedExports: Map<string, Position> = new Map();\n\n constructor(parser: Tokenizer, inModule: boolean) {\n this.parser = parser;\n this.inModule = inModule;\n }\n\n get inTopLevel() {\n return (this.currentScope().flags & ScopeFlag.PROGRAM) > 0;\n }\n get inFunction() {\n return (this.currentVarScopeFlags() & ScopeFlag.FUNCTION) > 0;\n }\n get allowSuper() {\n return (this.currentThisScopeFlags() & ScopeFlag.SUPER) > 0;\n }\n get allowDirectSuper() {\n return (this.currentThisScopeFlags() & ScopeFlag.DIRECT_SUPER) > 0;\n }\n get inClass() {\n return (this.currentThisScopeFlags() & ScopeFlag.CLASS) > 0;\n }\n get inClassAndNotInNonArrowFunction() {\n const flags = this.currentThisScopeFlags();\n return (flags & ScopeFlag.CLASS) > 0 && (flags & ScopeFlag.FUNCTION) === 0;\n }\n get inStaticBlock() {\n for (let i = this.scopeStack.length - 1; ; i--) {\n const { flags } = this.scopeStack[i];\n if (flags & ScopeFlag.STATIC_BLOCK) {\n return true;\n }\n if (flags & (ScopeFlag.VAR | ScopeFlag.CLASS)) {\n // function body, module body, class property initializers\n return false;\n }\n }\n }\n get inNonArrowFunction() {\n return (this.currentThisScopeFlags() & ScopeFlag.FUNCTION) > 0;\n }\n get treatFunctionsAsVar() {\n return this.treatFunctionsAsVarInScope(this.currentScope());\n }\n\n createScope(flags: ScopeFlag): Scope {\n return new Scope(flags);\n }\n\n enter(flags: ScopeFlag) {\n /*:: +createScope: (flags:ScopeFlag) => IScope; */\n // @ts-expect-error This method will be overwritten by subclasses\n this.scopeStack.push(this.createScope(flags));\n }\n\n exit(): ScopeFlag {\n const scope = this.scopeStack.pop();\n return scope.flags;\n }\n\n // The spec says:\n // > At the top level of a function, or script, function declarations are\n // > treated like var declarations rather than like lexical declarations.\n treatFunctionsAsVarInScope(scope: IScope): boolean {\n return !!(\n scope.flags & (ScopeFlag.FUNCTION | ScopeFlag.STATIC_BLOCK) ||\n (!this.parser.inModule && scope.flags & ScopeFlag.PROGRAM)\n );\n }\n\n declareName(name: string, bindingType: BindingTypes, loc: Position) {\n let scope = this.currentScope();\n if (\n bindingType & BindingFlag.SCOPE_LEXICAL ||\n bindingType & BindingFlag.SCOPE_FUNCTION\n ) {\n this.checkRedeclarationInScope(scope, name, bindingType, loc);\n\n if (bindingType & BindingFlag.SCOPE_FUNCTION) {\n scope.functions.add(name);\n } else {\n scope.lexical.add(name);\n }\n\n if (bindingType & BindingFlag.SCOPE_LEXICAL) {\n this.maybeExportDefined(scope, name);\n }\n } else if (bindingType & BindingFlag.SCOPE_VAR) {\n for (let i = this.scopeStack.length - 1; i >= 0; --i) {\n scope = this.scopeStack[i];\n this.checkRedeclarationInScope(scope, name, bindingType, loc);\n scope.var.add(name);\n this.maybeExportDefined(scope, name);\n\n if (scope.flags & ScopeFlag.VAR) break;\n }\n }\n if (this.parser.inModule && scope.flags & ScopeFlag.PROGRAM) {\n this.undefinedExports.delete(name);\n }\n }\n\n maybeExportDefined(scope: IScope, name: string) {\n if (this.parser.inModule && scope.flags & ScopeFlag.PROGRAM) {\n this.undefinedExports.delete(name);\n }\n }\n\n checkRedeclarationInScope(\n scope: IScope,\n name: string,\n bindingType: BindingTypes,\n loc: Position,\n ) {\n if (this.isRedeclaredInScope(scope, name, bindingType)) {\n this.parser.raise(Errors.VarRedeclaration, {\n at: loc,\n identifierName: name,\n });\n }\n }\n\n isRedeclaredInScope(\n scope: IScope,\n name: string,\n bindingType: BindingTypes,\n ): boolean {\n if (!(bindingType & BindingFlag.KIND_VALUE)) return false;\n\n if (bindingType & BindingFlag.SCOPE_LEXICAL) {\n return (\n scope.lexical.has(name) ||\n scope.functions.has(name) ||\n scope.var.has(name)\n );\n }\n\n if (bindingType & BindingFlag.SCOPE_FUNCTION) {\n return (\n scope.lexical.has(name) ||\n (!this.treatFunctionsAsVarInScope(scope) && scope.var.has(name))\n );\n }\n\n return (\n (scope.lexical.has(name) &&\n // Annex B.3.4\n // https://tc39.es/ecma262/#sec-variablestatements-in-catch-blocks\n !(\n scope.flags & ScopeFlag.SIMPLE_CATCH &&\n scope.lexical.values().next().value === name\n )) ||\n (!this.treatFunctionsAsVarInScope(scope) && scope.functions.has(name))\n );\n }\n\n checkLocalExport(id: N.Identifier) {\n const { name } = id;\n const topLevelScope = this.scopeStack[0];\n if (\n !topLevelScope.lexical.has(name) &&\n !topLevelScope.var.has(name) &&\n // In strict mode, scope.functions will always be empty.\n // Modules are strict by default, but the `scriptMode` option\n // can overwrite this behavior.\n !topLevelScope.functions.has(name)\n ) {\n this.undefinedExports.set(name, id.loc.start);\n }\n }\n\n currentScope(): IScope {\n return this.scopeStack[this.scopeStack.length - 1];\n }\n\n currentVarScopeFlags(): ScopeFlag {\n for (let i = this.scopeStack.length - 1; ; i--) {\n const { flags } = this.scopeStack[i];\n if (flags & ScopeFlag.VAR) {\n return flags;\n }\n }\n }\n\n // Could be useful for `arguments`, `this`, `new.target`, `super()`, `super.property`, and `super[property]`.\n currentThisScopeFlags(): ScopeFlag {\n for (let i = this.scopeStack.length - 1; ; i--) {\n const { flags } = this.scopeStack[i];\n if (\n flags & (ScopeFlag.VAR | ScopeFlag.CLASS) &&\n !(flags & ScopeFlag.ARROW)\n ) {\n return flags;\n }\n }\n }\n}\n","import type { Position } from \"../../util/location.ts\";\nimport ScopeHandler, { Scope } from \"../../util/scope.ts\";\nimport {\n BindingFlag,\n type ScopeFlag,\n type BindingTypes,\n} from \"../../util/scopeflags.ts\";\nimport type * as N from \"../../types.ts\";\n\n// Reference implementation: https://github.com/facebook/flow/blob/23aeb2a2ef6eb4241ce178fde5d8f17c5f747fb5/src/typing/env.ml#L536-L584\nclass FlowScope extends Scope {\n // declare function foo(): type;\n declareFunctions: Set<string> = new Set();\n}\n\nexport default class FlowScopeHandler extends ScopeHandler<FlowScope> {\n createScope(flags: ScopeFlag): FlowScope {\n return new FlowScope(flags);\n }\n\n declareName(name: string, bindingType: BindingTypes, loc: Position) {\n const scope = this.currentScope();\n if (bindingType & BindingFlag.FLAG_FLOW_DECLARE_FN) {\n this.checkRedeclarationInScope(scope, name, bindingType, loc);\n this.maybeExportDefined(scope, name);\n scope.declareFunctions.add(name);\n return;\n }\n\n super.declareName(name, bindingType, loc);\n }\n\n isRedeclaredInScope(\n scope: FlowScope,\n name: string,\n bindingType: BindingTypes,\n ): boolean {\n if (super.isRedeclaredInScope(scope, name, bindingType)) return true;\n\n if (bindingType & BindingFlag.FLAG_FLOW_DECLARE_FN) {\n return (\n !scope.declareFunctions.has(name) &&\n (scope.lexical.has(name) || scope.functions.has(name))\n );\n }\n\n return false;\n }\n\n checkLocalExport(id: N.Identifier) {\n if (!this.scopeStack[0].declareFunctions.has(id.name)) {\n super.checkLocalExport(id);\n }\n }\n}\n","import type { Options } from \"../options.ts\";\nimport type State from \"../tokenizer/state.ts\";\nimport type { PluginsMap } from \"./index.ts\";\nimport type ScopeHandler from \"../util/scope.ts\";\nimport type ExpressionScopeHandler from \"../util/expression-scope.ts\";\nimport type ClassScopeHandler from \"../util/class-scope.ts\";\nimport type ProductionParameterHandler from \"../util/production-parameter.ts\";\nimport type {\n ParserPluginWithOptions,\n PluginConfig,\n PluginOptions,\n} from \"../typings.ts\";\n\nexport default class BaseParser {\n // Properties set by constructor in index.js\n declare options: Options;\n declare inModule: boolean;\n declare scope: ScopeHandler<any>;\n declare classScope: ClassScopeHandler;\n declare prodParam: ProductionParameterHandler;\n declare expressionScope: ExpressionScopeHandler;\n declare plugins: PluginsMap;\n declare filename: string | undefined | null;\n // Names of exports store. `default` is stored as a name for both\n // `export default foo;` and `export { foo as default };`.\n declare exportedIdentifiers: Set<string>;\n sawUnambiguousESM: boolean = false;\n ambiguousScriptDifferentAst: boolean = false;\n\n // Initialized by Tokenizer\n declare state: State;\n // input and length are not in state as they are constant and we do\n // not want to ever copy them, which happens if state gets cloned\n declare input: string;\n declare length: number;\n\n // This method accepts either a string (plugin name) or an array pair\n // (plugin name and options object). If an options object is given,\n // then each value is non-recursively checked for identity with that\n // plugins actual option value.\n hasPlugin(pluginConfig: PluginConfig): boolean {\n if (typeof pluginConfig === \"string\") {\n return this.plugins.has(pluginConfig);\n } else {\n const [pluginName, pluginOptions] = pluginConfig;\n if (!this.hasPlugin(pluginName)) {\n return false;\n }\n const actualOptions = this.plugins.get(pluginName);\n for (const key of Object.keys(\n pluginOptions,\n ) as (keyof typeof pluginOptions)[]) {\n if (actualOptions?.[key] !== pluginOptions[key]) {\n return false;\n }\n }\n return true;\n }\n }\n\n getPluginOption<\n PluginName extends ParserPluginWithOptions[0],\n OptionName extends keyof PluginOptions<PluginName>,\n >(plugin: PluginName, name: OptionName) {\n return (this.plugins.get(plugin) as null | PluginOptions<PluginName>)?.[\n name\n ];\n }\n}\n","/*:: declare var invariant; */\n\nimport BaseParser from \"./base.ts\";\nimport type { Comment, Node, Identifier } from \"../types.ts\";\nimport * as charCodes from \"charcodes\";\nimport type { Undone } from \"./node.ts\";\n\n/**\n * A whitespace token containing comments\n */\nexport type CommentWhitespace = {\n /**\n * the start of the whitespace token.\n */\n start: number;\n /**\n * the end of the whitespace token.\n */\n end: number;\n /**\n * the containing comments\n */\n comments: Array<Comment>;\n /**\n * the immediately preceding AST node of the whitespace token\n */\n leadingNode: Node | null;\n /**\n * the immediately following AST node of the whitespace token\n */\n trailingNode: Node | null;\n /**\n * the innermost AST node containing the whitespace with minimal size (|end - start|)\n */\n containingNode: Node | null;\n};\n\n/**\n * Merge comments with node's trailingComments or assign comments to be\n * trailingComments. New comments will be placed before old comments\n * because the commentStack is enumerated reversely.\n */\nfunction setTrailingComments(node: Undone<Node>, comments: Array<Comment>) {\n if (node.trailingComments === undefined) {\n node.trailingComments = comments;\n } else {\n node.trailingComments.unshift(...comments);\n }\n}\n\n/**\n * Merge comments with node's leadingComments or assign comments to be\n * leadingComments. New comments will be placed before old comments\n * because the commentStack is enumerated reversely.\n */\nfunction setLeadingComments(node: Undone<Node>, comments: Array<Comment>) {\n if (node.leadingComments === undefined) {\n node.leadingComments = comments;\n } else {\n node.leadingComments.unshift(...comments);\n }\n}\n\n/**\n * Merge comments with node's innerComments or assign comments to be\n * innerComments. New comments will be placed before old comments\n * because the commentStack is enumerated reversely.\n */\nexport function setInnerComments(\n node: Undone<Node>,\n comments?: Array<Comment>,\n) {\n if (node.innerComments === undefined) {\n node.innerComments = comments;\n } else {\n node.innerComments.unshift(...comments);\n }\n}\n\n/**\n * Given node and elements array, if elements has non-null element,\n * merge comments to its trailingComments, otherwise merge comments\n * to node's innerComments\n */\nfunction adjustInnerComments(\n node: Undone<Node>,\n elements: Array<Node>,\n commentWS: CommentWhitespace,\n) {\n let lastElement = null;\n let i = elements.length;\n while (lastElement === null && i > 0) {\n lastElement = elements[--i];\n }\n if (lastElement === null || lastElement.start > commentWS.start) {\n setInnerComments(node, commentWS.comments);\n } else {\n setTrailingComments(lastElement, commentWS.comments);\n }\n}\n\nexport default class CommentsParser extends BaseParser {\n addComment(comment: Comment): void {\n if (this.filename) comment.loc.filename = this.filename;\n this.state.comments.push(comment);\n }\n\n /**\n * Given a newly created AST node _n_, attach _n_ to a comment whitespace _w_ if applicable\n * {@see {@link CommentWhitespace}}\n */\n processComment(node: Node): void {\n const { commentStack } = this.state;\n const commentStackLength = commentStack.length;\n if (commentStackLength === 0) return;\n let i = commentStackLength - 1;\n const lastCommentWS = commentStack[i];\n\n if (lastCommentWS.start === node.end) {\n lastCommentWS.leadingNode = node;\n i--;\n }\n\n const { start: nodeStart } = node;\n // invariant: for all 0 <= j <= i, let c = commentStack[j], c must satisfy c.end < node.end\n for (; i >= 0; i--) {\n const commentWS = commentStack[i];\n const commentEnd = commentWS.end;\n if (commentEnd > nodeStart) {\n // by definition of commentWhiteSpace, this implies commentWS.start > nodeStart\n // so node can be a containingNode candidate. At this time we can finalize the comment\n // whitespace, because\n // 1) its leadingNode or trailingNode, if exists, will not change\n // 2) its containingNode have been assigned and will not change because it is the\n // innermost minimal-sized AST node\n commentWS.containingNode = node;\n this.finalizeComment(commentWS);\n commentStack.splice(i, 1);\n } else {\n if (commentEnd === nodeStart) {\n commentWS.trailingNode = node;\n }\n // stop the loop when commentEnd <= nodeStart\n break;\n }\n }\n }\n\n /**\n * Assign the comments of comment whitespaces to related AST nodes.\n * Also adjust innerComments following trailing comma.\n */\n finalizeComment(commentWS: CommentWhitespace) {\n const { comments } = commentWS;\n if (commentWS.leadingNode !== null || commentWS.trailingNode !== null) {\n if (commentWS.leadingNode !== null) {\n setTrailingComments(commentWS.leadingNode, comments);\n }\n if (commentWS.trailingNode !== null) {\n setLeadingComments(commentWS.trailingNode, comments);\n }\n } else {\n /*:: invariant(commentWS.containingNode !== null) */\n const { containingNode: node, start: commentStart } = commentWS;\n if (this.input.charCodeAt(commentStart - 1) === charCodes.comma) {\n // If a commentWhitespace follows a comma and the containingNode allows\n // list structures with trailing comma, merge it to the trailingComment\n // of the last non-null list element\n switch (node.type) {\n case \"ObjectExpression\":\n case \"ObjectPattern\":\n case \"RecordExpression\":\n adjustInnerComments(node, node.properties, commentWS);\n break;\n case \"CallExpression\":\n case \"OptionalCallExpression\":\n adjustInnerComments(node, node.arguments, commentWS);\n break;\n case \"FunctionDeclaration\":\n case \"FunctionExpression\":\n case \"ArrowFunctionExpression\":\n case \"ObjectMethod\":\n case \"ClassMethod\":\n case \"ClassPrivateMethod\":\n adjustInnerComments(node, node.params, commentWS);\n break;\n case \"ArrayExpression\":\n case \"ArrayPattern\":\n case \"TupleExpression\":\n adjustInnerComments(node, node.elements, commentWS);\n break;\n case \"ExportNamedDeclaration\":\n case \"ImportDeclaration\":\n adjustInnerComments(node, node.specifiers, commentWS);\n break;\n default: {\n setInnerComments(node, comments);\n }\n }\n } else {\n setInnerComments(node, comments);\n }\n }\n }\n\n /**\n * Drains remaining commentStack and applies finalizeComment\n * to each comment whitespace. Used only in parseExpression\n * where the top level AST node is _not_ Program\n * {@see {@link CommentsParser#finalizeComment}}\n */\n finalizeRemainingComments() {\n const { commentStack } = this.state;\n for (let i = commentStack.length - 1; i >= 0; i--) {\n this.finalizeComment(commentStack[i]);\n }\n this.state.commentStack = [];\n }\n\n /* eslint-disable no-irregular-whitespace */\n /**\n * Reset previous node trailing comments. Used in object / class\n * property parsing. We parse `async`, `static`, `set` and `get`\n * as an identifier but may reinterpret it into an async/static/accessor\n * method later. In this case the identifier is not part of the AST and we\n * should sync the knowledge to commentStacks\n *\n * For example, when parsing\n * ```\n * async /* 1 */ function f() {}\n * ```\n * the comment whitespace `/* 1 */` has leading node Identifier(async). When\n * we see the function token, we create a Function node and mark `/* 1 */` as\n * inner comments. So `/* 1 */` should be detached from the Identifier node.\n *\n * @param node the last finished AST node _before_ current token\n */\n /* eslint-enable no-irregular-whitespace */\n resetPreviousNodeTrailingComments(node: Node) {\n const { commentStack } = this.state;\n const { length } = commentStack;\n if (length === 0) return;\n const commentWS = commentStack[length - 1];\n if (commentWS.leadingNode === node) {\n commentWS.leadingNode = null;\n }\n }\n\n /* eslint-disable no-irregular-whitespace */\n /**\n * Reset previous node leading comments, assuming that `node` is a\n * single-token node. Used in import phase modifiers parsing. We parse\n * `module` in `import module foo from ...` as an identifier but may\n * reinterpret it into a phase modifier later. In this case the identifier is\n * not part of the AST and we should sync the knowledge to commentStacks\n *\n * For example, when parsing\n * ```\n * import /* 1 */ module a from \"a\";\n * ```\n * the comment whitespace `/* 1 */` has trailing node Identifier(module). When\n * we see that `module` is not a default import binding, we mark `/* 1 */` as\n * inner comments of the ImportDeclaration. So `/* 1 */` should be detached from\n * the Identifier node.\n *\n * @param node the last finished AST node _before_ current token\n */\n /* eslint-enable no-irregular-whitespace */\n resetPreviousIdentifierLeadingComments(node: Identifier) {\n const { commentStack } = this.state;\n const { length } = commentStack;\n if (length === 0) return;\n\n if (commentStack[length - 1].trailingNode === node) {\n commentStack[length - 1].trailingNode = null;\n } else if (length >= 2 && commentStack[length - 2].trailingNode === node) {\n commentStack[length - 2].trailingNode = null;\n }\n }\n\n /**\n * Attach a node to the comment whitespaces right before/after\n * the given range.\n *\n * This is used to properly attach comments around parenthesized\n * expressions as leading/trailing comments of the inner expression.\n */\n takeSurroundingComments(node: Node, start: number, end: number) {\n const { commentStack } = this.state;\n const commentStackLength = commentStack.length;\n if (commentStackLength === 0) return;\n let i = commentStackLength - 1;\n\n for (; i >= 0; i--) {\n const commentWS = commentStack[i];\n const commentEnd = commentWS.end;\n const commentStart = commentWS.start;\n\n if (commentStart === end) {\n commentWS.leadingNode = node;\n } else if (commentEnd === start) {\n commentWS.trailingNode = node;\n } else if (commentEnd < start) {\n break;\n }\n }\n }\n}\n","import * as charCodes from \"charcodes\";\n\n// Matches a whole line break (where CRLF is considered a single\n// line break). Used to count lines.\nexport const lineBreak = /\\r\\n?|[\\n\\u2028\\u2029]/;\nexport const lineBreakG = new RegExp(lineBreak.source, \"g\");\n\n// https://tc39.github.io/ecma262/#sec-line-terminators\nexport function isNewLine(code: number): boolean {\n switch (code) {\n case charCodes.lineFeed:\n case charCodes.carriageReturn:\n case charCodes.lineSeparator:\n case charCodes.paragraphSeparator:\n return true;\n\n default:\n return false;\n }\n}\n\nexport const skipWhiteSpace = /(?:\\s|\\/\\/.*|\\/\\*[^]*?\\*\\/)*/g;\n\nexport const skipWhiteSpaceInLine =\n /(?:[^\\S\\n\\r\\u2028\\u2029]|\\/\\/.*|\\/\\*.*?\\*\\/)*/g;\n\n// Skip whitespace and single-line comments, including /* no newline here */.\n// After this RegExp matches, its lastIndex points to a line terminator, or\n// the start of multi-line comment (which is effectively a line terminator),\n// or the end of string.\nexport const skipWhiteSpaceToLineBreak = new RegExp(\n // Unfortunately JS doesn't support Perl's atomic /(?>pattern)/ or\n // possessive quantifiers, so we use a trick to prevent backtracking\n // when the look-ahead for line terminator fails.\n \"(?=(\" +\n // Capture the whitespace and comments that should be skipped inside\n // a look-ahead assertion, and then re-match the group as a unit.\n skipWhiteSpaceInLine.source +\n \"))\\\\1\" +\n // Look-ahead for either line terminator, start of multi-line comment,\n // or end of string.\n /(?=[\\n\\r\\u2028\\u2029]|\\/\\*(?!.*?\\*\\/)|$)/.source,\n \"y\", // sticky\n);\n\n// https://tc39.github.io/ecma262/#sec-white-space\nexport function isWhitespace(code: number): boolean {\n switch (code) {\n case 0x0009: // CHARACTER TABULATION\n case 0x000b: // LINE TABULATION\n case 0x000c: // FORM FEED\n case charCodes.space:\n case charCodes.nonBreakingSpace:\n case charCodes.oghamSpaceMark:\n case 0x2000: // EN QUAD\n case 0x2001: // EM QUAD\n case 0x2002: // EN SPACE\n case 0x2003: // EM SPACE\n case 0x2004: // THREE-PER-EM SPACE\n case 0x2005: // FOUR-PER-EM SPACE\n case 0x2006: // SIX-PER-EM SPACE\n case 0x2007: // FIGURE SPACE\n case 0x2008: // PUNCTUATION SPACE\n case 0x2009: // THIN SPACE\n case 0x200a: // HAIR SPACE\n case 0x202f: // NARROW NO-BREAK SPACE\n case 0x205f: // MEDIUM MATHEMATICAL SPACE\n case 0x3000: // IDEOGRAPHIC SPACE\n case 0xfeff: // ZERO WIDTH NO-BREAK SPACE\n return true;\n\n default:\n return false;\n }\n}\n","import type { Options } from \"../options.ts\";\nimport type * as N from \"../types.ts\";\nimport type { CommentWhitespace } from \"../parser/comments\";\nimport { Position } from \"../util/location.ts\";\n\nimport { types as ct, type TokContext } from \"./context.ts\";\nimport { tt, type TokenType } from \"./types.ts\";\nimport type { Errors } from \"../parse-error.ts\";\nimport type { ParseError } from \"../parse-error.ts\";\n\nexport type DeferredStrictError =\n | typeof Errors.StrictNumericEscape\n | typeof Errors.StrictOctalLiteral;\n\ntype TopicContextState = {\n // When a topic binding has been currently established,\n // then this is 1. Otherwise, it is 0. This is forwards compatible\n // with a future plugin for multiple lexical topics.\n maxNumOfResolvableTopics: number;\n // When a topic binding has been currently established, and if that binding\n // has been used as a topic reference `#`, then this is 0. Otherwise, it is\n // `null`. This is forwards compatible with a future plugin for multiple\n // lexical topics.\n maxTopicIndex: null | 0;\n};\n\nexport default class State {\n strict: boolean;\n curLine: number;\n lineStart: number;\n\n // And, if locations are used, the {line, column} object\n // corresponding to those offsets\n startLoc: Position;\n endLoc: Position;\n\n init({ strictMode, sourceType, startLine, startColumn }: Options): void {\n this.strict =\n strictMode === false\n ? false\n : strictMode === true\n ? true\n : sourceType === \"module\";\n\n this.curLine = startLine;\n this.lineStart = -startColumn;\n this.startLoc = this.endLoc = new Position(startLine, startColumn, 0);\n }\n\n errors: ParseError<any>[] = [];\n\n // Used to signify the start of a potential arrow function\n potentialArrowAt: number = -1;\n\n // Used to signify the start of an expression which looks like a\n // typed arrow function, but it isn't\n // e.g. a ? (b) : c => d\n // ^\n noArrowAt: number[] = [];\n\n // Used to signify the start of an expression whose params, if it looks like\n // an arrow function, shouldn't be converted to assignable nodes.\n // This is used to defer the validation of typed arrow functions inside\n // conditional expressions.\n // e.g. a ? (b) : c => d\n // ^\n noArrowParamsConversionAt: number[] = [];\n\n // Flags to track\n maybeInArrowParameters: boolean = false;\n inType: boolean = false;\n noAnonFunctionType: boolean = false;\n hasFlowComment: boolean = false;\n isAmbientContext: boolean = false;\n inAbstractClass: boolean = false;\n inDisallowConditionalTypesContext: boolean = false;\n\n // For the Hack-style pipelines plugin\n topicContext: TopicContextState = {\n maxNumOfResolvableTopics: 0,\n maxTopicIndex: null,\n };\n\n // For the F#-style pipelines plugin\n soloAwait: boolean = false;\n inFSharpPipelineDirectBody: boolean = false;\n\n // Labels in scope.\n labels: Array<{\n kind: \"loop\" | \"switch\" | undefined | null;\n name?: string | null;\n statementStart?: number;\n }> = [];\n\n // Comment store for Program.comments\n comments: Array<N.Comment> = [];\n\n // Comment attachment store\n commentStack: Array<CommentWhitespace> = [];\n\n // The current position of the tokenizer in the input.\n pos: number = 0;\n\n // Properties of the current token:\n // Its type\n type: TokenType = tt.eof;\n\n // For tokens that include more information than their type, the value\n value: any = null;\n\n // Its start and end offset\n start: number = 0;\n end: number = 0;\n\n // Position information for the previous token\n // this is initialized when generating the second token.\n lastTokEndLoc: Position = null;\n // this is initialized when generating the second token.\n lastTokStartLoc: Position = null;\n lastTokStart: number = 0;\n\n // The context stack is used to track whether the apostrophe \"`\" starts\n // or ends a string template\n context: Array<TokContext> = [ct.brace];\n // Used to track whether a JSX element is allowed to form\n canStartJSXElement: boolean = true;\n\n // Used to signal to callers of `readWord1` whether the word\n // contained any escape sequences. This is needed because words with\n // escape sequences must not be interpreted as keywords.\n containsEsc: boolean = false;\n\n // Used to track invalid escape sequences in template literals,\n // that must be reported if the template is not tagged.\n firstInvalidTemplateEscapePos: null | Position = null;\n\n // This property is used to track the following errors\n // - StrictNumericEscape\n // - StrictOctalLiteral\n //\n // in a literal that occurs prior to/immediately after a \"use strict\" directive.\n\n // todo(JLHwung): set strictErrors to null and avoid recording string errors\n // after a non-directive is parsed\n strictErrors: Map<number, [DeferredStrictError, Position]> = new Map();\n\n // Tokens length in token store\n tokensLength: number = 0;\n\n curPosition(): Position {\n return new Position(this.curLine, this.pos - this.lineStart, this.pos);\n }\n\n clone(skipArrays?: boolean): State {\n const state = new State();\n const keys = Object.keys(this) as (keyof State)[];\n for (let i = 0, length = keys.length; i < length; i++) {\n const key = keys[i];\n let val = this[key];\n\n if (!skipArrays && Array.isArray(val)) {\n val = val.slice();\n }\n\n // @ts-expect-error val must conform to S[key]\n state[key] = val;\n }\n\n return state;\n }\n}\n\nexport type LookaheadState = {\n pos: number;\n value: any;\n type: TokenType;\n start: number;\n end: number;\n context: TokContext[];\n startLoc: Position;\n lastTokEndLoc: Position;\n curLine: number;\n lineStart: number;\n curPosition: () => Position;\n /* Used only in readToken_mult_modulo */\n inType: boolean;\n // These boolean properties are not initialized in createLookaheadState()\n // instead they will only be set by the tokenizer\n containsEsc?: boolean;\n};\n","import * as charCodes from \"charcodes\";\n\n// The following character codes are forbidden from being\n// an immediate sibling of NumericLiteralSeparator _\nconst forbiddenNumericSeparatorSiblings = {\n decBinOct: new Set<number>([\n charCodes.dot,\n charCodes.uppercaseB,\n charCodes.uppercaseE,\n charCodes.uppercaseO,\n charCodes.underscore, // multiple separators are not allowed\n charCodes.lowercaseB,\n charCodes.lowercaseE,\n charCodes.lowercaseO,\n ]),\n hex: new Set<number>([\n charCodes.dot,\n charCodes.uppercaseX,\n charCodes.underscore, // multiple separators are not allowed\n charCodes.lowercaseX,\n ]),\n};\n\nconst isAllowedNumericSeparatorSibling = {\n // 0 - 1\n bin: (ch: number) => ch === charCodes.digit0 || ch === charCodes.digit1,\n\n // 0 - 7\n oct: (ch: number) => ch >= charCodes.digit0 && ch <= charCodes.digit7,\n\n // 0 - 9\n dec: (ch: number) => ch >= charCodes.digit0 && ch <= charCodes.digit9,\n\n // 0 - 9, A - F, a - f,\n hex: (ch: number) =>\n (ch >= charCodes.digit0 && ch <= charCodes.digit9) ||\n (ch >= charCodes.uppercaseA && ch <= charCodes.uppercaseF) ||\n (ch >= charCodes.lowercaseA && ch <= charCodes.lowercaseF),\n};\n\nexport type StringContentsErrorHandlers = EscapedCharErrorHandlers & {\n unterminated(\n initialPos: number,\n initialLineStart: number,\n initialCurLine: number,\n ): void;\n};\n\nexport function readStringContents(\n type: \"single\" | \"double\" | \"template\",\n input: string,\n pos: number,\n lineStart: number,\n curLine: number,\n errors: StringContentsErrorHandlers,\n) {\n const initialPos = pos;\n const initialLineStart = lineStart;\n const initialCurLine = curLine;\n\n let out = \"\";\n let firstInvalidLoc = null;\n let chunkStart = pos;\n const { length } = input;\n for (;;) {\n if (pos >= length) {\n errors.unterminated(initialPos, initialLineStart, initialCurLine);\n out += input.slice(chunkStart, pos);\n break;\n }\n const ch = input.charCodeAt(pos);\n if (isStringEnd(type, ch, input, pos)) {\n out += input.slice(chunkStart, pos);\n break;\n }\n if (ch === charCodes.backslash) {\n out += input.slice(chunkStart, pos);\n const res = readEscapedChar(\n input,\n pos,\n lineStart,\n curLine,\n type === \"template\",\n errors,\n );\n if (res.ch === null && !firstInvalidLoc) {\n firstInvalidLoc = { pos, lineStart, curLine };\n } else {\n out += res.ch;\n }\n ({ pos, lineStart, curLine } = res);\n chunkStart = pos;\n } else if (\n ch === charCodes.lineSeparator ||\n ch === charCodes.paragraphSeparator\n ) {\n ++pos;\n ++curLine;\n lineStart = pos;\n } else if (ch === charCodes.lineFeed || ch === charCodes.carriageReturn) {\n if (type === \"template\") {\n out += input.slice(chunkStart, pos) + \"\\n\";\n ++pos;\n if (\n ch === charCodes.carriageReturn &&\n input.charCodeAt(pos) === charCodes.lineFeed\n ) {\n ++pos;\n }\n ++curLine;\n chunkStart = lineStart = pos;\n } else {\n errors.unterminated(initialPos, initialLineStart, initialCurLine);\n }\n } else {\n ++pos;\n }\n }\n return process.env.BABEL_8_BREAKING\n ? { pos, str: out, firstInvalidLoc, lineStart, curLine }\n : {\n pos,\n str: out,\n firstInvalidLoc,\n lineStart,\n curLine,\n containsInvalid: !!firstInvalidLoc,\n };\n}\n\nfunction isStringEnd(\n type: \"single\" | \"double\" | \"template\",\n ch: number,\n input: string,\n pos: number,\n) {\n if (type === \"template\") {\n return (\n ch === charCodes.graveAccent ||\n (ch === charCodes.dollarSign &&\n input.charCodeAt(pos + 1) === charCodes.leftCurlyBrace)\n );\n }\n return (\n ch === (type === \"double\" ? charCodes.quotationMark : charCodes.apostrophe)\n );\n}\n\ntype EscapedCharErrorHandlers = HexCharErrorHandlers &\n CodePointErrorHandlers & {\n strictNumericEscape(pos: number, lineStart: number, curLine: number): void;\n };\n\nfunction readEscapedChar(\n input: string,\n pos: number,\n lineStart: number,\n curLine: number,\n inTemplate: boolean,\n errors: EscapedCharErrorHandlers,\n) {\n const throwOnInvalid = !inTemplate;\n pos++; // skip '\\'\n\n const res = (ch: string | null) => ({ pos, ch, lineStart, curLine });\n\n const ch = input.charCodeAt(pos++);\n switch (ch) {\n case charCodes.lowercaseN:\n return res(\"\\n\");\n case charCodes.lowercaseR:\n return res(\"\\r\");\n case charCodes.lowercaseX: {\n let code;\n ({ code, pos } = readHexChar(\n input,\n pos,\n lineStart,\n curLine,\n 2,\n false,\n throwOnInvalid,\n errors,\n ));\n return res(code === null ? null : String.fromCharCode(code));\n }\n case charCodes.lowercaseU: {\n let code;\n ({ code, pos } = readCodePoint(\n input,\n pos,\n lineStart,\n curLine,\n throwOnInvalid,\n errors,\n ));\n return res(code === null ? null : String.fromCodePoint(code));\n }\n case charCodes.lowercaseT:\n return res(\"\\t\");\n case charCodes.lowercaseB:\n return res(\"\\b\");\n case charCodes.lowercaseV:\n return res(\"\\u000b\");\n case charCodes.lowercaseF:\n return res(\"\\f\");\n case charCodes.carriageReturn:\n if (input.charCodeAt(pos) === charCodes.lineFeed) {\n ++pos;\n }\n // fall through\n case charCodes.lineFeed:\n lineStart = pos;\n ++curLine;\n // fall through\n case charCodes.lineSeparator:\n case charCodes.paragraphSeparator:\n return res(\"\");\n case charCodes.digit8:\n case charCodes.digit9:\n if (inTemplate) {\n return res(null);\n } else {\n errors.strictNumericEscape(pos - 1, lineStart, curLine);\n }\n // fall through\n default:\n if (ch >= charCodes.digit0 && ch <= charCodes.digit7) {\n const startPos = pos - 1;\n const match = input.slice(startPos, pos + 2).match(/^[0-7]+/)!;\n\n let octalStr = match[0];\n\n let octal = parseInt(octalStr, 8);\n if (octal > 255) {\n octalStr = octalStr.slice(0, -1);\n octal = parseInt(octalStr, 8);\n }\n pos += octalStr.length - 1;\n const next = input.charCodeAt(pos);\n if (\n octalStr !== \"0\" ||\n next === charCodes.digit8 ||\n next === charCodes.digit9\n ) {\n if (inTemplate) {\n return res(null);\n } else {\n errors.strictNumericEscape(startPos, lineStart, curLine);\n }\n }\n\n return res(String.fromCharCode(octal));\n }\n\n return res(String.fromCharCode(ch));\n }\n}\n\ntype HexCharErrorHandlers = IntErrorHandlers & {\n invalidEscapeSequence(pos: number, lineStart: number, curLine: number): void;\n};\n\n// Used to read character escape sequences ('\\x', '\\u').\nfunction readHexChar(\n input: string,\n pos: number,\n lineStart: number,\n curLine: number,\n len: number,\n forceLen: boolean,\n throwOnInvalid: boolean,\n errors: HexCharErrorHandlers,\n) {\n const initialPos = pos;\n let n;\n ({ n, pos } = readInt(\n input,\n pos,\n lineStart,\n curLine,\n 16,\n len,\n forceLen,\n false,\n errors,\n /* bailOnError */ !throwOnInvalid,\n ));\n if (n === null) {\n if (throwOnInvalid) {\n errors.invalidEscapeSequence(initialPos, lineStart, curLine);\n } else {\n pos = initialPos - 1;\n }\n }\n return { code: n, pos };\n}\n\nexport type IntErrorHandlers = {\n numericSeparatorInEscapeSequence(\n pos: number,\n lineStart: number,\n curLine: number,\n ): void;\n unexpectedNumericSeparator(\n pos: number,\n lineStart: number,\n curLine: number,\n ): void;\n // It can return \"true\" to indicate that the error was handled\n // and the int parsing should continue.\n invalidDigit(\n pos: number,\n lineStart: number,\n curLine: number,\n radix: number,\n ): boolean;\n};\n\nexport function readInt(\n input: string,\n pos: number,\n lineStart: number,\n curLine: number,\n radix: number,\n len: number | undefined,\n forceLen: boolean,\n allowNumSeparator: boolean | \"bail\",\n errors: IntErrorHandlers,\n bailOnError: boolean,\n) {\n const start = pos;\n const forbiddenSiblings =\n radix === 16\n ? forbiddenNumericSeparatorSiblings.hex\n : forbiddenNumericSeparatorSiblings.decBinOct;\n const isAllowedSibling =\n radix === 16\n ? isAllowedNumericSeparatorSibling.hex\n : radix === 10\n ? isAllowedNumericSeparatorSibling.dec\n : radix === 8\n ? isAllowedNumericSeparatorSibling.oct\n : isAllowedNumericSeparatorSibling.bin;\n\n let invalid = false;\n let total = 0;\n\n for (let i = 0, e = len == null ? Infinity : len; i < e; ++i) {\n const code = input.charCodeAt(pos);\n let val;\n\n if (code === charCodes.underscore && allowNumSeparator !== \"bail\") {\n const prev = input.charCodeAt(pos - 1);\n const next = input.charCodeAt(pos + 1);\n\n if (!allowNumSeparator) {\n if (bailOnError) return { n: null, pos };\n errors.numericSeparatorInEscapeSequence(pos, lineStart, curLine);\n } else if (\n Number.isNaN(next) ||\n !isAllowedSibling(next) ||\n forbiddenSiblings.has(prev) ||\n forbiddenSiblings.has(next)\n ) {\n if (bailOnError) return { n: null, pos };\n errors.unexpectedNumericSeparator(pos, lineStart, curLine);\n }\n\n // Ignore this _ character\n ++pos;\n continue;\n }\n\n if (code >= charCodes.lowercaseA) {\n val = code - charCodes.lowercaseA + charCodes.lineFeed;\n } else if (code >= charCodes.uppercaseA) {\n val = code - charCodes.uppercaseA + charCodes.lineFeed;\n } else if (charCodes.isDigit(code)) {\n val = code - charCodes.digit0; // 0-9\n } else {\n val = Infinity;\n }\n if (val >= radix) {\n // If we found a digit which is too big, errors.invalidDigit can return true to avoid\n // breaking the loop (this is used for error recovery).\n if (val <= 9 && bailOnError) {\n return { n: null, pos };\n } else if (\n val <= 9 &&\n errors.invalidDigit(pos, lineStart, curLine, radix)\n ) {\n val = 0;\n } else if (forceLen) {\n val = 0;\n invalid = true;\n } else {\n break;\n }\n }\n ++pos;\n total = total * radix + val;\n }\n if (pos === start || (len != null && pos - start !== len) || invalid) {\n return { n: null, pos };\n }\n\n return { n: total, pos };\n}\n\nexport type CodePointErrorHandlers = HexCharErrorHandlers & {\n invalidCodePoint(pos: number, lineStart: number, curLine: number): void;\n};\n\nexport function readCodePoint(\n input: string,\n pos: number,\n lineStart: number,\n curLine: number,\n throwOnInvalid: boolean,\n errors: CodePointErrorHandlers,\n) {\n const ch = input.charCodeAt(pos);\n let code;\n\n if (ch === charCodes.leftCurlyBrace) {\n ++pos;\n ({ code, pos } = readHexChar(\n input,\n pos,\n lineStart,\n curLine,\n input.indexOf(\"}\", pos) - pos,\n true,\n throwOnInvalid,\n errors,\n ));\n ++pos;\n if (code !== null && code > 0x10ffff) {\n if (throwOnInvalid) {\n errors.invalidCodePoint(pos, lineStart, curLine);\n } else {\n return { code: null, pos };\n }\n }\n } else {\n ({ code, pos } = readHexChar(\n input,\n pos,\n lineStart,\n curLine,\n 4,\n false,\n throwOnInvalid,\n errors,\n ));\n }\n return { code, pos };\n}\n","/*:: declare var invariant; */\n\nimport type { Options } from \"../options.ts\";\nimport {\n Position,\n SourceLocation,\n createPositionWithColumnOffset,\n} from \"../util/location.ts\";\nimport CommentsParser, { type CommentWhitespace } from \"../parser/comments.ts\";\nimport type * as N from \"../types.ts\";\nimport * as charCodes from \"charcodes\";\nimport { isIdentifierStart, isIdentifierChar } from \"../util/identifier.ts\";\nimport {\n tokenIsKeyword,\n tokenLabelName,\n tt,\n keywords as keywordTypes,\n type TokenType,\n} from \"./types.ts\";\nimport type { TokContext } from \"./context.ts\";\nimport {\n Errors,\n type ParseError,\n type ParseErrorConstructor,\n type RaiseProperties,\n} from \"../parse-error.ts\";\nimport {\n lineBreakG,\n isNewLine,\n isWhitespace,\n skipWhiteSpace,\n skipWhiteSpaceInLine,\n} from \"../util/whitespace.ts\";\nimport State from \"./state.ts\";\nimport type { LookaheadState, DeferredStrictError } from \"./state.ts\";\n\nimport {\n readInt,\n readCodePoint,\n readStringContents,\n type IntErrorHandlers,\n type CodePointErrorHandlers,\n type StringContentsErrorHandlers,\n} from \"@babel/helper-string-parser\";\n\nimport type { Plugin } from \"../typings.ts\";\n\nfunction buildPosition(pos: number, lineStart: number, curLine: number) {\n return new Position(curLine, pos - lineStart, pos);\n}\n\nconst VALID_REGEX_FLAGS = new Set([\n charCodes.lowercaseG,\n charCodes.lowercaseM,\n charCodes.lowercaseS,\n charCodes.lowercaseI,\n charCodes.lowercaseY,\n charCodes.lowercaseU,\n charCodes.lowercaseD,\n charCodes.lowercaseV,\n]);\n\n// Object type used to represent tokens. Note that normally, tokens\n// simply exist as properties on the parser object. This is only\n// used for the onToken callback and the external tokenizer.\n\nexport class Token {\n constructor(state: State) {\n this.type = state.type;\n this.value = state.value;\n this.start = state.start;\n this.end = state.end;\n this.loc = new SourceLocation(state.startLoc, state.endLoc);\n }\n\n declare type: TokenType;\n declare value: any;\n declare start: number;\n declare end: number;\n declare loc: SourceLocation;\n}\n\n// ## Tokenizer\n\nexport default abstract class Tokenizer extends CommentsParser {\n isLookahead: boolean;\n\n // Token store.\n tokens: Array<Token | N.Comment> = [];\n\n constructor(options: Options, input: string) {\n super();\n this.state = new State();\n this.state.init(options);\n this.input = input;\n this.length = input.length;\n this.isLookahead = false;\n }\n\n pushToken(token: Token | N.Comment) {\n // Pop out invalid tokens trapped by try-catch parsing.\n // Those parsing branches are mainly created by typescript and flow plugins.\n this.tokens.length = this.state.tokensLength;\n this.tokens.push(token);\n ++this.state.tokensLength;\n }\n\n // Move to the next token\n\n next(): void {\n this.checkKeywordEscapes();\n if (this.options.tokens) {\n this.pushToken(new Token(this.state));\n }\n\n this.state.lastTokStart = this.state.start;\n this.state.lastTokEndLoc = this.state.endLoc;\n this.state.lastTokStartLoc = this.state.startLoc;\n this.nextToken();\n }\n\n eat(type: TokenType): boolean {\n if (this.match(type)) {\n this.next();\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * Whether current token matches given type\n */\n match(type: TokenType): boolean {\n return this.state.type === type;\n }\n\n /**\n * Create a LookaheadState from current parser state\n */\n createLookaheadState(state: State): LookaheadState {\n return {\n pos: state.pos,\n value: null,\n type: state.type,\n start: state.start,\n end: state.end,\n context: [this.curContext()],\n inType: state.inType,\n startLoc: state.startLoc,\n lastTokEndLoc: state.lastTokEndLoc,\n curLine: state.curLine,\n lineStart: state.lineStart,\n curPosition: state.curPosition,\n };\n }\n\n /**\n * lookahead peeks the next token, skipping changes to token context and\n * comment stack. For performance it returns a limited LookaheadState\n * instead of full parser state.\n *\n * The { column, line } Loc info is not included in lookahead since such usage\n * is rare. Although it may return other location properties e.g. `curLine` and\n * `lineStart`, these properties are not listed in the LookaheadState interface\n * and thus the returned value is _NOT_ reliable.\n *\n * The tokenizer should make best efforts to avoid using any parser state\n * other than those defined in LookaheadState\n */\n lookahead(): LookaheadState {\n const old = this.state;\n // @ts-expect-error For performance we use a simplified tokenizer state structure\n this.state = this.createLookaheadState(old);\n\n this.isLookahead = true;\n this.nextToken();\n this.isLookahead = false;\n\n const curr = this.state;\n this.state = old;\n return curr;\n }\n\n nextTokenStart(): number {\n return this.nextTokenStartSince(this.state.pos);\n }\n\n nextTokenStartSince(pos: number): number {\n skipWhiteSpace.lastIndex = pos;\n return skipWhiteSpace.test(this.input) ? skipWhiteSpace.lastIndex : pos;\n }\n\n lookaheadCharCode(): number {\n return this.input.charCodeAt(this.nextTokenStart());\n }\n\n /**\n * Similar to nextToken, but it will stop at line break when it is seen before the next token\n *\n * @returns {number} position of the next token start or line break, whichever is seen first.\n * @memberof Tokenizer\n */\n nextTokenInLineStart(): number {\n return this.nextTokenInLineStartSince(this.state.pos);\n }\n\n nextTokenInLineStartSince(pos: number): number {\n skipWhiteSpaceInLine.lastIndex = pos;\n return skipWhiteSpaceInLine.test(this.input)\n ? skipWhiteSpaceInLine.lastIndex\n : pos;\n }\n\n /**\n * Similar to lookaheadCharCode, but it will return the char code of line break if it is\n * seen before the next token\n *\n * @returns {number} char code of the next token start or line break, whichever is seen first.\n * @memberof Tokenizer\n */\n lookaheadInLineCharCode(): number {\n return this.input.charCodeAt(this.nextTokenInLineStart());\n }\n\n codePointAtPos(pos: number): number {\n // The implementation is based on\n // https://source.chromium.org/chromium/chromium/src/+/master:v8/src/builtins/builtins-string-gen.cc;l=1455;drc=221e331b49dfefadbc6fa40b0c68e6f97606d0b3;bpv=0;bpt=1\n // We reimplement `codePointAt` because `codePointAt` is a V8 builtin which is not inlined by TurboFan (as of M91)\n // since `input` is mostly ASCII, an inlined `charCodeAt` wins here\n let cp = this.input.charCodeAt(pos);\n if ((cp & 0xfc00) === 0xd800 && ++pos < this.input.length) {\n const trail = this.input.charCodeAt(pos);\n if ((trail & 0xfc00) === 0xdc00) {\n cp = 0x10000 + ((cp & 0x3ff) << 10) + (trail & 0x3ff);\n }\n }\n return cp;\n }\n\n // Toggle strict mode. Re-reads the next number or string to please\n // pedantic tests (`\"use strict\"; 010;` should fail).\n\n setStrict(strict: boolean): void {\n this.state.strict = strict;\n if (strict) {\n // Throw an error for any string decimal escape found before/immediately\n // after a \"use strict\" directive. Strict mode will be set at parse\n // time for any literals that occur after the next node of the strict\n // directive.\n this.state.strictErrors.forEach(([toParseError, at]) =>\n this.raise(toParseError, { at }),\n );\n this.state.strictErrors.clear();\n }\n }\n\n curContext(): TokContext {\n return this.state.context[this.state.context.length - 1];\n }\n\n // Read a single token, updating the parser object's token-related properties.\n nextToken(): void {\n this.skipSpace();\n this.state.start = this.state.pos;\n if (!this.isLookahead) this.state.startLoc = this.state.curPosition();\n if (this.state.pos >= this.length) {\n this.finishToken(tt.eof);\n return;\n }\n\n this.getTokenFromCode(this.codePointAtPos(this.state.pos));\n }\n\n // Skips a block comment, whose end is marked by commentEnd.\n // *-/ is used by the Flow plugin, when parsing block comments nested\n // inside Flow comments.\n skipBlockComment(commentEnd: \"*/\" | \"*-/\"): N.CommentBlock | undefined {\n let startLoc;\n if (!this.isLookahead) startLoc = this.state.curPosition();\n const start = this.state.pos;\n const end = this.input.indexOf(commentEnd, start + 2);\n if (end === -1) {\n // We have to call this again here because startLoc may not be set...\n // This seems to be for performance reasons:\n // https://github.com/babel/babel/commit/acf2a10899f696a8aaf34df78bf9725b5ea7f2da\n throw this.raise(Errors.UnterminatedComment, {\n at: this.state.curPosition(),\n });\n }\n\n this.state.pos = end + commentEnd.length;\n lineBreakG.lastIndex = start + 2;\n while (lineBreakG.test(this.input) && lineBreakG.lastIndex <= end) {\n ++this.state.curLine;\n this.state.lineStart = lineBreakG.lastIndex;\n }\n\n // If we are doing a lookahead right now we need to advance the position (above code)\n // but we do not want to push the comment to the state.\n if (this.isLookahead) return;\n /*:: invariant(startLoc) */\n\n const comment: N.CommentBlock = {\n type: \"CommentBlock\",\n value: this.input.slice(start + 2, end),\n start,\n end: end + commentEnd.length,\n loc: new SourceLocation(startLoc, this.state.curPosition()),\n };\n if (this.options.tokens) this.pushToken(comment);\n return comment;\n }\n\n skipLineComment(startSkip: number): N.CommentLine | undefined {\n const start = this.state.pos;\n let startLoc;\n if (!this.isLookahead) startLoc = this.state.curPosition();\n let ch = this.input.charCodeAt((this.state.pos += startSkip));\n if (this.state.pos < this.length) {\n while (!isNewLine(ch) && ++this.state.pos < this.length) {\n ch = this.input.charCodeAt(this.state.pos);\n }\n }\n\n // If we are doing a lookahead right now we need to advance the position (above code)\n // but we do not want to push the comment to the state.\n if (this.isLookahead) return;\n /*:: invariant(startLoc) */\n\n const end = this.state.pos;\n const value = this.input.slice(start + startSkip, end);\n\n const comment: N.CommentLine = {\n type: \"CommentLine\",\n value,\n start,\n end,\n loc: new SourceLocation(startLoc, this.state.curPosition()),\n };\n if (this.options.tokens) this.pushToken(comment);\n return comment;\n }\n\n // Called at the start of the parse and after every token. Skips\n // whitespace and comments, and.\n\n skipSpace(): void {\n const spaceStart = this.state.pos;\n const comments = [];\n loop: while (this.state.pos < this.length) {\n const ch = this.input.charCodeAt(this.state.pos);\n switch (ch) {\n case charCodes.space:\n case charCodes.nonBreakingSpace:\n case charCodes.tab:\n ++this.state.pos;\n break;\n case charCodes.carriageReturn:\n if (\n this.input.charCodeAt(this.state.pos + 1) === charCodes.lineFeed\n ) {\n ++this.state.pos;\n }\n // fall through\n case charCodes.lineFeed:\n case charCodes.lineSeparator:\n case charCodes.paragraphSeparator:\n ++this.state.pos;\n ++this.state.curLine;\n this.state.lineStart = this.state.pos;\n break;\n\n case charCodes.slash:\n switch (this.input.charCodeAt(this.state.pos + 1)) {\n case charCodes.asterisk: {\n const comment = this.skipBlockComment(\"*/\");\n if (comment !== undefined) {\n this.addComment(comment);\n if (this.options.attachComment) comments.push(comment);\n }\n break;\n }\n\n case charCodes.slash: {\n const comment = this.skipLineComment(2);\n if (comment !== undefined) {\n this.addComment(comment);\n if (this.options.attachComment) comments.push(comment);\n }\n break;\n }\n\n default:\n break loop;\n }\n break;\n\n default:\n if (isWhitespace(ch)) {\n ++this.state.pos;\n } else if (\n ch === charCodes.dash &&\n !this.inModule &&\n this.options.annexB\n ) {\n const pos = this.state.pos;\n if (\n this.input.charCodeAt(pos + 1) === charCodes.dash &&\n this.input.charCodeAt(pos + 2) === charCodes.greaterThan &&\n (spaceStart === 0 || this.state.lineStart > spaceStart)\n ) {\n // A `-->` line comment\n const comment = this.skipLineComment(3);\n if (comment !== undefined) {\n this.addComment(comment);\n if (this.options.attachComment) comments.push(comment);\n }\n } else {\n break loop;\n }\n } else if (\n ch === charCodes.lessThan &&\n !this.inModule &&\n this.options.annexB\n ) {\n const pos = this.state.pos;\n if (\n this.input.charCodeAt(pos + 1) === charCodes.exclamationMark &&\n this.input.charCodeAt(pos + 2) === charCodes.dash &&\n this.input.charCodeAt(pos + 3) === charCodes.dash\n ) {\n // `<!--`, an XML-style comment that should be interpreted as a line comment\n const comment = this.skipLineComment(4);\n if (comment !== undefined) {\n this.addComment(comment);\n if (this.options.attachComment) comments.push(comment);\n }\n } else {\n break loop;\n }\n } else {\n break loop;\n }\n }\n }\n\n if (comments.length > 0) {\n const end = this.state.pos;\n const commentWhitespace: CommentWhitespace = {\n start: spaceStart,\n end,\n comments,\n leadingNode: null,\n trailingNode: null,\n containingNode: null,\n };\n this.state.commentStack.push(commentWhitespace);\n }\n }\n\n // Called at the end of every token. Sets `end`, `val`, and\n // maintains `context` and `canStartJSXElement`, and skips the space after\n // the token, so that the next one's `start` will point at the\n // right position.\n\n finishToken(type: TokenType, val?: any): void {\n this.state.end = this.state.pos;\n this.state.endLoc = this.state.curPosition();\n const prevType = this.state.type;\n this.state.type = type;\n this.state.value = val;\n\n if (!this.isLookahead) {\n this.updateContext(prevType);\n }\n }\n\n replaceToken(type: TokenType): void {\n this.state.type = type;\n // @ts-expect-error the prevType of updateContext is required\n // only when the new type is tt.slash/tt.jsxTagEnd\n this.updateContext();\n }\n\n // ### Token reading\n\n // This is the function that is called to fetch the next token. It\n // is somewhat obscure, because it works in character codes rather\n // than characters, and because operator parsing has been inlined\n // into it.\n //\n // All in the name of speed.\n\n // number sign is \"#\"\n readToken_numberSign(): void {\n if (this.state.pos === 0 && this.readToken_interpreter()) {\n return;\n }\n\n const nextPos = this.state.pos + 1;\n const next = this.codePointAtPos(nextPos);\n if (next >= charCodes.digit0 && next <= charCodes.digit9) {\n throw this.raise(Errors.UnexpectedDigitAfterHash, {\n at: this.state.curPosition(),\n });\n }\n\n if (\n next === charCodes.leftCurlyBrace ||\n (next === charCodes.leftSquareBracket && this.hasPlugin(\"recordAndTuple\"))\n ) {\n // When we see `#{`, it is likely to be a hash record.\n // However we don't yell at `#[` since users may intend to use \"computed private fields\",\n // which is not allowed in the spec. Throwing expecting recordAndTuple is\n // misleading\n this.expectPlugin(\"recordAndTuple\");\n if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") === \"bar\") {\n throw this.raise(\n next === charCodes.leftCurlyBrace\n ? Errors.RecordExpressionHashIncorrectStartSyntaxType\n : Errors.TupleExpressionHashIncorrectStartSyntaxType,\n { at: this.state.curPosition() },\n );\n }\n\n this.state.pos += 2;\n if (next === charCodes.leftCurlyBrace) {\n // #{\n this.finishToken(tt.braceHashL);\n } else {\n // #[\n this.finishToken(tt.bracketHashL);\n }\n } else if (isIdentifierStart(next)) {\n ++this.state.pos;\n this.finishToken(tt.privateName, this.readWord1(next));\n } else if (next === charCodes.backslash) {\n ++this.state.pos;\n this.finishToken(tt.privateName, this.readWord1());\n } else {\n this.finishOp(tt.hash, 1);\n }\n }\n\n readToken_dot(): void {\n const next = this.input.charCodeAt(this.state.pos + 1);\n if (next >= charCodes.digit0 && next <= charCodes.digit9) {\n this.readNumber(true);\n return;\n }\n\n if (\n next === charCodes.dot &&\n this.input.charCodeAt(this.state.pos + 2) === charCodes.dot\n ) {\n this.state.pos += 3;\n this.finishToken(tt.ellipsis);\n } else {\n ++this.state.pos;\n this.finishToken(tt.dot);\n }\n }\n\n readToken_slash(): void {\n const next = this.input.charCodeAt(this.state.pos + 1);\n if (next === charCodes.equalsTo) {\n this.finishOp(tt.slashAssign, 2);\n } else {\n this.finishOp(tt.slash, 1);\n }\n }\n\n readToken_interpreter(): boolean {\n if (this.state.pos !== 0 || this.length < 2) return false;\n\n let ch = this.input.charCodeAt(this.state.pos + 1);\n if (ch !== charCodes.exclamationMark) return false;\n\n const start = this.state.pos;\n this.state.pos += 1;\n\n while (!isNewLine(ch) && ++this.state.pos < this.length) {\n ch = this.input.charCodeAt(this.state.pos);\n }\n\n const value = this.input.slice(start + 2, this.state.pos);\n\n this.finishToken(tt.interpreterDirective, value);\n\n return true;\n }\n\n readToken_mult_modulo(code: number): void {\n // '%' or '*'\n let type = code === charCodes.asterisk ? tt.star : tt.modulo;\n let width = 1;\n let next = this.input.charCodeAt(this.state.pos + 1);\n\n // Exponentiation operator '**'\n if (code === charCodes.asterisk && next === charCodes.asterisk) {\n width++;\n next = this.input.charCodeAt(this.state.pos + 2);\n type = tt.exponent;\n }\n\n // '%=' or '*='\n if (next === charCodes.equalsTo && !this.state.inType) {\n width++;\n // `tt.moduloAssign` is only needed to support % as a Hack-pipe topic token.\n // If the proposal ends up choosing a different token,\n // it can be merged with tt.assign.\n type = code === charCodes.percentSign ? tt.moduloAssign : tt.assign;\n }\n\n this.finishOp(type, width);\n }\n\n readToken_pipe_amp(code: number): void {\n // '||' '&&' '||=' '&&='\n const next = this.input.charCodeAt(this.state.pos + 1);\n\n if (next === code) {\n if (this.input.charCodeAt(this.state.pos + 2) === charCodes.equalsTo) {\n this.finishOp(tt.assign, 3);\n } else {\n this.finishOp(\n code === charCodes.verticalBar ? tt.logicalOR : tt.logicalAND,\n 2,\n );\n }\n return;\n }\n\n if (code === charCodes.verticalBar) {\n // '|>'\n if (next === charCodes.greaterThan) {\n this.finishOp(tt.pipeline, 2);\n return;\n }\n // '|}'\n if (\n this.hasPlugin(\"recordAndTuple\") &&\n next === charCodes.rightCurlyBrace\n ) {\n if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"bar\") {\n throw this.raise(Errors.RecordExpressionBarIncorrectEndSyntaxType, {\n at: this.state.curPosition(),\n });\n }\n this.state.pos += 2;\n this.finishToken(tt.braceBarR);\n return;\n }\n\n // '|]'\n if (\n this.hasPlugin(\"recordAndTuple\") &&\n next === charCodes.rightSquareBracket\n ) {\n if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"bar\") {\n throw this.raise(Errors.TupleExpressionBarIncorrectEndSyntaxType, {\n at: this.state.curPosition(),\n });\n }\n this.state.pos += 2;\n this.finishToken(tt.bracketBarR);\n return;\n }\n }\n\n if (next === charCodes.equalsTo) {\n this.finishOp(tt.assign, 2);\n return;\n }\n\n this.finishOp(\n code === charCodes.verticalBar ? tt.bitwiseOR : tt.bitwiseAND,\n 1,\n );\n }\n\n readToken_caret(): void {\n const next = this.input.charCodeAt(this.state.pos + 1);\n\n // '^='\n if (next === charCodes.equalsTo && !this.state.inType) {\n // `tt.xorAssign` is only needed to support ^ as a Hack-pipe topic token.\n // If the proposal ends up choosing a different token,\n // it can be merged with tt.assign.\n this.finishOp(tt.xorAssign, 2);\n }\n // '^^'\n else if (\n next === charCodes.caret &&\n // If the ^^ token is not enabled, we don't throw but parse two single ^s\n // because it could be a ^ hack token followed by a ^ binary operator.\n this.hasPlugin([\n \"pipelineOperator\",\n { proposal: \"hack\", topicToken: \"^^\" },\n ])\n ) {\n this.finishOp(tt.doubleCaret, 2);\n\n // `^^^` is forbidden and must be separated by a space.\n const lookaheadCh = this.input.codePointAt(this.state.pos);\n if (lookaheadCh === charCodes.caret) {\n this.unexpected();\n }\n }\n // '^'\n else {\n this.finishOp(tt.bitwiseXOR, 1);\n }\n }\n\n readToken_atSign(): void {\n const next = this.input.charCodeAt(this.state.pos + 1);\n\n // '@@'\n if (\n next === charCodes.atSign &&\n this.hasPlugin([\n \"pipelineOperator\",\n { proposal: \"hack\", topicToken: \"@@\" },\n ])\n ) {\n this.finishOp(tt.doubleAt, 2);\n }\n // '@'\n else {\n this.finishOp(tt.at, 1);\n }\n }\n\n readToken_plus_min(code: number): void {\n // '+-'\n const next = this.input.charCodeAt(this.state.pos + 1);\n\n if (next === code) {\n this.finishOp(tt.incDec, 2);\n return;\n }\n\n if (next === charCodes.equalsTo) {\n this.finishOp(tt.assign, 2);\n } else {\n this.finishOp(tt.plusMin, 1);\n }\n }\n\n readToken_lt(): void {\n // '<'\n const { pos } = this.state;\n const next = this.input.charCodeAt(pos + 1);\n\n if (next === charCodes.lessThan) {\n if (this.input.charCodeAt(pos + 2) === charCodes.equalsTo) {\n this.finishOp(tt.assign, 3);\n return;\n }\n this.finishOp(tt.bitShiftL, 2);\n return;\n }\n\n if (next === charCodes.equalsTo) {\n // <=\n this.finishOp(tt.relational, 2);\n return;\n }\n\n this.finishOp(tt.lt, 1);\n }\n\n readToken_gt(): void {\n // '>'\n const { pos } = this.state;\n const next = this.input.charCodeAt(pos + 1);\n\n if (next === charCodes.greaterThan) {\n const size =\n this.input.charCodeAt(pos + 2) === charCodes.greaterThan ? 3 : 2;\n if (this.input.charCodeAt(pos + size) === charCodes.equalsTo) {\n this.finishOp(tt.assign, size + 1);\n return;\n }\n this.finishOp(tt.bitShiftR, size);\n return;\n }\n\n if (next === charCodes.equalsTo) {\n // <= | >=\n this.finishOp(tt.relational, 2);\n return;\n }\n\n this.finishOp(tt.gt, 1);\n }\n\n readToken_eq_excl(code: number): void {\n // '=!'\n const next = this.input.charCodeAt(this.state.pos + 1);\n if (next === charCodes.equalsTo) {\n this.finishOp(\n tt.equality,\n this.input.charCodeAt(this.state.pos + 2) === charCodes.equalsTo\n ? 3\n : 2,\n );\n return;\n }\n if (code === charCodes.equalsTo && next === charCodes.greaterThan) {\n // '=>'\n this.state.pos += 2;\n this.finishToken(tt.arrow);\n return;\n }\n this.finishOp(code === charCodes.equalsTo ? tt.eq : tt.bang, 1);\n }\n\n readToken_question(): void {\n // '?'\n const next = this.input.charCodeAt(this.state.pos + 1);\n const next2 = this.input.charCodeAt(this.state.pos + 2);\n if (next === charCodes.questionMark) {\n if (next2 === charCodes.equalsTo) {\n // '??='\n this.finishOp(tt.assign, 3);\n } else {\n // '??'\n this.finishOp(tt.nullishCoalescing, 2);\n }\n } else if (\n next === charCodes.dot &&\n !(next2 >= charCodes.digit0 && next2 <= charCodes.digit9)\n ) {\n // '.' not followed by a number\n this.state.pos += 2;\n this.finishToken(tt.questionDot);\n } else {\n ++this.state.pos;\n this.finishToken(tt.question);\n }\n }\n\n getTokenFromCode(code: number): void {\n switch (code) {\n // The interpretation of a dot depends on whether it is followed\n // by a digit or another two dots.\n\n case charCodes.dot:\n this.readToken_dot();\n return;\n // Punctuation tokens.\n case charCodes.leftParenthesis:\n ++this.state.pos;\n this.finishToken(tt.parenL);\n return;\n case charCodes.rightParenthesis:\n ++this.state.pos;\n this.finishToken(tt.parenR);\n return;\n case charCodes.semicolon:\n ++this.state.pos;\n this.finishToken(tt.semi);\n return;\n case charCodes.comma:\n ++this.state.pos;\n this.finishToken(tt.comma);\n return;\n case charCodes.leftSquareBracket:\n if (\n this.hasPlugin(\"recordAndTuple\") &&\n this.input.charCodeAt(this.state.pos + 1) === charCodes.verticalBar\n ) {\n if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"bar\") {\n throw this.raise(\n Errors.TupleExpressionBarIncorrectStartSyntaxType,\n { at: this.state.curPosition() },\n );\n }\n\n // [|\n this.state.pos += 2;\n this.finishToken(tt.bracketBarL);\n } else {\n ++this.state.pos;\n this.finishToken(tt.bracketL);\n }\n return;\n case charCodes.rightSquareBracket:\n ++this.state.pos;\n this.finishToken(tt.bracketR);\n return;\n case charCodes.leftCurlyBrace:\n if (\n this.hasPlugin(\"recordAndTuple\") &&\n this.input.charCodeAt(this.state.pos + 1) === charCodes.verticalBar\n ) {\n if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"bar\") {\n throw this.raise(\n Errors.RecordExpressionBarIncorrectStartSyntaxType,\n { at: this.state.curPosition() },\n );\n }\n\n // {|\n this.state.pos += 2;\n this.finishToken(tt.braceBarL);\n } else {\n ++this.state.pos;\n this.finishToken(tt.braceL);\n }\n return;\n case charCodes.rightCurlyBrace:\n ++this.state.pos;\n this.finishToken(tt.braceR);\n return;\n\n case charCodes.colon:\n if (\n this.hasPlugin(\"functionBind\") &&\n this.input.charCodeAt(this.state.pos + 1) === charCodes.colon\n ) {\n this.finishOp(tt.doubleColon, 2);\n } else {\n ++this.state.pos;\n this.finishToken(tt.colon);\n }\n return;\n\n case charCodes.questionMark:\n this.readToken_question();\n return;\n\n case charCodes.graveAccent:\n this.readTemplateToken();\n return;\n\n case charCodes.digit0: {\n const next = this.input.charCodeAt(this.state.pos + 1);\n // '0x', '0X' - hex number\n if (next === charCodes.lowercaseX || next === charCodes.uppercaseX) {\n this.readRadixNumber(16);\n return;\n }\n // '0o', '0O' - octal number\n if (next === charCodes.lowercaseO || next === charCodes.uppercaseO) {\n this.readRadixNumber(8);\n return;\n }\n // '0b', '0B' - binary number\n if (next === charCodes.lowercaseB || next === charCodes.uppercaseB) {\n this.readRadixNumber(2);\n return;\n }\n }\n // Anything else beginning with a digit is an integer, octal\n // number, or float. (fall through)\n case charCodes.digit1:\n case charCodes.digit2:\n case charCodes.digit3:\n case charCodes.digit4:\n case charCodes.digit5:\n case charCodes.digit6:\n case charCodes.digit7:\n case charCodes.digit8:\n case charCodes.digit9:\n this.readNumber(false);\n return;\n\n // Quotes produce strings.\n case charCodes.quotationMark:\n case charCodes.apostrophe:\n this.readString(code);\n return;\n\n // Operators are parsed inline in tiny state machines. '=' (charCodes.equalsTo) is\n // often referred to. `finishOp` simply skips the amount of\n // characters it is given as second argument, and returns a token\n // of the type given by its first argument.\n\n case charCodes.slash:\n this.readToken_slash();\n return;\n\n case charCodes.percentSign:\n case charCodes.asterisk:\n this.readToken_mult_modulo(code);\n return;\n\n case charCodes.verticalBar:\n case charCodes.ampersand:\n this.readToken_pipe_amp(code);\n return;\n\n case charCodes.caret:\n this.readToken_caret();\n return;\n\n case charCodes.plusSign:\n case charCodes.dash:\n this.readToken_plus_min(code);\n return;\n\n case charCodes.lessThan:\n this.readToken_lt();\n return;\n\n case charCodes.greaterThan:\n this.readToken_gt();\n return;\n\n case charCodes.equalsTo:\n case charCodes.exclamationMark:\n this.readToken_eq_excl(code);\n return;\n\n case charCodes.tilde:\n this.finishOp(tt.tilde, 1);\n return;\n\n case charCodes.atSign:\n this.readToken_atSign();\n return;\n\n case charCodes.numberSign:\n this.readToken_numberSign();\n return;\n\n case charCodes.backslash:\n this.readWord();\n return;\n\n default:\n if (isIdentifierStart(code)) {\n this.readWord(code);\n return;\n }\n }\n\n throw this.raise(Errors.InvalidOrUnexpectedToken, {\n at: this.state.curPosition(),\n unexpected: String.fromCodePoint(code),\n });\n }\n\n finishOp(type: TokenType, size: number): void {\n const str = this.input.slice(this.state.pos, this.state.pos + size);\n this.state.pos += size;\n this.finishToken(type, str);\n }\n\n readRegexp(): void {\n const startLoc = this.state.startLoc;\n const start = this.state.start + 1;\n let escaped, inClass;\n let { pos } = this.state;\n for (; ; ++pos) {\n if (pos >= this.length) {\n // FIXME: explain\n throw this.raise(Errors.UnterminatedRegExp, {\n at: createPositionWithColumnOffset(startLoc, 1),\n });\n }\n const ch = this.input.charCodeAt(pos);\n if (isNewLine(ch)) {\n throw this.raise(Errors.UnterminatedRegExp, {\n at: createPositionWithColumnOffset(startLoc, 1),\n });\n }\n if (escaped) {\n escaped = false;\n } else {\n if (ch === charCodes.leftSquareBracket) {\n inClass = true;\n } else if (ch === charCodes.rightSquareBracket && inClass) {\n inClass = false;\n } else if (ch === charCodes.slash && !inClass) {\n break;\n }\n escaped = ch === charCodes.backslash;\n }\n }\n const content = this.input.slice(start, pos);\n ++pos;\n\n let mods = \"\";\n\n const nextPos = () =>\n // (pos + 1) + 1 - start\n createPositionWithColumnOffset(startLoc, pos + 2 - start);\n\n while (pos < this.length) {\n const cp = this.codePointAtPos(pos);\n // It doesn't matter if cp > 0xffff, the loop will either throw or break because we check on cp\n const char = String.fromCharCode(cp);\n\n // @ts-expect-error VALID_REGEX_FLAGS.has should accept expanded type: number\n if (VALID_REGEX_FLAGS.has(cp)) {\n if (cp === charCodes.lowercaseV) {\n if (mods.includes(\"u\")) {\n this.raise(Errors.IncompatibleRegExpUVFlags, { at: nextPos() });\n }\n } else if (cp === charCodes.lowercaseU) {\n if (mods.includes(\"v\")) {\n this.raise(Errors.IncompatibleRegExpUVFlags, { at: nextPos() });\n }\n }\n if (mods.includes(char)) {\n this.raise(Errors.DuplicateRegExpFlags, { at: nextPos() });\n }\n } else if (isIdentifierChar(cp) || cp === charCodes.backslash) {\n this.raise(Errors.MalformedRegExpFlags, { at: nextPos() });\n } else {\n break;\n }\n\n ++pos;\n mods += char;\n }\n this.state.pos = pos;\n\n this.finishToken(tt.regexp, {\n pattern: content,\n flags: mods,\n });\n }\n\n // Read an integer in the given radix. Return null if zero digits\n // were read, the integer value otherwise. When `len` is given, this\n // will return `null` unless the integer has exactly `len` digits.\n // When `forceLen` is `true`, it means that we already know that in case\n // of a malformed number we have to skip `len` characters anyway, instead\n // of bailing out early. For example, in \"\\u{123Z}\" we want to read up to }\n // anyway, while in \"\\u00Z\" we will stop at Z instead of consuming four\n // characters (and thus the closing quote).\n\n readInt(\n radix: number,\n len?: number,\n forceLen: boolean = false,\n allowNumSeparator: boolean | \"bail\" = true,\n ): number | null {\n const { n, pos } = readInt(\n this.input,\n this.state.pos,\n this.state.lineStart,\n this.state.curLine,\n radix,\n len,\n forceLen,\n allowNumSeparator,\n this.errorHandlers_readInt,\n /* bailOnError */ false,\n );\n this.state.pos = pos;\n return n;\n }\n\n readRadixNumber(radix: number): void {\n const startLoc = this.state.curPosition();\n let isBigInt = false;\n\n this.state.pos += 2; // 0x\n const val = this.readInt(radix);\n if (val == null) {\n this.raise(Errors.InvalidDigit, {\n // Numeric literals can't have newlines, so this is safe to do.\n at: createPositionWithColumnOffset(startLoc, 2),\n radix,\n });\n }\n const next = this.input.charCodeAt(this.state.pos);\n\n if (next === charCodes.lowercaseN) {\n ++this.state.pos;\n isBigInt = true;\n } else if (next === charCodes.lowercaseM) {\n throw this.raise(Errors.InvalidDecimal, { at: startLoc });\n }\n\n if (isIdentifierStart(this.codePointAtPos(this.state.pos))) {\n throw this.raise(Errors.NumberIdentifier, {\n at: this.state.curPosition(),\n });\n }\n\n if (isBigInt) {\n const str = this.input\n .slice(startLoc.index, this.state.pos)\n .replace(/[_n]/g, \"\");\n this.finishToken(tt.bigint, str);\n return;\n }\n\n this.finishToken(tt.num, val);\n }\n\n // Read an integer, octal integer, or floating-point number.\n\n readNumber(startsWithDot: boolean): void {\n const start = this.state.pos;\n const startLoc = this.state.curPosition();\n let isFloat = false;\n let isBigInt = false;\n let isDecimal = false;\n let hasExponent = false;\n let isOctal = false;\n\n if (!startsWithDot && this.readInt(10) === null) {\n this.raise(Errors.InvalidNumber, { at: this.state.curPosition() });\n }\n const hasLeadingZero =\n this.state.pos - start >= 2 &&\n this.input.charCodeAt(start) === charCodes.digit0;\n\n if (hasLeadingZero) {\n const integer = this.input.slice(start, this.state.pos);\n this.recordStrictModeErrors(Errors.StrictOctalLiteral, { at: startLoc });\n if (!this.state.strict) {\n // disallow numeric separators in non octal decimals and legacy octal likes\n const underscorePos = integer.indexOf(\"_\");\n if (underscorePos > 0) {\n // Numeric literals can't have newlines, so this is safe to do.\n this.raise(Errors.ZeroDigitNumericSeparator, {\n at: createPositionWithColumnOffset(startLoc, underscorePos),\n });\n }\n }\n isOctal = hasLeadingZero && !/[89]/.test(integer);\n }\n\n let next = this.input.charCodeAt(this.state.pos);\n if (next === charCodes.dot && !isOctal) {\n ++this.state.pos;\n this.readInt(10);\n isFloat = true;\n next = this.input.charCodeAt(this.state.pos);\n }\n\n if (\n (next === charCodes.uppercaseE || next === charCodes.lowercaseE) &&\n !isOctal\n ) {\n next = this.input.charCodeAt(++this.state.pos);\n if (next === charCodes.plusSign || next === charCodes.dash) {\n ++this.state.pos;\n }\n if (this.readInt(10) === null) {\n this.raise(Errors.InvalidOrMissingExponent, { at: startLoc });\n }\n isFloat = true;\n hasExponent = true;\n next = this.input.charCodeAt(this.state.pos);\n }\n\n if (next === charCodes.lowercaseN) {\n // disallow floats, legacy octal syntax and non octal decimals\n // new style octal (\"0o\") is handled in this.readRadixNumber\n if (isFloat || hasLeadingZero) {\n this.raise(Errors.InvalidBigIntLiteral, { at: startLoc });\n }\n ++this.state.pos;\n isBigInt = true;\n }\n\n if (next === charCodes.lowercaseM) {\n this.expectPlugin(\"decimal\", this.state.curPosition());\n if (hasExponent || hasLeadingZero) {\n this.raise(Errors.InvalidDecimal, { at: startLoc });\n }\n ++this.state.pos;\n isDecimal = true;\n }\n\n if (isIdentifierStart(this.codePointAtPos(this.state.pos))) {\n throw this.raise(Errors.NumberIdentifier, {\n at: this.state.curPosition(),\n });\n }\n\n // remove \"_\" for numeric literal separator, and trailing `m` or `n`\n const str = this.input.slice(start, this.state.pos).replace(/[_mn]/g, \"\");\n\n if (isBigInt) {\n this.finishToken(tt.bigint, str);\n return;\n }\n\n if (isDecimal) {\n this.finishToken(tt.decimal, str);\n return;\n }\n\n const val = isOctal ? parseInt(str, 8) : parseFloat(str);\n this.finishToken(tt.num, val);\n }\n\n // Read a string value, interpreting backslash-escapes.\n\n readCodePoint(throwOnInvalid: boolean): number | null {\n const { code, pos } = readCodePoint(\n this.input,\n this.state.pos,\n this.state.lineStart,\n this.state.curLine,\n throwOnInvalid,\n this.errorHandlers_readCodePoint,\n );\n this.state.pos = pos;\n return code;\n }\n\n readString(quote: number): void {\n const { str, pos, curLine, lineStart } = readStringContents(\n quote === charCodes.quotationMark ? \"double\" : \"single\",\n this.input,\n this.state.pos + 1, // skip the quote\n this.state.lineStart,\n this.state.curLine,\n this.errorHandlers_readStringContents_string,\n );\n this.state.pos = pos + 1; // skip the quote\n this.state.lineStart = lineStart;\n this.state.curLine = curLine;\n this.finishToken(tt.string, str);\n }\n\n // Reads template continuation `}...`\n readTemplateContinuation(): void {\n if (!this.match(tt.braceR)) {\n this.unexpected(null, tt.braceR);\n }\n // rewind pos to `}`\n this.state.pos--;\n this.readTemplateToken();\n }\n\n // Reads template string tokens.\n readTemplateToken(): void {\n const opening = this.input[this.state.pos];\n const { str, firstInvalidLoc, pos, curLine, lineStart } =\n readStringContents(\n \"template\",\n this.input,\n this.state.pos + 1, // skip '`' or `}`\n this.state.lineStart,\n this.state.curLine,\n this.errorHandlers_readStringContents_template,\n );\n this.state.pos = pos + 1; // skip '`' or `$`\n this.state.lineStart = lineStart;\n this.state.curLine = curLine;\n\n if (firstInvalidLoc) {\n this.state.firstInvalidTemplateEscapePos = new Position(\n firstInvalidLoc.curLine,\n firstInvalidLoc.pos - firstInvalidLoc.lineStart,\n firstInvalidLoc.pos,\n );\n }\n\n if (this.input.codePointAt(pos) === charCodes.graveAccent) {\n this.finishToken(\n tt.templateTail,\n firstInvalidLoc ? null : opening + str + \"`\",\n );\n } else {\n this.state.pos++; // skip '{'\n this.finishToken(\n tt.templateNonTail,\n firstInvalidLoc ? null : opening + str + \"${\",\n );\n }\n }\n\n recordStrictModeErrors(\n toParseError: DeferredStrictError,\n { at }: { at: Position },\n ) {\n const index = at.index;\n\n if (this.state.strict && !this.state.strictErrors.has(index)) {\n this.raise(toParseError, { at });\n } else {\n this.state.strictErrors.set(index, [toParseError, at]);\n }\n }\n\n // Read an identifier, and return it as a string. Sets `this.state.containsEsc`\n // to whether the word contained a '\\u' escape.\n //\n // Incrementally adds only escaped chars, adding other chunks as-is\n // as a micro-optimization.\n //\n // When `firstCode` is given, it assumes it is always an identifier start and\n // will skip reading start position again\n\n readWord1(firstCode?: number): string {\n this.state.containsEsc = false;\n let word = \"\";\n const start = this.state.pos;\n let chunkStart = this.state.pos;\n if (firstCode !== undefined) {\n this.state.pos += firstCode <= 0xffff ? 1 : 2;\n }\n\n while (this.state.pos < this.length) {\n const ch = this.codePointAtPos(this.state.pos);\n if (isIdentifierChar(ch)) {\n this.state.pos += ch <= 0xffff ? 1 : 2;\n } else if (ch === charCodes.backslash) {\n this.state.containsEsc = true;\n\n word += this.input.slice(chunkStart, this.state.pos);\n const escStart = this.state.curPosition();\n const identifierCheck =\n this.state.pos === start ? isIdentifierStart : isIdentifierChar;\n\n if (this.input.charCodeAt(++this.state.pos) !== charCodes.lowercaseU) {\n this.raise(Errors.MissingUnicodeEscape, {\n at: this.state.curPosition(),\n });\n chunkStart = this.state.pos - 1;\n continue;\n }\n\n ++this.state.pos;\n const esc = this.readCodePoint(true);\n if (esc !== null) {\n if (!identifierCheck(esc)) {\n this.raise(Errors.EscapedCharNotAnIdentifier, { at: escStart });\n }\n\n word += String.fromCodePoint(esc);\n }\n chunkStart = this.state.pos;\n } else {\n break;\n }\n }\n return word + this.input.slice(chunkStart, this.state.pos);\n }\n\n // Read an identifier or keyword token. Will check for reserved\n // words when necessary.\n\n readWord(firstCode?: number): void {\n const word = this.readWord1(firstCode);\n const type = keywordTypes.get(word);\n if (type !== undefined) {\n // We don't use word as state.value here because word is a dynamic string\n // while token label is a shared constant string\n this.finishToken(type, tokenLabelName(type));\n } else {\n this.finishToken(tt.name, word);\n }\n }\n\n checkKeywordEscapes(): void {\n const { type } = this.state;\n if (tokenIsKeyword(type) && this.state.containsEsc) {\n this.raise(Errors.InvalidEscapedReservedWord, {\n at: this.state.startLoc,\n reservedWord: tokenLabelName(type),\n });\n }\n }\n\n /**\n * Raise a `ParseError` given the appropriate properties. If passed a\n * `Position` for the `at` property, raises the `ParseError` at that location.\n * Otherwise, if passed a `Node`, raises the `ParseError` at the start\n * location of that `Node`.\n *\n * If `errorRecovery` is `true`, the error is pushed to the errors array and\n * returned. If `errorRecovery` is `false`, the error is instead thrown.\n */\n raise<ErrorDetails>(\n toParseError: ParseErrorConstructor<ErrorDetails>,\n raiseProperties: RaiseProperties<ErrorDetails>,\n ): ParseError<ErrorDetails> {\n const { at, ...details } = raiseProperties;\n const loc = at instanceof Position ? at : at.loc.start;\n // @ts-expect-error: refine details typing\n const error = toParseError({ loc, details });\n\n if (!this.options.errorRecovery) throw error;\n if (!this.isLookahead) this.state.errors.push(error);\n\n return error;\n }\n\n /**\n * If `errorRecovery` is `false`, this method behaves identically to `raise`.\n * If `errorRecovery` is `true`, this method will first see if there is\n * already an error stored at the same `Position`, and replaces it with the\n * one generated here.\n */\n raiseOverwrite<ErrorDetails>(\n toParseError: ParseErrorConstructor<ErrorDetails>,\n raiseProperties: RaiseProperties<ErrorDetails>,\n ): ParseError<ErrorDetails> | never {\n const { at, ...details } = raiseProperties;\n const loc = at instanceof Position ? at : at.loc.start;\n const pos = loc.index;\n const errors = this.state.errors;\n\n for (let i = errors.length - 1; i >= 0; i--) {\n const error = errors[i];\n if (error.loc.index === pos) {\n // @ts-expect-error: refine details typing\n return (errors[i] = toParseError({ loc, details }));\n }\n if (error.loc.index < pos) break;\n }\n\n return this.raise(toParseError, raiseProperties);\n }\n\n // updateContext is used by the jsx plugin\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n updateContext(prevType: TokenType): void {}\n\n // Raise an unexpected token error. Can take the expected token type.\n unexpected(loc?: Position | null, type?: TokenType): void {\n throw this.raise(Errors.UnexpectedToken, {\n expected: type ? tokenLabelName(type) : null,\n at: loc != null ? loc : this.state.startLoc,\n });\n }\n\n expectPlugin(pluginName: Plugin, loc?: Position): true {\n if (this.hasPlugin(pluginName)) {\n return true;\n }\n\n throw this.raise(Errors.MissingPlugin, {\n at: loc != null ? loc : this.state.startLoc,\n missingPlugin: [pluginName],\n });\n }\n\n expectOnePlugin(pluginNames: Plugin[]): void {\n if (!pluginNames.some(name => this.hasPlugin(name))) {\n throw this.raise(Errors.MissingOneOfPlugins, {\n at: this.state.startLoc,\n missingPlugin: pluginNames,\n });\n }\n }\n\n errorBuilder(error: ParseErrorConstructor<{}>) {\n return (pos: number, lineStart: number, curLine: number) => {\n this.raise(error, {\n at: buildPosition(pos, lineStart, curLine),\n });\n };\n }\n\n errorHandlers_readInt: IntErrorHandlers = {\n invalidDigit: (pos, lineStart, curLine, radix) => {\n if (!this.options.errorRecovery) return false;\n\n this.raise(Errors.InvalidDigit, {\n at: buildPosition(pos, lineStart, curLine),\n radix,\n });\n // Continue parsing the number as if there was no invalid digit.\n return true;\n },\n numericSeparatorInEscapeSequence: this.errorBuilder(\n Errors.NumericSeparatorInEscapeSequence,\n ),\n unexpectedNumericSeparator: this.errorBuilder(\n Errors.UnexpectedNumericSeparator,\n ),\n };\n\n errorHandlers_readCodePoint: CodePointErrorHandlers = {\n ...this.errorHandlers_readInt,\n invalidEscapeSequence: this.errorBuilder(Errors.InvalidEscapeSequence),\n invalidCodePoint: this.errorBuilder(Errors.InvalidCodePoint),\n };\n\n errorHandlers_readStringContents_string: StringContentsErrorHandlers = {\n ...this.errorHandlers_readCodePoint,\n strictNumericEscape: (pos, lineStart, curLine) => {\n this.recordStrictModeErrors(Errors.StrictNumericEscape, {\n at: buildPosition(pos, lineStart, curLine),\n });\n },\n unterminated: (pos, lineStart, curLine) => {\n throw this.raise(Errors.UnterminatedString, {\n // Report the error at the string quote\n at: buildPosition(pos - 1, lineStart, curLine),\n });\n },\n };\n\n errorHandlers_readStringContents_template: StringContentsErrorHandlers = {\n ...this.errorHandlers_readCodePoint,\n strictNumericEscape: this.errorBuilder(Errors.StrictNumericEscape),\n unterminated: (pos, lineStart, curLine) => {\n throw this.raise(Errors.UnterminatedTemplate, {\n at: buildPosition(pos, lineStart, curLine),\n });\n },\n };\n}\n","import { ClassElementType } from \"./scopeflags.ts\";\nimport type { Position } from \"./location.ts\";\nimport { Errors } from \"../parse-error.ts\";\nimport type Tokenizer from \"../tokenizer/index.ts\";\n\nexport class ClassScope {\n // A list of private named declared in the current class\n privateNames: Set<string> = new Set();\n\n // A list of private getters of setters without their counterpart\n loneAccessors: Map<string, ClassElementType> = new Map();\n\n // A list of private names used before being defined, mapping to\n // their position.\n undefinedPrivateNames: Map<string, Position> = new Map();\n}\n\nexport default class ClassScopeHandler {\n parser: Tokenizer;\n stack: Array<ClassScope> = [];\n undefinedPrivateNames: Map<string, Position> = new Map();\n\n constructor(parser: Tokenizer) {\n this.parser = parser;\n }\n\n current(): ClassScope {\n return this.stack[this.stack.length - 1];\n }\n\n enter() {\n this.stack.push(new ClassScope());\n }\n\n exit() {\n const oldClassScope = this.stack.pop();\n\n // Migrate the usage of not yet defined private names to the outer\n // class scope, or raise an error if we reached the top-level scope.\n\n const current = this.current();\n\n // Array.from is needed because this is compiled to an array-like for loop\n for (const [name, loc] of Array.from(oldClassScope.undefinedPrivateNames)) {\n if (current) {\n if (!current.undefinedPrivateNames.has(name)) {\n current.undefinedPrivateNames.set(name, loc);\n }\n } else {\n this.parser.raise(Errors.InvalidPrivateFieldResolution, {\n at: loc,\n identifierName: name,\n });\n }\n }\n }\n\n declarePrivateName(\n name: string,\n elementType: ClassElementType,\n loc: Position,\n ) {\n const { privateNames, loneAccessors, undefinedPrivateNames } =\n this.current();\n let redefined = privateNames.has(name);\n\n if (elementType & ClassElementType.KIND_ACCESSOR) {\n const accessor = redefined && loneAccessors.get(name);\n if (accessor) {\n const oldStatic = accessor & ClassElementType.FLAG_STATIC;\n const newStatic = elementType & ClassElementType.FLAG_STATIC;\n\n const oldKind = accessor & ClassElementType.KIND_ACCESSOR;\n const newKind = elementType & ClassElementType.KIND_ACCESSOR;\n\n // The private name can be duplicated only if it is used by\n // two accessors with different kind (get and set), and if\n // they have the same placement (static or not).\n redefined = oldKind === newKind || oldStatic !== newStatic;\n\n if (!redefined) loneAccessors.delete(name);\n } else if (!redefined) {\n loneAccessors.set(name, elementType);\n }\n }\n\n if (redefined) {\n this.parser.raise(Errors.PrivateNameRedeclaration, {\n at: loc,\n identifierName: name,\n });\n }\n\n privateNames.add(name);\n undefinedPrivateNames.delete(name);\n }\n\n usePrivateName(name: string, loc: Position) {\n let classScope;\n for (classScope of this.stack) {\n if (classScope.privateNames.has(name)) return;\n }\n\n if (classScope) {\n classScope.undefinedPrivateNames.set(name, loc);\n } else {\n // top-level\n this.parser.raise(Errors.InvalidPrivateFieldResolution, {\n at: loc,\n identifierName: name,\n });\n }\n }\n}\n","import { Errors, type ParseErrorConstructor } from \"../parse-error.ts\";\nimport type { Position } from \"./location.ts\";\nimport type { Node } from \"../types.ts\";\nimport type Tokenizer from \"../tokenizer/index.ts\";\n\n/**\n * @module util/expression-scope\n\nExpressionScope is used to track declaration errors in these ambiguous patterns:\n\n- CoverParenthesizedExpressionAndArrowParameterList\n e.g. we don't know if `({ x })` is an parenthesized expression or an\n arrow function parameters until we see an `=>` after `)`.\n\n- CoverCallExpressionAndAsyncArrowHead\n e.g. we don't know if `async({ x })` is a call expression or an async arrow\n function parameters until we see an `=>` after `)`\n\nThe following declaration errors (@see parser-errors/standard) will be recorded in\nsome expression scopes and thrown later when we know what the ambiguous pattern is\n\n- AwaitBindingIdentifier\n- AwaitExpressionFormalParameter\n- YieldInParameter\n- InvalidParenthesizedAssignment when parenthesized is an identifier\n\nThere are four different expression scope\n- Expression\n A general scope that represents program / function body / static block. No errors\n will be recorded nor thrown in this scope.\n\n- MaybeArrowParameterDeclaration\n A scope that represents ambiguous arrow head e.g. `(x)`. Errors will be recorded\n alongside parent scopes and thrown when `ExpressionScopeHandler#validateAsPattern`\n is called.\n\n- MaybeAsyncArrowParameterDeclaration\n A scope that represents ambiguous async arrow head e.g. `async(x)`. Errors will\n be recorded alongside parent scopes and thrown when\n `ExpressionScopeHandler#validateAsPattern` is called.\n\n- ParameterDeclaration\n A scope that represents unambiguous function parameters `function(x)`. Errors\n recorded in this scope will be thrown immediately. No errors will be recorded in\n this scope.\n\n// @see {@link https://docs.google.com/document/d/1FAvEp9EUK-G8kHfDIEo_385Hs2SUBCYbJ5H-NnLvq8M|V8 Expression Scope design docs}\n */\n\nconst enum ExpressionScopeType {\n kExpression = 0,\n kMaybeArrowParameterDeclaration = 1,\n kMaybeAsyncArrowParameterDeclaration = 2,\n kParameterDeclaration = 3,\n}\n\nclass ExpressionScope {\n declare type: ExpressionScopeType;\n\n constructor(type: ExpressionScopeType = ExpressionScopeType.kExpression) {\n this.type = type;\n }\n\n canBeArrowParameterDeclaration(): this is ArrowHeadParsingScope {\n return (\n this.type === ExpressionScopeType.kMaybeAsyncArrowParameterDeclaration ||\n this.type === ExpressionScopeType.kMaybeArrowParameterDeclaration\n );\n }\n\n isCertainlyParameterDeclaration() {\n return this.type === ExpressionScopeType.kParameterDeclaration;\n }\n}\n\ntype ArrowHeadParsingParameterInitializerError =\n | typeof Errors.AwaitExpressionFormalParameter\n | typeof Errors.YieldInParameter;\ntype ArrowHeadParsingDeclarationError =\n | ArrowHeadParsingParameterInitializerError\n | typeof Errors.InvalidParenthesizedAssignment\n | typeof Errors.AwaitBindingIdentifier;\n\nclass ArrowHeadParsingScope extends ExpressionScope {\n declarationErrors: Map<number, [ParseErrorConstructor<{}>, Position]> =\n new Map();\n constructor(\n type:\n | ExpressionScopeType.kMaybeArrowParameterDeclaration\n | ExpressionScopeType.kMaybeAsyncArrowParameterDeclaration,\n ) {\n super(type);\n }\n recordDeclarationError(\n ParsingErrorClass: ParseErrorConstructor<{}>,\n {\n at,\n }: {\n at: Position;\n },\n ) {\n const index = at.index;\n\n this.declarationErrors.set(index, [ParsingErrorClass, at]);\n }\n clearDeclarationError(index: number) {\n this.declarationErrors.delete(index);\n }\n iterateErrors(\n iterator: (a: [ArrowHeadParsingDeclarationError, Position]) => void,\n ) {\n this.declarationErrors.forEach(iterator);\n }\n}\n\nexport default class ExpressionScopeHandler {\n parser: Tokenizer;\n stack: Array<ExpressionScope> = [new ExpressionScope()];\n\n constructor(parser: Tokenizer) {\n this.parser = parser;\n }\n enter(scope: ExpressionScope) {\n this.stack.push(scope);\n }\n\n exit() {\n this.stack.pop();\n }\n\n /**\n * Record likely parameter initializer errors\n *\n * When current scope is a ParameterDeclaration, the error will be thrown immediately,\n * otherwise it will be recorded to any ancestry MaybeArrowParameterDeclaration and\n * MaybeAsyncArrowParameterDeclaration scope until an Expression scope is seen.\n */\n recordParameterInitializerError(\n toParseError: ArrowHeadParsingParameterInitializerError,\n {\n at: node,\n }: {\n at: Node;\n },\n ): void {\n const origin = { at: node.loc.start };\n const { stack } = this;\n let i = stack.length - 1;\n let scope: ExpressionScope = stack[i];\n while (!scope.isCertainlyParameterDeclaration()) {\n if (scope.canBeArrowParameterDeclaration()) {\n scope.recordDeclarationError(toParseError, origin);\n } else {\n /*:: invariant(scope.type == ExpressionScopeType.kExpression) */\n // Type-Expression is the boundary where initializer error can populate to\n return;\n }\n scope = stack[--i];\n }\n this.parser.raise(toParseError, origin);\n }\n\n /**\n * Record errors that must be thrown if the current pattern ends up being an arrow\n * function parameter. This is used to record parenthesized identifiers, and to record\n * \"a as T\" and \"<T> a\" type assertions when parsing typescript.\n *\n * A parenthesized identifier (or type assertion) in LHS can be ambiguous because the assignment\n * can be transformed to an assignable later, but not vice versa:\n * For example, in `([(a) = []] = []) => {}`, we think `(a) = []` is an LHS in `[(a) = []]`,\n * an LHS within `[(a) = []] = []`. However the LHS chain is then transformed by toAssignable,\n * and we should throw assignment `(a)`, which is only valid in LHS. Hence we record the\n * location of parenthesized `(a)` to current scope if it is one of MaybeArrowParameterDeclaration\n * and MaybeAsyncArrowParameterDeclaration\n *\n * Unlike `recordParameterInitializerError`, we don't record to ancestry scope because we\n * validate arrow head parsing scope before exit, and then the LHS will be unambiguous:\n * For example, in `( x = ( [(a) = []] = [] ) ) => {}`, we should not record `(a)` in `( x = ... ) =>`\n * arrow scope because when we finish parsing `( [(a) = []] = [] )`, it is an unambiguous assignment\n * expression and can not be cast to pattern\n */\n recordArrowParameterBindingError(\n error: ParseErrorConstructor<{}>,\n {\n at: node,\n }: {\n at: Node;\n },\n ): void {\n const { stack } = this;\n const scope: ExpressionScope = stack[stack.length - 1];\n const origin = { at: node.loc.start };\n if (scope.isCertainlyParameterDeclaration()) {\n this.parser.raise(error, origin);\n } else if (scope.canBeArrowParameterDeclaration()) {\n scope.recordDeclarationError(error, origin);\n } else {\n return;\n }\n }\n\n /**\n * Record likely async arrow parameter errors\n *\n * Errors will be recorded to any ancestry MaybeAsyncArrowParameterDeclaration\n * scope until an Expression scope is seen.\n */\n recordAsyncArrowParametersError({ at }: { at: Position }): void {\n const { stack } = this;\n let i = stack.length - 1;\n let scope: ExpressionScope = stack[i];\n while (scope.canBeArrowParameterDeclaration()) {\n if (\n scope.type === ExpressionScopeType.kMaybeAsyncArrowParameterDeclaration\n ) {\n scope.recordDeclarationError(Errors.AwaitBindingIdentifier, { at });\n }\n scope = stack[--i];\n }\n }\n\n validateAsPattern(): void {\n const { stack } = this;\n const currentScope = stack[stack.length - 1];\n if (!currentScope.canBeArrowParameterDeclaration()) return;\n currentScope.iterateErrors(([toParseError, loc]) => {\n this.parser.raise(toParseError, { at: loc });\n // iterate from parent scope\n let i = stack.length - 2;\n let scope = stack[i];\n while (scope.canBeArrowParameterDeclaration()) {\n scope.clearDeclarationError(loc.index);\n scope = stack[--i];\n }\n });\n }\n}\n\nexport function newParameterDeclarationScope() {\n return new ExpressionScope(ExpressionScopeType.kParameterDeclaration);\n}\n\nexport function newArrowHeadScope() {\n return new ArrowHeadParsingScope(\n ExpressionScopeType.kMaybeArrowParameterDeclaration,\n );\n}\n\nexport function newAsyncArrowScope() {\n return new ArrowHeadParsingScope(\n ExpressionScopeType.kMaybeAsyncArrowParameterDeclaration,\n );\n}\n\nexport function newExpressionScope() {\n return new ExpressionScope();\n}\n","export const // Initial Parameter flags\n PARAM = 0b0000,\n // track [Yield] production parameter\n PARAM_YIELD = 0b0001,\n // track [Await] production parameter\n PARAM_AWAIT = 0b0010,\n // track [Return] production parameter\n PARAM_RETURN = 0b0100,\n PARAM_IN = 0b1000; // track [In] production parameter\n\n// ProductionParameterHandler is a stack fashioned production parameter tracker\n// https://tc39.es/ecma262/#sec-grammar-notation\n// The tracked parameters are defined above.\n//\n// Whenever [+Await]/[+Yield] appears in the right-hand sides of a production,\n// we must enter a new tracking stack. For example when parsing\n//\n// AsyncFunctionDeclaration [Yield, Await]:\n// async [no LineTerminator here] function BindingIdentifier[?Yield, ?Await]\n// ( FormalParameters[~Yield, +Await] ) { AsyncFunctionBody }\n//\n// we must follow such process:\n//\n// 1. parse async keyword\n// 2. parse function keyword\n// 3. parse bindingIdentifier <= inherit current parameters: [?Await]\n// 4. enter new stack with (PARAM_AWAIT)\n// 5. parse formal parameters <= must have [Await] parameter [+Await]\n// 6. parse function body\n// 7. exit current stack\n\nexport type ParamKind = number;\n\n// todo(flow->ts) - check if more granular type can be used,\n// type below is not good because things like PARAM_AWAIT|PARAM_YIELD are not included\n// export type ParamKind =\n// | typeof PARAM\n// | typeof PARAM_AWAIT\n// | typeof PARAM_IN\n// | typeof PARAM_RETURN\n// | typeof PARAM_YIELD;\n\nexport default class ProductionParameterHandler {\n stacks: Array<number> = [];\n enter(flags: number) {\n this.stacks.push(flags);\n }\n\n exit() {\n this.stacks.pop();\n }\n\n currentFlags(): number {\n return this.stacks[this.stacks.length - 1];\n }\n\n get hasAwait(): boolean {\n return (this.currentFlags() & PARAM_AWAIT) > 0;\n }\n\n get hasYield(): boolean {\n return (this.currentFlags() & PARAM_YIELD) > 0;\n }\n\n get hasReturn(): boolean {\n return (this.currentFlags() & PARAM_RETURN) > 0;\n }\n\n get hasIn(): boolean {\n return (this.currentFlags() & PARAM_IN) > 0;\n }\n}\n\nexport function functionFlags(\n isAsync: boolean,\n isGenerator: boolean,\n): ParamKind {\n return (isAsync ? PARAM_AWAIT : 0) | (isGenerator ? PARAM_YIELD : 0);\n}\n","import type { Position } from \"../util/location.ts\";\nimport {\n tokenIsLiteralPropertyName,\n tt,\n type TokenType,\n} from \"../tokenizer/types.ts\";\nimport Tokenizer from \"../tokenizer/index.ts\";\nimport type State from \"../tokenizer/state.ts\";\nimport type {\n EstreePropertyDefinition,\n Node,\n ObjectProperty,\n} from \"../types.ts\";\nimport { lineBreak, skipWhiteSpaceToLineBreak } from \"../util/whitespace.ts\";\nimport { isIdentifierChar } from \"../util/identifier.ts\";\nimport ClassScopeHandler from \"../util/class-scope.ts\";\nimport ExpressionScopeHandler from \"../util/expression-scope.ts\";\nimport { ScopeFlag } from \"../util/scopeflags.ts\";\nimport ProductionParameterHandler, {\n PARAM_AWAIT,\n PARAM,\n} from \"../util/production-parameter.ts\";\nimport {\n Errors,\n type ParseError,\n type ParseErrorConstructor,\n} from \"../parse-error.ts\";\nimport type Parser from \"./index.ts\";\n\nimport type ScopeHandler from \"../util/scope.ts\";\n\ntype TryParse<Node, Error, Thrown, Aborted, FailState> = {\n node: Node;\n error: Error;\n thrown: Thrown;\n aborted: Aborted;\n failState: FailState;\n};\n\n// ## Parser utilities\n\nexport default abstract class UtilParser extends Tokenizer {\n // Forward-declaration: defined in parser/index.js\n abstract getScopeHandler(): { new (...args: any): ScopeHandler };\n\n addExtra(\n node: Partial<Node>,\n key: string,\n value: any,\n enumerable: boolean = true,\n ): void {\n if (!node) return;\n\n const extra = (node.extra = node.extra || {});\n if (enumerable) {\n extra[key] = value;\n } else {\n Object.defineProperty(extra, key, { enumerable, value });\n }\n }\n\n // Tests whether parsed token is a contextual keyword.\n\n isContextual(token: TokenType): boolean {\n return this.state.type === token && !this.state.containsEsc;\n }\n\n isUnparsedContextual(nameStart: number, name: string): boolean {\n const nameEnd = nameStart + name.length;\n if (this.input.slice(nameStart, nameEnd) === name) {\n const nextCh = this.input.charCodeAt(nameEnd);\n return !(\n isIdentifierChar(nextCh) ||\n // check if `nextCh is between 0xd800 - 0xdbff,\n // if `nextCh` is NaN, `NaN & 0xfc00` is 0, the function\n // returns true\n (nextCh & 0xfc00) === 0xd800\n );\n }\n return false;\n }\n\n isLookaheadContextual(name: string): boolean {\n const next = this.nextTokenStart();\n return this.isUnparsedContextual(next, name);\n }\n\n // Consumes contextual keyword if possible.\n\n eatContextual(token: TokenType): boolean {\n if (this.isContextual(token)) {\n this.next();\n return true;\n }\n return false;\n }\n\n // Asserts that following token is given contextual keyword.\n\n expectContextual(\n token: TokenType,\n toParseError?: ParseErrorConstructor<any>,\n ): void {\n if (!this.eatContextual(token)) {\n if (toParseError != null) {\n throw this.raise(toParseError, { at: this.state.startLoc });\n }\n this.unexpected(null, token);\n }\n }\n\n // Test whether a semicolon can be inserted at the current position.\n\n canInsertSemicolon(): boolean {\n return (\n this.match(tt.eof) ||\n this.match(tt.braceR) ||\n this.hasPrecedingLineBreak()\n );\n }\n\n hasPrecedingLineBreak(): boolean {\n return lineBreak.test(\n this.input.slice(this.state.lastTokEndLoc.index, this.state.start),\n );\n }\n\n hasFollowingLineBreak(): boolean {\n skipWhiteSpaceToLineBreak.lastIndex = this.state.end;\n return skipWhiteSpaceToLineBreak.test(this.input);\n }\n\n isLineTerminator(): boolean {\n return this.eat(tt.semi) || this.canInsertSemicolon();\n }\n\n // Consume a semicolon, or, failing that, see if we are allowed to\n // pretend that there is a semicolon at this position.\n\n semicolon(allowAsi: boolean = true): void {\n if (allowAsi ? this.isLineTerminator() : this.eat(tt.semi)) return;\n this.raise(Errors.MissingSemicolon, { at: this.state.lastTokEndLoc });\n }\n\n // Expect a token of a given type. If found, consume it, otherwise,\n // raise an unexpected token error at given pos.\n\n expect(type: TokenType, loc?: Position | null): void {\n this.eat(type) || this.unexpected(loc, type);\n }\n\n // tryParse will clone parser state.\n // It is expensive and should be used with cautions\n tryParse<T extends Node | ReadonlyArray<Node>>(\n fn: (abort: (node?: T) => never) => T,\n oldState: State = this.state.clone(),\n ):\n | TryParse<T, null, false, false, null>\n | TryParse<T | null, ParseError<any>, boolean, false, State>\n | TryParse<T | null, null, false, true, State> {\n const abortSignal: {\n node: T | null;\n } = { node: null };\n try {\n const node = fn((node = null) => {\n abortSignal.node = node;\n throw abortSignal;\n });\n if (this.state.errors.length > oldState.errors.length) {\n const failState = this.state;\n this.state = oldState;\n // tokensLength should be preserved during error recovery mode\n // since the parser does not halt and will instead parse the\n // remaining tokens\n this.state.tokensLength = failState.tokensLength;\n return {\n node,\n error: failState.errors[oldState.errors.length],\n thrown: false,\n aborted: false,\n failState,\n };\n }\n\n return {\n node,\n error: null,\n thrown: false,\n aborted: false,\n failState: null,\n };\n } catch (error) {\n const failState = this.state;\n this.state = oldState;\n if (error instanceof SyntaxError) {\n // @ts-expect-error casting general syntax error to parse error\n return { node: null, error, thrown: true, aborted: false, failState };\n }\n if (error === abortSignal) {\n return {\n node: abortSignal.node,\n error: null,\n thrown: false,\n aborted: true,\n failState,\n };\n }\n\n throw error;\n }\n }\n\n checkExpressionErrors(\n refExpressionErrors: ExpressionErrors | undefined | null,\n andThrow: boolean,\n ) {\n if (!refExpressionErrors) return false;\n const {\n shorthandAssignLoc,\n doubleProtoLoc,\n privateKeyLoc,\n optionalParametersLoc,\n } = refExpressionErrors;\n\n const hasErrors =\n !!shorthandAssignLoc ||\n !!doubleProtoLoc ||\n !!optionalParametersLoc ||\n !!privateKeyLoc;\n\n if (!andThrow) {\n return hasErrors;\n }\n\n if (shorthandAssignLoc != null) {\n this.raise(Errors.InvalidCoverInitializedName, {\n at: shorthandAssignLoc,\n });\n }\n\n if (doubleProtoLoc != null) {\n this.raise(Errors.DuplicateProto, { at: doubleProtoLoc });\n }\n\n if (privateKeyLoc != null) {\n this.raise(Errors.UnexpectedPrivateField, { at: privateKeyLoc });\n }\n\n if (optionalParametersLoc != null) {\n this.unexpected(optionalParametersLoc);\n }\n }\n\n /**\n * Test if current token is a literal property name\n * https://tc39.es/ecma262/#prod-LiteralPropertyName\n * LiteralPropertyName:\n * IdentifierName\n * StringLiteral\n * NumericLiteral\n * BigIntLiteral\n */\n isLiteralPropertyName(): boolean {\n return tokenIsLiteralPropertyName(this.state.type);\n }\n\n /**\n * Test if given node is a PrivateName\n * will be overridden in ESTree plugin\n */\n isPrivateName(node: Node): boolean {\n return node.type === \"PrivateName\";\n }\n\n /**\n * Return the string value of a given private name\n * WITHOUT `#`\n * @see {@link https://tc39.es/ecma262/#sec-static-semantics-stringvalue}\n */\n getPrivateNameSV(node: Node): string {\n return node.id.name;\n }\n\n /**\n * Return whether the given node is a member/optional chain that\n * contains a private name as its property\n * It is overridden in ESTree plugin\n */\n hasPropertyAsPrivateName(node: Node): boolean {\n return (\n (node.type === \"MemberExpression\" ||\n node.type === \"OptionalMemberExpression\") &&\n this.isPrivateName(node.property)\n );\n }\n\n isObjectProperty(\n node: Node,\n ): node is ObjectProperty | EstreePropertyDefinition {\n return node.type === \"ObjectProperty\";\n }\n\n isObjectMethod(node: Node): boolean {\n return node.type === \"ObjectMethod\";\n }\n\n initializeScopes(\n this: Parser,\n inModule: boolean = this.options.sourceType === \"module\",\n ): () => void {\n // Initialize state\n const oldLabels = this.state.labels;\n this.state.labels = [];\n\n const oldExportedIdentifiers = this.exportedIdentifiers;\n this.exportedIdentifiers = new Set();\n\n // initialize scopes\n const oldInModule = this.inModule;\n this.inModule = inModule;\n\n const oldScope = this.scope;\n const ScopeHandler = this.getScopeHandler();\n this.scope = new ScopeHandler(this, inModule);\n\n const oldProdParam = this.prodParam;\n this.prodParam = new ProductionParameterHandler();\n\n const oldClassScope = this.classScope;\n this.classScope = new ClassScopeHandler(this);\n\n const oldExpressionScope = this.expressionScope;\n this.expressionScope = new ExpressionScopeHandler(this);\n\n return () => {\n // Revert state\n this.state.labels = oldLabels;\n this.exportedIdentifiers = oldExportedIdentifiers;\n\n // Revert scopes\n this.inModule = oldInModule;\n this.scope = oldScope;\n this.prodParam = oldProdParam;\n this.classScope = oldClassScope;\n this.expressionScope = oldExpressionScope;\n };\n }\n\n enterInitialScopes() {\n let paramFlags = PARAM;\n if (this.inModule) {\n paramFlags |= PARAM_AWAIT;\n }\n this.scope.enter(ScopeFlag.PROGRAM);\n this.prodParam.enter(paramFlags);\n }\n\n checkDestructuringPrivate(refExpressionErrors: ExpressionErrors) {\n const { privateKeyLoc } = refExpressionErrors;\n if (privateKeyLoc !== null) {\n this.expectPlugin(\"destructuringPrivate\", privateKeyLoc);\n }\n }\n}\n\n/**\n * The ExpressionErrors is a context struct used to track ambiguous patterns\n * When we are sure the parsed pattern is a RHS, which means it is not a pattern,\n * we will throw on this position on invalid assign syntax, otherwise it will be reset to -1\n *\n * Types of ExpressionErrors:\n *\n * - **shorthandAssignLoc**: track initializer `=` position\n * - **doubleProtoLoc**: track the duplicate `__proto__` key position\n * - **privateKey**: track private key `#p` position\n * - **optionalParametersLoc**: track the optional parameter (`?`).\n * It's only used by typescript and flow plugins\n */\nexport class ExpressionErrors {\n shorthandAssignLoc: Position | undefined | null = null;\n doubleProtoLoc: Position | undefined | null = null;\n privateKeyLoc: Position | undefined | null = null;\n optionalParametersLoc: Position | undefined | null = null;\n}\n","import type Parser from \"./index.ts\";\nimport UtilParser from \"./util.ts\";\nimport { SourceLocation, type Position } from \"../util/location.ts\";\nimport type { Comment, Node as NodeType, NodeBase } from \"../types.ts\";\n\n// Start an AST node, attaching a start offset.\n\nclass Node implements NodeBase {\n constructor(parser: Parser, pos: number, loc: Position) {\n this.start = pos;\n this.end = 0;\n this.loc = new SourceLocation(loc);\n if (parser?.options.ranges) this.range = [pos, 0];\n if (parser?.filename) this.loc.filename = parser.filename;\n }\n\n type: string = \"\";\n declare start: number;\n declare end: number;\n declare loc: SourceLocation;\n declare range: [number, number];\n declare leadingComments: Array<Comment>;\n declare trailingComments: Array<Comment>;\n declare innerComments: Array<Comment>;\n declare extra: {\n [key: string]: any;\n };\n}\nconst NodePrototype = Node.prototype;\n\nif (!process.env.BABEL_8_BREAKING) {\n // @ts-expect-error __clone is not defined in Node prototype\n NodePrototype.__clone = function (): Node {\n const newNode = new Node(undefined, this.start, this.loc.start);\n const keys = Object.keys(this) as (keyof Node)[];\n for (let i = 0, length = keys.length; i < length; i++) {\n const key = keys[i];\n // Do not clone comments that are already attached to the node\n if (\n key !== \"leadingComments\" &&\n key !== \"trailingComments\" &&\n key !== \"innerComments\"\n ) {\n // @ts-expect-error cloning this to newNode\n newNode[key] = this[key];\n }\n }\n\n return newNode;\n };\n}\n\nfunction clonePlaceholder(node: any): any {\n return cloneIdentifier(node);\n}\n\nexport function cloneIdentifier(node: any): any {\n // We don't need to clone `typeAnnotations` and `optional`: because\n // cloneIdentifier is only used in object shorthand and named import/export.\n // Neither of them allow type annotations after the identifier or optional identifier\n const { type, start, end, loc, range, extra, name } = node;\n const cloned = Object.create(NodePrototype);\n cloned.type = type;\n cloned.start = start;\n cloned.end = end;\n cloned.loc = loc;\n cloned.range = range;\n cloned.extra = extra;\n cloned.name = name;\n if (type === \"Placeholder\") {\n cloned.expectedNode = node.expectedNode;\n }\n return cloned;\n}\n\nexport function cloneStringLiteral(node: any): any {\n const { type, start, end, loc, range, extra } = node;\n if (type === \"Placeholder\") {\n return clonePlaceholder(node);\n }\n const cloned = Object.create(NodePrototype);\n cloned.type = type;\n cloned.start = start;\n cloned.end = end;\n cloned.loc = loc;\n cloned.range = range;\n if (node.raw !== undefined) {\n // estree set node.raw instead of node.extra\n cloned.raw = node.raw;\n } else {\n cloned.extra = extra;\n }\n cloned.value = node.value;\n return cloned;\n}\n\nexport type Undone<T extends NodeType> = Omit<T, \"type\">;\n\nexport abstract class NodeUtils extends UtilParser {\n startNode<T extends NodeType>(): Undone<T> {\n // @ts-expect-error cast Node as Undone<T>\n return new Node(this, this.state.start, this.state.startLoc);\n }\n\n startNodeAt<T extends NodeType>(loc: Position): Undone<T> {\n // @ts-expect-error cast Node as Undone<T>\n return new Node(this, loc.index, loc);\n }\n\n /** Start a new node with a previous node's location. */\n startNodeAtNode<T extends NodeType>(type: Undone<NodeType>): Undone<T> {\n return this.startNodeAt(type.loc.start);\n }\n\n // Finish an AST node, adding `type` and `end` properties.\n\n finishNode<T extends NodeType>(node: Undone<T>, type: T[\"type\"]): T {\n return this.finishNodeAt(node, type, this.state.lastTokEndLoc);\n }\n\n // Finish node at given position\n\n finishNodeAt<T extends NodeType>(\n node: Omit<T, \"type\">,\n type: T[\"type\"],\n endLoc: Position,\n ): T {\n if (process.env.NODE_ENV !== \"production\" && node.end > 0) {\n throw new Error(\n \"Do not call finishNode*() twice on the same node.\" +\n \" Instead use resetEndLocation() or change type directly.\",\n );\n }\n // @ts-expect-error migrate to Babel types AST typings\n node.type = type;\n // @ts-expect-error migrate to Babel types AST typings\n node.end = endLoc.index;\n node.loc.end = endLoc;\n if (this.options.ranges) node.range[1] = endLoc.index;\n if (this.options.attachComment) this.processComment(node as T);\n return node as T;\n }\n\n resetStartLocation(node: NodeBase, startLoc: Position): void {\n node.start = startLoc.index;\n node.loc.start = startLoc;\n if (this.options.ranges) node.range[0] = startLoc.index;\n }\n\n resetEndLocation(\n node: NodeBase,\n endLoc: Position = this.state.lastTokEndLoc,\n ): void {\n node.end = endLoc.index;\n node.loc.end = endLoc;\n if (this.options.ranges) node.range[1] = endLoc.index;\n }\n\n /**\n * Reset the start location of node to the start location of locationNode\n */\n resetStartLocationFromNode(node: NodeBase, locationNode: NodeBase): void {\n this.resetStartLocation(node, locationNode.loc.start);\n }\n}\n","/*:: declare var invariant; */\n\nimport type Parser from \"../../parser/index.ts\";\nimport {\n tokenIsIdentifier,\n tokenIsKeyword,\n tokenIsKeywordOrIdentifier,\n tokenIsLiteralPropertyName,\n tokenLabelName,\n tt,\n type TokenType,\n tokenIsFlowInterfaceOrTypeOrOpaque,\n} from \"../../tokenizer/types.ts\";\nimport type * as N from \"../../types.ts\";\nimport type { Position } from \"../../util/location.ts\";\nimport { types as tc } from \"../../tokenizer/context.ts\";\nimport * as charCodes from \"charcodes\";\nimport { isIteratorStart } from \"../../util/identifier.ts\";\nimport FlowScopeHandler from \"./scope.ts\";\nimport {\n BindingFlag,\n ScopeFlag,\n type BindingTypes,\n} from \"../../util/scopeflags.ts\";\nimport type { ExpressionErrors } from \"../../parser/util.ts\";\nimport type { ParseStatementFlag } from \"../../parser/statement.ts\";\nimport { Errors, ParseErrorEnum } from \"../../parse-error.ts\";\nimport { cloneIdentifier, type Undone } from \"../../parser/node.ts\";\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 EnumStringMemberInconsistentlyInitialized: ({\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 `<T> async () => {}`, use `async <T>() => {}`.\",\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<T>(\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.FlowDeclareClass>,\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.FlowDeclareFunction>,\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.TypeAnnotation>();\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 BindingFlag.TYPE_FLOW_DECLARE_FN,\n node.id.loc.start,\n );\n\n return this.finishNode(node, \"DeclareFunction\");\n }\n\n flowParseDeclare(\n node: Undone<N.FlowDeclare>,\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.FlowDeclareVariable>,\n ): N.FlowDeclareVariable {\n this.next();\n node.id = this.flowParseTypeAnnotatableIdentifier(\n /*allowPrimitiveOverride*/ true,\n );\n this.scope.declareName(\n node.id.name,\n BindingFlag.TYPE_VAR,\n node.id.loc.start,\n );\n this.semicolon();\n return this.finishNode(node, \"DeclareVariable\");\n }\n\n flowParseDeclareModule(\n node: Undone<N.FlowDeclareModule>,\n ): N.FlowDeclareModule {\n this.scope.enter(ScopeFlag.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.ImportDeclaration>();\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.FlowDeclareExportDeclaration>,\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.ExportNamedDeclaration | N.ExportAllDeclaration>,\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.FlowDeclareModuleExports>,\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.FlowDeclareTypeAlias>,\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.FlowDeclareOpaqueType>,\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.FlowDeclareInterface>,\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<N.FlowDeclare>, 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 ? BindingFlag.TYPE_FUNCTION : BindingFlag.TYPE_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.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.FlowTypeAlias {\n node.id = this.flowParseRestrictedIdentifier(\n /* liberal */ false,\n /* declaration */ true,\n );\n this.scope.declareName(\n node.id.name,\n BindingFlag.TYPE_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.right = this.flowParseTypeInitialiser(tt.eq);\n this.semicolon();\n\n return this.finishNode(node, \"TypeAlias\");\n }\n\n flowParseOpaqueType(\n node: Undone<N.FlowOpaqueType>,\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(\n node.id.name,\n BindingFlag.TYPE_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 // 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.TypeParameter>();\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.TypeParameterDeclaration>();\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.TypeParameterInstantiation>();\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.TypeParameterInstantiation>();\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.FlowInterfaceType>();\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.FlowObjectTypeIndexer>,\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.FlowObjectTypeInternalSlot>,\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.FlowFunctionTypeAnnotation>,\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.FlowObjectTypeCallProperty>,\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.FlowObjectTypeProperty | N.FlowObjectTypeSpreadProperty>,\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<N.FlowQualifiedTypeIdentifier>(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.FlowFunctionTypeParam>();\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.FlowTypeAnnotation>,\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.StringLiteralTypeAnnotation>(\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 \"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.NumberLiteralTypeAnnotation>(\n -this.state.value,\n \"NumberLiteralTypeAnnotation\",\n node,\n );\n }\n\n if (this.match(tt.bigint)) {\n return this.parseLiteralAtNode<N.BigIntLiteralTypeAnnotation>(\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<N.Identifier>, 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.FlowOptionalIndexedAccessType>(\n // @ts-expect-error todo(flow->ts)\n node,\n \"OptionalIndexedAccessType\",\n );\n } else {\n type = this.finishNode<N.FlowIndexedAccessType>(\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.FlowTypeAnnotation>();\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.FlowVariance>();\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<T>, type: T[\"type\"], isMethod: boolean = false): T {\n if (this.match(tt.colon)) {\n const typeNode = this.startNode<N.TypeAnnotation>();\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.FlowInterface>();\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<Pattern> 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(ScopeFlag.FUNCTION | ScopeFlag.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<T>(\n node: Undone<N.Node>,\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.Expression | undefined | null>,\n isParenthesizedExpr?: boolean,\n ): ReadonlyArray<N.Expression | undefined | null> {\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.ObjectMethod | N.ObjectProperty>,\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.ImportDeclaration>) {\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<T>, 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.ImportDeclaration | N.ExportNamedDeclaration>,\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<T>() {}\n parseFunctionParams(\n node: Undone<N.Function>,\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 // <T>(() => {});\n // <T>(() => {}: 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 // (<T>() => {}: 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 // <T> 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.ArrowFunctionExpression>,\n ): Undone<N.ArrowFunctionExpression> | 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.TypeAnnotation>();\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<N.Node>): 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<N.OptionalCallExpression>(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<N.OptionalCallExpression>).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<N.ArrowFunctionExpression>(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 flowEnumErrorStringMemberInconsistentlyInitialized(\n node: N.Node,\n {\n enumName,\n }: {\n enumName: string;\n },\n ): void {\n this.raise(FlowErrors.EnumStringMemberInconsistentlyInitialized, {\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.Node>;\n numberMembers: Array<N.Node>;\n stringMembers: Array<N.Node>;\n defaultedMembers: Array<N.Node>;\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.Node>,\n defaultedMembers: Array<N.Node>,\n {\n enumName,\n }: {\n enumName: string;\n },\n ): Array<N.Node> {\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.flowEnumErrorStringMemberInconsistentlyInitialized(member, {\n enumName,\n });\n }\n return defaultedMembers;\n } else {\n for (const member of defaultedMembers) {\n this.flowEnumErrorStringMemberInconsistentlyInitialized(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<N.Node>, 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.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","const entities: {\n __proto__: null;\n [name: string]: string;\n} = {\n __proto__: null,\n quot: \"\\u0022\",\n amp: \"&\",\n apos: \"\\u0027\",\n lt: \"<\",\n gt: \">\",\n nbsp: \"\\u00A0\",\n iexcl: \"\\u00A1\",\n cent: \"\\u00A2\",\n pound: \"\\u00A3\",\n curren: \"\\u00A4\",\n yen: \"\\u00A5\",\n brvbar: \"\\u00A6\",\n sect: \"\\u00A7\",\n uml: \"\\u00A8\",\n copy: \"\\u00A9\",\n ordf: \"\\u00AA\",\n laquo: \"\\u00AB\",\n not: \"\\u00AC\",\n shy: \"\\u00AD\",\n reg: \"\\u00AE\",\n macr: \"\\u00AF\",\n deg: \"\\u00B0\",\n plusmn: \"\\u00B1\",\n sup2: \"\\u00B2\",\n sup3: \"\\u00B3\",\n acute: \"\\u00B4\",\n micro: \"\\u00B5\",\n para: \"\\u00B6\",\n middot: \"\\u00B7\",\n cedil: \"\\u00B8\",\n sup1: \"\\u00B9\",\n ordm: \"\\u00BA\",\n raquo: \"\\u00BB\",\n frac14: \"\\u00BC\",\n frac12: \"\\u00BD\",\n frac34: \"\\u00BE\",\n iquest: \"\\u00BF\",\n Agrave: \"\\u00C0\",\n Aacute: \"\\u00C1\",\n Acirc: \"\\u00C2\",\n Atilde: \"\\u00C3\",\n Auml: \"\\u00C4\",\n Aring: \"\\u00C5\",\n AElig: \"\\u00C6\",\n Ccedil: \"\\u00C7\",\n Egrave: \"\\u00C8\",\n Eacute: \"\\u00C9\",\n Ecirc: \"\\u00CA\",\n Euml: \"\\u00CB\",\n Igrave: \"\\u00CC\",\n Iacute: \"\\u00CD\",\n Icirc: \"\\u00CE\",\n Iuml: \"\\u00CF\",\n ETH: \"\\u00D0\",\n Ntilde: \"\\u00D1\",\n Ograve: \"\\u00D2\",\n Oacute: \"\\u00D3\",\n Ocirc: \"\\u00D4\",\n Otilde: \"\\u00D5\",\n Ouml: \"\\u00D6\",\n times: \"\\u00D7\",\n Oslash: \"\\u00D8\",\n Ugrave: \"\\u00D9\",\n Uacute: \"\\u00DA\",\n Ucirc: \"\\u00DB\",\n Uuml: \"\\u00DC\",\n Yacute: \"\\u00DD\",\n THORN: \"\\u00DE\",\n szlig: \"\\u00DF\",\n agrave: \"\\u00E0\",\n aacute: \"\\u00E1\",\n acirc: \"\\u00E2\",\n atilde: \"\\u00E3\",\n auml: \"\\u00E4\",\n aring: \"\\u00E5\",\n aelig: \"\\u00E6\",\n ccedil: \"\\u00E7\",\n egrave: \"\\u00E8\",\n eacute: \"\\u00E9\",\n ecirc: \"\\u00EA\",\n euml: \"\\u00EB\",\n igrave: \"\\u00EC\",\n iacute: \"\\u00ED\",\n icirc: \"\\u00EE\",\n iuml: \"\\u00EF\",\n eth: \"\\u00F0\",\n ntilde: \"\\u00F1\",\n ograve: \"\\u00F2\",\n oacute: \"\\u00F3\",\n ocirc: \"\\u00F4\",\n otilde: \"\\u00F5\",\n ouml: \"\\u00F6\",\n divide: \"\\u00F7\",\n oslash: \"\\u00F8\",\n ugrave: \"\\u00F9\",\n uacute: \"\\u00FA\",\n ucirc: \"\\u00FB\",\n uuml: \"\\u00FC\",\n yacute: \"\\u00FD\",\n thorn: \"\\u00FE\",\n yuml: \"\\u00FF\",\n OElig: \"\\u0152\",\n oelig: \"\\u0153\",\n Scaron: \"\\u0160\",\n scaron: \"\\u0161\",\n Yuml: \"\\u0178\",\n fnof: \"\\u0192\",\n circ: \"\\u02C6\",\n tilde: \"\\u02DC\",\n Alpha: \"\\u0391\",\n Beta: \"\\u0392\",\n Gamma: \"\\u0393\",\n Delta: \"\\u0394\",\n Epsilon: \"\\u0395\",\n Zeta: \"\\u0396\",\n Eta: \"\\u0397\",\n Theta: \"\\u0398\",\n Iota: \"\\u0399\",\n Kappa: \"\\u039A\",\n Lambda: \"\\u039B\",\n Mu: \"\\u039C\",\n Nu: \"\\u039D\",\n Xi: \"\\u039E\",\n Omicron: \"\\u039F\",\n Pi: \"\\u03A0\",\n Rho: \"\\u03A1\",\n Sigma: \"\\u03A3\",\n Tau: \"\\u03A4\",\n Upsilon: \"\\u03A5\",\n Phi: \"\\u03A6\",\n Chi: \"\\u03A7\",\n Psi: \"\\u03A8\",\n Omega: \"\\u03A9\",\n alpha: \"\\u03B1\",\n beta: \"\\u03B2\",\n gamma: \"\\u03B3\",\n delta: \"\\u03B4\",\n epsilon: \"\\u03B5\",\n zeta: \"\\u03B6\",\n eta: \"\\u03B7\",\n theta: \"\\u03B8\",\n iota: \"\\u03B9\",\n kappa: \"\\u03BA\",\n lambda: \"\\u03BB\",\n mu: \"\\u03BC\",\n nu: \"\\u03BD\",\n xi: \"\\u03BE\",\n omicron: \"\\u03BF\",\n pi: \"\\u03C0\",\n rho: \"\\u03C1\",\n sigmaf: \"\\u03C2\",\n sigma: \"\\u03C3\",\n tau: \"\\u03C4\",\n upsilon: \"\\u03C5\",\n phi: \"\\u03C6\",\n chi: \"\\u03C7\",\n psi: \"\\u03C8\",\n omega: \"\\u03C9\",\n thetasym: \"\\u03D1\",\n upsih: \"\\u03D2\",\n piv: \"\\u03D6\",\n ensp: \"\\u2002\",\n emsp: \"\\u2003\",\n thinsp: \"\\u2009\",\n zwnj: \"\\u200C\",\n zwj: \"\\u200D\",\n lrm: \"\\u200E\",\n rlm: \"\\u200F\",\n ndash: \"\\u2013\",\n mdash: \"\\u2014\",\n lsquo: \"\\u2018\",\n rsquo: \"\\u2019\",\n sbquo: \"\\u201A\",\n ldquo: \"\\u201C\",\n rdquo: \"\\u201D\",\n bdquo: \"\\u201E\",\n dagger: \"\\u2020\",\n Dagger: \"\\u2021\",\n bull: \"\\u2022\",\n hellip: \"\\u2026\",\n permil: \"\\u2030\",\n prime: \"\\u2032\",\n Prime: \"\\u2033\",\n lsaquo: \"\\u2039\",\n rsaquo: \"\\u203A\",\n oline: \"\\u203E\",\n frasl: \"\\u2044\",\n euro: \"\\u20AC\",\n image: \"\\u2111\",\n weierp: \"\\u2118\",\n real: \"\\u211C\",\n trade: \"\\u2122\",\n alefsym: \"\\u2135\",\n larr: \"\\u2190\",\n uarr: \"\\u2191\",\n rarr: \"\\u2192\",\n darr: \"\\u2193\",\n harr: \"\\u2194\",\n crarr: \"\\u21B5\",\n lArr: \"\\u21D0\",\n uArr: \"\\u21D1\",\n rArr: \"\\u21D2\",\n dArr: \"\\u21D3\",\n hArr: \"\\u21D4\",\n forall: \"\\u2200\",\n part: \"\\u2202\",\n exist: \"\\u2203\",\n empty: \"\\u2205\",\n nabla: \"\\u2207\",\n isin: \"\\u2208\",\n notin: \"\\u2209\",\n ni: \"\\u220B\",\n prod: \"\\u220F\",\n sum: \"\\u2211\",\n minus: \"\\u2212\",\n lowast: \"\\u2217\",\n radic: \"\\u221A\",\n prop: \"\\u221D\",\n infin: \"\\u221E\",\n ang: \"\\u2220\",\n and: \"\\u2227\",\n or: \"\\u2228\",\n cap: \"\\u2229\",\n cup: \"\\u222A\",\n int: \"\\u222B\",\n there4: \"\\u2234\",\n sim: \"\\u223C\",\n cong: \"\\u2245\",\n asymp: \"\\u2248\",\n ne: \"\\u2260\",\n equiv: \"\\u2261\",\n le: \"\\u2264\",\n ge: \"\\u2265\",\n sub: \"\\u2282\",\n sup: \"\\u2283\",\n nsub: \"\\u2284\",\n sube: \"\\u2286\",\n supe: \"\\u2287\",\n oplus: \"\\u2295\",\n otimes: \"\\u2297\",\n perp: \"\\u22A5\",\n sdot: \"\\u22C5\",\n lceil: \"\\u2308\",\n rceil: \"\\u2309\",\n lfloor: \"\\u230A\",\n rfloor: \"\\u230B\",\n lang: \"\\u2329\",\n rang: \"\\u232A\",\n loz: \"\\u25CA\",\n spades: \"\\u2660\",\n clubs: \"\\u2663\",\n hearts: \"\\u2665\",\n diams: \"\\u2666\",\n} as const;\nexport default entities;\n","import * as charCodes from \"charcodes\";\n\nimport XHTMLEntities from \"./xhtml.ts\";\nimport type Parser from \"../../parser/index.ts\";\nimport type { ExpressionErrors } from \"../../parser/util.ts\";\nimport {\n tokenComesBeforeExpression,\n tokenIsKeyword,\n tokenLabelName,\n type TokenType,\n tt,\n} from \"../../tokenizer/types.ts\";\nimport type { TokContext } from \"../../tokenizer/context.ts\";\nimport { types as tc } from \"../../tokenizer/context.ts\";\nimport type * as N from \"../../types.ts\";\nimport { isIdentifierChar, isIdentifierStart } from \"../../util/identifier.ts\";\nimport type { Position } from \"../../util/location.ts\";\nimport { isNewLine } from \"../../util/whitespace.ts\";\nimport { Errors, ParseErrorEnum } from \"../../parse-error.ts\";\nimport type { Undone } from \"../../parser/node.ts\";\n\n/* eslint sort-keys: \"error\" */\nconst JsxErrors = ParseErrorEnum`jsx`({\n AttributeIsEmpty:\n \"JSX attributes must only be assigned a non-empty expression.\",\n MissingClosingTagElement: ({ openingTagName }: { openingTagName: string }) =>\n `Expected corresponding JSX closing tag for <${openingTagName}>.`,\n MissingClosingTagFragment: \"Expected corresponding JSX closing tag for <>.\",\n UnexpectedSequenceExpression:\n \"Sequence expressions cannot be directly nested inside JSX. Did you mean to wrap it in parentheses (...)?\",\n // FIXME: Unify with Errors.UnexpectedToken\n UnexpectedToken: ({\n unexpected,\n HTMLEntity,\n }: {\n unexpected: string;\n HTMLEntity: string;\n }) =>\n `Unexpected token \\`${unexpected}\\`. Did you mean \\`${HTMLEntity}\\` or \\`{'${unexpected}'}\\`?`,\n UnsupportedJsxValue:\n \"JSX value should be either an expression or a quoted JSX text.\",\n UnterminatedJsxContent: \"Unterminated JSX contents.\",\n UnwrappedAdjacentJSXElements:\n \"Adjacent JSX elements must be wrapped in an enclosing tag. Did you want a JSX fragment <>...</>?\",\n});\n\n/* eslint-disable sort-keys */\n\nfunction isFragment(object?: N.JSXElement | null): boolean {\n return object\n ? object.type === \"JSXOpeningFragment\" ||\n object.type === \"JSXClosingFragment\"\n : false;\n}\n\n// Transforms JSX element name to string.\n\nfunction getQualifiedJSXName(\n object: N.JSXIdentifier | N.JSXNamespacedName | N.JSXMemberExpression,\n): string {\n if (object.type === \"JSXIdentifier\") {\n return object.name;\n }\n\n if (object.type === \"JSXNamespacedName\") {\n return object.namespace.name + \":\" + object.name.name;\n }\n\n if (object.type === \"JSXMemberExpression\") {\n return (\n getQualifiedJSXName(object.object) +\n \".\" +\n getQualifiedJSXName(object.property)\n );\n }\n\n // istanbul ignore next\n throw new Error(\"Node had unexpected type: \" + object.type);\n}\n\nexport interface IJSXParserMixin {\n jsxParseOpeningElementAfterName(\n node: N.JSXOpeningElement,\n ): N.JSXOpeningElement;\n}\n\nexport default (superClass: typeof Parser) =>\n class JSXParserMixin extends superClass implements Parser, IJSXParserMixin {\n // Reads inline JSX contents token.\n\n jsxReadToken(): void {\n let out = \"\";\n let chunkStart = this.state.pos;\n for (;;) {\n if (this.state.pos >= this.length) {\n throw this.raise(JsxErrors.UnterminatedJsxContent, {\n at: this.state.startLoc,\n });\n }\n\n const ch = this.input.charCodeAt(this.state.pos);\n\n switch (ch) {\n case charCodes.lessThan:\n case charCodes.leftCurlyBrace:\n if (this.state.pos === this.state.start) {\n if (ch === charCodes.lessThan && this.state.canStartJSXElement) {\n ++this.state.pos;\n this.finishToken(tt.jsxTagStart);\n } else {\n super.getTokenFromCode(ch);\n }\n return;\n }\n out += this.input.slice(chunkStart, this.state.pos);\n this.finishToken(tt.jsxText, out);\n return;\n\n case charCodes.ampersand:\n out += this.input.slice(chunkStart, this.state.pos);\n out += this.jsxReadEntity();\n chunkStart = this.state.pos;\n break;\n\n case charCodes.greaterThan:\n case charCodes.rightCurlyBrace:\n if (process.env.BABEL_8_BREAKING) {\n this.raise(JsxErrors.UnexpectedToken, {\n at: this.state.curPosition(),\n unexpected: this.input[this.state.pos],\n HTMLEntity:\n ch === charCodes.rightCurlyBrace ? \"&rbrace;\" : \"&gt;\",\n });\n }\n /* falls through */\n\n default:\n if (isNewLine(ch)) {\n out += this.input.slice(chunkStart, this.state.pos);\n out += this.jsxReadNewLine(true);\n chunkStart = this.state.pos;\n } else {\n ++this.state.pos;\n }\n }\n }\n }\n\n jsxReadNewLine(normalizeCRLF: boolean): string {\n const ch = this.input.charCodeAt(this.state.pos);\n let out;\n ++this.state.pos;\n if (\n ch === charCodes.carriageReturn &&\n this.input.charCodeAt(this.state.pos) === charCodes.lineFeed\n ) {\n ++this.state.pos;\n out = normalizeCRLF ? \"\\n\" : \"\\r\\n\";\n } else {\n out = String.fromCharCode(ch);\n }\n ++this.state.curLine;\n this.state.lineStart = this.state.pos;\n\n return out;\n }\n\n jsxReadString(quote: number): void {\n let out = \"\";\n let chunkStart = ++this.state.pos;\n for (;;) {\n if (this.state.pos >= this.length) {\n throw this.raise(Errors.UnterminatedString, {\n at: this.state.startLoc,\n });\n }\n\n const ch = this.input.charCodeAt(this.state.pos);\n if (ch === quote) break;\n if (ch === charCodes.ampersand) {\n out += this.input.slice(chunkStart, this.state.pos);\n out += this.jsxReadEntity();\n chunkStart = this.state.pos;\n } else if (isNewLine(ch)) {\n out += this.input.slice(chunkStart, this.state.pos);\n out += this.jsxReadNewLine(false);\n chunkStart = this.state.pos;\n } else {\n ++this.state.pos;\n }\n }\n out += this.input.slice(chunkStart, this.state.pos++);\n this.finishToken(tt.string, out);\n }\n\n jsxReadEntity(): string {\n const startPos = ++this.state.pos;\n if (this.codePointAtPos(this.state.pos) === charCodes.numberSign) {\n ++this.state.pos;\n\n let radix = 10;\n if (this.codePointAtPos(this.state.pos) === charCodes.lowercaseX) {\n radix = 16;\n ++this.state.pos;\n }\n\n const codePoint = this.readInt(\n radix,\n /* len */ undefined,\n /* forceLen */ false,\n /* allowNumSeparator */ \"bail\",\n );\n if (\n codePoint !== null &&\n this.codePointAtPos(this.state.pos) === charCodes.semicolon\n ) {\n ++this.state.pos;\n return String.fromCodePoint(codePoint);\n }\n } else {\n let count = 0;\n let semi = false;\n while (\n count++ < 10 &&\n this.state.pos < this.length &&\n !(semi = this.codePointAtPos(this.state.pos) == charCodes.semicolon)\n ) {\n ++this.state.pos;\n }\n\n if (semi) {\n const desc = this.input.slice(startPos, this.state.pos);\n const entity = XHTMLEntities[desc];\n ++this.state.pos;\n\n if (entity) {\n return entity;\n }\n }\n }\n\n // Not a valid entity\n this.state.pos = startPos;\n return \"&\";\n }\n\n // Read a JSX identifier (valid tag or attribute name).\n //\n // Optimized version since JSX identifiers can\"t contain\n // escape characters and so can be read as single slice.\n // Also assumes that first character was already checked\n // by isIdentifierStart in readToken.\n\n jsxReadWord(): void {\n let ch;\n const start = this.state.pos;\n do {\n ch = this.input.charCodeAt(++this.state.pos);\n } while (isIdentifierChar(ch) || ch === charCodes.dash);\n this.finishToken(tt.jsxName, this.input.slice(start, this.state.pos));\n }\n\n // Parse next token as JSX identifier\n\n jsxParseIdentifier(): N.JSXIdentifier {\n const node = this.startNode();\n if (this.match(tt.jsxName)) {\n node.name = this.state.value;\n } else if (tokenIsKeyword(this.state.type)) {\n node.name = tokenLabelName(this.state.type);\n } else {\n this.unexpected();\n }\n this.next();\n return this.finishNode(node, \"JSXIdentifier\");\n }\n\n // Parse namespaced identifier.\n\n jsxParseNamespacedName(): N.JSXNamespacedName {\n const startLoc = this.state.startLoc;\n const name = this.jsxParseIdentifier();\n if (!this.eat(tt.colon)) return name;\n\n const node = this.startNodeAt(startLoc);\n node.namespace = name;\n node.name = this.jsxParseIdentifier();\n return this.finishNode(node, \"JSXNamespacedName\");\n }\n\n // Parses element name in any form - namespaced, member\n // or single identifier.\n\n jsxParseElementName():\n | N.JSXIdentifier\n | N.JSXNamespacedName\n | N.JSXMemberExpression {\n const startLoc = this.state.startLoc;\n let node = this.jsxParseNamespacedName();\n if (node.type === \"JSXNamespacedName\") {\n return node;\n }\n while (this.eat(tt.dot)) {\n const newNode = this.startNodeAt(startLoc);\n newNode.object = node;\n newNode.property = this.jsxParseIdentifier();\n node = this.finishNode(newNode, \"JSXMemberExpression\");\n }\n return node;\n }\n\n // Parses any type of JSX attribute value.\n\n jsxParseAttributeValue(): N.Expression {\n let node;\n switch (this.state.type) {\n case tt.braceL:\n node = this.startNode();\n this.setContext(tc.brace);\n this.next();\n node = this.jsxParseExpressionContainer(node, tc.j_oTag);\n if (node.expression.type === \"JSXEmptyExpression\") {\n this.raise(JsxErrors.AttributeIsEmpty, { at: node });\n }\n return node;\n\n case tt.jsxTagStart:\n case tt.string:\n return this.parseExprAtom();\n\n default:\n throw this.raise(JsxErrors.UnsupportedJsxValue, {\n at: this.state.startLoc,\n });\n }\n }\n\n // JSXEmptyExpression is unique type since it doesn't actually parse anything,\n // and so it should start at the end of last read token (left brace) and finish\n // at the beginning of the next one (right brace).\n\n jsxParseEmptyExpression(): N.JSXEmptyExpression {\n const node = this.startNodeAt(this.state.lastTokEndLoc);\n return this.finishNodeAt(node, \"JSXEmptyExpression\", this.state.startLoc);\n }\n\n // Parse JSX spread child\n\n jsxParseSpreadChild(node: Undone<N.JSXSpreadChild>): N.JSXSpreadChild {\n this.next(); // ellipsis\n node.expression = this.parseExpression();\n this.setContext(tc.j_expr);\n this.state.canStartJSXElement = true;\n this.expect(tt.braceR);\n\n return this.finishNode(node, \"JSXSpreadChild\");\n }\n\n // Parses JSX expression enclosed into curly brackets.\n\n jsxParseExpressionContainer(\n node: Undone<N.JSXExpressionContainer>,\n previousContext: TokContext,\n ): N.JSXExpressionContainer {\n if (this.match(tt.braceR)) {\n node.expression = this.jsxParseEmptyExpression();\n } else {\n const expression = this.parseExpression();\n\n if (process.env.BABEL_8_BREAKING) {\n if (\n expression.type === \"SequenceExpression\" &&\n !expression.extra?.parenthesized\n ) {\n this.raise(JsxErrors.UnexpectedSequenceExpression, {\n at: expression.expressions[1],\n });\n }\n }\n\n node.expression = expression;\n }\n this.setContext(previousContext);\n this.state.canStartJSXElement = true;\n this.expect(tt.braceR);\n\n return this.finishNode(node, \"JSXExpressionContainer\");\n }\n\n // Parses following JSX attribute name-value pair.\n\n jsxParseAttribute(): N.JSXAttribute {\n const node = this.startNode();\n if (this.match(tt.braceL)) {\n this.setContext(tc.brace);\n this.next();\n this.expect(tt.ellipsis);\n node.argument = this.parseMaybeAssignAllowIn();\n this.setContext(tc.j_oTag);\n this.state.canStartJSXElement = true;\n this.expect(tt.braceR);\n return this.finishNode(node, \"JSXSpreadAttribute\");\n }\n node.name = this.jsxParseNamespacedName();\n node.value = this.eat(tt.eq) ? this.jsxParseAttributeValue() : null;\n return this.finishNode(node, \"JSXAttribute\");\n }\n\n // Parses JSX opening tag starting after \"<\".\n\n jsxParseOpeningElementAt(startLoc: Position): N.JSXOpeningElement {\n const node = this.startNodeAt<N.JSXOpeningElement | N.JSXOpeningFragment>(\n startLoc,\n );\n if (this.eat(tt.jsxTagEnd)) {\n // @ts-expect-error migrate to Babel types\n return this.finishNode(node, \"JSXOpeningFragment\");\n }\n node.name = this.jsxParseElementName();\n return this.jsxParseOpeningElementAfterName(\n node as Undone<N.JSXOpeningElement>,\n );\n }\n\n jsxParseOpeningElementAfterName(\n node: Undone<N.JSXOpeningElement>,\n ): N.JSXOpeningElement {\n const attributes: N.JSXAttribute[] = [];\n while (!this.match(tt.slash) && !this.match(tt.jsxTagEnd)) {\n attributes.push(this.jsxParseAttribute());\n }\n node.attributes = attributes;\n node.selfClosing = this.eat(tt.slash);\n this.expect(tt.jsxTagEnd);\n return this.finishNode(node, \"JSXOpeningElement\");\n }\n\n // Parses JSX closing tag starting after \"</\".\n\n jsxParseClosingElementAt(startLoc: Position): N.JSXClosingElement {\n const node = this.startNodeAt(startLoc);\n if (this.eat(tt.jsxTagEnd)) {\n return this.finishNode(node, \"JSXClosingFragment\");\n }\n node.name = this.jsxParseElementName();\n this.expect(tt.jsxTagEnd);\n return this.finishNode(node, \"JSXClosingElement\");\n }\n\n // Parses entire JSX element, including it\"s opening tag\n // (starting after \"<\"), attributes, contents and closing tag.\n\n jsxParseElementAt(startLoc: Position): N.JSXElement {\n const node = this.startNodeAt(startLoc);\n const children = [];\n const openingElement = this.jsxParseOpeningElementAt(startLoc);\n let closingElement = null;\n\n if (!openingElement.selfClosing) {\n contents: for (;;) {\n switch (this.state.type) {\n case tt.jsxTagStart:\n startLoc = this.state.startLoc;\n this.next();\n if (this.eat(tt.slash)) {\n closingElement = this.jsxParseClosingElementAt(startLoc);\n break contents;\n }\n children.push(this.jsxParseElementAt(startLoc));\n break;\n\n case tt.jsxText:\n children.push(this.parseExprAtom());\n break;\n\n case tt.braceL: {\n const node = this.startNode<\n N.JSXSpreadChild | N.JSXExpressionContainer\n >();\n this.setContext(tc.brace);\n this.next();\n if (this.match(tt.ellipsis)) {\n children.push(this.jsxParseSpreadChild(node));\n } else {\n children.push(\n this.jsxParseExpressionContainer(node, tc.j_expr),\n );\n }\n\n break;\n }\n // istanbul ignore next - should never happen\n default:\n this.unexpected();\n }\n }\n\n if (\n isFragment(openingElement) &&\n !isFragment(closingElement) &&\n closingElement !== null\n ) {\n this.raise(JsxErrors.MissingClosingTagFragment, {\n at: closingElement,\n });\n } else if (!isFragment(openingElement) && isFragment(closingElement)) {\n this.raise(JsxErrors.MissingClosingTagElement, {\n at: closingElement,\n openingTagName: getQualifiedJSXName(openingElement.name),\n });\n } else if (!isFragment(openingElement) && !isFragment(closingElement)) {\n if (\n getQualifiedJSXName(closingElement.name) !==\n getQualifiedJSXName(openingElement.name)\n ) {\n this.raise(JsxErrors.MissingClosingTagElement, {\n at: closingElement,\n openingTagName: getQualifiedJSXName(openingElement.name),\n });\n }\n }\n }\n\n if (isFragment(openingElement)) {\n node.openingFragment = openingElement;\n node.closingFragment = closingElement;\n } else {\n node.openingElement = openingElement;\n node.closingElement = closingElement;\n }\n node.children = children;\n if (this.match(tt.lt)) {\n throw this.raise(JsxErrors.UnwrappedAdjacentJSXElements, {\n at: this.state.startLoc,\n });\n }\n\n return isFragment(openingElement)\n ? this.finishNode(node, \"JSXFragment\")\n : this.finishNode(node, \"JSXElement\");\n }\n\n // Parses entire JSX element from current position.\n\n jsxParseElement(): N.JSXElement {\n const startLoc = this.state.startLoc;\n this.next();\n return this.jsxParseElementAt(startLoc);\n }\n\n setContext(newContext: TokContext) {\n const { context } = this.state;\n context[context.length - 1] = newContext;\n }\n\n // ==================================\n // Overrides\n // ==================================\n\n parseExprAtom(refExpressionErrors?: ExpressionErrors | null): N.Expression {\n if (this.match(tt.jsxText)) {\n return this.parseLiteral(this.state.value, \"JSXText\");\n } else if (this.match(tt.jsxTagStart)) {\n return this.jsxParseElement();\n } else if (\n this.match(tt.lt) &&\n this.input.charCodeAt(this.state.pos) !== charCodes.exclamationMark\n ) {\n // In case we encounter an lt token here it will always be the start of\n // jsx as the lt sign is not allowed in places that expect an expression\n this.replaceToken(tt.jsxTagStart);\n return this.jsxParseElement();\n } else {\n return super.parseExprAtom(refExpressionErrors);\n }\n }\n\n skipSpace() {\n const curContext = this.curContext();\n if (!curContext.preserveSpace) super.skipSpace();\n }\n\n getTokenFromCode(code: number): void {\n const context = this.curContext();\n\n if (context === tc.j_expr) {\n this.jsxReadToken();\n return;\n }\n\n if (context === tc.j_oTag || context === tc.j_cTag) {\n if (isIdentifierStart(code)) {\n this.jsxReadWord();\n return;\n }\n\n if (code === charCodes.greaterThan) {\n ++this.state.pos;\n this.finishToken(tt.jsxTagEnd);\n return;\n }\n\n if (\n (code === charCodes.quotationMark || code === charCodes.apostrophe) &&\n context === tc.j_oTag\n ) {\n this.jsxReadString(code);\n return;\n }\n }\n\n if (\n code === charCodes.lessThan &&\n this.state.canStartJSXElement &&\n this.input.charCodeAt(this.state.pos + 1) !== charCodes.exclamationMark\n ) {\n ++this.state.pos;\n this.finishToken(tt.jsxTagStart);\n return;\n }\n\n super.getTokenFromCode(code);\n }\n\n updateContext(prevType: TokenType): void {\n const { context, type } = this.state;\n if (type === tt.slash && prevType === tt.jsxTagStart) {\n // do not consider JSX expr -> JSX open tag -> ... anymore\n // reconsider as closing tag context\n context.splice(-2, 2, tc.j_cTag);\n this.state.canStartJSXElement = false;\n } else if (type === tt.jsxTagStart) {\n // start opening tag context\n context.push(tc.j_oTag);\n } else if (type === tt.jsxTagEnd) {\n const out = context[context.length - 1];\n if ((out === tc.j_oTag && prevType === tt.slash) || out === tc.j_cTag) {\n context.pop();\n this.state.canStartJSXElement =\n context[context.length - 1] === tc.j_expr;\n } else {\n this.setContext(tc.j_expr);\n this.state.canStartJSXElement = true;\n }\n } else {\n this.state.canStartJSXElement = tokenComesBeforeExpression(type);\n }\n }\n };\n","import type { Position } from \"../../util/location.ts\";\nimport ScopeHandler, { Scope } from \"../../util/scope.ts\";\nimport {\n BindingFlag,\n ScopeFlag,\n type BindingTypes,\n} from \"../../util/scopeflags.ts\";\nimport type * as N from \"../../types.ts\";\nimport { Errors } from \"../../parse-error.ts\";\n\nclass TypeScriptScope extends Scope {\n types: Set<string> = new Set();\n\n // enums (which are also in .types)\n enums: Set<string> = new Set();\n\n // const enums (which are also in .enums and .types)\n constEnums: Set<string> = new Set();\n\n // classes (which are also in .lexical) and interface (which are also in .types)\n classes: Set<string> = new Set();\n\n // namespaces and ambient functions (or classes) are too difficult to track,\n // especially without type analysis.\n // We need to track them anyway, to avoid \"X is not defined\" errors\n // when exporting them.\n exportOnlyBindings: Set<string> = new Set();\n}\n\n// See https://github.com/babel/babel/pull/9766#discussion_r268920730 for an\n// explanation of how typescript handles scope.\n\nexport default class TypeScriptScopeHandler extends ScopeHandler<TypeScriptScope> {\n importsStack: Set<string>[] = [];\n\n createScope(flags: ScopeFlag): TypeScriptScope {\n this.importsStack.push(new Set()); // Always keep the top-level scope for export checks.\n\n return new TypeScriptScope(flags);\n }\n\n enter(flags: ScopeFlag): void {\n if (flags == ScopeFlag.TS_MODULE) {\n this.importsStack.push(new Set());\n }\n\n super.enter(flags);\n }\n\n exit() {\n const flags = super.exit();\n\n if (flags == ScopeFlag.TS_MODULE) {\n this.importsStack.pop();\n }\n\n return flags;\n }\n\n hasImport(name: string, allowShadow?: boolean) {\n const len = this.importsStack.length;\n if (this.importsStack[len - 1].has(name)) {\n return true;\n }\n if (!allowShadow && len > 1) {\n for (let i = 0; i < len - 1; i++) {\n if (this.importsStack[i].has(name)) return true;\n }\n }\n return false;\n }\n\n declareName(name: string, bindingType: BindingTypes, loc: Position) {\n if (bindingType & BindingFlag.FLAG_TS_IMPORT) {\n if (this.hasImport(name, true)) {\n this.parser.raise(Errors.VarRedeclaration, {\n at: loc,\n identifierName: name,\n });\n }\n this.importsStack[this.importsStack.length - 1].add(name);\n return;\n }\n\n const scope = this.currentScope();\n if (bindingType & BindingFlag.FLAG_TS_EXPORT_ONLY) {\n this.maybeExportDefined(scope, name);\n scope.exportOnlyBindings.add(name);\n return;\n }\n\n super.declareName(name, bindingType, loc);\n\n if (bindingType & BindingFlag.KIND_TYPE) {\n if (!(bindingType & BindingFlag.KIND_VALUE)) {\n // \"Value\" bindings have already been registered by the superclass.\n this.checkRedeclarationInScope(scope, name, bindingType, loc);\n this.maybeExportDefined(scope, name);\n }\n scope.types.add(name);\n }\n if (bindingType & BindingFlag.FLAG_TS_ENUM) scope.enums.add(name);\n if (bindingType & BindingFlag.FLAG_TS_CONST_ENUM) {\n scope.constEnums.add(name);\n }\n if (bindingType & BindingFlag.FLAG_CLASS) scope.classes.add(name);\n }\n\n isRedeclaredInScope(\n scope: TypeScriptScope,\n name: string,\n bindingType: BindingTypes,\n ): boolean {\n if (scope.enums.has(name)) {\n if (bindingType & BindingFlag.FLAG_TS_ENUM) {\n // Enums can be merged with other enums if they are both\n // const or both non-const.\n const isConst = !!(bindingType & BindingFlag.FLAG_TS_CONST_ENUM);\n const wasConst = scope.constEnums.has(name);\n return isConst !== wasConst;\n }\n return true;\n }\n if (bindingType & BindingFlag.FLAG_CLASS && scope.classes.has(name)) {\n if (scope.lexical.has(name)) {\n // Classes can be merged with interfaces\n return !!(bindingType & BindingFlag.KIND_VALUE);\n } else {\n // Interface can be merged with other classes or interfaces\n return false;\n }\n }\n if (bindingType & BindingFlag.KIND_TYPE && scope.types.has(name)) {\n return true;\n }\n\n return super.isRedeclaredInScope(scope, name, bindingType);\n }\n\n checkLocalExport(id: N.Identifier) {\n const { name } = id;\n\n if (this.hasImport(name)) return;\n\n const len = this.scopeStack.length;\n for (let i = len - 1; i >= 0; i--) {\n const scope = this.scopeStack[i];\n if (scope.types.has(name) || scope.exportOnlyBindings.has(name)) return;\n }\n\n super.checkLocalExport(id);\n }\n}\n","import * as charCodes from \"charcodes\";\nimport { tt, type TokenType } from \"../tokenizer/types.ts\";\nimport type {\n AssignmentPattern,\n TSParameterProperty,\n Decorator,\n Expression,\n Identifier,\n Node,\n Pattern,\n RestElement,\n SpreadElement,\n ObjectOrClassMember,\n ClassMember,\n ObjectMember,\n TsNamedTypeElementBase,\n PrivateName,\n ObjectExpression,\n ObjectPattern,\n ArrayExpression,\n ArrayPattern,\n} from \"../types.ts\";\nimport type { Pos, Position } from \"../util/location.ts\";\nimport {\n isStrictBindOnlyReservedWord,\n isStrictBindReservedWord,\n} from \"../util/identifier.ts\";\nimport { NodeUtils, type Undone } from \"./node.ts\";\nimport { type BindingTypes, BindingFlag } from \"../util/scopeflags.ts\";\nimport type { ExpressionErrors } from \"./util.ts\";\nimport { Errors, type LValAncestor } from \"../parse-error.ts\";\nimport type Parser from \"./index.ts\";\n\nconst getOwn = <T extends {}>(object: T, key: keyof T) =>\n Object.hasOwnProperty.call(object, key) && object[key];\n\nconst unwrapParenthesizedExpression = (node: Node): Node => {\n return node.type === \"ParenthesizedExpression\"\n ? unwrapParenthesizedExpression(node.expression)\n : node;\n};\n\nexport const enum ParseBindingListFlags {\n ALLOW_EMPTY = 1 << 0,\n IS_FUNCTION_PARAMS = 1 << 1,\n IS_CONSTRUCTOR_PARAMS = 1 << 2,\n}\n\nexport default abstract class LValParser extends NodeUtils {\n // Forward-declaration: defined in expression.js\n abstract parseIdentifier(liberal?: boolean): Identifier;\n abstract parseMaybeAssign(\n refExpressionErrors?: ExpressionErrors | null,\n afterLeftParse?: Function,\n refNeedsArrowPos?: Pos | null,\n ): Expression;\n\n abstract parseMaybeAssignAllowIn(\n refExpressionErrors?: ExpressionErrors | null,\n afterLeftParse?: Function,\n refNeedsArrowPos?: Pos | null,\n ): Expression;\n\n abstract parseObjectLike<T extends ObjectPattern | ObjectExpression>(\n close: TokenType,\n isPattern: boolean,\n isRecord?: boolean,\n refExpressionErrors?: ExpressionErrors,\n ): T;\n abstract parseObjPropValue(\n prop: any,\n startLoc: Position | null,\n isGenerator: boolean,\n isAsync: boolean,\n isPattern: boolean,\n isAccessor: boolean,\n refExpressionErrors?: ExpressionErrors | null,\n ): void;\n abstract parsePropertyName(\n prop: ObjectOrClassMember | ClassMember | TsNamedTypeElementBase,\n ): Expression | Identifier;\n abstract parsePrivateName(): PrivateName;\n // Forward-declaration: defined in statement.js\n abstract parseDecorator(): Decorator;\n\n /**\n * Convert existing expression atom to assignable pattern\n * if possible. Also checks invalid destructuring targets:\n *\n * - Parenthesized Destructuring patterns\n * - RestElement is not the last element\n * - Missing `=` in assignment pattern\n *\n * NOTE: There is a corresponding \"isAssignable\" method.\n * When this one is updated, please check if also that one needs to be updated.\n *\n * @param node The expression atom\n * @param isLHS Whether we are parsing a LeftHandSideExpression.\n * If isLHS is `true`, the following cases are allowed: `[(a)] = [0]`, `[(a.b)] = [0]`\n * If isLHS is `false`, we are in an arrow function parameters list.\n */\n toAssignable(node: Node, isLHS: boolean = false): void {\n let parenthesized = undefined;\n if (node.type === \"ParenthesizedExpression\" || node.extra?.parenthesized) {\n parenthesized = unwrapParenthesizedExpression(node);\n if (isLHS) {\n // an LHS can be reinterpreted to a binding pattern but not vice versa.\n // therefore a parenthesized identifier is ambiguous until we are sure it is an assignment expression\n // i.e. `([(a) = []] = []) => {}`\n // see also `recordArrowParameterBindingError` signature in packages/babel-parser/src/util/expression-scope.js\n if (parenthesized.type === \"Identifier\") {\n this.expressionScope.recordArrowParameterBindingError(\n Errors.InvalidParenthesizedAssignment,\n { at: node },\n );\n } else if (\n parenthesized.type !== \"MemberExpression\" &&\n !this.isOptionalMemberExpression(parenthesized)\n ) {\n // A parenthesized member expression can be in LHS but not in pattern.\n // If the LHS is later interpreted as a pattern, `checkLVal` will throw for member expression binding\n // i.e. `([(a.b) = []] = []) => {}`\n this.raise(Errors.InvalidParenthesizedAssignment, { at: node });\n }\n } else {\n this.raise(Errors.InvalidParenthesizedAssignment, { at: node });\n }\n }\n\n switch (node.type) {\n case \"Identifier\":\n case \"ObjectPattern\":\n case \"ArrayPattern\":\n case \"AssignmentPattern\":\n case \"RestElement\":\n break;\n\n case \"ObjectExpression\":\n node.type = \"ObjectPattern\";\n for (\n let i = 0, length = node.properties.length, last = length - 1;\n i < length;\n i++\n ) {\n const prop = node.properties[i];\n const isLast = i === last;\n this.toAssignableObjectExpressionProp(prop, isLast, isLHS);\n\n if (\n isLast &&\n prop.type === \"RestElement\" &&\n node.extra?.trailingCommaLoc\n ) {\n this.raise(Errors.RestTrailingComma, {\n at: node.extra.trailingCommaLoc,\n });\n }\n }\n break;\n\n case \"ObjectProperty\": {\n const { key, value } = node;\n if (this.isPrivateName(key)) {\n this.classScope.usePrivateName(\n this.getPrivateNameSV(key),\n key.loc.start,\n );\n }\n this.toAssignable(value, isLHS);\n break;\n }\n\n case \"SpreadElement\": {\n throw new Error(\n \"Internal @babel/parser error (this is a bug, please report it).\" +\n \" SpreadElement should be converted by .toAssignable's caller.\",\n );\n }\n\n case \"ArrayExpression\":\n node.type = \"ArrayPattern\";\n this.toAssignableList(\n node.elements,\n node.extra?.trailingCommaLoc,\n isLHS,\n );\n break;\n\n case \"AssignmentExpression\":\n if (node.operator !== \"=\") {\n this.raise(Errors.MissingEqInAssignment, { at: node.left.loc.end });\n }\n\n node.type = \"AssignmentPattern\";\n delete node.operator;\n this.toAssignable(node.left, isLHS);\n break;\n\n case \"ParenthesizedExpression\":\n /*::invariant (parenthesized !== undefined) */\n this.toAssignable(parenthesized, isLHS);\n break;\n\n default:\n // We don't know how to deal with this node. It will\n // be reported by a later call to checkLVal\n }\n }\n\n toAssignableObjectExpressionProp(\n prop: Node,\n isLast: boolean,\n isLHS: boolean,\n ) {\n if (prop.type === \"ObjectMethod\") {\n this.raise(\n prop.kind === \"get\" || prop.kind === \"set\"\n ? Errors.PatternHasAccessor\n : Errors.PatternHasMethod,\n { at: prop.key },\n );\n } else if (prop.type === \"SpreadElement\") {\n prop.type = \"RestElement\";\n const arg = prop.argument;\n this.checkToRestConversion(arg, /* allowPattern */ false);\n this.toAssignable(arg, isLHS);\n\n if (!isLast) {\n this.raise(Errors.RestTrailingComma, { at: prop });\n }\n } else {\n this.toAssignable(prop, isLHS);\n }\n }\n\n // Convert list of expression atoms to binding list.\n\n toAssignableList(\n exprList: Expression[],\n trailingCommaLoc: Position | undefined | null,\n isLHS: boolean,\n ): void {\n const end = exprList.length - 1;\n\n for (let i = 0; i <= end; i++) {\n const elt = exprList[i];\n if (!elt) continue;\n\n if (elt.type === \"SpreadElement\") {\n elt.type = \"RestElement\";\n const arg = elt.argument;\n this.checkToRestConversion(arg, /* allowPattern */ true);\n this.toAssignable(arg, isLHS);\n } else {\n this.toAssignable(elt, isLHS);\n }\n\n if (elt.type === \"RestElement\") {\n if (i < end) {\n this.raise(Errors.RestTrailingComma, { at: elt });\n } else if (trailingCommaLoc) {\n this.raise(Errors.RestTrailingComma, { at: trailingCommaLoc });\n }\n }\n }\n }\n\n isAssignable(node: Node, isBinding?: boolean): boolean {\n switch (node.type) {\n case \"Identifier\":\n case \"ObjectPattern\":\n case \"ArrayPattern\":\n case \"AssignmentPattern\":\n case \"RestElement\":\n return true;\n\n case \"ObjectExpression\": {\n const last = node.properties.length - 1;\n return (node.properties as ObjectExpression[\"properties\"]).every(\n (prop, i) => {\n return (\n prop.type !== \"ObjectMethod\" &&\n (i === last || prop.type !== \"SpreadElement\") &&\n this.isAssignable(prop)\n );\n },\n );\n }\n\n case \"ObjectProperty\":\n return this.isAssignable(node.value);\n\n case \"SpreadElement\":\n return this.isAssignable(node.argument);\n\n case \"ArrayExpression\":\n return (node as ArrayExpression).elements.every(\n element => element === null || this.isAssignable(element),\n );\n\n case \"AssignmentExpression\":\n return node.operator === \"=\";\n\n case \"ParenthesizedExpression\":\n return this.isAssignable(node.expression);\n\n case \"MemberExpression\":\n case \"OptionalMemberExpression\":\n return !isBinding;\n\n default:\n return false;\n }\n }\n\n // Convert list of expression atoms to a list of\n\n toReferencedList(\n exprList: ReadonlyArray<Expression | undefined | null>,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n isParenthesizedExpr?: boolean,\n ): ReadonlyArray<Expression | undefined | null> {\n return exprList;\n }\n\n toReferencedListDeep(\n exprList: ReadonlyArray<Expression | undefined | null>,\n isParenthesizedExpr?: boolean,\n ): void {\n this.toReferencedList(exprList, isParenthesizedExpr);\n\n for (const expr of exprList) {\n if (expr?.type === \"ArrayExpression\") {\n this.toReferencedListDeep(expr.elements);\n }\n }\n }\n\n // Parses spread element.\n\n parseSpread(\n this: Parser,\n refExpressionErrors?: ExpressionErrors | null,\n ): SpreadElement {\n const node = this.startNode<SpreadElement>();\n this.next();\n node.argument = this.parseMaybeAssignAllowIn(\n refExpressionErrors,\n undefined,\n );\n return this.finishNode(node, \"SpreadElement\");\n }\n\n // https://tc39.es/ecma262/#prod-BindingRestProperty\n // https://tc39.es/ecma262/#prod-BindingRestElement\n parseRestBinding(this: Parser): RestElement {\n const node = this.startNode<RestElement>();\n this.next(); // eat `...`\n node.argument = this.parseBindingAtom();\n return this.finishNode(node, \"RestElement\");\n }\n\n // Parses lvalue (assignable) atom.\n parseBindingAtom(this: Parser): Pattern {\n // https://tc39.es/ecma262/#prod-BindingPattern\n switch (this.state.type) {\n case tt.bracketL: {\n const node = this.startNode<ArrayPattern>();\n this.next();\n // @ts-expect-error: Fixme: TSParameterProperty can not be assigned to node.elements\n node.elements = this.parseBindingList(\n tt.bracketR,\n charCodes.rightSquareBracket,\n ParseBindingListFlags.ALLOW_EMPTY,\n );\n return this.finishNode(node, \"ArrayPattern\");\n }\n\n case tt.braceL:\n return this.parseObjectLike(tt.braceR, true);\n }\n\n // https://tc39.es/ecma262/#prod-BindingIdentifier\n return this.parseIdentifier();\n }\n\n // https://tc39.es/ecma262/#prod-BindingElementList\n parseBindingList(\n this: Parser,\n close: TokenType,\n closeCharCode: (typeof charCodes)[keyof typeof charCodes],\n flags: ParseBindingListFlags,\n ): Array<Pattern | TSParameterProperty> {\n const allowEmpty = flags & ParseBindingListFlags.ALLOW_EMPTY;\n\n const elts: Array<Pattern | TSParameterProperty> = [];\n let first = true;\n while (!this.eat(close)) {\n if (first) {\n first = false;\n } else {\n this.expect(tt.comma);\n }\n if (allowEmpty && this.match(tt.comma)) {\n elts.push(null);\n } else if (this.eat(close)) {\n break;\n } else if (this.match(tt.ellipsis)) {\n elts.push(\n this.parseAssignableListItemTypes(this.parseRestBinding(), flags),\n );\n if (!this.checkCommaAfterRest(closeCharCode)) {\n this.expect(close);\n break;\n }\n } else {\n const decorators = [];\n if (this.match(tt.at) && this.hasPlugin(\"decorators\")) {\n this.raise(Errors.UnsupportedParameterDecorator, {\n at: this.state.startLoc,\n });\n }\n // invariant: hasPlugin(\"decorators-legacy\")\n while (this.match(tt.at)) {\n decorators.push(this.parseDecorator());\n }\n elts.push(this.parseAssignableListItem(flags, decorators));\n }\n }\n return elts;\n }\n\n // https://tc39.es/ecma262/#prod-BindingRestProperty\n parseBindingRestProperty(\n this: Parser,\n prop: Undone<RestElement>,\n ): RestElement {\n this.next(); // eat '...'\n // Don't use parseRestBinding() as we only allow Identifier here.\n prop.argument = this.parseIdentifier();\n this.checkCommaAfterRest(charCodes.rightCurlyBrace);\n return this.finishNode(prop, \"RestElement\");\n }\n\n // https://tc39.es/ecma262/#prod-BindingProperty\n parseBindingProperty(this: Parser): ObjectMember | RestElement {\n const prop = this.startNode<ObjectMember | RestElement>();\n const { type, startLoc } = this.state;\n if (type === tt.ellipsis) {\n return this.parseBindingRestProperty(prop as Undone<RestElement>);\n } else if (type === tt.privateName) {\n this.expectPlugin(\"destructuringPrivate\", startLoc);\n this.classScope.usePrivateName(this.state.value, startLoc);\n (prop as Undone<ObjectMember>).key = this.parsePrivateName();\n } else {\n this.parsePropertyName(prop as Undone<ObjectMember>);\n }\n (prop as Undone<ObjectMember>).method = false;\n return this.parseObjPropValue(\n prop as Undone<ObjectMember>,\n startLoc,\n false /* isGenerator */,\n false /* isAsync */,\n true /* isPattern */,\n false /* isAccessor */,\n );\n }\n\n parseAssignableListItem(\n this: Parser,\n flags: ParseBindingListFlags,\n decorators: Decorator[],\n ): Pattern | TSParameterProperty {\n const left = this.parseMaybeDefault();\n this.parseAssignableListItemTypes(left, flags);\n const elt = this.parseMaybeDefault(left.loc.start, left);\n if (decorators.length) {\n left.decorators = decorators;\n }\n return elt;\n }\n\n // Used by flow/typescript plugin to add type annotations to binding elements\n parseAssignableListItemTypes(\n param: Pattern,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n flags: ParseBindingListFlags,\n ): Pattern {\n return param;\n }\n\n // Parses assignment pattern around given atom if possible.\n // https://tc39.es/ecma262/#prod-BindingElement\n parseMaybeDefault(\n this: Parser,\n startLoc?: Position | null,\n left?: Pattern | null,\n ): Pattern {\n startLoc ??= this.state.startLoc;\n left = left ?? this.parseBindingAtom();\n if (!this.eat(tt.eq)) return left;\n\n const node = this.startNodeAt<AssignmentPattern>(startLoc);\n node.left = left;\n node.right = this.parseMaybeAssignAllowIn();\n return this.finishNode(node, \"AssignmentPattern\");\n }\n /**\n * Return information use in determining whether a Node of a given type is an LVal,\n * possibly given certain additional context information.\n *\n * Subclasser notes: This method has kind of a lot of mixed, but related,\n * responsibilities. If we can definitively determine with the information\n * provided that this either *is* or *isn't* a valid `LVal`, then the return\n * value is easy: just return `true` or `false`. However, if it is a valid\n * LVal *ancestor*, and thus its descendants must be subsequently visited to\n * continue the \"investigation\", then this method should return the relevant\n * child key as a `string`. In some special cases, you additionally want to\n * convey that this node should be treated as if it were parenthesized. In\n * that case, a tuple of [key: string, parenthesized: boolean] is returned.\n * The `string`-only return option is actually just a shorthand for:\n * `[key: string, parenthesized: false]`.\n *\n * @param type A Node `type` string\n * @param isUnparenthesizedInAssign\n * Whether the node in question is unparenthesized and its parent\n * is either an assignment pattern or an assignment expression.\n * @param binding\n * The binding operation that is being considered for this potential\n * LVal.\n * @returns `true` or `false` if we can immediately determine whether the node\n * type in question can be treated as an `LVal`.\n * A `string` key to traverse if we must check this child.\n * A `[string, boolean]` tuple if we need to check this child and\n * treat is as parenthesized.\n */\n isValidLVal(\n type: string,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n isUnparenthesizedInAssign: boolean,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n binding: BindingTypes,\n ): string | boolean {\n return getOwn(\n {\n AssignmentPattern: \"left\",\n RestElement: \"argument\",\n ObjectProperty: \"value\",\n ParenthesizedExpression: \"expression\",\n ArrayPattern: \"elements\",\n ObjectPattern: \"properties\",\n },\n // @ts-expect-error refine string to enum\n type,\n );\n }\n\n // Overridden by the estree plugin\n isOptionalMemberExpression(expression: Node) {\n return expression.type === \"OptionalMemberExpression\";\n }\n\n /**\n * Verify that a target expression is an lval (something that can be assigned to).\n *\n * @param expression The expression in question to check.\n * @param options A set of options described below.\n * @param options.in\n * The relevant ancestor to provide context information for the error\n * if the check fails.\n * @param options.binding\n * The desired binding type. If the given expression is an identifier\n * and `binding` is not `BindingFlag.TYPE_NONE`, `checkLVal` will register binding\n * to the parser scope See also `src/util/scopeflags.js`\n * @param options.checkClashes\n * An optional string set to check if an identifier name is included.\n * `checkLVal` will add checked identifier name to `checkClashes` It is\n * used in tracking duplicates in function parameter lists. If it is\n * false, `checkLVal` will skip duplicate checks\n * @param options.strictModeChanged\n * Whether an identifier has been parsed in a sloppy context but should\n * be reinterpreted as strict-mode. e.g. `(arguments) => { \"use strict \"}`\n * @param options.hasParenthesizedAncestor\n * This is only used internally during recursive calls, and you should\n * not have to set it yourself.\n */\n\n checkLVal(\n expression: Expression | ObjectMember | RestElement,\n {\n in: ancestor,\n binding = BindingFlag.TYPE_NONE,\n checkClashes = false,\n strictModeChanged = false,\n hasParenthesizedAncestor = false,\n }: {\n in: LValAncestor;\n binding?: BindingTypes;\n checkClashes?: Set<string> | false;\n strictModeChanged?: boolean;\n hasParenthesizedAncestor?: boolean;\n },\n ): void {\n const type = expression.type;\n\n // If we find here an ObjectMethod, it's because this was originally\n // an ObjectExpression which has then been converted.\n // toAssignable already reported this error with a nicer message.\n if (this.isObjectMethod(expression)) return;\n\n const isOptionalMemberExpression =\n this.isOptionalMemberExpression(expression);\n\n if (isOptionalMemberExpression || type === \"MemberExpression\") {\n if (isOptionalMemberExpression) {\n this.expectPlugin(\"optionalChainingAssign\", expression.loc.start);\n if (ancestor.type !== \"AssignmentExpression\") {\n this.raise(Errors.InvalidLhsOptionalChaining, {\n at: expression,\n ancestor,\n });\n }\n }\n\n if (binding !== BindingFlag.TYPE_NONE) {\n this.raise(Errors.InvalidPropertyBindingPattern, { at: expression });\n }\n return;\n }\n\n if (type === \"Identifier\") {\n this.checkIdentifier(\n expression as Identifier,\n binding,\n strictModeChanged,\n );\n\n const { name } = expression as Identifier;\n\n if (checkClashes) {\n if (checkClashes.has(name)) {\n this.raise(Errors.ParamDupe, { at: expression });\n } else {\n checkClashes.add(name);\n }\n }\n\n return;\n }\n\n const validity = this.isValidLVal(\n type,\n !(hasParenthesizedAncestor || expression.extra?.parenthesized) &&\n ancestor.type === \"AssignmentExpression\",\n binding,\n );\n\n if (validity === true) return;\n if (validity === false) {\n const ParseErrorClass =\n binding === BindingFlag.TYPE_NONE\n ? Errors.InvalidLhs\n : Errors.InvalidLhsBinding;\n\n this.raise(ParseErrorClass, { at: expression, ancestor });\n return;\n }\n\n const [key, isParenthesizedExpression] = Array.isArray(validity)\n ? validity\n : [validity, type === \"ParenthesizedExpression\"];\n const nextAncestor =\n type === \"ArrayPattern\" || type === \"ObjectPattern\"\n ? ({ type } as const)\n : ancestor;\n\n // @ts-expect-error key may not index expression.\n for (const child of [].concat(expression[key])) {\n if (child) {\n this.checkLVal(child, {\n in: nextAncestor,\n binding,\n checkClashes,\n strictModeChanged,\n hasParenthesizedAncestor: isParenthesizedExpression,\n });\n }\n }\n }\n\n checkIdentifier(\n at: Identifier,\n bindingType: BindingTypes,\n strictModeChanged: boolean = false,\n ) {\n if (\n this.state.strict &&\n (strictModeChanged\n ? isStrictBindReservedWord(at.name, this.inModule)\n : isStrictBindOnlyReservedWord(at.name))\n ) {\n if (bindingType === BindingFlag.TYPE_NONE) {\n this.raise(Errors.StrictEvalArguments, { at, referenceName: at.name });\n } else {\n this.raise(Errors.StrictEvalArgumentsBinding, {\n at,\n bindingName: at.name,\n });\n }\n }\n\n if (bindingType & BindingFlag.FLAG_NO_LET_IN_LEXICAL && at.name === \"let\") {\n this.raise(Errors.LetInLexicalBinding, { at });\n }\n\n if (!(bindingType & BindingFlag.TYPE_NONE)) {\n this.declareNameFromIdentifier(at, bindingType);\n }\n }\n\n declareNameFromIdentifier(identifier: Identifier, binding: BindingTypes) {\n this.scope.declareName(identifier.name, binding, identifier.loc.start);\n }\n\n checkToRestConversion(node: Node, allowPattern: boolean): void {\n switch (node.type) {\n case \"ParenthesizedExpression\":\n this.checkToRestConversion(node.expression, allowPattern);\n break;\n case \"Identifier\":\n case \"MemberExpression\":\n break;\n case \"ArrayExpression\":\n case \"ObjectExpression\":\n if (allowPattern) break;\n /* falls through */\n default:\n this.raise(Errors.InvalidRestAssignmentPattern, { at: node });\n }\n }\n\n checkCommaAfterRest(\n close: (typeof charCodes)[keyof typeof charCodes],\n ): boolean {\n if (!this.match(tt.comma)) {\n return false;\n }\n\n this.raise(\n this.lookaheadCharCode() === close\n ? Errors.RestTrailingComma\n : Errors.ElementAfterRest,\n { at: this.state.startLoc },\n );\n\n return true;\n }\n}\n","/*:: declare var invariant; */\n\nimport type State from \"../../tokenizer/state.ts\";\nimport {\n tokenIsIdentifier,\n tokenIsTSDeclarationStart,\n tokenIsTSTypeOperator,\n tokenOperatorPrecedence,\n tokenIsKeywordOrIdentifier,\n tt,\n type TokenType,\n tokenIsTemplate,\n tokenCanStartExpression,\n} from \"../../tokenizer/types.ts\";\nimport { types as tc } from \"../../tokenizer/context.ts\";\nimport type * as N from \"../../types.ts\";\nimport type { Position } from \"../../util/location.ts\";\nimport { createPositionWithColumnOffset } from \"../../util/location.ts\";\nimport type Parser from \"../../parser/index.ts\";\nimport {\n type BindingTypes,\n ScopeFlag,\n BindingFlag,\n} from \"../../util/scopeflags.ts\";\nimport TypeScriptScopeHandler from \"./scope.ts\";\nimport * as charCodes from \"charcodes\";\nimport type { ExpressionErrors } from \"../../parser/util.ts\";\nimport type { ParseStatementFlag } from \"../../parser/statement.ts\";\nimport { PARAM } from \"../../util/production-parameter.ts\";\nimport { Errors, ParseErrorEnum } from \"../../parse-error.ts\";\nimport { cloneIdentifier, type Undone } from \"../../parser/node.ts\";\nimport type { Pattern } from \"../../types.ts\";\nimport type { Expression } from \"../../types.ts\";\nimport type { IJSXParserMixin } from \"../jsx/index.ts\";\nimport { ParseBindingListFlags } from \"../../parser/lval.ts\";\n\nconst getOwn = <T extends {}>(object: T, key: keyof T) =>\n Object.hasOwnProperty.call(object, key) && object[key];\n\ntype TsModifier =\n | \"readonly\"\n | \"abstract\"\n | \"declare\"\n | \"static\"\n | \"override\"\n | \"const\"\n | N.Accessibility\n | N.VarianceAnnotations;\n\nfunction nonNull<T>(x?: T | null): T {\n if (x == null) {\n throw new Error(`Unexpected ${x} value.`);\n }\n return x;\n}\n\nfunction assert(x: boolean): void {\n if (!x) {\n throw new Error(\"Assert fail\");\n }\n}\n\ntype ParsingContext =\n | \"EnumMembers\"\n | \"HeritageClauseElement\"\n | \"TupleElementTypes\"\n | \"TypeMembers\"\n | \"TypeParametersOrArguments\";\n\ntype ModifierBase = {\n accessibility?: N.Accessibility;\n} & {\n [key in TsModifier]?: boolean | undefined | null;\n};\n\n/* eslint sort-keys: \"error\" */\nconst TSErrors = ParseErrorEnum`typescript`({\n AbstractMethodHasImplementation: ({ methodName }: { methodName: string }) =>\n `Method '${methodName}' cannot have an implementation because it is marked abstract.`,\n AbstractPropertyHasInitializer: ({\n propertyName,\n }: {\n propertyName: string;\n }) =>\n `Property '${propertyName}' cannot have an initializer because it is marked abstract.`,\n // TODO: Accesor -> Accessor\n AccesorCannotDeclareThisParameter:\n \"'get' and 'set' accessors cannot declare 'this' parameters.\",\n AccesorCannotHaveTypeParameters: \"An accessor cannot have type parameters.\",\n AccessorCannotBeOptional:\n \"An 'accessor' property cannot be declared optional.\",\n ClassMethodHasDeclare: \"Class methods cannot have the 'declare' modifier.\",\n ClassMethodHasReadonly: \"Class methods cannot have the 'readonly' modifier.\",\n ConstInitiailizerMustBeStringOrNumericLiteralOrLiteralEnumReference:\n \"A 'const' initializer in an ambient context must be a string or numeric literal or literal enum reference.\",\n ConstructorHasTypeParameters:\n \"Type parameters cannot appear on a constructor declaration.\",\n DeclareAccessor: ({ kind }: { kind: \"get\" | \"set\" }) =>\n `'declare' is not allowed in ${kind}ters.`,\n DeclareClassFieldHasInitializer:\n \"Initializers are not allowed in ambient contexts.\",\n DeclareFunctionHasImplementation:\n \"An implementation cannot be declared in ambient contexts.\",\n DuplicateAccessibilityModifier:\n // `Accessibility modifier already seen: ${modifier}` would be more helpful.\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n ({ modifier }: { modifier: N.Accessibility }) =>\n `Accessibility modifier already seen.`,\n DuplicateModifier: ({ modifier }: { modifier: TsModifier }) =>\n `Duplicate modifier: '${modifier}'.`,\n // `token` matches the terminology used by typescript:\n // https://github.com/microsoft/TypeScript/blob/main/src/compiler/types.ts#L2915\n EmptyHeritageClauseType: ({ token }: { token: \"extends\" | \"implements\" }) =>\n `'${token}' list cannot be empty.`,\n EmptyTypeArguments: \"Type argument list cannot be empty.\",\n EmptyTypeParameters: \"Type parameter list cannot be empty.\",\n ExpectedAmbientAfterExportDeclare:\n \"'export declare' must be followed by an ambient declaration.\",\n ImportAliasHasImportType: \"An import alias can not use 'import type'.\",\n ImportReflectionHasImportType:\n \"An `import module` declaration can not use `type` modifier\",\n IncompatibleModifiers: ({\n modifiers,\n }: {\n modifiers: [TsModifier, TsModifier];\n }) =>\n `'${modifiers[0]}' modifier cannot be used with '${modifiers[1]}' modifier.`,\n IndexSignatureHasAbstract:\n \"Index signatures cannot have the 'abstract' modifier.\",\n IndexSignatureHasAccessibility: ({\n modifier,\n }: {\n modifier: N.Accessibility;\n }) =>\n `Index signatures cannot have an accessibility modifier ('${modifier}').`,\n IndexSignatureHasDeclare:\n \"Index signatures cannot have the 'declare' modifier.\",\n IndexSignatureHasOverride:\n \"'override' modifier cannot appear on an index signature.\",\n IndexSignatureHasStatic:\n \"Index signatures cannot have the 'static' modifier.\",\n InitializerNotAllowedInAmbientContext:\n \"Initializers are not allowed in ambient contexts.\",\n InvalidModifierOnTypeMember: ({ modifier }: { modifier: TsModifier }) =>\n `'${modifier}' modifier cannot appear on a type member.`,\n InvalidModifierOnTypeParameter: ({ modifier }: { modifier: TsModifier }) =>\n `'${modifier}' modifier cannot appear on a type parameter.`,\n InvalidModifierOnTypeParameterPositions: ({\n modifier,\n }: {\n modifier: TsModifier;\n }) =>\n `'${modifier}' modifier can only appear on a type parameter of a class, interface or type alias.`,\n InvalidModifiersOrder: ({\n orderedModifiers,\n }: {\n orderedModifiers: [TsModifier, TsModifier];\n }) =>\n `'${orderedModifiers[0]}' modifier must precede '${orderedModifiers[1]}' modifier.`,\n InvalidPropertyAccessAfterInstantiationExpression:\n \"Invalid property access after an instantiation expression. \" +\n \"You can either wrap the instantiation expression in parentheses, or delete the type arguments.\",\n InvalidTupleMemberLabel:\n \"Tuple members must be labeled with a simple identifier.\",\n MissingInterfaceName:\n \"'interface' declarations must be followed by an identifier.\",\n NonAbstractClassHasAbstractMethod:\n \"Abstract methods can only appear within an abstract class.\",\n NonClassMethodPropertyHasAbstractModifer:\n \"'abstract' modifier can only appear on a class, method, or property declaration.\",\n OptionalTypeBeforeRequired:\n \"A required element cannot follow an optional element.\",\n OverrideNotInSubClass:\n \"This member cannot have an 'override' modifier because its containing class does not extend another class.\",\n PatternIsOptional:\n \"A binding pattern parameter cannot be optional in an implementation signature.\",\n PrivateElementHasAbstract:\n \"Private elements cannot have the 'abstract' modifier.\",\n PrivateElementHasAccessibility: ({\n modifier,\n }: {\n modifier: N.Accessibility;\n }) =>\n `Private elements cannot have an accessibility modifier ('${modifier}').`,\n ReadonlyForMethodSignature:\n \"'readonly' modifier can only appear on a property declaration or index signature.\",\n ReservedArrowTypeParam:\n \"This syntax is reserved in files with the .mts or .cts extension. Add a trailing comma, as in `<T,>() => ...`.\",\n ReservedTypeAssertion:\n \"This syntax is reserved in files with the .mts or .cts extension. Use an `as` expression instead.\",\n // TODO: Accesor -> Accessor\n SetAccesorCannotHaveOptionalParameter:\n \"A 'set' accessor cannot have an optional parameter.\",\n SetAccesorCannotHaveRestParameter:\n \"A 'set' accessor cannot have rest parameter.\",\n SetAccesorCannotHaveReturnType:\n \"A 'set' accessor cannot have a return type annotation.\",\n SingleTypeParameterWithoutTrailingComma: ({\n typeParameterName,\n }: {\n typeParameterName: string;\n }) =>\n `Single type parameter ${typeParameterName} should have a trailing comma. Example usage: <${typeParameterName},>.`,\n StaticBlockCannotHaveModifier:\n \"Static class blocks cannot have any modifier.\",\n TupleOptionalAfterType:\n \"A labeled tuple optional element must be declared using a question mark after the name and before the colon (`name?: type`), rather than after the type (`name: type?`).\",\n TypeAnnotationAfterAssign:\n \"Type annotations must come before default assignments, e.g. instead of `age = 25: number` use `age: number = 25`.\",\n TypeImportCannotSpecifyDefaultAndNamed:\n \"A type-only import can specify a default import or named bindings, but not both.\",\n TypeModifierIsUsedInTypeExports:\n \"The 'type' modifier cannot be used on a named export when 'export type' is used on its export statement.\",\n TypeModifierIsUsedInTypeImports:\n \"The 'type' modifier cannot be used on a named import when 'import type' is used on its import statement.\",\n UnexpectedParameterModifier:\n \"A parameter property is only allowed in a constructor implementation.\",\n UnexpectedReadonly:\n \"'readonly' type modifier is only permitted on array and tuple literal types.\",\n UnexpectedTypeAnnotation: \"Did not expect a type annotation here.\",\n UnexpectedTypeCastInParameter: \"Unexpected type cast in parameter position.\",\n UnsupportedImportTypeArgument:\n \"Argument in a type import must be a string literal.\",\n UnsupportedParameterPropertyKind:\n \"A parameter property may not be declared using a binding pattern.\",\n UnsupportedSignatureParameterKind: ({ type }: { type: string }) =>\n `Name in a signature must be an Identifier, ObjectPattern or ArrayPattern, instead got ${type}.`,\n});\n\n/* eslint-disable sort-keys */\n\n// Doesn't handle \"void\" or \"null\" because those are keywords, not identifiers.\n// It also doesn't handle \"intrinsic\", since usually it's not a keyword.\nfunction keywordTypeFromName(value: string): N.TsKeywordTypeType | undefined {\n switch (value) {\n case \"any\":\n return \"TSAnyKeyword\";\n case \"boolean\":\n return \"TSBooleanKeyword\";\n case \"bigint\":\n return \"TSBigIntKeyword\";\n case \"never\":\n return \"TSNeverKeyword\";\n case \"number\":\n return \"TSNumberKeyword\";\n case \"object\":\n return \"TSObjectKeyword\";\n case \"string\":\n return \"TSStringKeyword\";\n case \"symbol\":\n return \"TSSymbolKeyword\";\n case \"undefined\":\n return \"TSUndefinedKeyword\";\n case \"unknown\":\n return \"TSUnknownKeyword\";\n default:\n return undefined;\n }\n}\n\nfunction tsIsAccessModifier(modifier: string): modifier is N.Accessibility {\n return (\n modifier === \"private\" || modifier === \"public\" || modifier === \"protected\"\n );\n}\n\nfunction tsIsVarianceAnnotations(\n modifier: string,\n): modifier is N.VarianceAnnotations {\n return modifier === \"in\" || modifier === \"out\";\n}\n\ntype ClassWithMixin<\n T extends new (...args: any) => any,\n M extends object,\n> = T extends new (...args: infer P) => infer I\n ? new (...args: P) => I & M\n : never;\n\nexport default (superClass: ClassWithMixin<typeof Parser, IJSXParserMixin>) =>\n class TypeScriptParserMixin extends superClass implements Parser {\n getScopeHandler(): {\n new (...args: any): TypeScriptScopeHandler;\n } {\n return TypeScriptScopeHandler;\n }\n\n tsIsIdentifier(): boolean {\n // TODO: actually a bit more complex in TypeScript, but shouldn't matter.\n // See https://github.com/Microsoft/TypeScript/issues/15008\n return tokenIsIdentifier(this.state.type);\n }\n\n tsTokenCanFollowModifier() {\n return (\n (this.match(tt.bracketL) ||\n this.match(tt.braceL) ||\n this.match(tt.star) ||\n this.match(tt.ellipsis) ||\n this.match(tt.privateName) ||\n this.isLiteralPropertyName()) &&\n !this.hasPrecedingLineBreak()\n );\n }\n\n tsNextTokenCanFollowModifier() {\n // Note: TypeScript's implementation is much more complicated because\n // more things are considered modifiers there.\n // This implementation only handles modifiers not handled by @babel/parser itself. And \"static\".\n // TODO: Would be nice to avoid lookahead. Want a hasLineBreakUpNext() method...\n this.next();\n return this.tsTokenCanFollowModifier();\n }\n\n /** Parses a modifier matching one the given modifier names. */\n tsParseModifier<T extends TsModifier>(\n allowedModifiers: T[],\n stopOnStartOfClassStaticBlock?: boolean,\n ): T | undefined | null {\n if (\n !tokenIsIdentifier(this.state.type) &&\n this.state.type !== tt._in &&\n this.state.type !== tt._const\n ) {\n return undefined;\n }\n\n const modifier = this.state.value;\n if (allowedModifiers.indexOf(modifier) !== -1) {\n if (stopOnStartOfClassStaticBlock && this.tsIsStartOfStaticBlocks()) {\n return undefined;\n }\n if (this.tsTryParse(this.tsNextTokenCanFollowModifier.bind(this))) {\n return modifier;\n }\n }\n return undefined;\n }\n\n /** Parses a list of modifiers, in any order.\n * If you need a specific order, you must call this function multiple times:\n * this.tsParseModifiers({ modified: node, allowedModifiers: [\"public\"] });\n * this.tsParseModifiers({ modified: node, allowedModifiers: [\"abstract\", \"readonly\"] });\n */\n tsParseModifiers<N extends ModifierBase>(\n {\n allowedModifiers,\n disallowedModifiers,\n stopOnStartOfClassStaticBlock,\n errorTemplate = TSErrors.InvalidModifierOnTypeMember,\n }: {\n allowedModifiers: readonly TsModifier[];\n disallowedModifiers?: TsModifier[];\n stopOnStartOfClassStaticBlock?: boolean;\n errorTemplate?: typeof TSErrors.InvalidModifierOnTypeMember;\n },\n modified: N,\n ): void {\n const enforceOrder = (\n loc: Position,\n modifier: TsModifier,\n before: TsModifier,\n after: TsModifier,\n ) => {\n if (modifier === before && modified[after]) {\n this.raise(TSErrors.InvalidModifiersOrder, {\n at: loc,\n orderedModifiers: [before, after],\n });\n }\n };\n const incompatible = (\n loc: Position,\n modifier: TsModifier,\n mod1: TsModifier,\n mod2: TsModifier,\n ) => {\n if (\n (modified[mod1] && modifier === mod2) ||\n (modified[mod2] && modifier === mod1)\n ) {\n this.raise(TSErrors.IncompatibleModifiers, {\n at: loc,\n modifiers: [mod1, mod2],\n });\n }\n };\n\n for (;;) {\n const { startLoc } = this.state;\n const modifier: TsModifier | undefined | null = this.tsParseModifier(\n allowedModifiers.concat(disallowedModifiers ?? []),\n stopOnStartOfClassStaticBlock,\n );\n\n if (!modifier) break;\n\n if (tsIsAccessModifier(modifier)) {\n if (modified.accessibility) {\n this.raise(TSErrors.DuplicateAccessibilityModifier, {\n at: startLoc,\n modifier,\n });\n } else {\n enforceOrder(startLoc, modifier, modifier, \"override\");\n enforceOrder(startLoc, modifier, modifier, \"static\");\n enforceOrder(startLoc, modifier, modifier, \"readonly\");\n\n modified.accessibility = modifier;\n }\n } else if (tsIsVarianceAnnotations(modifier)) {\n if (modified[modifier]) {\n this.raise(TSErrors.DuplicateModifier, { at: startLoc, modifier });\n }\n modified[modifier] = true;\n\n enforceOrder(startLoc, modifier, \"in\", \"out\");\n } else {\n if (Object.hasOwnProperty.call(modified, modifier)) {\n this.raise(TSErrors.DuplicateModifier, { at: startLoc, modifier });\n } else {\n enforceOrder(startLoc, modifier, \"static\", \"readonly\");\n enforceOrder(startLoc, modifier, \"static\", \"override\");\n enforceOrder(startLoc, modifier, \"override\", \"readonly\");\n enforceOrder(startLoc, modifier, \"abstract\", \"override\");\n\n incompatible(startLoc, modifier, \"declare\", \"override\");\n incompatible(startLoc, modifier, \"static\", \"abstract\");\n }\n modified[modifier] = true;\n }\n\n if (disallowedModifiers?.includes(modifier)) {\n this.raise(errorTemplate, {\n at: startLoc,\n modifier,\n });\n }\n }\n }\n\n tsIsListTerminator(kind: ParsingContext): boolean {\n switch (kind) {\n case \"EnumMembers\":\n case \"TypeMembers\":\n return this.match(tt.braceR);\n case \"HeritageClauseElement\":\n return this.match(tt.braceL);\n case \"TupleElementTypes\":\n return this.match(tt.bracketR);\n case \"TypeParametersOrArguments\":\n return this.match(tt.gt);\n }\n }\n\n tsParseList<T extends N.Node>(\n kind: ParsingContext,\n parseElement: () => T,\n ): T[] {\n const result: T[] = [];\n while (!this.tsIsListTerminator(kind)) {\n // Skipping \"parseListElement\" from the TS source since that's just for error handling.\n result.push(parseElement());\n }\n return result;\n }\n\n tsParseDelimitedList<T extends N.Node>(\n kind: ParsingContext,\n parseElement: () => T,\n refTrailingCommaPos?: {\n value: number;\n },\n ): T[] {\n return nonNull(\n this.tsParseDelimitedListWorker(\n kind,\n parseElement,\n /* expectSuccess */ true,\n refTrailingCommaPos,\n ),\n );\n }\n\n /**\n * If !expectSuccess, returns undefined instead of failing to parse.\n * If expectSuccess, parseElement should always return a defined value.\n */\n tsParseDelimitedListWorker<T extends N.Node>(\n kind: ParsingContext,\n parseElement: () => T | undefined | null,\n expectSuccess: boolean,\n refTrailingCommaPos?: {\n value: number;\n },\n ): T[] | undefined | null {\n const result = [];\n let trailingCommaPos = -1;\n\n for (;;) {\n if (this.tsIsListTerminator(kind)) {\n break;\n }\n trailingCommaPos = -1;\n\n const element = parseElement();\n if (element == null) {\n return undefined;\n }\n result.push(element);\n\n if (this.eat(tt.comma)) {\n trailingCommaPos = this.state.lastTokStart;\n continue;\n }\n\n if (this.tsIsListTerminator(kind)) {\n break;\n }\n\n if (expectSuccess) {\n // This will fail with an error about a missing comma\n this.expect(tt.comma);\n }\n return undefined;\n }\n\n if (refTrailingCommaPos) {\n refTrailingCommaPos.value = trailingCommaPos;\n }\n\n return result;\n }\n\n tsParseBracketedList<T extends N.Node>(\n kind: ParsingContext,\n parseElement: () => T,\n bracket: boolean,\n skipFirstToken: boolean,\n refTrailingCommaPos?: {\n value: number;\n },\n ): T[] {\n if (!skipFirstToken) {\n if (bracket) {\n this.expect(tt.bracketL);\n } else {\n this.expect(tt.lt);\n }\n }\n\n const result = this.tsParseDelimitedList(\n kind,\n parseElement,\n refTrailingCommaPos,\n );\n\n if (bracket) {\n this.expect(tt.bracketR);\n } else {\n this.expect(tt.gt);\n }\n\n return result;\n }\n\n tsParseImportType(): N.TsImportType {\n const node = this.startNode<N.TsImportType>();\n this.expect(tt._import);\n this.expect(tt.parenL);\n if (!this.match(tt.string)) {\n this.raise(TSErrors.UnsupportedImportTypeArgument, {\n at: this.state.startLoc,\n });\n }\n\n // For compatibility to estree we cannot call parseLiteral directly here\n node.argument = super.parseExprAtom() as N.StringLiteral;\n this.expect(tt.parenR);\n\n if (this.eat(tt.dot)) {\n // In this instance, the entity name will actually itself be a\n // qualifier, so allow it to be a reserved word as well.\n node.qualifier = this.tsParseEntityName();\n }\n if (this.match(tt.lt)) {\n node.typeParameters = this.tsParseTypeArguments();\n }\n return this.finishNode(node, \"TSImportType\");\n }\n\n tsParseEntityName(allowReservedWords: boolean = true): N.TsEntityName {\n let entity: N.TsEntityName = this.parseIdentifier(allowReservedWords);\n while (this.eat(tt.dot)) {\n const node: Undone<N.TsQualifiedName> =\n this.startNodeAtNode<N.TsQualifiedName>(entity);\n node.left = entity;\n node.right = this.parseIdentifier(allowReservedWords);\n entity = this.finishNode(node, \"TSQualifiedName\");\n }\n return entity;\n }\n\n tsParseTypeReference(): N.TsTypeReference {\n const node = this.startNode<N.TsTypeReference>();\n node.typeName = this.tsParseEntityName();\n if (!this.hasPrecedingLineBreak() && this.match(tt.lt)) {\n node.typeParameters = this.tsParseTypeArguments();\n }\n return this.finishNode(node, \"TSTypeReference\");\n }\n\n tsParseThisTypePredicate(lhs: N.TsThisType): N.TsTypePredicate {\n this.next();\n const node = this.startNodeAtNode<N.TsTypePredicate>(lhs);\n node.parameterName = lhs;\n node.typeAnnotation = this.tsParseTypeAnnotation(/* eatColon */ false);\n node.asserts = false;\n return this.finishNode(node, \"TSTypePredicate\");\n }\n\n tsParseThisTypeNode(): N.TsThisType {\n const node = this.startNode<N.TsThisType>();\n this.next();\n return this.finishNode(node, \"TSThisType\");\n }\n\n tsParseTypeQuery(): N.TsTypeQuery {\n const node = this.startNode<N.TsTypeQuery>();\n this.expect(tt._typeof);\n if (this.match(tt._import)) {\n node.exprName = this.tsParseImportType();\n } else {\n node.exprName = this.tsParseEntityName();\n }\n if (!this.hasPrecedingLineBreak() && this.match(tt.lt)) {\n node.typeParameters = this.tsParseTypeArguments();\n }\n return this.finishNode(node, \"TSTypeQuery\");\n }\n\n tsParseInOutModifiers = this.tsParseModifiers.bind(this, {\n allowedModifiers: [\"in\", \"out\"],\n disallowedModifiers: [\n \"const\",\n \"public\",\n \"private\",\n \"protected\",\n \"readonly\",\n \"declare\",\n \"abstract\",\n \"override\",\n ],\n errorTemplate: TSErrors.InvalidModifierOnTypeParameter,\n });\n\n tsParseConstModifier = this.tsParseModifiers.bind(this, {\n allowedModifiers: [\"const\"],\n // for better error recovery\n disallowedModifiers: [\"in\", \"out\"],\n errorTemplate: TSErrors.InvalidModifierOnTypeParameterPositions,\n });\n\n tsParseInOutConstModifiers = this.tsParseModifiers.bind(this, {\n allowedModifiers: [\"in\", \"out\", \"const\"],\n disallowedModifiers: [\n \"public\",\n \"private\",\n \"protected\",\n \"readonly\",\n \"declare\",\n \"abstract\",\n \"override\",\n ],\n errorTemplate: TSErrors.InvalidModifierOnTypeParameter,\n });\n\n tsParseTypeParameter(\n parseModifiers: (node: Undone<N.TsTypeParameter>) => void,\n ): N.TsTypeParameter {\n const node = this.startNode<N.TsTypeParameter>();\n\n parseModifiers(node);\n\n node.name = this.tsParseTypeParameterName();\n node.constraint = this.tsEatThenParseType(tt._extends);\n node.default = this.tsEatThenParseType(tt.eq);\n return this.finishNode(node, \"TSTypeParameter\");\n }\n\n tsTryParseTypeParameters(\n parseModifiers: (node: N.TsTypeParameter) => void,\n ): N.TsTypeParameterDeclaration | undefined | null {\n if (this.match(tt.lt)) {\n return this.tsParseTypeParameters(parseModifiers);\n }\n }\n\n tsParseTypeParameters(parseModifiers: (node: N.TsTypeParameter) => void) {\n const node = this.startNode<N.TsTypeParameterDeclaration>();\n\n if (this.match(tt.lt) || this.match(tt.jsxTagStart)) {\n this.next();\n } else {\n this.unexpected();\n }\n\n const refTrailingCommaPos = { value: -1 };\n\n node.params = this.tsParseBracketedList(\n \"TypeParametersOrArguments\",\n // @ts-expect-error refine typings\n this.tsParseTypeParameter.bind(this, parseModifiers),\n /* bracket */ false,\n /* skipFirstToken */ true,\n refTrailingCommaPos,\n );\n if (node.params.length === 0) {\n this.raise(TSErrors.EmptyTypeParameters, { at: node });\n }\n if (refTrailingCommaPos.value !== -1) {\n this.addExtra(node, \"trailingComma\", refTrailingCommaPos.value);\n }\n return this.finishNode(node, \"TSTypeParameterDeclaration\");\n }\n\n // Note: In TypeScript implementation we must provide `yieldContext` and `awaitContext`,\n // but here it's always false, because this is only used for types.\n tsFillSignature(\n returnToken: TokenType,\n signature: Undone<N.TsSignatureDeclaration>,\n ): void {\n // Arrow fns *must* have return token (`=>`). Normal functions can omit it.\n const returnTokenRequired = returnToken === tt.arrow;\n\n // https://github.com/babel/babel/issues/9231\n const paramsKey = process.env.BABEL_8_BREAKING ? \"params\" : \"parameters\";\n const returnTypeKey = process.env.BABEL_8_BREAKING\n ? \"returnType\"\n : \"typeAnnotation\";\n\n signature.typeParameters = this.tsTryParseTypeParameters(\n this.tsParseConstModifier,\n );\n this.expect(tt.parenL);\n signature[paramsKey] = this.tsParseBindingListForSignature();\n if (returnTokenRequired) {\n signature[returnTypeKey] =\n this.tsParseTypeOrTypePredicateAnnotation(returnToken);\n } else if (this.match(returnToken)) {\n signature[returnTypeKey] =\n this.tsParseTypeOrTypePredicateAnnotation(returnToken);\n }\n }\n\n tsParseBindingListForSignature(): Array<\n N.Identifier | N.RestElement | N.ObjectPattern | N.ArrayPattern\n > {\n const list = super.parseBindingList(\n tt.parenR,\n charCodes.rightParenthesis,\n ParseBindingListFlags.IS_FUNCTION_PARAMS,\n );\n for (const pattern of list) {\n const { type } = pattern;\n if (type === \"AssignmentPattern\" || type === \"TSParameterProperty\") {\n this.raise(TSErrors.UnsupportedSignatureParameterKind, {\n at: pattern,\n type,\n });\n }\n }\n return list as Exclude<\n (typeof list)[0],\n N.AssignmentPattern | N.TSParameterProperty\n >[];\n }\n\n tsParseTypeMemberSemicolon(): void {\n if (!this.eat(tt.comma) && !this.isLineTerminator()) {\n this.expect(tt.semi);\n }\n }\n\n tsParseSignatureMember(\n kind: \"TSCallSignatureDeclaration\" | \"TSConstructSignatureDeclaration\",\n node: Undone<\n N.TsCallSignatureDeclaration | N.TsConstructSignatureDeclaration\n >,\n ): N.TsCallSignatureDeclaration | N.TsConstructSignatureDeclaration {\n this.tsFillSignature(tt.colon, node);\n this.tsParseTypeMemberSemicolon();\n return this.finishNode(node, kind);\n }\n\n tsIsUnambiguouslyIndexSignature() {\n this.next(); // Skip '{'\n if (tokenIsIdentifier(this.state.type)) {\n this.next();\n return this.match(tt.colon);\n }\n return false;\n }\n\n tsTryParseIndexSignature(\n node: Undone<N.TsIndexSignature>,\n ): N.TsIndexSignature | undefined {\n if (\n !(\n this.match(tt.bracketL) &&\n this.tsLookAhead(this.tsIsUnambiguouslyIndexSignature.bind(this))\n )\n ) {\n return;\n }\n\n this.expect(tt.bracketL);\n const id = this.parseIdentifier();\n id.typeAnnotation = this.tsParseTypeAnnotation();\n this.resetEndLocation(id); // set end position to end of type\n\n this.expect(tt.bracketR);\n node.parameters = [id];\n\n const type = this.tsTryParseTypeAnnotation();\n if (type) node.typeAnnotation = type;\n this.tsParseTypeMemberSemicolon();\n return this.finishNode(node, \"TSIndexSignature\");\n }\n\n tsParsePropertyOrMethodSignature(\n node: N.TsPropertySignature | N.TsMethodSignature,\n readonly: boolean,\n ): N.TsPropertySignature | N.TsMethodSignature {\n if (this.eat(tt.question)) node.optional = true;\n const nodeAny: any = node;\n\n if (this.match(tt.parenL) || this.match(tt.lt)) {\n if (readonly) {\n this.raise(TSErrors.ReadonlyForMethodSignature, { at: node });\n }\n const method: N.TsMethodSignature = nodeAny;\n if (method.kind && this.match(tt.lt)) {\n this.raise(TSErrors.AccesorCannotHaveTypeParameters, {\n at: this.state.curPosition(),\n });\n }\n this.tsFillSignature(tt.colon, method);\n this.tsParseTypeMemberSemicolon();\n const paramsKey = process.env.BABEL_8_BREAKING\n ? \"params\"\n : \"parameters\";\n const returnTypeKey = process.env.BABEL_8_BREAKING\n ? \"returnType\"\n : \"typeAnnotation\";\n if (method.kind === \"get\") {\n if (method[paramsKey].length > 0) {\n this.raise(Errors.BadGetterArity, { at: this.state.curPosition() });\n if (this.isThisParam(method[paramsKey][0])) {\n this.raise(TSErrors.AccesorCannotDeclareThisParameter, {\n at: this.state.curPosition(),\n });\n }\n }\n } else if (method.kind === \"set\") {\n if (method[paramsKey].length !== 1) {\n this.raise(Errors.BadSetterArity, { at: this.state.curPosition() });\n } else {\n const firstParameter = method[paramsKey][0];\n if (this.isThisParam(firstParameter)) {\n this.raise(TSErrors.AccesorCannotDeclareThisParameter, {\n at: this.state.curPosition(),\n });\n }\n if (\n firstParameter.type === \"Identifier\" &&\n firstParameter.optional\n ) {\n this.raise(TSErrors.SetAccesorCannotHaveOptionalParameter, {\n at: this.state.curPosition(),\n });\n }\n if (firstParameter.type === \"RestElement\") {\n this.raise(TSErrors.SetAccesorCannotHaveRestParameter, {\n at: this.state.curPosition(),\n });\n }\n }\n if (method[returnTypeKey]) {\n this.raise(TSErrors.SetAccesorCannotHaveReturnType, {\n at: method[returnTypeKey],\n });\n }\n } else {\n method.kind = \"method\";\n }\n return this.finishNode(method, \"TSMethodSignature\");\n } else {\n const property: N.TsPropertySignature = nodeAny;\n if (readonly) property.readonly = true;\n const type = this.tsTryParseTypeAnnotation();\n if (type) property.typeAnnotation = type;\n this.tsParseTypeMemberSemicolon();\n return this.finishNode(property, \"TSPropertySignature\");\n }\n }\n\n tsParseTypeMember(): N.TsTypeElement {\n const node: any = this.startNode();\n\n if (this.match(tt.parenL) || this.match(tt.lt)) {\n return this.tsParseSignatureMember(\"TSCallSignatureDeclaration\", node);\n }\n\n if (this.match(tt._new)) {\n const id = this.startNode<N.Identifier>();\n this.next();\n if (this.match(tt.parenL) || this.match(tt.lt)) {\n return this.tsParseSignatureMember(\n \"TSConstructSignatureDeclaration\",\n node,\n );\n } else {\n node.key = this.createIdentifier(id, \"new\");\n return this.tsParsePropertyOrMethodSignature(node, false);\n }\n }\n\n this.tsParseModifiers(\n {\n allowedModifiers: [\"readonly\"],\n disallowedModifiers: [\n \"declare\",\n \"abstract\",\n \"private\",\n \"protected\",\n \"public\",\n \"static\",\n \"override\",\n ],\n },\n node,\n );\n\n const idx = this.tsTryParseIndexSignature(node);\n if (idx) {\n return idx;\n }\n\n super.parsePropertyName(node);\n if (\n !node.computed &&\n node.key.type === \"Identifier\" &&\n (node.key.name === \"get\" || node.key.name === \"set\") &&\n this.tsTokenCanFollowModifier()\n ) {\n node.kind = node.key.name;\n super.parsePropertyName(node);\n }\n return this.tsParsePropertyOrMethodSignature(node, !!node.readonly);\n }\n\n tsParseTypeLiteral(): N.TsTypeLiteral {\n const node = this.startNode<N.TsTypeLiteral>();\n node.members = this.tsParseObjectTypeMembers();\n return this.finishNode(node, \"TSTypeLiteral\");\n }\n\n tsParseObjectTypeMembers(): Array<N.TsTypeElement> {\n this.expect(tt.braceL);\n const members = this.tsParseList(\n \"TypeMembers\",\n this.tsParseTypeMember.bind(this),\n );\n this.expect(tt.braceR);\n return members;\n }\n\n tsIsStartOfMappedType(): boolean {\n this.next();\n if (this.eat(tt.plusMin)) {\n return this.isContextual(tt._readonly);\n }\n if (this.isContextual(tt._readonly)) {\n this.next();\n }\n if (!this.match(tt.bracketL)) {\n return false;\n }\n this.next();\n if (!this.tsIsIdentifier()) {\n return false;\n }\n this.next();\n return this.match(tt._in);\n }\n\n tsParseMappedTypeParameter(): N.TsTypeParameter {\n const node = this.startNode<N.TsTypeParameter>();\n node.name = this.tsParseTypeParameterName();\n node.constraint = this.tsExpectThenParseType(tt._in);\n return this.finishNode(node, \"TSTypeParameter\");\n }\n\n tsParseMappedType(): N.TsMappedType {\n const node = this.startNode<N.TsMappedType>();\n\n this.expect(tt.braceL);\n\n if (this.match(tt.plusMin)) {\n node.readonly = this.state.value;\n this.next();\n this.expectContextual(tt._readonly);\n } else if (this.eatContextual(tt._readonly)) {\n node.readonly = true;\n }\n\n this.expect(tt.bracketL);\n node.typeParameter = this.tsParseMappedTypeParameter();\n node.nameType = this.eatContextual(tt._as) ? this.tsParseType() : null;\n\n this.expect(tt.bracketR);\n\n if (this.match(tt.plusMin)) {\n node.optional = this.state.value;\n this.next();\n this.expect(tt.question);\n } else if (this.eat(tt.question)) {\n node.optional = true;\n }\n\n node.typeAnnotation = this.tsTryParseType();\n this.semicolon();\n this.expect(tt.braceR);\n\n return this.finishNode(node, \"TSMappedType\");\n }\n\n tsParseTupleType(): N.TsTupleType {\n const node = this.startNode<N.TsTupleType>();\n node.elementTypes = this.tsParseBracketedList(\n \"TupleElementTypes\",\n this.tsParseTupleElementType.bind(this),\n /* bracket */ true,\n /* skipFirstToken */ false,\n );\n\n // Validate the elementTypes to ensure that no mandatory elements\n // follow optional elements\n let seenOptionalElement = false;\n node.elementTypes.forEach(elementNode => {\n const { type } = elementNode;\n\n if (\n seenOptionalElement &&\n type !== \"TSRestType\" &&\n type !== \"TSOptionalType\" &&\n !(type === \"TSNamedTupleMember\" && elementNode.optional)\n ) {\n this.raise(TSErrors.OptionalTypeBeforeRequired, {\n at: elementNode,\n });\n }\n\n seenOptionalElement ||=\n (type === \"TSNamedTupleMember\" && elementNode.optional) ||\n type === \"TSOptionalType\";\n });\n\n return this.finishNode(node, \"TSTupleType\");\n }\n\n tsParseTupleElementType(): N.TsNamedTupleMember | N.TsType {\n // parses `...TsType[]`\n\n const { startLoc } = this.state;\n\n const rest = this.eat(tt.ellipsis);\n\n let labeled: boolean;\n let label: N.Identifier;\n let optional: boolean;\n let type: N.TsNamedTupleMember | N.TsType;\n\n const isWord = tokenIsKeywordOrIdentifier(this.state.type);\n const chAfterWord = isWord ? this.lookaheadCharCode() : null;\n if (chAfterWord === charCodes.colon) {\n labeled = true;\n optional = false;\n label = this.parseIdentifier(true);\n this.expect(tt.colon);\n type = this.tsParseType();\n } else if (chAfterWord === charCodes.questionMark) {\n optional = true;\n const startLoc = this.state.startLoc;\n const wordName = this.state.value;\n const typeOrLabel = this.tsParseNonArrayType();\n\n if (this.lookaheadCharCode() === charCodes.colon) {\n labeled = true;\n label = this.createIdentifier(\n this.startNodeAt<N.Identifier>(startLoc),\n wordName,\n );\n this.expect(tt.question);\n this.expect(tt.colon);\n type = this.tsParseType();\n } else {\n labeled = false;\n type = typeOrLabel;\n this.expect(tt.question);\n }\n } else {\n type = this.tsParseType();\n optional = this.eat(tt.question);\n // In this case (labeled === true) could be only in invalid label.\n // E.g. [x.y:type]\n // An error is raised while processing node.\n labeled = this.eat(tt.colon);\n }\n\n if (labeled) {\n let labeledNode: Undone<N.TsNamedTupleMember>;\n if (label) {\n labeledNode = this.startNodeAtNode<N.TsNamedTupleMember>(label);\n labeledNode.optional = optional;\n labeledNode.label = label;\n labeledNode.elementType = type;\n\n if (this.eat(tt.question)) {\n labeledNode.optional = true;\n this.raise(TSErrors.TupleOptionalAfterType, {\n at: this.state.lastTokStartLoc,\n });\n }\n } else {\n labeledNode = this.startNodeAtNode<N.TsNamedTupleMember>(type);\n labeledNode.optional = optional;\n this.raise(TSErrors.InvalidTupleMemberLabel, { at: type });\n // @ts-expect-error This produces an invalid AST, but at least we don't drop\n // nodes representing the invalid source.\n labeledNode.label = type;\n labeledNode.elementType = this.tsParseType();\n }\n type = this.finishNode(labeledNode, \"TSNamedTupleMember\");\n } else if (optional) {\n const optionalTypeNode = this.startNodeAtNode<N.TsOptionalType>(type);\n optionalTypeNode.typeAnnotation = type;\n type = this.finishNode(optionalTypeNode, \"TSOptionalType\");\n }\n\n if (rest) {\n const restNode = this.startNodeAt<N.TsRestType>(startLoc);\n restNode.typeAnnotation = type;\n type = this.finishNode(restNode, \"TSRestType\");\n }\n\n return type;\n }\n\n tsParseParenthesizedType(): N.TsParenthesizedType {\n const node = this.startNode<N.TsParenthesizedType>();\n this.expect(tt.parenL);\n node.typeAnnotation = this.tsParseType();\n this.expect(tt.parenR);\n return this.finishNode(node, \"TSParenthesizedType\");\n }\n\n tsParseFunctionOrConstructorType(\n type: \"TSFunctionType\" | \"TSConstructorType\",\n abstract?: boolean,\n ): N.TsFunctionOrConstructorType {\n const node = this.startNode<\n N.TsFunctionOrConstructorType | N.TsConstructorType\n >();\n if (type === \"TSConstructorType\") {\n (node as Undone<N.TsConstructorType>).abstract = !!abstract;\n if (abstract) this.next();\n this.next(); // eat `new`\n }\n this.tsInAllowConditionalTypesContext(() =>\n this.tsFillSignature(tt.arrow, node),\n );\n return this.finishNode(node, type);\n }\n\n tsParseLiteralTypeNode(): N.TsLiteralType {\n const node = this.startNode<N.TsLiteralType>();\n switch (this.state.type) {\n case tt.num:\n case tt.bigint:\n case tt.string:\n case tt._true:\n case tt._false:\n // For compatibility to estree we cannot call parseLiteral directly here\n // @ts-expect-error refine typings\n node.literal = super.parseExprAtom();\n break;\n default:\n this.unexpected();\n }\n return this.finishNode(node, \"TSLiteralType\");\n }\n\n tsParseTemplateLiteralType(): N.TsType {\n const node = this.startNode<N.TsLiteralType>();\n node.literal = super.parseTemplate(false);\n return this.finishNode(node, \"TSLiteralType\");\n }\n\n parseTemplateSubstitution(): N.TsType | N.Node {\n if (this.state.inType) return this.tsParseType();\n return super.parseTemplateSubstitution();\n }\n\n tsParseThisTypeOrThisTypePredicate(): N.TsThisType | N.TsTypePredicate {\n const thisKeyword = this.tsParseThisTypeNode();\n if (this.isContextual(tt._is) && !this.hasPrecedingLineBreak()) {\n return this.tsParseThisTypePredicate(thisKeyword);\n } else {\n return thisKeyword;\n }\n }\n\n tsParseNonArrayType(): N.TsType {\n switch (this.state.type) {\n case tt.string:\n case tt.num:\n case tt.bigint:\n case tt._true:\n case tt._false:\n return this.tsParseLiteralTypeNode();\n case tt.plusMin:\n if (this.state.value === \"-\") {\n const node = this.startNode<N.TsLiteralType>();\n const nextToken = this.lookahead();\n if (nextToken.type !== tt.num && nextToken.type !== tt.bigint) {\n this.unexpected();\n }\n // @ts-expect-error: parseMaybeUnary must returns unary expression\n node.literal = this.parseMaybeUnary();\n return this.finishNode(node, \"TSLiteralType\");\n }\n break;\n case tt._this:\n return this.tsParseThisTypeOrThisTypePredicate();\n case tt._typeof:\n return this.tsParseTypeQuery();\n case tt._import:\n return this.tsParseImportType();\n case tt.braceL:\n return this.tsLookAhead(this.tsIsStartOfMappedType.bind(this))\n ? this.tsParseMappedType()\n : this.tsParseTypeLiteral();\n case tt.bracketL:\n return this.tsParseTupleType();\n case tt.parenL:\n if (process.env.BABEL_8_BREAKING) {\n if (!this.options.createParenthesizedExpressions) {\n const startLoc = this.state.startLoc;\n this.next();\n const type = this.tsParseType();\n this.expect(tt.parenR);\n this.addExtra(type, \"parenthesized\", true);\n this.addExtra(type, \"parenStart\", startLoc.index);\n return type;\n }\n }\n\n return this.tsParseParenthesizedType();\n case tt.templateNonTail:\n case tt.templateTail:\n return this.tsParseTemplateLiteralType();\n default: {\n const { type } = this.state;\n if (\n tokenIsIdentifier(type) ||\n type === tt._void ||\n type === tt._null\n ) {\n const nodeType =\n type === tt._void\n ? \"TSVoidKeyword\"\n : type === tt._null\n ? \"TSNullKeyword\"\n : keywordTypeFromName(this.state.value);\n if (\n nodeType !== undefined &&\n this.lookaheadCharCode() !== charCodes.dot\n ) {\n const node = this.startNode<N.TsKeywordType>();\n this.next();\n return this.finishNode(node, nodeType);\n }\n return this.tsParseTypeReference();\n }\n }\n }\n\n this.unexpected();\n }\n\n tsParseArrayTypeOrHigher(): N.TsType {\n let type = this.tsParseNonArrayType();\n while (!this.hasPrecedingLineBreak() && this.eat(tt.bracketL)) {\n if (this.match(tt.bracketR)) {\n const node = this.startNodeAtNode<N.TsArrayType>(type);\n node.elementType = type;\n this.expect(tt.bracketR);\n type = this.finishNode(node, \"TSArrayType\");\n } else {\n const node = this.startNodeAtNode<N.TsIndexedAccessType>(type);\n node.objectType = type;\n node.indexType = this.tsParseType();\n this.expect(tt.bracketR);\n type = this.finishNode(node, \"TSIndexedAccessType\");\n }\n }\n return type;\n }\n\n tsParseTypeOperator(): N.TsTypeOperator {\n const node = this.startNode<N.TsTypeOperator>();\n const operator = this.state.value;\n this.next(); // eat operator\n node.operator = operator;\n node.typeAnnotation = this.tsParseTypeOperatorOrHigher();\n\n if (operator === \"readonly\") {\n this.tsCheckTypeAnnotationForReadOnly(\n // @ts-expect-error todo(flow->ts)\n node,\n );\n }\n\n return this.finishNode(node, \"TSTypeOperator\");\n }\n\n tsCheckTypeAnnotationForReadOnly(node: N.Node) {\n switch (node.typeAnnotation.type) {\n case \"TSTupleType\":\n case \"TSArrayType\":\n return;\n default:\n this.raise(TSErrors.UnexpectedReadonly, { at: node });\n }\n }\n\n tsParseInferType(): N.TsInferType {\n const node = this.startNode<N.TsInferType>();\n this.expectContextual(tt._infer);\n const typeParameter = this.startNode<N.TsTypeParameter>();\n typeParameter.name = this.tsParseTypeParameterName();\n typeParameter.constraint = this.tsTryParse(() =>\n this.tsParseConstraintForInferType(),\n );\n node.typeParameter = this.finishNode(typeParameter, \"TSTypeParameter\");\n return this.finishNode(node, \"TSInferType\");\n }\n\n tsParseConstraintForInferType() {\n if (this.eat(tt._extends)) {\n const constraint = this.tsInDisallowConditionalTypesContext(() =>\n this.tsParseType(),\n );\n if (\n this.state.inDisallowConditionalTypesContext ||\n !this.match(tt.question)\n ) {\n return constraint;\n }\n }\n }\n\n tsParseTypeOperatorOrHigher(): N.TsType {\n const isTypeOperator =\n tokenIsTSTypeOperator(this.state.type) && !this.state.containsEsc;\n return isTypeOperator\n ? this.tsParseTypeOperator()\n : this.isContextual(tt._infer)\n ? this.tsParseInferType()\n : this.tsInAllowConditionalTypesContext(() =>\n this.tsParseArrayTypeOrHigher(),\n );\n }\n\n tsParseUnionOrIntersectionType(\n kind: \"TSUnionType\" | \"TSIntersectionType\",\n parseConstituentType: () => N.TsType,\n operator: TokenType,\n ): N.TsType {\n const node = this.startNode<N.TsUnionType | N.TsIntersectionType>();\n const hasLeadingOperator = this.eat(operator);\n const types = [];\n do {\n types.push(parseConstituentType());\n } while (this.eat(operator));\n if (types.length === 1 && !hasLeadingOperator) {\n return types[0];\n }\n node.types = types;\n return this.finishNode(node, kind);\n }\n\n tsParseIntersectionTypeOrHigher(): N.TsType {\n return this.tsParseUnionOrIntersectionType(\n \"TSIntersectionType\",\n this.tsParseTypeOperatorOrHigher.bind(this),\n tt.bitwiseAND,\n );\n }\n\n tsParseUnionTypeOrHigher() {\n return this.tsParseUnionOrIntersectionType(\n \"TSUnionType\",\n this.tsParseIntersectionTypeOrHigher.bind(this),\n tt.bitwiseOR,\n );\n }\n\n tsIsStartOfFunctionType() {\n if (this.match(tt.lt)) {\n return true;\n }\n return (\n this.match(tt.parenL) &&\n this.tsLookAhead(this.tsIsUnambiguouslyStartOfFunctionType.bind(this))\n );\n }\n\n tsSkipParameterStart(): boolean {\n if (tokenIsIdentifier(this.state.type) || this.match(tt._this)) {\n this.next();\n return true;\n }\n\n if (this.match(tt.braceL)) {\n // Return true if we can parse an object pattern without errors\n const { errors } = this.state;\n const previousErrorCount = errors.length;\n try {\n this.parseObjectLike(tt.braceR, true);\n return errors.length === previousErrorCount;\n } catch {\n return false;\n }\n }\n\n if (this.match(tt.bracketL)) {\n this.next();\n // Return true if we can parse an array pattern without errors\n const { errors } = this.state;\n const previousErrorCount = errors.length;\n try {\n super.parseBindingList(\n tt.bracketR,\n charCodes.rightSquareBracket,\n ParseBindingListFlags.ALLOW_EMPTY,\n );\n return errors.length === previousErrorCount;\n } catch {\n return false;\n }\n }\n\n return false;\n }\n\n tsIsUnambiguouslyStartOfFunctionType(): boolean {\n this.next();\n if (this.match(tt.parenR) || this.match(tt.ellipsis)) {\n // ( )\n // ( ...\n return true;\n }\n if (this.tsSkipParameterStart()) {\n if (\n this.match(tt.colon) ||\n this.match(tt.comma) ||\n this.match(tt.question) ||\n this.match(tt.eq)\n ) {\n // ( xxx :\n // ( xxx ,\n // ( xxx ?\n // ( xxx =\n return true;\n }\n if (this.match(tt.parenR)) {\n this.next();\n if (this.match(tt.arrow)) {\n // ( xxx ) =>\n return true;\n }\n }\n }\n return false;\n }\n\n tsParseTypeOrTypePredicateAnnotation(\n returnToken: TokenType,\n ): N.TsTypeAnnotation {\n return this.tsInType(() => {\n const t = this.startNode<N.TsTypeAnnotation>();\n this.expect(returnToken);\n\n const node = this.startNode<N.TsTypePredicate>();\n\n const asserts = !!this.tsTryParse(\n this.tsParseTypePredicateAsserts.bind(this),\n );\n\n if (asserts && this.match(tt._this)) {\n // When asserts is false, thisKeyword is handled by tsParseNonArrayType\n // : asserts this is type\n let thisTypePredicate = this.tsParseThisTypeOrThisTypePredicate();\n // if it turns out to be a `TSThisType`, wrap it with `TSTypePredicate`\n // : asserts this\n if (thisTypePredicate.type === \"TSThisType\") {\n node.parameterName = thisTypePredicate;\n node.asserts = true;\n (node as N.TsTypePredicate).typeAnnotation = null;\n thisTypePredicate = this.finishNode(node, \"TSTypePredicate\");\n } else {\n this.resetStartLocationFromNode(thisTypePredicate, node);\n thisTypePredicate.asserts = true;\n }\n t.typeAnnotation = thisTypePredicate;\n return this.finishNode(t, \"TSTypeAnnotation\");\n }\n\n const typePredicateVariable =\n this.tsIsIdentifier() &&\n this.tsTryParse(this.tsParseTypePredicatePrefix.bind(this));\n\n if (!typePredicateVariable) {\n if (!asserts) {\n // : type\n return this.tsParseTypeAnnotation(/* eatColon */ false, t);\n }\n\n // : asserts foo\n node.parameterName = this.parseIdentifier();\n node.asserts = asserts;\n (node as N.TsTypePredicate).typeAnnotation = null;\n t.typeAnnotation = this.finishNode(node, \"TSTypePredicate\");\n return this.finishNode(t, \"TSTypeAnnotation\");\n }\n\n // : asserts foo is type\n const type = this.tsParseTypeAnnotation(/* eatColon */ false);\n node.parameterName = typePredicateVariable;\n node.typeAnnotation = type;\n node.asserts = asserts;\n t.typeAnnotation = this.finishNode(node, \"TSTypePredicate\");\n return this.finishNode(t, \"TSTypeAnnotation\");\n });\n }\n\n tsTryParseTypeOrTypePredicateAnnotation(): N.TsTypeAnnotation | undefined {\n if (this.match(tt.colon)) {\n return this.tsParseTypeOrTypePredicateAnnotation(tt.colon);\n }\n }\n\n tsTryParseTypeAnnotation(): N.TsTypeAnnotation | undefined {\n if (this.match(tt.colon)) {\n return this.tsParseTypeAnnotation();\n }\n }\n\n tsTryParseType(): N.TsType | undefined {\n return this.tsEatThenParseType(tt.colon);\n }\n\n tsParseTypePredicatePrefix(): N.Identifier | undefined {\n const id = this.parseIdentifier();\n if (this.isContextual(tt._is) && !this.hasPrecedingLineBreak()) {\n this.next();\n return id;\n }\n }\n\n tsParseTypePredicateAsserts(): boolean {\n if (this.state.type !== tt._asserts) {\n return false;\n }\n const containsEsc = this.state.containsEsc;\n this.next();\n if (!tokenIsIdentifier(this.state.type) && !this.match(tt._this)) {\n return false;\n }\n\n if (containsEsc) {\n this.raise(Errors.InvalidEscapedReservedWord, {\n at: this.state.lastTokStartLoc,\n reservedWord: \"asserts\",\n });\n }\n\n return true;\n }\n\n tsParseTypeAnnotation(\n eatColon = true,\n t: Undone<N.TsTypeAnnotation> = this.startNode<N.TsTypeAnnotation>(),\n ): N.TsTypeAnnotation {\n this.tsInType(() => {\n if (eatColon) this.expect(tt.colon);\n t.typeAnnotation = this.tsParseType();\n });\n return this.finishNode(t, \"TSTypeAnnotation\");\n }\n\n /** Be sure to be in a type context before calling this, using `tsInType`. */\n tsParseType(): N.TsType {\n // Need to set `state.inType` so that we don't parse JSX in a type context.\n assert(this.state.inType);\n const type = this.tsParseNonConditionalType();\n\n if (\n this.state.inDisallowConditionalTypesContext ||\n this.hasPrecedingLineBreak() ||\n !this.eat(tt._extends)\n ) {\n return type;\n }\n const node = this.startNodeAtNode<N.TsConditionalType>(type);\n node.checkType = type;\n\n node.extendsType = this.tsInDisallowConditionalTypesContext(() =>\n this.tsParseNonConditionalType(),\n );\n\n this.expect(tt.question);\n node.trueType = this.tsInAllowConditionalTypesContext(() =>\n this.tsParseType(),\n );\n\n this.expect(tt.colon);\n node.falseType = this.tsInAllowConditionalTypesContext(() =>\n this.tsParseType(),\n );\n\n return this.finishNode(node, \"TSConditionalType\");\n }\n\n isAbstractConstructorSignature(): boolean {\n return (\n this.isContextual(tt._abstract) && this.lookahead().type === tt._new\n );\n }\n\n tsParseNonConditionalType(): N.TsType {\n if (this.tsIsStartOfFunctionType()) {\n return this.tsParseFunctionOrConstructorType(\"TSFunctionType\");\n }\n if (this.match(tt._new)) {\n // As in `new () => Date`\n return this.tsParseFunctionOrConstructorType(\"TSConstructorType\");\n } else if (this.isAbstractConstructorSignature()) {\n // As in `abstract new () => Date`\n return this.tsParseFunctionOrConstructorType(\n \"TSConstructorType\",\n /* abstract */ true,\n );\n }\n return this.tsParseUnionTypeOrHigher();\n }\n\n tsParseTypeAssertion(): N.TsTypeAssertion {\n if (this.getPluginOption(\"typescript\", \"disallowAmbiguousJSXLike\")) {\n this.raise(TSErrors.ReservedTypeAssertion, { at: this.state.startLoc });\n }\n\n const node = this.startNode<N.TsTypeAssertion>();\n node.typeAnnotation = this.tsInType(() => {\n this.next(); // \"<\"\n return this.match(tt._const)\n ? this.tsParseTypeReference()\n : this.tsParseType();\n });\n this.expect(tt.gt);\n node.expression = this.parseMaybeUnary();\n return this.finishNode(node, \"TSTypeAssertion\");\n }\n\n tsParseHeritageClause(\n token: \"extends\" | \"implements\",\n ): Array<N.TsExpressionWithTypeArguments> {\n const originalStartLoc = this.state.startLoc;\n\n const delimitedList = this.tsParseDelimitedList(\n \"HeritageClauseElement\",\n () => {\n const node = this.startNode<N.TsExpressionWithTypeArguments>();\n node.expression = this.tsParseEntityName();\n if (this.match(tt.lt)) {\n node.typeParameters = this.tsParseTypeArguments();\n }\n\n return this.finishNode(node, \"TSExpressionWithTypeArguments\");\n },\n );\n\n if (!delimitedList.length) {\n this.raise(TSErrors.EmptyHeritageClauseType, {\n at: originalStartLoc,\n token,\n });\n }\n\n return delimitedList;\n }\n\n tsParseInterfaceDeclaration(\n node: Undone<N.TsInterfaceDeclaration>,\n properties: {\n declare?: true;\n } = {},\n ): N.TsInterfaceDeclaration | null {\n if (this.hasFollowingLineBreak()) return null;\n this.expectContextual(tt._interface);\n if (properties.declare) node.declare = true;\n if (tokenIsIdentifier(this.state.type)) {\n node.id = this.parseIdentifier();\n this.checkIdentifier(node.id, BindingFlag.TYPE_TS_INTERFACE);\n } else {\n node.id = null;\n this.raise(TSErrors.MissingInterfaceName, { at: this.state.startLoc });\n }\n\n node.typeParameters = this.tsTryParseTypeParameters(\n this.tsParseInOutConstModifiers,\n );\n if (this.eat(tt._extends)) {\n node.extends = this.tsParseHeritageClause(\"extends\");\n }\n const body = this.startNode<N.TSInterfaceBody>();\n body.body = this.tsInType(this.tsParseObjectTypeMembers.bind(this));\n node.body = this.finishNode(body, \"TSInterfaceBody\");\n return this.finishNode(node, \"TSInterfaceDeclaration\");\n }\n\n tsParseTypeAliasDeclaration(\n node: N.TsTypeAliasDeclaration,\n ): N.TsTypeAliasDeclaration {\n node.id = this.parseIdentifier();\n this.checkIdentifier(node.id, BindingFlag.TYPE_TS_TYPE);\n\n node.typeAnnotation = this.tsInType(() => {\n node.typeParameters = this.tsTryParseTypeParameters(\n this.tsParseInOutModifiers,\n );\n\n this.expect(tt.eq);\n\n if (\n this.isContextual(tt._intrinsic) &&\n this.lookahead().type !== tt.dot\n ) {\n const node = this.startNode<N.TsKeywordType>();\n this.next();\n return this.finishNode(node, \"TSIntrinsicKeyword\");\n }\n\n return this.tsParseType();\n });\n\n this.semicolon();\n return this.finishNode(node, \"TSTypeAliasDeclaration\");\n }\n\n tsInNoContext<T>(cb: () => T): T {\n const oldContext = this.state.context;\n this.state.context = [oldContext[0]];\n try {\n return cb();\n } finally {\n this.state.context = oldContext;\n }\n }\n\n /**\n * Runs `cb` in a type context.\n * This should be called one token *before* the first type token,\n * so that the call to `next()` is run in type context.\n */\n tsInType<T>(cb: () => T): T {\n const oldInType = this.state.inType;\n this.state.inType = true;\n try {\n return cb();\n } finally {\n this.state.inType = oldInType;\n }\n }\n\n tsInDisallowConditionalTypesContext<T>(cb: () => T): T {\n const oldInDisallowConditionalTypesContext =\n this.state.inDisallowConditionalTypesContext;\n this.state.inDisallowConditionalTypesContext = true;\n try {\n return cb();\n } finally {\n this.state.inDisallowConditionalTypesContext =\n oldInDisallowConditionalTypesContext;\n }\n }\n\n tsInAllowConditionalTypesContext<T>(cb: () => T): T {\n const oldInDisallowConditionalTypesContext =\n this.state.inDisallowConditionalTypesContext;\n this.state.inDisallowConditionalTypesContext = false;\n try {\n return cb();\n } finally {\n this.state.inDisallowConditionalTypesContext =\n oldInDisallowConditionalTypesContext;\n }\n }\n\n tsEatThenParseType(token: TokenType): N.TsType | undefined {\n if (this.match(token)) {\n return this.tsNextThenParseType();\n }\n }\n\n tsExpectThenParseType(token: TokenType): N.TsType {\n return this.tsInType(() => {\n this.expect(token);\n return this.tsParseType();\n });\n }\n\n tsNextThenParseType(): N.TsType {\n return this.tsInType(() => {\n this.next();\n return this.tsParseType();\n });\n }\n\n tsParseEnumMember(): N.TsEnumMember {\n const node = this.startNode<N.TsEnumMember>();\n // Computed property names are grammar errors in an enum, so accept just string literal or identifier.\n node.id = this.match(tt.string)\n ? super.parseStringLiteral(this.state.value)\n : this.parseIdentifier(/* liberal */ true);\n if (this.eat(tt.eq)) {\n node.initializer = super.parseMaybeAssignAllowIn();\n }\n return this.finishNode(node, \"TSEnumMember\");\n }\n\n tsParseEnumDeclaration(\n node: Undone<N.TsEnumDeclaration>,\n properties: {\n const?: true;\n declare?: true;\n } = {},\n ): N.TsEnumDeclaration {\n if (properties.const) node.const = true;\n if (properties.declare) node.declare = true;\n this.expectContextual(tt._enum);\n node.id = this.parseIdentifier();\n this.checkIdentifier(\n node.id,\n node.const ? BindingFlag.TYPE_TS_CONST_ENUM : BindingFlag.TYPE_TS_ENUM,\n );\n\n this.expect(tt.braceL);\n node.members = this.tsParseDelimitedList(\n \"EnumMembers\",\n this.tsParseEnumMember.bind(this),\n );\n this.expect(tt.braceR);\n return this.finishNode(node, \"TSEnumDeclaration\");\n }\n\n tsParseModuleBlock(): N.TsModuleBlock {\n const node = this.startNode<N.TsModuleBlock>();\n this.scope.enter(ScopeFlag.OTHER);\n\n this.expect(tt.braceL);\n // Inside of a module block is considered \"top-level\", meaning it can have imports and exports.\n super.parseBlockOrModuleBlockBody(\n (node.body = []),\n /* directives */ undefined,\n /* topLevel */ true,\n /* end */ tt.braceR,\n );\n this.scope.exit();\n return this.finishNode(node, \"TSModuleBlock\");\n }\n\n tsParseModuleOrNamespaceDeclaration(\n node: Undone<N.TsModuleDeclaration>,\n nested: boolean = false,\n ): N.TsModuleDeclaration {\n node.id = this.parseIdentifier();\n\n if (!nested) {\n this.checkIdentifier(node.id, BindingFlag.TYPE_TS_NAMESPACE);\n }\n\n if (this.eat(tt.dot)) {\n const inner = this.startNode<N.TsModuleDeclaration>();\n this.tsParseModuleOrNamespaceDeclaration(inner, true);\n // @ts-expect-error Fixme: refine typings\n node.body = inner;\n } else {\n this.scope.enter(ScopeFlag.TS_MODULE);\n this.prodParam.enter(PARAM);\n node.body = this.tsParseModuleBlock();\n this.prodParam.exit();\n this.scope.exit();\n }\n return this.finishNode(node, \"TSModuleDeclaration\");\n }\n\n tsParseAmbientExternalModuleDeclaration(\n node: N.TsModuleDeclaration,\n ): N.TsModuleDeclaration {\n if (this.isContextual(tt._global)) {\n node.global = true;\n node.id = this.parseIdentifier();\n } else if (this.match(tt.string)) {\n node.id = super.parseStringLiteral(this.state.value);\n } else {\n this.unexpected();\n }\n if (this.match(tt.braceL)) {\n this.scope.enter(ScopeFlag.TS_MODULE);\n this.prodParam.enter(PARAM);\n node.body = this.tsParseModuleBlock();\n this.prodParam.exit();\n this.scope.exit();\n } else {\n this.semicolon();\n }\n\n return this.finishNode(node, \"TSModuleDeclaration\");\n }\n\n tsParseImportEqualsDeclaration(\n node: Undone<N.TsImportEqualsDeclaration>,\n maybeDefaultIdentifier?: N.Identifier | null,\n isExport?: boolean,\n ): N.TsImportEqualsDeclaration {\n node.isExport = isExport || false;\n node.id = maybeDefaultIdentifier || this.parseIdentifier();\n this.checkIdentifier(node.id, BindingFlag.TYPE_TS_VALUE_IMPORT);\n this.expect(tt.eq);\n const moduleReference = this.tsParseModuleReference();\n if (\n node.importKind === \"type\" &&\n moduleReference.type !== \"TSExternalModuleReference\"\n ) {\n this.raise(TSErrors.ImportAliasHasImportType, {\n at: moduleReference,\n });\n }\n node.moduleReference = moduleReference;\n this.semicolon();\n return this.finishNode(node, \"TSImportEqualsDeclaration\");\n }\n\n tsIsExternalModuleReference(): boolean {\n return (\n this.isContextual(tt._require) &&\n this.lookaheadCharCode() === charCodes.leftParenthesis\n );\n }\n\n tsParseModuleReference(): N.TsModuleReference {\n return this.tsIsExternalModuleReference()\n ? this.tsParseExternalModuleReference()\n : this.tsParseEntityName(/* allowReservedWords */ false);\n }\n\n tsParseExternalModuleReference(): N.TsExternalModuleReference {\n const node = this.startNode<N.TsExternalModuleReference>();\n this.expectContextual(tt._require);\n this.expect(tt.parenL);\n if (!this.match(tt.string)) {\n this.unexpected();\n }\n // For compatibility to estree we cannot call parseLiteral directly here\n node.expression = super.parseExprAtom() as N.StringLiteral;\n this.expect(tt.parenR);\n this.sawUnambiguousESM = true;\n return this.finishNode(node, \"TSExternalModuleReference\");\n }\n\n // Utilities\n\n tsLookAhead<T>(f: () => T): T {\n const state = this.state.clone();\n const res = f();\n this.state = state;\n return res;\n }\n\n tsTryParseAndCatch<T extends N.NodeBase | undefined | null>(\n f: () => T,\n ): T | undefined | null {\n const result = this.tryParse(\n abort =>\n // @ts-expect-error todo(flow->ts)\n f() || abort(),\n );\n\n if (result.aborted || !result.node) return;\n if (result.error) this.state = result.failState;\n // @ts-expect-error refine typings\n return result.node;\n }\n\n tsTryParse<T>(f: () => T | undefined | false): T | undefined {\n const state = this.state.clone();\n const result = f();\n if (result !== undefined && result !== false) {\n return result;\n }\n this.state = state;\n }\n\n tsTryParseDeclare(nany: any): N.Declaration | undefined {\n if (this.isLineTerminator()) {\n return;\n }\n let startType = this.state.type;\n let kind: \"let\" | null;\n\n if (this.isContextual(tt._let)) {\n startType = tt._var;\n kind = \"let\";\n }\n\n // @ts-expect-error refine typings\n return this.tsInAmbientContext(() => {\n switch (startType) {\n case tt._function:\n nany.declare = true;\n return super.parseFunctionStatement(\n nany,\n /* async */ false,\n /* isHangingDeclaration */ false,\n );\n case tt._class:\n // While this is also set by tsParseExpressionStatement, we need to set it\n // before parsing the class declaration to know how to register it in the scope.\n nany.declare = true;\n return this.parseClass(\n nany,\n /* isStatement */ true,\n /* optionalId */ false,\n );\n case tt._enum:\n return this.tsParseEnumDeclaration(nany, { declare: true });\n case tt._global:\n return this.tsParseAmbientExternalModuleDeclaration(nany);\n case tt._const:\n case tt._var:\n if (!this.match(tt._const) || !this.isLookaheadContextual(\"enum\")) {\n nany.declare = true;\n return this.parseVarStatement(\n nany,\n kind || this.state.value,\n true,\n );\n }\n\n // `const enum = 0;` not allowed because \"enum\" is a strict mode reserved word.\n this.expect(tt._const);\n return this.tsParseEnumDeclaration(nany, {\n const: true,\n declare: true,\n });\n case tt._interface: {\n const result = this.tsParseInterfaceDeclaration(nany, {\n declare: true,\n });\n if (result) return result;\n }\n // fallthrough\n default:\n if (tokenIsIdentifier(startType)) {\n return this.tsParseDeclaration(\n nany,\n this.state.value,\n /* next */ true,\n /* decorators */ null,\n );\n }\n }\n });\n }\n\n // Note: this won't be called unless the keyword is allowed in `shouldParseExportDeclaration`.\n tsTryParseExportDeclaration(): N.Declaration | undefined {\n return this.tsParseDeclaration(\n this.startNode(),\n this.state.value,\n /* next */ true,\n /* decorators */ null,\n );\n }\n\n tsParseExpressionStatement(\n node: Undone<N.TsModuleDeclaration>,\n expr: N.Identifier,\n decorators: N.Decorator[] | null,\n ): N.Declaration | undefined {\n switch (expr.name) {\n case \"declare\": {\n const declaration = this.tsTryParseDeclare(node);\n if (declaration) {\n declaration.declare = true;\n }\n return declaration;\n }\n case \"global\":\n // `global { }` (with no `declare`) may appear inside an ambient module declaration.\n // Would like to use tsParseAmbientExternalModuleDeclaration here, but already ran past \"global\".\n if (this.match(tt.braceL)) {\n this.scope.enter(ScopeFlag.TS_MODULE);\n this.prodParam.enter(PARAM);\n const mod = node;\n mod.global = true;\n mod.id = expr;\n mod.body = this.tsParseModuleBlock();\n this.scope.exit();\n this.prodParam.exit();\n return this.finishNode(mod, \"TSModuleDeclaration\");\n }\n break;\n\n default:\n return this.tsParseDeclaration(\n node,\n expr.name,\n /* next */ false,\n decorators,\n );\n }\n }\n\n // Common to tsTryParseDeclare, tsTryParseExportDeclaration, and tsParseExpressionStatement.\n tsParseDeclaration(\n node: any,\n value: string,\n next: boolean,\n decorators: N.Decorator[] | null,\n ): N.Declaration | undefined | null {\n // no declaration apart from enum can be followed by a line break.\n switch (value) {\n case \"abstract\":\n if (\n this.tsCheckLineTerminator(next) &&\n (this.match(tt._class) || tokenIsIdentifier(this.state.type))\n ) {\n return this.tsParseAbstractDeclaration(node, decorators);\n }\n break;\n\n case \"module\":\n if (this.tsCheckLineTerminator(next)) {\n if (this.match(tt.string)) {\n return this.tsParseAmbientExternalModuleDeclaration(node);\n } else if (tokenIsIdentifier(this.state.type)) {\n return this.tsParseModuleOrNamespaceDeclaration(node);\n }\n }\n break;\n\n case \"namespace\":\n if (\n this.tsCheckLineTerminator(next) &&\n tokenIsIdentifier(this.state.type)\n ) {\n return this.tsParseModuleOrNamespaceDeclaration(node);\n }\n break;\n\n case \"type\":\n if (\n this.tsCheckLineTerminator(next) &&\n tokenIsIdentifier(this.state.type)\n ) {\n return this.tsParseTypeAliasDeclaration(node);\n }\n break;\n }\n }\n\n tsCheckLineTerminator(next: boolean) {\n if (next) {\n if (this.hasFollowingLineBreak()) return false;\n this.next();\n return true;\n }\n return !this.isLineTerminator();\n }\n\n tsTryParseGenericAsyncArrowFunction(\n startLoc: Position,\n ): N.ArrowFunctionExpression | undefined {\n if (!this.match(tt.lt)) return;\n\n const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n this.state.maybeInArrowParameters = true;\n\n const res: Undone<N.ArrowFunctionExpression> | undefined =\n this.tsTryParseAndCatch(() => {\n const node = this.startNodeAt<N.ArrowFunctionExpression>(startLoc);\n node.typeParameters = this.tsParseTypeParameters(\n this.tsParseConstModifier,\n );\n // Don't use overloaded parseFunctionParams which would look for \"<\" again.\n super.parseFunctionParams(node);\n node.returnType = this.tsTryParseTypeOrTypePredicateAnnotation();\n this.expect(tt.arrow);\n return node;\n });\n\n this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n\n if (!res) return;\n\n return super.parseArrowExpression(\n res,\n /* params are already set */ null,\n /* async */ true,\n );\n }\n\n // Used when parsing type arguments from ES productions, where the first token\n // has been created without state.inType. Thus we need to rescan the lt token.\n tsParseTypeArgumentsInExpression(): N.TsTypeParameterInstantiation | void {\n if (this.reScan_lt() !== tt.lt) return;\n return this.tsParseTypeArguments();\n }\n\n tsParseTypeArguments(): N.TsTypeParameterInstantiation {\n const node = this.startNode<N.TsTypeParameterInstantiation>();\n node.params = this.tsInType(() =>\n // Temporarily remove a JSX parsing context, which makes us scan different tokens.\n this.tsInNoContext(() => {\n this.expect(tt.lt);\n return this.tsParseDelimitedList(\n \"TypeParametersOrArguments\",\n this.tsParseType.bind(this),\n );\n }),\n );\n if (node.params.length === 0) {\n this.raise(TSErrors.EmptyTypeArguments, { at: node });\n } else if (!this.state.inType && this.curContext() === tc.brace) {\n // rescan `>` when we are no longer in type context and JSX parsing context\n // since it was tokenized when `inType` is `true`.\n this.reScan_lt_gt();\n }\n this.expect(tt.gt);\n return this.finishNode(node, \"TSTypeParameterInstantiation\");\n }\n\n tsIsDeclarationStart(): boolean {\n return tokenIsTSDeclarationStart(this.state.type);\n }\n\n // ======================================================\n // OVERRIDES\n // ======================================================\n\n isExportDefaultSpecifier(): boolean {\n if (this.tsIsDeclarationStart()) return false;\n return super.isExportDefaultSpecifier();\n }\n\n parseAssignableListItem(\n flags: ParseBindingListFlags,\n decorators: N.Decorator[],\n ): N.Pattern | N.TSParameterProperty {\n // Store original location to include modifiers in range\n const startLoc = this.state.startLoc;\n\n const modified: ModifierBase = {};\n this.tsParseModifiers(\n {\n allowedModifiers: [\n \"public\",\n \"private\",\n \"protected\",\n \"override\",\n \"readonly\",\n ],\n },\n modified,\n );\n const accessibility = modified.accessibility;\n const override = modified.override;\n const readonly = modified.readonly;\n if (\n !(flags & ParseBindingListFlags.IS_CONSTRUCTOR_PARAMS) &&\n (accessibility || readonly || override)\n ) {\n this.raise(TSErrors.UnexpectedParameterModifier, { at: startLoc });\n }\n\n const left = this.parseMaybeDefault();\n this.parseAssignableListItemTypes(left, flags);\n const elt = this.parseMaybeDefault(left.loc.start, left);\n if (accessibility || readonly || override) {\n const pp = this.startNodeAt<N.TSParameterProperty>(startLoc);\n if (decorators.length) {\n pp.decorators = decorators;\n }\n if (accessibility) pp.accessibility = accessibility;\n if (readonly) pp.readonly = readonly;\n if (override) pp.override = override;\n if (elt.type !== \"Identifier\" && elt.type !== \"AssignmentPattern\") {\n this.raise(TSErrors.UnsupportedParameterPropertyKind, { at: pp });\n }\n pp.parameter = elt as any as N.Identifier | N.AssignmentPattern;\n return this.finishNode(pp, \"TSParameterProperty\");\n }\n\n if (decorators.length) {\n left.decorators = decorators;\n }\n\n return elt;\n }\n\n isSimpleParameter(node: N.Pattern | N.TSParameterProperty) {\n return (\n (node.type === \"TSParameterProperty\" &&\n super.isSimpleParameter(node.parameter)) ||\n super.isSimpleParameter(node)\n );\n }\n\n tsDisallowOptionalPattern(node: Undone<N.Function>) {\n for (const param of node.params) {\n if (\n param.type !== \"Identifier\" &&\n (param as any).optional &&\n !this.state.isAmbientContext\n ) {\n this.raise(TSErrors.PatternIsOptional, { at: param });\n }\n }\n }\n\n setArrowFunctionParameters(\n node: Undone<N.ArrowFunctionExpression>,\n params: N.Expression[],\n trailingCommaLoc?: Position | null,\n ): void {\n super.setArrowFunctionParameters(node, params, trailingCommaLoc);\n this.tsDisallowOptionalPattern(node);\n }\n\n parseFunctionBodyAndFinish<\n T extends\n | N.Function\n | N.TSDeclareMethod\n | N.TSDeclareFunction\n | N.ClassPrivateMethod,\n >(node: Undone<T>, type: T[\"type\"], isMethod: boolean = false): T {\n if (this.match(tt.colon)) {\n node.returnType = this.tsParseTypeOrTypePredicateAnnotation(tt.colon);\n }\n\n const bodilessType =\n type === \"FunctionDeclaration\"\n ? \"TSDeclareFunction\"\n : type === \"ClassMethod\" || type === \"ClassPrivateMethod\"\n ? \"TSDeclareMethod\"\n : undefined;\n if (bodilessType && !this.match(tt.braceL) && this.isLineTerminator()) {\n return this.finishNode(node, bodilessType);\n }\n if (bodilessType === \"TSDeclareFunction\" && this.state.isAmbientContext) {\n this.raise(TSErrors.DeclareFunctionHasImplementation, { at: node });\n if ((node as Undone<N.FunctionDeclaration>).declare) {\n return super.parseFunctionBodyAndFinish(node, bodilessType, isMethod);\n }\n }\n this.tsDisallowOptionalPattern(node);\n\n return super.parseFunctionBodyAndFinish(node, type, isMethod);\n }\n\n registerFunctionStatementId(node: N.Function): void {\n if (!node.body && node.id) {\n // Function ids are validated after parsing their body.\n // For bodiless function, we need to do it here.\n this.checkIdentifier(node.id, BindingFlag.TYPE_TS_AMBIENT);\n } else {\n super.registerFunctionStatementId(node);\n }\n }\n\n tsCheckForInvalidTypeCasts(items: Array<N.Expression | undefined | null>) {\n items.forEach(node => {\n if (node?.type === \"TSTypeCastExpression\") {\n this.raise(TSErrors.UnexpectedTypeAnnotation, {\n at: node.typeAnnotation,\n });\n }\n });\n }\n\n toReferencedList(\n exprList: Array<N.Expression | undefined | null>,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n isInParens?: boolean,\n ): Array<N.Expression | undefined | null> {\n // Handles invalid scenarios like: `f(a:b)`, `(a:b);`, and `(a:b,c:d)`.\n //\n // Note that `f<T>(a:b)` goes through a different path and is handled\n // in `parseSubscript` directly.\n this.tsCheckForInvalidTypeCasts(exprList);\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 if (node.type === \"ArrayExpression\") {\n this.tsCheckForInvalidTypeCasts(node.elements);\n }\n\n return node;\n }\n\n parseSubscript(\n base: N.Expression,\n\n startLoc: Position,\n noCalls: boolean | undefined | null,\n state: N.ParseSubscriptState,\n ): N.Expression {\n if (!this.hasPrecedingLineBreak() && this.match(tt.bang)) {\n // When ! is consumed as a postfix operator (non-null assertion),\n // disallow JSX tag forming after. e.g. When parsing `p! < n.p!`\n // `<n.p` can not be a start of JSX tag\n this.state.canStartJSXElement = false;\n this.next();\n\n const nonNullExpression =\n this.startNodeAt<N.TsNonNullExpression>(startLoc);\n nonNullExpression.expression = base;\n return this.finishNode(nonNullExpression, \"TSNonNullExpression\");\n }\n\n let isOptionalCall = false;\n if (\n this.match(tt.questionDot) &&\n this.lookaheadCharCode() === charCodes.lessThan\n ) {\n if (noCalls) {\n state.stop = true;\n return base;\n }\n state.optionalChainMember = isOptionalCall = true;\n this.next();\n }\n\n // handles 'f<<T>'\n if (this.match(tt.lt) || this.match(tt.bitShiftL)) {\n let missingParenErrorLoc;\n // tsTryParseAndCatch is expensive, so avoid if not necessary.\n // There are number of things we are going to \"maybe\" parse, like type arguments on\n // tagged template expressions. If any of them fail, walk it back and continue.\n const result = this.tsTryParseAndCatch(() => {\n if (!noCalls && this.atPossibleAsyncArrow(base)) {\n // Almost certainly this is a generic async function `async <T>() => ...\n // But it might be a call with a type argument `async<T>();`\n const asyncArrowFn =\n this.tsTryParseGenericAsyncArrowFunction(startLoc);\n if (asyncArrowFn) {\n return asyncArrowFn;\n }\n }\n\n const typeArguments = this.tsParseTypeArgumentsInExpression();\n if (!typeArguments) return;\n\n if (isOptionalCall && !this.match(tt.parenL)) {\n missingParenErrorLoc = this.state.curPosition();\n return;\n }\n\n if (tokenIsTemplate(this.state.type)) {\n const result = super.parseTaggedTemplateExpression(\n base,\n\n startLoc,\n state,\n );\n result.typeParameters = typeArguments;\n return result;\n }\n\n if (!noCalls && this.eat(tt.parenL)) {\n const node = this.startNodeAt<\n N.CallExpression | N.OptionalCallExpression\n >(startLoc);\n node.callee = base;\n // possibleAsync always false here, because we would have handled it above.\n // @ts-expect-error (won't be any undefined arguments)\n node.arguments = this.parseCallExpressionArguments(\n tt.parenR,\n /* possibleAsync */ false,\n );\n\n // Handles invalid case: `f<T>(a:b)`\n this.tsCheckForInvalidTypeCasts(node.arguments);\n\n node.typeParameters = typeArguments;\n if (state.optionalChainMember) {\n (node as Undone<N.OptionalCallExpression>).optional =\n isOptionalCall;\n }\n\n return this.finishCallExpression(node, state.optionalChainMember);\n }\n\n const tokenType = this.state.type;\n if (\n // a<b>>c is not (a<b>)>c, but a<(b>>c)\n tokenType === tt.gt ||\n // a<b>>>c is not (a<b>)>>c, but a<(b>>>c)\n tokenType === tt.bitShiftR ||\n // a<b>c is (a<b)>c\n (tokenType !== tt.parenL &&\n tokenCanStartExpression(tokenType) &&\n !this.hasPrecedingLineBreak())\n ) {\n // Bail out.\n return;\n }\n\n const node = this.startNodeAt<N.TsInstantiationExpression>(startLoc);\n node.expression = base;\n node.typeParameters = typeArguments;\n return this.finishNode(node, \"TSInstantiationExpression\");\n });\n\n if (missingParenErrorLoc) {\n this.unexpected(missingParenErrorLoc, tt.parenL);\n }\n\n if (result) {\n if (\n result.type === \"TSInstantiationExpression\" &&\n (this.match(tt.dot) ||\n (this.match(tt.questionDot) &&\n this.lookaheadCharCode() !== charCodes.leftParenthesis))\n ) {\n this.raise(\n TSErrors.InvalidPropertyAccessAfterInstantiationExpression,\n { at: this.state.startLoc },\n );\n }\n return result;\n }\n }\n\n return super.parseSubscript(base, startLoc, noCalls, state);\n }\n\n parseNewCallee(node: N.NewExpression): void {\n super.parseNewCallee(node);\n\n const { callee } = node;\n if (\n callee.type === \"TSInstantiationExpression\" &&\n !callee.extra?.parenthesized\n ) {\n node.typeParameters = callee.typeParameters;\n node.callee = callee.expression;\n }\n }\n\n parseExprOp(\n left: N.Expression,\n leftStartLoc: Position,\n minPrec: number,\n ): N.Expression {\n let isSatisfies: boolean;\n if (\n tokenOperatorPrecedence(tt._in) > minPrec &&\n !this.hasPrecedingLineBreak() &&\n (this.isContextual(tt._as) ||\n (isSatisfies = this.isContextual(tt._satisfies)))\n ) {\n const node = this.startNodeAt<\n N.TsAsExpression | N.TsSatisfiesExpression\n >(leftStartLoc);\n node.expression = left;\n node.typeAnnotation = this.tsInType(() => {\n this.next(); // \"as\" or \"satisfies\"\n if (this.match(tt._const)) {\n if (isSatisfies) {\n this.raise(Errors.UnexpectedKeyword, {\n at: this.state.startLoc,\n keyword: \"const\",\n });\n }\n return this.tsParseTypeReference();\n }\n\n return this.tsParseType();\n });\n this.finishNode(\n node,\n isSatisfies ? \"TSSatisfiesExpression\" : \"TSAsExpression\",\n );\n // rescan `<`, `>` because they were scanned when this.state.inType was true\n this.reScan_lt_gt();\n return this.parseExprOp(\n // @ts-expect-error todo(flow->ts)\n node,\n leftStartLoc,\n minPrec,\n );\n }\n\n return super.parseExprOp(left, leftStartLoc, minPrec);\n }\n\n checkReservedWord(\n word: string,\n startLoc: Position,\n checkKeywords: boolean,\n isBinding: boolean,\n ): void {\n // Strict mode words may be allowed as in `declare namespace N { const static: number; }`.\n // And we have a type checker anyway, so don't bother having the parser do it.\n if (!this.state.isAmbientContext) {\n super.checkReservedWord(word, startLoc, checkKeywords, isBinding);\n }\n }\n\n checkImportReflection(node: Undone<N.ImportDeclaration>) {\n super.checkImportReflection(node);\n if (node.module && node.importKind !== \"value\") {\n this.raise(TSErrors.ImportReflectionHasImportType, {\n at: node.specifiers[0].loc.start,\n });\n }\n }\n\n /*\n Don't bother doing this check in TypeScript code because:\n 1. We may have a nested export statement with the same name:\n export const x = 0;\n export namespace N {\n export const x = 1;\n }\n 2. We have a type checker to warn us about this sort of thing.\n */\n checkDuplicateExports() {}\n\n isPotentialImportPhase(isExport: boolean): boolean {\n if (super.isPotentialImportPhase(isExport)) return true;\n if (this.isContextual(tt._type)) {\n const ch = this.lookaheadCharCode();\n return isExport\n ? ch === charCodes.leftCurlyBrace || ch === charCodes.asterisk\n : ch !== charCodes.equalsTo;\n }\n return !isExport && this.isContextual(tt._typeof);\n }\n\n applyImportPhase(\n node: Undone<N.ImportDeclaration | N.ExportNamedDeclaration>,\n isExport: boolean,\n phase: string | null,\n loc?: Position,\n ): void {\n super.applyImportPhase(node, isExport, phase, loc);\n if (isExport) {\n (node as N.ExportNamedDeclaration).exportKind =\n phase === \"type\" ? \"type\" : \"value\";\n } else {\n (node as N.ImportDeclaration).importKind =\n phase === \"type\" || phase === \"typeof\" ? phase : \"value\";\n }\n }\n\n parseImport(\n node: Undone<N.ImportDeclaration | N.TsImportEqualsDeclaration>,\n ): N.AnyImport {\n if (this.match(tt.string)) {\n node.importKind = \"value\";\n return super.parseImport(node as Undone<N.ImportDeclaration>);\n }\n\n let importNode;\n if (\n tokenIsIdentifier(this.state.type) &&\n this.lookaheadCharCode() === charCodes.equalsTo\n ) {\n node.importKind = \"value\";\n return this.tsParseImportEqualsDeclaration(\n node as Undone<N.TsImportEqualsDeclaration>,\n );\n } else if (this.isContextual(tt._type)) {\n const maybeDefaultIdentifier = this.parseMaybeImportPhase(\n node as Undone<N.ImportDeclaration>,\n /* isExport */ false,\n );\n if (this.lookaheadCharCode() === charCodes.equalsTo) {\n return this.tsParseImportEqualsDeclaration(\n node as Undone<N.TsImportEqualsDeclaration>,\n maybeDefaultIdentifier,\n );\n } else {\n importNode = super.parseImportSpecifiersAndAfter(\n node as Undone<N.ImportDeclaration>,\n maybeDefaultIdentifier,\n );\n }\n } else {\n importNode = super.parseImport(node as Undone<N.ImportDeclaration>);\n }\n\n // `import type` can only be used on imports with named imports or with a\n // default import - but not both\n if (\n importNode.importKind === \"type\" &&\n // @ts-expect-error refine typings\n importNode.specifiers.length > 1 &&\n // @ts-expect-error refine typings\n importNode.specifiers[0].type === \"ImportDefaultSpecifier\"\n ) {\n this.raise(TSErrors.TypeImportCannotSpecifyDefaultAndNamed, {\n at: importNode,\n });\n }\n\n return importNode;\n }\n\n parseExport(\n node: Undone<N.Node>,\n decorators: N.Decorator[] | null,\n ): N.AnyExport {\n if (this.match(tt._import)) {\n // `export import A = B;`\n this.next(); // eat `tt._import`\n let maybeDefaultIdentifier: N.Identifier | null = null;\n if (\n this.isContextual(tt._type) &&\n // We pass false here, because we are parsing an `import ... =`\n this.isPotentialImportPhase(/* isExport */ false)\n ) {\n maybeDefaultIdentifier = this.parseMaybeImportPhase(\n node as Undone<N.TsImportEqualsDeclaration>,\n /* isExport */ false,\n );\n } else {\n node.importKind = \"value\";\n }\n return this.tsParseImportEqualsDeclaration(\n node as Undone<N.TsImportEqualsDeclaration>,\n maybeDefaultIdentifier,\n /* isExport */ true,\n );\n } else if (this.eat(tt.eq)) {\n // `export = x;`\n const assign = node as Undone<N.TsExportAssignment>;\n assign.expression = super.parseExpression();\n this.semicolon();\n this.sawUnambiguousESM = true;\n return this.finishNode(assign, \"TSExportAssignment\");\n } else if (this.eatContextual(tt._as)) {\n // `export as namespace A;`\n const decl = node as Undone<N.TsNamespaceExportDeclaration>;\n // See `parseNamespaceExportDeclaration` in TypeScript's own parser\n this.expectContextual(tt._namespace);\n decl.id = this.parseIdentifier();\n this.semicolon();\n return this.finishNode(decl, \"TSNamespaceExportDeclaration\");\n } else {\n return super.parseExport(\n node as Undone<N.ExportAllDeclaration | N.ExportDefaultDeclaration>,\n decorators,\n );\n }\n }\n\n isAbstractClass(): boolean {\n return (\n this.isContextual(tt._abstract) && this.lookahead().type === tt._class\n );\n }\n\n parseExportDefaultExpression(): N.Expression | N.Declaration {\n if (this.isAbstractClass()) {\n const cls = this.startNode<N.Class>();\n this.next(); // Skip \"abstract\"\n cls.abstract = true;\n return this.parseClass(cls, true, true);\n }\n\n // export default interface allowed in:\n // https://github.com/Microsoft/TypeScript/pull/16040\n if (this.match(tt._interface)) {\n const result = this.tsParseInterfaceDeclaration(\n this.startNode<N.TsInterfaceDeclaration>(),\n );\n if (result) return result;\n }\n\n return super.parseExportDefaultExpression();\n }\n\n parseVarStatement(\n node: N.VariableDeclaration,\n kind: \"var\" | \"let\" | \"const\" | \"using\",\n allowMissingInitializer: boolean = false,\n ) {\n const { isAmbientContext } = this.state;\n const declaration = super.parseVarStatement(\n node,\n kind,\n allowMissingInitializer || isAmbientContext,\n );\n\n if (!isAmbientContext) return declaration;\n\n for (const { id, init } of declaration.declarations) {\n // Empty initializer is the easy case that we want.\n if (!init) continue;\n\n // var and let aren't ever allowed initializers.\n if (kind !== \"const\" || !!id.typeAnnotation) {\n this.raise(TSErrors.InitializerNotAllowedInAmbientContext, {\n at: init,\n });\n } else if (\n !isValidAmbientConstInitializer(init, this.hasPlugin(\"estree\"))\n ) {\n this.raise(\n TSErrors.ConstInitiailizerMustBeStringOrNumericLiteralOrLiteralEnumReference,\n { at: init },\n );\n }\n }\n\n return declaration;\n }\n\n parseStatementContent(\n flags: ParseStatementFlag,\n decorators?: N.Decorator[] | null,\n ): N.Statement {\n if (this.match(tt._const) && this.isLookaheadContextual(\"enum\")) {\n const node = this.startNode<N.TsEnumDeclaration>();\n this.expect(tt._const); // eat 'const'\n return this.tsParseEnumDeclaration(node, { const: true });\n }\n\n if (this.isContextual(tt._enum)) {\n return this.tsParseEnumDeclaration(\n this.startNode<N.TsEnumDeclaration>(),\n );\n }\n\n if (this.isContextual(tt._interface)) {\n const result = this.tsParseInterfaceDeclaration(this.startNode());\n if (result) return result;\n }\n\n return super.parseStatementContent(flags, decorators);\n }\n\n parseAccessModifier(): N.Accessibility | undefined | null {\n return this.tsParseModifier([\"public\", \"protected\", \"private\"]);\n }\n\n tsHasSomeModifiers(member: any, modifiers: readonly TsModifier[]): boolean {\n return modifiers.some(modifier => {\n if (tsIsAccessModifier(modifier)) {\n return member.accessibility === modifier;\n }\n return !!member[modifier];\n });\n }\n\n tsIsStartOfStaticBlocks() {\n return (\n this.isContextual(tt._static) &&\n this.lookaheadCharCode() === charCodes.leftCurlyBrace\n );\n }\n\n parseClassMember(\n classBody: N.ClassBody,\n member: any,\n state: N.ParseClassMemberState,\n ): void {\n const modifiers = [\n \"declare\",\n \"private\",\n \"public\",\n \"protected\",\n \"override\",\n \"abstract\",\n \"readonly\",\n \"static\",\n ] as const;\n this.tsParseModifiers(\n {\n allowedModifiers: modifiers,\n disallowedModifiers: [\"in\", \"out\"],\n stopOnStartOfClassStaticBlock: true,\n errorTemplate: TSErrors.InvalidModifierOnTypeParameterPositions,\n },\n member,\n );\n\n const callParseClassMemberWithIsStatic = () => {\n if (this.tsIsStartOfStaticBlocks()) {\n this.next(); // eat \"static\"\n this.next(); // eat \"{\"\n if (this.tsHasSomeModifiers(member, modifiers)) {\n this.raise(TSErrors.StaticBlockCannotHaveModifier, {\n at: this.state.curPosition(),\n });\n }\n super.parseClassStaticBlock(classBody, member as N.StaticBlock);\n } else {\n this.parseClassMemberWithIsStatic(\n classBody,\n member,\n state,\n !!member.static,\n );\n }\n };\n if (member.declare) {\n this.tsInAmbientContext(callParseClassMemberWithIsStatic);\n } else {\n callParseClassMemberWithIsStatic();\n }\n }\n\n parseClassMemberWithIsStatic(\n classBody: N.ClassBody,\n member: Undone<N.ClassMember | N.TsIndexSignature>,\n state: N.ParseClassMemberState,\n isStatic: boolean,\n ): void {\n const idx = this.tsTryParseIndexSignature(\n member as Undone<N.TsIndexSignature>,\n );\n if (idx) {\n classBody.body.push(idx);\n\n if ((member as any).abstract) {\n this.raise(TSErrors.IndexSignatureHasAbstract, { at: member });\n }\n if ((member as any).accessibility) {\n this.raise(TSErrors.IndexSignatureHasAccessibility, {\n at: member,\n modifier: (member as any).accessibility,\n });\n }\n if ((member as any).declare) {\n this.raise(TSErrors.IndexSignatureHasDeclare, { at: member });\n }\n if ((member as any).override) {\n this.raise(TSErrors.IndexSignatureHasOverride, { at: member });\n }\n\n return;\n }\n\n if (!this.state.inAbstractClass && (member as any).abstract) {\n this.raise(TSErrors.NonAbstractClassHasAbstractMethod, {\n at: member,\n });\n }\n\n if ((member as any).override) {\n if (!state.hadSuperClass) {\n this.raise(TSErrors.OverrideNotInSubClass, { at: member });\n }\n }\n\n /*:: invariant(member.type !== \"TSIndexSignature\") */\n\n super.parseClassMemberWithIsStatic(\n classBody,\n member as Undone<N.ClassMember>,\n state,\n isStatic,\n );\n }\n\n parsePostMemberNameModifiers(\n methodOrProp: N.ClassMethod | N.ClassProperty | N.ClassPrivateProperty,\n ): void {\n const optional = this.eat(tt.question);\n if (optional) methodOrProp.optional = true;\n\n if ((methodOrProp as any).readonly && this.match(tt.parenL)) {\n this.raise(TSErrors.ClassMethodHasReadonly, { at: methodOrProp });\n }\n\n if ((methodOrProp as any).declare && this.match(tt.parenL)) {\n this.raise(TSErrors.ClassMethodHasDeclare, { at: methodOrProp });\n }\n }\n\n // Note: The reason we do this in `parseExpressionStatement` and not `parseStatement`\n // is that e.g. `type()` is valid JS, so we must try parsing that first.\n // If it's really a type, we will parse `type` as the statement, and can correct it here\n // by parsing the rest.\n // @ts-expect-error plugin overrides interfaces\n parseExpressionStatement(\n node: Undone<N.ExpressionStatement>,\n expr: N.Expression,\n decorators: N.Decorator[] | null,\n ): N.Statement {\n const decl =\n expr.type === \"Identifier\"\n ? // @ts-expect-error refine typings\n this.tsParseExpressionStatement(node, expr, decorators)\n : undefined;\n return decl || super.parseExpressionStatement(node, expr, decorators);\n }\n\n // export type\n // Should be true for anything parsed by `tsTryParseExportDeclaration`.\n shouldParseExportDeclaration(): boolean {\n if (this.tsIsDeclarationStart()) return true;\n return super.shouldParseExportDeclaration();\n }\n\n // An apparent conditional expression could actually be an optional parameter in an arrow function.\n parseConditional(\n expr: N.Expression,\n\n startLoc: Position,\n refExpressionErrors?: ExpressionErrors | null,\n ): N.Expression {\n // only do the expensive clone if there is a question mark\n // and if we come from inside parens\n if (!this.state.maybeInArrowParameters || !this.match(tt.question)) {\n return super.parseConditional(\n expr,\n\n startLoc,\n refExpressionErrors,\n );\n }\n\n const result = this.tryParse(() =>\n super.parseConditional(expr, startLoc),\n );\n\n if (!result.node) {\n if (result.error) {\n /*:: invariant(refExpressionErrors != null) */\n super.setOptionalParametersError(refExpressionErrors, result.error);\n }\n\n return expr;\n }\n if (result.error) this.state = result.failState;\n return result.node;\n }\n\n // Note: These \"type casts\" are *not* valid TS expressions.\n // But we parse them here and change them when completing the arrow function.\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<N.TsTypeCastExpression>(startLoc);\n typeCastNode.expression = node;\n typeCastNode.typeAnnotation = this.tsParseTypeAnnotation();\n\n return this.finishNode(typeCastNode, \"TSTypeCastExpression\");\n }\n\n return node;\n }\n\n parseExportDeclaration(\n node: N.ExportNamedDeclaration,\n ): N.Declaration | undefined | null {\n if (!this.state.isAmbientContext && this.isContextual(tt._declare)) {\n return this.tsInAmbientContext(() => this.parseExportDeclaration(node));\n }\n\n // Store original location\n const startLoc = this.state.startLoc;\n\n const isDeclare = this.eatContextual(tt._declare);\n\n if (\n isDeclare &&\n (this.isContextual(tt._declare) || !this.shouldParseExportDeclaration())\n ) {\n throw this.raise(TSErrors.ExpectedAmbientAfterExportDeclare, {\n at: this.state.startLoc,\n });\n }\n\n const isIdentifier = tokenIsIdentifier(this.state.type);\n const declaration: N.Declaration | undefined | null =\n (isIdentifier && this.tsTryParseExportDeclaration()) ||\n super.parseExportDeclaration(node);\n\n if (!declaration) return null;\n\n if (\n declaration.type === \"TSInterfaceDeclaration\" ||\n declaration.type === \"TSTypeAliasDeclaration\" ||\n isDeclare\n ) {\n node.exportKind = \"type\";\n }\n\n if (isDeclare) {\n // Reset location to include `declare` in range\n this.resetStartLocation(declaration, startLoc);\n\n declaration.declare = true;\n }\n\n return declaration;\n }\n\n parseClassId(\n node: N.Class,\n isStatement: boolean,\n optionalId?: boolean | null,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n bindingType?: BindingTypes,\n ): void {\n if ((!isStatement || optionalId) && this.isContextual(tt._implements)) {\n return;\n }\n\n super.parseClassId(\n node,\n isStatement,\n optionalId,\n (node as any).declare\n ? BindingFlag.TYPE_TS_AMBIENT\n : BindingFlag.TYPE_CLASS,\n );\n const typeParameters = this.tsTryParseTypeParameters(\n this.tsParseInOutConstModifiers,\n );\n if (typeParameters) node.typeParameters = typeParameters;\n }\n\n parseClassPropertyAnnotation(\n node: N.ClassProperty | N.ClassPrivateProperty | N.ClassAccessorProperty,\n ): void {\n if (!node.optional) {\n if (this.eat(tt.bang)) {\n node.definite = true;\n } else if (this.eat(tt.question)) {\n node.optional = true;\n }\n }\n\n const type = this.tsTryParseTypeAnnotation();\n if (type) node.typeAnnotation = type;\n }\n\n parseClassProperty(node: N.ClassProperty): N.ClassProperty {\n this.parseClassPropertyAnnotation(node);\n\n if (\n this.state.isAmbientContext &&\n !(node.readonly && !node.typeAnnotation) &&\n this.match(tt.eq)\n ) {\n this.raise(TSErrors.DeclareClassFieldHasInitializer, {\n at: this.state.startLoc,\n });\n }\n if (node.abstract && this.match(tt.eq)) {\n const { key } = node;\n this.raise(TSErrors.AbstractPropertyHasInitializer, {\n at: this.state.startLoc,\n propertyName:\n key.type === \"Identifier\" && !node.computed\n ? key.name\n : `[${this.input.slice(key.start, key.end)}]`,\n });\n }\n\n return super.parseClassProperty(node);\n }\n\n parseClassPrivateProperty(\n node: N.ClassPrivateProperty,\n ): N.ClassPrivateProperty {\n // @ts-expect-error abstract may not index node\n if (node.abstract) {\n this.raise(TSErrors.PrivateElementHasAbstract, { at: node });\n }\n\n // @ts-expect-error accessibility may not index node\n if (node.accessibility) {\n this.raise(TSErrors.PrivateElementHasAccessibility, {\n at: node,\n // @ts-expect-error refine typings\n modifier: node.accessibility,\n });\n }\n\n this.parseClassPropertyAnnotation(node);\n return super.parseClassPrivateProperty(node);\n }\n\n parseClassAccessorProperty(\n node: N.ClassAccessorProperty,\n ): N.ClassAccessorProperty {\n this.parseClassPropertyAnnotation(node);\n if (node.optional) {\n this.raise(TSErrors.AccessorCannotBeOptional, { at: node });\n }\n return super.parseClassAccessorProperty(node);\n }\n\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 const typeParameters = this.tsTryParseTypeParameters(\n this.tsParseConstModifier,\n );\n if (typeParameters && isConstructor) {\n this.raise(TSErrors.ConstructorHasTypeParameters, {\n at: typeParameters,\n });\n }\n\n // @ts-expect-error declare does not exist in ClassMethod\n const { declare = false, kind } = method;\n\n if (declare && (kind === \"get\" || kind === \"set\")) {\n this.raise(TSErrors.DeclareAccessor, { at: method, kind });\n }\n if (typeParameters) method.typeParameters = typeParameters;\n super.pushClassMethod(\n classBody,\n method,\n isGenerator,\n isAsync,\n isConstructor,\n allowsDirectSuper,\n );\n }\n\n pushClassPrivateMethod(\n classBody: N.ClassBody,\n method: N.ClassPrivateMethod,\n isGenerator: boolean,\n isAsync: boolean,\n ): void {\n const typeParameters = this.tsTryParseTypeParameters(\n this.tsParseConstModifier,\n );\n if (typeParameters) method.typeParameters = typeParameters;\n super.pushClassPrivateMethod(classBody, method, isGenerator, isAsync);\n }\n\n declareClassPrivateMethodInScope(\n node: N.ClassPrivateMethod | N.EstreeMethodDefinition | N.TSDeclareMethod,\n kind: number,\n ) {\n if (node.type === \"TSDeclareMethod\") return;\n // This happens when using the \"estree\" plugin.\n if (node.type === \"MethodDefinition\" && !node.value.body) return;\n\n super.declareClassPrivateMethodInScope(node, kind);\n }\n\n parseClassSuper(node: N.Class): void {\n super.parseClassSuper(node);\n // handle `extends f<<T>\n if (node.superClass && (this.match(tt.lt) || this.match(tt.bitShiftL))) {\n // @ts-expect-error refine typings\n node.superTypeParameters = this.tsParseTypeArgumentsInExpression();\n }\n if (this.eatContextual(tt._implements)) {\n node.implements = this.tsParseHeritageClause(\"implements\");\n }\n }\n\n parseObjPropValue(\n prop: Undone<N.ObjectMethod | N.ObjectProperty>,\n startLoc: Position | undefined | null,\n isGenerator: boolean,\n isAsync: boolean,\n isPattern: boolean,\n isAccessor: boolean,\n refExpressionErrors?: ExpressionErrors | null,\n ) {\n const typeParameters = this.tsTryParseTypeParameters(\n this.tsParseConstModifier,\n );\n if (typeParameters) prop.typeParameters = typeParameters;\n\n return super.parseObjPropValue(\n prop,\n\n startLoc,\n isGenerator,\n isAsync,\n isPattern,\n isAccessor,\n refExpressionErrors,\n );\n }\n\n parseFunctionParams(node: N.Function, isConstructor: boolean): void {\n const typeParameters = this.tsTryParseTypeParameters(\n this.tsParseConstModifier,\n );\n if (typeParameters) node.typeParameters = typeParameters;\n super.parseFunctionParams(node, isConstructor);\n }\n\n // `let x: number;`\n parseVarId(\n decl: N.VariableDeclarator,\n kind: \"var\" | \"let\" | \"const\" | \"using\",\n ): void {\n super.parseVarId(decl, kind);\n if (\n decl.id.type === \"Identifier\" &&\n !this.hasPrecedingLineBreak() &&\n this.eat(tt.bang)\n ) {\n decl.definite = true;\n }\n\n const type = this.tsTryParseTypeAnnotation();\n if (type) {\n decl.id.typeAnnotation = type;\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 node.returnType = this.tsParseTypeAnnotation();\n }\n return super.parseAsyncArrowFromCallExpression(node, call);\n }\n\n parseMaybeAssign(\n refExpressionErrors?: ExpressionErrors | null,\n afterLeftParse?: Function,\n ): N.Expression {\n // Note: When the JSX plugin is on, type assertions (`<T> x`) aren't valid syntax.\n\n let state: State | undefined | null;\n let jsx;\n let typeCast;\n\n if (\n this.hasPlugin(\"jsx\") &&\n (this.match(tt.jsxTagStart) || this.match(tt.lt))\n ) {\n // Prefer to parse JSX if possible. But may be an arrow fn.\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` or `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 return super.parseMaybeAssign(refExpressionErrors, afterLeftParse);\n }\n\n // Either way, we're looking at a '<': tt.jsxTagStart or relational.\n\n // If the state was cloned in the JSX parsing branch above but there\n // have been any error in the tryParse call, this.state is set to state\n // so we still need to clone it.\n if (!state || state === this.state) state = this.state.clone();\n\n let typeParameters: N.TsTypeParameterDeclaration | undefined | null;\n const arrow = this.tryParse(abort => {\n // This is similar to TypeScript's `tryParseParenthesizedArrowFunctionExpression`.\n typeParameters = this.tsParseTypeParameters(this.tsParseConstModifier);\n const expr = super.parseMaybeAssign(\n refExpressionErrors,\n afterLeftParse,\n );\n\n if (\n expr.type !== \"ArrowFunctionExpression\" ||\n expr.extra?.parenthesized\n ) {\n abort();\n }\n\n // Correct TypeScript code should have at least 1 type parameter, but don't crash on bad code.\n if (typeParameters?.params.length !== 0) {\n this.resetStartLocationFromNode(expr, typeParameters);\n }\n expr.typeParameters = typeParameters;\n\n if (process.env.BABEL_8_BREAKING) {\n if (\n this.hasPlugin(\"jsx\") &&\n expr.typeParameters.params.length === 1 &&\n !expr.typeParameters.extra?.trailingComma\n ) {\n // report error if single type parameter used without trailing comma.\n const parameter = expr.typeParameters.params[0];\n if (!parameter.constraint) {\n // A single type parameter must either have constraints\n // or a trailing comma, otherwise it's ambiguous with JSX.\n this.raise(TSErrors.SingleTypeParameterWithoutTrailingComma, {\n at: createPositionWithColumnOffset(parameter.loc.end, 1),\n typeParameterName: parameter.name.name,\n });\n }\n }\n }\n\n return expr;\n }, state);\n\n /*:: invariant(arrow.node != null) */\n if (!arrow.error && !arrow.aborted) {\n // This error is reported outside of the this.tryParse call so that\n // in case of <T>(x) => 2, we don't consider <T>(x) as a type assertion\n // because of this error.\n if (typeParameters) this.reportReservedArrowTypeParam(typeParameters);\n // @ts-expect-error refine typings\n return arrow.node;\n }\n\n if (!jsx) {\n // Try parsing a type cast instead of an arrow function.\n // This will never happen outside of JSX.\n // (Because in JSX the '<' should be a jsxTagStart and not a relational.\n assert(!this.hasPlugin(\"jsx\"));\n\n // This will start with a type assertion (via parseMaybeUnary).\n // But don't directly call `this.tsParseTypeAssertion` because we want to handle any binary after it.\n typeCast = this.tryParse(\n () => super.parseMaybeAssign(refExpressionErrors, afterLeftParse),\n state,\n );\n /*:: invariant(!typeCast.aborted) */\n /*:: invariant(typeCast.node != null) */\n if (!typeCast.error) return typeCast.node;\n }\n\n if (jsx?.node) {\n /*:: invariant(jsx.failState) */\n this.state = jsx.failState;\n return jsx.node;\n }\n\n if (arrow.node) {\n /*:: invariant(arrow.failState) */\n this.state = arrow.failState;\n if (typeParameters) this.reportReservedArrowTypeParam(typeParameters);\n // @ts-expect-error refine typings\n return arrow.node;\n }\n\n if (typeCast?.node) {\n /*:: invariant(typeCast.failState) */\n this.state = typeCast.failState;\n return typeCast.node;\n }\n\n throw jsx?.error || arrow.error || typeCast?.error;\n }\n\n reportReservedArrowTypeParam(node: any) {\n if (\n node.params.length === 1 &&\n !node.params[0].constraint &&\n !node.extra?.trailingComma &&\n this.getPluginOption(\"typescript\", \"disallowAmbiguousJSXLike\")\n ) {\n this.raise(TSErrors.ReservedArrowTypeParam, { at: node });\n }\n }\n\n // Handle type assertions\n parseMaybeUnary(\n refExpressionErrors?: ExpressionErrors | null,\n sawUnary?: boolean,\n ): N.Expression {\n if (!this.hasPlugin(\"jsx\") && this.match(tt.lt)) {\n return this.tsParseTypeAssertion();\n }\n return super.parseMaybeUnary(refExpressionErrors, sawUnary);\n }\n\n parseArrow(\n node: Undone<N.ArrowFunctionExpression>,\n ): Undone<N.ArrowFunctionExpression> | undefined | null {\n if (this.match(tt.colon)) {\n // This is different from how the TS parser does it.\n // TS uses lookahead. The Babel Parser parses it as a parenthesized expression and converts.\n\n const result = this.tryParse(abort => {\n const returnType = this.tsParseTypeOrTypePredicateAnnotation(\n tt.colon,\n );\n if (this.canInsertSemicolon() || !this.match(tt.arrow)) abort();\n return returnType;\n });\n\n if (result.aborted) return;\n\n if (!result.thrown) {\n if (result.error) this.state = result.failState;\n // @ts-expect-error refine typings\n node.returnType = result.node;\n }\n }\n\n return super.parseArrow(node);\n }\n\n // Allow type annotations inside of a parameter list.\n parseAssignableListItemTypes(\n param: N.Pattern,\n flags: ParseBindingListFlags,\n ) {\n if (!(flags & ParseBindingListFlags.IS_FUNCTION_PARAMS)) return param;\n\n if (this.eat(tt.question)) {\n (param as any as N.Identifier).optional = true;\n }\n const type = this.tsTryParseTypeAnnotation();\n if (type) param.typeAnnotation = type;\n this.resetEndLocation(param);\n\n return param;\n }\n\n isAssignable(node: N.Node, isBinding?: boolean): boolean {\n switch (node.type) {\n case \"TSTypeCastExpression\":\n return this.isAssignable(node.expression, isBinding);\n case \"TSParameterProperty\":\n return true;\n default:\n return super.isAssignable(node, isBinding);\n }\n }\n\n toAssignable(node: N.Node, isLHS: boolean = false): void {\n switch (node.type) {\n case \"ParenthesizedExpression\":\n this.toAssignableParenthesizedExpression(node, isLHS);\n break;\n case \"TSAsExpression\":\n case \"TSSatisfiesExpression\":\n case \"TSNonNullExpression\":\n case \"TSTypeAssertion\":\n if (isLHS) {\n this.expressionScope.recordArrowParameterBindingError(\n TSErrors.UnexpectedTypeCastInParameter,\n { at: node },\n );\n } else {\n this.raise(TSErrors.UnexpectedTypeCastInParameter, { at: node });\n }\n this.toAssignable(node.expression, isLHS);\n break;\n case \"AssignmentExpression\":\n if (!isLHS && node.left.type === \"TSTypeCastExpression\") {\n node.left = this.typeCastToParameter(node.left);\n }\n /* fall through */\n default:\n super.toAssignable(node, isLHS);\n }\n }\n\n toAssignableParenthesizedExpression(node: N.Node, isLHS: boolean): void {\n switch (node.expression.type) {\n case \"TSAsExpression\":\n case \"TSSatisfiesExpression\":\n case \"TSNonNullExpression\":\n case \"TSTypeAssertion\":\n case \"ParenthesizedExpression\":\n this.toAssignable(node.expression, isLHS);\n break;\n default:\n super.toAssignable(node, isLHS);\n }\n }\n\n checkToRestConversion(node: N.Node, allowPattern: boolean): void {\n switch (node.type) {\n case \"TSAsExpression\":\n case \"TSSatisfiesExpression\":\n case \"TSTypeAssertion\":\n case \"TSNonNullExpression\":\n this.checkToRestConversion(node.expression, false);\n break;\n default:\n super.checkToRestConversion(node, allowPattern);\n }\n }\n\n // @ts-expect-error plugin overrides interfaces\n isValidLVal(\n type:\n | \"TSTypeCastExpression\"\n | \"TSParameterProperty\"\n | \"TSNonNullExpression\"\n | \"TSAsExpression\"\n | \"TSSatisfiesExpression\"\n | \"TSTypeAssertion\",\n isUnparenthesizedInAssign: boolean,\n binding: BindingTypes,\n ) {\n return (\n getOwn(\n {\n // Allow \"typecasts\" to appear on the left of assignment expressions,\n // because it may be in an arrow function.\n // e.g. `const f = (foo: number = 0) => foo;`\n TSTypeCastExpression: true,\n TSParameterProperty: \"parameter\",\n TSNonNullExpression: \"expression\",\n TSAsExpression: (binding !== BindingFlag.TYPE_NONE ||\n !isUnparenthesizedInAssign) && [\"expression\", true],\n TSSatisfiesExpression: (binding !== BindingFlag.TYPE_NONE ||\n !isUnparenthesizedInAssign) && [\"expression\", true],\n TSTypeAssertion: (binding !== BindingFlag.TYPE_NONE ||\n !isUnparenthesizedInAssign) && [\"expression\", true],\n },\n type,\n ) || super.isValidLVal(type, isUnparenthesizedInAssign, binding)\n );\n }\n\n parseBindingAtom(): N.Pattern {\n if (this.state.type === tt._this) {\n return this.parseIdentifier(/* liberal */ true);\n }\n return super.parseBindingAtom();\n }\n\n parseMaybeDecoratorArguments(expr: N.Expression): N.Expression {\n // handles `@f<<T>`\n if (this.match(tt.lt) || this.match(tt.bitShiftL)) {\n const typeArguments = this.tsParseTypeArgumentsInExpression();\n\n if (this.match(tt.parenL)) {\n const call = super.parseMaybeDecoratorArguments(expr);\n call.typeParameters = typeArguments;\n return call;\n }\n\n this.unexpected(null, tt.parenL);\n }\n\n return super.parseMaybeDecoratorArguments(expr);\n }\n\n checkCommaAfterRest(\n close: (typeof charCodes)[keyof typeof charCodes],\n ): boolean {\n if (\n this.state.isAmbientContext &&\n this.match(tt.comma) &&\n this.lookaheadCharCode() === close\n ) {\n this.next();\n return false;\n }\n return super.checkCommaAfterRest(close);\n }\n\n // === === === === === === === === === === === === === === === ===\n // Note: All below methods are duplicates of something in flow.js.\n // Not sure what the best way to combine these is.\n // === === === === === === === === === === === === === === === ===\n\n isClassMethod(): boolean {\n return this.match(tt.lt) || super.isClassMethod();\n }\n\n isClassProperty(): boolean {\n return (\n this.match(tt.bang) || this.match(tt.colon) || super.isClassProperty()\n );\n }\n\n parseMaybeDefault(\n startLoc?: Position | null,\n left?: 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(TSErrors.TypeAnnotationAfterAssign, {\n at: node.typeAnnotation,\n });\n }\n\n return node;\n }\n\n // ensure that inside types, we bypass the jsx parser plugin\n getTokenFromCode(code: number): void {\n if (this.state.inType) {\n if (code === charCodes.greaterThan) {\n this.finishOp(tt.gt, 1);\n return;\n }\n if (code === charCodes.lessThan) {\n this.finishOp(tt.lt, 1);\n return;\n }\n }\n super.getTokenFromCode(code);\n }\n\n // used after we have finished parsing types\n reScan_lt_gt() {\n const { type } = this.state;\n if (type === tt.lt) {\n this.state.pos -= 1;\n this.readToken_lt();\n } else if (type === tt.gt) {\n this.state.pos -= 1;\n this.readToken_gt();\n }\n }\n\n reScan_lt() {\n const { type } = this.state;\n if (type === tt.bitShiftL) {\n this.state.pos -= 2;\n this.finishOp(tt.lt, 1);\n return tt.lt;\n }\n return type;\n }\n\n toAssignableList(\n exprList: 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 === \"TSTypeCastExpression\") {\n exprList[i] = this.typeCastToParameter(\n expr as N.TsTypeCastExpression,\n );\n }\n }\n super.toAssignableList(exprList, trailingCommaLoc, isLHS);\n }\n\n typeCastToParameter(node: N.TsTypeCastExpression): 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 shouldParseArrow(params: Array<N.Node>) {\n if (this.match(tt.colon)) {\n return params.every(expr => this.isAssignable(expr, true));\n }\n return super.shouldParseArrow(params);\n }\n\n shouldParseAsyncArrow(): boolean {\n return this.match(tt.colon) || super.shouldParseAsyncArrow();\n }\n\n canHaveLeadingDecorator() {\n // Avoid unnecessary lookahead in checking for abstract class unless needed!\n return super.canHaveLeadingDecorator() || this.isAbstractClass();\n }\n\n jsxParseOpeningElementAfterName(\n node: N.JSXOpeningElement,\n ): N.JSXOpeningElement {\n // handles `<Component<<T>`\n if (this.match(tt.lt) || this.match(tt.bitShiftL)) {\n const typeArguments = this.tsTryParseAndCatch(() =>\n // @ts-expect-error: refine typings\n this.tsParseTypeArgumentsInExpression(),\n );\n // @ts-expect-error: refine typings\n if (typeArguments) node.typeParameters = typeArguments;\n }\n return super.jsxParseOpeningElementAfterName(node);\n }\n\n getGetterSetterExpectedParamCount(\n method: N.ObjectMethod | N.ClassMethod,\n ): number {\n const baseCount = super.getGetterSetterExpectedParamCount(method);\n const params = this.getObjectOrClassMethodParams(method);\n const firstParam = params[0];\n const hasContextParam = firstParam && this.isThisParam(firstParam);\n\n return hasContextParam ? baseCount + 1 : baseCount;\n }\n\n parseCatchClauseParam(): N.Pattern {\n const param = super.parseCatchClauseParam();\n const type = this.tsTryParseTypeAnnotation();\n\n if (type) {\n param.typeAnnotation = type;\n this.resetEndLocation(param);\n }\n\n return param;\n }\n\n tsInAmbientContext<T>(cb: () => T): T {\n const oldIsAmbientContext = this.state.isAmbientContext;\n this.state.isAmbientContext = true;\n try {\n return cb();\n } finally {\n this.state.isAmbientContext = oldIsAmbientContext;\n }\n }\n\n parseClass<T extends N.Class>(\n node: Undone<T>,\n isStatement: boolean,\n optionalId?: boolean,\n ): T {\n const oldInAbstractClass = this.state.inAbstractClass;\n this.state.inAbstractClass = !!(node as any).abstract;\n try {\n return super.parseClass(node, isStatement, optionalId);\n } finally {\n this.state.inAbstractClass = oldInAbstractClass;\n }\n }\n\n tsParseAbstractDeclaration(\n node: any,\n decorators: N.Decorator[] | null,\n ): N.ClassDeclaration | N.TsInterfaceDeclaration | undefined | null {\n if (this.match(tt._class)) {\n node.abstract = true;\n return this.maybeTakeDecorators(\n decorators,\n this.parseClass<N.ClassDeclaration>(\n node as N.ClassDeclaration,\n /* isStatement */ true,\n /* optionalId */ false,\n ),\n );\n } else if (this.isContextual(tt._interface)) {\n // for invalid abstract interface\n\n // To avoid\n // abstract interface\n // Foo {}\n if (!this.hasFollowingLineBreak()) {\n node.abstract = true;\n this.raise(TSErrors.NonClassMethodPropertyHasAbstractModifer, {\n at: node,\n });\n return this.tsParseInterfaceDeclaration(\n node as N.TsInterfaceDeclaration,\n );\n }\n } else {\n this.unexpected(null, tt._class);\n }\n }\n\n parseMethod<\n T extends N.ObjectMethod | N.ClassMethod | N.ClassPrivateMethod,\n >(\n node: Undone<T>,\n isGenerator: boolean,\n isAsync: boolean,\n isConstructor: boolean,\n allowDirectSuper: boolean,\n type: T[\"type\"],\n inClassScope?: boolean,\n ) {\n const method = super.parseMethod<T>(\n node,\n isGenerator,\n isAsync,\n isConstructor,\n allowDirectSuper,\n type,\n inClassScope,\n );\n // @ts-expect-error todo(flow->ts) property not defined for all types in union\n if (method.abstract) {\n const hasBody = this.hasPlugin(\"estree\")\n ? // @ts-expect-error estree typings\n !!method.value.body\n : !!method.body;\n if (hasBody) {\n const { key } = method;\n this.raise(TSErrors.AbstractMethodHasImplementation, {\n at: method,\n methodName:\n key.type === \"Identifier\" && !method.computed\n ? key.name\n : `[${this.input.slice(key.start, key.end)}]`,\n });\n }\n }\n return method;\n }\n\n tsParseTypeParameterName(): N.Identifier | string {\n const typeName: N.Identifier = this.parseIdentifier();\n return process.env.BABEL_8_BREAKING ? typeName : typeName.name;\n }\n\n shouldParseAsAmbientContext(): boolean {\n return !!this.getPluginOption(\"typescript\", \"dts\");\n }\n\n parse() {\n if (this.shouldParseAsAmbientContext()) {\n this.state.isAmbientContext = true;\n }\n return super.parse();\n }\n\n getExpression() {\n if (this.shouldParseAsAmbientContext()) {\n this.state.isAmbientContext = true;\n }\n return super.getExpression();\n }\n\n parseExportSpecifier(\n node: Undone<N.ExportSpecifier>,\n isString: boolean,\n isInTypeExport: boolean,\n isMaybeTypeOnly: boolean,\n ) {\n if (!isString && isMaybeTypeOnly) {\n this.parseTypeOnlyImportExportSpecifier(\n node,\n /* isImport */ false,\n isInTypeExport,\n );\n return this.finishNode<N.ExportSpecifier>(node, \"ExportSpecifier\");\n }\n node.exportKind = \"value\";\n return super.parseExportSpecifier(\n node,\n isString,\n isInTypeExport,\n isMaybeTypeOnly,\n );\n }\n\n parseImportSpecifier(\n specifier: Undone<N.ImportSpecifier>,\n importedIsString: boolean,\n isInTypeOnlyImport: boolean,\n isMaybeTypeOnly: boolean,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n bindingType: BindingTypes | undefined,\n ): N.ImportSpecifier {\n if (!importedIsString && isMaybeTypeOnly) {\n this.parseTypeOnlyImportExportSpecifier(\n specifier,\n /* isImport */ true,\n isInTypeOnlyImport,\n );\n return this.finishNode<N.ImportSpecifier>(specifier, \"ImportSpecifier\");\n }\n specifier.importKind = \"value\";\n return super.parseImportSpecifier(\n specifier,\n importedIsString,\n isInTypeOnlyImport,\n isMaybeTypeOnly,\n isInTypeOnlyImport\n ? BindingFlag.TYPE_TS_TYPE_IMPORT\n : BindingFlag.TYPE_TS_VALUE_IMPORT,\n );\n }\n\n parseTypeOnlyImportExportSpecifier(\n node: any,\n isImport: boolean,\n isInTypeOnlyImportExport: boolean,\n ): void {\n const leftOfAsKey = isImport ? \"imported\" : \"local\";\n const rightOfAsKey = isImport ? \"local\" : \"exported\";\n\n let leftOfAs = node[leftOfAsKey];\n let rightOfAs;\n\n let hasTypeSpecifier = false;\n let canParseAsKeyword = true;\n\n const loc = leftOfAs.loc.start;\n\n // https://github.com/microsoft/TypeScript/blob/fc4f9d83d5939047aa6bb2a43965c6e9bbfbc35b/src/compiler/parser.ts#L7411-L7456\n // import { type } from \"mod\"; - hasTypeSpecifier: false, leftOfAs: type\n // import { type as } from \"mod\"; - hasTypeSpecifier: true, leftOfAs: as\n // import { type as as } from \"mod\"; - hasTypeSpecifier: false, leftOfAs: type, rightOfAs: as\n // import { type as as as } from \"mod\"; - hasTypeSpecifier: true, leftOfAs: as, rightOfAs: as\n if (this.isContextual(tt._as)) {\n // { type as ...? }\n const firstAs = this.parseIdentifier();\n if (this.isContextual(tt._as)) {\n // { type as as ...? }\n const secondAs = this.parseIdentifier();\n if (tokenIsKeywordOrIdentifier(this.state.type)) {\n // { type as as something }\n hasTypeSpecifier = true;\n leftOfAs = firstAs;\n rightOfAs = isImport\n ? this.parseIdentifier()\n : this.parseModuleExportName();\n canParseAsKeyword = false;\n } else {\n // { type as as }\n rightOfAs = secondAs;\n canParseAsKeyword = false;\n }\n } else if (tokenIsKeywordOrIdentifier(this.state.type)) {\n // { type as something }\n canParseAsKeyword = false;\n rightOfAs = isImport\n ? this.parseIdentifier()\n : this.parseModuleExportName();\n } else {\n // { type as }\n hasTypeSpecifier = true;\n leftOfAs = firstAs;\n }\n } else if (tokenIsKeywordOrIdentifier(this.state.type)) {\n // { type something ...? }\n hasTypeSpecifier = true;\n if (isImport) {\n leftOfAs = this.parseIdentifier(true);\n if (!this.isContextual(tt._as)) {\n this.checkReservedWord(\n leftOfAs.name,\n leftOfAs.loc.start,\n true,\n true,\n );\n }\n } else {\n leftOfAs = this.parseModuleExportName();\n }\n }\n if (hasTypeSpecifier && isInTypeOnlyImportExport) {\n this.raise(\n isImport\n ? TSErrors.TypeModifierIsUsedInTypeImports\n : TSErrors.TypeModifierIsUsedInTypeExports,\n { at: loc },\n );\n }\n\n node[leftOfAsKey] = leftOfAs;\n node[rightOfAsKey] = rightOfAs;\n\n const kindKey = isImport ? \"importKind\" : \"exportKind\";\n node[kindKey] = hasTypeSpecifier ? \"type\" : \"value\";\n\n if (canParseAsKeyword && this.eatContextual(tt._as)) {\n node[rightOfAsKey] = isImport\n ? this.parseIdentifier()\n : this.parseModuleExportName();\n }\n if (!node[rightOfAsKey]) {\n node[rightOfAsKey] = cloneIdentifier(node[leftOfAsKey]);\n }\n if (isImport) {\n this.checkIdentifier(\n node[rightOfAsKey],\n hasTypeSpecifier\n ? BindingFlag.TYPE_TS_TYPE_IMPORT\n : BindingFlag.TYPE_TS_VALUE_IMPORT,\n );\n }\n }\n };\n\nfunction isPossiblyLiteralEnum(expression: N.Expression): boolean {\n if (expression.type !== \"MemberExpression\") return false;\n\n const { computed, property } = expression;\n\n if (\n computed &&\n property.type !== \"StringLiteral\" &&\n (property.type !== \"TemplateLiteral\" || property.expressions.length > 0)\n ) {\n return false;\n }\n\n return isUncomputedMemberExpressionChain(expression.object);\n}\n\n// If a const declaration has no type annotation and is initialized to\n// a string literal, numeric literal, or enum reference, then it is\n// allowed. In an ideal world, we'd check whether init was *actually* an\n// enum reference, but we allow anything that \"could be\" a literal enum\n// in `isPossiblyLiteralEnum` since we don't have all the information\n// that the typescript compiler has.\nfunction isValidAmbientConstInitializer(\n expression: N.Expression,\n estree: boolean,\n): boolean {\n const { type } = expression;\n if (expression.extra?.parenthesized) {\n return false;\n }\n if (estree) {\n if (type === \"Literal\") {\n const { value } = expression;\n if (typeof value === \"string\" || typeof value === \"boolean\") {\n return true;\n }\n }\n } else {\n if (type === \"StringLiteral\" || type === \"BooleanLiteral\") {\n return true;\n }\n }\n if (isNumber(expression, estree) || isNegativeNumber(expression, estree)) {\n return true;\n }\n if (type === \"TemplateLiteral\" && expression.expressions.length === 0) {\n return true;\n }\n if (isPossiblyLiteralEnum(expression)) {\n return true;\n }\n return false;\n}\n\nfunction isNumber(expression: N.Expression, estree: boolean): boolean {\n if (estree) {\n return (\n expression.type === \"Literal\" &&\n (typeof expression.value === \"number\" || \"bigint\" in expression)\n );\n }\n return (\n expression.type === \"NumericLiteral\" || expression.type === \"BigIntLiteral\"\n );\n}\n\nfunction isNegativeNumber(expression: N.Expression, estree: boolean): boolean {\n if (expression.type === \"UnaryExpression\") {\n const { operator, argument } = expression as N.UnaryExpression;\n if (operator === \"-\" && isNumber(argument, estree)) {\n return true;\n }\n }\n return false;\n}\n\nfunction isUncomputedMemberExpressionChain(expression: N.Expression): boolean {\n if (expression.type === \"Identifier\") return true;\n if (expression.type !== \"MemberExpression\" || expression.computed) {\n return false;\n }\n\n return isUncomputedMemberExpressionChain(expression.object);\n}\n","import * as charCodes from \"charcodes\";\n\nimport { tokenLabelName, tt } from \"../tokenizer/types.ts\";\nimport type Parser from \"../parser/index.ts\";\nimport type * as N from \"../types.ts\";\nimport { ParseErrorEnum } from \"../parse-error.ts\";\nimport type { Undone } from \"../parser/node.ts\";\nimport type { ExpressionErrors } from \"../parser/util.ts\";\nimport type { BindingTypes } from \"../util/scopeflags.ts\";\nimport type { Position } from \"../util/location.ts\";\n\ntype PossiblePlaceholders = {\n Identifier: N.Identifier;\n StringLiteral: N.StringLiteral;\n Expression: N.Expression;\n Statement: N.Statement;\n Declaration: N.Declaration;\n BlockStatement: N.BlockStatement;\n ClassBody: N.ClassBody;\n Pattern: N.Pattern;\n};\nexport type PlaceholderTypes = keyof PossiblePlaceholders;\n\ntype NodeOf<T extends keyof PossiblePlaceholders> = PossiblePlaceholders[T];\n// todo: when there is proper union type for Node\n// type NodeOf<T extends PlaceholderTypes> = Extract<N.Node, { type: T }>;\n\n// todo: Placeholder<T> breaks everything, because its type is incompatible with\n// the substituted nodes.\ntype MaybePlaceholder<T extends PlaceholderTypes> = NodeOf<T>; // | Placeholder<T>\n\n/* eslint sort-keys: \"error\" */\nconst PlaceholderErrors = ParseErrorEnum`placeholders`({\n ClassNameIsRequired: \"A class name is required.\",\n UnexpectedSpace: \"Unexpected space in placeholder.\",\n});\n\n/* eslint-disable sort-keys */\n\nexport default (superClass: typeof Parser) =>\n class PlaceholdersParserMixin extends superClass implements Parser {\n parsePlaceholder<T extends PlaceholderTypes>(\n expectedNode: T,\n ): /*?N.Placeholder<T>*/ MaybePlaceholder<T> | undefined | null {\n if (this.match(tt.placeholder)) {\n const node = this.startNode();\n this.next();\n this.assertNoSpace();\n\n // We can't use this.parseIdentifier because\n // we don't want nested placeholders.\n node.name = super.parseIdentifier(/* liberal */ true);\n\n this.assertNoSpace();\n this.expect(tt.placeholder);\n // @ts-expect-error placeholder typings\n return this.finishPlaceholder(node, expectedNode);\n }\n }\n\n finishPlaceholder<T extends PlaceholderTypes>(\n node: N.Node,\n expectedNode: T,\n ): /*N.Placeholder<T>*/ MaybePlaceholder<T> {\n const isFinished = !!(node.expectedNode && node.type === \"Placeholder\");\n node.expectedNode = expectedNode;\n\n // @ts-expect-error todo(flow->ts)\n return isFinished ? node : this.finishNode(node, \"Placeholder\");\n }\n\n /* ============================================================ *\n * tokenizer/index.js *\n * ============================================================ */\n\n getTokenFromCode(code: number) {\n if (\n code === charCodes.percentSign &&\n this.input.charCodeAt(this.state.pos + 1) === charCodes.percentSign\n ) {\n this.finishOp(tt.placeholder, 2);\n } else {\n super.getTokenFromCode(code);\n }\n }\n\n /* ============================================================ *\n * parser/expression.js *\n * ============================================================ */\n\n parseExprAtom(\n refExpressionErrors?: ExpressionErrors | null,\n ): MaybePlaceholder<\"Expression\"> {\n return (\n this.parsePlaceholder(\"Expression\") ||\n super.parseExprAtom(refExpressionErrors)\n );\n }\n\n parseIdentifier(liberal?: boolean): MaybePlaceholder<\"Identifier\"> {\n // NOTE: This function only handles identifiers outside of\n // expressions and binding patterns, since they are already\n // handled by the parseExprAtom and parseBindingAtom functions.\n // This is needed, for example, to parse \"class %%NAME%% {}\".\n return (\n this.parsePlaceholder(\"Identifier\") || super.parseIdentifier(liberal)\n );\n }\n\n checkReservedWord(\n word: string,\n startLoc: Position,\n checkKeywords: boolean,\n isBinding: boolean,\n ) {\n // Sometimes we call #checkReservedWord(node.name), expecting\n // that node is an Identifier. If it is a Placeholder, name\n // will be undefined.\n if (word !== undefined) {\n super.checkReservedWord(word, startLoc, checkKeywords, isBinding);\n }\n }\n\n /* ============================================================ *\n * parser/lval.js *\n * ============================================================ */\n\n parseBindingAtom(): MaybePlaceholder<\"Pattern\"> {\n return this.parsePlaceholder(\"Pattern\") || super.parseBindingAtom();\n }\n\n isValidLVal(type: string, isParenthesized: boolean, binding: BindingTypes) {\n return (\n type === \"Placeholder\" ||\n super.isValidLVal(type, isParenthesized, binding)\n );\n }\n\n toAssignable(node: N.Node, isLHS: boolean): void {\n if (\n node &&\n node.type === \"Placeholder\" &&\n node.expectedNode === \"Expression\"\n ) {\n node.expectedNode = \"Pattern\";\n } else {\n super.toAssignable(node, isLHS);\n }\n }\n\n /* ============================================================ *\n * parser/statement.js *\n * ============================================================ */\n\n chStartsBindingIdentifier(ch: number, pos: number): boolean {\n if (super.chStartsBindingIdentifier(ch, pos)) {\n return true;\n }\n\n // Accept \"let %%\" as the start of \"let %%placeholder%%\", as though the\n // placeholder were an identifier.\n const nextToken = this.lookahead();\n if (nextToken.type === tt.placeholder) {\n return true;\n }\n\n return false;\n }\n\n verifyBreakContinue(\n node: N.BreakStatement | N.ContinueStatement,\n isBreak: boolean,\n ) {\n // @ts-expect-error: node.label could be Placeholder\n if (node.label && node.label.type === \"Placeholder\") return;\n super.verifyBreakContinue(node, isBreak);\n }\n\n // @ts-expect-error Plugin will override parser interface\n parseExpressionStatement(\n node: MaybePlaceholder<\"Statement\">,\n expr: N.Expression,\n ): MaybePlaceholder<\"Statement\"> {\n if (expr.type !== \"Placeholder\" || expr.extra?.parenthesized) {\n // @ts-expect-error placeholder typings\n return super.parseExpressionStatement(node, expr);\n }\n\n if (this.match(tt.colon)) {\n // @ts-expect-error placeholder typings\n const stmt: N.LabeledStatement = node;\n stmt.label = this.finishPlaceholder(expr, \"Identifier\");\n this.next();\n stmt.body = super.parseStatementOrSloppyAnnexBFunctionDeclaration();\n return this.finishNode(stmt, \"LabeledStatement\");\n }\n\n this.semicolon();\n node.name = expr.name;\n return this.finishPlaceholder(node, \"Statement\");\n }\n\n parseBlock(\n allowDirectives?: boolean,\n createNewLexicalScope?: boolean,\n afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n ): MaybePlaceholder<\"BlockStatement\"> {\n return (\n this.parsePlaceholder(\"BlockStatement\") ||\n super.parseBlock(\n allowDirectives,\n createNewLexicalScope,\n afterBlockParse,\n )\n );\n }\n\n parseFunctionId(\n requireId?: boolean,\n ): MaybePlaceholder<\"Identifier\"> | undefined | null {\n return (\n this.parsePlaceholder(\"Identifier\") || super.parseFunctionId(requireId)\n );\n }\n // @ts-expect-error Plugin will override parser interface\n parseClass<T extends N.Class>(\n node: T,\n isStatement: /* T === ClassDeclaration */ boolean,\n optionalId?: boolean,\n ): T {\n const type = isStatement ? \"ClassDeclaration\" : \"ClassExpression\";\n\n this.next();\n const oldStrict = this.state.strict;\n\n const placeholder = this.parsePlaceholder(\"Identifier\");\n if (placeholder) {\n if (\n this.match(tt._extends) ||\n this.match(tt.placeholder) ||\n this.match(tt.braceL)\n ) {\n node.id = placeholder;\n } else if (optionalId || !isStatement) {\n node.id = null;\n node.body = this.finishPlaceholder(placeholder, \"ClassBody\");\n return this.finishNode(node, type);\n } else {\n throw this.raise(PlaceholderErrors.ClassNameIsRequired, {\n at: this.state.startLoc,\n });\n }\n } else {\n this.parseClassId(node, isStatement, optionalId);\n }\n\n super.parseClassSuper(node);\n node.body =\n this.parsePlaceholder(\"ClassBody\") ||\n super.parseClassBody(!!node.superClass, oldStrict);\n return this.finishNode(node, type);\n }\n\n parseExport(node: N.Node, decorators: N.Decorator[] | null): N.AnyExport {\n const placeholder = this.parsePlaceholder(\"Identifier\");\n if (!placeholder) return super.parseExport(node, decorators);\n\n if (!this.isContextual(tt._from) && !this.match(tt.comma)) {\n // export %%DECL%%;\n node.specifiers = [];\n node.source = null;\n node.declaration = this.finishPlaceholder(placeholder, \"Declaration\");\n return this.finishNode(node, \"ExportNamedDeclaration\");\n }\n\n // export %%NAME%% from \"foo\";\n this.expectPlugin(\"exportDefaultFrom\");\n const specifier = this.startNode();\n specifier.exported = placeholder;\n node.specifiers = [this.finishNode(specifier, \"ExportDefaultSpecifier\")];\n\n return super.parseExport(node, decorators);\n }\n\n isExportDefaultSpecifier(): boolean {\n if (this.match(tt._default)) {\n const next = this.nextTokenStart();\n if (this.isUnparsedContextual(next, \"from\")) {\n if (\n this.input.startsWith(\n tokenLabelName(tt.placeholder),\n this.nextTokenStartSince(next + 4),\n )\n ) {\n return true;\n }\n }\n }\n return super.isExportDefaultSpecifier();\n }\n\n maybeParseExportDefaultSpecifier(\n node: Undone<\n | N.ExportDefaultDeclaration\n | N.ExportAllDeclaration\n | N.ExportNamedDeclaration\n >,\n maybeDefaultIdentifier: N.Identifier | null,\n ): node is Undone<N.ExportNamedDeclaration> {\n if ((node as N.ExportNamedDeclaration).specifiers?.length) {\n // \"export %%NAME%%\" has already been parsed by #parseExport.\n return true;\n }\n return super.maybeParseExportDefaultSpecifier(\n node,\n maybeDefaultIdentifier,\n );\n }\n\n checkExport(node: N.ExportNamedDeclaration): void {\n const { specifiers } = node;\n if (specifiers?.length) {\n node.specifiers = specifiers.filter(\n // @ts-expect-error placeholder typings\n node => node.exported.type === \"Placeholder\",\n );\n }\n super.checkExport(node);\n node.specifiers = specifiers;\n }\n\n parseImport(\n node: Undone<N.ImportDeclaration>,\n ): N.ImportDeclaration | N.TsImportEqualsDeclaration {\n const placeholder = this.parsePlaceholder(\"Identifier\");\n if (!placeholder) return super.parseImport(node);\n\n node.specifiers = [];\n\n if (!this.isContextual(tt._from) && !this.match(tt.comma)) {\n // import %%STRING%%;\n node.source = this.finishPlaceholder(placeholder, \"StringLiteral\");\n this.semicolon();\n return this.finishNode(node, \"ImportDeclaration\");\n }\n\n // import %%DEFAULT%% ...\n const specifier =\n this.startNodeAtNode<N.ImportDefaultSpecifier>(placeholder);\n specifier.local = placeholder;\n node.specifiers.push(\n this.finishNode(specifier, \"ImportDefaultSpecifier\"),\n );\n\n if (this.eat(tt.comma)) {\n // import %%DEFAULT%%, * as ...\n const hasStarImport = this.maybeParseStarImportSpecifier(node);\n\n // import %%DEFAULT%%, { ...\n if (!hasStarImport) this.parseNamedImportSpecifiers(node);\n }\n\n this.expectContextual(tt._from);\n node.source = this.parseImportSource();\n this.semicolon();\n return this.finishNode(node, \"ImportDeclaration\");\n }\n\n parseImportSource(): MaybePlaceholder<\"StringLiteral\"> {\n // import ... from %%STRING%%;\n\n return (\n this.parsePlaceholder(\"StringLiteral\") || super.parseImportSource()\n );\n }\n\n // Throws if the current token and the prev one are separated by a space.\n assertNoSpace(): void {\n if (this.state.start > this.state.lastTokEndLoc.index) {\n this.raise(PlaceholderErrors.UnexpectedSpace, {\n at: this.state.lastTokEndLoc,\n });\n }\n }\n };\n","import type Parser from \"../parser/index.ts\";\nimport { tokenIsIdentifier, tt } from \"../tokenizer/types.ts\";\nimport type * as N from \"../types.ts\";\nimport type { ExpressionErrors } from \"../parser/util.ts\";\n\nexport default (superClass: typeof Parser) =>\n class V8IntrinsicMixin extends superClass implements Parser {\n parseV8Intrinsic(): N.Expression {\n if (this.match(tt.modulo)) {\n const v8IntrinsicStartLoc = this.state.startLoc;\n // let the `loc` of Identifier starts from `%`\n const node = this.startNode<N.Identifier>();\n this.next(); // eat '%'\n if (tokenIsIdentifier(this.state.type)) {\n const name = this.parseIdentifierName();\n const identifier = this.createIdentifier(node, name);\n // @ts-expect-error: avoid mutating AST types\n identifier.type = \"V8IntrinsicIdentifier\";\n if (this.match(tt.parenL)) {\n return identifier;\n }\n }\n this.unexpected(v8IntrinsicStartLoc);\n }\n }\n\n /* ============================================================ *\n * parser/expression.js *\n * ============================================================ */\n\n parseExprAtom(refExpressionErrors?: ExpressionErrors | null): N.Expression {\n return (\n this.parseV8Intrinsic() || super.parseExprAtom(refExpressionErrors)\n );\n }\n };\n","import type Parser from \"./parser/index.ts\";\nimport type {\n ParserPluginWithOptions,\n PluginConfig,\n PluginOptions,\n} from \"./typings.ts\";\n\nexport type Plugin = PluginConfig;\n\nexport type PluginList = PluginConfig[];\n\nexport type MixinPlugin = (superClass: { new (...args: any): Parser }) => {\n new (...args: any): Parser;\n};\n\n// This functions second parameter accepts either a string (plugin name) or an\n// array pair (plugin name and options object). If an options object is given,\n// then each value is non-recursively checked for identity with the actual\n// option value of each plugin in the first argument (which is an array of\n// plugin names or array pairs).\nexport function hasPlugin(\n plugins: PluginList,\n expectedConfig: PluginConfig,\n): boolean {\n // The expectedOptions object is by default an empty object if the given\n // expectedConfig argument does not give an options object (i.e., if it is a\n // string).\n const [expectedName, expectedOptions] =\n typeof expectedConfig === \"string\" ? [expectedConfig, {}] : expectedConfig;\n\n const expectedKeys = Object.keys(expectedOptions);\n\n const expectedOptionsIsEmpty = expectedKeys.length === 0;\n\n return plugins.some(p => {\n if (typeof p === \"string\") {\n return expectedOptionsIsEmpty && p === expectedName;\n } else {\n const [pluginName, pluginOptions] = p;\n if (pluginName !== expectedName) {\n return false;\n }\n for (const key of expectedKeys) {\n // @ts-expect-error key may not exist in plugin options\n if (pluginOptions[key] !== expectedOptions[key]) {\n return false;\n }\n }\n return true;\n }\n });\n}\n\nexport function getPluginOption<\n PluginName extends ParserPluginWithOptions[0],\n OptionName extends keyof PluginOptions<PluginName>,\n>(plugins: PluginList, name: PluginName, option: OptionName) {\n const plugin = plugins.find(plugin => {\n if (Array.isArray(plugin)) {\n return plugin[0] === name;\n } else {\n return plugin === name;\n }\n });\n\n if (plugin && Array.isArray(plugin) && plugin.length > 1) {\n return (plugin[1] as PluginOptions<PluginName>)[option];\n }\n\n return null;\n}\n\nconst PIPELINE_PROPOSALS = [\"minimal\", \"fsharp\", \"hack\", \"smart\"];\nconst TOPIC_TOKENS = [\"^^\", \"@@\", \"^\", \"%\", \"#\"];\nconst RECORD_AND_TUPLE_SYNTAX_TYPES = [\"hash\", \"bar\"];\n\nexport function validatePlugins(plugins: PluginList) {\n if (hasPlugin(plugins, \"decorators\")) {\n if (hasPlugin(plugins, \"decorators-legacy\")) {\n throw new Error(\n \"Cannot use the decorators and decorators-legacy plugin together\",\n );\n }\n\n const decoratorsBeforeExport = getPluginOption(\n plugins,\n \"decorators\",\n \"decoratorsBeforeExport\",\n );\n if (\n decoratorsBeforeExport != null &&\n typeof decoratorsBeforeExport !== \"boolean\"\n ) {\n throw new Error(\n \"'decoratorsBeforeExport' must be a boolean, if specified.\",\n );\n }\n\n const allowCallParenthesized = getPluginOption(\n plugins,\n \"decorators\",\n \"allowCallParenthesized\",\n );\n if (\n allowCallParenthesized != null &&\n typeof allowCallParenthesized !== \"boolean\"\n ) {\n throw new Error(\"'allowCallParenthesized' must be a boolean.\");\n }\n }\n\n if (hasPlugin(plugins, \"flow\") && hasPlugin(plugins, \"typescript\")) {\n throw new Error(\"Cannot combine flow and typescript plugins.\");\n }\n\n if (hasPlugin(plugins, \"placeholders\") && hasPlugin(plugins, \"v8intrinsic\")) {\n throw new Error(\"Cannot combine placeholders and v8intrinsic plugins.\");\n }\n\n if (hasPlugin(plugins, \"pipelineOperator\")) {\n const proposal = getPluginOption(plugins, \"pipelineOperator\", \"proposal\");\n\n if (!PIPELINE_PROPOSALS.includes(proposal)) {\n const proposalList = PIPELINE_PROPOSALS.map(p => `\"${p}\"`).join(\", \");\n throw new Error(\n `\"pipelineOperator\" requires \"proposal\" option whose value must be one of: ${proposalList}.`,\n );\n }\n\n const tupleSyntaxIsHash = hasPlugin(plugins, [\n \"recordAndTuple\",\n { syntaxType: \"hash\" },\n ]);\n\n if (proposal === \"hack\") {\n if (hasPlugin(plugins, \"placeholders\")) {\n throw new Error(\n \"Cannot combine placeholders plugin and Hack-style pipes.\",\n );\n }\n\n if (hasPlugin(plugins, \"v8intrinsic\")) {\n throw new Error(\n \"Cannot combine v8intrinsic plugin and Hack-style pipes.\",\n );\n }\n\n const topicToken = getPluginOption(\n plugins,\n \"pipelineOperator\",\n \"topicToken\",\n );\n\n if (!TOPIC_TOKENS.includes(topicToken)) {\n const tokenList = TOPIC_TOKENS.map(t => `\"${t}\"`).join(\", \");\n\n throw new Error(\n `\"pipelineOperator\" in \"proposal\": \"hack\" mode also requires a \"topicToken\" option whose value must be one of: ${tokenList}.`,\n );\n }\n\n if (topicToken === \"#\" && tupleSyntaxIsHash) {\n throw new Error(\n 'Plugin conflict between `[\"pipelineOperator\", { proposal: \"hack\", topicToken: \"#\" }]` and `[\"recordAndtuple\", { syntaxType: \"hash\"}]`.',\n );\n }\n } else if (proposal === \"smart\" && tupleSyntaxIsHash) {\n throw new Error(\n 'Plugin conflict between `[\"pipelineOperator\", { proposal: \"smart\" }]` and `[\"recordAndtuple\", { syntaxType: \"hash\"}]`.',\n );\n }\n }\n\n if (hasPlugin(plugins, \"moduleAttributes\")) {\n if (process.env.BABEL_8_BREAKING) {\n throw new Error(\n \"`moduleAttributes` has been removed in Babel 8, please use `importAttributes` parser plugin, or `@babel/plugin-syntax-import-attributes`.\",\n );\n } else {\n if (\n hasPlugin(plugins, \"importAssertions\") ||\n hasPlugin(plugins, \"importAttributes\")\n ) {\n throw new Error(\n \"Cannot combine importAssertions, importAttributes and moduleAttributes plugins.\",\n );\n }\n const moduleAttributesVersionPluginOption = getPluginOption(\n plugins,\n \"moduleAttributes\",\n \"version\",\n );\n if (moduleAttributesVersionPluginOption !== \"may-2020\") {\n throw new Error(\n \"The 'moduleAttributes' plugin requires a 'version' option,\" +\n \" representing the last proposal update. Currently, the\" +\n \" only supported value is 'may-2020'.\",\n );\n }\n }\n }\n if (\n hasPlugin(plugins, \"importAssertions\") &&\n hasPlugin(plugins, \"importAttributes\")\n ) {\n throw new Error(\n \"Cannot combine importAssertions and importAttributes plugins.\",\n );\n }\n\n if (\n hasPlugin(plugins, \"recordAndTuple\") &&\n getPluginOption(plugins, \"recordAndTuple\", \"syntaxType\") != null &&\n !RECORD_AND_TUPLE_SYNTAX_TYPES.includes(\n getPluginOption(plugins, \"recordAndTuple\", \"syntaxType\"),\n )\n ) {\n throw new Error(\n \"The 'syntaxType' option of the 'recordAndTuple' plugin must be one of: \" +\n RECORD_AND_TUPLE_SYNTAX_TYPES.map(p => `'${p}'`).join(\", \"),\n );\n }\n\n if (\n hasPlugin(plugins, \"asyncDoExpressions\") &&\n !hasPlugin(plugins, \"doExpressions\")\n ) {\n const error = new Error(\n \"'asyncDoExpressions' requires 'doExpressions', please add 'doExpressions' to parser plugins.\",\n );\n // @ts-expect-error so @babel/core can provide better error message\n error.missingPlugins = \"doExpressions\";\n throw error;\n }\n\n if (\n hasPlugin(plugins, \"optionalChainingAssign\") &&\n getPluginOption(plugins, \"optionalChainingAssign\", \"version\") !== \"2023-07\"\n ) {\n throw new Error(\n \"The 'optionalChainingAssign' plugin requires a 'version' option,\" +\n \" representing the last proposal update. Currently, the\" +\n \" only supported value is '2023-07'.\",\n );\n }\n}\n\n// These plugins are defined using a mixin which extends the parser class.\n\nimport estree from \"./plugins/estree.ts\";\nimport flow from \"./plugins/flow/index.ts\";\nimport jsx from \"./plugins/jsx/index.ts\";\nimport typescript from \"./plugins/typescript/index.ts\";\nimport placeholders from \"./plugins/placeholders.ts\";\nimport v8intrinsic from \"./plugins/v8intrinsic.ts\";\n\n// NOTE: order is important. estree must come first; placeholders must come last.\nexport const mixinPlugins = {\n estree,\n jsx,\n flow,\n typescript,\n v8intrinsic,\n placeholders,\n};\n\nexport const mixinPluginNames = Object.keys(mixinPlugins) as ReadonlyArray<\n \"estree\" | \"jsx\" | \"flow\" | \"typescript\" | \"v8intrinsic\" | \"placeholders\"\n>;\n","import type { PluginList } from \"./plugin-utils.ts\";\n\n// A second optional argument can be given to further configure\n// the parser process. These options are recognized:\n\nexport type SourceType = \"script\" | \"module\" | \"unambiguous\";\n\nexport type Options = {\n sourceType: SourceType;\n sourceFilename?: string;\n startColumn: number;\n startLine: number;\n allowAwaitOutsideFunction: boolean;\n allowReturnOutsideFunction: boolean;\n allowNewTargetOutsideFunction: boolean;\n allowImportExportEverywhere: boolean;\n allowSuperOutsideMethod: boolean;\n allowUndeclaredExports: boolean;\n plugins: PluginList;\n strictMode: boolean | undefined | null;\n ranges: boolean;\n tokens: boolean;\n createImportExpressions: boolean;\n createParenthesizedExpressions: boolean;\n errorRecovery: boolean;\n attachComment: boolean;\n annexB: boolean;\n};\n\nexport const defaultOptions: Options = {\n // Source type (\"script\" or \"module\") for different semantics\n sourceType: \"script\",\n // Source filename.\n sourceFilename: undefined,\n // Column (0-based) from which to start counting source. Useful for\n // integration with other tools.\n startColumn: 0,\n // Line (1-based) from which to start counting source. Useful for\n // integration with other tools.\n startLine: 1,\n // When enabled, await at the top level is not considered an\n // error.\n allowAwaitOutsideFunction: false,\n // When enabled, a return at the top level is not considered an\n // error.\n allowReturnOutsideFunction: false,\n // When enabled, new.target outside a function or class is not\n // considered an error.\n allowNewTargetOutsideFunction: false,\n // When enabled, import/export statements are not constrained to\n // appearing at the top of the program.\n allowImportExportEverywhere: false,\n // TODO\n allowSuperOutsideMethod: false,\n // When enabled, export statements can reference undeclared variables.\n allowUndeclaredExports: false,\n // An array of plugins to enable\n plugins: [],\n // TODO\n strictMode: null,\n // Nodes have their start and end characters offsets recorded in\n // `start` and `end` properties (directly on the node, rather than\n // the `loc` object, which holds line/column data. To also add a\n // [semi-standardized][range] `range` property holding a `[start,\n // end]` array with the same numbers, set the `ranges` option to\n // `true`.\n //\n // [range]: https://bugzilla.mozilla.org/show_bug.cgi?id=745678\n ranges: false,\n // Adds all parsed tokens to a `tokens` property on the `File` node\n tokens: false,\n // Whether to create ImportExpression AST nodes (if false\n // `import(foo)` will be parsed as CallExpression(Import, [Identifier(foo)])\n createImportExpressions: false,\n // Whether to create ParenthesizedExpression AST nodes (if false\n // the parser sets extra.parenthesized on the expression nodes instead).\n createParenthesizedExpressions: false,\n // When enabled, errors are attached to the AST instead of being directly thrown.\n // Some errors will still throw, because @babel/parser can't always recover.\n errorRecovery: false,\n // When enabled, comments will be attached to adjacent AST nodes as one of\n // `leadingComments`, `trailingComments` and `innerComments`. The comment attachment\n // is vital to preserve comments after transform. If you don't print AST back,\n // consider set this option to `false` for performance\n attachComment: true,\n // When enabled, the parser will support Annex B syntax.\n // https://tc39.es/ecma262/#sec-additional-ecmascript-features-for-web-browsers\n annexB: true,\n};\n\n// Interpret and default an options object\n\nexport function getOptions(opts?: Options | null): Options {\n if (opts == null) {\n return { ...defaultOptions };\n }\n if (opts.annexB != null && opts.annexB !== false) {\n throw new Error(\"The `annexB` option can only be set to `false`.\");\n }\n\n const options: any = {};\n for (const key of Object.keys(defaultOptions) as (keyof Options)[]) {\n options[key] = opts[key] ?? defaultOptions[key];\n }\n return options;\n}\n","// A recursive descent parser operates by defining functions for all\n// syntactic elements, and recursively calling those, each function\n// advancing the input stream and returning an AST node. Precedence\n// of constructs (for example, the fact that `!x[1]` means `!(x[1])`\n// instead of `(!x)[1]` is handled by the fact that the parser\n// function that parses unary prefix operators is called first, and\n// in turn calls the function that parses `[]` subscripts — that\n// way, it'll receive the node for `x[1]` already parsed, and wraps\n// *that* in the unary operator node.\n//\n// Acorn uses an [operator precedence parser][opp] to handle binary\n// operator precedence, because it is much more compact than using\n// the technique outlined above, which uses different, nesting\n// functions to specify precedence, for all of the ten binary\n// precedence levels that JavaScript defines.\n//\n// [opp]: http://en.wikipedia.org/wiki/Operator-precedence_parser\n\nimport {\n tokenCanStartExpression,\n tokenIsAssignment,\n tokenIsIdentifier,\n tokenIsKeywordOrIdentifier,\n tokenIsOperator,\n tokenIsPostfix,\n tokenIsPrefix,\n tokenIsRightAssociative,\n tokenIsTemplate,\n tokenKeywordOrIdentifierIsKeyword,\n tokenLabelName,\n tokenOperatorPrecedence,\n tt,\n type TokenType,\n} from \"../tokenizer/types.ts\";\nimport type * as N from \"../types.ts\";\nimport LValParser from \"./lval.ts\";\nimport {\n isKeyword,\n isReservedWord,\n isStrictReservedWord,\n isStrictBindReservedWord,\n isIdentifierStart,\n canBeReservedWord,\n} from \"../util/identifier.ts\";\nimport {\n type Position,\n createPositionWithColumnOffset,\n} from \"../util/location.ts\";\nimport * as charCodes from \"charcodes\";\nimport { ScopeFlag, BindingFlag } from \"../util/scopeflags.ts\";\nimport { ExpressionErrors } from \"./util.ts\";\nimport {\n PARAM_AWAIT,\n PARAM_IN,\n PARAM_RETURN,\n functionFlags,\n} from \"../util/production-parameter.ts\";\nimport {\n newArrowHeadScope,\n newAsyncArrowScope,\n newExpressionScope,\n} from \"../util/expression-scope.ts\";\nimport { Errors, type ParseError } from \"../parse-error.ts\";\nimport { UnparenthesizedPipeBodyDescriptions } from \"../parse-error/pipeline-operator-errors.ts\";\nimport { setInnerComments } from \"./comments.ts\";\nimport { cloneIdentifier, type Undone } from \"./node.ts\";\nimport type Parser from \"./index.ts\";\n\nimport type { SourceType } from \"../options.ts\";\n\nexport default abstract class ExpressionParser extends LValParser {\n // Forward-declaration: defined in statement.js\n abstract parseBlock(\n allowDirectives?: boolean,\n createNewLexicalScope?: boolean,\n afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n ): N.BlockStatement;\n abstract parseClass(\n node: N.Class,\n isStatement: boolean,\n optionalId?: boolean,\n ): N.Class;\n abstract parseDecorators(allowExport?: boolean): void;\n abstract parseFunction<T extends N.NormalFunction>(\n node: T,\n statement?: number,\n allowExpressionBody?: boolean,\n isAsync?: boolean,\n ): T;\n abstract parseFunctionParams(node: N.Function, isConstructor?: boolean): void;\n abstract parseBlockOrModuleBlockBody(\n body: N.Statement[],\n directives: N.Directive[] | null | undefined,\n topLevel: boolean,\n end: TokenType,\n afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n ): void;\n abstract parseProgram(\n program: N.Program,\n end: TokenType,\n sourceType?: SourceType,\n ): N.Program;\n\n // For object literal, check if property __proto__ has been used more than once.\n // If the expression is a destructuring assignment, then __proto__ may appear\n // multiple times. Otherwise, __proto__ is a duplicated key.\n\n // For record expression, check if property __proto__ exists\n\n checkProto(\n prop: N.ObjectMember | N.SpreadElement,\n isRecord: boolean | undefined | null,\n protoRef: {\n used: boolean;\n },\n refExpressionErrors?: ExpressionErrors | null,\n ): void {\n if (\n prop.type === \"SpreadElement\" ||\n this.isObjectMethod(prop) ||\n prop.computed ||\n // @ts-expect-error prop must be an ObjectProperty\n prop.shorthand\n ) {\n return;\n }\n\n const key = prop.key;\n // It is either an Identifier or a String/NumericLiteral\n const name = key.type === \"Identifier\" ? key.name : key.value;\n\n if (name === \"__proto__\") {\n if (isRecord) {\n this.raise(Errors.RecordNoProto, { at: key });\n return;\n }\n if (protoRef.used) {\n if (refExpressionErrors) {\n // Store the first redefinition's position, otherwise ignore because\n // we are parsing ambiguous pattern\n if (refExpressionErrors.doubleProtoLoc === null) {\n refExpressionErrors.doubleProtoLoc = key.loc.start;\n }\n } else {\n this.raise(Errors.DuplicateProto, { at: key });\n }\n }\n\n protoRef.used = true;\n }\n }\n\n shouldExitDescending(expr: N.Expression, potentialArrowAt: number): boolean {\n return (\n expr.type === \"ArrowFunctionExpression\" && expr.start === potentialArrowAt\n );\n }\n\n // Convenience method to parse an Expression only\n getExpression(this: Parser): N.Expression & N.ParserOutput {\n this.enterInitialScopes();\n this.nextToken();\n const expr = this.parseExpression();\n if (!this.match(tt.eof)) {\n this.unexpected();\n }\n // Unlike parseTopLevel, we need to drain remaining commentStacks\n // because the top level node is _not_ Program.\n this.finalizeRemainingComments();\n expr.comments = this.state.comments;\n expr.errors = this.state.errors;\n if (this.options.tokens) {\n expr.tokens = this.tokens;\n }\n // @ts-expect-error fixme: refine types\n return expr;\n }\n\n // ### Expression parsing\n\n // These nest, from the most general expression type at the top to\n // 'atomic', nondivisible expression types at the bottom. Most of\n // the functions will simply let the function (s) below them parse,\n // and, *if* the syntactic construct they handle is present, wrap\n // the AST node that the inner parser gave them in another node.\n\n // Parse a full expression.\n // - `disallowIn`\n // is used to forbid the `in` operator (in for loops initialization expressions)\n // When `disallowIn` is true, the production parameter [In] is not present.\n\n // - `refExpressionErrors `\n // provides reference for storing '=' operator inside shorthand\n // property assignment in contexts where both object expression\n // and object pattern might appear (so it's possible to raise\n // delayed syntax error at correct position).\n\n parseExpression(\n this: Parser,\n disallowIn?: boolean,\n refExpressionErrors?: ExpressionErrors,\n ): N.Expression {\n if (disallowIn) {\n return this.disallowInAnd(() =>\n this.parseExpressionBase(refExpressionErrors),\n );\n }\n return this.allowInAnd(() => this.parseExpressionBase(refExpressionErrors));\n }\n\n // https://tc39.es/ecma262/#prod-Expression\n parseExpressionBase(\n this: Parser,\n refExpressionErrors?: ExpressionErrors,\n ): N.Expression {\n const startLoc = this.state.startLoc;\n const expr = this.parseMaybeAssign(refExpressionErrors);\n if (this.match(tt.comma)) {\n const node = this.startNodeAt(startLoc);\n node.expressions = [expr];\n while (this.eat(tt.comma)) {\n node.expressions.push(this.parseMaybeAssign(refExpressionErrors));\n }\n this.toReferencedList(node.expressions);\n return this.finishNode(node, \"SequenceExpression\");\n }\n return expr;\n }\n\n // Set [~In] parameter for assignment expression\n parseMaybeAssignDisallowIn(\n this: Parser,\n refExpressionErrors?: ExpressionErrors | null,\n afterLeftParse?: Function,\n ) {\n return this.disallowInAnd(() =>\n this.parseMaybeAssign(refExpressionErrors, afterLeftParse),\n );\n }\n\n // Set [+In] parameter for assignment expression\n parseMaybeAssignAllowIn(\n this: Parser,\n refExpressionErrors?: ExpressionErrors | null,\n afterLeftParse?: Function,\n ) {\n return this.allowInAnd(() =>\n this.parseMaybeAssign(refExpressionErrors, afterLeftParse),\n );\n }\n\n // This method is only used by\n // the typescript and flow plugins.\n setOptionalParametersError(\n refExpressionErrors: ExpressionErrors,\n resultError?: ParseError<any>,\n ) {\n refExpressionErrors.optionalParametersLoc =\n resultError?.loc ?? this.state.startLoc;\n }\n\n // Parse an assignment expression. This includes applications of\n // operators like `+=`.\n // https://tc39.es/ecma262/#prod-AssignmentExpression\n parseMaybeAssign(\n this: Parser,\n refExpressionErrors?: ExpressionErrors | null,\n afterLeftParse?: Function,\n ): N.Expression {\n const startLoc = this.state.startLoc;\n if (this.isContextual(tt._yield)) {\n if (this.prodParam.hasYield) {\n let left = this.parseYield();\n if (afterLeftParse) {\n left = afterLeftParse.call(this, left, startLoc);\n }\n return left;\n }\n }\n\n let ownExpressionErrors;\n if (refExpressionErrors) {\n ownExpressionErrors = false;\n } else {\n refExpressionErrors = new ExpressionErrors();\n ownExpressionErrors = true;\n }\n const { type } = this.state;\n\n if (type === tt.parenL || tokenIsIdentifier(type)) {\n this.state.potentialArrowAt = this.state.start;\n }\n\n let left = this.parseMaybeConditional(refExpressionErrors);\n if (afterLeftParse) {\n left = afterLeftParse.call(this, left, startLoc);\n }\n if (tokenIsAssignment(this.state.type)) {\n const node = this.startNodeAt<N.AssignmentExpression>(startLoc);\n const operator = this.state.value;\n node.operator = operator;\n\n if (this.match(tt.eq)) {\n this.toAssignable(left, /* isLHS */ true);\n node.left = left;\n\n const startIndex = startLoc.index;\n if (\n refExpressionErrors.doubleProtoLoc != null &&\n refExpressionErrors.doubleProtoLoc.index >= startIndex\n ) {\n refExpressionErrors.doubleProtoLoc = null; // reset because double __proto__ is valid in assignment expression\n }\n if (\n refExpressionErrors.shorthandAssignLoc != null &&\n refExpressionErrors.shorthandAssignLoc.index >= startIndex\n ) {\n refExpressionErrors.shorthandAssignLoc = null; // reset because shorthand default was used correctly\n }\n if (\n refExpressionErrors.privateKeyLoc != null &&\n refExpressionErrors.privateKeyLoc.index >= startIndex\n ) {\n this.checkDestructuringPrivate(refExpressionErrors);\n refExpressionErrors.privateKeyLoc = null; // reset because `({ #x: x })` is an assignable pattern\n }\n } else {\n node.left = left;\n }\n\n this.next();\n node.right = this.parseMaybeAssign();\n this.checkLVal(left, {\n in: this.finishNode(node, \"AssignmentExpression\"),\n });\n // @ts-expect-error todo(flow->ts) improve node types\n return node;\n } else if (ownExpressionErrors) {\n this.checkExpressionErrors(refExpressionErrors, true);\n }\n\n return left;\n }\n\n // Parse a ternary conditional (`?:`) operator.\n // https://tc39.es/ecma262/#prod-ConditionalExpression\n\n parseMaybeConditional(\n this: Parser,\n refExpressionErrors: ExpressionErrors,\n ): N.Expression {\n const startLoc = this.state.startLoc;\n const potentialArrowAt = this.state.potentialArrowAt;\n const expr = this.parseExprOps(refExpressionErrors);\n\n if (this.shouldExitDescending(expr, potentialArrowAt)) {\n return expr;\n }\n\n return this.parseConditional(expr, startLoc, refExpressionErrors);\n }\n\n parseConditional(\n this: Parser,\n expr: N.Expression,\n startLoc: Position,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n refExpressionErrors?: ExpressionErrors | null,\n ): N.Expression {\n if (this.eat(tt.question)) {\n const node = this.startNodeAt(startLoc);\n node.test = expr;\n node.consequent = this.parseMaybeAssignAllowIn();\n this.expect(tt.colon);\n node.alternate = this.parseMaybeAssign();\n return this.finishNode(node, \"ConditionalExpression\");\n }\n return expr;\n }\n\n parseMaybeUnaryOrPrivate(\n this: Parser,\n refExpressionErrors?: ExpressionErrors,\n ): N.Expression | N.PrivateName {\n return this.match(tt.privateName)\n ? this.parsePrivateName()\n : this.parseMaybeUnary(refExpressionErrors);\n }\n\n // Start the precedence parser.\n // https://tc39.es/ecma262/#prod-ShortCircuitExpression\n\n parseExprOps(\n this: Parser,\n refExpressionErrors: ExpressionErrors,\n ): N.Expression {\n const startLoc = this.state.startLoc;\n const potentialArrowAt = this.state.potentialArrowAt;\n const expr = this.parseMaybeUnaryOrPrivate(refExpressionErrors);\n\n if (this.shouldExitDescending(expr, potentialArrowAt)) {\n return expr;\n }\n\n return this.parseExprOp(expr, startLoc, -1);\n }\n\n // Parse binary operators with the operator precedence parsing\n // algorithm. `left` is the left-hand side of the operator.\n // `minPrec` provides context that allows the function to stop and\n // defer further parser to one of its callers when it encounters an\n // operator that has a lower precedence than the set it is parsing.\n\n parseExprOp(\n this: Parser,\n left: N.Expression | N.PrivateName,\n leftStartLoc: Position,\n minPrec: number,\n ): N.Expression {\n if (this.isPrivateName(left)) {\n // https://tc39.es/ecma262/#prod-RelationalExpression\n // RelationalExpression [In, Yield, Await]\n // [+In] PrivateIdentifier in ShiftExpression[?Yield, ?Await]\n\n const value = this.getPrivateNameSV(left);\n\n if (\n minPrec >= tokenOperatorPrecedence(tt._in) ||\n !this.prodParam.hasIn ||\n !this.match(tt._in)\n ) {\n this.raise(Errors.PrivateInExpectedIn, {\n at: left,\n identifierName: value,\n });\n }\n\n this.classScope.usePrivateName(value, left.loc.start);\n }\n\n const op = this.state.type;\n if (tokenIsOperator(op) && (this.prodParam.hasIn || !this.match(tt._in))) {\n let prec = tokenOperatorPrecedence(op);\n if (prec > minPrec) {\n if (op === tt.pipeline) {\n this.expectPlugin(\"pipelineOperator\");\n if (this.state.inFSharpPipelineDirectBody) {\n return left;\n }\n this.checkPipelineAtInfixOperator(left, leftStartLoc);\n }\n const node = this.startNodeAt<N.LogicalExpression | N.BinaryExpression>(\n leftStartLoc,\n );\n node.left = left;\n node.operator = this.state.value;\n\n const logical = op === tt.logicalOR || op === tt.logicalAND;\n const coalesce = op === tt.nullishCoalescing;\n\n if (coalesce) {\n // Handle the precedence of `tt.coalesce` as equal to the range of logical expressions.\n // In other words, `node.right` shouldn't contain logical expressions in order to check the mixed error.\n prec = tokenOperatorPrecedence(tt.logicalAND);\n }\n\n this.next();\n\n if (\n op === tt.pipeline &&\n this.hasPlugin([\"pipelineOperator\", { proposal: \"minimal\" }])\n ) {\n if (this.state.type === tt._await && this.prodParam.hasAwait) {\n throw this.raise(Errors.UnexpectedAwaitAfterPipelineBody, {\n at: this.state.startLoc,\n });\n }\n }\n\n node.right = this.parseExprOpRightExpr(op, prec);\n const finishedNode = this.finishNode(\n node,\n logical || coalesce ? \"LogicalExpression\" : \"BinaryExpression\",\n );\n /* this check is for all ?? operators\n * a ?? b && c for this example\n * when op is coalesce and nextOp is logical (&&), throw at the pos of nextOp that it can not be mixed.\n * Symmetrically it also throws when op is logical and nextOp is coalesce\n */\n const nextOp = this.state.type;\n if (\n (coalesce && (nextOp === tt.logicalOR || nextOp === tt.logicalAND)) ||\n (logical && nextOp === tt.nullishCoalescing)\n ) {\n throw this.raise(Errors.MixingCoalesceWithLogical, {\n at: this.state.startLoc,\n });\n }\n\n return this.parseExprOp(finishedNode, leftStartLoc, minPrec);\n }\n }\n return left;\n }\n\n // Helper function for `parseExprOp`. Parse the right-hand side of binary-\n // operator expressions, then apply any operator-specific functions.\n\n parseExprOpRightExpr(\n this: Parser,\n op: TokenType,\n prec: number,\n ): N.Expression {\n const startLoc = this.state.startLoc;\n switch (op) {\n case tt.pipeline:\n switch (this.getPluginOption(\"pipelineOperator\", \"proposal\")) {\n case \"hack\":\n return this.withTopicBindingContext(() => {\n return this.parseHackPipeBody();\n });\n\n case \"smart\":\n return this.withTopicBindingContext(() => {\n if (this.prodParam.hasYield && this.isContextual(tt._yield)) {\n throw this.raise(Errors.PipeBodyIsTighter, {\n at: this.state.startLoc,\n });\n }\n return this.parseSmartPipelineBodyInStyle(\n this.parseExprOpBaseRightExpr(op, prec),\n startLoc,\n );\n });\n\n case \"fsharp\":\n return this.withSoloAwaitPermittingContext(() => {\n return this.parseFSharpPipelineBody(prec);\n });\n }\n\n // Falls through.\n default:\n return this.parseExprOpBaseRightExpr(op, prec);\n }\n }\n\n // Helper function for `parseExprOpRightExpr`. Parse the right-hand side of\n // binary-operator expressions without applying any operator-specific functions.\n\n parseExprOpBaseRightExpr(\n this: Parser,\n op: TokenType,\n prec: number,\n ): N.Expression {\n const startLoc = this.state.startLoc;\n\n return this.parseExprOp(\n this.parseMaybeUnaryOrPrivate(),\n startLoc,\n tokenIsRightAssociative(op) ? prec - 1 : prec,\n );\n }\n\n parseHackPipeBody(this: Parser): N.Expression {\n const { startLoc } = this.state;\n const body = this.parseMaybeAssign();\n const requiredParentheses = UnparenthesizedPipeBodyDescriptions.has(\n // @ts-expect-error TS2345: Argument of type 'string' is not assignable to parameter of type '\"ArrowFunctionExpression\" | \"YieldExpression\" | \"AssignmentExpression\" | \"ConditionalExpression\"'.\n body.type,\n );\n\n // TODO: Check how to handle type casts in Flow and TS once they are supported\n if (requiredParentheses && !body.extra?.parenthesized) {\n this.raise(Errors.PipeUnparenthesizedBody, {\n at: startLoc,\n // @ts-expect-error TS2322: Type 'string' is not assignable to type '\"AssignmentExpression\" | \"ArrowFunctionExpression\" | \"ConditionalExpression\" | \"YieldExpression\"'.\n type: body.type,\n });\n }\n if (!this.topicReferenceWasUsedInCurrentContext()) {\n // A Hack pipe body must use the topic reference at least once.\n this.raise(Errors.PipeTopicUnused, { at: startLoc });\n }\n\n return body;\n }\n\n checkExponentialAfterUnary(\n node: N.AwaitExpression | Undone<N.UnaryExpression>,\n ) {\n if (this.match(tt.exponent)) {\n this.raise(Errors.UnexpectedTokenUnaryExponentiation, {\n at: node.argument,\n });\n }\n }\n\n // Parse unary operators, both prefix and postfix.\n // https://tc39.es/ecma262/#prod-UnaryExpression\n parseMaybeUnary(\n this: Parser,\n refExpressionErrors?: ExpressionErrors | null,\n sawUnary?: boolean,\n ): N.Expression {\n const startLoc = this.state.startLoc;\n const isAwait = this.isContextual(tt._await);\n\n if (isAwait && this.isAwaitAllowed()) {\n this.next();\n const expr = this.parseAwait(startLoc);\n if (!sawUnary) this.checkExponentialAfterUnary(expr);\n return expr;\n }\n const update = this.match(tt.incDec);\n const node = this.startNode<N.UnaryExpression | N.UpdateExpression>();\n if (tokenIsPrefix(this.state.type)) {\n node.operator = this.state.value;\n node.prefix = true;\n\n if (this.match(tt._throw)) {\n this.expectPlugin(\"throwExpressions\");\n }\n const isDelete = this.match(tt._delete);\n this.next();\n\n node.argument = this.parseMaybeUnary(null, true);\n\n this.checkExpressionErrors(refExpressionErrors, true);\n\n if (this.state.strict && isDelete) {\n const arg = node.argument;\n\n if (arg.type === \"Identifier\") {\n this.raise(Errors.StrictDelete, { at: node });\n } else if (this.hasPropertyAsPrivateName(arg)) {\n this.raise(Errors.DeletePrivateField, { at: node });\n }\n }\n\n if (!update) {\n if (!sawUnary) {\n this.checkExponentialAfterUnary(node as Undone<N.UnaryExpression>);\n }\n return this.finishNode(node, \"UnaryExpression\");\n }\n }\n\n const expr = this.parseUpdate(\n // @ts-expect-error using \"Undone\" node as \"done\"\n node,\n update,\n refExpressionErrors,\n );\n\n if (isAwait) {\n const { type } = this.state;\n const startsExpr = this.hasPlugin(\"v8intrinsic\")\n ? tokenCanStartExpression(type)\n : tokenCanStartExpression(type) && !this.match(tt.modulo);\n if (startsExpr && !this.isAmbiguousAwait()) {\n this.raiseOverwrite(Errors.AwaitNotInAsyncContext, { at: startLoc });\n return this.parseAwait(startLoc);\n }\n }\n\n return expr;\n }\n\n // https://tc39.es/ecma262/#prod-UpdateExpression\n parseUpdate(\n this: Parser,\n node: N.Expression,\n update: boolean,\n refExpressionErrors?: ExpressionErrors | null,\n ): N.Expression {\n if (update) {\n // @ts-expect-error Type 'Node' is missing the following properties from type 'Undone<UpdateExpression>': prefix, operator, argument\n const updateExpressionNode = node as Undone<N.UpdateExpression>;\n this.checkLVal(updateExpressionNode.argument, {\n in: this.finishNode(updateExpressionNode, \"UpdateExpression\"),\n });\n return node;\n }\n\n const startLoc = this.state.startLoc;\n let expr = this.parseExprSubscripts(refExpressionErrors);\n if (this.checkExpressionErrors(refExpressionErrors, false)) return expr;\n while (tokenIsPostfix(this.state.type) && !this.canInsertSemicolon()) {\n const node = this.startNodeAt<N.UpdateExpression>(startLoc);\n node.operator = this.state.value;\n node.prefix = false;\n node.argument = expr;\n this.next();\n this.checkLVal(expr, {\n in: (expr = this.finishNode(node, \"UpdateExpression\")),\n });\n }\n return expr;\n }\n\n // Parse call, dot, and `[]`-subscript expressions.\n // https://tc39.es/ecma262/#prod-LeftHandSideExpression\n parseExprSubscripts(\n this: Parser,\n refExpressionErrors?: ExpressionErrors | null,\n ): N.Expression {\n const startLoc = this.state.startLoc;\n const potentialArrowAt = this.state.potentialArrowAt;\n const expr = this.parseExprAtom(refExpressionErrors);\n\n if (this.shouldExitDescending(expr, potentialArrowAt)) {\n return expr;\n }\n\n return this.parseSubscripts(expr, startLoc);\n }\n\n parseSubscripts(\n this: Parser,\n base: N.Expression,\n startLoc: Position,\n noCalls?: boolean | null,\n ): N.Expression {\n const state = {\n optionalChainMember: false,\n maybeAsyncArrow: this.atPossibleAsyncArrow(base),\n stop: false,\n };\n do {\n base = this.parseSubscript(base, startLoc, noCalls, state);\n\n // After parsing a subscript, this isn't \"async\" for sure.\n state.maybeAsyncArrow = false;\n } while (!state.stop);\n return base;\n }\n\n /**\n * @param state Set 'state.stop = true' to indicate that we should stop parsing subscripts.\n * state.optionalChainMember to indicate that the member is currently in OptionalChain\n */\n parseSubscript(\n this: Parser,\n base: N.Expression,\n startLoc: Position,\n noCalls: boolean | undefined | null,\n state: N.ParseSubscriptState,\n ): N.Expression {\n const { type } = this.state;\n if (!noCalls && type === tt.doubleColon) {\n return this.parseBind(base, startLoc, noCalls, state);\n } else if (tokenIsTemplate(type)) {\n return this.parseTaggedTemplateExpression(base, startLoc, state);\n }\n\n let optional = false;\n\n if (type === tt.questionDot) {\n if (noCalls) {\n this.raise(Errors.OptionalChainingNoNew, {\n at: this.state.startLoc,\n });\n if (this.lookaheadCharCode() === charCodes.leftParenthesis) {\n // stop at `?.` when parsing `new a?.()`\n state.stop = true;\n return base;\n }\n }\n state.optionalChainMember = optional = true;\n this.next();\n }\n\n if (!noCalls && this.match(tt.parenL)) {\n return this.parseCoverCallAndAsyncArrowHead(\n base,\n startLoc,\n state,\n optional,\n );\n } else {\n const computed = this.eat(tt.bracketL);\n if (computed || optional || this.eat(tt.dot)) {\n return this.parseMember(base, startLoc, state, computed, optional);\n } else {\n state.stop = true;\n return base;\n }\n }\n }\n\n // base[?Yield, ?Await] [ Expression[+In, ?Yield, ?Await] ]\n // base[?Yield, ?Await] . IdentifierName\n // base[?Yield, ?Await] . PrivateIdentifier\n // where `base` is one of CallExpression, MemberExpression and OptionalChain\n parseMember(\n this: Parser,\n base: N.Expression,\n startLoc: Position,\n state: N.ParseSubscriptState,\n computed: boolean,\n optional: boolean,\n ): N.OptionalMemberExpression | N.MemberExpression {\n const node = this.startNodeAt<\n N.OptionalMemberExpression | N.MemberExpression\n >(startLoc);\n node.object = base;\n node.computed = computed;\n if (computed) {\n node.property = this.parseExpression();\n this.expect(tt.bracketR);\n } else if (this.match(tt.privateName)) {\n if (base.type === \"Super\") {\n this.raise(Errors.SuperPrivateField, { at: startLoc });\n }\n this.classScope.usePrivateName(this.state.value, this.state.startLoc);\n node.property = this.parsePrivateName();\n } else {\n node.property = this.parseIdentifier(true);\n }\n\n if (state.optionalChainMember) {\n (node as N.OptionalMemberExpression).optional = optional;\n return this.finishNode(node, \"OptionalMemberExpression\");\n } else {\n return this.finishNode(node, \"MemberExpression\");\n }\n }\n\n // https://github.com/tc39/proposal-bind-operator#syntax\n parseBind(\n this: Parser,\n base: N.Expression,\n startLoc: Position,\n noCalls: boolean | undefined | null,\n state: N.ParseSubscriptState,\n ): N.Expression {\n const node = this.startNodeAt(startLoc);\n node.object = base;\n this.next(); // eat '::'\n node.callee = this.parseNoCallExpr();\n state.stop = true;\n return this.parseSubscripts(\n this.finishNode(node, \"BindExpression\"),\n startLoc,\n noCalls,\n );\n }\n\n // https://tc39.es/ecma262/#prod-CoverCallExpressionAndAsyncArrowHead\n // CoverCallExpressionAndAsyncArrowHead\n // CallExpression[?Yield, ?Await] Arguments[?Yield, ?Await]\n // OptionalChain[?Yield, ?Await] Arguments[?Yield, ?Await]\n parseCoverCallAndAsyncArrowHead(\n this: Parser,\n base: N.Expression,\n startLoc: Position,\n state: N.ParseSubscriptState,\n optional: boolean,\n ): N.Expression {\n const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n let refExpressionErrors: ExpressionErrors | null = null;\n\n this.state.maybeInArrowParameters = true;\n this.next(); // eat `(`\n\n const node = this.startNodeAt<N.CallExpression | N.OptionalCallExpression>(\n startLoc,\n );\n node.callee = base;\n const { maybeAsyncArrow, optionalChainMember } = state;\n\n if (maybeAsyncArrow) {\n this.expressionScope.enter(newAsyncArrowScope());\n refExpressionErrors = new ExpressionErrors();\n }\n\n if (optionalChainMember) {\n // @ts-expect-error when optionalChainMember is true, node must be an optional call\n node.optional = optional;\n }\n\n if (optional) {\n node.arguments = this.parseCallExpressionArguments(tt.parenR);\n } else {\n node.arguments = this.parseCallExpressionArguments(\n tt.parenR,\n base.type === \"Import\",\n base.type !== \"Super\",\n // @ts-expect-error todo(flow->ts)\n node,\n refExpressionErrors,\n );\n }\n let finishedNode:\n | N.CallExpression\n | N.OptionalCallExpression\n | N.ArrowFunctionExpression = this.finishCallExpression(\n node,\n optionalChainMember,\n );\n\n if (maybeAsyncArrow && this.shouldParseAsyncArrow() && !optional) {\n /*:: invariant(refExpressionErrors != null) */\n state.stop = true;\n this.checkDestructuringPrivate(refExpressionErrors);\n this.expressionScope.validateAsPattern();\n this.expressionScope.exit();\n finishedNode = this.parseAsyncArrowFromCallExpression(\n this.startNodeAt<N.ArrowFunctionExpression>(startLoc),\n finishedNode as N.CallExpression,\n );\n } else {\n if (maybeAsyncArrow) {\n this.checkExpressionErrors(refExpressionErrors, true);\n this.expressionScope.exit();\n }\n this.toReferencedArguments(finishedNode);\n }\n\n this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n\n return finishedNode;\n }\n\n toReferencedArguments(\n node: N.CallExpression | N.OptionalCallExpression,\n isParenthesizedExpr?: boolean,\n ) {\n this.toReferencedListDeep(node.arguments, isParenthesizedExpr);\n }\n\n // MemberExpression [?Yield, ?Await] TemplateLiteral[?Yield, ?Await, +Tagged]\n // CallExpression [?Yield, ?Await] TemplateLiteral[?Yield, ?Await, +Tagged]\n parseTaggedTemplateExpression(\n this: Parser,\n base: N.Expression,\n startLoc: Position,\n state: N.ParseSubscriptState,\n ): N.TaggedTemplateExpression {\n const node = this.startNodeAt<N.TaggedTemplateExpression>(startLoc);\n node.tag = base;\n node.quasi = this.parseTemplate(true);\n if (state.optionalChainMember) {\n this.raise(Errors.OptionalChainingNoTemplate, { at: startLoc });\n }\n return this.finishNode(node, \"TaggedTemplateExpression\");\n }\n\n atPossibleAsyncArrow(base: N.Expression): boolean {\n return (\n base.type === \"Identifier\" &&\n base.name === \"async\" &&\n this.state.lastTokEndLoc.index === base.end &&\n !this.canInsertSemicolon() &&\n // check there are no escape sequences, such as \\u{61}sync\n base.end - base.start === 5 &&\n base.start === this.state.potentialArrowAt\n );\n }\n\n expectImportAttributesPlugin() {\n if (!this.hasPlugin(\"importAssertions\")) {\n this.expectPlugin(\"importAttributes\");\n }\n }\n\n finishCallExpression<T extends N.CallExpression | N.OptionalCallExpression>(\n node: Undone<T>,\n optional: boolean,\n ): T {\n if (node.callee.type === \"Import\") {\n if (node.arguments.length === 2) {\n if (process.env.BABEL_8_BREAKING) {\n this.expectImportAttributesPlugin();\n } else {\n if (!this.hasPlugin(\"moduleAttributes\")) {\n this.expectImportAttributesPlugin();\n }\n }\n }\n if (node.arguments.length === 0 || node.arguments.length > 2) {\n this.raise(Errors.ImportCallArity, {\n at: node,\n maxArgumentCount:\n this.hasPlugin(\"importAttributes\") ||\n this.hasPlugin(\"importAssertions\") ||\n this.hasPlugin(\"moduleAttributes\")\n ? 2\n : 1,\n });\n } else {\n for (const arg of node.arguments) {\n if (arg.type === \"SpreadElement\") {\n this.raise(Errors.ImportCallSpreadArgument, { at: arg });\n }\n }\n }\n }\n return this.finishNode(\n node,\n optional ? \"OptionalCallExpression\" : \"CallExpression\",\n );\n }\n\n parseCallExpressionArguments(\n this: Parser,\n close: TokenType,\n dynamicImport?: boolean,\n allowPlaceholder?: boolean,\n nodeForExtra?: N.Node | null,\n refExpressionErrors?: ExpressionErrors | null,\n ): Array<N.Expression | undefined | null> {\n const elts: N.Expression[] = [];\n let first = true;\n const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n this.state.inFSharpPipelineDirectBody = false;\n\n while (!this.eat(close)) {\n if (first) {\n first = false;\n } else {\n this.expect(tt.comma);\n if (this.match(close)) {\n if (\n dynamicImport &&\n !this.hasPlugin(\"importAttributes\") &&\n !this.hasPlugin(\"importAssertions\") &&\n !this.hasPlugin(\"moduleAttributes\")\n ) {\n this.raise(Errors.ImportCallArgumentTrailingComma, {\n at: this.state.lastTokStartLoc,\n });\n }\n if (nodeForExtra) {\n this.addTrailingCommaExtraToNode(nodeForExtra);\n }\n this.next();\n break;\n }\n }\n\n elts.push(\n this.parseExprListItem(false, refExpressionErrors, allowPlaceholder),\n );\n }\n\n this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n\n return elts;\n }\n\n shouldParseAsyncArrow(): boolean {\n return this.match(tt.arrow) && !this.canInsertSemicolon();\n }\n\n parseAsyncArrowFromCallExpression(\n this: Parser,\n node: Undone<N.ArrowFunctionExpression>,\n call: N.CallExpression,\n ): N.ArrowFunctionExpression {\n this.resetPreviousNodeTrailingComments(call);\n this.expect(tt.arrow);\n this.parseArrowExpression(\n node,\n call.arguments,\n true,\n call.extra?.trailingCommaLoc,\n );\n // mark inner comments of `async()` as inner comments of `async () =>`\n if (call.innerComments) {\n setInnerComments(node, call.innerComments);\n }\n // mark trailing comments of `async` to be inner comments\n if (call.callee.trailingComments) {\n setInnerComments(node, call.callee.trailingComments);\n }\n return node as N.ArrowFunctionExpression;\n }\n\n // Parse a no-call expression (like argument of `new` or `::` operators).\n // https://tc39.es/ecma262/#prod-MemberExpression\n parseNoCallExpr(this: Parser): N.Expression {\n const startLoc = this.state.startLoc;\n return this.parseSubscripts(this.parseExprAtom(), startLoc, true);\n }\n\n // Parse an atomic expression — either a single token that is an\n // expression, an expression started by a keyword like `function` or\n // `new`, or an expression wrapped in punctuation like `()`, `[]`,\n // or `{}`.\n\n // https://tc39.es/ecma262/#prod-PrimaryExpression\n // https://tc39.es/ecma262/#prod-AsyncArrowFunction\n // PrimaryExpression\n // Super\n // Import\n // AsyncArrowFunction\n\n parseExprAtom(\n this: Parser,\n refExpressionErrors?: ExpressionErrors | null,\n ): N.Expression {\n let node;\n let decorators: N.Decorator[] | null = null;\n\n const { type } = this.state;\n switch (type) {\n case tt._super:\n return this.parseSuper();\n\n case tt._import:\n node = this.startNode<N.MetaProperty | N.Import | N.ImportExpression>();\n this.next();\n\n if (this.match(tt.dot)) {\n return this.parseImportMetaProperty(node as Undone<N.MetaProperty>);\n }\n\n if (this.match(tt.parenL)) {\n if (this.options.createImportExpressions) {\n return this.parseImportCall(node as Undone<N.ImportExpression>);\n } else {\n return this.finishNode(node, \"Import\");\n }\n } else {\n this.raise(Errors.UnsupportedImport, {\n at: this.state.lastTokStartLoc,\n });\n return this.finishNode(node, \"Import\");\n }\n\n case tt._this:\n node = this.startNode();\n this.next();\n return this.finishNode(node, \"ThisExpression\");\n\n case tt._do: {\n return this.parseDo(this.startNode(), false);\n }\n\n case tt.slash:\n case tt.slashAssign: {\n this.readRegexp();\n return this.parseRegExpLiteral(this.state.value);\n }\n\n case tt.num:\n return this.parseNumericLiteral(this.state.value);\n\n case tt.bigint:\n return this.parseBigIntLiteral(this.state.value);\n\n case tt.decimal:\n return this.parseDecimalLiteral(this.state.value);\n\n case tt.string:\n return this.parseStringLiteral(this.state.value);\n\n case tt._null:\n return this.parseNullLiteral();\n\n case tt._true:\n return this.parseBooleanLiteral(true);\n case tt._false:\n return this.parseBooleanLiteral(false);\n\n case tt.parenL: {\n const canBeArrow = this.state.potentialArrowAt === this.state.start;\n return this.parseParenAndDistinguishExpression(canBeArrow);\n }\n\n case tt.bracketBarL:\n case tt.bracketHashL: {\n return this.parseArrayLike(\n this.state.type === tt.bracketBarL ? tt.bracketBarR : tt.bracketR,\n /* canBePattern */ false,\n /* isTuple */ true,\n );\n }\n case tt.bracketL: {\n return this.parseArrayLike(\n tt.bracketR,\n /* canBePattern */ true,\n /* isTuple */ false,\n refExpressionErrors,\n );\n }\n case tt.braceBarL:\n case tt.braceHashL: {\n return this.parseObjectLike(\n this.state.type === tt.braceBarL ? tt.braceBarR : tt.braceR,\n /* isPattern */ false,\n /* isRecord */ true,\n );\n }\n case tt.braceL: {\n return this.parseObjectLike(\n tt.braceR,\n /* isPattern */ false,\n /* isRecord */ false,\n refExpressionErrors,\n );\n }\n case tt._function:\n return this.parseFunctionOrFunctionSent();\n\n case tt.at:\n decorators = this.parseDecorators();\n // fall through\n case tt._class:\n return this.parseClass(\n this.maybeTakeDecorators(decorators, this.startNode()),\n false,\n );\n\n case tt._new:\n return this.parseNewOrNewTarget();\n\n case tt.templateNonTail:\n case tt.templateTail:\n return this.parseTemplate(false);\n\n // BindExpression[Yield]\n // :: MemberExpression[?Yield]\n case tt.doubleColon: {\n node = this.startNode();\n this.next();\n node.object = null;\n const callee = (node.callee = this.parseNoCallExpr());\n if (callee.type === \"MemberExpression\") {\n return this.finishNode(node, \"BindExpression\");\n } else {\n throw this.raise(Errors.UnsupportedBind, { at: callee });\n }\n }\n\n case tt.privateName: {\n // Standalone private names are only allowed in \"#x in obj\"\n // expressions, and they are directly handled by callers of\n // parseExprOp. If we reach this, the input is always invalid.\n // We can throw a better error message and recover, rather than\n // just throwing \"Unexpected token\" (which is the default\n // behavior of this big switch statement).\n this.raise(Errors.PrivateInExpectedIn, {\n at: this.state.startLoc,\n identifierName: this.state.value,\n });\n return this.parsePrivateName();\n }\n\n case tt.moduloAssign: {\n return this.parseTopicReferenceThenEqualsSign(tt.modulo, \"%\");\n }\n\n case tt.xorAssign: {\n return this.parseTopicReferenceThenEqualsSign(tt.bitwiseXOR, \"^\");\n }\n\n case tt.doubleCaret:\n case tt.doubleAt: {\n return this.parseTopicReference(\"hack\");\n }\n\n case tt.bitwiseXOR:\n case tt.modulo:\n case tt.hash: {\n const pipeProposal = this.getPluginOption(\n \"pipelineOperator\",\n \"proposal\",\n );\n\n if (pipeProposal) {\n return this.parseTopicReference(pipeProposal);\n }\n this.unexpected();\n break;\n }\n\n case tt.lt: {\n const lookaheadCh = this.input.codePointAt(this.nextTokenStart());\n if (\n isIdentifierStart(lookaheadCh) || // Element/Type Parameter <foo>\n lookaheadCh === charCodes.greaterThan // Fragment <>\n ) {\n this.expectOnePlugin([\"jsx\", \"flow\", \"typescript\"]);\n } else {\n this.unexpected();\n }\n break;\n }\n\n default:\n if (tokenIsIdentifier(type)) {\n if (\n this.isContextual(tt._module) &&\n this.lookaheadInLineCharCode() === charCodes.leftCurlyBrace\n ) {\n return this.parseModuleExpression();\n }\n const canBeArrow = this.state.potentialArrowAt === this.state.start;\n const containsEsc = this.state.containsEsc;\n const id = this.parseIdentifier();\n\n if (\n !containsEsc &&\n id.name === \"async\" &&\n !this.canInsertSemicolon()\n ) {\n const { type } = this.state;\n if (type === tt._function) {\n this.resetPreviousNodeTrailingComments(id);\n this.next();\n return this.parseAsyncFunctionExpression(\n this.startNodeAtNode(id),\n );\n } else if (tokenIsIdentifier(type)) {\n // If the next token begins with \"=\", commit to parsing an async\n // arrow function. (Peeking ahead for \"=\" lets us avoid a more\n // expensive full-token lookahead on this common path.)\n if (this.lookaheadCharCode() === charCodes.equalsTo) {\n // although `id` is not used in async arrow unary function,\n // we don't need to reset `async`'s trailing comments because\n // it will be attached to the upcoming async arrow binding identifier\n return this.parseAsyncArrowUnaryFunction(\n this.startNodeAtNode(id),\n );\n } else {\n // Otherwise, treat \"async\" as an identifier and let calling code\n // deal with the current tt.name token.\n return id;\n }\n } else if (type === tt._do) {\n this.resetPreviousNodeTrailingComments(id);\n return this.parseDo(this.startNodeAtNode(id), true);\n }\n }\n\n if (\n canBeArrow &&\n this.match(tt.arrow) &&\n !this.canInsertSemicolon()\n ) {\n this.next();\n return this.parseArrowExpression(\n this.startNodeAtNode(id),\n [id],\n false,\n );\n }\n\n return id;\n } else {\n this.unexpected();\n }\n }\n }\n\n // This helper method should only be called\n // when the parser has reached a potential Hack pipe topic token\n // that is followed by an equals sign.\n // See <https://github.com/js-choi/proposal-hack-pipes>.\n // If we find ^= or %= in an expression position\n // (i.e., the tt.moduloAssign or tt.xorAssign token types), and if the\n // Hack-pipes proposal is active with ^ or % as its topicToken, then the ^ or\n // % could be the topic token (e.g., in x |> ^==y or x |> ^===y), and so we\n // reparse the current token as ^ or %.\n // Otherwise, this throws an unexpected-token error.\n parseTopicReferenceThenEqualsSign(\n topicTokenType: TokenType,\n topicTokenValue: string,\n ): N.Expression {\n const pipeProposal = this.getPluginOption(\"pipelineOperator\", \"proposal\");\n\n if (pipeProposal) {\n // Set the most-recent token to be a topic token\n // given by the tokenType and tokenValue.\n // Now the next readToken() call (in parseTopicReference)\n // will consume that “topic token”.\n this.state.type = topicTokenType;\n this.state.value = topicTokenValue;\n // Rewind the tokenizer to the end of the “topic token”, so that the\n // following token starts at the equals sign after that topic token.\n this.state.pos--;\n this.state.end--;\n // This is safe to do since the preceding character was either ^ or %, and\n // thus not a newline.\n this.state.endLoc = createPositionWithColumnOffset(this.state.endLoc, -1);\n // Now actually consume the topic token.\n return this.parseTopicReference(pipeProposal);\n } else {\n this.unexpected();\n }\n }\n\n // This helper method should only be called\n // when the proposal-pipeline-operator plugin is active,\n // and when the parser has reached a potential Hack pipe topic token.\n // Although a pipe-operator proposal is assumed to be active,\n // its configuration might not match the current tokens type.\n // See <https://github.com/js-choi/proposal-hack-pipes>.\n parseTopicReference(pipeProposal: string): N.Expression {\n const node = this.startNode<N.TopicReference>();\n const startLoc = this.state.startLoc;\n const tokenType = this.state.type;\n\n // Consume the current token.\n this.next();\n\n // If the pipe-operator plugins configuration matches the current tokens type,\n // then this will return `node`, will have been finished as a topic reference.\n // Otherwise, this will throw a `PipeTopicUnconfiguredToken` error.\n return this.finishTopicReference(node, startLoc, pipeProposal, tokenType);\n }\n\n // This helper method attempts to finish the given `node`\n // into a topic-reference node for the given `pipeProposal`.\n // See <https://github.com/js-choi/proposal-hack-pipes>.\n //\n // The method assumes that any topic token was consumed before it was called.\n //\n // If the `pipelineOperator` plugin is active,\n // and if the given `tokenType` matches the plugins configuration,\n // then this method will return the finished `node`.\n //\n // If the `pipelineOperator` plugin is active,\n // but if the given `tokenType` does not match the plugins configuration,\n // then this method will throw a `PipeTopicUnconfiguredToken` error.\n finishTopicReference(\n node: Undone<N.Node>,\n startLoc: Position,\n pipeProposal: string,\n tokenType: TokenType,\n ): N.Expression {\n if (\n this.testTopicReferenceConfiguration(pipeProposal, startLoc, tokenType)\n ) {\n // The token matches the plugins configuration.\n // The token is therefore a topic reference.\n\n // Determine the node type for the topic reference\n // that is appropriate for the active pipe-operator proposal.\n const nodeType =\n pipeProposal === \"smart\"\n ? \"PipelinePrimaryTopicReference\"\n : // The proposal must otherwise be \"hack\",\n // as enforced by testTopicReferenceConfiguration.\n \"TopicReference\";\n\n if (!this.topicReferenceIsAllowedInCurrentContext()) {\n this.raise(\n // The topic reference is not allowed in the current context:\n // it is outside of a pipe body.\n // Raise recoverable errors.\n pipeProposal === \"smart\"\n ? Errors.PrimaryTopicNotAllowed\n : // In this case, `pipeProposal === \"hack\"` is true.\n Errors.PipeTopicUnbound,\n { at: startLoc },\n );\n }\n\n // Register the topic reference so that its pipe body knows\n // that its topic was used at least once.\n this.registerTopicReference();\n\n return this.finishNode(node, nodeType);\n } else {\n // The token does not match the plugins configuration.\n throw this.raise(Errors.PipeTopicUnconfiguredToken, {\n at: startLoc,\n token: tokenLabelName(tokenType),\n });\n }\n }\n\n // This helper method tests whether the given token type\n // matches the pipelineOperator parser plugins configuration.\n // If the active pipe proposal is Hack style,\n // and if the given token is the same as the plugin configurations `topicToken`,\n // then this is a valid topic reference.\n // If the active pipe proposal is smart mix,\n // then the topic token must always be `#`.\n // If the active pipe proposal is neither (e.g., \"minimal\" or \"fsharp\"),\n // then an error is thrown.\n testTopicReferenceConfiguration(\n pipeProposal: string,\n startLoc: Position,\n tokenType: TokenType,\n ): boolean {\n switch (pipeProposal) {\n case \"hack\": {\n return this.hasPlugin([\n \"pipelineOperator\",\n {\n // @ts-expect-error token must have a label\n topicToken: tokenLabelName(tokenType),\n },\n ]);\n }\n case \"smart\":\n return tokenType === tt.hash;\n default:\n throw this.raise(Errors.PipeTopicRequiresHackPipes, { at: startLoc });\n }\n }\n\n // async [no LineTerminator here] AsyncArrowBindingIdentifier[?Yield] [no LineTerminator here] => AsyncConciseBody[?In]\n parseAsyncArrowUnaryFunction(\n this: Parser,\n node: Undone<N.ArrowFunctionExpression>,\n ): N.ArrowFunctionExpression {\n // We don't need to push a new ParameterDeclarationScope here since we are sure\n // 1) it is an async arrow, 2) no biding pattern is allowed in params\n this.prodParam.enter(functionFlags(true, this.prodParam.hasYield));\n const params = [this.parseIdentifier()];\n this.prodParam.exit();\n if (this.hasPrecedingLineBreak()) {\n this.raise(Errors.LineTerminatorBeforeArrow, {\n at: this.state.curPosition(),\n });\n }\n this.expect(tt.arrow);\n // let foo = async bar => {};\n return this.parseArrowExpression(node, params, true);\n }\n\n // https://github.com/tc39/proposal-do-expressions\n // https://github.com/tc39/proposal-async-do-expressions\n parseDo(\n this: Parser,\n node: Undone<N.DoExpression>,\n isAsync: boolean,\n ): N.DoExpression {\n this.expectPlugin(\"doExpressions\");\n if (isAsync) {\n this.expectPlugin(\"asyncDoExpressions\");\n }\n node.async = isAsync;\n this.next(); // eat `do`\n const oldLabels = this.state.labels;\n this.state.labels = [];\n if (isAsync) {\n // AsyncDoExpression :\n // async [no LineTerminator here] do Block[~Yield, +Await, ~Return]\n this.prodParam.enter(PARAM_AWAIT);\n node.body = this.parseBlock();\n this.prodParam.exit();\n } else {\n node.body = this.parseBlock();\n }\n\n this.state.labels = oldLabels;\n return this.finishNode(node, \"DoExpression\");\n }\n\n // Parse the `super` keyword\n parseSuper(): N.Super {\n const node = this.startNode<N.Super>();\n this.next(); // eat `super`\n if (\n this.match(tt.parenL) &&\n !this.scope.allowDirectSuper &&\n !this.options.allowSuperOutsideMethod\n ) {\n this.raise(Errors.SuperNotAllowed, { at: node });\n } else if (\n !this.scope.allowSuper &&\n !this.options.allowSuperOutsideMethod\n ) {\n this.raise(Errors.UnexpectedSuper, { at: node });\n }\n\n if (\n !this.match(tt.parenL) &&\n !this.match(tt.bracketL) &&\n !this.match(tt.dot)\n ) {\n this.raise(Errors.UnsupportedSuper, { at: node });\n }\n\n return this.finishNode(node, \"Super\");\n }\n\n parsePrivateName(): N.PrivateName {\n const node = this.startNode<N.PrivateName>();\n const id = this.startNodeAt<N.Identifier>(\n // The position is hardcoded because we merge `#` and name into a single\n // tt.privateName token\n createPositionWithColumnOffset(this.state.startLoc, 1),\n );\n const name = this.state.value;\n this.next(); // eat #name;\n node.id = this.createIdentifier(id, name);\n return this.finishNode(node, \"PrivateName\");\n }\n\n parseFunctionOrFunctionSent(\n this: Parser,\n ): N.FunctionExpression | N.MetaProperty {\n const node = this.startNode<N.FunctionExpression | N.MetaProperty>();\n\n // We do not do parseIdentifier here because when parseFunctionOrFunctionSent\n // is called we already know that the current token is a \"name\" with the value \"function\"\n // This will improve perf a tiny little bit as we do not do validation but more importantly\n // here is that parseIdentifier will remove an item from the expression stack\n // if \"function\" or \"class\" is parsed as identifier (in objects e.g.), which should not happen here.\n this.next(); // eat `function`\n\n if (this.prodParam.hasYield && this.match(tt.dot)) {\n const meta = this.createIdentifier(\n this.startNodeAtNode<N.Identifier>(node),\n \"function\",\n );\n this.next(); // eat `.`\n // https://github.com/tc39/proposal-function.sent#syntax-1\n if (this.match(tt._sent)) {\n this.expectPlugin(\"functionSent\");\n } else if (!this.hasPlugin(\"functionSent\")) {\n // The code wasn't `function.sent` but just `function.`, so a simple error is less confusing.\n this.unexpected();\n }\n return this.parseMetaProperty(\n node as Undone<N.MetaProperty>,\n meta,\n \"sent\",\n );\n }\n return this.parseFunction(node as Undone<N.FunctionExpression>);\n }\n\n parseMetaProperty(\n node: Undone<N.MetaProperty>,\n meta: N.Identifier,\n propertyName: string,\n ): N.MetaProperty {\n node.meta = meta;\n\n const containsEsc = this.state.containsEsc;\n\n node.property = this.parseIdentifier(true);\n\n if (node.property.name !== propertyName || containsEsc) {\n this.raise(Errors.UnsupportedMetaProperty, {\n at: node.property,\n target: meta.name,\n onlyValidPropertyName: propertyName,\n });\n }\n\n return this.finishNode(node, \"MetaProperty\");\n }\n\n // https://tc39.es/ecma262/#prod-ImportMeta\n parseImportMetaProperty(\n this: Parser,\n node: Undone<N.MetaProperty | N.ImportExpression>,\n ): N.MetaProperty | N.ImportExpression {\n const id = this.createIdentifier(\n this.startNodeAtNode<N.Identifier>(node),\n \"import\",\n );\n this.next(); // eat `.`\n\n if (this.isContextual(tt._meta)) {\n if (!this.inModule) {\n this.raise(Errors.ImportMetaOutsideModule, { at: id });\n }\n this.sawUnambiguousESM = true;\n } else if (this.isContextual(tt._source) || this.isContextual(tt._defer)) {\n const isSource = this.isContextual(tt._source);\n\n // TODO: The proposal doesn't mention import.defer yet because it was\n // pending on a decision for import.source. Wait to enable it until it's\n // included in the proposal.\n if (!isSource) this.unexpected();\n\n this.expectPlugin(\n isSource ? \"sourcePhaseImports\" : \"deferredImportEvaluation\",\n );\n if (!this.options.createImportExpressions) {\n throw this.raise(Errors.DynamicImportPhaseRequiresImportExpressions, {\n at: this.state.startLoc,\n phase: this.state.value,\n });\n }\n this.next();\n (node as Undone<N.ImportExpression>).phase = isSource\n ? \"source\"\n : \"defer\";\n return this.parseImportCall(node as Undone<N.ImportExpression>);\n }\n\n return this.parseMetaProperty(node as Undone<N.MetaProperty>, id, \"meta\");\n }\n\n parseLiteralAtNode<T extends N.Node>(\n value: any,\n type: T[\"type\"],\n node: any,\n ): T {\n this.addExtra(node, \"rawValue\", value);\n this.addExtra(node, \"raw\", this.input.slice(node.start, this.state.end));\n node.value = value;\n this.next();\n return this.finishNode<T>(node, type);\n }\n\n parseLiteral<T extends N.Node>(value: any, type: T[\"type\"]): T {\n const node = this.startNode();\n return this.parseLiteralAtNode(value, type, node);\n }\n\n parseStringLiteral(value: any) {\n return this.parseLiteral<N.StringLiteral>(value, \"StringLiteral\");\n }\n\n parseNumericLiteral(value: any) {\n return this.parseLiteral<N.NumericLiteral>(value, \"NumericLiteral\");\n }\n\n parseBigIntLiteral(value: any) {\n return this.parseLiteral<N.BigIntLiteral>(value, \"BigIntLiteral\");\n }\n\n parseDecimalLiteral(value: any) {\n return this.parseLiteral<N.DecimalLiteral>(value, \"DecimalLiteral\");\n }\n\n parseRegExpLiteral(value: {\n value: any;\n pattern: string;\n flags: N.RegExpLiteral[\"flags\"];\n }) {\n const node = this.parseLiteral<N.RegExpLiteral>(\n value.value,\n \"RegExpLiteral\",\n );\n node.pattern = value.pattern;\n node.flags = value.flags;\n return node;\n }\n\n parseBooleanLiteral(value: boolean) {\n const node = this.startNode<N.BooleanLiteral>();\n node.value = value;\n this.next();\n return this.finishNode(node, \"BooleanLiteral\");\n }\n\n parseNullLiteral() {\n const node = this.startNode<N.NullLiteral>();\n this.next();\n return this.finishNode(node, \"NullLiteral\");\n }\n\n // https://tc39.es/ecma262/#prod-CoverParenthesizedExpressionAndArrowParameterList\n parseParenAndDistinguishExpression(\n this: Parser,\n canBeArrow: boolean,\n ): N.Expression {\n const startLoc = this.state.startLoc;\n\n let val;\n this.next(); // eat `(`\n this.expressionScope.enter(newArrowHeadScope());\n\n const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n this.state.maybeInArrowParameters = true;\n this.state.inFSharpPipelineDirectBody = false;\n\n const innerStartLoc = this.state.startLoc;\n const exprList: N.Expression[] = [];\n const refExpressionErrors = new ExpressionErrors();\n let first = true;\n let spreadStartLoc;\n let optionalCommaStartLoc;\n\n while (!this.match(tt.parenR)) {\n if (first) {\n first = false;\n } else {\n this.expect(\n tt.comma,\n refExpressionErrors.optionalParametersLoc === null\n ? null\n : refExpressionErrors.optionalParametersLoc,\n );\n if (this.match(tt.parenR)) {\n optionalCommaStartLoc = this.state.startLoc;\n break;\n }\n }\n\n if (this.match(tt.ellipsis)) {\n const spreadNodeStartLoc = this.state.startLoc;\n spreadStartLoc = this.state.startLoc;\n exprList.push(\n this.parseParenItem(this.parseRestBinding(), spreadNodeStartLoc),\n );\n\n if (!this.checkCommaAfterRest(charCodes.rightParenthesis)) {\n break;\n }\n } else {\n exprList.push(\n this.parseMaybeAssignAllowIn(\n refExpressionErrors,\n this.parseParenItem,\n ),\n );\n }\n }\n\n const innerEndLoc = this.state.lastTokEndLoc;\n this.expect(tt.parenR);\n\n this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n\n let arrowNode = this.startNodeAt<N.ArrowFunctionExpression>(startLoc);\n if (\n canBeArrow &&\n this.shouldParseArrow(exprList) &&\n (arrowNode = this.parseArrow(arrowNode))\n ) {\n this.checkDestructuringPrivate(refExpressionErrors);\n this.expressionScope.validateAsPattern();\n this.expressionScope.exit();\n this.parseArrowExpression(arrowNode, exprList, false);\n // @ts-expect-error todo(flow->ts) improve node types\n return arrowNode;\n }\n this.expressionScope.exit();\n\n if (!exprList.length) {\n this.unexpected(this.state.lastTokStartLoc);\n }\n if (optionalCommaStartLoc) this.unexpected(optionalCommaStartLoc);\n if (spreadStartLoc) this.unexpected(spreadStartLoc);\n this.checkExpressionErrors(refExpressionErrors, true);\n\n this.toReferencedListDeep(exprList, /* isParenthesizedExpr */ true);\n if (exprList.length > 1) {\n val = this.startNodeAt<N.SequenceExpression>(innerStartLoc);\n val.expressions = exprList;\n // finish node at current location so it can pick up comments after `)`\n this.finishNode(val, \"SequenceExpression\");\n this.resetEndLocation(val, innerEndLoc);\n } else {\n val = exprList[0];\n }\n\n return this.wrapParenthesis(\n startLoc,\n // @ts-expect-error todo(flow->ts)\n val,\n );\n }\n\n wrapParenthesis(startLoc: Position, expression: N.Expression): N.Expression {\n if (!this.options.createParenthesizedExpressions) {\n this.addExtra(expression, \"parenthesized\", true);\n this.addExtra(expression, \"parenStart\", startLoc.index);\n\n this.takeSurroundingComments(\n expression,\n startLoc.index,\n this.state.lastTokEndLoc.index,\n );\n\n return expression;\n }\n\n const parenExpression =\n this.startNodeAt<N.ParenthesizedExpression>(startLoc);\n parenExpression.expression = expression;\n return this.finishNode(parenExpression, \"ParenthesizedExpression\");\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars -- `params` is used in typescript plugin\n shouldParseArrow(params: Array<N.Node>): boolean {\n return !this.canInsertSemicolon();\n }\n\n parseArrow(\n node: Undone<N.ArrowFunctionExpression>,\n ): Undone<N.ArrowFunctionExpression> | undefined {\n if (this.eat(tt.arrow)) {\n return node;\n }\n }\n\n parseParenItem(\n node: N.Expression,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n startLoc: Position,\n ): N.Expression {\n return node;\n }\n\n parseNewOrNewTarget(this: Parser): N.NewExpression | N.MetaProperty {\n const node = this.startNode<N.NewExpression | N.MetaProperty>();\n this.next();\n if (this.match(tt.dot)) {\n // https://tc39.es/ecma262/#prod-NewTarget\n const meta = this.createIdentifier(\n this.startNodeAtNode<N.Identifier>(node),\n \"new\",\n );\n this.next();\n const metaProp = this.parseMetaProperty(\n node as Undone<N.MetaProperty>,\n meta,\n \"target\",\n );\n\n if (\n !this.scope.inNonArrowFunction &&\n !this.scope.inClass &&\n !this.options.allowNewTargetOutsideFunction\n ) {\n this.raise(Errors.UnexpectedNewTarget, { at: metaProp });\n }\n\n return metaProp;\n }\n\n return this.parseNew(node as Undone<N.NewExpression>);\n }\n\n // New's precedence is slightly tricky. It must allow its argument to\n // be a `[]` or dot subscript expression, but not a call — at least,\n // not without wrapping it in parentheses. Thus, it uses the noCalls\n // argument to parseSubscripts to prevent it from consuming the\n // argument list.\n // https://tc39.es/ecma262/#prod-NewExpression\n parseNew(this: Parser, node: Undone<N.NewExpression>): N.NewExpression {\n this.parseNewCallee(node);\n\n if (this.eat(tt.parenL)) {\n const args = this.parseExprList(tt.parenR);\n this.toReferencedList(args);\n // (parseExprList should be all non-null in this case)\n node.arguments = args;\n } else {\n node.arguments = [];\n }\n\n return this.finishNode(node, \"NewExpression\");\n }\n\n parseNewCallee(this: Parser, node: Undone<N.NewExpression>): void {\n const isImport = this.match(tt._import);\n const callee = this.parseNoCallExpr();\n node.callee = callee;\n if (\n isImport &&\n (callee.type === \"Import\" || callee.type === \"ImportExpression\")\n ) {\n this.raise(Errors.ImportCallNotNewExpression, { at: callee });\n }\n }\n\n // Parse template expression.\n\n parseTemplateElement(isTagged: boolean): N.TemplateElement {\n const { start, startLoc, end, value } = this.state;\n const elemStart = start + 1;\n const elem = this.startNodeAt<N.TemplateElement>(\n createPositionWithColumnOffset(startLoc, 1),\n );\n if (value === null) {\n if (!isTagged) {\n this.raise(Errors.InvalidEscapeSequenceTemplate, {\n // FIXME: Adding 1 is probably wrong.\n at: createPositionWithColumnOffset(\n this.state.firstInvalidTemplateEscapePos,\n 1,\n ),\n });\n }\n }\n\n const isTail = this.match(tt.templateTail);\n const endOffset = isTail ? -1 : -2;\n const elemEnd = end + endOffset;\n elem.value = {\n raw: this.input.slice(elemStart, elemEnd).replace(/\\r\\n?/g, \"\\n\"),\n cooked: value === null ? null : value.slice(1, endOffset),\n };\n elem.tail = isTail;\n this.next();\n const finishedNode = this.finishNode(elem, \"TemplateElement\");\n this.resetEndLocation(\n finishedNode,\n createPositionWithColumnOffset(this.state.lastTokEndLoc, endOffset),\n );\n return finishedNode;\n }\n\n // https://tc39.es/ecma262/#prod-TemplateLiteral\n parseTemplate(this: Parser, isTagged: boolean): N.TemplateLiteral {\n const node = this.startNode<N.TemplateLiteral>();\n node.expressions = [];\n let curElt = this.parseTemplateElement(isTagged);\n node.quasis = [curElt];\n while (!curElt.tail) {\n node.expressions.push(this.parseTemplateSubstitution());\n this.readTemplateContinuation();\n node.quasis.push((curElt = this.parseTemplateElement(isTagged)));\n }\n return this.finishNode(node, \"TemplateLiteral\");\n }\n\n // This is overwritten by the TypeScript plugin to parse template types\n parseTemplateSubstitution(this: Parser): N.Expression {\n return this.parseExpression();\n }\n\n // Parse an object literal, binding pattern, or record.\n\n parseObjectLike(\n close: TokenType,\n isPattern: true,\n isRecord?: boolean | null,\n refExpressionErrors?: ExpressionErrors | null,\n ): N.ObjectPattern;\n parseObjectLike(\n close: TokenType,\n isPattern: false,\n isRecord?: false | null,\n refExpressionErrors?: ExpressionErrors | null,\n ): N.ObjectExpression;\n parseObjectLike(\n close: TokenType,\n isPattern: false,\n isRecord?: true,\n refExpressionErrors?: ExpressionErrors | null,\n ): N.RecordExpression;\n parseObjectLike<T extends N.ObjectPattern | N.ObjectExpression>(\n this: Parser,\n close: TokenType,\n isPattern: boolean,\n isRecord?: boolean | null,\n refExpressionErrors?: ExpressionErrors | null,\n ): T {\n if (isRecord) {\n this.expectPlugin(\"recordAndTuple\");\n }\n const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n this.state.inFSharpPipelineDirectBody = false;\n const propHash: any = Object.create(null);\n let first = true;\n const node = this.startNode<\n N.ObjectExpression | N.ObjectPattern | N.RecordExpression\n >();\n\n node.properties = [];\n this.next();\n\n while (!this.match(close)) {\n if (first) {\n first = false;\n } else {\n this.expect(tt.comma);\n if (this.match(close)) {\n this.addTrailingCommaExtraToNode(\n // @ts-expect-error todo(flow->ts) improve node types\n node,\n );\n break;\n }\n }\n\n let prop;\n if (isPattern) {\n prop = this.parseBindingProperty();\n } else {\n prop = this.parsePropertyDefinition(refExpressionErrors);\n this.checkProto(prop, isRecord, propHash, refExpressionErrors);\n }\n\n if (\n isRecord &&\n !this.isObjectProperty(prop) &&\n prop.type !== \"SpreadElement\"\n ) {\n this.raise(Errors.InvalidRecordProperty, { at: prop });\n }\n\n // @ts-expect-error shorthand may not index prop\n if (prop.shorthand) {\n this.addExtra(prop, \"shorthand\", true);\n }\n\n // @ts-expect-error Fixme: refine typings\n node.properties.push(prop);\n }\n\n this.next();\n\n this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n let type = \"ObjectExpression\";\n if (isPattern) {\n type = \"ObjectPattern\";\n } else if (isRecord) {\n type = \"RecordExpression\";\n }\n // @ts-expect-error type is well defined\n return this.finishNode(node, type);\n }\n\n addTrailingCommaExtraToNode(node: N.Node): void {\n this.addExtra(node, \"trailingComma\", this.state.lastTokStart);\n this.addExtra(node, \"trailingCommaLoc\", this.state.lastTokStartLoc, false);\n }\n\n // Check grammar production:\n // IdentifierName *_opt PropertyName\n // It is used in `parsePropertyDefinition` to detect AsyncMethod and Accessors\n maybeAsyncOrAccessorProp(prop: Undone<N.ObjectProperty>): boolean {\n return (\n !prop.computed &&\n prop.key.type === \"Identifier\" &&\n (this.isLiteralPropertyName() ||\n this.match(tt.bracketL) ||\n this.match(tt.star))\n );\n }\n\n // https://tc39.es/ecma262/#prod-PropertyDefinition\n parsePropertyDefinition(\n this: Parser,\n refExpressionErrors?: ExpressionErrors | null,\n ): N.ObjectMember | N.SpreadElement {\n let decorators = [];\n if (this.match(tt.at)) {\n if (this.hasPlugin(\"decorators\")) {\n this.raise(Errors.UnsupportedPropertyDecorator, {\n at: this.state.startLoc,\n });\n }\n\n // we needn't check if decorators (stage 0) plugin is enabled since it's checked by\n // the call to this.parseDecorator\n while (this.match(tt.at)) {\n decorators.push(this.parseDecorator());\n }\n }\n\n const prop = this.startNode<N.ObjectProperty>();\n let isAsync = false;\n let isAccessor = false;\n let startLoc;\n\n if (this.match(tt.ellipsis)) {\n if (decorators.length) this.unexpected();\n return this.parseSpread();\n }\n\n if (decorators.length) {\n prop.decorators = decorators;\n decorators = [];\n }\n\n prop.method = false;\n\n if (refExpressionErrors) {\n startLoc = this.state.startLoc;\n }\n\n let isGenerator = this.eat(tt.star);\n this.parsePropertyNamePrefixOperator(prop);\n const containsEsc = this.state.containsEsc;\n const key = this.parsePropertyName(prop, refExpressionErrors);\n\n if (!isGenerator && !containsEsc && this.maybeAsyncOrAccessorProp(prop)) {\n const keyName = key.name;\n // https://tc39.es/ecma262/#prod-AsyncMethod\n // https://tc39.es/ecma262/#prod-AsyncGeneratorMethod\n if (keyName === \"async\" && !this.hasPrecedingLineBreak()) {\n isAsync = true;\n this.resetPreviousNodeTrailingComments(key);\n isGenerator = this.eat(tt.star);\n this.parsePropertyName(prop);\n }\n // get PropertyName[?Yield, ?Await] () { FunctionBody[~Yield, ~Await] }\n // set PropertyName[?Yield, ?Await] ( PropertySetParameterList ) { FunctionBody[~Yield, ~Await] }\n if (keyName === \"get\" || keyName === \"set\") {\n isAccessor = true;\n this.resetPreviousNodeTrailingComments(key);\n prop.kind = keyName;\n if (this.match(tt.star)) {\n isGenerator = true;\n this.raise(Errors.AccessorIsGenerator, {\n at: this.state.curPosition(),\n kind: keyName,\n });\n this.next();\n }\n this.parsePropertyName(prop);\n }\n }\n\n return this.parseObjPropValue(\n prop,\n startLoc,\n isGenerator,\n isAsync,\n false /* isPattern */,\n isAccessor,\n refExpressionErrors,\n );\n }\n\n getGetterSetterExpectedParamCount(\n method: N.ObjectMethod | N.ClassMethod,\n ): number {\n return method.kind === \"get\" ? 0 : 1;\n }\n\n // This exists so we can override within the ESTree plugin\n getObjectOrClassMethodParams(method: N.ObjectMethod | N.ClassMethod) {\n return method.params;\n }\n\n // get methods aren't allowed to have any parameters\n // set methods must have exactly 1 parameter which is not a rest parameter\n checkGetterSetterParams(method: N.ObjectMethod | N.ClassMethod): void {\n const paramCount = this.getGetterSetterExpectedParamCount(method);\n const params = this.getObjectOrClassMethodParams(method);\n\n if (params.length !== paramCount) {\n this.raise(\n method.kind === \"get\" ? Errors.BadGetterArity : Errors.BadSetterArity,\n { at: method },\n );\n }\n\n if (\n method.kind === \"set\" &&\n params[params.length - 1]?.type === \"RestElement\"\n ) {\n this.raise(Errors.BadSetterRestParameter, { at: method });\n }\n }\n\n // https://tc39.es/ecma262/#prod-MethodDefinition\n parseObjectMethod(\n this: Parser,\n prop: Undone<N.ObjectMethod>,\n isGenerator: boolean,\n isAsync: boolean,\n isPattern: boolean,\n isAccessor: boolean,\n ): N.ObjectMethod | undefined | null {\n if (isAccessor) {\n // isAccessor implies isAsync: false, isPattern: false, isGenerator: false\n const finishedProp = this.parseMethod(\n prop,\n // This _should_ be false, but with error recovery, we allow it to be\n // set for informational purposes\n isGenerator,\n /* isAsync */ false,\n /* isConstructor */ false,\n false,\n \"ObjectMethod\",\n );\n this.checkGetterSetterParams(finishedProp);\n return finishedProp;\n }\n\n if (isAsync || isGenerator || this.match(tt.parenL)) {\n if (isPattern) this.unexpected();\n prop.kind = \"method\";\n prop.method = true;\n return this.parseMethod(\n prop,\n isGenerator,\n isAsync,\n /* isConstructor */ false,\n false,\n \"ObjectMethod\",\n );\n }\n }\n\n // if `isPattern` is true, parse https://tc39.es/ecma262/#prod-BindingProperty\n // else https://tc39.es/ecma262/#prod-PropertyDefinition\n parseObjectProperty(\n this: Parser,\n prop: Undone<N.ObjectProperty>,\n startLoc: Position | undefined | null,\n isPattern: boolean,\n refExpressionErrors?: ExpressionErrors | null,\n ): N.ObjectProperty | undefined | null {\n prop.shorthand = false;\n\n if (this.eat(tt.colon)) {\n prop.value = isPattern\n ? this.parseMaybeDefault(this.state.startLoc)\n : this.parseMaybeAssignAllowIn(refExpressionErrors);\n\n return this.finishNode(prop, \"ObjectProperty\");\n }\n\n if (!prop.computed && prop.key.type === \"Identifier\") {\n // PropertyDefinition:\n // IdentifierReference\n // CoverInitializedName\n // Note: `{ eval } = {}` will be checked in `checkLVal` later.\n this.checkReservedWord(prop.key.name, prop.key.loc.start, true, false);\n\n if (isPattern) {\n prop.value = this.parseMaybeDefault(\n startLoc,\n cloneIdentifier(prop.key),\n );\n } else if (this.match(tt.eq)) {\n const shorthandAssignLoc = this.state.startLoc;\n if (refExpressionErrors != null) {\n if (refExpressionErrors.shorthandAssignLoc === null) {\n refExpressionErrors.shorthandAssignLoc = shorthandAssignLoc;\n }\n } else {\n this.raise(Errors.InvalidCoverInitializedName, {\n at: shorthandAssignLoc,\n });\n }\n prop.value = this.parseMaybeDefault(\n startLoc,\n cloneIdentifier(prop.key),\n );\n } else {\n prop.value = cloneIdentifier(prop.key);\n }\n prop.shorthand = true;\n\n return this.finishNode(prop, \"ObjectProperty\");\n }\n }\n\n parseObjPropValue(\n this: Parser,\n prop: Undone<N.ObjectMethod | N.ObjectProperty>,\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 const node =\n this.parseObjectMethod(\n prop as Undone<N.ObjectMethod>,\n isGenerator,\n isAsync,\n isPattern,\n isAccessor,\n ) ||\n this.parseObjectProperty(\n prop as Undone<N.ObjectProperty>,\n startLoc,\n isPattern,\n refExpressionErrors,\n );\n\n if (!node) this.unexpected();\n\n return node;\n }\n\n // https://tc39.es/ecma262/#prod-PropertyName\n // when refExpressionErrors presents, it will parse private name\n // and record the position of the first private name\n parsePropertyName(\n this: Parser,\n prop:\n | Undone<N.ObjectOrClassMember | N.ClassMember>\n | N.TsNamedTypeElementBase,\n refExpressionErrors?: ExpressionErrors | null,\n ): N.Expression | N.Identifier {\n if (this.eat(tt.bracketL)) {\n (prop as Undone<N.ObjectOrClassMember>).computed = true;\n prop.key = this.parseMaybeAssignAllowIn();\n this.expect(tt.bracketR);\n } else {\n // We check if it's valid for it to be a private name when we push it.\n const { type, value } = this.state;\n let key;\n // most un-computed property names are identifiers\n if (tokenIsKeywordOrIdentifier(type)) {\n key = this.parseIdentifier(true);\n } else {\n switch (type) {\n case tt.num:\n key = this.parseNumericLiteral(value);\n break;\n case tt.string:\n key = this.parseStringLiteral(value);\n break;\n case tt.bigint:\n key = this.parseBigIntLiteral(value);\n break;\n case tt.decimal:\n key = this.parseDecimalLiteral(value);\n break;\n case tt.privateName: {\n // the class private key has been handled in parseClassElementName\n const privateKeyLoc = this.state.startLoc;\n if (refExpressionErrors != null) {\n if (refExpressionErrors.privateKeyLoc === null) {\n refExpressionErrors.privateKeyLoc = privateKeyLoc;\n }\n } else {\n this.raise(Errors.UnexpectedPrivateField, {\n at: privateKeyLoc,\n });\n }\n key = this.parsePrivateName();\n break;\n }\n default:\n this.unexpected();\n }\n }\n (prop as any).key = key;\n if (type !== tt.privateName) {\n // ClassPrivateProperty is never computed, so we don't assign in that case.\n prop.computed = false;\n }\n }\n\n return prop.key;\n }\n\n // Initialize empty function node.\n\n initFunction(node: N.BodilessFunctionOrMethodBase, isAsync: boolean): void {\n node.id = null;\n node.generator = false;\n node.async = isAsync;\n }\n\n // Parse object or class method.\n\n parseMethod<T extends N.ObjectMethod | N.ClassMethod | N.ClassPrivateMethod>(\n this: Parser,\n node: Undone<T>,\n isGenerator: boolean,\n isAsync: boolean,\n isConstructor: boolean,\n allowDirectSuper: boolean,\n type: T[\"type\"],\n inClassScope: boolean = false,\n ): T {\n this.initFunction(node, isAsync);\n node.generator = isGenerator;\n this.scope.enter(\n ScopeFlag.FUNCTION |\n ScopeFlag.SUPER |\n (inClassScope ? ScopeFlag.CLASS : 0) |\n (allowDirectSuper ? ScopeFlag.DIRECT_SUPER : 0),\n );\n this.prodParam.enter(functionFlags(isAsync, node.generator));\n this.parseFunctionParams(node, isConstructor);\n const finishedNode = this.parseFunctionBodyAndFinish(node, type, true);\n this.prodParam.exit();\n this.scope.exit();\n\n return finishedNode;\n }\n\n // parse an array literal or tuple literal\n // https://tc39.es/ecma262/#prod-ArrayLiteral\n // https://tc39.es/proposal-record-tuple/#prod-TupleLiteral\n parseArrayLike(\n this: Parser,\n close: TokenType,\n canBePattern: boolean,\n isTuple: boolean,\n refExpressionErrors?: ExpressionErrors | null,\n ): N.ArrayExpression | N.TupleExpression {\n if (isTuple) {\n this.expectPlugin(\"recordAndTuple\");\n }\n const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n this.state.inFSharpPipelineDirectBody = false;\n const node = this.startNode<N.ArrayExpression | N.TupleExpression>();\n this.next();\n node.elements = this.parseExprList(\n close,\n /* allowEmpty */ !isTuple,\n refExpressionErrors,\n // @ts-expect-error todo(flow->ts)\n node,\n );\n this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n return this.finishNode(\n node,\n isTuple ? \"TupleExpression\" : \"ArrayExpression\",\n );\n }\n\n // Parse arrow function expression.\n // If the parameters are provided, they will be converted to an\n // assignable list.\n parseArrowExpression(\n this: Parser,\n node: Undone<N.ArrowFunctionExpression>,\n params: N.Expression[] | undefined | null,\n isAsync: boolean,\n trailingCommaLoc?: Position | null,\n ): N.ArrowFunctionExpression {\n this.scope.enter(ScopeFlag.FUNCTION | ScopeFlag.ARROW);\n let flags = functionFlags(isAsync, false);\n // ConciseBody[In] :\n // [lookahead ≠ {] ExpressionBody[?In, ~Await]\n // { FunctionBody[~Yield, ~Await] }\n if (!this.match(tt.braceL) && this.prodParam.hasIn) {\n flags |= PARAM_IN;\n }\n this.prodParam.enter(flags);\n this.initFunction(node, isAsync);\n const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n\n if (params) {\n this.state.maybeInArrowParameters = true;\n this.setArrowFunctionParameters(node, params, trailingCommaLoc);\n }\n this.state.maybeInArrowParameters = false;\n this.parseFunctionBody(node, true);\n\n this.prodParam.exit();\n this.scope.exit();\n this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n\n return this.finishNode(node, \"ArrowFunctionExpression\");\n }\n\n setArrowFunctionParameters(\n node: Undone<N.ArrowFunctionExpression>,\n params: N.Expression[],\n trailingCommaLoc?: Position | null,\n ): void {\n this.toAssignableList(params, trailingCommaLoc, false);\n node.params = params as (N.Pattern | N.TSParameterProperty)[];\n }\n\n parseFunctionBodyAndFinish<\n T extends\n | N.Function\n | N.TSDeclareMethod\n | N.TSDeclareFunction\n | N.ClassPrivateMethod,\n >(node: Undone<T>, type: T[\"type\"], isMethod: boolean = false): T {\n // @ts-expect-error (node is not bodiless if we get here)\n this.parseFunctionBody(node, false, isMethod);\n return this.finishNode(node, type);\n }\n\n // Parse function body and check parameters.\n parseFunctionBody(\n this: Parser,\n node: Undone<N.Function>,\n allowExpression?: boolean | null,\n isMethod: boolean = false,\n ): void {\n const isExpression = allowExpression && !this.match(tt.braceL);\n this.expressionScope.enter(newExpressionScope());\n\n if (isExpression) {\n // https://tc39.es/ecma262/#prod-ExpressionBody\n (node as Undone<N.ArrowFunctionExpression>).body =\n this.parseMaybeAssign();\n this.checkParams(node, false, allowExpression, false);\n } else {\n const oldStrict = this.state.strict;\n // Start a new scope with regard to labels\n // flag (restore them to their old value afterwards).\n const oldLabels = this.state.labels;\n this.state.labels = [];\n\n // FunctionBody[Yield, Await]:\n // StatementList[?Yield, ?Await, +Return] opt\n this.prodParam.enter(this.prodParam.currentFlags() | PARAM_RETURN);\n node.body = this.parseBlock(\n true,\n false,\n // Strict mode function checks after we parse the statements in the function body.\n (hasStrictModeDirective: boolean) => {\n const nonSimple = !this.isSimpleParamList(node.params);\n\n if (hasStrictModeDirective && nonSimple) {\n // This logic is here to align the error location with the ESTree plugin.\n this.raise(Errors.IllegalLanguageModeDirective, {\n at:\n // @ts-expect-error kind may not index node\n (node.kind === \"method\" || node.kind === \"constructor\") &&\n // @ts-expect-error key may not index node\n !!node.key\n ? // @ts-expect-error node.key has been guarded\n node.key.loc.end\n : node,\n });\n }\n\n const strictModeChanged = !oldStrict && this.state.strict;\n\n // Add the params to varDeclaredNames to ensure that an error is thrown\n // if a let/const declaration in the function clashes with one of the params.\n this.checkParams(\n node,\n !this.state.strict && !allowExpression && !isMethod && !nonSimple,\n allowExpression,\n strictModeChanged,\n );\n\n // Ensure the function name isn't a forbidden identifier in strict mode, e.g. 'eval'\n if (this.state.strict && node.id) {\n this.checkIdentifier(\n node.id,\n BindingFlag.TYPE_OUTSIDE,\n strictModeChanged,\n );\n }\n },\n );\n this.prodParam.exit();\n this.state.labels = oldLabels;\n }\n this.expressionScope.exit();\n }\n\n isSimpleParameter(node: N.Pattern | N.TSParameterProperty) {\n return node.type === \"Identifier\";\n }\n\n isSimpleParamList(\n params: ReadonlyArray<N.Pattern | N.TSParameterProperty>,\n ): boolean {\n for (let i = 0, len = params.length; i < len; i++) {\n if (!this.isSimpleParameter(params[i])) return false;\n }\n return true;\n }\n\n checkParams(\n node: Undone<N.Function>,\n allowDuplicates: boolean,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n isArrowFunction?: boolean | null,\n strictModeChanged: boolean = true,\n ): void {\n const checkClashes = !allowDuplicates && new Set<string>();\n // We create a fake node with the \"ephemeral\" type `FormalParameters`[1]\n // since we just store an array of parameters. Perhaps someday we can have\n // something like class FormalParameters extends Array { ... }, which would\n // also be helpful when traversing this node.\n //\n // 1. https://tc39.es/ecma262/#prod-FormalParameters\n const formalParameters = { type: \"FormalParameters\" } as const;\n for (const param of node.params) {\n this.checkLVal(param, {\n in: formalParameters,\n binding: BindingFlag.TYPE_VAR,\n checkClashes,\n strictModeChanged,\n });\n }\n }\n\n // Parses a comma-separated list of expressions, and returns them as\n // an array. `close` is the token type that ends the list, and\n // `allowEmpty` can be turned on to allow subsequent commas with\n // nothing in between them to be parsed as `null` (which is needed\n // for array literals).\n\n parseExprList(\n this: Parser,\n close: TokenType,\n allowEmpty?: boolean,\n refExpressionErrors?: ExpressionErrors | null,\n nodeForExtra?: N.Node | null,\n ): (N.Expression | null)[] {\n const elts: (N.Expression | null)[] = [];\n let first = true;\n\n while (!this.eat(close)) {\n if (first) {\n first = false;\n } else {\n this.expect(tt.comma);\n if (this.match(close)) {\n if (nodeForExtra) {\n this.addTrailingCommaExtraToNode(nodeForExtra);\n }\n this.next();\n break;\n }\n }\n\n elts.push(this.parseExprListItem(allowEmpty, refExpressionErrors));\n }\n return elts;\n }\n\n parseExprListItem(\n this: Parser,\n allowEmpty?: boolean,\n refExpressionErrors?: ExpressionErrors | null,\n allowPlaceholder?: boolean | null,\n ): N.Expression | null;\n parseExprListItem(\n this: Parser,\n allowEmpty?: false,\n refExpressionErrors?: ExpressionErrors | null,\n allowPlaceholder?: boolean | null,\n ): N.Expression;\n parseExprListItem(\n this: Parser,\n allowEmpty?: boolean | null,\n refExpressionErrors?: ExpressionErrors | null,\n allowPlaceholder?: boolean | null,\n ): N.Expression | null {\n let elt;\n if (this.match(tt.comma)) {\n if (!allowEmpty) {\n this.raise(Errors.UnexpectedToken, {\n at: this.state.curPosition(),\n unexpected: \",\",\n });\n }\n elt = null;\n } else if (this.match(tt.ellipsis)) {\n const spreadNodeStartLoc = this.state.startLoc;\n\n elt = this.parseParenItem(\n this.parseSpread(refExpressionErrors),\n spreadNodeStartLoc,\n );\n } else if (this.match(tt.question)) {\n this.expectPlugin(\"partialApplication\");\n if (!allowPlaceholder) {\n this.raise(Errors.UnexpectedArgumentPlaceholder, {\n at: this.state.startLoc,\n });\n }\n const node = this.startNode();\n this.next();\n elt = this.finishNode(node, \"ArgumentPlaceholder\");\n } else {\n elt = this.parseMaybeAssignAllowIn(\n refExpressionErrors,\n this.parseParenItem,\n );\n }\n return elt;\n }\n\n // Parse the next token as an identifier. If `liberal` is true (used\n // when parsing properties), it will also convert keywords into\n // identifiers.\n // This shouldn't be used to parse the keywords of meta properties, since they\n // are not identifiers and cannot contain escape sequences.\n\n parseIdentifier(liberal?: boolean): N.Identifier {\n const node = this.startNode<N.Identifier>();\n const name = this.parseIdentifierName(liberal);\n\n return this.createIdentifier(node, name);\n }\n\n createIdentifier(\n node: Omit<N.Identifier, \"type\">,\n name: string,\n ): N.Identifier {\n node.name = name;\n node.loc.identifierName = name;\n\n return this.finishNode(node, \"Identifier\");\n }\n\n parseIdentifierName(liberal?: boolean): string {\n let name: string;\n\n const { startLoc, type } = this.state;\n\n if (tokenIsKeywordOrIdentifier(type)) {\n name = this.state.value;\n } else {\n this.unexpected();\n }\n\n const tokenIsKeyword = tokenKeywordOrIdentifierIsKeyword(type);\n\n if (liberal) {\n // If the current token is not used as a keyword, set its type to \"tt.name\".\n // This will prevent this.next() from throwing about unexpected escapes.\n if (tokenIsKeyword) {\n this.replaceToken(tt.name);\n }\n } else {\n this.checkReservedWord(name, startLoc, tokenIsKeyword, false);\n }\n\n this.next();\n\n return name;\n }\n\n checkReservedWord(\n word: string,\n startLoc: Position,\n checkKeywords: boolean,\n isBinding: boolean,\n ): void {\n // Every JavaScript reserved word is 10 characters or less.\n if (word.length > 10) {\n return;\n }\n // Most identifiers are not reservedWord-like, they don't need special\n // treatments afterward, which very likely ends up throwing errors\n if (!canBeReservedWord(word)) {\n return;\n }\n\n if (checkKeywords && isKeyword(word)) {\n this.raise(Errors.UnexpectedKeyword, {\n at: startLoc,\n keyword: word,\n });\n return;\n }\n\n const reservedTest = !this.state.strict\n ? isReservedWord\n : isBinding\n ? isStrictBindReservedWord\n : isStrictReservedWord;\n\n if (reservedTest(word, this.inModule)) {\n this.raise(Errors.UnexpectedReservedWord, {\n at: startLoc,\n reservedWord: word,\n });\n return;\n } else if (word === \"yield\") {\n if (this.prodParam.hasYield) {\n this.raise(Errors.YieldBindingIdentifier, { at: startLoc });\n return;\n }\n } else if (word === \"await\") {\n if (this.prodParam.hasAwait) {\n this.raise(Errors.AwaitBindingIdentifier, { at: startLoc });\n return;\n }\n\n if (this.scope.inStaticBlock) {\n this.raise(Errors.AwaitBindingIdentifierInStaticBlock, {\n at: startLoc,\n });\n return;\n }\n\n this.expressionScope.recordAsyncArrowParametersError({ at: startLoc });\n } else if (word === \"arguments\") {\n if (this.scope.inClassAndNotInNonArrowFunction) {\n this.raise(Errors.ArgumentsInClass, { at: startLoc });\n return;\n }\n }\n }\n\n isAwaitAllowed(): boolean {\n if (this.prodParam.hasAwait) return true;\n if (this.options.allowAwaitOutsideFunction && !this.scope.inFunction) {\n return true;\n }\n return false;\n }\n\n // Parses await expression inside async function.\n\n parseAwait(this: Parser, startLoc: Position): N.AwaitExpression {\n const node = this.startNodeAt<N.AwaitExpression>(startLoc);\n\n this.expressionScope.recordParameterInitializerError(\n Errors.AwaitExpressionFormalParameter,\n {\n // @ts-expect-error todo(flow->ts)\n at: node,\n },\n );\n\n if (this.eat(tt.star)) {\n this.raise(Errors.ObsoleteAwaitStar, { at: node });\n }\n\n if (!this.scope.inFunction && !this.options.allowAwaitOutsideFunction) {\n if (this.isAmbiguousAwait()) {\n this.ambiguousScriptDifferentAst = true;\n } else {\n this.sawUnambiguousESM = true;\n }\n }\n\n if (!this.state.soloAwait) {\n node.argument = this.parseMaybeUnary(null, true);\n }\n\n return this.finishNode(node, \"AwaitExpression\");\n }\n\n isAmbiguousAwait(): boolean {\n if (this.hasPrecedingLineBreak()) return true;\n const { type } = this.state;\n return (\n // All the following expressions are ambiguous:\n // await + 0, await - 0, await ( 0 ), await [ 0 ], await / 0 /u, await ``, await of []\n type === tt.plusMin ||\n type === tt.parenL ||\n type === tt.bracketL ||\n tokenIsTemplate(type) ||\n (type === tt._of && !this.state.containsEsc) ||\n // Sometimes the tokenizer generates tt.slash for regexps, and this is\n // handler by parseExprAtom\n type === tt.regexp ||\n type === tt.slash ||\n // This code could be parsed both as a modulo operator or as an intrinsic:\n // await %x(0)\n (this.hasPlugin(\"v8intrinsic\") && type === tt.modulo)\n );\n }\n\n // Parses yield expression inside generator.\n\n parseYield(this: Parser): N.YieldExpression {\n const node = this.startNode<N.YieldExpression>();\n\n this.expressionScope.recordParameterInitializerError(\n Errors.YieldInParameter,\n {\n // @ts-expect-error todo(flow->ts)\n at: node,\n },\n );\n\n this.next();\n let delegating = false;\n let argument: N.Expression | null = null;\n if (!this.hasPrecedingLineBreak()) {\n delegating = this.eat(tt.star);\n switch (this.state.type) {\n case tt.semi:\n case tt.eof:\n case tt.braceR:\n case tt.parenR:\n case tt.bracketR:\n case tt.braceBarR:\n case tt.colon:\n case tt.comma:\n // The above is the complete set of tokens that can\n // follow an AssignmentExpression, and none of them\n // can start an AssignmentExpression\n if (!delegating) break;\n /* fallthrough */\n default:\n argument = this.parseMaybeAssign();\n }\n }\n node.delegate = delegating;\n node.argument = argument;\n return this.finishNode(node, \"YieldExpression\");\n }\n\n // https://tc39.es/ecma262/#prod-ImportCall\n parseImportCall(\n this: Parser,\n node: Undone<N.ImportExpression>,\n ): N.ImportExpression {\n this.next(); // eat tt.parenL\n node.source = this.parseMaybeAssignAllowIn();\n if (\n this.hasPlugin(\"importAttributes\") ||\n this.hasPlugin(\"importAssertions\")\n ) {\n node.options = null;\n }\n if (this.eat(tt.comma)) {\n this.expectImportAttributesPlugin();\n if (!this.match(tt.parenR)) {\n node.options = this.parseMaybeAssignAllowIn();\n this.eat(tt.comma);\n }\n }\n this.expect(tt.parenR);\n return this.finishNode(node, \"ImportExpression\");\n }\n\n // Validates a pipeline (for any of the pipeline Babylon plugins) at the point\n // of the infix operator `|>`.\n\n checkPipelineAtInfixOperator(left: N.Expression, leftStartLoc: Position) {\n if (this.hasPlugin([\"pipelineOperator\", { proposal: \"smart\" }])) {\n if (left.type === \"SequenceExpression\") {\n // Ensure that the pipeline head is not a comma-delimited\n // sequence expression.\n this.raise(Errors.PipelineHeadSequenceExpression, {\n at: leftStartLoc,\n });\n }\n }\n }\n\n parseSmartPipelineBodyInStyle(childExpr: N.Expression, startLoc: Position) {\n if (this.isSimpleReference(childExpr)) {\n const bodyNode = this.startNodeAt<N.PipelineBareFunction>(startLoc);\n bodyNode.callee = childExpr;\n return this.finishNode(bodyNode, \"PipelineBareFunction\");\n } else {\n const bodyNode = this.startNodeAt<N.PipelineTopicExpression>(startLoc);\n this.checkSmartPipeTopicBodyEarlyErrors(startLoc);\n bodyNode.expression = childExpr;\n return this.finishNode(bodyNode, \"PipelineTopicExpression\");\n }\n }\n\n isSimpleReference(expression: N.Expression): boolean {\n switch (expression.type) {\n case \"MemberExpression\":\n return (\n !expression.computed && this.isSimpleReference(expression.object)\n );\n case \"Identifier\":\n return true;\n default:\n return false;\n }\n }\n\n // This helper method is to be called immediately\n // after a topic-style smart-mix pipe body is parsed.\n // The `startLoc` is the starting position of the pipe body.\n\n checkSmartPipeTopicBodyEarlyErrors(startLoc: Position): void {\n // If the following token is invalidly `=>`, then throw a human-friendly error\n // instead of something like 'Unexpected token, expected \";\"'.\n // For example, `x => x |> y => #` (assuming `#` is the topic reference)\n // groups into `x => (x |> y) => #`,\n // and `(x |> y) => #` is an invalid arrow function.\n // This is because smart-mix `|>` has tighter precedence than `=>`.\n if (this.match(tt.arrow)) {\n throw this.raise(Errors.PipelineBodyNoArrow, { at: this.state.startLoc });\n }\n\n // A topic-style smart-mix pipe body must use the topic reference at least once.\n if (!this.topicReferenceWasUsedInCurrentContext()) {\n this.raise(Errors.PipelineTopicUnused, { at: startLoc });\n }\n }\n\n // Enable topic references from outer contexts within Hack-style pipe bodies.\n // The function modifies the parser's topic-context state to enable or disable\n // the use of topic references.\n // The function then calls a callback, then resets the parser\n // to the old topic-context state that it had before the function was called.\n\n withTopicBindingContext<T>(callback: () => T): T {\n const outerContextTopicState = this.state.topicContext;\n this.state.topicContext = {\n // Enable the use of the primary topic reference.\n maxNumOfResolvableTopics: 1,\n // Hide the use of any topic references from outer contexts.\n maxTopicIndex: null,\n };\n\n try {\n return callback();\n } finally {\n this.state.topicContext = outerContextTopicState;\n }\n }\n\n // This helper method is used only with the deprecated smart-mix pipe proposal.\n // Disables topic references from outer contexts within syntax constructs\n // such as the bodies of iteration statements.\n // The function modifies the parser's topic-context state to enable or disable\n // the use of topic references with the smartPipelines plugin. They then run a\n // callback, then they reset the parser to the old topic-context state that it\n // had before the function was called.\n\n withSmartMixTopicForbiddingContext<T>(callback: () => T): T {\n if (this.hasPlugin([\"pipelineOperator\", { proposal: \"smart\" }])) {\n // Reset the parsers topic context only if the smart-mix pipe proposal is active.\n const outerContextTopicState = this.state.topicContext;\n this.state.topicContext = {\n // Disable the use of the primary topic reference.\n maxNumOfResolvableTopics: 0,\n // Hide the use of any topic references from outer contexts.\n maxTopicIndex: null,\n };\n\n try {\n return callback();\n } finally {\n this.state.topicContext = outerContextTopicState;\n }\n } else {\n // If the pipe proposal is \"minimal\", \"fsharp\", or \"hack\",\n // or if no pipe proposal is active,\n // then the callback result is returned\n // without touching any extra parser state.\n return callback();\n }\n }\n\n withSoloAwaitPermittingContext<T>(callback: () => T): T {\n const outerContextSoloAwaitState = this.state.soloAwait;\n this.state.soloAwait = true;\n\n try {\n return callback();\n } finally {\n this.state.soloAwait = outerContextSoloAwaitState;\n }\n }\n\n allowInAnd<T>(callback: () => T): T {\n const flags = this.prodParam.currentFlags();\n const prodParamToSet = PARAM_IN & ~flags;\n if (prodParamToSet) {\n this.prodParam.enter(flags | PARAM_IN);\n try {\n return callback();\n } finally {\n this.prodParam.exit();\n }\n }\n return callback();\n }\n\n disallowInAnd<T>(callback: () => T): T {\n const flags = this.prodParam.currentFlags();\n const prodParamToClear = PARAM_IN & flags;\n if (prodParamToClear) {\n this.prodParam.enter(flags & ~PARAM_IN);\n try {\n return callback();\n } finally {\n this.prodParam.exit();\n }\n }\n return callback();\n }\n\n // Register the use of a topic reference within the current\n // topic-binding context.\n registerTopicReference(): void {\n this.state.topicContext.maxTopicIndex = 0;\n }\n\n topicReferenceIsAllowedInCurrentContext(): boolean {\n return this.state.topicContext.maxNumOfResolvableTopics >= 1;\n }\n\n topicReferenceWasUsedInCurrentContext(): boolean {\n return (\n this.state.topicContext.maxTopicIndex != null &&\n this.state.topicContext.maxTopicIndex >= 0\n );\n }\n\n parseFSharpPipelineBody(this: Parser, prec: number): N.Expression {\n const startLoc = this.state.startLoc;\n\n this.state.potentialArrowAt = this.state.start;\n const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n this.state.inFSharpPipelineDirectBody = true;\n\n const ret = this.parseExprOp(\n this.parseMaybeUnaryOrPrivate(),\n startLoc,\n prec,\n );\n\n this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n\n return ret;\n }\n\n // https://github.com/tc39/proposal-js-module-blocks\n parseModuleExpression(this: Parser): N.ModuleExpression {\n this.expectPlugin(\"moduleBlocks\");\n const node = this.startNode<N.ModuleExpression>();\n this.next(); // eat \"module\"\n if (!this.match(tt.braceL)) {\n this.unexpected(null, tt.braceL);\n }\n // start program node immediately after `{`\n const program = this.startNodeAt<N.Program>(this.state.endLoc);\n this.next(); // eat `{`\n\n const revertScopes = this.initializeScopes(/** inModule */ true);\n this.enterInitialScopes();\n\n try {\n node.body = this.parseProgram(program, tt.braceR, \"module\");\n } finally {\n revertScopes();\n }\n return this.finishNode<N.ModuleExpression>(node, \"ModuleExpression\");\n }\n\n // Used in Flow plugin\n parsePropertyNamePrefixOperator(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n prop: Undone<N.ObjectOrClassMember | N.ClassMember>,\n ): void {}\n}\n","import type * as N from \"../types.ts\";\nimport {\n tokenIsIdentifier,\n tokenIsKeywordOrIdentifier,\n tokenIsLoop,\n tokenIsTemplate,\n tt,\n type TokenType,\n getExportedToken,\n} from \"../tokenizer/types.ts\";\nimport ExpressionParser from \"./expression.ts\";\nimport { Errors } from \"../parse-error.ts\";\nimport { isIdentifierChar, isIdentifierStart } from \"../util/identifier.ts\";\nimport * as charCodes from \"charcodes\";\nimport {\n ScopeFlag,\n ClassElementType,\n type BindingTypes,\n BindingFlag,\n} from \"../util/scopeflags.ts\";\nimport { ExpressionErrors } from \"./util.ts\";\nimport { PARAM, functionFlags } from \"../util/production-parameter.ts\";\nimport {\n newExpressionScope,\n newParameterDeclarationScope,\n} from \"../util/expression-scope.ts\";\nimport type { SourceType } from \"../options.ts\";\nimport { Token } from \"../tokenizer/index.ts\";\nimport type { Position } from \"../util/location.ts\";\nimport { createPositionWithColumnOffset } from \"../util/location.ts\";\nimport { cloneStringLiteral, cloneIdentifier, type Undone } from \"./node.ts\";\nimport type Parser from \"./index.ts\";\nimport { ParseBindingListFlags } from \"./lval.ts\";\n\nconst loopLabel = { kind: \"loop\" } as const,\n switchLabel = { kind: \"switch\" } as const;\n\nexport const enum ParseFunctionFlag {\n Expression = 0b0000,\n Declaration = 0b0001,\n HangingDeclaration = 0b0010,\n NullableId = 0b0100,\n Async = 0b1000,\n}\n\nexport const enum ParseStatementFlag {\n StatementOnly = 0b0000,\n AllowImportExport = 0b0001,\n AllowDeclaration = 0b0010,\n AllowFunctionDeclaration = 0b0100,\n AllowLabeledFunction = 0b1000,\n}\n\nconst loneSurrogate = /[\\uD800-\\uDFFF]/u;\n\nconst keywordRelationalOperator = /in(?:stanceof)?/y;\n\n/**\n * Convert tokens for backward Babel 7 compat.\n * tt.privateName => tt.hash + tt.name\n * tt.templateTail => tt.backquote/tt.braceR + tt.template + tt.backquote\n * tt.templateNonTail => tt.backquote/tt.braceR + tt.template + tt.dollarBraceL\n * For performance reasons this routine mutates `tokens`, it is okay\n * here since we execute `parseTopLevel` once for every file.\n */\nfunction babel7CompatTokens(tokens: (Token | N.Comment)[], input: string) {\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n const { type } = token;\n if (typeof type === \"number\") {\n if (!process.env.BABEL_8_BREAKING) {\n if (type === tt.privateName) {\n const { loc, start, value, end } = token;\n const hashEndPos = start + 1;\n const hashEndLoc = createPositionWithColumnOffset(loc.start, 1);\n tokens.splice(\n i,\n 1,\n new Token({\n // @ts-expect-error: hacky way to create token\n type: getExportedToken(tt.hash),\n value: \"#\",\n start: start,\n end: hashEndPos,\n startLoc: loc.start,\n endLoc: hashEndLoc,\n }),\n new Token({\n // @ts-expect-error: hacky way to create token\n type: getExportedToken(tt.name),\n value: value,\n start: hashEndPos,\n end: end,\n startLoc: hashEndLoc,\n endLoc: loc.end,\n }),\n );\n i++;\n continue;\n }\n\n if (tokenIsTemplate(type)) {\n const { loc, start, value, end } = token;\n const backquoteEnd = start + 1;\n const backquoteEndLoc = createPositionWithColumnOffset(loc.start, 1);\n let startToken;\n if (input.charCodeAt(start) === charCodes.graveAccent) {\n startToken = new Token({\n // @ts-expect-error: hacky way to create token\n type: getExportedToken(tt.backQuote),\n value: \"`\",\n start: start,\n end: backquoteEnd,\n startLoc: loc.start,\n endLoc: backquoteEndLoc,\n });\n } else {\n startToken = new Token({\n // @ts-expect-error: hacky way to create token\n type: getExportedToken(tt.braceR),\n value: \"}\",\n start: start,\n end: backquoteEnd,\n startLoc: loc.start,\n endLoc: backquoteEndLoc,\n });\n }\n let templateValue,\n templateElementEnd,\n templateElementEndLoc,\n endToken;\n if (type === tt.templateTail) {\n // ends with '`'\n templateElementEnd = end - 1;\n templateElementEndLoc = createPositionWithColumnOffset(loc.end, -1);\n templateValue = value === null ? null : value.slice(1, -1);\n endToken = new Token({\n // @ts-expect-error: hacky way to create token\n type: getExportedToken(tt.backQuote),\n value: \"`\",\n start: templateElementEnd,\n end: end,\n startLoc: templateElementEndLoc,\n endLoc: loc.end,\n });\n } else {\n // ends with `${`\n templateElementEnd = end - 2;\n templateElementEndLoc = createPositionWithColumnOffset(loc.end, -2);\n templateValue = value === null ? null : value.slice(1, -2);\n endToken = new Token({\n // @ts-expect-error: hacky way to create token\n type: getExportedToken(tt.dollarBraceL),\n value: \"${\",\n start: templateElementEnd,\n end: end,\n startLoc: templateElementEndLoc,\n endLoc: loc.end,\n });\n }\n tokens.splice(\n i,\n 1,\n startToken,\n new Token({\n // @ts-expect-error: hacky way to create token\n type: getExportedToken(tt.template),\n value: templateValue,\n start: backquoteEnd,\n end: templateElementEnd,\n startLoc: backquoteEndLoc,\n endLoc: templateElementEndLoc,\n }),\n endToken,\n );\n i += 2;\n continue;\n }\n }\n // @ts-expect-error: we manipulate `token` for performance reasons\n token.type = getExportedToken(type);\n }\n }\n return tokens;\n}\nexport default abstract class StatementParser extends ExpressionParser {\n // ### Statement parsing\n\n // Parse a program. Initializes the parser, reads any number of\n // statements, and wraps them in a Program node. Optionally takes a\n // `program` argument. If present, the statements will be appended\n // to its body instead of creating a new node.\n\n parseTopLevel(this: Parser, file: N.File, program: N.Program): N.File {\n file.program = this.parseProgram(program);\n file.comments = this.state.comments;\n\n if (this.options.tokens) {\n file.tokens = babel7CompatTokens(this.tokens, this.input);\n }\n\n return this.finishNode(file, \"File\");\n }\n\n parseProgram(\n this: Parser,\n program: Undone<N.Program>,\n end: TokenType = tt.eof,\n sourceType: SourceType = this.options.sourceType,\n ): N.Program {\n program.sourceType = sourceType;\n program.interpreter = this.parseInterpreterDirective();\n this.parseBlockBody(program, true, true, end);\n if (\n this.inModule &&\n !this.options.allowUndeclaredExports &&\n this.scope.undefinedExports.size > 0\n ) {\n for (const [localName, at] of Array.from(this.scope.undefinedExports)) {\n this.raise(Errors.ModuleExportUndefined, { at, localName });\n }\n }\n let finishedProgram: N.Program;\n if (end === tt.eof) {\n // finish at eof for top level program\n finishedProgram = this.finishNode(program, \"Program\");\n } else {\n // finish immediately before the end token\n finishedProgram = this.finishNodeAt(\n program,\n \"Program\",\n createPositionWithColumnOffset(this.state.startLoc, -1),\n );\n }\n return finishedProgram;\n }\n\n /**\n * cast a Statement to a Directive. This method mutates input statement.\n */\n stmtToDirective(stmt: N.Statement): N.Directive {\n const directive = stmt as any;\n directive.type = \"Directive\";\n directive.value = directive.expression;\n delete directive.expression;\n\n const directiveLiteral = directive.value;\n const expressionValue = directiveLiteral.value;\n const raw = this.input.slice(directiveLiteral.start, directiveLiteral.end);\n const val = (directiveLiteral.value = raw.slice(1, -1)); // remove quotes\n\n this.addExtra(directiveLiteral, \"raw\", raw);\n this.addExtra(directiveLiteral, \"rawValue\", val);\n this.addExtra(directiveLiteral, \"expressionValue\", expressionValue);\n\n directiveLiteral.type = \"DirectiveLiteral\";\n\n return directive;\n }\n\n parseInterpreterDirective(): N.InterpreterDirective | null {\n if (!this.match(tt.interpreterDirective)) {\n return null;\n }\n\n const node = this.startNode<N.InterpreterDirective>();\n node.value = this.state.value;\n this.next();\n return this.finishNode(node, \"InterpreterDirective\");\n }\n\n isLet(): boolean {\n if (!this.isContextual(tt._let)) {\n return false;\n }\n return this.hasFollowingBindingAtom();\n }\n\n chStartsBindingIdentifier(ch: number, pos: number) {\n if (isIdentifierStart(ch)) {\n keywordRelationalOperator.lastIndex = pos;\n if (keywordRelationalOperator.test(this.input)) {\n // We have seen `in` or `instanceof` so far, now check if the identifier\n // ends here\n const endCh = this.codePointAtPos(keywordRelationalOperator.lastIndex);\n if (!isIdentifierChar(endCh) && endCh !== charCodes.backslash) {\n return false;\n }\n }\n return true;\n } else if (ch === charCodes.backslash) {\n return true;\n } else {\n return false;\n }\n }\n\n chStartsBindingPattern(ch: number) {\n return (\n ch === charCodes.leftSquareBracket || ch === charCodes.leftCurlyBrace\n );\n }\n\n /**\n * Assuming we have seen a contextual `let` and declaration is allowed, check if it\n * starts a variable declaration so that it should be interpreted as a keyword.\n */\n hasFollowingBindingAtom(): boolean {\n const next = this.nextTokenStart();\n const nextCh = this.codePointAtPos(next);\n return (\n this.chStartsBindingPattern(nextCh) ||\n this.chStartsBindingIdentifier(nextCh, next)\n );\n }\n\n /**\n * Assuming we have seen a contextual `using` and declaration is allowed, check if it\n * starts a variable declaration in the same line so that it should be interpreted as\n * a keyword.\n */\n hasInLineFollowingBindingIdentifier(): boolean {\n const next = this.nextTokenInLineStart();\n const nextCh = this.codePointAtPos(next);\n return this.chStartsBindingIdentifier(nextCh, next);\n }\n\n startsUsingForOf(): boolean {\n const { type, containsEsc } = this.lookahead();\n if (type === tt._of && !containsEsc) {\n // `using of` must start a for-lhs-of statement\n return false;\n } else if (tokenIsIdentifier(type) && !this.hasFollowingLineBreak()) {\n this.expectPlugin(\"explicitResourceManagement\");\n return true;\n }\n }\n\n startsAwaitUsing(): boolean {\n let next = this.nextTokenInLineStart();\n if (this.isUnparsedContextual(next, \"using\")) {\n next = this.nextTokenInLineStartSince(next + 5);\n const nextCh = this.codePointAtPos(next);\n if (this.chStartsBindingIdentifier(nextCh, next)) {\n this.expectPlugin(\"explicitResourceManagement\");\n return true;\n }\n }\n return false;\n }\n\n // https://tc39.es/ecma262/#prod-ModuleItem\n parseModuleItem(this: Parser) {\n return this.parseStatementLike(\n ParseStatementFlag.AllowImportExport |\n ParseStatementFlag.AllowDeclaration |\n ParseStatementFlag.AllowFunctionDeclaration |\n // This function is actually also used to parse StatementItems,\n // which with Annex B enabled allows labeled functions.\n ParseStatementFlag.AllowLabeledFunction,\n );\n }\n\n // https://tc39.es/ecma262/#prod-StatementListItem\n parseStatementListItem(this: Parser) {\n return this.parseStatementLike(\n ParseStatementFlag.AllowDeclaration |\n ParseStatementFlag.AllowFunctionDeclaration |\n (!this.options.annexB || this.state.strict\n ? 0\n : ParseStatementFlag.AllowLabeledFunction),\n );\n }\n\n parseStatementOrSloppyAnnexBFunctionDeclaration(\n this: Parser,\n allowLabeledFunction: boolean = false,\n ) {\n let flags: ParseStatementFlag = ParseStatementFlag.StatementOnly;\n if (this.options.annexB && !this.state.strict) {\n flags |= ParseStatementFlag.AllowFunctionDeclaration;\n if (allowLabeledFunction) {\n flags |= ParseStatementFlag.AllowLabeledFunction;\n }\n }\n return this.parseStatementLike(flags);\n }\n\n // Parse a single statement.\n //\n // If expecting a statement and finding a slash operator, parse a\n // regular expression literal. This is to handle cases like\n // `if (foo) /blah/.exec(foo)`, where looking at the previous token\n // does not help.\n // https://tc39.es/ecma262/#prod-Statement\n parseStatement(this: Parser) {\n return this.parseStatementLike(ParseStatementFlag.StatementOnly);\n }\n\n // ImportDeclaration and ExportDeclaration are also handled here so we can throw recoverable errors\n // when they are not at the top level\n parseStatementLike(\n this: Parser,\n flags: ParseStatementFlag,\n ):\n | N.Statement\n | N.Declaration\n | N.ImportDeclaration\n | N.ExportDefaultDeclaration\n | N.ExportNamedDeclaration\n | N.ExportAllDeclaration {\n let decorators: N.Decorator[] | null = null;\n\n if (this.match(tt.at)) {\n decorators = this.parseDecorators(true);\n }\n return this.parseStatementContent(flags, decorators);\n }\n\n parseStatementContent(\n this: Parser,\n flags: ParseStatementFlag,\n decorators?: N.Decorator[] | null,\n ): N.Statement {\n const starttype = this.state.type;\n const node = this.startNode();\n const allowDeclaration = !!(flags & ParseStatementFlag.AllowDeclaration);\n const allowFunctionDeclaration = !!(\n flags & ParseStatementFlag.AllowFunctionDeclaration\n );\n const topLevel = flags & ParseStatementFlag.AllowImportExport;\n\n // Most types of statements are recognized by the keyword they\n // start with. Many are trivial to parse, some require a bit of\n // complexity.\n\n switch (starttype) {\n case tt._break:\n return this.parseBreakContinueStatement(node, /* isBreak */ true);\n case tt._continue:\n return this.parseBreakContinueStatement(node, /* isBreak */ false);\n case tt._debugger:\n return this.parseDebuggerStatement(node as Undone<N.DebuggerStatement>);\n case tt._do:\n return this.parseDoWhileStatement(node as Undone<N.DoWhileStatement>);\n case tt._for:\n return this.parseForStatement(node as Undone<N.ForStatement>);\n case tt._function:\n if (this.lookaheadCharCode() === charCodes.dot) break;\n if (!allowFunctionDeclaration) {\n this.raise(\n this.state.strict\n ? Errors.StrictFunction\n : this.options.annexB\n ? Errors.SloppyFunctionAnnexB\n : Errors.SloppyFunction,\n { at: this.state.startLoc },\n );\n }\n return this.parseFunctionStatement(\n node as Undone<N.FunctionDeclaration>,\n false,\n !allowDeclaration && allowFunctionDeclaration,\n );\n case tt._class:\n if (!allowDeclaration) this.unexpected();\n return this.parseClass(\n this.maybeTakeDecorators(\n decorators,\n node as Undone<N.ClassDeclaration>,\n ),\n true,\n );\n\n case tt._if:\n return this.parseIfStatement(node as Undone<N.IfStatement>);\n case tt._return:\n return this.parseReturnStatement(node as Undone<N.ReturnStatement>);\n case tt._switch:\n return this.parseSwitchStatement(node as Undone<N.SwitchStatement>);\n case tt._throw:\n return this.parseThrowStatement(node as Undone<N.ThrowStatement>);\n case tt._try:\n return this.parseTryStatement(node as Undone<N.TryStatement>);\n\n case tt._await:\n // [+Await] await [no LineTerminator here] using [no LineTerminator here] BindingList[+Using]\n if (!this.state.containsEsc && this.startsAwaitUsing()) {\n if (!this.isAwaitAllowed()) {\n this.raise(Errors.AwaitUsingNotInAsyncContext, { at: node });\n } else if (!allowDeclaration) {\n this.raise(Errors.UnexpectedLexicalDeclaration, {\n at: node,\n });\n }\n this.next(); // eat 'await'\n return this.parseVarStatement(\n node as Undone<N.VariableDeclaration>,\n \"await using\",\n );\n }\n break;\n case tt._using:\n // using [no LineTerminator here] BindingList[+Using]\n if (\n this.state.containsEsc ||\n !this.hasInLineFollowingBindingIdentifier()\n ) {\n break;\n }\n this.expectPlugin(\"explicitResourceManagement\");\n if (!this.scope.inModule && this.scope.inTopLevel) {\n this.raise(Errors.UnexpectedUsingDeclaration, {\n at: this.state.startLoc,\n });\n } else if (!allowDeclaration) {\n this.raise(Errors.UnexpectedLexicalDeclaration, {\n at: this.state.startLoc,\n });\n }\n return this.parseVarStatement(\n node as Undone<N.VariableDeclaration>,\n \"using\",\n );\n case tt._let: {\n if (this.state.containsEsc) {\n break;\n }\n // `let [` is an explicit negative lookahead for\n // ExpressionStatement, so special-case it first.\n const next = this.nextTokenStart();\n const nextCh = this.codePointAtPos(next);\n if (nextCh !== charCodes.leftSquareBracket) {\n if (!allowDeclaration && this.hasFollowingLineBreak()) break;\n if (\n !this.chStartsBindingIdentifier(nextCh, next) &&\n nextCh !== charCodes.leftCurlyBrace\n ) {\n break;\n }\n }\n }\n // fall through\n case tt._const: {\n if (!allowDeclaration) {\n this.raise(Errors.UnexpectedLexicalDeclaration, {\n at: this.state.startLoc,\n });\n }\n }\n // fall through\n case tt._var: {\n const kind = this.state.value;\n return this.parseVarStatement(\n node as Undone<N.VariableDeclaration>,\n kind,\n );\n }\n case tt._while:\n return this.parseWhileStatement(node as Undone<N.WhileStatement>);\n case tt._with:\n return this.parseWithStatement(node as Undone<N.WithStatement>);\n case tt.braceL:\n return this.parseBlock();\n case tt.semi:\n return this.parseEmptyStatement(node as Undone<N.EmptyStatement>);\n case tt._import: {\n const nextTokenCharCode = this.lookaheadCharCode();\n if (\n nextTokenCharCode === charCodes.leftParenthesis || // import()\n nextTokenCharCode === charCodes.dot // import.meta\n ) {\n break;\n }\n }\n // fall through\n case tt._export: {\n if (!this.options.allowImportExportEverywhere && !topLevel) {\n this.raise(Errors.UnexpectedImportExport, {\n at: this.state.startLoc,\n });\n }\n\n this.next(); // eat `import`/`export`\n\n let result;\n if (starttype === tt._import) {\n result = this.parseImport(node as Undone<N.ImportDeclaration>);\n\n if (\n result.type === \"ImportDeclaration\" &&\n (!result.importKind || result.importKind === \"value\")\n ) {\n this.sawUnambiguousESM = true;\n }\n } else {\n result = this.parseExport(\n node as Undone<\n | N.ExportAllDeclaration\n | N.ExportDefaultDeclaration\n | N.ExportDefaultDeclaration\n >,\n decorators,\n );\n\n if (\n (result.type === \"ExportNamedDeclaration\" &&\n (!result.exportKind || result.exportKind === \"value\")) ||\n (result.type === \"ExportAllDeclaration\" &&\n (!result.exportKind || result.exportKind === \"value\")) ||\n result.type === \"ExportDefaultDeclaration\"\n ) {\n this.sawUnambiguousESM = true;\n }\n }\n\n this.assertModuleNodeAllowed(result);\n\n return result;\n }\n\n default: {\n if (this.isAsyncFunction()) {\n if (!allowDeclaration) {\n this.raise(Errors.AsyncFunctionInSingleStatementContext, {\n at: this.state.startLoc,\n });\n }\n this.next(); // eat 'async'\n return this.parseFunctionStatement(\n node as Undone<N.FunctionDeclaration>,\n true,\n !allowDeclaration && allowFunctionDeclaration,\n );\n }\n }\n }\n\n // If the statement does not start with a statement keyword or a\n // brace, it's an ExpressionStatement or LabeledStatement. We\n // simply start parsing an expression, and afterwards, if the\n // next token is a colon and the expression was a simple\n // Identifier node, we switch to interpreting it as a label.\n const maybeName = this.state.value;\n const expr = this.parseExpression();\n\n if (\n tokenIsIdentifier(starttype) &&\n expr.type === \"Identifier\" &&\n this.eat(tt.colon)\n ) {\n return this.parseLabeledStatement(\n node as Undone<N.LabeledStatement>,\n maybeName,\n // @ts-expect-error migrate to Babel types\n expr,\n flags,\n );\n } else {\n return this.parseExpressionStatement(\n node as Undone<N.ExpressionStatement>,\n expr,\n decorators,\n );\n }\n }\n\n assertModuleNodeAllowed(node: N.Node): void {\n if (!this.options.allowImportExportEverywhere && !this.inModule) {\n this.raise(Errors.ImportOutsideModule, { at: node });\n }\n }\n\n decoratorsEnabledBeforeExport(): boolean {\n if (this.hasPlugin(\"decorators-legacy\")) return true;\n return (\n this.hasPlugin(\"decorators\") &&\n this.getPluginOption(\"decorators\", \"decoratorsBeforeExport\") !== false\n );\n }\n\n // Attach the decorators to the given class.\n // NOTE: This method changes the .start location of the class, and thus\n // can affect comment attachment. Calling it before or after finalizing\n // the class node (and thus finalizing its comments) changes how comments\n // before the `class` keyword or before the final .start location of the\n // class are attached.\n maybeTakeDecorators<T extends Undone<N.Class>>(\n maybeDecorators: N.Decorator[] | null,\n classNode: T,\n exportNode?: Undone<N.ExportDefaultDeclaration | N.ExportNamedDeclaration>,\n ): T {\n if (maybeDecorators) {\n if (classNode.decorators && classNode.decorators.length > 0) {\n // Note: decorators attachment is only attempred multiple times\n // when the class is part of an export declaration.\n if (\n typeof this.getPluginOption(\n \"decorators\",\n \"decoratorsBeforeExport\",\n ) !== \"boolean\"\n ) {\n // If `decoratorsBeforeExport` was set to `true` or `false`, we\n // already threw an error about decorators not being in a valid\n // position.\n this.raise(Errors.DecoratorsBeforeAfterExport, {\n at: classNode.decorators[0],\n });\n }\n classNode.decorators.unshift(...maybeDecorators);\n } else {\n classNode.decorators = maybeDecorators;\n }\n this.resetStartLocationFromNode(classNode, maybeDecorators[0]);\n if (exportNode) this.resetStartLocationFromNode(exportNode, classNode);\n }\n return classNode;\n }\n\n canHaveLeadingDecorator(): boolean {\n return this.match(tt._class);\n }\n\n parseDecorators(this: Parser, allowExport?: boolean): N.Decorator[] {\n const decorators = [];\n do {\n decorators.push(this.parseDecorator());\n } while (this.match(tt.at));\n\n if (this.match(tt._export)) {\n if (!allowExport) {\n this.unexpected();\n }\n\n if (!this.decoratorsEnabledBeforeExport()) {\n this.raise(Errors.DecoratorExportClass, { at: this.state.startLoc });\n }\n } else if (!this.canHaveLeadingDecorator()) {\n throw this.raise(Errors.UnexpectedLeadingDecorator, {\n at: this.state.startLoc,\n });\n }\n\n return decorators;\n }\n\n parseDecorator(this: Parser): N.Decorator {\n this.expectOnePlugin([\"decorators\", \"decorators-legacy\"]);\n\n const node = this.startNode<N.Decorator>();\n this.next();\n\n if (this.hasPlugin(\"decorators\")) {\n const startLoc = this.state.startLoc;\n let expr: N.Expression;\n\n if (this.match(tt.parenL)) {\n const startLoc = this.state.startLoc;\n this.next(); // eat '('\n expr = this.parseExpression();\n this.expect(tt.parenR);\n expr = this.wrapParenthesis(startLoc, expr);\n\n const paramsStartLoc = this.state.startLoc;\n node.expression = this.parseMaybeDecoratorArguments(expr);\n if (\n this.getPluginOption(\"decorators\", \"allowCallParenthesized\") ===\n false &&\n node.expression !== expr\n ) {\n this.raise(Errors.DecoratorArgumentsOutsideParentheses, {\n at: paramsStartLoc,\n });\n }\n } else {\n expr = this.parseIdentifier(false);\n\n while (this.eat(tt.dot)) {\n const node = this.startNodeAt(startLoc);\n node.object = expr;\n if (this.match(tt.privateName)) {\n this.classScope.usePrivateName(\n this.state.value,\n this.state.startLoc,\n );\n node.property = this.parsePrivateName();\n } else {\n node.property = this.parseIdentifier(true);\n }\n node.computed = false;\n expr = this.finishNode(node, \"MemberExpression\");\n }\n\n node.expression = this.parseMaybeDecoratorArguments(expr);\n }\n } else {\n node.expression = this.parseExprSubscripts();\n }\n return this.finishNode(node, \"Decorator\");\n }\n\n parseMaybeDecoratorArguments(this: Parser, expr: N.Expression): N.Expression {\n if (this.eat(tt.parenL)) {\n const node = this.startNodeAtNode(expr);\n node.callee = expr;\n node.arguments = this.parseCallExpressionArguments(tt.parenR, false);\n this.toReferencedList(node.arguments);\n return this.finishNode(node, \"CallExpression\");\n }\n\n return expr;\n }\n\n parseBreakContinueStatement(\n node: Undone<N.Node>,\n isBreak: true,\n ): N.BreakStatement;\n parseBreakContinueStatement(\n node: Undone<N.Node>,\n isBreak: false,\n ): N.ContinueStatement;\n parseBreakContinueStatement(\n node: Undone<N.BreakStatement | N.ContinueStatement>,\n isBreak: boolean,\n ): N.BreakStatement | N.ContinueStatement {\n this.next();\n\n if (this.isLineTerminator()) {\n node.label = null;\n } else {\n node.label = this.parseIdentifier();\n this.semicolon();\n }\n\n this.verifyBreakContinue(node, isBreak);\n\n return this.finishNode(\n node,\n isBreak ? \"BreakStatement\" : \"ContinueStatement\",\n );\n }\n\n verifyBreakContinue(\n node: Undone<N.BreakStatement | N.ContinueStatement>,\n isBreak: boolean,\n ) {\n let i;\n for (i = 0; i < this.state.labels.length; ++i) {\n const lab = this.state.labels[i];\n if (node.label == null || lab.name === node.label.name) {\n if (lab.kind != null && (isBreak || lab.kind === \"loop\")) break;\n if (node.label && isBreak) break;\n }\n }\n if (i === this.state.labels.length) {\n const type = isBreak ? \"BreakStatement\" : \"ContinueStatement\";\n this.raise(Errors.IllegalBreakContinue, { at: node, type });\n }\n }\n\n parseDebuggerStatement(\n node: Undone<N.DebuggerStatement>,\n ): N.DebuggerStatement {\n this.next();\n this.semicolon();\n return this.finishNode(node, \"DebuggerStatement\");\n }\n\n parseHeaderExpression(this: Parser): N.Expression {\n this.expect(tt.parenL);\n const val = this.parseExpression();\n this.expect(tt.parenR);\n return val;\n }\n\n // https://tc39.es/ecma262/#prod-DoWhileStatement\n parseDoWhileStatement(\n this: Parser,\n node: Undone<N.DoWhileStatement>,\n ): N.DoWhileStatement {\n this.next();\n this.state.labels.push(loopLabel);\n\n // Parse the loop body's body.\n node.body =\n // For the smartPipelines plugin: Disable topic references from outer\n // contexts within the loop body. They are permitted in test expressions,\n // outside of the loop body.\n this.withSmartMixTopicForbiddingContext(() =>\n // Parse the loop body's body.\n this.parseStatement(),\n );\n\n this.state.labels.pop();\n\n this.expect(tt._while);\n node.test = this.parseHeaderExpression();\n this.eat(tt.semi);\n return this.finishNode(node, \"DoWhileStatement\");\n }\n\n // Disambiguating between a `for` and a `for`/`in` or `for`/`of`\n // loop is non-trivial. Basically, we have to parse the init `var`\n // statement or expression, disallowing the `in` operator (see\n // the second parameter to `parseExpression`), and then check\n // whether the next token is `in` or `of`. When there is no init\n // part (semicolon immediately after the opening parenthesis), it\n // is a regular `for` loop.\n\n parseForStatement(\n this: Parser,\n node: Undone<N.ForStatement | N.ForInOf>,\n ): N.ForLike {\n this.next();\n this.state.labels.push(loopLabel);\n\n let awaitAt = null;\n\n if (this.isAwaitAllowed() && this.eatContextual(tt._await)) {\n awaitAt = this.state.lastTokStartLoc;\n }\n this.scope.enter(ScopeFlag.OTHER);\n this.expect(tt.parenL);\n\n if (this.match(tt.semi)) {\n if (awaitAt !== null) {\n this.unexpected(awaitAt);\n }\n return this.parseFor(node as Undone<N.ForStatement>, null);\n }\n\n const startsWithLet = this.isContextual(tt._let);\n {\n const startsWithAwaitUsing =\n this.isContextual(tt._await) && this.startsAwaitUsing();\n const starsWithUsingDeclaration =\n startsWithAwaitUsing ||\n (this.isContextual(tt._using) && this.startsUsingForOf());\n const isLetOrUsing =\n (startsWithLet && this.hasFollowingBindingAtom()) ||\n starsWithUsingDeclaration;\n\n if (this.match(tt._var) || this.match(tt._const) || isLetOrUsing) {\n const initNode = this.startNode<N.VariableDeclaration>();\n let kind;\n if (startsWithAwaitUsing) {\n kind = \"await using\";\n if (!this.isAwaitAllowed()) {\n this.raise(Errors.AwaitUsingNotInAsyncContext, {\n at: this.state.startLoc,\n });\n }\n this.next(); // eat 'await'\n } else {\n kind = this.state.value;\n }\n this.next();\n this.parseVar(initNode, true, kind);\n const init = this.finishNode(initNode, \"VariableDeclaration\");\n\n const isForIn = this.match(tt._in);\n if (isForIn && starsWithUsingDeclaration) {\n this.raise(Errors.ForInUsing, { at: init });\n }\n if (\n (isForIn || this.isContextual(tt._of)) &&\n init.declarations.length === 1\n ) {\n return this.parseForIn(node as Undone<N.ForInOf>, init, awaitAt);\n }\n if (awaitAt !== null) {\n this.unexpected(awaitAt);\n }\n return this.parseFor(node as Undone<N.ForStatement>, init);\n }\n }\n\n // Check whether the first token is possibly a contextual keyword, so that\n // we can forbid `for (async of` if this turns out to be a for-of loop.\n const startsWithAsync = this.isContextual(tt._async);\n\n const refExpressionErrors = new ExpressionErrors();\n const init = this.parseExpression(true, refExpressionErrors);\n const isForOf = this.isContextual(tt._of);\n if (isForOf) {\n // Check for leading tokens that are forbidden in for-of loops:\n if (startsWithLet) {\n this.raise(Errors.ForOfLet, { at: init });\n }\n\n if (\n // `for await (async of []);` is allowed.\n awaitAt === null &&\n startsWithAsync &&\n init.type === \"Identifier\"\n ) {\n // This catches the case where the `async` in `for (async of` was\n // parsed as an identifier. If it was parsed as the start of an async\n // arrow function (e.g. `for (async of => {} of []);`), the LVal check\n // further down will raise a more appropriate error.\n this.raise(Errors.ForOfAsync, { at: init });\n }\n }\n if (isForOf || this.match(tt._in)) {\n this.checkDestructuringPrivate(refExpressionErrors);\n this.toAssignable(init, /* isLHS */ true);\n const type = isForOf ? \"ForOfStatement\" : \"ForInStatement\";\n this.checkLVal(init, { in: { type } });\n return this.parseForIn(\n node as Undone<N.ForInStatement | N.ForOfStatement>,\n // @ts-expect-error init has been transformed to an assignable\n init,\n awaitAt,\n );\n } else {\n this.checkExpressionErrors(refExpressionErrors, true);\n }\n if (awaitAt !== null) {\n this.unexpected(awaitAt);\n }\n return this.parseFor(node as Undone<N.ForStatement>, init);\n }\n\n // https://tc39.es/ecma262/#prod-HoistableDeclaration\n parseFunctionStatement(\n this: Parser,\n node: Undone<N.FunctionDeclaration>,\n isAsync: boolean,\n isHangingDeclaration: boolean,\n ): N.FunctionDeclaration {\n this.next(); // eat 'function'\n return this.parseFunction(\n node,\n ParseFunctionFlag.Declaration |\n (isHangingDeclaration ? ParseFunctionFlag.HangingDeclaration : 0) |\n (isAsync ? ParseFunctionFlag.Async : 0),\n );\n }\n\n // https://tc39.es/ecma262/#prod-IfStatement\n parseIfStatement(this: Parser, node: Undone<N.IfStatement>) {\n this.next();\n node.test = this.parseHeaderExpression();\n // Annex B.3.3\n // https://tc39.es/ecma262/#sec-functiondeclarations-in-ifstatement-statement-clauses\n node.consequent = this.parseStatementOrSloppyAnnexBFunctionDeclaration();\n node.alternate = this.eat(tt._else)\n ? this.parseStatementOrSloppyAnnexBFunctionDeclaration()\n : null;\n return this.finishNode(node, \"IfStatement\");\n }\n\n parseReturnStatement(this: Parser, node: Undone<N.ReturnStatement>) {\n if (!this.prodParam.hasReturn && !this.options.allowReturnOutsideFunction) {\n this.raise(Errors.IllegalReturn, { at: this.state.startLoc });\n }\n\n this.next();\n\n // In `return` (and `break`/`continue`), the keywords with\n // optional arguments, we eagerly look for a semicolon or the\n // possibility to insert one.\n\n if (this.isLineTerminator()) {\n node.argument = null;\n } else {\n node.argument = this.parseExpression();\n this.semicolon();\n }\n\n return this.finishNode(node, \"ReturnStatement\");\n }\n\n // https://tc39.es/ecma262/#prod-SwitchStatement\n parseSwitchStatement(this: Parser, node: Undone<N.SwitchStatement>) {\n this.next();\n node.discriminant = this.parseHeaderExpression();\n const cases: N.SwitchStatement[\"cases\"] = (node.cases = []);\n this.expect(tt.braceL);\n this.state.labels.push(switchLabel);\n this.scope.enter(ScopeFlag.OTHER);\n\n // Statements under must be grouped (by label) in SwitchCase\n // nodes. `cur` is used to keep the node that we are currently\n // adding statements to.\n\n let cur;\n for (let sawDefault; !this.match(tt.braceR); ) {\n if (this.match(tt._case) || this.match(tt._default)) {\n const isCase = this.match(tt._case);\n if (cur) this.finishNode(cur, \"SwitchCase\");\n // @ts-expect-error Fixme\n cases.push((cur = this.startNode()));\n cur.consequent = [];\n this.next();\n if (isCase) {\n cur.test = this.parseExpression();\n } else {\n if (sawDefault) {\n this.raise(Errors.MultipleDefaultsInSwitch, {\n at: this.state.lastTokStartLoc,\n });\n }\n sawDefault = true;\n cur.test = null;\n }\n this.expect(tt.colon);\n } else {\n if (cur) {\n cur.consequent.push(this.parseStatementListItem());\n } else {\n this.unexpected();\n }\n }\n }\n this.scope.exit();\n if (cur) this.finishNode(cur, \"SwitchCase\");\n this.next(); // Closing brace\n this.state.labels.pop();\n return this.finishNode(node, \"SwitchStatement\");\n }\n\n parseThrowStatement(this: Parser, node: Undone<N.ThrowStatement>) {\n this.next();\n if (this.hasPrecedingLineBreak()) {\n this.raise(Errors.NewlineAfterThrow, { at: this.state.lastTokEndLoc });\n }\n node.argument = this.parseExpression();\n this.semicolon();\n return this.finishNode(node, \"ThrowStatement\");\n }\n\n parseCatchClauseParam(this: Parser): N.Pattern {\n const param = this.parseBindingAtom();\n\n this.scope.enter(\n this.options.annexB && param.type === \"Identifier\"\n ? ScopeFlag.SIMPLE_CATCH\n : 0,\n );\n this.checkLVal(param, {\n in: { type: \"CatchClause\" },\n binding: BindingFlag.TYPE_CATCH_PARAM,\n });\n\n return param;\n }\n\n parseTryStatement(\n this: Parser,\n node: Undone<N.TryStatement>,\n ): N.TryStatement {\n this.next();\n\n node.block = this.parseBlock();\n node.handler = null;\n\n if (this.match(tt._catch)) {\n const clause = this.startNode<N.CatchClause>();\n this.next();\n if (this.match(tt.parenL)) {\n this.expect(tt.parenL);\n clause.param = this.parseCatchClauseParam();\n this.expect(tt.parenR);\n } else {\n clause.param = null;\n this.scope.enter(ScopeFlag.OTHER);\n }\n\n // Parse the catch clause's body.\n clause.body =\n // For the smartPipelines plugin: Disable topic references from outer\n // contexts within the catch clause's body.\n this.withSmartMixTopicForbiddingContext(() =>\n // Parse the catch clause's body.\n this.parseBlock(false, false),\n );\n\n this.scope.exit();\n node.handler = this.finishNode(clause, \"CatchClause\");\n }\n\n node.finalizer = this.eat(tt._finally) ? this.parseBlock() : null;\n\n if (!node.handler && !node.finalizer) {\n this.raise(Errors.NoCatchOrFinally, { at: node });\n }\n\n return this.finishNode(node, \"TryStatement\");\n }\n\n // https://tc39.es/ecma262/#prod-VariableStatement\n // https://tc39.es/ecma262/#prod-LexicalDeclaration\n parseVarStatement(\n this: Parser,\n node: Undone<N.VariableDeclaration>,\n kind: \"var\" | \"let\" | \"const\" | \"using\" | \"await using\",\n allowMissingInitializer: boolean = false,\n ): N.VariableDeclaration {\n this.next();\n this.parseVar(node, false, kind, allowMissingInitializer);\n this.semicolon();\n return this.finishNode(node, \"VariableDeclaration\");\n }\n\n // https://tc39.es/ecma262/#prod-WhileStatement\n parseWhileStatement(\n this: Parser,\n node: Undone<N.WhileStatement>,\n ): N.WhileStatement {\n this.next();\n node.test = this.parseHeaderExpression();\n this.state.labels.push(loopLabel);\n\n // Parse the loop body.\n node.body =\n // For the smartPipelines plugin:\n // Disable topic references from outer contexts within the loop body.\n // They are permitted in test expressions, outside of the loop body.\n this.withSmartMixTopicForbiddingContext(() =>\n // Parse loop body.\n this.parseStatement(),\n );\n\n this.state.labels.pop();\n\n return this.finishNode(node, \"WhileStatement\");\n }\n\n parseWithStatement(\n this: Parser,\n node: Undone<N.WithStatement>,\n ): N.WithStatement {\n if (this.state.strict) {\n this.raise(Errors.StrictWith, { at: this.state.startLoc });\n }\n this.next();\n node.object = this.parseHeaderExpression();\n\n // Parse the statement body.\n node.body =\n // For the smartPipelines plugin:\n // Disable topic references from outer contexts within the with statement's body.\n // They are permitted in function default-parameter expressions, which are\n // part of the outer context, outside of the with statement's body.\n this.withSmartMixTopicForbiddingContext(() =>\n // Parse the statement body.\n this.parseStatement(),\n );\n\n return this.finishNode(node, \"WithStatement\");\n }\n\n parseEmptyStatement(node: Undone<N.EmptyStatement>): N.EmptyStatement {\n this.next();\n return this.finishNode(node, \"EmptyStatement\");\n }\n\n // https://tc39.es/ecma262/#prod-LabelledStatement\n parseLabeledStatement(\n this: Parser,\n node: Undone<N.LabeledStatement>,\n maybeName: string,\n expr: N.Identifier,\n flags: ParseStatementFlag,\n ): N.LabeledStatement {\n for (const label of this.state.labels) {\n if (label.name === maybeName) {\n this.raise(Errors.LabelRedeclaration, {\n at: expr,\n labelName: maybeName,\n });\n }\n }\n\n const kind = tokenIsLoop(this.state.type)\n ? \"loop\"\n : this.match(tt._switch)\n ? \"switch\"\n : null;\n for (let i = this.state.labels.length - 1; i >= 0; i--) {\n const label = this.state.labels[i];\n if (label.statementStart === node.start) {\n label.statementStart = this.state.start;\n label.kind = kind;\n } else {\n break;\n }\n }\n\n this.state.labels.push({\n name: maybeName,\n kind: kind,\n statementStart: this.state.start,\n });\n // https://tc39.es/ecma262/#prod-LabelledItem\n node.body =\n flags & ParseStatementFlag.AllowLabeledFunction\n ? this.parseStatementOrSloppyAnnexBFunctionDeclaration(true)\n : this.parseStatement();\n\n this.state.labels.pop();\n node.label = expr;\n return this.finishNode(node, \"LabeledStatement\");\n }\n\n parseExpressionStatement(\n node: Undone<N.ExpressionStatement>,\n expr: N.Expression,\n /* eslint-disable-next-line @typescript-eslint/no-unused-vars -- used in TypeScript parser */\n decorators: N.Decorator[] | null,\n ) {\n node.expression = expr;\n this.semicolon();\n return this.finishNode(node, \"ExpressionStatement\");\n }\n\n // Parse a semicolon-enclosed block of statements, handling `\"use\n // strict\"` declarations when `allowDirectives` is true (used for\n // function bodies).\n\n parseBlock(\n this: Parser,\n allowDirectives: boolean = false,\n createNewLexicalScope: boolean = true,\n afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n ): N.BlockStatement {\n const node = this.startNode<N.BlockStatement>();\n if (allowDirectives) {\n this.state.strictErrors.clear();\n }\n this.expect(tt.braceL);\n if (createNewLexicalScope) {\n this.scope.enter(ScopeFlag.OTHER);\n }\n this.parseBlockBody(\n node,\n allowDirectives,\n false,\n tt.braceR,\n afterBlockParse,\n );\n if (createNewLexicalScope) {\n this.scope.exit();\n }\n return this.finishNode(node, \"BlockStatement\");\n }\n\n isValidDirective(stmt: N.Statement): boolean {\n return (\n stmt.type === \"ExpressionStatement\" &&\n stmt.expression.type === \"StringLiteral\" &&\n !stmt.expression.extra.parenthesized\n );\n }\n\n parseBlockBody(\n this: Parser,\n node: Undone<N.BlockStatementLike>,\n allowDirectives: boolean | undefined | null,\n topLevel: boolean,\n end: TokenType,\n afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n ): void {\n const body: N.BlockStatementLike[\"body\"] = (node.body = []);\n const directives: N.BlockStatementLike[\"directives\"] = (node.directives =\n []);\n this.parseBlockOrModuleBlockBody(\n body,\n allowDirectives ? directives : undefined,\n topLevel,\n end,\n afterBlockParse,\n );\n }\n\n // Undefined directives means that directives are not allowed.\n // https://tc39.es/ecma262/#prod-Block\n // https://tc39.es/ecma262/#prod-ModuleBody\n parseBlockOrModuleBlockBody(\n this: Parser,\n body: N.Statement[],\n directives: N.Directive[] | undefined | null,\n topLevel: boolean,\n end: TokenType,\n afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n ): void {\n const oldStrict = this.state.strict;\n let hasStrictModeDirective = false;\n let parsedNonDirective = false;\n\n while (!this.match(end)) {\n const stmt = topLevel\n ? this.parseModuleItem()\n : this.parseStatementListItem();\n\n if (directives && !parsedNonDirective) {\n if (this.isValidDirective(stmt)) {\n const directive = this.stmtToDirective(stmt);\n directives.push(directive);\n\n if (\n !hasStrictModeDirective &&\n directive.value.value === \"use strict\"\n ) {\n hasStrictModeDirective = true;\n this.setStrict(true);\n }\n\n continue;\n }\n parsedNonDirective = true;\n // clear strict errors since the strict mode will not change within the block\n this.state.strictErrors.clear();\n }\n body.push(stmt);\n }\n\n afterBlockParse?.call(this, hasStrictModeDirective);\n\n if (!oldStrict) {\n this.setStrict(false);\n }\n\n this.next();\n }\n\n // Parse a regular `for` loop. The disambiguation code in\n // `parseStatement` will already have parsed the init statement or\n // expression.\n\n parseFor(\n this: Parser,\n node: Undone<N.ForStatement>,\n init?: N.VariableDeclaration | N.Expression | null,\n ): N.ForStatement {\n node.init = init;\n this.semicolon(/* allowAsi */ false);\n node.test = this.match(tt.semi) ? null : this.parseExpression();\n this.semicolon(/* allowAsi */ false);\n node.update = this.match(tt.parenR) ? null : this.parseExpression();\n this.expect(tt.parenR);\n\n // Parse the loop body.\n node.body =\n // For the smartPipelines plugin: Disable topic references from outer\n // contexts within the loop body. They are permitted in test expressions,\n // outside of the loop body.\n this.withSmartMixTopicForbiddingContext(() =>\n // Parse the loop body.\n this.parseStatement(),\n );\n\n this.scope.exit();\n this.state.labels.pop();\n\n return this.finishNode(node, \"ForStatement\");\n }\n\n // Parse a `for`/`in` and `for`/`of` loop, which are almost\n // same from parser's perspective.\n\n parseForIn(\n this: Parser,\n node: Undone<N.ForInOf>,\n init: N.VariableDeclaration | N.AssignmentPattern,\n awaitAt?: Position | null,\n ): N.ForInOf {\n const isForIn = this.match(tt._in);\n this.next();\n\n if (isForIn) {\n if (awaitAt !== null) this.unexpected(awaitAt);\n } else {\n node.await = awaitAt !== null;\n }\n\n if (\n init.type === \"VariableDeclaration\" &&\n init.declarations[0].init != null &&\n (!isForIn ||\n !this.options.annexB ||\n this.state.strict ||\n init.kind !== \"var\" ||\n init.declarations[0].id.type !== \"Identifier\")\n ) {\n this.raise(Errors.ForInOfLoopInitializer, {\n at: init,\n type: isForIn ? \"ForInStatement\" : \"ForOfStatement\",\n });\n }\n\n if (init.type === \"AssignmentPattern\") {\n this.raise(Errors.InvalidLhs, {\n at: init,\n ancestor: { type: \"ForStatement\" },\n });\n }\n\n node.left = init;\n node.right = isForIn\n ? this.parseExpression()\n : this.parseMaybeAssignAllowIn();\n this.expect(tt.parenR);\n\n // Parse the loop body.\n node.body =\n // For the smartPipelines plugin:\n // Disable topic references from outer contexts within the loop body.\n // They are permitted in test expressions, outside of the loop body.\n this.withSmartMixTopicForbiddingContext(() =>\n // Parse loop body.\n this.parseStatement(),\n );\n\n this.scope.exit();\n this.state.labels.pop();\n\n return this.finishNode(node, isForIn ? \"ForInStatement\" : \"ForOfStatement\");\n }\n\n // Parse a list of variable declarations.\n\n parseVar(\n this: Parser,\n node: Undone<N.VariableDeclaration>,\n isFor: boolean,\n kind: \"var\" | \"let\" | \"const\" | \"using\" | \"await using\",\n allowMissingInitializer: boolean = false,\n ): Undone<N.VariableDeclaration> {\n const declarations: N.VariableDeclarator[] = (node.declarations = []);\n node.kind = kind;\n for (;;) {\n const decl = this.startNode<N.VariableDeclarator>();\n this.parseVarId(decl, kind);\n decl.init = !this.eat(tt.eq)\n ? null\n : isFor\n ? this.parseMaybeAssignDisallowIn()\n : this.parseMaybeAssignAllowIn();\n\n if (decl.init === null && !allowMissingInitializer) {\n if (\n decl.id.type !== \"Identifier\" &&\n !(isFor && (this.match(tt._in) || this.isContextual(tt._of)))\n ) {\n this.raise(Errors.DeclarationMissingInitializer, {\n at: this.state.lastTokEndLoc,\n kind: \"destructuring\",\n });\n } else if (\n kind === \"const\" &&\n !(this.match(tt._in) || this.isContextual(tt._of))\n ) {\n this.raise(Errors.DeclarationMissingInitializer, {\n at: this.state.lastTokEndLoc,\n kind: \"const\",\n });\n }\n }\n declarations.push(this.finishNode(decl, \"VariableDeclarator\"));\n if (!this.eat(tt.comma)) break;\n }\n return node;\n }\n\n parseVarId(\n this: Parser,\n decl: Undone<N.VariableDeclarator>,\n kind: \"var\" | \"let\" | \"const\" | \"using\" | \"await using\",\n ): void {\n const id = this.parseBindingAtom();\n this.checkLVal(id, {\n in: { type: \"VariableDeclarator\" },\n binding: kind === \"var\" ? BindingFlag.TYPE_VAR : BindingFlag.TYPE_LEXICAL,\n });\n decl.id = id;\n }\n\n // https://tc39.es/ecma262/#prod-AsyncFunctionExpression\n parseAsyncFunctionExpression(\n this: Parser,\n node: Undone<N.FunctionExpression>,\n ): N.FunctionExpression {\n return this.parseFunction(node, ParseFunctionFlag.Async);\n }\n\n // Parse a function declaration or expression (depending on the\n // ParseFunctionFlag.Declaration flag).\n\n parseFunction<T extends N.NormalFunction>(\n this: Parser,\n node: Undone<T>,\n flags: ParseFunctionFlag = ParseFunctionFlag.Expression,\n ): T {\n const hangingDeclaration = flags & ParseFunctionFlag.HangingDeclaration;\n const isDeclaration = !!(flags & ParseFunctionFlag.Declaration);\n const requireId = isDeclaration && !(flags & ParseFunctionFlag.NullableId);\n const isAsync = !!(flags & ParseFunctionFlag.Async);\n\n this.initFunction(node, isAsync);\n\n if (this.match(tt.star)) {\n if (hangingDeclaration) {\n this.raise(Errors.GeneratorInSingleStatementContext, {\n at: this.state.startLoc,\n });\n }\n this.next(); // eat *\n node.generator = true;\n }\n\n if (isDeclaration) {\n node.id = this.parseFunctionId(requireId);\n }\n\n const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n this.state.maybeInArrowParameters = false;\n this.scope.enter(ScopeFlag.FUNCTION);\n this.prodParam.enter(functionFlags(isAsync, node.generator));\n\n if (!isDeclaration) {\n node.id = this.parseFunctionId();\n }\n\n this.parseFunctionParams(node, /* isConstructor */ false);\n\n // For the smartPipelines plugin: Disable topic references from outer\n // contexts within the function body. They are permitted in function\n // default-parameter expressions, outside of the function body.\n this.withSmartMixTopicForbiddingContext(() => {\n // Parse the function body.\n this.parseFunctionBodyAndFinish(\n node,\n isDeclaration ? \"FunctionDeclaration\" : \"FunctionExpression\",\n );\n });\n\n this.prodParam.exit();\n this.scope.exit();\n\n if (isDeclaration && !hangingDeclaration) {\n // We need to register this _after_ parsing the function body\n // because of TypeScript body-less function declarations,\n // which shouldn't be added to the scope.\n this.registerFunctionStatementId(node as T);\n }\n\n this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n return node as T;\n }\n\n parseFunctionId(requireId?: boolean): N.Identifier | undefined | null {\n return requireId || tokenIsIdentifier(this.state.type)\n ? this.parseIdentifier()\n : null;\n }\n\n parseFunctionParams(\n this: Parser,\n node: Undone<N.Function>,\n isConstructor?: boolean,\n ): void {\n this.expect(tt.parenL);\n this.expressionScope.enter(newParameterDeclarationScope());\n node.params = this.parseBindingList(\n tt.parenR,\n charCodes.rightParenthesis,\n ParseBindingListFlags.IS_FUNCTION_PARAMS |\n (isConstructor ? ParseBindingListFlags.IS_CONSTRUCTOR_PARAMS : 0),\n );\n\n this.expressionScope.exit();\n }\n\n registerFunctionStatementId(node: N.Function): void {\n if (!node.id) return;\n\n // If it is a regular function declaration in sloppy mode, then it is\n // subject to Annex B semantics (BindingFlag.TYPE_FUNCTION). Otherwise, the binding\n // mode depends on properties of the current scope (see\n // treatFunctionsAsVar).\n this.scope.declareName(\n node.id.name,\n !this.options.annexB || this.state.strict || node.generator || node.async\n ? this.scope.treatFunctionsAsVar\n ? BindingFlag.TYPE_VAR\n : BindingFlag.TYPE_LEXICAL\n : BindingFlag.TYPE_FUNCTION,\n node.id.loc.start,\n );\n }\n\n // Parse a class declaration or literal (depending on the\n // `isStatement` parameter).\n\n parseClass<T extends N.Class>(\n this: Parser,\n node: Undone<T>,\n isStatement: /* T === ClassDeclaration */ boolean,\n optionalId?: boolean,\n ): T {\n this.next(); // 'class'\n\n // A class definition is always strict mode code.\n const oldStrict = this.state.strict;\n this.state.strict = true;\n\n this.parseClassId(node, isStatement, optionalId);\n this.parseClassSuper(node);\n // this.state.strict is restored in parseClassBody\n node.body = this.parseClassBody(!!node.superClass, oldStrict);\n\n return this.finishNode(\n node,\n isStatement ? \"ClassDeclaration\" : \"ClassExpression\",\n );\n }\n\n isClassProperty(): boolean {\n return this.match(tt.eq) || this.match(tt.semi) || this.match(tt.braceR);\n }\n\n isClassMethod(): boolean {\n return this.match(tt.parenL);\n }\n\n isNonstaticConstructor(method: N.ClassMethod | N.ClassProperty): boolean {\n return (\n !method.computed &&\n !method.static &&\n (method.key.name === \"constructor\" || // Identifier\n method.key.value === \"constructor\") // String literal\n );\n }\n\n // https://tc39.es/ecma262/#prod-ClassBody\n parseClassBody(\n this: Parser,\n hadSuperClass: boolean,\n oldStrict: boolean,\n ): N.ClassBody {\n this.classScope.enter();\n\n const state: N.ParseClassMemberState = {\n hadConstructor: false,\n hadSuperClass,\n };\n let decorators: N.Decorator[] = [];\n const classBody = this.startNode<N.ClassBody>();\n classBody.body = [];\n\n this.expect(tt.braceL);\n\n // For the smartPipelines plugin: Disable topic references from outer\n // contexts within the class body.\n this.withSmartMixTopicForbiddingContext(() => {\n // Parse the contents within the braces.\n while (!this.match(tt.braceR)) {\n if (this.eat(tt.semi)) {\n if (decorators.length > 0) {\n throw this.raise(Errors.DecoratorSemicolon, {\n at: this.state.lastTokEndLoc,\n });\n }\n continue;\n }\n\n if (this.match(tt.at)) {\n decorators.push(this.parseDecorator());\n continue;\n }\n\n const member = this.startNode<N.ClassMember>();\n\n // steal the decorators if there are any\n if (decorators.length) {\n // @ts-expect-error Fixme\n member.decorators = decorators;\n this.resetStartLocationFromNode(member, decorators[0]);\n decorators = [];\n }\n\n this.parseClassMember(classBody, member, state);\n\n if (\n // @ts-expect-error Fixme\n member.kind === \"constructor\" &&\n // @ts-expect-error Fixme\n member.decorators &&\n // @ts-expect-error Fixme\n member.decorators.length > 0\n ) {\n this.raise(Errors.DecoratorConstructor, { at: member });\n }\n }\n });\n\n this.state.strict = oldStrict;\n\n this.next(); // eat `}`\n\n if (decorators.length) {\n throw this.raise(Errors.TrailingDecorator, { at: this.state.startLoc });\n }\n\n this.classScope.exit();\n\n return this.finishNode(classBody, \"ClassBody\");\n }\n\n // returns true if the current identifier is a method/field name,\n // false if it is a modifier\n parseClassMemberFromModifier(\n this: Parser,\n classBody: Undone<N.ClassBody>,\n member: Undone<N.ClassMember>,\n ): boolean {\n const key = this.parseIdentifier(true); // eats the modifier\n\n if (this.isClassMethod()) {\n const method: N.ClassMethod = member as any;\n\n // a method named like the modifier\n method.kind = \"method\";\n method.computed = false;\n method.key = key;\n method.static = false;\n this.pushClassMethod(\n classBody,\n method,\n false,\n false,\n /* isConstructor */ false,\n false,\n );\n return true;\n } else if (this.isClassProperty()) {\n const prop: N.ClassProperty = member as any;\n\n // a property named like the modifier\n prop.computed = false;\n prop.key = key;\n prop.static = false;\n classBody.body.push(this.parseClassProperty(prop));\n return true;\n }\n this.resetPreviousNodeTrailingComments(key);\n return false;\n }\n\n parseClassMember(\n this: Parser,\n classBody: Undone<N.ClassBody>,\n member: Undone<N.ClassMember>,\n state: N.ParseClassMemberState,\n ): void {\n const isStatic = this.isContextual(tt._static);\n\n if (isStatic) {\n if (this.parseClassMemberFromModifier(classBody, member)) {\n // a class element named 'static'\n return;\n }\n if (this.eat(tt.braceL)) {\n this.parseClassStaticBlock(classBody, member as any as N.StaticBlock);\n return;\n }\n }\n\n this.parseClassMemberWithIsStatic(classBody, member, state, isStatic);\n }\n\n parseClassMemberWithIsStatic(\n this: Parser,\n classBody: Undone<N.ClassBody>,\n member: Undone<N.ClassMember>,\n state: N.ParseClassMemberState,\n isStatic: boolean,\n ) {\n const publicMethod = member as N.ClassMethod;\n const privateMethod = member as N.ClassPrivateMethod;\n const publicProp = member as N.ClassProperty;\n const privateProp = member as N.ClassPrivateProperty;\n const accessorProp = member as N.ClassAccessorProperty;\n\n const method: typeof publicMethod | typeof privateMethod = publicMethod;\n const publicMember: typeof publicMethod | typeof publicProp = publicMethod;\n\n member.static = isStatic;\n this.parsePropertyNamePrefixOperator(member);\n\n if (this.eat(tt.star)) {\n // a generator\n method.kind = \"method\";\n const isPrivateName = this.match(tt.privateName);\n this.parseClassElementName(method);\n\n if (isPrivateName) {\n // Private generator method\n this.pushClassPrivateMethod(classBody, privateMethod, true, false);\n return;\n }\n\n if (this.isNonstaticConstructor(publicMethod)) {\n this.raise(Errors.ConstructorIsGenerator, {\n at: publicMethod.key,\n });\n }\n\n this.pushClassMethod(\n classBody,\n publicMethod,\n true,\n false,\n /* isConstructor */ false,\n false,\n );\n\n return;\n }\n\n const isContextual =\n tokenIsIdentifier(this.state.type) && !this.state.containsEsc;\n const isPrivate = this.match(tt.privateName);\n const key = this.parseClassElementName(member);\n const maybeQuestionTokenStartLoc = this.state.startLoc;\n\n this.parsePostMemberNameModifiers(publicMember);\n\n if (this.isClassMethod()) {\n method.kind = \"method\";\n\n if (isPrivate) {\n this.pushClassPrivateMethod(classBody, privateMethod, false, false);\n return;\n }\n\n // a normal method\n const isConstructor = this.isNonstaticConstructor(publicMethod);\n let allowsDirectSuper = false;\n if (isConstructor) {\n publicMethod.kind = \"constructor\";\n\n // TypeScript allows multiple overloaded constructor declarations.\n if (state.hadConstructor && !this.hasPlugin(\"typescript\")) {\n this.raise(Errors.DuplicateConstructor, { at: key });\n }\n if (isConstructor && this.hasPlugin(\"typescript\") && member.override) {\n this.raise(Errors.OverrideOnConstructor, { at: key });\n }\n state.hadConstructor = true;\n allowsDirectSuper = state.hadSuperClass;\n }\n\n this.pushClassMethod(\n classBody,\n publicMethod,\n false,\n false,\n isConstructor,\n allowsDirectSuper,\n );\n } else if (this.isClassProperty()) {\n if (isPrivate) {\n this.pushClassPrivateProperty(classBody, privateProp);\n } else {\n this.pushClassProperty(classBody, publicProp);\n }\n } else if (\n isContextual &&\n key.name === \"async\" &&\n !this.isLineTerminator()\n ) {\n // an async method\n this.resetPreviousNodeTrailingComments(key);\n const isGenerator = this.eat(tt.star);\n\n if (publicMember.optional) {\n this.unexpected(maybeQuestionTokenStartLoc);\n }\n\n method.kind = \"method\";\n // The so-called parsed name would have been \"async\": get the real name.\n const isPrivate = this.match(tt.privateName);\n this.parseClassElementName(method);\n this.parsePostMemberNameModifiers(publicMember);\n\n if (isPrivate) {\n // private async method\n this.pushClassPrivateMethod(\n classBody,\n privateMethod,\n isGenerator,\n true,\n );\n } else {\n if (this.isNonstaticConstructor(publicMethod)) {\n this.raise(Errors.ConstructorIsAsync, { at: publicMethod.key });\n }\n\n this.pushClassMethod(\n classBody,\n publicMethod,\n isGenerator,\n true,\n /* isConstructor */ false,\n false,\n );\n }\n } else if (\n isContextual &&\n (key.name === \"get\" || key.name === \"set\") &&\n !(this.match(tt.star) && this.isLineTerminator())\n ) {\n // `get\\n*` is an uninitialized property named 'get' followed by a generator.\n // a getter or setter\n this.resetPreviousNodeTrailingComments(key);\n method.kind = key.name;\n // The so-called parsed name would have been \"get/set\": get the real name.\n const isPrivate = this.match(tt.privateName);\n this.parseClassElementName(publicMethod);\n\n if (isPrivate) {\n // private getter/setter\n this.pushClassPrivateMethod(classBody, privateMethod, false, false);\n } else {\n if (this.isNonstaticConstructor(publicMethod)) {\n this.raise(Errors.ConstructorIsAccessor, { at: publicMethod.key });\n }\n this.pushClassMethod(\n classBody,\n publicMethod,\n false,\n false,\n /* isConstructor */ false,\n false,\n );\n }\n\n this.checkGetterSetterParams(publicMethod);\n } else if (\n isContextual &&\n key.name === \"accessor\" &&\n !this.isLineTerminator()\n ) {\n this.expectPlugin(\"decoratorAutoAccessors\");\n this.resetPreviousNodeTrailingComments(key);\n\n // The so-called parsed name would have been \"accessor\": get the real name.\n const isPrivate = this.match(tt.privateName);\n this.parseClassElementName(publicProp);\n this.pushClassAccessorProperty(classBody, accessorProp, isPrivate);\n } else if (this.isLineTerminator()) {\n // an uninitialized class property (due to ASI, since we don't otherwise recognize the next token)\n if (isPrivate) {\n this.pushClassPrivateProperty(classBody, privateProp);\n } else {\n this.pushClassProperty(classBody, publicProp);\n }\n } else {\n this.unexpected();\n }\n }\n\n // https://tc39.es/ecma262/#prod-ClassElementName\n parseClassElementName(\n this: Parser,\n member: Undone<N.ClassMember>,\n ): N.Expression | N.Identifier {\n const { type, value } = this.state;\n if (\n (type === tt.name || type === tt.string) &&\n member.static &&\n value === \"prototype\"\n ) {\n this.raise(Errors.StaticPrototype, { at: this.state.startLoc });\n }\n\n if (type === tt.privateName) {\n if (value === \"constructor\") {\n this.raise(Errors.ConstructorClassPrivateField, {\n at: this.state.startLoc,\n });\n }\n const key = this.parsePrivateName();\n member.key = key;\n return key;\n }\n\n return this.parsePropertyName(member);\n }\n\n parseClassStaticBlock(\n this: Parser,\n classBody: Undone<N.ClassBody>,\n member: Undone<\n N.StaticBlock & {\n decorators?: Array<N.Decorator>;\n }\n >,\n ) {\n // Start a new lexical scope\n this.scope.enter(\n ScopeFlag.CLASS | ScopeFlag.STATIC_BLOCK | ScopeFlag.SUPER,\n );\n // Start a new scope with regard to loop labels\n const oldLabels = this.state.labels;\n this.state.labels = [];\n // ClassStaticBlockStatementList:\n // StatementList[~Yield, ~Await, ~Return] opt\n this.prodParam.enter(PARAM);\n const body: N.Node[] = (member.body = []);\n this.parseBlockOrModuleBlockBody(body, undefined, false, tt.braceR);\n this.prodParam.exit();\n this.scope.exit();\n this.state.labels = oldLabels;\n classBody.body.push(this.finishNode<N.StaticBlock>(member, \"StaticBlock\"));\n if (member.decorators?.length) {\n this.raise(Errors.DecoratorStaticBlock, { at: member });\n }\n }\n\n pushClassProperty(\n this: Parser,\n classBody: Undone<N.ClassBody>,\n prop: N.ClassProperty,\n ) {\n if (\n !prop.computed &&\n (prop.key.name === \"constructor\" || prop.key.value === \"constructor\")\n ) {\n // Non-computed field, which is either an identifier named \"constructor\"\n // or a string literal named \"constructor\"\n this.raise(Errors.ConstructorClassField, { at: prop.key });\n }\n\n classBody.body.push(this.parseClassProperty(prop));\n }\n\n pushClassPrivateProperty(\n this: Parser,\n classBody: Undone<N.ClassBody>,\n prop: Undone<N.ClassPrivateProperty>,\n ) {\n const node = this.parseClassPrivateProperty(prop);\n classBody.body.push(node);\n\n this.classScope.declarePrivateName(\n this.getPrivateNameSV(node.key),\n ClassElementType.OTHER,\n node.key.loc.start,\n );\n }\n\n pushClassAccessorProperty(\n this: Parser,\n classBody: Undone<N.ClassBody>,\n prop: N.ClassAccessorProperty,\n isPrivate: boolean,\n ) {\n if (!isPrivate && !prop.computed) {\n // Not private, so not node is not a PrivateName and we can safely cast\n const key = prop.key as N.Expression;\n\n if (key.name === \"constructor\" || key.value === \"constructor\") {\n // Non-computed field, which is either an identifier named \"constructor\"\n // or a string literal named \"constructor\"\n this.raise(Errors.ConstructorClassField, { at: key });\n }\n }\n\n const node = this.parseClassAccessorProperty(prop);\n classBody.body.push(node);\n\n if (isPrivate) {\n this.classScope.declarePrivateName(\n this.getPrivateNameSV(node.key),\n ClassElementType.OTHER,\n node.key.loc.start,\n );\n }\n }\n\n pushClassMethod(\n this: Parser,\n classBody: Undone<N.ClassBody>,\n method: Undone<N.ClassMethod>,\n isGenerator: boolean,\n isAsync: boolean,\n isConstructor: boolean,\n allowsDirectSuper: boolean,\n ): void {\n classBody.body.push(\n this.parseMethod(\n method,\n isGenerator,\n isAsync,\n isConstructor,\n allowsDirectSuper,\n \"ClassMethod\",\n true,\n ),\n );\n }\n\n pushClassPrivateMethod(\n this: Parser,\n classBody: Undone<N.ClassBody>,\n method: Undone<N.ClassPrivateMethod>,\n isGenerator: boolean,\n isAsync: boolean,\n ): void {\n const node = this.parseMethod(\n method,\n isGenerator,\n isAsync,\n /* isConstructor */ false,\n false,\n \"ClassPrivateMethod\",\n true,\n );\n classBody.body.push(node);\n\n const kind =\n node.kind === \"get\"\n ? node.static\n ? ClassElementType.STATIC_GETTER\n : ClassElementType.INSTANCE_GETTER\n : node.kind === \"set\"\n ? node.static\n ? ClassElementType.STATIC_SETTER\n : ClassElementType.INSTANCE_SETTER\n : ClassElementType.OTHER;\n this.declareClassPrivateMethodInScope(node, kind);\n }\n\n declareClassPrivateMethodInScope(\n node: Undone<\n N.ClassPrivateMethod | N.EstreeMethodDefinition | N.TSDeclareMethod\n >,\n kind: number,\n ) {\n this.classScope.declarePrivateName(\n this.getPrivateNameSV(node.key),\n kind,\n node.key.loc.start,\n );\n }\n\n // Overridden in typescript.js\n parsePostMemberNameModifiers(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n methodOrProp: Undone<N.ClassMethod | N.ClassProperty>,\n ): void {}\n\n // https://tc39.es/ecma262/#prod-FieldDefinition\n parseClassPrivateProperty(\n this: Parser,\n node: Undone<N.ClassPrivateProperty>,\n ): N.ClassPrivateProperty {\n this.parseInitializer(node);\n this.semicolon();\n return this.finishNode(node, \"ClassPrivateProperty\");\n }\n\n // https://tc39.es/ecma262/#prod-FieldDefinition\n parseClassProperty(this: Parser, node: N.ClassProperty): N.ClassProperty {\n this.parseInitializer(node);\n this.semicolon();\n return this.finishNode(node, \"ClassProperty\");\n }\n\n parseClassAccessorProperty(\n this: Parser,\n node: N.ClassAccessorProperty,\n ): N.ClassAccessorProperty {\n this.parseInitializer(node);\n this.semicolon();\n return this.finishNode(node, \"ClassAccessorProperty\");\n }\n\n // https://tc39.es/ecma262/#prod-Initializer\n parseInitializer(\n this: Parser,\n node: Undone<\n N.ClassProperty | N.ClassPrivateProperty | N.ClassAccessorProperty\n >,\n ): void {\n this.scope.enter(ScopeFlag.CLASS | ScopeFlag.SUPER);\n this.expressionScope.enter(newExpressionScope());\n this.prodParam.enter(PARAM);\n node.value = this.eat(tt.eq) ? this.parseMaybeAssignAllowIn() : null;\n this.expressionScope.exit();\n this.prodParam.exit();\n this.scope.exit();\n }\n\n parseClassId(\n node: Undone<N.Class>,\n isStatement: boolean,\n optionalId?: boolean | null,\n bindingType: BindingTypes = BindingFlag.TYPE_CLASS,\n ): void {\n if (tokenIsIdentifier(this.state.type)) {\n node.id = this.parseIdentifier();\n if (isStatement) {\n this.declareNameFromIdentifier(node.id, bindingType);\n }\n } else {\n if (optionalId || !isStatement) {\n node.id = null;\n } else {\n throw this.raise(Errors.MissingClassName, { at: this.state.startLoc });\n }\n }\n }\n\n // https://tc39.es/ecma262/#prod-ClassHeritage\n parseClassSuper(this: Parser, node: Undone<N.Class>): void {\n node.superClass = this.eat(tt._extends) ? this.parseExprSubscripts() : null;\n }\n\n // Parses module export declaration.\n // https://tc39.es/ecma262/#prod-ExportDeclaration\n\n parseExport(\n this: Parser,\n node: Undone<\n | N.ExportDefaultDeclaration\n | N.ExportAllDeclaration\n | N.ExportNamedDeclaration\n >,\n decorators: N.Decorator[] | null,\n ): N.AnyExport {\n const maybeDefaultIdentifier = this.parseMaybeImportPhase(\n node,\n /* isExport */ true,\n );\n const hasDefault = this.maybeParseExportDefaultSpecifier(\n node,\n maybeDefaultIdentifier,\n );\n const parseAfterDefault = !hasDefault || this.eat(tt.comma);\n const hasStar =\n parseAfterDefault &&\n this.eatExportStar(\n // @ts-expect-error todo(flow->ts)\n node,\n );\n const hasNamespace =\n hasStar &&\n this.maybeParseExportNamespaceSpecifier(\n // @ts-expect-error todo(flow->ts)\n node,\n );\n const parseAfterNamespace =\n parseAfterDefault && (!hasNamespace || this.eat(tt.comma));\n const isFromRequired = hasDefault || hasStar;\n\n if (hasStar && !hasNamespace) {\n if (hasDefault) this.unexpected();\n if (decorators) {\n throw this.raise(Errors.UnsupportedDecoratorExport, { at: node });\n }\n this.parseExportFrom(node as Undone<N.ExportNamedDeclaration>, true);\n\n return this.finishNode(node, \"ExportAllDeclaration\");\n }\n\n const hasSpecifiers = this.maybeParseExportNamedSpecifiers(\n // @ts-expect-error todo(flow->ts)\n node,\n );\n\n if (hasDefault && parseAfterDefault && !hasStar && !hasSpecifiers) {\n this.unexpected(null, tt.braceL);\n }\n\n if (hasNamespace && parseAfterNamespace) {\n this.unexpected(null, tt._from);\n }\n\n let hasDeclaration;\n if (isFromRequired || hasSpecifiers) {\n hasDeclaration = false;\n if (decorators) {\n throw this.raise(Errors.UnsupportedDecoratorExport, { at: node });\n }\n this.parseExportFrom(\n node as Undone<N.ExportNamedDeclaration>,\n isFromRequired,\n );\n } else {\n hasDeclaration = this.maybeParseExportDeclaration(\n node as Undone<N.ExportNamedDeclaration>,\n );\n }\n\n if (isFromRequired || hasSpecifiers || hasDeclaration) {\n const node2 = node as Undone<N.ExportNamedDeclaration>;\n this.checkExport(node2, true, false, !!node2.source);\n if (node2.declaration?.type === \"ClassDeclaration\") {\n this.maybeTakeDecorators(decorators, node2.declaration, node2);\n } else if (decorators) {\n throw this.raise(Errors.UnsupportedDecoratorExport, { at: node });\n }\n return this.finishNode(node2, \"ExportNamedDeclaration\");\n }\n\n if (this.eat(tt._default)) {\n const node2 = node as Undone<N.ExportDefaultDeclaration>;\n // export default ...\n const decl = this.parseExportDefaultExpression();\n node2.declaration = decl;\n\n if (decl.type === \"ClassDeclaration\") {\n this.maybeTakeDecorators(decorators, decl as N.ClassDeclaration, node2);\n } else if (decorators) {\n throw this.raise(Errors.UnsupportedDecoratorExport, { at: node });\n }\n\n this.checkExport(node2, true, true);\n\n return this.finishNode(node2, \"ExportDefaultDeclaration\");\n }\n\n this.unexpected(null, tt.braceL);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n eatExportStar(node: N.Node): boolean {\n return this.eat(tt.star);\n }\n\n maybeParseExportDefaultSpecifier(\n node: Undone<\n | N.ExportDefaultDeclaration\n | N.ExportAllDeclaration\n | N.ExportNamedDeclaration\n >,\n maybeDefaultIdentifier: N.Identifier | null,\n ): node is Undone<N.ExportNamedDeclaration> {\n if (maybeDefaultIdentifier || this.isExportDefaultSpecifier()) {\n // export defaultObj ...\n this.expectPlugin(\"exportDefaultFrom\", maybeDefaultIdentifier?.loc.start);\n const id = maybeDefaultIdentifier || this.parseIdentifier(true);\n const specifier = this.startNodeAtNode<N.ExportDefaultSpecifier>(id);\n specifier.exported = id;\n (node as Undone<N.ExportNamedDeclaration>).specifiers = [\n this.finishNode(specifier, \"ExportDefaultSpecifier\"),\n ];\n return true;\n }\n return false;\n }\n\n maybeParseExportNamespaceSpecifier(node: N.Node): boolean {\n if (this.isContextual(tt._as)) {\n if (!node.specifiers) node.specifiers = [];\n\n const specifier = this.startNodeAt(this.state.lastTokStartLoc);\n\n this.next();\n\n specifier.exported = this.parseModuleExportName();\n node.specifiers.push(\n this.finishNode(specifier, \"ExportNamespaceSpecifier\"),\n );\n return true;\n }\n return false;\n }\n\n maybeParseExportNamedSpecifiers(node: N.Node): boolean {\n if (this.match(tt.braceL)) {\n if (!node.specifiers) node.specifiers = [];\n const isTypeExport = node.exportKind === \"type\";\n node.specifiers.push(...this.parseExportSpecifiers(isTypeExport));\n\n node.source = null;\n node.declaration = null;\n if (this.hasPlugin(\"importAssertions\")) {\n node.assertions = [];\n }\n\n return true;\n }\n return false;\n }\n\n maybeParseExportDeclaration(\n this: Parser,\n node: Undone<N.ExportNamedDeclaration>,\n ): boolean {\n if (this.shouldParseExportDeclaration()) {\n node.specifiers = [];\n node.source = null;\n if (this.hasPlugin(\"importAssertions\")) {\n node.assertions = [];\n }\n node.declaration = this.parseExportDeclaration(node);\n return true;\n }\n return false;\n }\n\n isAsyncFunction(): boolean {\n if (!this.isContextual(tt._async)) return false;\n const next = this.nextTokenInLineStart();\n return this.isUnparsedContextual(next, \"function\");\n }\n\n parseExportDefaultExpression(this: Parser): N.Expression | N.Declaration {\n const expr = this.startNode();\n\n if (this.match(tt._function)) {\n this.next();\n return this.parseFunction(\n expr as Undone<N.FunctionDeclaration>,\n ParseFunctionFlag.Declaration | ParseFunctionFlag.NullableId,\n );\n } else if (this.isAsyncFunction()) {\n this.next(); // eat 'async'\n this.next(); // eat 'function'\n return this.parseFunction(\n expr as Undone<N.FunctionDeclaration>,\n ParseFunctionFlag.Declaration |\n ParseFunctionFlag.NullableId |\n ParseFunctionFlag.Async,\n );\n }\n\n if (this.match(tt._class)) {\n return this.parseClass(expr as Undone<N.ClassExpression>, true, true);\n }\n\n if (this.match(tt.at)) {\n if (\n this.hasPlugin(\"decorators\") &&\n this.getPluginOption(\"decorators\", \"decoratorsBeforeExport\") === true\n ) {\n this.raise(Errors.DecoratorBeforeExport, { at: this.state.startLoc });\n }\n return this.parseClass(\n this.maybeTakeDecorators(\n this.parseDecorators(false),\n this.startNode<N.ClassDeclaration>(),\n ),\n true,\n true,\n );\n }\n\n if (this.match(tt._const) || this.match(tt._var) || this.isLet()) {\n throw this.raise(Errors.UnsupportedDefaultExport, {\n at: this.state.startLoc,\n });\n }\n\n const res = this.parseMaybeAssignAllowIn();\n this.semicolon();\n return res;\n }\n\n // https://tc39.es/ecma262/#prod-ExportDeclaration\n parseExportDeclaration(\n this: Parser,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n node: Undone<N.ExportNamedDeclaration>,\n ): N.Declaration | undefined | null {\n if (this.match(tt._class)) {\n const node = this.parseClass(\n this.startNode<N.ClassDeclaration>(),\n true,\n false,\n );\n return node;\n }\n return this.parseStatementListItem() as N.Declaration;\n }\n\n isExportDefaultSpecifier(): boolean {\n const { type } = this.state;\n if (tokenIsIdentifier(type)) {\n if ((type === tt._async && !this.state.containsEsc) || type === tt._let) {\n return false;\n }\n if (\n (type === tt._type || type === tt._interface) &&\n !this.state.containsEsc\n ) {\n const { type: nextType } = this.lookahead();\n // If we see any variable name other than `from` after `type` keyword,\n // we consider it as flow/typescript type exports\n // note that this approach may fail on some pedantic cases\n // export type from = number\n if (\n (tokenIsIdentifier(nextType) && nextType !== tt._from) ||\n nextType === tt.braceL\n ) {\n this.expectOnePlugin([\"flow\", \"typescript\"]);\n return false;\n }\n }\n } else if (!this.match(tt._default)) {\n return false;\n }\n\n const next = this.nextTokenStart();\n const hasFrom = this.isUnparsedContextual(next, \"from\");\n if (\n this.input.charCodeAt(next) === charCodes.comma ||\n (tokenIsIdentifier(this.state.type) && hasFrom)\n ) {\n return true;\n }\n // lookahead again when `export default from` is seen\n if (this.match(tt._default) && hasFrom) {\n const nextAfterFrom = this.input.charCodeAt(\n this.nextTokenStartSince(next + 4),\n );\n return (\n nextAfterFrom === charCodes.quotationMark ||\n nextAfterFrom === charCodes.apostrophe\n );\n }\n return false;\n }\n\n parseExportFrom(\n this: Parser,\n node: Undone<N.ExportNamedDeclaration>,\n expect?: boolean,\n ): void {\n if (this.eatContextual(tt._from)) {\n node.source = this.parseImportSource();\n this.checkExport(node);\n this.maybeParseImportAttributes(node);\n this.checkJSONModuleImport(node);\n } else if (expect) {\n this.unexpected();\n }\n\n this.semicolon();\n }\n\n shouldParseExportDeclaration(): boolean {\n const { type } = this.state;\n if (type === tt.at) {\n this.expectOnePlugin([\"decorators\", \"decorators-legacy\"]);\n if (this.hasPlugin(\"decorators\")) {\n if (\n this.getPluginOption(\"decorators\", \"decoratorsBeforeExport\") === true\n ) {\n this.raise(Errors.DecoratorBeforeExport, {\n at: this.state.startLoc,\n });\n }\n\n return true;\n }\n }\n\n return (\n type === tt._var ||\n type === tt._const ||\n type === tt._function ||\n type === tt._class ||\n this.isLet() ||\n this.isAsyncFunction()\n );\n }\n\n checkExport(\n node: Undone<N.ExportNamedDeclaration | N.ExportDefaultDeclaration>,\n checkNames?: boolean,\n isDefault?: boolean,\n isFrom?: boolean,\n ): void {\n if (checkNames) {\n // Check for duplicate exports\n if (isDefault) {\n // Default exports\n this.checkDuplicateExports(node, \"default\");\n if (this.hasPlugin(\"exportDefaultFrom\")) {\n const declaration = (node as any as N.ExportDefaultDeclaration)\n .declaration;\n if (\n declaration.type === \"Identifier\" &&\n declaration.name === \"from\" &&\n declaration.end - declaration.start === 4 && // does not contain escape\n !declaration.extra?.parenthesized\n ) {\n this.raise(Errors.ExportDefaultFromAsIdentifier, {\n at: declaration,\n });\n }\n }\n // @ts-expect-error node.specifiers may not exist\n } else if (node.specifiers?.length) {\n // Named exports\n // @ts-expect-error node.specifiers may not exist\n for (const specifier of node.specifiers) {\n const { exported } = specifier;\n const exportName =\n exported.type === \"Identifier\" ? exported.name : exported.value;\n this.checkDuplicateExports(specifier, exportName);\n if (!isFrom && specifier.local) {\n const { local } = specifier;\n if (local.type !== \"Identifier\") {\n this.raise(Errors.ExportBindingIsString, {\n at: specifier,\n localName: local.value,\n exportName,\n });\n } else {\n // check for keywords used as local names\n this.checkReservedWord(local.name, local.loc.start, true, false);\n // check if export is defined\n this.scope.checkLocalExport(local);\n }\n }\n }\n } else if (node.declaration) {\n // Exported declarations\n if (\n node.declaration.type === \"FunctionDeclaration\" ||\n node.declaration.type === \"ClassDeclaration\"\n ) {\n const id = node.declaration.id;\n if (!id) throw new Error(\"Assertion failure\");\n\n this.checkDuplicateExports(node, id.name);\n } else if (node.declaration.type === \"VariableDeclaration\") {\n for (const declaration of node.declaration.declarations) {\n this.checkDeclaration(declaration.id);\n }\n }\n }\n }\n }\n\n checkDeclaration(node: N.Pattern | N.ObjectProperty): void {\n if (node.type === \"Identifier\") {\n this.checkDuplicateExports(node, node.name);\n } else if (node.type === \"ObjectPattern\") {\n for (const prop of node.properties) {\n this.checkDeclaration(prop);\n }\n } else if (node.type === \"ArrayPattern\") {\n for (const elem of node.elements) {\n if (elem) {\n this.checkDeclaration(elem);\n }\n }\n } else if (node.type === \"ObjectProperty\") {\n // @ts-expect-error migrate to Babel types\n this.checkDeclaration(node.value);\n } else if (node.type === \"RestElement\") {\n this.checkDeclaration(node.argument);\n } else if (node.type === \"AssignmentPattern\") {\n this.checkDeclaration(node.left);\n }\n }\n\n checkDuplicateExports(\n node: Undone<\n | N.Identifier\n | N.StringLiteral\n | N.ExportNamedDeclaration\n | N.ExportSpecifier\n | N.ExportDefaultSpecifier\n >,\n exportName: string,\n ): void {\n if (this.exportedIdentifiers.has(exportName)) {\n if (exportName === \"default\") {\n this.raise(Errors.DuplicateDefaultExport, { at: node });\n } else {\n this.raise(Errors.DuplicateExport, { at: node, exportName });\n }\n }\n this.exportedIdentifiers.add(exportName);\n }\n\n // Parses a comma-separated list of module exports.\n\n parseExportSpecifiers(isInTypeExport: boolean): Array<N.ExportSpecifier> {\n const nodes = [];\n let first = true;\n\n // export { x, y as z } [from '...']\n this.expect(tt.braceL);\n\n while (!this.eat(tt.braceR)) {\n if (first) {\n first = false;\n } else {\n this.expect(tt.comma);\n if (this.eat(tt.braceR)) break;\n }\n const isMaybeTypeOnly = this.isContextual(tt._type);\n const isString = this.match(tt.string);\n const node = this.startNode();\n node.local = this.parseModuleExportName();\n nodes.push(\n this.parseExportSpecifier(\n node,\n isString,\n isInTypeExport,\n isMaybeTypeOnly,\n ),\n );\n }\n\n return nodes;\n }\n\n parseExportSpecifier(\n node: any,\n isString: boolean,\n /* eslint-disable @typescript-eslint/no-unused-vars -- used in TypeScript parser */\n isInTypeExport: boolean,\n isMaybeTypeOnly: boolean,\n /* eslint-enable @typescript-eslint/no-unused-vars */\n ): N.ExportSpecifier {\n if (this.eatContextual(tt._as)) {\n node.exported = this.parseModuleExportName();\n } else if (isString) {\n node.exported = cloneStringLiteral(node.local);\n } else if (!node.exported) {\n node.exported = cloneIdentifier(node.local);\n }\n return this.finishNode<N.ExportSpecifier>(node, \"ExportSpecifier\");\n }\n\n // https://tc39.es/ecma262/#prod-ModuleExportName\n parseModuleExportName(): N.StringLiteral | N.Identifier {\n if (this.match(tt.string)) {\n const result = this.parseStringLiteral(this.state.value);\n const surrogate = result.value.match(loneSurrogate);\n if (surrogate) {\n this.raise(Errors.ModuleExportNameHasLoneSurrogate, {\n at: result,\n surrogateCharCode: surrogate[0].charCodeAt(0),\n });\n }\n return result;\n }\n return this.parseIdentifier(true);\n }\n\n isJSONModuleImport(\n node: Undone<\n N.ExportAllDeclaration | N.ExportNamedDeclaration | N.ImportDeclaration\n >,\n ): boolean {\n if (node.assertions != null) {\n return node.assertions.some(({ key, value }) => {\n return (\n value.value === \"json\" &&\n (key.type === \"Identifier\"\n ? key.name === \"type\"\n : key.value === \"type\")\n );\n });\n }\n return false;\n }\n\n checkImportReflection(node: Undone<N.ImportDeclaration>) {\n const { specifiers } = node;\n const singleBindingType =\n specifiers.length === 1 ? specifiers[0].type : null;\n\n if (node.phase === \"source\") {\n if (singleBindingType !== \"ImportDefaultSpecifier\") {\n this.raise(Errors.SourcePhaseImportRequiresDefault, {\n at: specifiers[0].loc.start,\n });\n }\n } else if (node.phase === \"defer\") {\n if (singleBindingType !== \"ImportNamespaceSpecifier\") {\n this.raise(Errors.DeferImportRequiresNamespace, {\n at: specifiers[0].loc.start,\n });\n }\n } else if (node.module) {\n if (singleBindingType !== \"ImportDefaultSpecifier\") {\n this.raise(Errors.ImportReflectionNotBinding, {\n at: specifiers[0].loc.start,\n });\n }\n if (node.assertions?.length > 0) {\n this.raise(Errors.ImportReflectionHasAssertion, {\n at: node.specifiers[0].loc.start,\n });\n }\n }\n }\n\n checkJSONModuleImport(\n node: Undone<\n N.ExportAllDeclaration | N.ExportNamedDeclaration | N.ImportDeclaration\n >,\n ) {\n // @ts-expect-error Fixme: node.type must be undefined because they are undone\n if (this.isJSONModuleImport(node) && node.type !== \"ExportAllDeclaration\") {\n // @ts-expect-error specifiers may not index node\n const { specifiers } = node;\n if (specifiers != null) {\n // @ts-expect-error refine specifier types\n const nonDefaultNamedSpecifier = specifiers.find(specifier => {\n let imported;\n if (specifier.type === \"ExportSpecifier\") {\n imported = specifier.local;\n } else if (specifier.type === \"ImportSpecifier\") {\n imported = specifier.imported;\n }\n if (imported !== undefined) {\n return imported.type === \"Identifier\"\n ? imported.name !== \"default\"\n : imported.value !== \"default\";\n }\n });\n if (nonDefaultNamedSpecifier !== undefined) {\n this.raise(Errors.ImportJSONBindingNotDefault, {\n at: nonDefaultNamedSpecifier.loc.start,\n });\n }\n }\n }\n }\n\n isPotentialImportPhase(isExport: boolean): boolean {\n if (isExport) return false;\n return (\n this.isContextual(tt._source) ||\n this.isContextual(tt._defer) ||\n this.isContextual(tt._module)\n );\n }\n\n applyImportPhase(\n node: Undone<N.ImportDeclaration | N.ExportNamedDeclaration>,\n isExport: boolean,\n phase: string | null,\n loc?: Position,\n ): void {\n if (isExport) {\n if (!process.env.IS_PUBLISH) {\n if (phase === \"module\" || phase === \"source\") {\n throw new Error(\n `Assertion failure: export declarations do not support the '${phase}' phase.`,\n );\n }\n }\n return;\n }\n\n if (phase === \"module\") {\n this.expectPlugin(\"importReflection\", loc);\n (node as N.ImportDeclaration).module = true;\n } else if (this.hasPlugin(\"importReflection\")) {\n (node as N.ImportDeclaration).module = false;\n }\n\n if (phase === \"source\") {\n this.expectPlugin(\"sourcePhaseImports\", loc);\n (node as N.ImportDeclaration).phase = \"source\";\n } else if (phase === \"defer\") {\n this.expectPlugin(\"deferredImportEvaluation\", loc);\n (node as N.ImportDeclaration).phase = \"defer\";\n } else if (this.hasPlugin(\"sourcePhaseImports\")) {\n (node as N.ImportDeclaration).phase = null;\n }\n }\n\n /*\n * Parse `module` in `import module x from \"x\"`, disambiguating\n * `import module from \"x\"` and `import module from from \"x\"`.\n *\n * This function might return an identifier representing the `module`\n * if it eats `module` and then discovers that it was the default import\n * binding and not the import reflection.\n *\n * This function is also used to parse `import type` and `import typeof`\n * in the TS and Flow plugins.\n *\n * Note: the proposal has been updated to use `source` instead of `module`,\n * but it has not been implemented yet.\n */\n parseMaybeImportPhase(\n node: Undone<N.ImportDeclaration | N.TsImportEqualsDeclaration>,\n isExport: boolean,\n ): N.Identifier | null {\n if (!this.isPotentialImportPhase(isExport)) {\n this.applyImportPhase(\n node as Undone<N.ImportDeclaration>,\n isExport,\n null,\n );\n return null;\n }\n\n const phaseIdentifier = this.parseIdentifier(true);\n\n const { type } = this.state;\n const isImportPhase = tokenIsKeywordOrIdentifier(type)\n ? // OK: import <phase> x from \"foo\";\n // OK: import <phase> from from \"foo\";\n // NO: import <phase> from \"foo\";\n // NO: import <phase> from 'foo';\n // With the module declarations proposals, we will need further disambiguation\n // for `import module from from;`.\n type !== tt._from || this.lookaheadCharCode() === charCodes.lowercaseF\n : // OK: import <phase> { x } from \"foo\";\n // OK: import <phase> x from \"foo\";\n // OK: import <phase> * as T from \"foo\";\n // NO: import <phase> from \"foo\";\n // OK: import <phase> \"foo\";\n // The last one is invalid, we will continue parsing and throw\n // an error later\n type !== tt.comma;\n\n if (isImportPhase) {\n this.resetPreviousIdentifierLeadingComments(phaseIdentifier);\n this.applyImportPhase(\n node as Undone<N.ImportDeclaration>,\n isExport,\n phaseIdentifier.name,\n phaseIdentifier.loc.start,\n );\n return null;\n } else {\n this.applyImportPhase(\n node as Undone<N.ImportDeclaration>,\n isExport,\n null,\n );\n // `<phase>` is a default binding, return it to the main import declaration parser\n return phaseIdentifier;\n }\n }\n\n isPrecedingIdImportPhase(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n phase: string,\n ) {\n const { type } = this.state;\n return tokenIsIdentifier(type)\n ? // OK: import <phase> x from \"foo\";\n // OK: import <phase> from from \"foo\";\n // NO: import <phase> from \"foo\";\n // NO: import <phase> from 'foo';\n // With the module declarations proposals, we will need further disambiguation\n // for `import module from from;`.\n type !== tt._from || this.lookaheadCharCode() === charCodes.lowercaseF\n : // OK: import <phase> { x } from \"foo\";\n // OK: import <phase> x from \"foo\";\n // OK: import <phase> * as T from \"foo\";\n // NO: import <phase> from \"foo\";\n // OK: import <phase> \"foo\";\n // The last one is invalid, we will continue parsing and throw\n // an error later\n type !== tt.comma;\n }\n\n // Parses import declaration.\n // https://tc39.es/ecma262/#prod-ImportDeclaration\n\n parseImport(this: Parser, node: Undone<N.ImportDeclaration>): N.AnyImport {\n if (this.match(tt.string)) {\n // import '...'\n return this.parseImportSourceAndAttributes(node);\n }\n\n return this.parseImportSpecifiersAndAfter(\n node,\n this.parseMaybeImportPhase(node, /* isExport */ false),\n );\n }\n\n parseImportSpecifiersAndAfter(\n this: Parser,\n node: Undone<N.ImportDeclaration>,\n maybeDefaultIdentifier: N.Identifier | null,\n ): N.AnyImport {\n node.specifiers = [];\n\n // check if we have a default import like\n // import React from \"react\";\n const hasDefault = this.maybeParseDefaultImportSpecifier(\n node,\n maybeDefaultIdentifier,\n );\n /* we are checking if we do not have a default import, then it is obvious that we need named imports\n * import { get } from \"axios\";\n * but if we do have a default import\n * we need to check if we have a comma after that and\n * that is where this `|| this.eat` condition comes into play\n */\n const parseNext = !hasDefault || this.eat(tt.comma);\n // if we do have to parse the next set of specifiers, we first check for star imports\n // import React, * from \"react\";\n const hasStar = parseNext && this.maybeParseStarImportSpecifier(node);\n // now we check if we need to parse the next imports\n // but only if they are not importing * (everything)\n if (parseNext && !hasStar) this.parseNamedImportSpecifiers(node);\n this.expectContextual(tt._from);\n\n return this.parseImportSourceAndAttributes(node);\n }\n\n parseImportSourceAndAttributes(\n this: Parser,\n node: Undone<N.ImportDeclaration>,\n ): N.AnyImport {\n node.specifiers ??= [];\n node.source = this.parseImportSource();\n this.maybeParseImportAttributes(node);\n this.checkImportReflection(node);\n this.checkJSONModuleImport(node);\n\n this.semicolon();\n return this.finishNode(node, \"ImportDeclaration\");\n }\n\n parseImportSource(this: Parser): N.StringLiteral {\n if (!this.match(tt.string)) this.unexpected();\n return this.parseExprAtom() as N.StringLiteral;\n }\n\n parseImportSpecifierLocal<\n T extends\n | N.ImportSpecifier\n | N.ImportDefaultSpecifier\n | N.ImportNamespaceSpecifier,\n >(\n node: Undone<N.ImportDeclaration>,\n specifier: Undone<T>,\n type: T[\"type\"],\n ): void {\n specifier.local = this.parseIdentifier();\n node.specifiers.push(this.finishImportSpecifier(specifier, type));\n }\n\n finishImportSpecifier<\n T extends\n | N.ImportSpecifier\n | N.ImportDefaultSpecifier\n | N.ImportNamespaceSpecifier,\n >(\n specifier: Undone<T>,\n type: T[\"type\"],\n bindingType: BindingTypes = BindingFlag.TYPE_LEXICAL,\n ) {\n this.checkLVal(specifier.local, {\n in: { type },\n binding: bindingType,\n });\n return this.finishNode(specifier, type);\n }\n\n /**\n * parse assert entries\n *\n * @see {@link https://tc39.es/proposal-import-attributes/#prod-WithEntries WithEntries}\n */\n parseImportAttributes(): N.ImportAttribute[] {\n this.expect(tt.braceL);\n\n const attrs = [];\n const attrNames = new Set();\n\n do {\n if (this.match(tt.braceR)) {\n break;\n }\n\n const node = this.startNode<N.ImportAttribute>();\n\n // parse AssertionKey : IdentifierName, StringLiteral\n const keyName = this.state.value;\n // check if we already have an entry for an attribute\n // if a duplicate entry is found, throw an error\n // for now this logic will come into play only when someone declares `type` twice\n if (attrNames.has(keyName)) {\n this.raise(Errors.ModuleAttributesWithDuplicateKeys, {\n at: this.state.startLoc,\n key: keyName,\n });\n }\n attrNames.add(keyName);\n if (this.match(tt.string)) {\n node.key = this.parseStringLiteral(keyName);\n } else {\n node.key = this.parseIdentifier(true);\n }\n this.expect(tt.colon);\n\n if (!this.match(tt.string)) {\n throw this.raise(Errors.ModuleAttributeInvalidValue, {\n at: this.state.startLoc,\n });\n }\n node.value = this.parseStringLiteral(this.state.value);\n attrs.push(this.finishNode(node, \"ImportAttribute\"));\n } while (this.eat(tt.comma));\n\n this.expect(tt.braceR);\n\n return attrs;\n }\n\n /**\n * parse module attributes\n * @deprecated It will be removed in Babel 8\n */\n parseModuleAttributes() {\n const attrs: N.ImportAttribute[] = [];\n const attributes = new Set();\n do {\n const node = this.startNode<N.ImportAttribute>();\n node.key = this.parseIdentifier(true);\n\n if (node.key.name !== \"type\") {\n this.raise(Errors.ModuleAttributeDifferentFromType, {\n at: node.key,\n });\n }\n\n if (attributes.has(node.key.name)) {\n this.raise(Errors.ModuleAttributesWithDuplicateKeys, {\n at: node.key,\n key: node.key.name,\n });\n }\n attributes.add(node.key.name);\n this.expect(tt.colon);\n if (!this.match(tt.string)) {\n throw this.raise(Errors.ModuleAttributeInvalidValue, {\n at: this.state.startLoc,\n });\n }\n node.value = this.parseStringLiteral(this.state.value);\n attrs.push(this.finishNode(node, \"ImportAttribute\"));\n } while (this.eat(tt.comma));\n\n return attrs;\n }\n\n maybeParseImportAttributes(\n node: Undone<N.ImportDeclaration | N.ExportNamedDeclaration>,\n ) {\n let attributes: N.ImportAttribute[];\n let useWith = false;\n\n // https://tc39.es/proposal-import-attributes/#prod-WithClause\n if (this.match(tt._with)) {\n if (\n this.hasPrecedingLineBreak() &&\n this.lookaheadCharCode() === charCodes.leftParenthesis\n ) {\n // This will be parsed as a with statement, and we will throw a\n // better error about it not being supported in strict mode.\n return;\n }\n\n this.next(); // eat `with`\n\n if (!process.env.BABEL_8_BREAKING) {\n if (this.hasPlugin(\"moduleAttributes\")) {\n attributes = this.parseModuleAttributes();\n } else {\n this.expectImportAttributesPlugin();\n attributes = this.parseImportAttributes();\n }\n } else {\n this.expectImportAttributesPlugin();\n attributes = this.parseImportAttributes();\n }\n useWith = true;\n } else if (this.isContextual(tt._assert) && !this.hasPrecedingLineBreak()) {\n if (this.hasPlugin(\"importAttributes\")) {\n if (\n this.getPluginOption(\"importAttributes\", \"deprecatedAssertSyntax\") !==\n true\n ) {\n this.raise(Errors.ImportAttributesUseAssert, {\n at: this.state.startLoc,\n });\n }\n this.addExtra(node, \"deprecatedAssertSyntax\", true);\n } else {\n this.expectOnePlugin([\"importAttributes\", \"importAssertions\"]);\n }\n this.next(); // eat `assert`\n attributes = this.parseImportAttributes();\n } else if (\n this.hasPlugin(\"importAttributes\") ||\n this.hasPlugin(\"importAssertions\")\n ) {\n attributes = [];\n } else if (!process.env.BABEL_8_BREAKING) {\n if (this.hasPlugin(\"moduleAttributes\")) {\n attributes = [];\n } else return;\n } else return;\n\n if (!useWith && this.hasPlugin(\"importAssertions\")) {\n node.assertions = attributes;\n } else {\n node.attributes = attributes;\n }\n }\n\n maybeParseDefaultImportSpecifier(\n node: Undone<N.ImportDeclaration>,\n maybeDefaultIdentifier: N.Identifier | null,\n ): boolean {\n // import defaultObj, { x, y as z } from '...'\n if (maybeDefaultIdentifier) {\n const specifier = this.startNodeAtNode<N.ImportDefaultSpecifier>(\n maybeDefaultIdentifier,\n );\n specifier.local = maybeDefaultIdentifier;\n node.specifiers.push(\n this.finishImportSpecifier(specifier, \"ImportDefaultSpecifier\"),\n );\n return true;\n } else if (\n // We allow keywords, and parseImportSpecifierLocal will report a recoverable error\n tokenIsKeywordOrIdentifier(this.state.type)\n ) {\n this.parseImportSpecifierLocal(\n node,\n this.startNode<N.ImportDefaultSpecifier>(),\n \"ImportDefaultSpecifier\",\n );\n return true;\n }\n return false;\n }\n\n maybeParseStarImportSpecifier(node: Undone<N.ImportDeclaration>): boolean {\n if (this.match(tt.star)) {\n const specifier = this.startNode<N.ImportNamespaceSpecifier>();\n this.next();\n this.expectContextual(tt._as);\n\n this.parseImportSpecifierLocal(\n node,\n specifier,\n \"ImportNamespaceSpecifier\",\n );\n return true;\n }\n return false;\n }\n\n parseNamedImportSpecifiers(node: Undone<N.ImportDeclaration>) {\n let first = true;\n this.expect(tt.braceL);\n while (!this.eat(tt.braceR)) {\n if (first) {\n first = false;\n } else {\n // Detect an attempt to deep destructure\n if (this.eat(tt.colon)) {\n throw this.raise(Errors.DestructureNamedImport, {\n at: this.state.startLoc,\n });\n }\n\n this.expect(tt.comma);\n if (this.eat(tt.braceR)) break;\n }\n\n const specifier = this.startNode<N.ImportSpecifier>();\n const importedIsString = this.match(tt.string);\n const isMaybeTypeOnly = this.isContextual(tt._type);\n specifier.imported = this.parseModuleExportName();\n const importSpecifier = this.parseImportSpecifier(\n specifier,\n importedIsString,\n node.importKind === \"type\" || node.importKind === \"typeof\",\n isMaybeTypeOnly,\n undefined,\n );\n node.specifiers.push(importSpecifier);\n }\n }\n\n // https://tc39.es/ecma262/#prod-ImportSpecifier\n parseImportSpecifier(\n specifier: Undone<N.ImportSpecifier>,\n importedIsString: boolean,\n /* eslint-disable @typescript-eslint/no-unused-vars -- used in TypeScript and Flow parser */\n isInTypeOnlyImport: boolean,\n isMaybeTypeOnly: boolean,\n bindingType: BindingTypes | undefined,\n /* eslint-enable @typescript-eslint/no-unused-vars */\n ): N.ImportSpecifier {\n if (this.eatContextual(tt._as)) {\n specifier.local = this.parseIdentifier();\n } else {\n const { imported } = specifier;\n if (importedIsString) {\n throw this.raise(Errors.ImportBindingIsString, {\n at: specifier,\n importName: (imported as N.StringLiteral).value,\n });\n }\n this.checkReservedWord(\n (imported as N.Identifier).name,\n specifier.loc.start,\n true,\n true,\n );\n if (!specifier.local) {\n specifier.local = cloneIdentifier(imported);\n }\n }\n return this.finishImportSpecifier(\n specifier,\n \"ImportSpecifier\",\n bindingType,\n );\n }\n\n // This is used in flow and typescript plugin\n // Determine whether a parameter is a this param\n isThisParam(\n param: N.Pattern | N.Identifier | N.TSParameterProperty,\n ): boolean {\n return param.type === \"Identifier\" && param.name === \"this\";\n }\n}\n","import type { Options } from \"../options.ts\";\nimport type * as N from \"../types.ts\";\nimport type { PluginList } from \"../plugin-utils.ts\";\nimport { getOptions } from \"../options.ts\";\nimport StatementParser from \"./statement.ts\";\nimport ScopeHandler from \"../util/scope.ts\";\n\nexport type PluginsMap = Map<\n string,\n {\n [x: string]: any;\n }\n>;\n\nexport default class Parser extends StatementParser {\n // Forward-declaration so typescript plugin can override jsx plugin\n // todo(flow->ts) - this probably can be removed\n // abstract jsxParseOpeningElementAfterName(\n // node: N.JSXOpeningElement,\n // ): N.JSXOpeningElement;\n\n constructor(options: Options | undefined | null, input: string) {\n options = getOptions(options);\n super(options, input);\n\n this.options = options;\n this.initializeScopes();\n this.plugins = pluginsMap(this.options.plugins);\n this.filename = options.sourceFilename;\n }\n\n // This can be overwritten, for example, by the TypeScript plugin.\n getScopeHandler(): {\n new (...args: any): ScopeHandler;\n } {\n return ScopeHandler;\n }\n\n parse(): N.File {\n this.enterInitialScopes();\n const file = this.startNode() as N.File;\n const program = this.startNode() as N.Program;\n this.nextToken();\n file.errors = null;\n this.parseTopLevel(file, program);\n file.errors = this.state.errors;\n return file;\n }\n}\n\nfunction pluginsMap(plugins: PluginList): PluginsMap {\n const pluginMap: PluginsMap = new Map();\n for (const plugin of plugins) {\n const [name, options] = Array.isArray(plugin) ? plugin : [plugin, {}];\n if (!pluginMap.has(name)) pluginMap.set(name, options || {});\n }\n return pluginMap;\n}\n","import type { Options } from \"./options.ts\";\nimport {\n hasPlugin,\n validatePlugins,\n mixinPluginNames,\n mixinPlugins,\n type PluginList,\n} from \"./plugin-utils.ts\";\nimport type {\n PluginConfig as ParserPlugin,\n FlowPluginOptions,\n RecordAndTuplePluginOptions,\n PipelineOperatorPluginOptions,\n} from \"./typings.ts\";\nimport Parser from \"./parser/index.ts\";\n\nimport type { ExportedTokenType } from \"./tokenizer/types.ts\";\nimport {\n getExportedToken,\n tt as internalTokenTypes,\n type InternalTokenTypes,\n} from \"./tokenizer/types.ts\";\n\nimport type { Expression, File } from \"./types.ts\";\n\nexport function parse(input: string, options?: Options): File {\n if (options?.sourceType === \"unambiguous\") {\n options = {\n ...options,\n };\n try {\n options.sourceType = \"module\";\n const parser = getParser(options, input);\n const ast = parser.parse();\n\n if (parser.sawUnambiguousESM) {\n return ast;\n }\n\n if (parser.ambiguousScriptDifferentAst) {\n // Top level await introduces code which can be both a valid script and\n // a valid module, but which produces different ASTs:\n // await\n // 0\n // can be parsed either as an AwaitExpression, or as two ExpressionStatements.\n try {\n options.sourceType = \"script\";\n return getParser(options, input).parse();\n } catch {}\n } else {\n // This is both a valid module and a valid script, but\n // we parse it as a script by default\n ast.program.sourceType = \"script\";\n }\n\n return ast;\n } catch (moduleError) {\n try {\n options.sourceType = \"script\";\n return getParser(options, input).parse();\n } catch {}\n\n throw moduleError;\n }\n } else {\n return getParser(options, input).parse();\n }\n}\n\nexport function parseExpression(input: string, options?: Options): Expression {\n const parser = getParser(options, input);\n if (parser.options.strictMode) {\n parser.state.strict = true;\n }\n return parser.getExpression();\n}\n\nfunction generateExportedTokenTypes(\n internalTokenTypes: InternalTokenTypes,\n): Record<string, ExportedTokenType> {\n const tokenTypes: Record<string, ExportedTokenType> = {};\n for (const typeName of Object.keys(\n internalTokenTypes,\n ) as (keyof InternalTokenTypes)[]) {\n tokenTypes[typeName] = getExportedToken(internalTokenTypes[typeName]);\n }\n return tokenTypes;\n}\n\nexport const tokTypes = generateExportedTokenTypes(internalTokenTypes);\n\nfunction getParser(options: Options | undefined | null, input: string): Parser {\n let cls = Parser;\n if (options?.plugins) {\n validatePlugins(options.plugins);\n cls = getParserClass(options.plugins);\n }\n\n return new cls(options, input);\n}\n\nconst parserClassCache: { [key: string]: { new (...args: any): Parser } } = {};\n\n/** Get a Parser class with plugins applied. */\nfunction getParserClass(pluginsFromOptions: PluginList): {\n new (...args: any): Parser;\n} {\n const pluginList = mixinPluginNames.filter(name =>\n hasPlugin(pluginsFromOptions, name),\n );\n\n const key = pluginList.join(\"/\");\n let cls = parserClassCache[key];\n if (!cls) {\n cls = Parser;\n for (const plugin of pluginList) {\n // @ts-expect-error todo(flow->ts)\n cls = mixinPlugins[plugin](cls);\n }\n parserClassCache[key] = cls;\n }\n return cls;\n}\n\nexport type {\n FlowPluginOptions,\n ParserPlugin,\n PipelineOperatorPluginOptions,\n RecordAndTuplePluginOptions,\n};\nexport type ParserOptions = Partial<Options>;\n"],"names":["Position","constructor","line","col","index","column","SourceLocation","start","end","filename","identifierName","createPositionWithColumnOffset","position","columnOffset","code","ModuleErrors","ImportMetaOutsideModule","message","ImportOutsideModule","NodeDescriptions","ArrayPattern","AssignmentExpression","AssignmentPattern","ArrowFunctionExpression","ConditionalExpression","CatchClause","ForOfStatement","ForInStatement","ForStatement","FormalParameters","Identifier","ImportSpecifier","ImportDefaultSpecifier","ImportNamespaceSpecifier","ObjectPattern","ParenthesizedExpression","RestElement","UpdateExpression","true","false","VariableDeclarator","YieldExpression","toNodeDescription","type","prefix","String","StandardErrors","AccessorIsGenerator","kind","ArgumentsInClass","AsyncFunctionInSingleStatementContext","AwaitBindingIdentifier","AwaitBindingIdentifierInStaticBlock","AwaitExpressionFormalParameter","AwaitUsingNotInAsyncContext","AwaitNotInAsyncContext","AwaitNotInAsyncFunction","BadGetterArity","BadSetterArity","BadSetterRestParameter","ConstructorClassField","ConstructorClassPrivateField","ConstructorIsAccessor","ConstructorIsAsync","ConstructorIsGenerator","DeclarationMissingInitializer","DecoratorArgumentsOutsideParentheses","DecoratorBeforeExport","DecoratorsBeforeAfterExport","DecoratorConstructor","DecoratorExportClass","DecoratorSemicolon","DecoratorStaticBlock","DeferImportRequiresNamespace","DeletePrivateField","DestructureNamedImport","DuplicateConstructor","DuplicateDefaultExport","DuplicateExport","exportName","DuplicateProto","DuplicateRegExpFlags","DynamicImportPhaseRequiresImportExpressions","phase","ElementAfterRest","EscapedCharNotAnIdentifier","ExportBindingIsString","localName","ExportDefaultFromAsIdentifier","ForInOfLoopInitializer","ForInUsing","ForOfAsync","ForOfLet","GeneratorInSingleStatementContext","IllegalBreakContinue","IllegalLanguageModeDirective","IllegalReturn","ImportAttributesUseAssert","ImportBindingIsString","importName","ImportCallArgumentTrailingComma","ImportCallArity","maxArgumentCount","ImportCallNotNewExpression","ImportCallSpreadArgument","ImportJSONBindingNotDefault","ImportReflectionHasAssertion","ImportReflectionNotBinding","IncompatibleRegExpUVFlags","InvalidBigIntLiteral","InvalidCodePoint","InvalidCoverInitializedName","InvalidDecimal","InvalidDigit","radix","InvalidEscapeSequence","InvalidEscapeSequenceTemplate","InvalidEscapedReservedWord","reservedWord","InvalidIdentifier","InvalidLhs","ancestor","InvalidLhsBinding","InvalidLhsOptionalChaining","InvalidNumber","InvalidOrMissingExponent","InvalidOrUnexpectedToken","unexpected","InvalidParenthesizedAssignment","InvalidPrivateFieldResolution","InvalidPropertyBindingPattern","InvalidRecordProperty","InvalidRestAssignmentPattern","LabelRedeclaration","labelName","LetInLexicalBinding","LineTerminatorBeforeArrow","MalformedRegExpFlags","MissingClassName","MissingEqInAssignment","MissingSemicolon","MissingPlugin","missingPlugin","map","name","JSON","stringify","join","MissingOneOfPlugins","MissingUnicodeEscape","MixingCoalesceWithLogical","ModuleAttributeDifferentFromType","ModuleAttributeInvalidValue","ModuleAttributesWithDuplicateKeys","key","ModuleExportNameHasLoneSurrogate","surrogateCharCode","toString","ModuleExportUndefined","MultipleDefaultsInSwitch","NewlineAfterThrow","NoCatchOrFinally","NumberIdentifier","NumericSeparatorInEscapeSequence","ObsoleteAwaitStar","OptionalChainingNoNew","OptionalChainingNoTemplate","OverrideOnConstructor","ParamDupe","PatternHasAccessor","PatternHasMethod","PrivateInExpectedIn","PrivateNameRedeclaration","RecordExpressionBarIncorrectEndSyntaxType","RecordExpressionBarIncorrectStartSyntaxType","RecordExpressionHashIncorrectStartSyntaxType","RecordNoProto","RestTrailingComma","SloppyFunction","SloppyFunctionAnnexB","SourcePhaseImportRequiresDefault","StaticPrototype","SuperNotAllowed","SuperPrivateField","TrailingDecorator","TupleExpressionBarIncorrectEndSyntaxType","TupleExpressionBarIncorrectStartSyntaxType","TupleExpressionHashIncorrectStartSyntaxType","UnexpectedArgumentPlaceholder","UnexpectedAwaitAfterPipelineBody","UnexpectedDigitAfterHash","UnexpectedImportExport","UnexpectedKeyword","keyword","UnexpectedLeadingDecorator","UnexpectedLexicalDeclaration","UnexpectedNewTarget","UnexpectedNumericSeparator","UnexpectedPrivateField","UnexpectedReservedWord","UnexpectedSuper","UnexpectedToken","expected","UnexpectedTokenUnaryExponentiation","UnexpectedUsingDeclaration","UnsupportedBind","UnsupportedDecoratorExport","UnsupportedDefaultExport","UnsupportedImport","UnsupportedMetaProperty","target","onlyValidPropertyName","UnsupportedParameterDecorator","UnsupportedPropertyDecorator","UnsupportedSuper","UnterminatedComment","UnterminatedRegExp","UnterminatedString","UnterminatedTemplate","UsingDeclarationHasBindingPattern","VarRedeclaration","YieldBindingIdentifier","YieldInParameter","ZeroDigitNumericSeparator","StrictModeErrors","StrictDelete","StrictEvalArguments","referenceName","StrictEvalArgumentsBinding","bindingName","StrictFunction","StrictNumericEscape","StrictOctalLiteral","StrictWith","UnparenthesizedPipeBodyDescriptions","Set","PipelineOperatorErrors","PipeBodyIsTighter","PipeTopicRequiresHackPipes","PipeTopicUnbound","PipeTopicUnconfiguredToken","token","PipeTopicUnused","PipeUnparenthesizedBody","PipelineBodyNoArrow","PipelineBodySequenceExpression","PipelineHeadSequenceExpression","PipelineTopicUnused","PrimaryTopicNotAllowed","PrimaryTopicRequiresSmartPipeline","defineHidden","obj","value","Object","defineProperty","enumerable","configurable","toParseErrorConstructor","_ref","toMessage","properties","_objectWithoutPropertiesLoose","_excluded","loc","details","error","SyntaxError","assign","pos","clone","overrides","_overrides$loc","get","set","writable","ParseErrorEnum","argument","syntaxPlugin","Array","isArray","parseErrorTemplates","ParseErrorConstructors","reasonCode","keys","template","_ref2","rest","_excluded2","Errors","toUnenumerable","object","toESTreeLocation","node","estree","superClass","ESTreeParserMixin","parse","file","options","tokens","parseRegExpLiteral","pattern","flags","regex","RegExp","e","estreeParseLiteral","parseBigIntLiteral","bigInt","BigInt","_unused","bigint","parseDecimalLiteral","decimal","parseLiteral","parseStringLiteral","parseNumericLiteral","parseNullLiteral","parseBooleanLiteral","directiveToStmt","directive","expression","raw","extra","expressionValue","stmt","rawValue","initFunction","isAsync","checkDeclaration","isObjectProperty","getObjectOrClassMethodParams","method","params","isValidDirective","_stmt$expression$extr","parenthesized","parseBlockBody","allowDirectives","topLevel","afterBlockParse","directiveStatements","directives","d","body","concat","pushClassMethod","classBody","isGenerator","isConstructor","allowsDirectSuper","parseMethod","typeParameters","push","parsePrivateName","getPluginOption","convertPrivateNameToPrivateIdentifier","getPrivateNameSV","id","isPrivateName","parseFunctionBody","allowExpression","isMethod","allowDirectSuper","inClassScope","funcNode","startNode","computed","finishNode","parseClassProperty","args","propertyNode","parseClassPrivateProperty","parseObjectMethod","prop","isPattern","isAccessor","shorthand","parseObjectProperty","startLoc","refExpressionErrors","isValidLVal","isUnparenthesizedInAssign","binding","isAssignable","isBinding","toAssignable","isLHS","classScope","usePrivateName","toAssignableObjectExpressionProp","isLast","raise","at","finishCallExpression","unfinished","optional","callee","source","arguments","hasPlugin","_node$arguments$","_node$arguments$2","attributes","toReferencedArguments","parseExport","decorators","exportStartLoc","state","lastTokStartLoc","exported","specifiers","length","_declaration$decorato","declaration","resetStartLocation","parseSubscript","base","noCalls","optionalChainMember","substring","stop","chain","startNodeAtNode","isOptionalMemberExpression","hasPropertyAsPrivateName","isObjectMethod","finishNodeAt","endLoc","resetEndLocation","lastTokEndLoc","TokContext","preserveSpace","types","brace","j_oTag","j_cTag","j_expr","beforeExpr","startsExpr","isLoop","isAssign","postfix","ExportedTokenType","label","conf","rightAssociative","binop","updateContext","keywords","Map","createKeyword","createToken","createBinop","tokenTypeCounter","tokenTypes","tokenLabels","tokenBinops","tokenBeforeExprs","tokenStartsExprs","tokenPrefixes","_options$binop","_options$beforeExpr","_options$startsExpr","_options$prefix","createKeywordLike","_options$binop2","_options$beforeExpr2","_options$startsExpr2","_options$prefix2","tt","bracketL","bracketHashL","bracketBarL","bracketR","bracketBarR","braceL","braceBarL","braceHashL","braceR","braceBarR","parenL","parenR","comma","semi","colon","doubleColon","dot","question","questionDot","arrow","ellipsis","backQuote","dollarBraceL","templateTail","templateNonTail","hash","interpreterDirective","eq","slashAssign","xorAssign","moduloAssign","incDec","bang","tilde","doubleCaret","doubleAt","pipeline","nullishCoalescing","logicalOR","logicalAND","bitwiseOR","bitwiseXOR","bitwiseAND","equality","lt","gt","relational","bitShift","bitShiftL","bitShiftR","plusMin","modulo","star","slash","exponent","_in","_instanceof","_break","_case","_catch","_continue","_debugger","_default","_else","_finally","_function","_if","_return","_switch","_throw","_try","_var","_const","_with","_new","_this","_super","_class","_extends","_export","_import","_null","_true","_false","_typeof","_void","_delete","_do","_for","_while","_as","_assert","_async","_await","_defer","_from","_get","_let","_meta","_of","_sent","_set","_source","_static","_using","_yield","_asserts","_checks","_exports","_global","_implements","_intrinsic","_infer","_is","_mixins","_proto","_require","_satisfies","_keyof","_readonly","_unique","_abstract","_declare","_enum","_module","_namespace","_interface","_type","_opaque","string","num","regexp","privateName","eof","jsxName","jsxText","jsxTagStart","jsxTagEnd","placeholder","tokenIsIdentifier","tokenKeywordOrIdentifierIsKeyword","tokenIsKeywordOrIdentifier","tokenIsLiteralPropertyName","tokenComesBeforeExpression","tokenCanStartExpression","tokenIsAssignment","tokenIsFlowInterfaceOrTypeOrOpaque","tokenIsLoop","tokenIsKeyword","tokenIsOperator","tokenIsPostfix","tokenIsPrefix","tokenIsTSTypeOperator","tokenIsTSDeclarationStart","tokenLabelName","tokenOperatorPrecedence","tokenIsRightAssociative","tokenIsTemplate","getExportedToken","context","pop","tc","nonASCIIidentifierStartChars","nonASCIIidentifierChars","nonASCIIidentifierStart","nonASCIIidentifier","astralIdentifierStartCodes","astralIdentifierCodes","isInAstralSet","i","isIdentifierStart","test","fromCharCode","isIdentifierChar","reservedWords","strict","strictBind","reservedWordsStrictSet","reservedWordsStrictBindSet","isReservedWord","word","inModule","isStrictReservedWord","has","isStrictBindOnlyReservedWord","isStrictBindReservedWord","isKeyword","isIteratorStart","current","next","next2","reservedWordLikeSet","canBeReservedWord","Scope","var","lexical","functions","ScopeHandler","parser","scopeStack","undefinedExports","inTopLevel","currentScope","inFunction","currentVarScopeFlags","allowSuper","currentThisScopeFlags","inClass","inClassAndNotInNonArrowFunction","inStaticBlock","ScopeFlag","inNonArrowFunction","treatFunctionsAsVar","treatFunctionsAsVarInScope","createScope","enter","exit","scope","declareName","bindingType","checkRedeclarationInScope","add","maybeExportDefined","delete","isRedeclaredInScope","values","checkLocalExport","topLevelScope","FlowScope","declareFunctions","FlowScopeHandler","BaseParser","sawUnambiguousESM","ambiguousScriptDifferentAst","pluginConfig","plugins","pluginName","pluginOptions","actualOptions","plugin","_this$plugins$get","setTrailingComments","comments","trailingComments","undefined","unshift","setLeadingComments","leadingComments","setInnerComments","innerComments","adjustInnerComments","elements","commentWS","lastElement","CommentsParser","addComment","comment","processComment","commentStack","commentStackLength","lastCommentWS","leadingNode","nodeStart","commentEnd","containingNode","finalizeComment","splice","trailingNode","commentStart","input","charCodeAt","finalizeRemainingComments","resetPreviousNodeTrailingComments","resetPreviousIdentifierLeadingComments","takeSurroundingComments","lineBreak","lineBreakG","isNewLine","skipWhiteSpace","skipWhiteSpaceInLine","skipWhiteSpaceToLineBreak","isWhitespace","State","curLine","lineStart","errors","potentialArrowAt","noArrowAt","noArrowParamsConversionAt","maybeInArrowParameters","inType","noAnonFunctionType","hasFlowComment","isAmbientContext","inAbstractClass","inDisallowConditionalTypesContext","topicContext","maxNumOfResolvableTopics","maxTopicIndex","soloAwait","inFSharpPipelineDirectBody","labels","lastTokStart","ct","canStartJSXElement","containsEsc","firstInvalidTemplateEscapePos","strictErrors","tokensLength","init","strictMode","sourceType","startLine","startColumn","curPosition","skipArrays","val","slice","isDigit","forbiddenNumericSeparatorSiblings","decBinOct","hex","isAllowedNumericSeparatorSibling","bin","ch","oct","dec","readStringContents","initialPos","initialLineStart","initialCurLine","out","firstInvalidLoc","chunkStart","unterminated","isStringEnd","res","readEscapedChar","str","containsInvalid","inTemplate","throwOnInvalid","readHexChar","readCodePoint","fromCodePoint","strictNumericEscape","startPos","match","octalStr","octal","parseInt","len","forceLen","n","readInt","invalidEscapeSequence","allowNumSeparator","bailOnError","forbiddenSiblings","isAllowedSibling","invalid","total","Infinity","prev","numericSeparatorInEscapeSequence","Number","isNaN","unexpectedNumericSeparator","_isDigit","invalidDigit","indexOf","invalidCodePoint","buildPosition","VALID_REGEX_FLAGS","Token","Tokenizer","isLookahead","errorHandlers_readInt","errorRecovery","errorBuilder","errorHandlers_readCodePoint","errorHandlers_readStringContents_string","recordStrictModeErrors","errorHandlers_readStringContents_template","pushToken","checkKeywordEscapes","nextToken","eat","createLookaheadState","curContext","lookahead","old","curr","nextTokenStart","nextTokenStartSince","lastIndex","lookaheadCharCode","nextTokenInLineStart","nextTokenInLineStartSince","lookaheadInLineCharCode","codePointAtPos","cp","trail","setStrict","forEach","toParseError","clear","skipSpace","finishToken","getTokenFromCode","skipBlockComment","skipLineComment","startSkip","spaceStart","loop","attachComment","annexB","commentWhitespace","prevType","replaceToken","readToken_numberSign","readToken_interpreter","nextPos","expectPlugin","readWord1","finishOp","readToken_dot","readNumber","readToken_slash","readToken_mult_modulo","width","readToken_pipe_amp","readToken_caret","proposal","topicToken","lookaheadCh","codePointAt","readToken_atSign","readToken_plus_min","readToken_lt","readToken_gt","size","readToken_eq_excl","readToken_question","readTemplateToken","readRadixNumber","readString","readWord","readRegexp","escaped","content","mods","char","includes","isBigInt","replace","startsWithDot","isFloat","isDecimal","hasExponent","isOctal","hasLeadingZero","integer","underscorePos","parseFloat","quote","readTemplateContinuation","opening","firstCode","escStart","identifierCheck","esc","keywordTypes","raiseProperties","raiseOverwrite","expectOnePlugin","pluginNames","some","ClassScope","privateNames","loneAccessors","undefinedPrivateNames","ClassScopeHandler","stack","oldClassScope","from","declarePrivateName","elementType","redefined","accessor","oldStatic","newStatic","oldKind","newKind","ExpressionScope","canBeArrowParameterDeclaration","isCertainlyParameterDeclaration","ArrowHeadParsingScope","declarationErrors","recordDeclarationError","ParsingErrorClass","clearDeclarationError","iterateErrors","iterator","ExpressionScopeHandler","recordParameterInitializerError","origin","recordArrowParameterBindingError","recordAsyncArrowParametersError","validateAsPattern","newParameterDeclarationScope","newArrowHeadScope","newAsyncArrowScope","newExpressionScope","PARAM","PARAM_YIELD","PARAM_AWAIT","PARAM_RETURN","PARAM_IN","ProductionParameterHandler","stacks","currentFlags","hasAwait","hasYield","hasReturn","hasIn","functionFlags","UtilParser","addExtra","isContextual","isUnparsedContextual","nameStart","nameEnd","nextCh","isLookaheadContextual","eatContextual","expectContextual","canInsertSemicolon","hasPrecedingLineBreak","hasFollowingLineBreak","isLineTerminator","semicolon","allowAsi","expect","tryParse","fn","oldState","abortSignal","failState","thrown","aborted","checkExpressionErrors","andThrow","shorthandAssignLoc","doubleProtoLoc","privateKeyLoc","optionalParametersLoc","hasErrors","isLiteralPropertyName","property","initializeScopes","oldLabels","oldExportedIdentifiers","exportedIdentifiers","oldInModule","oldScope","getScopeHandler","oldProdParam","prodParam","oldExpressionScope","expressionScope","enterInitialScopes","paramFlags","checkDestructuringPrivate","ExpressionErrors","Node","ranges","range","NodePrototype","prototype","__clone","newNode","clonePlaceholder","cloneIdentifier","cloned","create","expectedNode","cloneStringLiteral","NodeUtils","startNodeAt","resetStartLocationFromNode","locationNode","reservedTypes","FlowErrors","AmbiguousConditionalArrow","AmbiguousDeclareModuleKind","AssignReservedType","reservedType","DeclareClassElement","DeclareClassFieldInitializer","DuplicateDeclareModuleExports","EnumBooleanMemberNotInitialized","memberName","enumName","EnumDuplicateMemberName","EnumInconsistentMemberValues","EnumInvalidExplicitType","invalidEnumType","EnumInvalidExplicitTypeUnknownSupplied","EnumInvalidMemberInitializerPrimaryType","explicitType","EnumInvalidMemberInitializerSymbolType","EnumInvalidMemberInitializerUnknownType","EnumInvalidMemberName","suggestion","EnumNumberMemberNotInitialized","EnumStringMemberInconsistentlyInitialized","GetterMayNotHaveThisParam","ImportReflectionHasImportType","ImportTypeShorthandOnlyInPureImport","InexactInsideExact","InexactInsideNonObject","InexactVariance","InvalidNonTypeImportInDeclareModule","MissingTypeParamDefault","NestedDeclareModule","NestedFlowComment","PatternIsOptional","SetterMayNotHaveThisParam","SpreadVariance","ThisParamAnnotationRequired","ThisParamBannedInConstructor","ThisParamMayNotBeOptional","ThisParamMustBeFirst","ThisParamNoDefault","TypeBeforeInitializer","TypeCastInPattern","UnexpectedExplicitInexactInObject","UnexpectedReservedType","UnexpectedReservedUnderscore","UnexpectedSpaceBetweenModuloChecks","UnexpectedSpreadType","UnexpectedSubtractionOperand","UnexpectedTokenAfterTypeParameter","UnexpectedTypeParameterBeforeAsyncArrowFunction","UnsupportedDeclareExportKind","unsupportedExportKind","UnsupportedStatementInDeclareModule","UnterminatedFlowComment","isEsModuleType","bodyElement","hasTypeImportKind","importKind","exportSuggestions","const","let","interface","partition","list","list1","list2","FLOW_PRAGMA_REGEX","flow","FlowParserMixin","flowPragma","shouldParseTypes","shouldParseEnums","matches","exec","Error","flowParseTypeInitialiser","tok","oldInType","flowParseType","flowParsePredicate","moduloLoc","parseExpression","flowParseTypeAndPredicateInitialiser","predicate","flowParseDeclareClass","flowParseInterfaceish","flowParseDeclareFunction","parseIdentifier","typeNode","typeContainer","flowParseTypeParameterDeclaration","tmp","flowParseFunctionTypeParams","this","returnType","typeAnnotation","flowParseDeclare","insideModule","flowParseDeclareVariable","flowParseDeclareModuleExports","flowParseDeclareModule","flowParseDeclareTypeAlias","flowParseDeclareOpaqueType","flowParseDeclareInterface","flowParseDeclareExportDeclaration","flowParseTypeAnnotatableIdentifier","parseExprAtom","bodyNode","parseImport","hasModuleExport","default","isLet","exportKind","flowParseTypeAnnotation","finished","flowParseTypeAlias","flowParseOpaqueType","isClass","flowParseRestrictedIdentifier","extends","flowParseInterfaceExtends","implements","mixins","flowParseObjectType","allowStatic","allowExact","allowSpread","allowProto","allowInexact","flowParseQualifiedTypeIdentifier","flowParseTypeParameterInstantiation","flowParseInterface","checkNotUnderscore","checkReservedType","liberal","right","declare","supertype","impltype","flowParseTypeParameter","requireDefault","nodeStartLoc","variance","flowParseVariance","ident","bound","defaultRequired","typeParameter","oldNoAnonFunctionType","flowParseTypeParameterInstantiationCallOrNew","flowParseTypeOrImplicitInstantiation","flowParseInterfaceType","flowParseObjectPropertyKey","flowParseObjectTypeIndexer","isStatic","static","flowParseObjectTypeInternalSlot","flowParseObjectTypeMethodish","flowParseFunctionTypeParam","flowParseObjectTypeCallProperty","valueNode","callProperties","indexers","internalSlots","endDelim","exact","inexact","protoStartLoc","inexactStartLoc","propOrInexact","flowParseObjectTypeProperty","flowObjectTypeSemicolon","isInexactToken","proto","flowCheckGetterSetterParams","paramCount","_startLoc","node2","qualification","flowParseGenericType","flowParseTypeofType","flowParsePrimaryType","flowParseTupleType","first","lh","isThis","reinterpretTypeAsFunctionTypeParam","flowIdentToTypeAnnotation","isGroupedType","parseLiteralAtNode","createIdentifier","flowParsePostfixType","seenOptionalIndexedAccess","objectType","indexType","flowParsePrefixType","flowParseAnonFunctionWithoutParens","param","flowParseIntersectionType","flowParseUnionType","allowPrimitiveOverride","typeCastToParameter","allowExpressionBody","forwardNoArrowParamsConversionAt","parseFunctionBodyAndFinish","parseStatementLike","flowParseEnumDeclaration","parseExpressionStatement","expr","shouldParseExportDeclaration","isExportDefaultSpecifier","parseExportDefaultExpression","parseConditional","setOptionalParametersError","originalNoArrowAt","consequent","failed","tryParseConditionalConsequent","valid","getArrowLikeExpressions","alternate","parseMaybeAssign","parseMaybeAssignAllowIn","disallowInvalid","arrows","finishArrowValidation","every","_node$extra","toAssignableList","trailingCommaLoc","checkParams","result","parseParenItem","typeCastNode","assertModuleNodeAllowed","parseExportDeclaration","declarationNode","parseExportSpecifiers","parseExportFrom","eatExportStar","maybeParseExportNamespaceSpecifier","hasNamespace","parseClassId","isStatement","optionalId","parseClassMember","member","parseClassMemberFromModifier","isIterator","readIterator","fullWord","left","exprList","toReferencedList","isParenthesizedExpr","_expr$extra","parseArrayLike","close","canBePattern","isTuple","isParenthesized","isClassMethod","isClassProperty","isNonstaticConstructor","isThisParam","pushClassPrivateMethod","parseClassSuper","superTypeParameters","implemented","checkGetterSetterParams","parsePropertyNamePrefixOperator","parseObjPropValue","parseAssignableListItemTypes","parseMaybeDefault","checkImportReflection","module","parseImportSpecifierLocal","specifier","local","finishImportSpecifier","isPotentialImportPhase","isExport","applyImportPhase","parseImportSpecifier","importedIsString","isInTypeOnlyImport","isMaybeTypeOnly","firstIdent","imported","specifierTypeKind","as_ident","specifierIsTypeImport","checkReservedWord","parseBindingAtom","parseFunctionParams","parseVarId","decl","parseAsyncArrowFromCallExpression","call","shouldParseAsyncArrow","afterLeftParse","_jsx","jsx","currentContext","_jsx2","_jsx3","abort","_arrowExpression$extr","arrowExpression","maybeUnwrapTypeCastExpression","async","parseArrow","shouldParseArrow","setArrowFunctionParameters","allowDuplicates","isArrowFunction","strictModeChanged","parseParenAndDistinguishExpression","canBeArrow","parseSubscripts","parseCallExpressionArguments","parseAsyncArrowWithTypeParameters","subscriptState","isLookaheadToken_lt","typeArguments","parseNewCallee","targs","parseArrowExpression","parseTopLevel","program","fileNode","skipFlowComment","hasFlowCommentCompletion","commentSkip","shiftToFirstNonWhiteSpace","ch2","ch3","flowEnumErrorBooleanMemberNotInitialized","flowEnumErrorInvalidMemberInitializer","enumContext","flowEnumErrorNumberMemberNotInitialized","flowEnumErrorStringMemberInconsistentlyInitialized","flowEnumMemberInit","endOfInit","literal","flowEnumMemberRaw","flowEnumCheckExplicitTypeMismatch","expectedType","flowEnumMembers","seenNames","members","booleanMembers","numberMembers","stringMembers","defaultedMembers","hasUnknownMembers","memberNode","toUpperCase","flowEnumStringMembers","initializedMembers","flowEnumParseExplicitType","flowEnumBody","nameLoc","empty","boolsLen","numsLen","strsLen","defaultedLen","afterNext","entities","__proto__","quot","amp","apos","nbsp","iexcl","cent","pound","curren","yen","brvbar","sect","uml","copy","ordf","laquo","not","shy","reg","macr","deg","plusmn","sup2","sup3","acute","micro","para","middot","cedil","sup1","ordm","raquo","frac14","frac12","frac34","iquest","Agrave","Aacute","Acirc","Atilde","Auml","Aring","AElig","Ccedil","Egrave","Eacute","Ecirc","Euml","Igrave","Iacute","Icirc","Iuml","ETH","Ntilde","Ograve","Oacute","Ocirc","Otilde","Ouml","times","Oslash","Ugrave","Uacute","Ucirc","Uuml","Yacute","THORN","szlig","agrave","aacute","acirc","atilde","auml","aring","aelig","ccedil","egrave","eacute","ecirc","euml","igrave","iacute","icirc","iuml","eth","ntilde","ograve","oacute","ocirc","otilde","ouml","divide","oslash","ugrave","uacute","ucirc","uuml","yacute","thorn","yuml","OElig","oelig","Scaron","scaron","Yuml","fnof","circ","Alpha","Beta","Gamma","Delta","Epsilon","Zeta","Eta","Theta","Iota","Kappa","Lambda","Mu","Nu","Xi","Omicron","Pi","Rho","Sigma","Tau","Upsilon","Phi","Chi","Psi","Omega","alpha","beta","gamma","delta","epsilon","zeta","eta","theta","iota","kappa","lambda","mu","nu","xi","omicron","pi","rho","sigmaf","sigma","tau","upsilon","phi","chi","psi","omega","thetasym","upsih","piv","ensp","emsp","thinsp","zwnj","zwj","lrm","rlm","ndash","mdash","lsquo","rsquo","sbquo","ldquo","rdquo","bdquo","dagger","Dagger","bull","hellip","permil","prime","Prime","lsaquo","rsaquo","oline","frasl","euro","image","weierp","real","trade","alefsym","larr","uarr","rarr","darr","harr","crarr","lArr","uArr","rArr","dArr","hArr","forall","part","exist","nabla","isin","notin","ni","prod","sum","minus","lowast","radic","infin","ang","and","or","cap","cup","int","there4","sim","cong","asymp","ne","equiv","le","ge","sub","sup","nsub","sube","supe","oplus","otimes","perp","sdot","lceil","rceil","lfloor","rfloor","lang","rang","loz","spades","clubs","hearts","diams","JsxErrors","AttributeIsEmpty","MissingClosingTagElement","openingTagName","MissingClosingTagFragment","UnexpectedSequenceExpression","HTMLEntity","UnsupportedJsxValue","UnterminatedJsxContent","UnwrappedAdjacentJSXElements","isFragment","getQualifiedJSXName","namespace","JSXParserMixin","jsxReadToken","jsxReadEntity","jsxReadNewLine","normalizeCRLF","jsxReadString","codePoint","count","desc","entity","XHTMLEntities","jsxReadWord","jsxParseIdentifier","jsxParseNamespacedName","jsxParseElementName","jsxParseAttributeValue","setContext","jsxParseExpressionContainer","jsxParseEmptyExpression","jsxParseSpreadChild","previousContext","jsxParseAttribute","jsxParseOpeningElementAt","jsxParseOpeningElementAfterName","selfClosing","jsxParseClosingElementAt","jsxParseElementAt","children","openingElement","closingElement","contents","openingFragment","closingFragment","jsxParseElement","newContext","TypeScriptScope","enums","constEnums","classes","exportOnlyBindings","TypeScriptScopeHandler","importsStack","hasImport","allowShadow","isConst","wasConst","getOwn","hasOwnProperty","unwrapParenthesizedExpression","LValParser","_node$extra3","last","_node$extra2","operator","arg","checkToRestConversion","elt","element","toReferencedListDeep","parseSpread","parseRestBinding","parseBindingList","ParseBindingListFlags","parseObjectLike","closeCharCode","allowEmpty","elts","checkCommaAfterRest","parseDecorator","parseAssignableListItem","parseBindingRestProperty","parseBindingProperty","parsePropertyName","_left","ObjectProperty","checkLVal","in","checkClashes","hasParenthesizedAncestor","_expression$extra","checkIdentifier","validity","ParseErrorClass","isParenthesizedExpression","nextAncestor","child","declareNameFromIdentifier","identifier","allowPattern","nonNull","x","assert","TSErrors","AbstractMethodHasImplementation","methodName","AbstractPropertyHasInitializer","propertyName","AccesorCannotDeclareThisParameter","AccesorCannotHaveTypeParameters","AccessorCannotBeOptional","ClassMethodHasDeclare","ClassMethodHasReadonly","ConstInitiailizerMustBeStringOrNumericLiteralOrLiteralEnumReference","ConstructorHasTypeParameters","DeclareAccessor","DeclareClassFieldHasInitializer","DeclareFunctionHasImplementation","DuplicateAccessibilityModifier","modifier","DuplicateModifier","EmptyHeritageClauseType","EmptyTypeArguments","EmptyTypeParameters","ExpectedAmbientAfterExportDeclare","ImportAliasHasImportType","IncompatibleModifiers","modifiers","IndexSignatureHasAbstract","IndexSignatureHasAccessibility","IndexSignatureHasDeclare","IndexSignatureHasOverride","IndexSignatureHasStatic","InitializerNotAllowedInAmbientContext","InvalidModifierOnTypeMember","InvalidModifierOnTypeParameter","InvalidModifierOnTypeParameterPositions","InvalidModifiersOrder","orderedModifiers","InvalidPropertyAccessAfterInstantiationExpression","InvalidTupleMemberLabel","MissingInterfaceName","NonAbstractClassHasAbstractMethod","NonClassMethodPropertyHasAbstractModifer","OptionalTypeBeforeRequired","OverrideNotInSubClass","PrivateElementHasAbstract","PrivateElementHasAccessibility","ReadonlyForMethodSignature","ReservedArrowTypeParam","ReservedTypeAssertion","SetAccesorCannotHaveOptionalParameter","SetAccesorCannotHaveRestParameter","SetAccesorCannotHaveReturnType","SingleTypeParameterWithoutTrailingComma","typeParameterName","StaticBlockCannotHaveModifier","TupleOptionalAfterType","TypeAnnotationAfterAssign","TypeImportCannotSpecifyDefaultAndNamed","TypeModifierIsUsedInTypeExports","TypeModifierIsUsedInTypeImports","UnexpectedParameterModifier","UnexpectedReadonly","UnexpectedTypeAnnotation","UnexpectedTypeCastInParameter","UnsupportedImportTypeArgument","UnsupportedParameterPropertyKind","UnsupportedSignatureParameterKind","keywordTypeFromName","tsIsAccessModifier","tsIsVarianceAnnotations","typescript","TypeScriptParserMixin","tsParseInOutModifiers","tsParseModifiers","bind","allowedModifiers","disallowedModifiers","errorTemplate","tsParseConstModifier","tsParseInOutConstModifiers","tsIsIdentifier","tsTokenCanFollowModifier","tsNextTokenCanFollowModifier","tsParseModifier","stopOnStartOfClassStaticBlock","tsIsStartOfStaticBlocks","tsTryParse","modified","enforceOrder","before","after","incompatible","mod1","mod2","accessibility","tsIsListTerminator","tsParseList","parseElement","tsParseDelimitedList","refTrailingCommaPos","tsParseDelimitedListWorker","expectSuccess","trailingCommaPos","tsParseBracketedList","bracket","skipFirstToken","tsParseImportType","qualifier","tsParseEntityName","tsParseTypeArguments","allowReservedWords","tsParseTypeReference","typeName","tsParseThisTypePredicate","lhs","parameterName","tsParseTypeAnnotation","asserts","tsParseThisTypeNode","tsParseTypeQuery","exprName","tsParseTypeParameter","parseModifiers","tsParseTypeParameterName","constraint","tsEatThenParseType","tsTryParseTypeParameters","tsParseTypeParameters","tsFillSignature","returnToken","signature","returnTokenRequired","paramsKey","returnTypeKey","tsParseBindingListForSignature","tsParseTypeOrTypePredicateAnnotation","tsParseTypeMemberSemicolon","tsParseSignatureMember","tsIsUnambiguouslyIndexSignature","tsTryParseIndexSignature","tsLookAhead","parameters","tsTryParseTypeAnnotation","tsParsePropertyOrMethodSignature","readonly","nodeAny","firstParameter","tsParseTypeMember","idx","tsParseTypeLiteral","tsParseObjectTypeMembers","tsIsStartOfMappedType","tsParseMappedTypeParameter","tsExpectThenParseType","tsParseMappedType","nameType","tsParseType","tsTryParseType","tsParseTupleType","elementTypes","tsParseTupleElementType","seenOptionalElement","elementNode","labeled","isWord","chAfterWord","wordName","typeOrLabel","tsParseNonArrayType","labeledNode","optionalTypeNode","restNode","tsParseParenthesizedType","tsParseFunctionOrConstructorType","abstract","tsInAllowConditionalTypesContext","tsParseLiteralTypeNode","tsParseTemplateLiteralType","parseTemplate","parseTemplateSubstitution","tsParseThisTypeOrThisTypePredicate","thisKeyword","parseMaybeUnary","nodeType","tsParseArrayTypeOrHigher","tsParseTypeOperator","tsParseTypeOperatorOrHigher","tsCheckTypeAnnotationForReadOnly","tsParseInferType","tsParseConstraintForInferType","tsInDisallowConditionalTypesContext","isTypeOperator","tsParseUnionOrIntersectionType","parseConstituentType","hasLeadingOperator","tsParseIntersectionTypeOrHigher","tsParseUnionTypeOrHigher","tsIsStartOfFunctionType","tsIsUnambiguouslyStartOfFunctionType","tsSkipParameterStart","previousErrorCount","_unused2","tsInType","t","tsParseTypePredicateAsserts","thisTypePredicate","typePredicateVariable","tsParseTypePredicatePrefix","tsTryParseTypeOrTypePredicateAnnotation","eatColon","tsParseNonConditionalType","checkType","extendsType","trueType","falseType","isAbstractConstructorSignature","tsParseTypeAssertion","tsParseHeritageClause","originalStartLoc","delimitedList","tsParseInterfaceDeclaration","tsParseTypeAliasDeclaration","tsInNoContext","cb","oldContext","oldInDisallowConditionalTypesContext","tsNextThenParseType","tsParseEnumMember","initializer","tsParseEnumDeclaration","tsParseModuleBlock","parseBlockOrModuleBlockBody","tsParseModuleOrNamespaceDeclaration","nested","inner","tsParseAmbientExternalModuleDeclaration","global","tsParseImportEqualsDeclaration","maybeDefaultIdentifier","moduleReference","tsParseModuleReference","tsIsExternalModuleReference","tsParseExternalModuleReference","f","tsTryParseAndCatch","tsTryParseDeclare","nany","startType","tsInAmbientContext","parseFunctionStatement","parseClass","parseVarStatement","tsParseDeclaration","tsTryParseExportDeclaration","tsParseExpressionStatement","mod","tsCheckLineTerminator","tsParseAbstractDeclaration","tsTryParseGenericAsyncArrowFunction","oldMaybeInArrowParameters","tsParseTypeArgumentsInExpression","reScan_lt","reScan_lt_gt","tsIsDeclarationStart","override","pp","parameter","isSimpleParameter","tsDisallowOptionalPattern","bodilessType","registerFunctionStatementId","tsCheckForInvalidTypeCasts","items","isInParens","nonNullExpression","isOptionalCall","missingParenErrorLoc","atPossibleAsyncArrow","asyncArrowFn","parseTaggedTemplateExpression","tokenType","_callee$extra","parseExprOp","leftStartLoc","minPrec","isSatisfies","checkKeywords","checkDuplicateExports","importNode","parseMaybeImportPhase","parseImportSpecifiersAndAfter","isAbstractClass","cls","allowMissingInitializer","declarations","isValidAmbientConstInitializer","parseStatementContent","parseAccessModifier","tsHasSomeModifiers","callParseClassMemberWithIsStatic","parseClassStaticBlock","parseClassMemberWithIsStatic","hadSuperClass","parsePostMemberNameModifiers","methodOrProp","isDeclare","isIdentifier","parseClassPropertyAnnotation","definite","parseClassAccessorProperty","declareClassPrivateMethodInScope","_typeCast","_typeCast2","typeCast","_typeParameters","reportReservedArrowTypeParam","trailingComma","sawUnary","toAssignableParenthesizedExpression","TSTypeCastExpression","TSParameterProperty","TSNonNullExpression","TSAsExpression","TSSatisfiesExpression","TSTypeAssertion","parseMaybeDecoratorArguments","canHaveLeadingDecorator","getGetterSetterExpectedParamCount","baseCount","firstParam","hasContextParam","parseCatchClauseParam","oldIsAmbientContext","oldInAbstractClass","maybeTakeDecorators","hasBody","shouldParseAsAmbientContext","getExpression","parseExportSpecifier","isString","isInTypeExport","parseTypeOnlyImportExportSpecifier","isImport","isInTypeOnlyImportExport","leftOfAsKey","rightOfAsKey","leftOfAs","rightOfAs","hasTypeSpecifier","canParseAsKeyword","firstAs","secondAs","parseModuleExportName","kindKey","isPossiblyLiteralEnum","expressions","isUncomputedMemberExpressionChain","isNumber","isNegativeNumber","PlaceholderErrors","ClassNameIsRequired","UnexpectedSpace","placeholders","PlaceholdersParserMixin","parsePlaceholder","assertNoSpace","finishPlaceholder","isFinished","chStartsBindingIdentifier","verifyBreakContinue","isBreak","parseStatementOrSloppyAnnexBFunctionDeclaration","parseBlock","createNewLexicalScope","parseFunctionId","requireId","oldStrict","parseClassBody","startsWith","maybeParseExportDefaultSpecifier","_specifiers","checkExport","filter","hasStarImport","maybeParseStarImportSpecifier","parseNamedImportSpecifiers","parseImportSource","v8intrinsic","V8IntrinsicMixin","parseV8Intrinsic","v8IntrinsicStartLoc","parseIdentifierName","expectedConfig","expectedName","expectedOptions","expectedKeys","expectedOptionsIsEmpty","p","option","find","PIPELINE_PROPOSALS","TOPIC_TOKENS","RECORD_AND_TUPLE_SYNTAX_TYPES","validatePlugins","decoratorsBeforeExport","allowCallParenthesized","proposalList","tupleSyntaxIsHash","syntaxType","tokenList","moduleAttributesVersionPluginOption","missingPlugins","mixinPlugins","mixinPluginNames","defaultOptions","sourceFilename","allowAwaitOutsideFunction","allowReturnOutsideFunction","allowNewTargetOutsideFunction","allowImportExportEverywhere","allowSuperOutsideMethod","allowUndeclaredExports","createImportExpressions","createParenthesizedExpressions","getOptions","opts","_opts$key","ExpressionParser","checkProto","isRecord","protoRef","used","shouldExitDescending","disallowIn","disallowInAnd","parseExpressionBase","allowInAnd","parseMaybeAssignDisallowIn","resultError","_resultError$loc","parseYield","ownExpressionErrors","parseMaybeConditional","startIndex","parseExprOps","parseMaybeUnaryOrPrivate","op","prec","checkPipelineAtInfixOperator","logical","coalesce","parseExprOpRightExpr","finishedNode","nextOp","withTopicBindingContext","parseHackPipeBody","parseSmartPipelineBodyInStyle","parseExprOpBaseRightExpr","withSoloAwaitPermittingContext","parseFSharpPipelineBody","_body$extra","requiredParentheses","topicReferenceWasUsedInCurrentContext","checkExponentialAfterUnary","isAwait","isAwaitAllowed","parseAwait","update","isDelete","parseUpdate","isAmbiguousAwait","updateExpressionNode","parseExprSubscripts","maybeAsyncArrow","parseBind","parseCoverCallAndAsyncArrowHead","parseMember","parseNoCallExpr","tag","quasi","expectImportAttributesPlugin","dynamicImport","allowPlaceholder","nodeForExtra","oldInFSharpPipelineDirectBody","addTrailingCommaExtraToNode","parseExprListItem","_call$extra","parseSuper","parseImportMetaProperty","parseImportCall","parseDo","parseFunctionOrFunctionSent","parseDecorators","parseNewOrNewTarget","parseTopicReferenceThenEqualsSign","parseTopicReference","pipeProposal","parseModuleExpression","parseAsyncFunctionExpression","parseAsyncArrowUnaryFunction","topicTokenType","topicTokenValue","finishTopicReference","testTopicReferenceConfiguration","topicReferenceIsAllowedInCurrentContext","registerTopicReference","meta","parseMetaProperty","parseFunction","isSource","innerStartLoc","spreadStartLoc","optionalCommaStartLoc","spreadNodeStartLoc","innerEndLoc","arrowNode","wrapParenthesis","parenExpression","metaProp","parseNew","parseExprList","parseTemplateElement","isTagged","elemStart","elem","isTail","endOffset","elemEnd","cooked","tail","curElt","quasis","propHash","parsePropertyDefinition","maybeAsyncOrAccessorProp","keyName","_params","finishedProp","generator","isExpression","hasStrictModeDirective","nonSimple","isSimpleParamList","formalParameters","reservedTest","delegating","delegate","childExpr","isSimpleReference","checkSmartPipeTopicBodyEarlyErrors","callback","outerContextTopicState","withSmartMixTopicForbiddingContext","outerContextSoloAwaitState","prodParamToSet","prodParamToClear","ret","revertScopes","parseProgram","loopLabel","switchLabel","loneSurrogate","keywordRelationalOperator","babel7CompatTokens","hashEndPos","hashEndLoc","backquoteEnd","backquoteEndLoc","startToken","templateValue","templateElementEnd","templateElementEndLoc","endToken","StatementParser","interpreter","parseInterpreterDirective","finishedProgram","stmtToDirective","directiveLiteral","hasFollowingBindingAtom","endCh","chStartsBindingPattern","hasInLineFollowingBindingIdentifier","startsUsingForOf","startsAwaitUsing","parseModuleItem","ParseStatementFlag","parseStatementListItem","allowLabeledFunction","parseStatement","starttype","allowDeclaration","allowFunctionDeclaration","parseBreakContinueStatement","parseDebuggerStatement","parseDoWhileStatement","parseForStatement","parseIfStatement","parseReturnStatement","parseSwitchStatement","parseThrowStatement","parseTryStatement","parseWhileStatement","parseWithStatement","parseEmptyStatement","nextTokenCharCode","isAsyncFunction","maybeName","parseLabeledStatement","decoratorsEnabledBeforeExport","maybeDecorators","classNode","exportNode","allowExport","paramsStartLoc","lab","parseHeaderExpression","awaitAt","parseFor","startsWithLet","startsWithAwaitUsing","starsWithUsingDeclaration","isLetOrUsing","initNode","parseVar","isForIn","parseForIn","startsWithAsync","isForOf","isHangingDeclaration","ParseFunctionFlag","discriminant","cases","cur","sawDefault","isCase","block","handler","clause","finalizer","statementStart","parsedNonDirective","await","isFor","hangingDeclaration","isDeclaration","hadConstructor","publicMethod","privateMethod","publicProp","privateProp","accessorProp","publicMember","parseClassElementName","isPrivate","maybeQuestionTokenStartLoc","pushClassPrivateProperty","pushClassProperty","pushClassAccessorProperty","_member$decorators","parseInitializer","hasDefault","parseAfterDefault","hasStar","parseAfterNamespace","isFromRequired","hasSpecifiers","maybeParseExportNamedSpecifiers","hasDeclaration","maybeParseExportDeclaration","_node2$declaration","isTypeExport","assertions","nextType","hasFrom","nextAfterFrom","maybeParseImportAttributes","checkJSONModuleImport","checkNames","isDefault","isFrom","_node$specifiers","_declaration$extra","nodes","surrogate","isJSONModuleImport","singleBindingType","_node$assertions","nonDefaultNamedSpecifier","phaseIdentifier","isImportPhase","isPrecedingIdImportPhase","parseImportSourceAndAttributes","maybeParseDefaultImportSpecifier","parseNext","_node$specifiers2","parseImportAttributes","attrs","attrNames","parseModuleAttributes","useWith","importSpecifier","Parser","pluginsMap","pluginMap","_options","getParser","ast","moduleError","generateExportedTokenTypes","internalTokenTypes","tokTypes","getParserClass","parserClassCache","pluginsFromOptions","pluginList"],"mappings":"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AC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,GAAG,EAAC,CAAC,EAAC,EAAE,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,IAAI,EAAC,EAAE,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,CAAC,EAAC,IAAI,EAAC,GAAG,EAAC,IAAI,EAAC,GAAG,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,EAAE,EAAC,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,GAAG,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,GAAG,EAAC,IAAI,EAAC,GAAG,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,IAAI,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,IAAI,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,IAAI,EAAC,KAAK,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,IAAI,EAAC,GAAG,EAAC,IAAI,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,CAAC;AAEx+C,MAAMC,qBAAqB,GAAG,CAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,GAAG,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,GAAG,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EA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"}