Files

1 line
656 KiB
Plaintext

{"version":3,"file":"index.cjs","names":["Evk","debug","escope","dependencyEspree","espree","DUMMY_PARENT","parseScript","getTagName","SVG_TAGS","DUMMY_PARENT","cursors.forward","cursors.backward","EventEmitter","parseScriptBase","services.define","HTMLTokenizer","HTMLParser","parseScript"],"sources":["../src/ast/errors.ts","../src/ast/nodes.ts","../src/ast/traverse.ts","../src/ast/index.ts","../src/utils/utils.ts","../src/common/lines-and-columns.ts","../src/common/location-calculator.ts","../src/common/debug.ts","../src/common/ast-utils.ts","../src/common/parser-object.ts","../src/common/parser-options.ts","../src/common/eslint-scope.ts","../src/common/espree.ts","../src/script-setup/parser-options.ts","../src/script/scope-analyzer.ts","../src/common/fix-locations.ts","../src/script/generic.ts","../src/script/index.ts","../src/common/token-utils.ts","../src/common/error-utils.ts","../src/template/index.ts","../src/html/util/attribute-names.ts","../src/html/util/tag-names.ts","../src/html/intermediate-tokenizer.ts","../src/html/parser.ts","../src/html/util/alternative-cr.ts","../src/html/util/entities.ts","../src/html/util/unicode.ts","../src/html/tokenizer.ts","../src/utils/memoize.ts","../src/external/node-event-generator.ts","../src/external/token-store/utils.ts","../src/external/token-store/cursors/cursor.ts","../src/external/token-store/cursors/backward-token-comment-cursor.ts","../src/external/token-store/cursors/backward-token-cursor.ts","../src/external/token-store/cursors/decorative-cursor.ts","../src/external/token-store/cursors/filter-cursor.ts","../src/external/token-store/cursors/forward-token-comment-cursor.ts","../src/external/token-store/cursors/forward-token-cursor.ts","../src/external/token-store/cursors/limit-cursor.ts","../src/external/token-store/cursors/skip-cursor.ts","../src/external/token-store/cursors/index.ts","../src/external/token-store/cursors/padded-token-cursor.ts","../src/external/token-store/index.ts","../src/sfc/custom-block/index.ts","../src/parser-services.ts","../src/script-setup/index.ts","../src/style/tokenizer.ts","../src/style/index.ts","../src/script-setup/scope-analyzer.ts","../package.json","../src/index.ts"],"sourcesContent":["/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2017 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\nimport type { Location } from \"./locations\"\n\n/**\n * Check whether the given value has acorn style location information.\n * @param x The value to check.\n * @returns `true` if the value has acorn style location information.\n */\nfunction isAcornStyleParseError(\n x: any,\n): x is { message: string; pos: number; loc: Location } {\n return (\n typeof x.message === \"string\" &&\n typeof x.pos === \"number\" &&\n typeof x.loc === \"object\" &&\n x.loc !== null &&\n typeof x.loc.line === \"number\" &&\n typeof x.loc.column === \"number\"\n )\n}\n\n/**\n * Check whether the given value is probably a TSError.\n * @param x The value to check.\n * @returns `true` if the given value is probably a TSError.\n */\nfunction isTSError(\n x: any,\n): x is { message: string; index: number; lineNumber: number; column: number } {\n return (\n !(x instanceof ParseError) &&\n typeof x.message === \"string\" &&\n typeof x.index === \"number\" &&\n typeof x.lineNumber === \"number\" &&\n typeof x.column === \"number\" &&\n x.name === \"TSError\"\n )\n}\n\n/**\n * HTML parse errors.\n */\nexport class ParseError extends SyntaxError {\n public code?: ErrorCode\n public index: number\n public lineNumber: number\n public column: number\n\n /**\n * Create new parser error object.\n * @param code The error code. See also: https://html.spec.whatwg.org/multipage/parsing.html#parse-errors\n * @param offset The offset number of this error.\n * @param line The line number of this error.\n * @param column The column number of this error.\n */\n public static fromCode(\n code: ErrorCode,\n offset: number,\n line: number,\n column: number,\n ): ParseError {\n return new ParseError(code, code, offset, line, column)\n }\n\n /**\n * Normalize the error object.\n * @param x The error object to normalize.\n */\n public static normalize(x: any): ParseError | null {\n if (isTSError(x)) {\n return new ParseError(\n x.message,\n undefined,\n x.index,\n x.lineNumber,\n x.column,\n )\n }\n if (ParseError.isParseError(x)) {\n return x\n }\n if (isAcornStyleParseError(x)) {\n return new ParseError(\n x.message,\n undefined,\n x.pos,\n x.loc.line,\n x.loc.column,\n )\n }\n return null\n }\n\n /**\n * Initialize this ParseError instance.\n * @param message The error message.\n * @param code The error code. See also: https://html.spec.whatwg.org/multipage/parsing.html#parse-errors\n * @param offset The offset number of this error.\n * @param line The line number of this error.\n * @param column The column number of this error.\n */\n public constructor(\n message: string,\n code: ErrorCode | undefined,\n offset: number,\n line: number,\n column: number,\n ) {\n super(message)\n this.code = code\n this.index = offset\n this.lineNumber = line\n this.column = column\n }\n\n /**\n * Type guard for ParseError.\n * @param x The value to check.\n * @returns `true` if the value has `message`, `pos`, `loc` properties.\n */\n public static isParseError(x: any): x is ParseError {\n return (\n x instanceof ParseError ||\n (typeof x.message === \"string\" &&\n typeof x.index === \"number\" &&\n typeof x.lineNumber === \"number\" &&\n typeof x.column === \"number\")\n )\n }\n}\n\n/**\n * The error codes of HTML syntax errors.\n * https://html.spec.whatwg.org/multipage/parsing.html#parse-errors\n */\nexport type ErrorCode =\n | \"abrupt-closing-of-empty-comment\"\n | \"absence-of-digits-in-numeric-character-reference\"\n | \"cdata-in-html-content\"\n | \"character-reference-outside-unicode-range\"\n | \"control-character-in-input-stream\"\n | \"control-character-reference\"\n | \"eof-before-tag-name\"\n | \"eof-in-cdata\"\n | \"eof-in-comment\"\n | \"eof-in-tag\"\n | \"incorrectly-closed-comment\"\n | \"incorrectly-opened-comment\"\n | \"invalid-first-character-of-tag-name\"\n | \"missing-attribute-value\"\n | \"missing-end-tag-name\"\n | \"missing-semicolon-after-character-reference\"\n | \"missing-whitespace-between-attributes\"\n | \"nested-comment\"\n | \"noncharacter-character-reference\"\n | \"noncharacter-in-input-stream\"\n | \"null-character-reference\"\n | \"surrogate-character-reference\"\n | \"surrogate-in-input-stream\"\n | \"unexpected-character-in-attribute-name\"\n | \"unexpected-character-in-unquoted-attribute-value\"\n | \"unexpected-equals-sign-before-attribute-name\"\n | \"unexpected-null-character\"\n | \"unexpected-question-mark-instead-of-tag-name\"\n | \"unexpected-solidus-in-tag\"\n | \"unknown-named-character-reference\"\n | \"end-tag-with-attributes\"\n | \"duplicate-attribute\"\n | \"end-tag-with-trailing-solidus\"\n | \"non-void-html-element-start-tag-with-trailing-solidus\"\n | \"x-invalid-end-tag\"\n | \"x-invalid-namespace\"\n | \"x-missing-interpolation-end\"\n// ---- Use RAWTEXT state for <script> elements instead ----\n// \"eof-in-script-html-comment-like-text\" |\n// ---- Use BOGUS_COMMENT state for DOCTYPEs instead ----\n// \"abrupt-doctype-public-identifier\" |\n// \"abrupt-doctype-system-identifier\" |\n// \"eof-in-doctype\" |\n// \"invalid-character-sequence-after-doctype-name\" |\n// \"missing-doctype-name\" |\n// \"missing-doctype-public-identifier\" |\n// \"missing-doctype-system-identifier\" |\n// \"missing-quote-before-doctype-public-identifier\" |\n// \"missing-quote-before-doctype-system-identifier\" |\n// \"missing-whitespace-after-doctype-public-keyword\" |\n// \"missing-whitespace-after-doctype-system-keyword\" |\n// \"missing-whitespace-before-doctype-name\" |\n// \"missing-whitespace-between-doctype-public-and-system-identifiers\" |\n// \"unexpected-character-after-doctype-system-identifier\" |\n","/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2017 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\nimport type { ScopeManager } from \"eslint-scope\"\nimport type { ParseError } from \"./errors\"\nimport type { HasLocation } from \"./locations\"\nimport type { Token } from \"./tokens\"\nimport type { TSESTree } from \"@typescript-eslint/utils\"\nimport type { ParserServices } from \"../parser-services\"\n\n//------------------------------------------------------------------------------\n// Common\n//------------------------------------------------------------------------------\n\n/**\n * Objects which have their parent.\n */\nexport interface HasParent {\n parent?: Node | null\n}\n\n/**\n * The union type for all nodes.\n */\nexport type Node =\n | ESLintNode\n | VNode\n | VForExpression\n | VOnExpression\n | VSlotScopeExpression\n | VGenericExpression\n | VFilterSequenceExpression\n | VFilter\n\n//------------------------------------------------------------------------------\n// Script\n//------------------------------------------------------------------------------\n\n/**\n * The union type for ESLint nodes.\n */\nexport type ESLintNode =\n | ESLintIdentifier\n | ESLintLiteral\n | ESLintProgram\n | ESLintSwitchCase\n | ESLintCatchClause\n | ESLintVariableDeclarator\n | ESLintStatement\n | ESLintExpression\n | ESLintProperty\n | ESLintAssignmentProperty\n | ESLintSuper\n | ESLintTemplateElement\n | ESLintSpreadElement\n | ESLintPattern\n | ESLintClassBody\n | ESLintMethodDefinition\n | ESLintPropertyDefinition\n | ESLintStaticBlock\n | ESLintPrivateIdentifier\n | ESLintModuleDeclaration\n | ESLintModuleSpecifier\n | ESLintImportExpression\n | ESLintLegacyRestProperty\n\n/**\n * The parsing result of ESLint custom parsers.\n */\nexport interface ESLintExtendedProgram {\n ast: ESLintProgram\n services?: ParserServices\n visitorKeys?: { [type: string]: string[] }\n scopeManager?: ScopeManager\n}\n\nexport interface ESLintProgram extends HasLocation, HasParent {\n type: \"Program\"\n sourceType: \"script\" | \"module\"\n body: (ESLintStatement | ESLintModuleDeclaration)[]\n templateBody?: VElement & HasConcreteInfo\n tokens?: Token[]\n comments?: Token[]\n errors?: ParseError[]\n}\n\nexport type ESLintStatement =\n | ESLintExpressionStatement\n | ESLintBlockStatement\n | ESLintEmptyStatement\n | ESLintDebuggerStatement\n | ESLintWithStatement\n | ESLintReturnStatement\n | ESLintLabeledStatement\n | ESLintBreakStatement\n | ESLintContinueStatement\n | ESLintIfStatement\n | ESLintSwitchStatement\n | ESLintThrowStatement\n | ESLintTryStatement\n | ESLintWhileStatement\n | ESLintDoWhileStatement\n | ESLintForStatement\n | ESLintForInStatement\n | ESLintForOfStatement\n | ESLintDeclaration\n\nexport interface ESLintEmptyStatement extends HasLocation, HasParent {\n type: \"EmptyStatement\"\n}\n\nexport interface ESLintBlockStatement extends HasLocation, HasParent {\n type: \"BlockStatement\"\n body: ESLintStatement[]\n}\n\nexport interface ESLintExpressionStatement extends HasLocation, HasParent {\n type: \"ExpressionStatement\"\n expression: ESLintExpression\n}\n\nexport interface ESLintIfStatement extends HasLocation, HasParent {\n type: \"IfStatement\"\n test: ESLintExpression\n consequent: ESLintStatement\n alternate: ESLintStatement | null\n}\n\nexport interface ESLintSwitchStatement extends HasLocation, HasParent {\n type: \"SwitchStatement\"\n discriminant: ESLintExpression\n cases: ESLintSwitchCase[]\n}\n\nexport interface ESLintSwitchCase extends HasLocation, HasParent {\n type: \"SwitchCase\"\n test: ESLintExpression | null\n consequent: ESLintStatement[]\n}\n\nexport interface ESLintWhileStatement extends HasLocation, HasParent {\n type: \"WhileStatement\"\n test: ESLintExpression\n body: ESLintStatement\n}\n\nexport interface ESLintDoWhileStatement extends HasLocation, HasParent {\n type: \"DoWhileStatement\"\n body: ESLintStatement\n test: ESLintExpression\n}\n\nexport interface ESLintForStatement extends HasLocation, HasParent {\n type: \"ForStatement\"\n init: ESLintVariableDeclaration | ESLintExpression | null\n test: ESLintExpression | null\n update: ESLintExpression | null\n body: ESLintStatement\n}\n\nexport interface ESLintForInStatement extends HasLocation, HasParent {\n type: \"ForInStatement\"\n left: ESLintVariableDeclaration | ESLintPattern\n right: ESLintExpression\n body: ESLintStatement\n}\n\nexport interface ESLintForOfStatement extends HasLocation, HasParent {\n type: \"ForOfStatement\"\n left: ESLintVariableDeclaration | ESLintPattern\n right: ESLintExpression\n body: ESLintStatement\n await: boolean\n}\n\nexport interface ESLintLabeledStatement extends HasLocation, HasParent {\n type: \"LabeledStatement\"\n label: ESLintIdentifier\n body: ESLintStatement\n}\n\nexport interface ESLintBreakStatement extends HasLocation, HasParent {\n type: \"BreakStatement\"\n label: ESLintIdentifier | null\n}\n\nexport interface ESLintContinueStatement extends HasLocation, HasParent {\n type: \"ContinueStatement\"\n label: ESLintIdentifier | null\n}\n\nexport interface ESLintReturnStatement extends HasLocation, HasParent {\n type: \"ReturnStatement\"\n argument: ESLintExpression | null\n}\n\nexport interface ESLintThrowStatement extends HasLocation, HasParent {\n type: \"ThrowStatement\"\n argument: ESLintExpression\n}\n\nexport interface ESLintTryStatement extends HasLocation, HasParent {\n type: \"TryStatement\"\n block: ESLintBlockStatement\n handler: ESLintCatchClause | null\n finalizer: ESLintBlockStatement | null\n}\n\nexport interface ESLintCatchClause extends HasLocation, HasParent {\n type: \"CatchClause\"\n param: ESLintPattern | null\n body: ESLintBlockStatement\n}\n\nexport interface ESLintWithStatement extends HasLocation, HasParent {\n type: \"WithStatement\"\n object: ESLintExpression\n body: ESLintStatement\n}\n\nexport interface ESLintDebuggerStatement extends HasLocation, HasParent {\n type: \"DebuggerStatement\"\n}\n\nexport type ESLintDeclaration =\n | ESLintFunctionDeclaration\n | ESLintVariableDeclaration\n | ESLintClassDeclaration\n\nexport interface ESLintFunctionDeclaration extends HasLocation, HasParent {\n type: \"FunctionDeclaration\"\n async: boolean\n generator: boolean\n id: ESLintIdentifier | null\n params: ESLintPattern[]\n body: ESLintBlockStatement\n}\n\nexport interface ESLintVariableDeclaration extends HasLocation, HasParent {\n type: \"VariableDeclaration\"\n kind: \"var\" | \"let\" | \"const\"\n declarations: ESLintVariableDeclarator[]\n}\n\nexport interface ESLintVariableDeclarator extends HasLocation, HasParent {\n type: \"VariableDeclarator\"\n id: ESLintPattern\n init: ESLintExpression | null\n}\n\nexport interface ESLintClassDeclaration extends HasLocation, HasParent {\n type: \"ClassDeclaration\"\n id: ESLintIdentifier | null\n superClass: ESLintExpression | null\n body: ESLintClassBody\n}\n\nexport interface ESLintClassBody extends HasLocation, HasParent {\n type: \"ClassBody\"\n body: (\n | ESLintMethodDefinition\n | ESLintPropertyDefinition\n | ESLintStaticBlock\n )[]\n}\n\nexport interface ESLintMethodDefinition extends HasLocation, HasParent {\n type: \"MethodDefinition\"\n kind: \"constructor\" | \"method\" | \"get\" | \"set\"\n computed: boolean\n static: boolean\n key: ESLintExpression | ESLintPrivateIdentifier\n value: ESLintFunctionExpression\n}\nexport interface ESLintPropertyDefinition extends HasLocation, HasParent {\n type: \"PropertyDefinition\"\n computed: boolean\n static: boolean\n key: ESLintExpression | ESLintPrivateIdentifier\n value: ESLintExpression | null\n}\n\nexport interface ESLintStaticBlock\n extends HasLocation, HasParent, Omit<ESLintBlockStatement, \"type\"> {\n type: \"StaticBlock\"\n body: ESLintStatement[]\n}\n\nexport interface ESLintPrivateIdentifier extends HasLocation, HasParent {\n type: \"PrivateIdentifier\"\n name: string\n}\n\nexport type ESLintModuleDeclaration =\n | ESLintImportDeclaration\n | ESLintExportNamedDeclaration\n | ESLintExportDefaultDeclaration\n | ESLintExportAllDeclaration\n\nexport type ESLintModuleSpecifier =\n | ESLintImportSpecifier\n | ESLintImportDefaultSpecifier\n | ESLintImportNamespaceSpecifier\n | ESLintExportSpecifier\n\nexport interface ESLintImportDeclaration extends HasLocation, HasParent {\n type: \"ImportDeclaration\"\n specifiers: (\n | ESLintImportSpecifier\n | ESLintImportDefaultSpecifier\n | ESLintImportNamespaceSpecifier\n )[]\n source: ESLintLiteral\n}\n\nexport interface ESLintImportSpecifier extends HasLocation, HasParent {\n type: \"ImportSpecifier\"\n imported: ESLintIdentifier | ESLintStringLiteral\n local: ESLintIdentifier\n}\n\nexport interface ESLintImportDefaultSpecifier extends HasLocation, HasParent {\n type: \"ImportDefaultSpecifier\"\n local: ESLintIdentifier\n}\n\nexport interface ESLintImportNamespaceSpecifier extends HasLocation, HasParent {\n type: \"ImportNamespaceSpecifier\"\n local: ESLintIdentifier\n}\n\nexport interface ESLintImportExpression extends HasLocation, HasParent {\n type: \"ImportExpression\"\n source: ESLintExpression\n}\n\nexport interface ESLintExportNamedDeclaration extends HasLocation, HasParent {\n type: \"ExportNamedDeclaration\"\n declaration?: ESLintDeclaration | null\n specifiers: ESLintExportSpecifier[]\n source?: ESLintLiteral | null\n}\n\nexport interface ESLintExportSpecifier extends HasLocation, HasParent {\n type: \"ExportSpecifier\"\n local: ESLintIdentifier | ESLintStringLiteral\n exported: ESLintIdentifier | ESLintStringLiteral\n}\n\nexport interface ESLintExportDefaultDeclaration extends HasLocation, HasParent {\n type: \"ExportDefaultDeclaration\"\n declaration: ESLintDeclaration | ESLintExpression\n}\n\nexport interface ESLintExportAllDeclaration extends HasLocation, HasParent {\n type: \"ExportAllDeclaration\"\n exported: ESLintIdentifier | ESLintStringLiteral | null\n source: ESLintLiteral\n}\n\nexport type ESLintExpression =\n | ESLintThisExpression\n | ESLintArrayExpression\n | ESLintObjectExpression\n | ESLintFunctionExpression\n | ESLintArrowFunctionExpression\n | ESLintYieldExpression\n | ESLintLiteral\n | ESLintUnaryExpression\n | ESLintUpdateExpression\n | ESLintBinaryExpression\n | ESLintAssignmentExpression\n | ESLintLogicalExpression\n | ESLintMemberExpression\n | ESLintConditionalExpression\n | ESLintCallExpression\n | ESLintNewExpression\n | ESLintSequenceExpression\n | ESLintTemplateLiteral\n | ESLintTaggedTemplateExpression\n | ESLintClassExpression\n | ESLintMetaProperty\n | ESLintIdentifier\n | ESLintAwaitExpression\n | ESLintChainExpression\n\nexport interface ESLintIdentifier extends HasLocation, HasParent {\n type: \"Identifier\"\n name: string\n}\ninterface ESLintLiteralBase extends HasLocation, HasParent {\n type: \"Literal\"\n value: string | boolean | null | number | RegExp | bigint\n raw: string\n regex?: {\n pattern: string\n flags: string\n }\n bigint?: string\n}\nexport interface ESLintStringLiteral extends ESLintLiteralBase {\n value: string\n regex?: undefined\n bigint?: undefined\n}\nexport interface ESLintBooleanLiteral extends ESLintLiteralBase {\n value: boolean\n regex?: undefined\n bigint?: undefined\n}\nexport interface ESLintNullLiteral extends ESLintLiteralBase {\n value: null\n regex?: undefined\n bigint?: undefined\n}\nexport interface ESLintNumberLiteral extends ESLintLiteralBase {\n value: number\n regex?: undefined\n bigint?: undefined\n}\nexport interface ESLintRegExpLiteral extends ESLintLiteralBase {\n value: null | RegExp\n regex: {\n pattern: string\n flags: string\n }\n bigint?: undefined\n}\nexport interface ESLintBigIntLiteral extends ESLintLiteralBase {\n value: null | bigint\n regex?: undefined\n bigint: string\n}\nexport type ESLintLiteral =\n | ESLintStringLiteral\n | ESLintBooleanLiteral\n | ESLintNullLiteral\n | ESLintNumberLiteral\n | ESLintRegExpLiteral\n | ESLintBigIntLiteral\n\nexport interface ESLintThisExpression extends HasLocation, HasParent {\n type: \"ThisExpression\"\n}\n\nexport interface ESLintArrayExpression extends HasLocation, HasParent {\n type: \"ArrayExpression\"\n elements: (ESLintExpression | ESLintSpreadElement)[]\n}\n\nexport interface ESLintObjectExpression extends HasLocation, HasParent {\n type: \"ObjectExpression\"\n properties: (\n | ESLintProperty\n | ESLintSpreadElement\n | ESLintLegacySpreadProperty\n )[]\n}\n\nexport interface ESLintProperty extends HasLocation, HasParent {\n type: \"Property\"\n kind: \"init\" | \"get\" | \"set\"\n method: boolean\n shorthand: boolean\n computed: boolean\n key: ESLintExpression\n value: ESLintExpression | ESLintPattern\n}\n\nexport interface ESLintFunctionExpression extends HasLocation, HasParent {\n type: \"FunctionExpression\"\n async: boolean\n generator: boolean\n id: ESLintIdentifier | null\n params: ESLintPattern[]\n body: ESLintBlockStatement\n}\n\nexport interface ESLintArrowFunctionExpression extends HasLocation, HasParent {\n type: \"ArrowFunctionExpression\"\n async: boolean\n generator: boolean\n id: ESLintIdentifier | null\n params: ESLintPattern[]\n body: ESLintBlockStatement | ESLintExpression\n}\n\nexport interface ESLintSequenceExpression extends HasLocation, HasParent {\n type: \"SequenceExpression\"\n expressions: ESLintExpression[]\n}\n\nexport interface ESLintUnaryExpression extends HasLocation, HasParent {\n type: \"UnaryExpression\"\n operator: \"-\" | \"+\" | \"!\" | \"~\" | \"typeof\" | \"void\" | \"delete\"\n prefix: boolean\n argument: ESLintExpression\n}\n\nexport interface ESLintBinaryExpression extends HasLocation, HasParent {\n type: \"BinaryExpression\"\n operator:\n | \"==\"\n | \"!=\"\n | \"===\"\n | \"!==\"\n | \"<\"\n | \"<=\"\n | \">\"\n | \">=\"\n | \"<<\"\n | \">>\"\n | \">>>\"\n | \"+\"\n | \"-\"\n | \"*\"\n | \"/\"\n | \"%\"\n | \"**\"\n | \"|\"\n | \"^\"\n | \"&\"\n | \"in\"\n | \"instanceof\"\n left: ESLintExpression | ESLintPrivateIdentifier\n right: ESLintExpression\n}\n\nexport interface ESLintAssignmentExpression extends HasLocation, HasParent {\n type: \"AssignmentExpression\"\n operator:\n | \"=\"\n | \"+=\"\n | \"-=\"\n | \"*=\"\n | \"/=\"\n | \"%=\"\n | \"**=\"\n | \"<<=\"\n | \">>=\"\n | \">>>=\"\n | \"|=\"\n | \"^=\"\n | \"&=\"\n | \"||=\"\n | \"&&=\"\n | \"??=\"\n left: ESLintPattern\n right: ESLintExpression\n}\n\nexport interface ESLintUpdateExpression extends HasLocation, HasParent {\n type: \"UpdateExpression\"\n operator: \"++\" | \"--\"\n argument: ESLintExpression\n prefix: boolean\n}\n\nexport interface ESLintLogicalExpression extends HasLocation, HasParent {\n type: \"LogicalExpression\"\n operator: \"||\" | \"&&\" | \"??\"\n left: ESLintExpression\n right: ESLintExpression\n}\n\nexport interface ESLintConditionalExpression extends HasLocation, HasParent {\n type: \"ConditionalExpression\"\n test: ESLintExpression\n alternate: ESLintExpression\n consequent: ESLintExpression\n}\n\nexport interface ESLintCallExpression extends HasLocation, HasParent {\n type: \"CallExpression\"\n optional: boolean\n callee: ESLintExpression | ESLintSuper\n arguments: (ESLintExpression | ESLintSpreadElement)[]\n}\n\nexport interface ESLintSuper extends HasLocation, HasParent {\n type: \"Super\"\n}\n\nexport interface ESLintNewExpression extends HasLocation, HasParent {\n type: \"NewExpression\"\n callee: ESLintExpression\n arguments: (ESLintExpression | ESLintSpreadElement)[]\n}\n\nexport interface ESLintMemberExpression extends HasLocation, HasParent {\n type: \"MemberExpression\"\n optional: boolean\n computed: boolean\n object: ESLintExpression | ESLintSuper\n property: ESLintExpression | ESLintPrivateIdentifier\n}\n\nexport interface ESLintYieldExpression extends HasLocation, HasParent {\n type: \"YieldExpression\"\n delegate: boolean\n argument: ESLintExpression | null\n}\n\nexport interface ESLintAwaitExpression extends HasLocation, HasParent {\n type: \"AwaitExpression\"\n argument: ESLintExpression\n}\n\nexport interface ESLintTemplateLiteral extends HasLocation, HasParent {\n type: \"TemplateLiteral\"\n quasis: ESLintTemplateElement[]\n expressions: ESLintExpression[]\n}\n\nexport interface ESLintTaggedTemplateExpression extends HasLocation, HasParent {\n type: \"TaggedTemplateExpression\"\n tag: ESLintExpression\n quasi: ESLintTemplateLiteral\n}\n\nexport interface ESLintTemplateElement extends HasLocation, HasParent {\n type: \"TemplateElement\"\n tail: boolean\n value: {\n cooked: string | null\n raw: string\n }\n}\n\nexport interface ESLintClassExpression extends HasLocation, HasParent {\n type: \"ClassExpression\"\n id: ESLintIdentifier | null\n superClass: ESLintExpression | null\n body: ESLintClassBody\n}\n\nexport interface ESLintMetaProperty extends HasLocation, HasParent {\n type: \"MetaProperty\"\n meta: ESLintIdentifier\n property: ESLintIdentifier\n}\n\nexport type ESLintPattern =\n | ESLintIdentifier\n | ESLintObjectPattern\n | ESLintArrayPattern\n | ESLintRestElement\n | ESLintAssignmentPattern\n | ESLintMemberExpression\n | ESLintLegacyRestProperty\n\nexport interface ESLintObjectPattern extends HasLocation, HasParent {\n type: \"ObjectPattern\"\n properties: (\n | ESLintAssignmentProperty\n | ESLintRestElement\n | ESLintLegacyRestProperty\n )[]\n}\n\nexport interface ESLintAssignmentProperty extends ESLintProperty {\n value: ESLintPattern\n kind: \"init\"\n method: false\n}\n\nexport interface ESLintArrayPattern extends HasLocation, HasParent {\n type: \"ArrayPattern\"\n elements: ESLintPattern[]\n}\n\nexport interface ESLintRestElement extends HasLocation, HasParent {\n type: \"RestElement\"\n argument: ESLintPattern\n}\n\nexport interface ESLintSpreadElement extends HasLocation, HasParent {\n type: \"SpreadElement\"\n argument: ESLintExpression\n}\n\nexport interface ESLintAssignmentPattern extends HasLocation, HasParent {\n type: \"AssignmentPattern\"\n left: ESLintPattern\n right: ESLintExpression\n}\n\nexport type ESLintChainElement = ESLintCallExpression | ESLintMemberExpression\n\nexport interface ESLintChainExpression extends HasLocation, HasParent {\n type: \"ChainExpression\"\n expression: ESLintChainElement\n}\n\n/**\n * Legacy for babel-eslint and espree.\n */\nexport interface ESLintLegacyRestProperty extends HasLocation, HasParent {\n type: \"RestProperty\" | \"ExperimentalRestProperty\"\n argument: ESLintPattern\n}\n\n/**\n * Legacy for babel-eslint and espree.\n */\nexport interface ESLintLegacySpreadProperty extends HasLocation, HasParent {\n type: \"SpreadProperty\" | \"ExperimentalSpreadProperty\"\n argument: ESLintExpression\n}\n\n//------------------------------------------------------------------------------\n// Template\n//------------------------------------------------------------------------------\n\n/**\n * Constants of namespaces.\n * @see https://infra.spec.whatwg.org/#namespaces\n */\nexport const NS = Object.freeze({\n HTML: \"http://www.w3.org/1999/xhtml\" as \"http://www.w3.org/1999/xhtml\",\n MathML: \"http://www.w3.org/1998/Math/MathML\" as \"http://www.w3.org/1998/Math/MathML\",\n SVG: \"http://www.w3.org/2000/svg\" as \"http://www.w3.org/2000/svg\",\n XLink: \"http://www.w3.org/1999/xlink\" as \"http://www.w3.org/1999/xlink\",\n XML: \"http://www.w3.org/XML/1998/namespace\" as \"http://www.w3.org/XML/1998/namespace\",\n XMLNS: \"http://www.w3.org/2000/xmlns/\" as \"http://www.w3.org/2000/xmlns/\",\n})\n\n/**\n * Type of namespaces.\n */\nexport type Namespace =\n | typeof NS.HTML\n | typeof NS.MathML\n | typeof NS.SVG\n | typeof NS.XLink\n | typeof NS.XML\n | typeof NS.XMLNS\n\n/**\n * Type of variable definitions.\n */\nexport interface Variable {\n id: ESLintIdentifier\n kind: \"v-for\" | \"scope\" | \"generic\"\n references: Reference[]\n}\n\n/**\n * Type of variable references.\n */\nexport interface Reference {\n id: ESLintIdentifier\n mode: \"rw\" | \"r\" | \"w\"\n variable: Variable | null\n\n // For typescript-eslint\n isValueReference?: boolean\n isTypeReference?: boolean\n}\n\n/**\n * The node of `v-for` directives.\n */\nexport interface VForExpression extends HasLocation, HasParent {\n type: \"VForExpression\"\n parent: VExpressionContainer\n left: ESLintPattern[]\n right: ESLintExpression\n}\n\n/**\n * The node of `v-on` directives.\n */\nexport interface VOnExpression extends HasLocation, HasParent {\n type: \"VOnExpression\"\n parent: VExpressionContainer\n body: ESLintStatement[]\n}\n\n/**\n * The node of `slot-scope` directives.\n */\nexport interface VSlotScopeExpression extends HasLocation, HasParent {\n type: \"VSlotScopeExpression\"\n parent: VExpressionContainer\n params: ESLintPattern[]\n}\n\n/**\n * The node of `generic` directives.\n */\nexport interface VGenericExpression extends HasLocation, HasParent {\n type: \"VGenericExpression\"\n parent: VExpressionContainer\n params: TSESTree.TSTypeParameterDeclaration[\"params\"]\n rawParams: string[]\n}\n\n/**\n * The node of a filter sequence which is separated by `|`.\n */\nexport interface VFilterSequenceExpression extends HasLocation, HasParent {\n type: \"VFilterSequenceExpression\"\n parent: VExpressionContainer\n expression: ESLintExpression\n filters: VFilter[]\n}\n\n/**\n * The node of a filter sequence which is separated by `|`.\n */\nexport interface VFilter extends HasLocation, HasParent {\n type: \"VFilter\"\n parent: VFilterSequenceExpression\n callee: ESLintIdentifier\n arguments: (ESLintExpression | ESLintSpreadElement)[]\n}\n\n/**\n * The union type of any nodes.\n */\nexport type VNode =\n | VAttribute\n | VDirective\n | VDirectiveKey\n | VDocumentFragment\n | VElement\n | VEndTag\n | VExpressionContainer\n | VIdentifier\n | VLiteral\n | VStartTag\n | VText\n\n/**\n * Text nodes.\n */\nexport interface VText extends HasLocation, HasParent {\n type: \"VText\"\n parent: VDocumentFragment | VElement\n value: string\n}\n\n/**\n * The node of JavaScript expression in text.\n * e.g. `{{ name }}`\n */\nexport interface VExpressionContainer extends HasLocation, HasParent {\n type: \"VExpressionContainer\"\n parent: VDocumentFragment | VElement | VDirective | VDirectiveKey\n expression:\n | ESLintExpression\n | VFilterSequenceExpression\n | VForExpression\n | VOnExpression\n | VSlotScopeExpression\n | VGenericExpression\n | null\n references: Reference[]\n}\n\n/**\n * Attribute name nodes.\n */\nexport interface VIdentifier extends HasLocation, HasParent {\n type: \"VIdentifier\"\n parent: VAttribute | VDirectiveKey\n name: string\n rawName: string\n}\n\n/**\n * Attribute name nodes.\n */\nexport interface VDirectiveKey extends HasLocation, HasParent {\n type: \"VDirectiveKey\"\n parent: VDirective\n name: VIdentifier\n argument: VExpressionContainer | VIdentifier | null\n modifiers: VIdentifier[]\n}\n\n/**\n * Attribute value nodes.\n */\nexport interface VLiteral extends HasLocation, HasParent {\n type: \"VLiteral\"\n parent: VAttribute\n value: string\n}\n\n/**\n * Static attribute nodes.\n */\nexport interface VAttribute extends HasLocation, HasParent {\n type: \"VAttribute\"\n parent: VStartTag\n directive: false\n key: VIdentifier\n value: VLiteral | null\n}\n\n/**\n * Directive nodes.\n */\nexport interface VDirective extends HasLocation, HasParent {\n type: \"VAttribute\"\n parent: VStartTag\n directive: true\n key: VDirectiveKey\n value: VExpressionContainer | null\n}\n\n/**\n * Start tag nodes.\n */\nexport interface VStartTag extends HasLocation, HasParent {\n type: \"VStartTag\"\n parent: VElement\n selfClosing: boolean\n attributes: (VAttribute | VDirective)[]\n}\n\n/**\n * End tag nodes.\n */\nexport interface VEndTag extends HasLocation, HasParent {\n type: \"VEndTag\"\n parent: VElement\n}\n\n/**\n * The property which has concrete information.\n */\nexport interface HasConcreteInfo {\n tokens: Token[]\n comments: Token[]\n errors: ParseError[]\n}\n\n/**\n * Element nodes.\n */\nexport interface VElement extends HasLocation, HasParent {\n type: \"VElement\"\n parent: VDocumentFragment | VElement\n namespace: Namespace\n name: string\n rawName: string\n startTag: VStartTag\n children: (VElement | VText | VExpressionContainer)[]\n endTag: VEndTag | null\n variables: Variable[]\n}\n\n/**\n * Root nodes.\n */\nexport interface VDocumentFragment\n extends HasLocation, HasParent, HasConcreteInfo {\n type: \"VDocumentFragment\"\n parent: null\n children: (VElement | VText | VExpressionContainer | VStyleElement)[]\n}\n\n/**\n * Style element nodes.\n */\nexport interface VStyleElement extends VElement {\n type: \"VElement\"\n name: \"style\"\n style: true\n children: (VText | VExpressionContainer)[]\n}\n","/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2017 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\nimport type { VisitorKeys } from \"eslint-visitor-keys\"\nimport * as Evk from \"eslint-visitor-keys\"\nimport type { Node } from \"./nodes\"\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\nexport const KEYS = Evk.unionWith({\n VAttribute: [\"key\", \"value\"],\n VDirectiveKey: [\"name\", \"argument\", \"modifiers\"],\n VDocumentFragment: [\"children\"],\n VElement: [\"startTag\", \"children\", \"endTag\"],\n VEndTag: [],\n VExpressionContainer: [\"expression\"],\n VFilter: [\"callee\", \"arguments\"],\n VFilterSequenceExpression: [\"expression\", \"filters\"],\n VForExpression: [\"left\", \"right\"],\n VIdentifier: [],\n VLiteral: [],\n VOnExpression: [\"body\"],\n VSlotScopeExpression: [\"params\"],\n VStartTag: [\"attributes\"],\n VText: [],\n VGenericExpression: [\"params\"],\n})\n\n/**\n * Check that the given key should be traversed or not.\n * @param key The key to check.\n * @param value The value of the key in the node.\n * @returns `true` if the key should be traversed.\n */\nfunction fallbackKeysFilter(key: string, value: any = null): boolean {\n return (\n key !== \"comments\" &&\n key !== \"leadingComments\" &&\n key !== \"loc\" &&\n key !== \"parent\" &&\n key !== \"range\" &&\n key !== \"tokens\" &&\n key !== \"trailingComments\" &&\n value !== null &&\n typeof value === \"object\" &&\n (typeof value.type === \"string\" || Array.isArray(value))\n )\n}\n\n/**\n * Get the keys of the given node to traverse it.\n * @param node The node to get.\n * @returns The keys to traverse.\n */\nexport function getFallbackKeys(node: Node): string[] {\n return Object.keys(node).filter((key) =>\n fallbackKeysFilter(key, node[key as keyof Node]),\n )\n}\n\n/**\n * Check wheather a given value is a node.\n * @param x The value to check.\n * @returns `true` if the value is a node.\n */\nfunction isNode(x: any): x is Node {\n return x !== null && typeof x === \"object\" && typeof x.type === \"string\"\n}\n\n/**\n * Traverse the given node.\n * @param node The node to traverse.\n * @param parent The parent node.\n * @param visitor The node visitor.\n */\nfunction traverse(node: Node, parent: Node | null, visitor: Visitor): void {\n let i = 0\n let j = 0\n\n visitor.enterNode(node, parent)\n\n const keys =\n (visitor.visitorKeys ?? KEYS)[node.type] ?? getFallbackKeys(node)\n for (i = 0; i < keys.length; ++i) {\n const child = (node as any)[keys[i]]\n\n if (Array.isArray(child)) {\n for (j = 0; j < child.length; ++j) {\n if (isNode(child[j])) {\n traverse(child[j], node, visitor)\n }\n }\n } else if (isNode(child)) {\n traverse(child, node, visitor)\n }\n }\n\n visitor.leaveNode(node, parent)\n}\n\n//------------------------------------------------------------------------------\n// Exports\n//------------------------------------------------------------------------------\n\nexport interface Visitor {\n visitorKeys?: VisitorKeys\n enterNode(node: Node, parent: Node | null): void\n leaveNode(node: Node, parent: Node | null): void\n}\n\n/**\n * Traverse the given AST tree.\n * @param node Root node to traverse.\n * @param visitor Visitor.\n */\nexport function traverseNodes(node: Node, visitor: Visitor): void {\n traverse(node, null, visitor)\n}\n","/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2017 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\n\nexport * from \"./errors\"\nexport * from \"./locations\"\nexport * from \"./nodes\"\nexport * from \"./tokens\"\nexport * from \"./traverse\"\n","/**\n * @see https://github.com/vuejs/vue-next/blob/48de8a42b7fed7a03f7f1ff5d53d6a704252cafe/packages/shared/src/index.ts#L109\n */\nexport function camelize(str: string) {\n return str.replace(/-(\\w)/gu, (_, c) => (c ? c.toUpperCase() : \"\"))\n}\n\n/**\n * A binary search implementation that finds the index at which `predicate`\n * stops returning `true` and starts returning `false` (consistently) when run\n * on the items of the array. It **assumes** that mapping the array via the\n * predicate results in the shape `[...true[], ...false[]]`. *For any other case\n * the result is unpredictable*.\n *\n * This is the base implementation of the `sortedIndex` functions which define\n * the predicate for the user, for common use-cases.\n *\n * It is similar to `findIndex`, but runs at O(logN), whereas the latter is\n * general purpose function which runs on any array and predicate, but runs at\n * O(N) time.\n *\n * MIT License | Copyright (c) 2018 remeda | https://remedajs.com/\n *\n * The implementation is copied from remeda package:\n * https://github.com/remeda/remeda/blob/df5fe74841c07bc356bbaa2c89bc7ba0cafafd0a/packages/remeda/src/internal/binarySearchCutoffIndex.ts#L15\n */\nfunction binarySearchCutoffIndex<T>(\n array: readonly T[],\n predicate: (value: T, index: number, data: readonly T[]) => boolean,\n): number {\n let lowIndex = 0\n let highIndex = array.length\n\n while (lowIndex < highIndex) {\n const pivotIndex = (lowIndex + highIndex) >>> 1\n const pivot = array[pivotIndex]\n\n if (predicate(pivot, pivotIndex, array)) {\n lowIndex = pivotIndex + 1\n } else {\n highIndex = pivotIndex\n }\n }\n\n return highIndex\n}\n\n/**\n * Find the insertion position (index) of an item in an array with items sorted\n * in ascending order; so that `splice(sortedIndex, 0, item)` would result in\n * maintaining the array's sort-ness. The array can contain duplicates.\n * If the item already exists in the array the index would be of the *last*\n * occurrence of the item.\n *\n * Runs in O(logN) time.\n *\n * @param item - The item to insert.\n * @returns Insertion index (In the range 0..data.length).\n * @signature\n * R.sortedLastIndex(item)(data)\n * @example\n * R.pipe(['a','a','b','c','c'], sortedLastIndex('c')) // => 5\n *\n * MIT License | Copyright (c) 2018 remeda | https://remedajs.com/\n *\n * The implementation is copied from remeda package:\n * https://github.com/remeda/remeda/blob/df5fe74841c07bc356bbaa2c89bc7ba0cafafd0a/packages/remeda/src/sortedLastIndex.ts#L51\n */\nexport function sortedLastIndex<T>(array: readonly T[], item: T): number {\n return binarySearchCutoffIndex(array, (pivot) => pivot <= item)\n}\n\n/**\n * Find the insertion position (index) of an item in an array with items sorted\n * in ascending order using a value function; so that\n * `splice(sortedIndex, 0, item)` would result in maintaining the arrays sort-\n * ness. The array can contain duplicates.\n * If the item already exists in the array the index would be of the *first*\n * occurrence of the item.\n *\n * Runs in O(logN) time.\n *\n * See also:\n * * `findIndex` - scans a possibly unsorted array in-order (linear search).\n * * `sortedIndex` - like this function, but doesn't take a callbackfn.\n * * `sortedLastIndexBy` - like this function, but finds the last suitable index.\n * * `sortedLastIndex` - like `sortedIndex`, but finds the last suitable index.\n * * `rankBy` - scans a possibly unsorted array in-order, returning the index based on a sorting criteria.\n *\n * @param data - The (ascending) sorted array.\n * @param item - The item to insert.\n * @param valueFunction - All comparisons would be performed on the result of\n * calling this function on each compared item. Preferably this function should\n * return a `number` or `string`. This function should be the same as the one\n * provided to sortBy to sort the array. The function is called exactly once on\n * each items that is compared against in the array, and once at the beginning\n * on `item`. When called on `item` the `index` argument is `undefined`.\n * @returns Insertion index (In the range 0..data.length).\n * @signature\n * R.sortedIndexBy(data, item, valueFunction)\n * @example\n * R.sortedIndexBy([{age:20},{age:22}],{age:21},prop('age')) // => 1\n *\n * MIT License | Copyright (c) 2018 remeda | https://remedajs.com/\n *\n * The implementation is copied from remeda package:\n * https://github.com/remeda/remeda/blob/df5fe74841c07bc356bbaa2c89bc7ba0cafafd0a/packages/remeda/src/sortedIndexBy.ts#L37\n */\nexport function sortedIndexBy<T>(\n array: readonly T[],\n item: T,\n valueFunction: (\n item: T,\n index: number | undefined,\n data: readonly T[],\n ) => number,\n): number {\n const value = valueFunction(item, undefined, array)\n\n return binarySearchCutoffIndex(\n array,\n (pivot, index) => valueFunction(pivot, index, array) < value,\n )\n}\n\n/**\n * Find the insertion position (index) of an item in an array with items sorted\n * in ascending order using a value function; so that\n * `splice(sortedIndex, 0, item)` would result in maintaining the arrays sort-\n * ness. The array can contain duplicates.\n * If the item already exists in the array the index would be of the *last*\n * occurrence of the item.\n *\n * Runs in O(logN) time.\n *\n * See also:\n * * `findIndex` - scans a possibly unsorted array in-order (linear search).\n * * `sortedLastIndex` - a simplified version of this function, without a callbackfn.\n * * `sortedIndexBy` - like this function, but returns the first suitable index.\n * * `sortedIndex` - like `sortedLastIndex` but without a callbackfn.\n * * `rankBy` - scans a possibly unsorted array in-order, returning the index based on a sorting criteria.\n *\n * @param data - The (ascending) sorted array.\n * @param item - The item to insert.\n * @param valueFunction - All comparisons would be performed on the result of\n * calling this function on each compared item. Preferably this function should\n * return a `number` or `string`. This function should be the same as the one\n * provided to sortBy to sort the array. The function is called exactly once on\n * each items that is compared against in the array, and once at the beginning\n * on `item`. When called on `item` the `index` argument is `undefined`.\n * @returns Insertion index (In the range 0..data.length).\n * @signature\n * R.sortedLastIndexBy(data, item, valueFunction)\n * @example\n * R.sortedLastIndexBy([{age:20},{age:22}],{age:21},prop('age')) // => 1\n *\n * MIT License | Copyright (c) 2018 remeda | https://remedajs.com/\n *\n * The implementation is copied from remeda package:\n * https://github.com/remeda/remeda/blob/df5fe74841c07bc356bbaa2c89bc7ba0cafafd0a/packages/remeda/src/sortedLastIndexBy.ts#L37\n */\nexport function sortedLastIndexBy<T>(\n array: readonly T[],\n item: T,\n valueFunction: (\n item: T,\n index: number | undefined,\n data: readonly T[],\n ) => number,\n): number {\n const value = valueFunction(item, undefined, array)\n\n return binarySearchCutoffIndex(\n array,\n (pivot, index) => valueFunction(pivot, index, array) <= value,\n )\n}\n\n/**\n * Creates a duplicate-free version of an array.\n *\n * This function takes an array and returns a new array containing only the unique values\n * from the original array, preserving the order of first occurrence.\n *\n * @template T - The type of elements in the array.\n * @param {T[]} arr - The array to process.\n * @returns {T[]} A new array with only unique values from the original array.\n *\n * @example\n * const array = [1, 2, 2, 3, 4, 4, 5];\n * const result = uniq(array);\n * // result will be [1, 2, 3, 4, 5]\n *\n * MIT © Viva Republica, Inc. | https://es-toolkit.dev/\n *\n * The implementation is copied from es-toolkit package:\n * https://github.com/toss/es-toolkit/blob/16709839f131269b84cdd96e9645df52648ccedf/src/array/uniq.ts#L16\n */\nexport function uniq<T>(arr: readonly T[]): T[] {\n return Array.from(new Set(arr))\n}\n\n/**\n * Returns the intersection of multiple arrays.\n *\n * This function takes multiple arrays and returns a new array containing the elements that are\n * present in all provided arrays. It effectively filters out any elements that are not found\n * in every array.\n *\n * @template T - The type of elements in the arrays.\n * @param {...(ArrayLike<T> | null | undefined)} arrays - The arrays to compare.\n * @returns {T[]} A new array containing the elements that are present in all arrays.\n *\n * @example\n * const array1 = [1, 2, 3, 4, 5];\n * const array2 = [3, 4, 5, 6, 7];\n * const result = intersection(array1, array2);\n * // result will be [3, 4, 5] since these elements are in both arrays.\n *\n * MIT © Viva Republica, Inc. | https://es-toolkit.dev/\n *\n * The implementation is copied from es-toolkit package:\n * https://github.com/toss/es-toolkit/blob/16709839f131269b84cdd96e9645df52648ccedf/src/compat/array/intersection.ts#L22\n * https://github.com/toss/es-toolkit/blob/16709839f131269b84cdd96e9645df52648ccedf/src/array/intersection.ts#L19\n */\nexport function intersection<T>(...arrays: (T[] | null | undefined)[]): T[] {\n if (arrays.length === 0) {\n return []\n }\n\n let result: T[] = uniq(arrays[0]!)\n\n for (let i = 1; i < arrays.length; i++) {\n const array = arrays[i]\n const secondSet = new Set(array)\n\n result = result.filter((item) => secondSet.has(item))\n }\n\n return result\n}\n\n/**\n * This function takes multiple arrays and returns a new array containing only the unique values\n * from all input arrays, preserving the order of their first occurrence.\n *\n * @template T - The type of elements in the arrays.\n * @param {Array<ArrayLike<T> | null | undefined>} arrays - The arrays to inspect.\n * @returns {T[]} Returns the new array of combined unique values.\n *\n * @example\n * // Returns [2, 1]\n * union([2], [1, 2]);\n *\n * @example\n * // Returns [2, 1, 3]\n * union([2], [1, 2], [2, 3]);\n *\n * @example\n * // Returns [1, 3, 2, [5], [4]] (does not deeply flatten nested arrays)\n * union([1, 3, 2], [1, [5]], [2, [4]]);\n *\n * @example\n * // Returns [0, 2, 1] (ignores non-array values like 3 and { '0': 1 })\n * union([0], 3, { '0': 1 }, null, [2, 1]);\n * @example\n * // Returns [0, 'a', 2, 1] (treats array-like object { 0: 'a', length: 1 } as a valid array)\n * union([0], { 0: 'a', length: 1 }, [2, 1]);\n *\n * MIT © Viva Republica, Inc. | https://es-toolkit.dev/\n *\n * The implementation is copied from es-toolkit package:\n * https://github.com/toss/es-toolkit/blob/16709839f131269b84cdd96e9645df52648ccedf/src/compat/array/union.ts#L61\n * https://github.com/toss/es-toolkit/blob/16709839f131269b84cdd96e9645df52648ccedf/src/compat/array/flattenDepth.ts#L21\n */\nexport function union<T>(...arrays: T[][]): T[] {\n const flattened = arrays.flat()\n\n return uniq(flattened)\n}\n","import { sortedLastIndex } from \"../utils/utils\"\nimport type { Location } from \"../ast/index\"\nimport type { LocationCalculator } from \"./location-calculator\"\n/**\n * A class for getting lines and columns location.\n */\nexport class LinesAndColumns {\n protected ltOffsets: number[]\n\n /**\n * Initialize.\n * @param ltOffsets The list of the offset of line terminators.\n */\n public constructor(ltOffsets: number[]) {\n this.ltOffsets = ltOffsets\n }\n\n /**\n * Calculate the location of the given index.\n * @param index The index to calculate their location.\n * @returns The location of the index.\n */\n public getLocFromIndex(index: number): Location {\n const line = sortedLastIndex(this.ltOffsets, index) + 1\n const column = index - (line === 1 ? 0 : this.ltOffsets[line - 2])\n return { line, column }\n }\n\n public createOffsetLocationCalculator(offset: number): LocationCalculator {\n return {\n getFixOffset() {\n return offset\n },\n getLocFromIndex: this.getLocFromIndex.bind(this),\n }\n }\n}\n","/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2017 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\nimport { sortedLastIndex } from \"../utils/utils\"\nimport type { Location } from \"../ast/index\"\nimport { LinesAndColumns } from \"./lines-and-columns\"\n\n/**\n * Location calculators.\n */\nexport interface LocationCalculator {\n /**\n * Gets the fix location offset of the given offset with using the base offset of this calculator.\n * @param offset The offset to modify.\n */\n getFixOffset(offset: number, kind: \"start\" | \"end\"): number\n\n /**\n * Calculate the location of the given index.\n * @param index The index to calculate their location.\n * @returns The location of the index.\n */\n getLocFromIndex(index: number): Location\n}\n\n/**\n * Location calculators.\n *\n * HTML tokenizers remove several characters to handle HTML entities and line terminators.\n * Tokens have the processed text as their value, but tokens have offsets and locations in the original text.\n * This calculator calculates the original locations from the processed texts.\n *\n * This calculator will be used for:\n *\n * - Adjusts the locations of script ASTs.\n * - Creates expression containers in postprocess.\n */\nexport class LocationCalculatorForHtml\n extends LinesAndColumns\n implements LocationCalculator\n{\n private gapOffsets: number[]\n private baseOffset: number\n private baseIndexOfGap: number\n private shiftOffset: number\n\n /**\n * Initialize this calculator.\n * @param gapOffsets The list of the offset of removed characters in tokenization phase.\n * @param ltOffsets The list of the offset of line terminators.\n * @param baseOffset The base offset to calculate locations.\n * @param shiftOffset The shift offset to calculate locations.\n */\n public constructor(\n gapOffsets: number[],\n ltOffsets: number[],\n baseOffset?: number,\n shiftOffset = 0,\n ) {\n super(ltOffsets)\n this.gapOffsets = gapOffsets\n this.ltOffsets = ltOffsets\n this.baseOffset = baseOffset ?? 0\n this.baseIndexOfGap =\n this.baseOffset === 0\n ? 0\n : sortedLastIndex(gapOffsets, this.baseOffset)\n this.shiftOffset = shiftOffset\n }\n\n /**\n * Get sub calculator which have the given base offset.\n * @param offset The base offset of new sub calculator.\n * @returns Sub calculator.\n */\n public getSubCalculatorAfter(offset: number): LocationCalculatorForHtml {\n return new LocationCalculatorForHtml(\n this.gapOffsets,\n this.ltOffsets,\n this.baseOffset + offset,\n this.shiftOffset,\n )\n }\n\n /**\n * Get sub calculator that shifts the given offset.\n * @param offset The shift of new sub calculator.\n * @returns Sub calculator.\n */\n public getSubCalculatorShift(offset: number): LocationCalculatorForHtml {\n return new LocationCalculatorForHtml(\n this.gapOffsets,\n this.ltOffsets,\n this.baseOffset,\n this.shiftOffset + offset,\n )\n }\n\n /**\n * Calculate gap at the given index.\n * @param index The index to calculate gap.\n */\n private _getGap(index: number): number {\n const offsets = this.gapOffsets\n let g0 = sortedLastIndex(offsets, index + this.baseOffset)\n let pos = index + this.baseOffset + g0 - this.baseIndexOfGap\n\n while (g0 < offsets.length && offsets[g0] <= pos) {\n g0 += 1\n pos += 1\n }\n\n return g0 - this.baseIndexOfGap\n }\n\n /**\n * Calculate the location of the given index.\n * @param index The index to calculate their location.\n * @returns The location of the index.\n */\n public getLocation(index: number): Location {\n return this.getLocFromIndex(this.getOffsetWithGap(index))\n }\n\n /**\n * Calculate the offset of the given index.\n * @param index The index to calculate their location.\n * @returns The offset of the index.\n */\n public getOffsetWithGap(index: number): number {\n return index + this.getFixOffset(index)\n }\n\n /**\n * Gets the fix location offset of the given offset with using the base offset of this calculator.\n * @param offset The offset to modify.\n */\n public getFixOffset(offset: number): number {\n const shiftOffset = this.shiftOffset\n const gap = this._getGap(offset + shiftOffset)\n return this.baseOffset + gap + shiftOffset\n }\n}\n","/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2017 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\nimport debugFactory from \"debug\"\nexport const debug = debugFactory(\"vue-eslint-parser\")\n","import type {\n VAttribute,\n VDirective,\n VDocumentFragment,\n VElement,\n VExpressionContainer,\n VGenericExpression,\n VNode,\n} from \"../ast/index\"\n\n/**\n * Check whether the node is a `<script>` element.\n * @param node The node to check.\n * @returns `true` if the node is a `<script>` element.\n */\nexport function isScriptElement(node: VNode): node is VElement {\n return node.type === \"VElement\" && node.name === \"script\"\n}\n\n/**\n * Checks whether the given script element is `<script setup>`.\n */\nexport function isScriptSetupElement(script: VElement): boolean {\n return (\n isScriptElement(script) &&\n script.startTag.attributes.some(\n (attr) => !attr.directive && attr.key.name === \"setup\",\n )\n )\n}\n\n/**\n * Check whether the node is a `<template>` element.\n * @param node The node to check.\n * @returns `true` if the node is a `<template>` element.\n */\nexport function isTemplateElement(node: VNode): node is VElement {\n return node.type === \"VElement\" && node.name === \"template\"\n}\n\n/**\n * Check whether the node is a `<style>` element.\n * @param node The node to check.\n * @returns `true` if the node is a `<style>` element.\n */\nexport function isStyleElement(node: VNode): node is VElement {\n return node.type === \"VElement\" && node.name === \"style\"\n}\n\n/**\n * Get the belonging document of the given node.\n * @param leafNode The node to get.\n * @returns The belonging document.\n */\nexport function getOwnerDocument(leafNode: VNode): VDocumentFragment | null {\n let node: VNode | null = leafNode\n while (node != null && node.type !== \"VDocumentFragment\") {\n node = node.parent\n }\n return node\n}\n\n/**\n * Check whether the attribute node is a `lang` attribute.\n * @param attribute The attribute node to check.\n * @returns `true` if the attribute node is a `lang` attribute.\n */\nexport function isLang(\n attribute: VAttribute | VDirective,\n): attribute is VAttribute {\n return attribute.directive === false && attribute.key.name === \"lang\"\n}\n\n/**\n * Get the `lang` attribute value from a given element.\n * @param element The element to get.\n * @param defaultLang The default value of the `lang` attribute.\n * @returns The `lang` attribute value.\n */\nexport function getLang(element: VElement | undefined): string | null {\n const langAttr = element?.startTag.attributes.find(isLang)\n const lang = langAttr?.value?.value\n return lang || null\n}\n/**\n * Check whether the given script element has `lang=\"ts\"`.\n * @param element The element to check.\n * @returns The given script element has `lang=\"ts\"`.\n */\nexport function isTSLang(element: VElement | undefined): boolean {\n const lang = getLang(element)\n // See https://github.com/vuejs/core/blob/28e30c819df5e4fc301c98f7be938fa13e8be3bc/packages/compiler-sfc/src/compileScript.ts#L179\n return lang === \"ts\" || lang === \"tsx\"\n}\n\nexport type GenericDirective = VDirective & {\n value: VExpressionContainer & {\n expression: VGenericExpression\n }\n}\n\n/**\n * Find `generic` directive from given `<script>` element\n */\nexport function findGenericDirective(\n element: VElement,\n): GenericDirective | null {\n return (\n element.startTag.attributes.find(\n (attr): attr is GenericDirective =>\n attr.directive &&\n attr.value?.expression?.type === \"VGenericExpression\",\n ) || null\n )\n}\n","import type { ESLintExtendedProgram, ESLintProgram } from \"../ast/index\"\n\n/**\n * The type of basic ESLint custom parser.\n * e.g. espree\n */\nexport type BasicParserObject<R = ESLintProgram> = {\n parse(code: string, options: any): R\n parseForESLint: undefined\n}\n/**\n * The type of ESLint custom parser enhanced for ESLint.\n * e.g. @babel/eslint-parser, @typescript-eslint/parser\n */\nexport type EnhancedParserObject<R = ESLintExtendedProgram> = {\n parseForESLint(code: string, options: any): R\n parse: undefined\n}\n\n/**\n * The type of ESLint (custom) parsers.\n */\nexport type ParserObject<R1 = ESLintExtendedProgram, R2 = ESLintProgram> =\n | EnhancedParserObject<R1>\n | BasicParserObject<R2>\n\nexport function isParserObject<R1, R2>(\n value: ParserObject<R1, R2> | {} | undefined | null,\n): value is ParserObject<R1, R2> {\n return isEnhancedParserObject(value) || isBasicParserObject(value)\n}\nexport function isEnhancedParserObject<R>(\n value: EnhancedParserObject<R> | {} | undefined | null,\n): value is EnhancedParserObject<R> {\n return Boolean(value && typeof (value as any).parseForESLint === \"function\")\n}\nexport function isBasicParserObject<R>(\n value: BasicParserObject<R> | {} | undefined | null,\n): value is BasicParserObject<R> {\n return Boolean(value && typeof (value as any).parse === \"function\")\n}\n","import * as path from \"path\"\nimport type { VDocumentFragment } from \"../ast/index\"\nimport type { CustomTemplateTokenizerConstructor } from \"../html/custom-tokenizer\"\nimport { getLang, isScriptElement, isScriptSetupElement } from \"./ast-utils\"\nimport type { ParserObject } from \"./parser-object\"\nimport { isParserObject } from \"./parser-object\"\n\nexport interface ParserOptions {\n // vue-eslint-parser options\n parser?:\n | boolean\n | string\n | ParserObject\n | Record<string, string | ParserObject | undefined>\n vueFeatures?: {\n interpolationAsNonHTML?: boolean // default true\n filter?: boolean // default true\n styleCSSVariableInjection?: boolean // default true\n customMacros?: string[]\n }\n\n // espree options\n ecmaVersion?: number | \"latest\"\n sourceType?: \"script\" | \"module\"\n ecmaFeatures?: { [key: string]: any }\n\n // @typescript-eslint/parser options\n jsxPragma?: string\n jsxFragmentName?: string | null\n lib?: string[]\n\n project?: string | string[]\n projectService?: boolean | ProjectServiceOptions\n projectFolderIgnoreList?: string[]\n tsconfigRootDir?: string\n extraFileExtensions?: string[]\n warnOnUnsupportedTypeScriptVersion?: boolean\n\n // set by eslint\n filePath?: string\n // enables by eslint\n comment?: boolean\n loc?: boolean\n range?: boolean\n tokens?: boolean\n\n // From ESLint\n eslintScopeManager?: boolean\n\n // others\n // [key: string]: any\n\n templateTokenizer?: Record<\n string,\n string | CustomTemplateTokenizerConstructor | undefined\n >\n}\n\ninterface ProjectServiceOptions {\n allowDefaultProject?: string[]\n defaultProject?: string\n loadTypeScriptPlugins?: boolean\n maximumDefaultProjectFileMatchCount_THIS_WILL_SLOW_DOWN_LINTING?: number\n}\n\nexport function isSFCFile(parserOptions: ParserOptions) {\n if (parserOptions.filePath === \"<input>\") {\n return true\n }\n return path.extname(parserOptions.filePath || \"unknown.vue\") === \".vue\"\n}\n\n/**\n * Gets the script parser name from the given parser lang.\n */\nexport function getScriptParser(\n parser:\n | boolean\n | string\n | ParserObject\n | Record<string, string | ParserObject | undefined>\n | undefined,\n getParserLang: () => string | null | Iterable<string | null>,\n): string | ParserObject | undefined {\n if (isParserObject(parser)) {\n return parser\n }\n if (parser && typeof parser === \"object\") {\n const parserLang = getParserLang()\n const parserLangs =\n parserLang == null\n ? []\n : typeof parserLang === \"string\"\n ? [parserLang]\n : parserLang\n for (const lang of parserLangs) {\n const parserForLang = lang && parser[lang]\n if (\n typeof parserForLang === \"string\" ||\n isParserObject(parserForLang)\n ) {\n return parserForLang\n }\n }\n return parser.js\n }\n return typeof parser === \"string\" ? parser : undefined\n}\n\nexport function getParserLangFromSFC(doc: VDocumentFragment): string | null {\n if (doc) {\n const scripts = doc.children.filter(isScriptElement)\n const script =\n (scripts.length === 2 && scripts.find(isScriptSetupElement)) ||\n scripts[0]\n if (script) {\n return getLang(script)\n }\n }\n return null\n}\n","import * as escope from \"eslint-scope\"\nimport { lte } from \"semver\"\nimport path from \"path\"\nimport { createRequire } from \"module\"\n\ntype ESLintScope = typeof escope & {\n version: string\n}\nlet escopeCache: ESLintScope | null = null\n\n/**\n * Load the newest `eslint-scope` from the loaded ESLint or dependency.\n */\nexport function getEslintScope(): ESLintScope {\n return escopeCache ?? (escopeCache = getNewest())\n}\n\n/**\n * Load the newest `eslint-scope` from the dependency.\n */\nfunction getNewest(): ESLintScope {\n let newest = escope\n const userEscope = getEslintScopeFromUser()\n if (userEscope.version != null && lte(newest.version, userEscope.version)) {\n newest = userEscope\n }\n return newest\n}\n\n/**\n * Load `eslint-scope` from the user dir.\n */\nfunction getEslintScopeFromUser(): ESLintScope {\n try {\n const cwd = process.cwd()\n const relativeTo = path.join(cwd, \"__placeholder__.js\")\n return createRequire(relativeTo)(\"eslint-scope\")\n } catch {\n return escope\n }\n}\n","import type { ParserOptions } from \"../common/parser-options\"\n// @ts-expect-error -- ignore\nimport * as dependencyEspree from \"espree\"\nimport { lte } from \"semver\"\nimport path from \"path\"\nimport type { BasicParserObject } from \"./parser-object\"\nimport { createRequire } from \"module\"\n\ntype Espree = BasicParserObject & {\n latestEcmaVersion: number\n version: string\n}\nlet espreeCache: Espree | null = null\n\n/**\n * Gets the espree that the given ecmaVersion can parse.\n */\nexport function getEspree(): Espree {\n return espreeCache ?? (espreeCache = getNewestEspree())\n}\n\nexport function getEcmaVersionIfUseEspree(\n parserOptions: ParserOptions,\n): number | undefined {\n if (parserOptions.parser != null && parserOptions.parser !== \"espree\") {\n return undefined\n }\n\n if (\n parserOptions.ecmaVersion === \"latest\" ||\n parserOptions.ecmaVersion == null\n ) {\n return getDefaultEcmaVersion()\n }\n return normalizeEcmaVersion(parserOptions.ecmaVersion)\n}\n\n/**\n * Load `espree` from the user dir.\n */\nfunction getEspreeFromUser(): Espree {\n try {\n const cwd = process.cwd()\n const relativeTo = path.join(cwd, \"__placeholder__.js\")\n return createRequire(relativeTo)(\"espree\")\n } catch {\n return dependencyEspree\n }\n}\n\n/**\n * Load the newest `espree` from the dependency.\n */\nfunction getNewestEspree(): Espree {\n let newest = dependencyEspree\n const userEspree = getEspreeFromUser()\n if (userEspree.version != null && lte(newest.version, userEspree.version)) {\n newest = userEspree\n }\n return newest\n}\n\nfunction getDefaultEcmaVersion(): number {\n return getLatestEcmaVersion(getEspree())\n}\n\n/**\n * Normalize ECMAScript version\n */\nfunction normalizeEcmaVersion(version: number) {\n if (version > 5 && version < 2015) {\n return version + 2009\n }\n return version\n}\n\nfunction getLatestEcmaVersion(espree: Espree) {\n return normalizeEcmaVersion(espree.latestEcmaVersion)\n}\n","export const DEFAULT_ECMA_VERSION = \"latest\"\n\nexport const ANALYZE_SCOPE_DEFAULT_ECMA_VERSION = 2022\n","/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2017 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\nimport type * as escopeTypes from \"eslint-scope\"\nimport type { ParserOptions } from \"../common/parser-options\"\nimport type {\n ESLintIdentifier,\n ESLintProgram,\n Reference,\n Variable,\n} from \"../ast/index\"\nimport { getFallbackKeys } from \"../ast/index\"\nimport { getEslintScope } from \"../common/eslint-scope\"\nimport { getEcmaVersionIfUseEspree } from \"../common/espree\"\nimport { ANALYZE_SCOPE_DEFAULT_ECMA_VERSION } from \"../script-setup/parser-options\"\n\ntype ParserResult = {\n ast: ESLintProgram\n scopeManager?: escopeTypes.ScopeManager\n}\n\n/**\n * Check whether the given reference is unique in the belonging array.\n * @param reference The current reference to check.\n * @param index The index of the reference.\n * @param references The belonging array of the reference.\n */\nfunction isUnique(\n reference: escopeTypes.Reference,\n index: number,\n references: escopeTypes.Reference[],\n): boolean {\n return (\n index === 0 || reference.identifier !== references[index - 1].identifier\n )\n}\n\n/**\n * Check whether a given variable has that definition.\n * @param variable The variable to check.\n * @returns `true` if the variable has that definition.\n */\nfunction hasDefinition(variable: escopeTypes.Variable): boolean {\n return variable.defs.length >= 1\n}\n\n/**\n * Transform the given reference object.\n * @param reference The source reference object.\n * @returns The transformed reference object.\n */\nfunction transformReference(reference: escopeTypes.Reference): Reference {\n const ret: Reference = {\n id: reference.identifier as ESLintIdentifier,\n mode: reference.isReadOnly()\n ? \"r\"\n : reference.isWriteOnly()\n ? \"w\"\n : /* otherwise */ \"rw\",\n variable: null,\n isValueReference: reference.isValueReference,\n isTypeReference: reference.isTypeReference,\n }\n Object.defineProperty(ret, \"variable\", { enumerable: false })\n\n return ret\n}\n\n/**\n * Transform the given variable object.\n * @param variable The source variable object.\n * @returns The transformed variable object.\n */\nfunction transformVariable(\n variable: escopeTypes.Variable,\n kind: Variable[\"kind\"],\n): Variable {\n const ret: Variable = {\n id: variable.defs[0].name as ESLintIdentifier,\n kind,\n references: [],\n }\n Object.defineProperty(ret, \"references\", { enumerable: false })\n\n return ret\n}\n\n/**\n * Get the `for` statement scope.\n * @param scope The global scope.\n * @returns The `for` statement scope.\n */\nfunction getForScope(scope: escopeTypes.Scope): escopeTypes.Scope {\n const child = scope.childScopes[0]\n return child.block === scope.block ? child.childScopes[0] : child\n}\n\nexport function analyzeScope(\n ast: ESLintProgram,\n parserOptions: ParserOptions,\n): escopeTypes.ScopeManager {\n const ecmaVersion =\n getEcmaVersionIfUseEspree(parserOptions) ??\n ANALYZE_SCOPE_DEFAULT_ECMA_VERSION\n const ecmaFeatures = parserOptions.ecmaFeatures ?? {}\n const sourceType = parserOptions.sourceType ?? \"script\"\n const result = getEslintScope().analyze(ast, {\n ignoreEval: true,\n nodejsScope: false,\n impliedStrict: ecmaFeatures.impliedStrict,\n ecmaVersion,\n sourceType,\n fallback: getFallbackKeys,\n })\n\n return result\n}\n\n/**\n * Analyze the scope of the given AST.\n * @param {ParserResult} parserResult The parser result to analyze.\n * @param parserOptions\n */\nfunction analyze(\n parserResult: ParserResult,\n parserOptions: ParserOptions,\n): escopeTypes.Scope {\n const scopeManager =\n parserResult.scopeManager ||\n analyzeScope(parserResult.ast, parserOptions)\n return scopeManager.globalScope\n}\n\n/**\n * Analyze the external references of the given AST.\n * @param {ParserResult} parserResult The parser result to analyze.\n * @returns {Reference[]} The reference objects of external references.\n */\nexport function analyzeExternalReferences(\n parserResult: ParserResult,\n parserOptions: ParserOptions,\n): Reference[] {\n const scope = analyze(parserResult, parserOptions)\n return scope.through.filter(isUnique).map(transformReference)\n}\n\n/**\n * Analyze the external references of the given AST.\n * @param {ParserResult} parserResult The parser result to analyze.\n * @returns {Reference[]} The reference objects of external references.\n */\nexport function analyzeVariablesAndExternalReferences(\n parserResult: ParserResult,\n kind: Variable[\"kind\"],\n parserOptions: ParserOptions,\n): { variables: Variable[]; references: Reference[] } {\n const scope = analyze(parserResult, parserOptions)\n return {\n variables: getForScope(scope)\n .variables.filter(hasDefinition)\n .map((v) => transformVariable(v, kind)),\n references: scope.through.filter(isUnique).map(transformReference),\n }\n}\n","import type {\n ESLintExtendedProgram,\n ESLintNode,\n HasLocation,\n LocationRange,\n Node,\n ParseError,\n} from \"../ast/index\"\nimport { traverseNodes } from \"../ast/index\"\nimport type { LocationCalculator } from \"./location-calculator\"\n\n/**\n * Do post-process of parsing an expression.\n *\n * 1. Set `node.parent`.\n * 2. Fix `node.range` and `node.loc` for HTML entities.\n *\n * @param result The parsing result to modify.\n * @param locationCalculator The location calculator to modify.\n */\nexport function fixLocations(\n result: ESLintExtendedProgram,\n locationCalculator: LocationCalculator,\n): void {\n fixNodeLocations(result.ast, result.visitorKeys, locationCalculator)\n\n for (const token of result.ast.tokens ?? []) {\n fixLocation(token, locationCalculator)\n }\n for (const comment of result.ast.comments ?? []) {\n fixLocation(comment, locationCalculator)\n }\n}\n\nexport function fixNodeLocations(\n rootNode: ESLintNode,\n visitorKeys: ESLintExtendedProgram[\"visitorKeys\"],\n locationCalculator: LocationCalculator,\n): void {\n // There are cases which the same node instance appears twice in the tree.\n // E.g. `let {a} = {}` // This `a` appears twice at `Property#key` and `Property#value`.\n const traversed = new Map<Node | number[] | LocationRange, Node>()\n\n traverseNodes(rootNode, {\n visitorKeys,\n\n enterNode(node, parent) {\n if (!traversed.has(node)) {\n traversed.set(node, node)\n node.parent = parent\n\n // `babel-eslint@8` has shared `Node#range` with multiple nodes.\n // See also: https://github.com/vuejs/eslint-plugin-vue/issues/208\n if (traversed.has(node.range)) {\n if (!traversed.has(node.loc)) {\n // However, `Node#loc` may not be shared.\n // See also: https://github.com/vuejs/vue-eslint-parser/issues/84\n node.loc.start = locationCalculator.getLocFromIndex(\n node.range[0],\n )\n node.loc.end = locationCalculator.getLocFromIndex(\n node.range[1],\n )\n traversed.set(node.loc, node)\n } else if (node.start != null || node.end != null) {\n const traversedNode = traversed.get(node.range)!\n if (traversedNode.type === node.type) {\n node.start = traversedNode.start\n node.end = traversedNode.end\n }\n }\n } else {\n fixLocation(node, locationCalculator)\n traversed.set(node.range, node)\n traversed.set(node.loc, node)\n }\n }\n },\n\n leaveNode() {\n // Do nothing.\n },\n })\n}\n\n/**\n * Modify the location information of the given node with using the base offset and gaps of this calculator.\n * @param node The node to modify their location.\n */\nexport function fixLocation<T extends HasLocation>(\n node: T,\n locationCalculator: LocationCalculator,\n): T {\n const range = node.range\n const loc = node.loc\n const d0 = locationCalculator.getFixOffset(range[0], \"start\")\n const d1 = locationCalculator.getFixOffset(range[1], \"end\")\n\n if (d0 !== 0) {\n range[0] += d0\n if (node.start != null) {\n node.start += d0\n }\n loc.start = locationCalculator.getLocFromIndex(range[0])\n }\n if (d1 !== 0) {\n range[1] += d1\n if (node.end != null) {\n node.end += d0\n }\n loc.end = locationCalculator.getLocFromIndex(range[1])\n }\n\n return node\n}\n\n/**\n * Modify the location information of the given error with using the base offset and gaps of this calculator.\n * @param error The error to modify their location.\n */\nexport function fixErrorLocation(\n error: ParseError,\n locationCalculator: LocationCalculator,\n) {\n const diff = locationCalculator.getFixOffset(error.index, \"start\")\n\n error.index += diff\n\n const loc = locationCalculator.getLocFromIndex(error.index)\n error.lineNumber = loc.line\n error.column = loc.column\n}\n","import type {\n ESLintExtendedProgram,\n ESLintProgram,\n HasLocation,\n Token,\n VElement,\n VGenericExpression,\n} from \"../ast/index\"\nimport type { TSESTree } from \"@typescript-eslint/utils\"\nimport type {\n Reference,\n Scope,\n Variable,\n ScopeManager,\n VariableDefinition,\n} from \"eslint-scope\"\nimport { findGenericDirective } from \"../common/ast-utils\"\n\nexport type GenericProcessInfo = {\n node: VGenericExpression\n defineTypes: {\n node: VGenericExpression[\"params\"][number]\n define: string\n }[]\n postprocess: (context: GenericPostprocessContext) => void\n}\nexport type GenericPostprocessContext = {\n result: ESLintExtendedProgram\n getTypeBlock?: (node: ESLintProgram) => {\n body: ESLintProgram[\"body\"]\n }\n isRemoveTarget: (nodeOrToken: HasLocation) => boolean\n getTypeDefScope: (scopeManager: ScopeManager) => Scope\n}\nexport function extractGeneric(element: VElement): GenericProcessInfo | null {\n const genericAttr = findGenericDirective(element)\n if (!genericAttr) {\n return null\n }\n const genericNode = genericAttr.value.expression\n const defineTypes = genericNode.params.map((t, i) => ({\n node: t,\n define: `type ${t.name.name} = ${getConstraint(\n t,\n genericNode.rawParams[i],\n )}`,\n }))\n\n return {\n node: genericNode,\n defineTypes,\n postprocess({ result, getTypeBlock, isRemoveTarget, getTypeDefScope }) {\n const node = getTypeBlock?.(result.ast) ?? result.ast\n removeTypeDeclarations(node, isRemoveTarget)\n if (result.ast.tokens) {\n removeTypeDeclarationTokens(result.ast.tokens, isRemoveTarget)\n }\n if (result.ast.comments) {\n removeTypeDeclarationTokens(result.ast.comments, isRemoveTarget)\n }\n if (result.scopeManager) {\n const typeDefScope = getTypeDefScope(result.scopeManager)\n restoreScope(result.scopeManager, typeDefScope, isRemoveTarget)\n }\n },\n }\n\n function removeTypeDeclarations(\n node: {\n body: ESLintProgram[\"body\"]\n },\n isRemoveTarget: (nodeOrToken: HasLocation) => boolean,\n ) {\n for (let index = node.body.length - 1; index >= 0; index--) {\n if (isRemoveTarget(node.body[index])) {\n node.body.splice(index, 1)\n }\n }\n }\n\n function removeTypeDeclarationTokens(\n tokens: Token[],\n isRemoveTarget: (nodeOrToken: HasLocation) => boolean,\n ) {\n for (let index = tokens.length - 1; index >= 0; index--) {\n if (isRemoveTarget(tokens[index])) {\n tokens.splice(index, 1)\n }\n }\n }\n\n function restoreScope(\n scopeManager: ScopeManager,\n typeDefScope: Scope,\n isRemoveTarget: (nodeOrToken: HasLocation) => boolean,\n ) {\n // eslint-disable-next-line unicorn/no-useless-spread -- The original array is mutated\n for (const variable of [...typeDefScope.variables]) {\n let def = variable.defs.find((d) =>\n isRemoveTarget(d.name as HasLocation),\n )\n while (def) {\n removeVariableDef(variable, def, typeDefScope)\n def = variable.defs.find((d) =>\n isRemoveTarget(d.name as HasLocation),\n )\n }\n }\n // eslint-disable-next-line unicorn/no-useless-spread -- The original array is mutated\n for (const reference of [...typeDefScope.references]) {\n if (isRemoveTarget(reference.identifier as HasLocation)) {\n removeReference(reference, typeDefScope)\n }\n }\n\n // eslint-disable-next-line unicorn/no-useless-spread -- The original array is mutated\n for (const scope of [...scopeManager.scopes]) {\n if (isRemoveTarget(scope.block as HasLocation)) {\n removeScope(scopeManager, scope)\n }\n }\n }\n}\n\nfunction getConstraint(node: TSESTree.TSTypeParameter, rawParam: string) {\n if (!node.constraint) {\n return \"unknown\"\n }\n let index = rawParam.indexOf(node.name.name) + node.name.name.length\n let startIndex: number | null = null\n while (index < rawParam.length) {\n if (startIndex == null) {\n if (rawParam.startsWith(\"extends\", index)) {\n startIndex = index = index + 7\n continue\n }\n } else if (rawParam[index] === \"=\") {\n if (rawParam[index + 1] === \">\") {\n // Arrow function type\n index += 2\n continue\n }\n return rawParam.slice(startIndex, index)\n }\n if (rawParam.startsWith(\"//\", index)) {\n // Skip line comment\n const lfIndex = rawParam.indexOf(\"\\n\", index)\n if (lfIndex >= 0) {\n index = lfIndex + 1\n continue\n }\n return \"unknown\"\n }\n if (rawParam.startsWith(\"/*\", index)) {\n // Skip block comment\n const endIndex = rawParam.indexOf(\"*/\", index)\n if (endIndex >= 0) {\n index = endIndex + 2\n continue\n }\n return \"unknown\"\n }\n index++\n }\n if (startIndex == null) {\n return \"unknown\"\n }\n\n return rawParam.slice(startIndex)\n}\n\n/** Remove variable def */\nfunction removeVariableDef(\n variable: Variable,\n def: VariableDefinition,\n scope: Scope,\n): void {\n const defIndex = variable.defs.indexOf(def)\n if (defIndex < 0) {\n return\n }\n variable.defs.splice(defIndex, 1)\n if (variable.defs.length === 0) {\n // Remove variable\n referencesToThrough(variable.references, scope)\n variable.references.forEach((r) => {\n if ((r as any).init) {\n ;(r as any).init = false\n }\n r.resolved = null\n })\n scope.variables.splice(scope.variables.indexOf(variable), 1)\n const name = variable.name\n if (variable === scope.set.get(name)) {\n scope.set.delete(name)\n }\n } else {\n const idIndex = variable.identifiers.indexOf(def.name)\n if (idIndex >= 0) {\n variable.identifiers.splice(idIndex, 1)\n }\n }\n}\n\n/** Move reference to through */\nfunction referencesToThrough(references: Reference[], baseScope: Scope) {\n let scope: Scope | null = baseScope\n while (scope) {\n addAllReferences(scope.through, references)\n scope = scope.upper\n }\n}\n\n/**\n * Add all references to array\n */\nfunction addAllReferences(list: Reference[], elements: Reference[]): void {\n list.push(...elements)\n list.sort((a, b) => a.identifier.range![0] - b.identifier.range![0])\n}\n\n/** Remove reference */\nfunction removeReference(reference: Reference, baseScope: Scope): void {\n if (reference.resolved) {\n if (\n reference.resolved.defs.some((d) => d.name === reference.identifier)\n ) {\n // remove var\n const varIndex = baseScope.variables.indexOf(reference.resolved)\n if (varIndex >= 0) {\n baseScope.variables.splice(varIndex, 1)\n }\n const name = reference.identifier.name\n if (reference.resolved === baseScope.set.get(name)) {\n baseScope.set.delete(name)\n }\n } else {\n const refIndex = reference.resolved.references.indexOf(reference)\n if (refIndex >= 0) {\n reference.resolved.references.splice(refIndex, 1)\n }\n }\n }\n\n let scope: Scope | null = baseScope\n while (scope) {\n const refIndex = scope.references.indexOf(reference)\n if (refIndex >= 0) {\n scope.references.splice(refIndex, 1)\n }\n const throughIndex = scope.through.indexOf(reference)\n if (throughIndex >= 0) {\n scope.through.splice(throughIndex, 1)\n }\n scope = scope.upper\n }\n}\n\n/** Remove scope */\nfunction removeScope(scopeManager: ScopeManager, scope: Scope): void {\n for (const childScope of scope.childScopes) {\n removeScope(scopeManager, childScope)\n }\n\n while (scope.references[0]) {\n removeReference(scope.references[0], scope)\n }\n const upper = scope.upper\n if (upper) {\n const index = upper.childScopes.indexOf(scope)\n if (index >= 0) {\n upper.childScopes.splice(index, 1)\n }\n }\n const index = scopeManager.scopes.indexOf(scope)\n if (index >= 0) {\n scopeManager.scopes.splice(index, 1)\n }\n}\n","/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2017 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\nimport { sortedIndexBy } from \"../utils/utils\"\nimport type {\n ESLintArrayExpression,\n ESLintArrayPattern,\n ESLintCallExpression,\n ESLintExpression,\n ESLintExpressionStatement,\n ESLintExtendedProgram,\n ESLintForInStatement,\n ESLintForOfStatement,\n ESLintFunctionExpression,\n ESLintIdentifier,\n ESLintUnaryExpression,\n ESLintVariableDeclaration,\n HasLocation,\n Node,\n Reference,\n Token,\n Variable,\n VElement,\n VFilter,\n VFilterSequenceExpression,\n VForExpression,\n VOnExpression,\n VSlotScopeExpression,\n OffsetRange,\n VGenericExpression,\n} from \"../ast/index\"\nimport { ParseError } from \"../ast/index\"\nimport { debug } from \"../common/debug\"\nimport type {\n LocationCalculator,\n LocationCalculatorForHtml,\n} from \"../common/location-calculator\"\nimport {\n analyzeExternalReferences,\n analyzeVariablesAndExternalReferences,\n} from \"./scope-analyzer\"\nimport { getEcmaVersionIfUseEspree, getEspree } from \"../common/espree\"\nimport type { ParserOptions } from \"../common/parser-options\"\nimport {\n fixErrorLocation,\n fixLocation,\n fixLocations,\n} from \"../common/fix-locations\"\nimport { DEFAULT_ECMA_VERSION } from \"../script-setup/parser-options\"\nimport type { LinesAndColumns } from \"../common/lines-and-columns\"\nimport type { ParserObject } from \"../common/parser-object\"\nimport { isEnhancedParserObject, isParserObject } from \"../common/parser-object\"\nimport type { TSESTree } from \"@typescript-eslint/utils\"\nimport type { GenericProcessInfo } from \"./generic\"\nimport { extractGeneric } from \"./generic\"\n\n// [1] = aliases.\n// [2] = delimiter.\n// [3] = iterator.\nconst ALIAS_ITERATOR = /^([\\s\\S]*?(?:\\s|\\)))(\\bin\\b|\\bof\\b)([\\s\\S]*)$/u\nconst PARENS = /^(\\s*\\()([\\s\\S]*?)(\\)\\s*)$/u\nconst DUMMY_PARENT: any = {}\n\n// Like Vue, it judges whether it is a function expression or not.\n// https://github.com/vuejs/core/blob/fef2acb2049fce3407dff17fe8af1836b97dfd73/packages/compiler-core/src/transforms/vOn.ts#L19\nconst IS_FUNCTION_EXPRESSION =\n /^\\s*([\\w$_]+|(async\\s*)?\\([^)]*?\\))\\s*(:[^=]+)?=>|^\\s*(async\\s+)?function(?:\\s+[\\w$]+)?\\s*\\(/u\n// ^^^^^^^ omit paren argument ^^^^^^^^ function keyword\n// ^^^^^ <--- async keyword (optional) ---> ^^^^^\n// ^^------^^ arguments with parens ^^^^^^ named function (optional)\n// ^^^^^^^^^ return types (optional)\n// ^^ arrow ^^ opening paren\n\nconst IS_SIMPLE_PATH =\n /^[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*|\\['[^']*?'\\]|\\[\"[^\"]*?\"\\]|\\[\\d+\\]|\\[[A-Za-z_$][\\w$]*\\])*$/u\n\n/**\n * Parse the alias and iterator of 'v-for' directive values.\n * @param code The code to parse.\n * @returns The parsed result.\n */\nfunction processVForAliasAndIterator(code: string): {\n aliases: string\n hasParens: boolean\n delimiter: string\n iterator: string\n aliasesWithBrackets: string\n} {\n const match = ALIAS_ITERATOR.exec(code)\n if (match != null) {\n const aliases = match[1]\n const parenMatch = PARENS.exec(aliases)\n return {\n aliases,\n hasParens: Boolean(parenMatch),\n aliasesWithBrackets: parenMatch\n ? `${parenMatch[1].slice(0, -1)}[${\n parenMatch[2]\n }]${parenMatch[3].slice(1)}`\n : `[${aliases.slice(0, -1)}]`,\n delimiter: match[2] || \"\",\n iterator: match[3],\n }\n }\n return {\n aliases: \"\",\n hasParens: false,\n aliasesWithBrackets: \"\",\n delimiter: \"\",\n iterator: code,\n }\n}\n\n/**\n * Get the comma token before a given node.\n * @param tokens The token list.\n * @param node The node to get the comma before this node.\n * @returns The comma token.\n */\nfunction getCommaTokenBeforeNode(tokens: Token[], node: Node): Token | null {\n let tokenIndex = sortedIndexBy(\n tokens as { range: OffsetRange }[],\n { range: node.range },\n (t) => t.range[0],\n )\n\n while (tokenIndex >= 0) {\n const token = tokens[tokenIndex]\n if (token.type === \"Punctuator\" && token.value === \",\") {\n return token\n }\n tokenIndex -= 1\n }\n\n return null\n}\n\n/**\n * Throw syntax error for empty.\n * @param locationCalculator The location calculator to get line/column.\n */\nfunction throwEmptyError(\n locationCalculator: LocationCalculatorForHtml,\n expected: string,\n): never {\n const loc = locationCalculator.getLocation(0)\n const err = new ParseError(\n `Expected to be ${expected}, but got empty.`,\n undefined,\n 0,\n loc.line,\n loc.column,\n )\n fixErrorLocation(err, locationCalculator)\n\n throw err\n}\n\n/**\n * Throw syntax error for unexpected token.\n * @param locationCalculator The location calculator to get line/column.\n * @param name The token name.\n * @param token The token object to get that location.\n */\nfunction throwUnexpectedTokenError(name: string, token: HasLocation): never {\n const err = new ParseError(\n `Unexpected token '${name}'.`,\n undefined,\n token.range[0],\n token.loc.start.line,\n token.loc.start.column,\n )\n\n throw err\n}\n\n/**\n * Throw syntax error of outside of code.\n * @param locationCalculator The location calculator to get line/column.\n */\nfunction throwErrorAsAdjustingOutsideOfCode(\n err: any,\n code: string,\n locationCalculator: LocationCalculatorForHtml,\n): never {\n if (ParseError.isParseError(err)) {\n const endOffset = locationCalculator.getOffsetWithGap(code.length)\n if (err.index >= endOffset) {\n err.message = \"Unexpected end of expression.\"\n }\n }\n\n throw err\n}\n\n/**\n * Parse the given source code.\n *\n * @param code The source code to parse.\n * @param locationCalculator The location calculator for fixLocations.\n * @param parserOptions The parser options.\n * @returns The result of parsing.\n */\nexport function parseScriptFragment(\n code: string,\n locationCalculator: LocationCalculator,\n parserOptions: ParserOptions,\n): ESLintExtendedProgram {\n return parseScriptFragmentWithOption(\n code,\n locationCalculator,\n parserOptions,\n )\n}\n\n/**\n * Parse the given source code.\n *\n * @param code The source code to parse.\n * @param locationCalculator The location calculator for fixLocations.\n * @param parserOptions The parser options.\n * @param processOptions The process options.\n * @returns The result of parsing.\n */\nfunction parseScriptFragmentWithOption(\n code: string,\n locationCalculator: LocationCalculator,\n parserOptions: ParserOptions,\n processOptions?: {\n preFixLocationProcess?: (result: ESLintExtendedProgram) => void\n },\n): ESLintExtendedProgram {\n try {\n const result = parseScript(code, parserOptions)\n processOptions?.preFixLocationProcess?.(result)\n fixLocations(result, locationCalculator)\n return result\n } catch (err) {\n const perr = ParseError.normalize(err)\n if (perr) {\n fixErrorLocation(perr, locationCalculator)\n throw perr\n }\n throw err\n }\n}\n\nconst validDivisionCharRE = /[\\w).+\\-_$\\]]/u\n\n/**\n * This is a fork of https://github.com/vuejs/vue/blob/2686818beb5728e3b7aa22f47a3b3f0d39d90c8e/src/compiler/parser/filter-parser.js\n * @param exp the expression to process filters.\n */\n//eslint-disable-next-line complexity\nfunction splitFilters(exp: string): string[] {\n const result: string[] = []\n let inSingle = false\n let inDouble = false\n let inTemplateString = false\n let inRegex = false\n let curly = 0\n let square = 0\n let paren = 0\n let lastFilterIndex = 0\n let c = 0\n let prev = 0\n\n for (let i = 0; i < exp.length; i++) {\n prev = c\n c = exp.charCodeAt(i)\n if (inSingle) {\n if (c === 0x27 && prev !== 0x5c) {\n inSingle = false\n }\n } else if (inDouble) {\n if (c === 0x22 && prev !== 0x5c) {\n inDouble = false\n }\n } else if (inTemplateString) {\n if (c === 0x60 && prev !== 0x5c) {\n inTemplateString = false\n }\n } else if (inRegex) {\n if (c === 0x2f && prev !== 0x5c) {\n inRegex = false\n }\n } else if (\n c === 0x7c && // pipe\n exp.charCodeAt(i + 1) !== 0x7c &&\n exp.charCodeAt(i - 1) !== 0x7c &&\n !curly &&\n !square &&\n !paren\n ) {\n result.push(exp.slice(lastFilterIndex, i))\n lastFilterIndex = i + 1\n } else {\n switch (c) {\n case 0x22: // \"\n inDouble = true\n break\n case 0x27: // '\n inSingle = true\n break\n case 0x60: // `\n inTemplateString = true\n break\n case 0x28: // (\n paren++\n break\n case 0x29: // )\n paren--\n break\n case 0x5b: // [\n square++\n break\n case 0x5d: // ]\n square--\n break\n case 0x7b: // {\n curly++\n break\n case 0x7d: // }\n curly--\n break\n // no default\n }\n if (c === 0x2f) {\n // /\n let j = i - 1\n let p\n // find first non-whitespace prev char\n for (; j >= 0; j--) {\n p = exp.charAt(j)\n if (p !== \" \") {\n break\n }\n }\n if (!p || !validDivisionCharRE.test(p)) {\n inRegex = true\n }\n }\n }\n }\n\n result.push(exp.slice(lastFilterIndex))\n\n return result\n}\n\n/**\n * Parse the source code of inline scripts.\n * @param code The source code of inline scripts.\n * @param locationCalculator The location calculator for the inline script.\n * @param parserOptions The parser options.\n * @returns The result of parsing.\n */\nfunction parseExpressionBody(\n code: string,\n locationCalculator: LocationCalculatorForHtml,\n parserOptions: ParserOptions,\n allowEmpty = false,\n): ExpressionParseResult<ESLintExpression> {\n debug('[script] parse expression: \"0(%s)\"', code)\n\n try {\n const result = parseScriptFragment(\n `0(${code})`,\n locationCalculator.getSubCalculatorShift(-2),\n parserOptions,\n )\n const { ast } = result\n const tokens = ast.tokens ?? []\n const comments = ast.comments ?? []\n const references = analyzeExternalReferences(result, parserOptions)\n const statement = ast.body[0] as ESLintExpressionStatement\n const callExpression = statement.expression as ESLintCallExpression\n const expression = callExpression.arguments[0]\n\n if (!allowEmpty && !expression) {\n return throwEmptyError(locationCalculator, \"an expression\")\n }\n if (expression?.type === \"SpreadElement\") {\n return throwUnexpectedTokenError(\"...\", expression)\n }\n if (callExpression.arguments[1]) {\n const node = callExpression.arguments[1]\n return throwUnexpectedTokenError(\n \",\",\n getCommaTokenBeforeNode(tokens, node) || node,\n )\n }\n\n // Remove parens.\n tokens.shift()\n tokens.shift()\n tokens.pop()\n\n return { expression, tokens, comments, references, variables: [] }\n } catch (err) {\n return throwErrorAsAdjustingOutsideOfCode(err, code, locationCalculator)\n }\n}\n\n/**\n * Parse the source code of inline scripts.\n * @param code The source code of inline scripts.\n * @param locationCalculator The location calculator for the inline script.\n * @param parserOptions The parser options.\n * @returns The result of parsing.\n */\nfunction parseFilter(\n code: string,\n locationCalculator: LocationCalculatorForHtml,\n parserOptions: ParserOptions,\n): ExpressionParseResult<VFilter> | null {\n debug('[script] parse filter: \"%s\"', code)\n\n try {\n const expression: VFilter = {\n type: \"VFilter\",\n parent: null as any,\n range: [0, 0],\n loc: {} as any,\n callee: null as any,\n arguments: [],\n }\n const tokens: Token[] = []\n const comments: Token[] = []\n const references: Reference[] = []\n\n // Parse the callee.\n const paren = code.indexOf(\"(\")\n const calleeCode = paren === -1 ? code : code.slice(0, paren)\n const argsCode = paren === -1 ? null : code.slice(paren)\n\n // Parse the callee.\n if (calleeCode.trim()) {\n const spaces = /^\\s*/u.exec(calleeCode)![0]\n const subCalculator = locationCalculator.getSubCalculatorShift(\n spaces.length,\n )\n const { ast } = parseScriptFragment(\n `\"${calleeCode.trim()}\"`,\n subCalculator,\n parserOptions,\n )\n const statement = ast.body[0] as ESLintExpressionStatement\n const callee = statement.expression\n if (callee.type !== \"Literal\") {\n const { loc, range } = ast.tokens![0]\n return throwUnexpectedTokenError('\"', {\n range: [range[1] - 1, range[1]],\n loc: {\n start: {\n line: loc.end.line,\n column: loc.end.column - 1,\n },\n end: loc.end,\n },\n })\n }\n\n expression.callee = {\n type: \"Identifier\",\n parent: expression,\n range: [\n callee.range[0],\n subCalculator.getOffsetWithGap(calleeCode.trim().length),\n ],\n loc: {\n start: callee.loc.start,\n end: subCalculator.getLocation(calleeCode.trim().length),\n },\n name: String(callee.value),\n }\n tokens.push({\n type: \"Identifier\",\n value: calleeCode.trim(),\n range: expression.callee.range,\n loc: expression.callee.loc,\n })\n } else {\n return throwEmptyError(locationCalculator, \"a filter name\")\n }\n\n // Parse the arguments.\n if (argsCode != null) {\n const result = parseScriptFragment(\n `0${argsCode}`,\n locationCalculator\n .getSubCalculatorAfter(paren)\n .getSubCalculatorShift(-1),\n parserOptions,\n )\n const { ast } = result\n const statement = ast.body[0] as ESLintExpressionStatement\n const callExpression = statement.expression\n\n ast.tokens!.shift()\n\n if (\n callExpression.type !== \"CallExpression\" ||\n callExpression.callee.type !== \"Literal\"\n ) {\n // Report the next token of `)`.\n let nestCount = 1\n for (const token of ast.tokens!.slice(1)) {\n if (nestCount === 0) {\n return throwUnexpectedTokenError(token.value, token)\n }\n if (token.type === \"Punctuator\" && token.value === \"(\") {\n nestCount += 1\n }\n if (token.type === \"Punctuator\" && token.value === \")\") {\n nestCount -= 1\n }\n }\n\n const token = ast.tokens!.at(-1)!\n return throwUnexpectedTokenError(token.value, token)\n }\n\n for (const argument of callExpression.arguments) {\n argument.parent = expression\n expression.arguments.push(argument)\n }\n tokens.push(...ast.tokens!)\n comments.push(...ast.comments!)\n references.push(...analyzeExternalReferences(result, parserOptions))\n }\n\n // Update range.\n const firstToken = tokens[0]\n const lastToken = tokens.at(-1)!\n expression.range = [firstToken.range[0], lastToken.range[1]]\n expression.loc = { start: firstToken.loc.start, end: lastToken.loc.end }\n\n return { expression, tokens, comments, references, variables: [] }\n } catch (err) {\n return throwErrorAsAdjustingOutsideOfCode(err, code, locationCalculator)\n }\n}\n\n/**\n * The result of parsing expressions.\n */\nexport interface ExpressionParseResult<T extends Node> {\n expression: T | null\n tokens: Token[]\n comments: Token[]\n references: Reference[]\n variables: Variable[]\n}\n\nfunction loadParser(parser: string) {\n if (parser !== \"espree\") {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n return require(parser)\n }\n return getEspree()\n}\n\n/**\n * Parse the given source code.\n *\n * @param code The source code to parse.\n * @param parserOptions The parser options.\n * @returns The result of parsing.\n */\nexport function parseScript(\n code: string,\n parserOptions: ParserOptions,\n): ESLintExtendedProgram {\n const parser: ParserObject =\n typeof parserOptions.parser === \"string\"\n ? loadParser(parserOptions.parser)\n : isParserObject(parserOptions.parser)\n ? parserOptions.parser\n : getEspree()\n\n const result: any = isEnhancedParserObject(parser)\n ? parser.parseForESLint(code, parserOptions)\n : parser.parse(code, parserOptions)\n\n if (result.ast != null) {\n return result\n }\n return { ast: result }\n}\n\n/**\n * Parse the source code of the given `<script>` element.\n * @param node The `<script>` element to parse.\n * @param sfcCode The source code of SFC.\n * @param linesAndColumns The lines and columns location calculator.\n * @param parserOptions The parser options.\n * @returns The result of parsing.\n */\nexport function parseScriptElement(\n node: VElement,\n sfcCode: string,\n linesAndColumns: LinesAndColumns,\n originalParserOptions: ParserOptions,\n): ESLintExtendedProgram {\n const parserOptions: ParserOptions = {\n ...originalParserOptions,\n ecmaVersion: originalParserOptions.ecmaVersion ?? DEFAULT_ECMA_VERSION,\n }\n\n let generic: GenericProcessInfo | null = null\n let code: string\n let offset: number\n const textNode = node.children[0]\n if (textNode?.type === \"VText\") {\n const [scriptStartOffset, scriptEndOffset] = textNode.range\n code = sfcCode.slice(scriptStartOffset, scriptEndOffset)\n offset = scriptStartOffset\n generic = extractGeneric(node)\n if (generic) {\n const defineTypesCode = `${generic.defineTypes\n .map((e) => e.define)\n .join(\";\")};\\n`\n code = defineTypesCode + code\n offset -= defineTypesCode.length\n }\n } else {\n code = \"\"\n offset = node.startTag.range[1]\n }\n const locationCalculator =\n linesAndColumns.createOffsetLocationCalculator(offset)\n const result = parseScriptFragment(code, locationCalculator, parserOptions)\n if (generic) {\n generic.postprocess({\n result,\n isRemoveTarget(nodeOrToken) {\n return nodeOrToken.range[1] <= textNode.range[0]\n },\n getTypeDefScope(scopeManager) {\n return (\n scopeManager.globalScope.childScopes.find(\n (s) => s.type === \"module\",\n ) ?? scopeManager.globalScope\n )\n },\n })\n const startToken = [\n result.ast.body[0],\n result.ast.tokens?.[0],\n result.ast.comments?.[0],\n ]\n .filter((e): e is NonNullable<typeof e> => Boolean(e))\n .sort((a, b) => a.range[0] - b.range[0])\n .find((t) => Boolean(t))\n\n // Restore Program node location\n if (startToken && result.ast.range[0] !== startToken.range[0]) {\n result.ast.range[0] = startToken.range[0]\n if (result.ast.start != null) {\n result.ast.start = startToken.start\n }\n result.ast.loc.start = { ...startToken.loc.start }\n }\n }\n // Needs the tokens of start/end tags for `lines-around-*` rules to work\n // correctly.\n if (result.ast.tokens != null) {\n const startTag = node.startTag\n const endTag = node.endTag\n\n result.ast.tokens.unshift({\n type: \"Punctuator\",\n range: startTag.range,\n loc: startTag.loc,\n value: \"<script>\",\n })\n if (endTag != null) {\n result.ast.tokens.push({\n type: \"Punctuator\",\n range: endTag.range,\n loc: endTag.loc,\n value: \"</script>\",\n })\n }\n }\n\n return result\n}\n\n/**\n * Parse the source code of inline scripts.\n * @param code The source code of inline scripts.\n * @param locationCalculator The location calculator for the inline script.\n * @param parserOptions The parser options.\n * @returns The result of parsing.\n */\nexport function parseExpression(\n code: string,\n locationCalculator: LocationCalculatorForHtml,\n parserOptions: ParserOptions,\n { allowEmpty = false, allowFilters = false } = {},\n): ExpressionParseResult<ESLintExpression | VFilterSequenceExpression> {\n debug('[script] parse expression: \"%s\"', code)\n\n const [mainCode, ...filterCodes] =\n allowFilters && (parserOptions.vueFeatures?.filter ?? true)\n ? splitFilters(code)\n : [code]\n if (filterCodes.length === 0) {\n return parseExpressionBody(\n code,\n locationCalculator,\n parserOptions,\n allowEmpty,\n )\n }\n\n // Parse expression\n const retB = parseExpressionBody(\n mainCode,\n locationCalculator,\n parserOptions,\n )\n if (!retB.expression) {\n return retB\n }\n const ret =\n retB as unknown as ExpressionParseResult<VFilterSequenceExpression>\n\n ret.expression = {\n type: \"VFilterSequenceExpression\",\n parent: null as any,\n expression: retB.expression,\n filters: [],\n range: [...retB.expression.range] as const,\n loc: { ...retB.expression.loc },\n }\n ret.expression.expression.parent = ret.expression\n\n // Parse filters\n let prevLoc = mainCode.length\n for (const filterCode of filterCodes) {\n // Pipe token.\n ret.tokens.push(\n fixLocation(\n {\n type: \"Punctuator\",\n value: \"|\",\n range: [prevLoc, prevLoc + 1],\n loc: {} as any,\n },\n locationCalculator,\n ),\n )\n\n // Parse a filter\n const retF = parseFilter(\n filterCode,\n locationCalculator.getSubCalculatorShift(prevLoc + 1),\n parserOptions,\n )\n if (retF) {\n if (retF.expression) {\n ret.expression.filters.push(retF.expression)\n retF.expression.parent = ret.expression\n }\n ret.tokens.push(...retF.tokens)\n ret.comments.push(...retF.comments)\n ret.references.push(...retF.references)\n }\n\n prevLoc += 1 + filterCode.length\n }\n\n // Update range.\n const lastToken = ret.tokens.at(-1)!\n ret.expression.range[1] = lastToken.range[1]\n ret.expression.loc.end = lastToken.loc.end\n\n return ret\n}\n\n/**\n * Parse the source code of inline scripts.\n * @param code The source code of inline scripts.\n * @param locationCalculator The location calculator for the inline script.\n * @param parserOptions The parser options.\n * @returns The result of parsing.\n */\n// eslint-disable-next-line complexity\nexport function parseVForExpression(\n code: string,\n locationCalculator: LocationCalculatorForHtml,\n parserOptions: ParserOptions,\n): ExpressionParseResult<VForExpression> {\n if (code.trim() === \"\") {\n throwEmptyError(locationCalculator, \"'<alias> in <expression>'\")\n }\n\n if (isEcmaVersion5(parserOptions)) {\n return parseVForExpressionForEcmaVersion5(\n code,\n locationCalculator,\n parserOptions,\n )\n }\n const processed = processVForAliasAndIterator(code)\n\n if (!processed.aliases.trim()) {\n return throwEmptyError(locationCalculator, \"an alias\")\n }\n try {\n debug(\n '[script] parse v-for expression: \"for(%s%s%s);\"',\n processed.aliasesWithBrackets,\n processed.delimiter,\n processed.iterator,\n )\n\n const result = parseScriptFragment(\n `for(let ${processed.aliasesWithBrackets}${processed.delimiter}${processed.iterator});`,\n locationCalculator.getSubCalculatorShift(\n processed.hasParens ? -8 : -9,\n ),\n parserOptions,\n )\n const { ast } = result\n const tokens = ast.tokens ?? []\n const comments = ast.comments ?? []\n const scope = analyzeVariablesAndExternalReferences(\n result,\n \"v-for\",\n parserOptions,\n )\n const references = scope.references\n const variables = scope.variables\n const statement = ast.body[0] as\n | ESLintForInStatement\n | ESLintForOfStatement\n const varDecl = statement.left as ESLintVariableDeclaration\n const id = varDecl.declarations[0].id as ESLintArrayPattern\n const left = id.elements\n const right = statement.right\n\n if (!processed.hasParens && !left.length) {\n return throwEmptyError(locationCalculator, \"an alias\")\n }\n // Remove `for` `(` `let` `)` `;`.\n tokens.shift()\n tokens.shift()\n tokens.shift()\n tokens.pop()\n tokens.pop()\n\n const closeOffset = statement.left.range[1] - 1\n const closeIndex = tokens.findIndex((t) => t.range[0] === closeOffset)\n\n if (processed.hasParens) {\n // Restore parentheses from array brackets.\n const open = tokens[0]\n if (open != null) {\n open.value = \"(\"\n }\n const close = tokens[closeIndex]\n if (close != null) {\n close.value = \")\"\n }\n } else {\n // Remove array brackets.\n tokens.splice(closeIndex, 1)\n tokens.shift()\n }\n const firstToken = tokens[0] || statement.left\n const lastToken = tokens[tokens.length - 1] || statement.right\n const expression: VForExpression = {\n type: \"VForExpression\",\n range: [firstToken.range[0], lastToken.range[1]],\n loc: { start: firstToken.loc.start, end: lastToken.loc.end },\n parent: DUMMY_PARENT,\n left,\n right,\n }\n\n // Modify parent.\n for (const l of left) {\n if (l != null) {\n l.parent = expression\n }\n }\n right.parent = expression\n\n return { expression, tokens, comments, references, variables }\n } catch (err) {\n return throwErrorAsAdjustingOutsideOfCode(err, code, locationCalculator)\n }\n}\n\nfunction isEcmaVersion5(parserOptions: ParserOptions) {\n const ecmaVersion = getEcmaVersionIfUseEspree(parserOptions)\n return ecmaVersion != null && ecmaVersion <= 5\n}\n\nfunction parseVForExpressionForEcmaVersion5(\n code: string,\n locationCalculator: LocationCalculatorForHtml,\n parserOptions: ParserOptions,\n): ExpressionParseResult<VForExpression> {\n const processed = processVForAliasAndIterator(code)\n\n if (!processed.aliases.trim()) {\n return throwEmptyError(locationCalculator, \"an alias\")\n }\n try {\n const tokens: Token[] = []\n const comments: Token[] = []\n\n const parsedAliases = parseVForAliasesForEcmaVersion5(\n processed.aliasesWithBrackets,\n locationCalculator.getSubCalculatorShift(\n processed.hasParens ? 0 : -1,\n ),\n parserOptions,\n )\n\n if (processed.hasParens) {\n // Restore parentheses from array brackets.\n const open = parsedAliases.tokens[0]\n if (open != null) {\n open.value = \"(\"\n }\n const close = parsedAliases.tokens.at(-1)\n if (close != null) {\n close.value = \")\"\n }\n } else {\n // Remove array brackets.\n parsedAliases.tokens.shift()\n parsedAliases.tokens.pop()\n }\n tokens.push(...parsedAliases.tokens)\n comments.push(...parsedAliases.comments)\n const { left, variables } = parsedAliases\n\n if (!processed.hasParens && !left.length) {\n return throwEmptyError(locationCalculator, \"an alias\")\n }\n\n const delimiterStart = processed.aliases.length\n const delimiterEnd = delimiterStart + processed.delimiter.length\n tokens.push(\n fixLocation(\n {\n type:\n processed.delimiter === \"in\" ? \"Keyword\" : \"Identifier\",\n value: processed.delimiter,\n start: delimiterStart,\n end: delimiterEnd,\n loc: {} as any,\n range: [delimiterStart, delimiterEnd],\n } as Token,\n locationCalculator,\n ),\n )\n\n const parsedIterator = parseVForIteratorForEcmaVersion5(\n processed.iterator,\n locationCalculator.getSubCalculatorShift(delimiterEnd),\n parserOptions,\n )\n\n tokens.push(...parsedIterator.tokens)\n comments.push(...parsedIterator.comments)\n const { right, references } = parsedIterator\n const firstToken = tokens[0]\n const lastToken = tokens.at(-1) || firstToken\n const expression: VForExpression = {\n type: \"VForExpression\",\n range: [firstToken.range[0], lastToken.range[1]],\n loc: { start: firstToken.loc.start, end: lastToken.loc.end },\n parent: DUMMY_PARENT,\n left,\n right,\n }\n\n // Modify parent.\n for (const l of left) {\n if (l != null) {\n l.parent = expression\n }\n }\n right.parent = expression\n\n return { expression, tokens, comments, references, variables }\n } catch (err) {\n return throwErrorAsAdjustingOutsideOfCode(err, code, locationCalculator)\n }\n}\n\nfunction parseVForAliasesForEcmaVersion5(\n code: string,\n locationCalculator: LocationCalculatorForHtml,\n parserOptions: ParserOptions,\n) {\n const result = parseScriptFragment(\n `0(${code})`,\n locationCalculator.getSubCalculatorShift(-2),\n parserOptions,\n )\n const { ast } = result\n const tokens = ast.tokens ?? []\n const comments = ast.comments ?? []\n const variables = analyzeExternalReferences(result, parserOptions).map(\n transformVariable,\n )\n\n const statement = ast.body[0] as ESLintExpressionStatement\n const callExpression = statement.expression as ESLintCallExpression\n const expression = callExpression.arguments[0] as ESLintArrayExpression\n\n const left: ESLintIdentifier[] = expression.elements.filter(\n (e): e is ESLintIdentifier => {\n if (e == null || e.type === \"Identifier\") {\n return true\n }\n const errorToken = tokens.find(\n (t) => e.range[0] <= t.range[0] && t.range[1] <= e.range[1],\n )!\n return throwUnexpectedTokenError(errorToken.value, errorToken)\n },\n )\n // Remove parens.\n tokens.shift()\n tokens.shift()\n tokens.pop()\n\n return { left, tokens, comments, variables }\n\n function transformVariable(reference: Reference): Variable {\n const ret: Variable = {\n id: reference.id,\n kind: \"v-for\",\n references: [],\n }\n Object.defineProperty(ret, \"references\", { enumerable: false })\n\n return ret\n }\n}\n\nfunction parseVForIteratorForEcmaVersion5(\n code: string,\n locationCalculator: LocationCalculatorForHtml,\n parserOptions: ParserOptions,\n) {\n const result = parseScriptFragment(\n `0(${code})`,\n locationCalculator.getSubCalculatorShift(-2),\n parserOptions,\n )\n const { ast } = result\n const tokens = ast.tokens ?? []\n const comments = ast.comments ?? []\n const references = analyzeExternalReferences(result, parserOptions)\n\n const statement = ast.body[0] as ESLintExpressionStatement\n const callExpression = statement.expression as ESLintCallExpression\n const expression = callExpression.arguments[0]\n\n if (!expression) {\n return throwEmptyError(locationCalculator, \"an expression\")\n }\n if (expression?.type === \"SpreadElement\") {\n return throwUnexpectedTokenError(\"...\", expression)\n }\n const right = expression\n\n // Remove parens.\n tokens.shift()\n tokens.shift()\n tokens.pop()\n return { right, tokens, comments, references }\n}\n\n/**\n * Parse the source code of inline scripts.\n * @param code The source code of inline scripts.\n * @param locationCalculator The location calculator for the inline script.\n * @param parserOptions The parser options.\n * @returns The result of parsing.\n */\nexport function parseVOnExpression(\n code: string,\n locationCalculator: LocationCalculatorForHtml,\n parserOptions: ParserOptions,\n): ExpressionParseResult<ESLintExpression | VOnExpression> {\n if (IS_FUNCTION_EXPRESSION.test(code) || IS_SIMPLE_PATH.test(code)) {\n return parseExpressionBody(code, locationCalculator, parserOptions)\n }\n return parseVOnExpressionBody(code, locationCalculator, parserOptions)\n}\n\n/**\n * Parse the source code of inline scripts.\n * @param code The source code of inline scripts.\n * @param locationCalculator The location calculator for the inline script.\n * @param parserOptions The parser options.\n * @returns The result of parsing.\n */\nfunction parseVOnExpressionBody(\n code: string,\n locationCalculator: LocationCalculatorForHtml,\n parserOptions: ParserOptions,\n): ExpressionParseResult<VOnExpression> {\n debug('[script] parse v-on expression: \"void function($event){%s}\"', code)\n\n if (code.trim() === \"\") {\n throwEmptyError(locationCalculator, \"statements\")\n }\n\n try {\n const result = parseScriptFragment(\n `void function($event){${code}}`,\n locationCalculator.getSubCalculatorShift(-22),\n parserOptions,\n )\n const { ast } = result\n const references = analyzeExternalReferences(result, parserOptions)\n const outermostStatement = ast.body[0] as ESLintExpressionStatement\n const functionDecl = (\n outermostStatement.expression as ESLintUnaryExpression\n ).argument as ESLintFunctionExpression\n const block = functionDecl.body\n const body = block.body\n const firstStatement = body[0]\n const lastStatement = body.at(-1)\n const expression: VOnExpression = {\n type: \"VOnExpression\",\n range: [\n firstStatement != null\n ? firstStatement.range[0]\n : block.range[0] + 1,\n lastStatement != null\n ? lastStatement.range[1]\n : block.range[1] - 1,\n ],\n loc: {\n start:\n firstStatement != null\n ? firstStatement.loc.start\n : locationCalculator.getLocation(1),\n end:\n lastStatement != null\n ? lastStatement.loc.end\n : locationCalculator.getLocation(code.length + 1),\n },\n parent: DUMMY_PARENT,\n body,\n }\n const tokens = ast.tokens ?? []\n const comments = ast.comments ?? []\n\n // Modify parent.\n for (const b of body) {\n b.parent = expression\n }\n\n // Remove braces.\n tokens.splice(0, 6)\n tokens.pop()\n\n return { expression, tokens, comments, references, variables: [] }\n } catch (err) {\n return throwErrorAsAdjustingOutsideOfCode(err, code, locationCalculator)\n }\n}\n\n/**\n * Parse the source code of `slot-scope` directive.\n * @param code The source code of `slot-scope` directive.\n * @param locationCalculator The location calculator for the inline script.\n * @param parserOptions The parser options.\n * @returns The result of parsing.\n */\nexport function parseSlotScopeExpression(\n code: string,\n locationCalculator: LocationCalculatorForHtml,\n parserOptions: ParserOptions,\n): ExpressionParseResult<VSlotScopeExpression> {\n debug('[script] parse slot-scope expression: \"void function(%s) {}\"', code)\n\n if (code.trim() === \"\") {\n throwEmptyError(\n locationCalculator,\n \"an identifier or an array/object pattern\",\n )\n }\n\n try {\n const result = parseScriptFragment(\n `void function(${code}) {}`,\n locationCalculator.getSubCalculatorShift(-14),\n parserOptions,\n )\n const { ast } = result\n const statement = ast.body[0] as ESLintExpressionStatement\n const rawExpression = statement.expression as ESLintUnaryExpression\n const functionDecl = rawExpression.argument as ESLintFunctionExpression\n const params = functionDecl.params\n\n if (params.length === 0) {\n return {\n expression: null,\n tokens: [],\n comments: [],\n references: [],\n variables: [],\n }\n }\n\n const tokens = ast.tokens ?? []\n const comments = ast.comments ?? []\n const scope = analyzeVariablesAndExternalReferences(\n result,\n \"scope\",\n parserOptions,\n )\n const references = scope.references\n const variables = scope.variables\n const firstParam = params[0]\n const lastParam = params.at(-1)!\n const expression: VSlotScopeExpression = {\n type: \"VSlotScopeExpression\",\n range: [firstParam.range[0], lastParam.range[1]],\n loc: { start: firstParam.loc.start, end: lastParam.loc.end },\n parent: DUMMY_PARENT,\n params: functionDecl.params,\n }\n\n // Modify parent.\n for (const param of params) {\n param.parent = expression\n }\n\n // Remove `void` `function` `(` `)` `{` `}`.\n tokens.shift()\n tokens.shift()\n tokens.shift()\n tokens.pop()\n tokens.pop()\n tokens.pop()\n\n return { expression, tokens, comments, references, variables }\n } catch (err) {\n return throwErrorAsAdjustingOutsideOfCode(err, code, locationCalculator)\n }\n}\n\n/**\n * Parse the source code of `generic` directive.\n * @param code The source code of `generic` directive.\n * @param locationCalculator The location calculator for the inline script.\n * @param parserOptions The parser options.\n * @returns The result of parsing.\n */\nexport function parseGenericExpression(\n code: string,\n locationCalculator: LocationCalculatorForHtml,\n parserOptions: ParserOptions,\n): ExpressionParseResult<VGenericExpression> {\n debug('[script] parse generic definition: \"void function<%s>() {}\"', code)\n\n if (code.trim() === \"\") {\n throwEmptyError(locationCalculator, \"a type parameter\")\n }\n\n function getParams(result: ESLintExtendedProgram) {\n const { ast } = result\n const statement = ast.body[0] as ESLintExpressionStatement\n const rawExpression = statement.expression as ESLintUnaryExpression\n const classDecl = rawExpression.argument as ESLintFunctionExpression\n const typeParameters = (classDecl as TSESTree.FunctionExpression)\n .typeParameters\n return typeParameters?.params\n }\n\n try {\n const rawParams: string[] = []\n const scriptLet = `void function<${code}>(){}`\n const result = parseScriptFragmentWithOption(\n scriptLet,\n locationCalculator.getSubCalculatorShift(-14),\n { ...parserOptions, project: undefined, projectService: undefined },\n {\n preFixLocationProcess(preResult) {\n const params = getParams(preResult)\n if (params) {\n for (const param of params) {\n rawParams.push(\n scriptLet.slice(param.range[0], param.range[1]),\n )\n }\n }\n },\n },\n )\n const { ast } = result\n const params = getParams(result)\n\n if (!params || params.length === 0) {\n return {\n expression: null,\n tokens: [],\n comments: [],\n references: [],\n variables: [],\n }\n }\n\n const tokens = ast.tokens ?? []\n const comments = ast.comments ?? []\n const scope = analyzeVariablesAndExternalReferences(\n result,\n \"generic\",\n parserOptions,\n )\n const references = scope.references\n const variables = scope.variables\n const firstParam = params[0]\n const lastParam = params.at(-1)!\n const expression: VGenericExpression = {\n type: \"VGenericExpression\",\n range: [firstParam.range[0], lastParam.range[1]],\n loc: { start: firstParam.loc.start, end: lastParam.loc.end },\n parent: DUMMY_PARENT,\n params,\n rawParams,\n }\n\n // Modify parent.\n for (const param of params) {\n ;(param as any).parent = expression\n }\n\n // Remove `void` `function` `<` `>` `(` `)` `{` `}`.\n tokens.shift()\n tokens.shift()\n tokens.shift()\n tokens.pop()\n tokens.pop()\n tokens.pop()\n tokens.pop()\n tokens.pop()\n\n return { expression, tokens, comments, references, variables }\n } catch (err) {\n return throwErrorAsAdjustingOutsideOfCode(err, code, locationCalculator)\n }\n}\n","import { sortedIndexBy, sortedLastIndexBy } from \"../utils/utils\"\nimport type { LocationRange, Token, VDocumentFragment } from \"../ast/index\"\nimport type { LinesAndColumns } from \"./lines-and-columns\"\n\ninterface HasRange {\n range: [number, number]\n}\n/**\n * Replace the tokens in the given range.\n * @param document The document that the node is belonging to.\n * @param node The node to specify the range of replacement.\n * @param newTokens The new tokens.\n */\nexport function replaceTokens(\n document: VDocumentFragment | null,\n node: HasRange,\n newTokens: Token[],\n): void {\n if (document == null) {\n return\n }\n\n const index = sortedIndexBy(document.tokens, node, byRange0)\n const count = sortedLastIndexBy(document.tokens, node, byRange1) - index\n document.tokens.splice(index, count, ...newTokens)\n}\n\n/**\n * Replace and split the tokens in the given range.\n * @param document The document that the node is belonging to.\n * @param node The node to specify the range of replacement.\n * @param newTokens The new tokens.\n */\nexport function replaceAndSplitTokens(\n document: VDocumentFragment | null,\n node: HasRange & {\n loc: LocationRange\n },\n newTokens: Token[],\n): void {\n if (document == null) {\n return\n }\n\n const index = sortedIndexBy(document.tokens, node, byRange0)\n if (\n document.tokens.length === index ||\n node.range[0] < document.tokens[index].range[0]\n ) {\n // split\n const beforeToken = document.tokens[index - 1]\n const value = beforeToken.value\n const splitOffset = node.range[0] - beforeToken.range[0]\n const afterToken: Token = {\n type: beforeToken.type,\n range: [node.range[0], beforeToken.range[1]],\n loc: {\n start: { ...node.loc.start },\n end: { ...beforeToken.loc.end },\n },\n value: value.slice(splitOffset),\n }\n beforeToken.range[1] = node.range[0]\n beforeToken.loc.end = { ...node.loc.start }\n beforeToken.value = value.slice(0, splitOffset)\n document.tokens.splice(index, 0, afterToken)\n }\n let lastIndex = sortedLastIndexBy(document.tokens, node, byRange1)\n if (\n lastIndex === 0 ||\n node.range[1] < document.tokens[lastIndex].range[1]\n ) {\n // split\n const beforeToken = document.tokens[lastIndex]\n const value = beforeToken.value\n const splitOffset =\n beforeToken.range[1] -\n beforeToken.range[0] -\n (beforeToken.range[1] - node.range[1])\n const afterToken: Token = {\n type: beforeToken.type,\n range: [node.range[1], beforeToken.range[1]],\n loc: {\n start: { ...node.loc.end },\n end: { ...beforeToken.loc.end },\n },\n value: value.slice(splitOffset),\n }\n beforeToken.range[1] = node.range[1]\n beforeToken.loc.end = { ...node.loc.end }\n beforeToken.value = value.slice(0, splitOffset)\n document.tokens.splice(lastIndex + 1, 0, afterToken)\n lastIndex++\n }\n const count = lastIndex - index\n document.tokens.splice(index, count, ...newTokens)\n}\n\n/**\n * Insert the given comment tokens.\n * @param document The document that the node is belonging to.\n * @param newComments The comments to insert.\n */\nexport function insertComments(\n document: VDocumentFragment | null,\n newComments: Token[],\n): void {\n if (document == null || newComments.length === 0) {\n return\n }\n\n const index = sortedIndexBy(document.comments, newComments[0], byRange0)\n document.comments.splice(index, 0, ...newComments)\n}\n\n/**\n * Create a simple token.\n * @param type The type of new token.\n * @param start The offset of the start position of new token.\n * @param end The offset of the end position of new token.\n * @param value The value of new token.\n * @returns The new token.\n */\nexport function createSimpleToken(\n type: string,\n start: number,\n end: number,\n value: string,\n linesAndColumns: LinesAndColumns,\n): Token {\n return {\n type,\n range: [start, end],\n loc: {\n start: linesAndColumns.getLocFromIndex(start),\n end: linesAndColumns.getLocFromIndex(end),\n },\n value,\n }\n}\n\n/**\n * Get `x.range[0]`.\n * @param x The object to get.\n * @returns `x.range[0]`.\n */\nfunction byRange0(x: HasRange): number {\n return x.range[0]\n}\n\n/**\n * Get `x.range[1]`.\n * @param x The object to get.\n * @returns `x.range[1]`.\n */\nfunction byRange1(x: HasRange): number {\n return x.range[1]\n}\n","import type { ParseError, VDocumentFragment } from \"../ast/index\"\nimport { sortedIndexBy } from \"../utils/utils\"\n/**\n * Insert the given error.\n * @param document The document that the node is belonging to.\n * @param error The error to insert.\n */\nexport function insertError(\n document: VDocumentFragment | null,\n error: ParseError,\n): void {\n if (document == null) {\n return\n }\n\n const index = sortedIndexBy(document.errors, error, byIndex)\n document.errors.splice(index, 0, error)\n}\n\n/**\n * Get `x.pos`.\n * @param x The object to get.\n * @returns `x.pos`.\n */\nfunction byIndex(x: ParseError): number {\n return x.index\n}\n","/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2017 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\nimport type { ParserOptions } from \"../common/parser-options\"\nimport { isSFCFile } from \"../common/parser-options\"\nimport type {\n ESLintExpression,\n ESLintExtendedProgram,\n ESLintIdentifier,\n Reference,\n Token,\n VAttribute,\n VDirective,\n VDirectiveKey,\n VDocumentFragment,\n VElement,\n VExpressionContainer,\n VFilterSequenceExpression,\n VForExpression,\n VGenericExpression,\n VIdentifier,\n VLiteral,\n VNode,\n VOnExpression,\n VSlotScopeExpression,\n} from \"../ast/index\"\nimport { ParseError } from \"../ast/index\"\nimport { debug } from \"../common/debug\"\nimport type { LocationCalculatorForHtml } from \"../common/location-calculator\"\nimport type { ExpressionParseResult } from \"../script/index\"\nimport {\n parseExpression,\n parseVForExpression,\n parseVOnExpression,\n parseSlotScopeExpression,\n parseGenericExpression,\n parseScriptFragment,\n} from \"../script/index\"\nimport {\n createSimpleToken,\n insertComments,\n replaceTokens,\n} from \"../common/token-utils\"\nimport {\n getOwnerDocument,\n isScriptSetupElement,\n isTSLang,\n} from \"../common/ast-utils\"\nimport { insertError } from \"../common/error-utils\"\nimport { camelize } from \"../utils/utils\"\n\nconst shorthandSign = /^[.:@#]/u\nconst shorthandNameMap = { \":\": \"bind\", \".\": \"bind\", \"@\": \"on\", \"#\": \"slot\" }\nconst invalidDynamicArgumentNextChar = /^[\\s\\r\\n=/>]$/u\n\n/**\n * Gets the tag name from the given node or token.\n * For SFC, it returns the value of `rawName` to be case sensitive.\n */\nfunction getTagName(\n startTagOrElement: { name: string; rawName: string },\n isSFC: boolean,\n) {\n return isSFC ? startTagOrElement.rawName : startTagOrElement.name\n}\n\n/**\n * Parse the given attribute name as a directive key.\n * @param node The identifier node to parse.\n * @param document The document to add parsing errors.\n * @returns The directive key node.\n */\nfunction parseDirectiveKeyStatically(\n node: VIdentifier,\n document: VDocumentFragment | null,\n): VDirectiveKey {\n const {\n name: text,\n rawName: rawText,\n range: [offset],\n loc: {\n start: { column, line },\n },\n } = node\n const directiveKey: VDirectiveKey = {\n type: \"VDirectiveKey\",\n range: node.range,\n loc: node.loc,\n parent: node.parent as any,\n name: null as any,\n argument: null as VIdentifier | null,\n modifiers: [] as VIdentifier[],\n }\n let i = 0\n\n function createIdentifier(\n start: number,\n end: number,\n name?: string,\n ): VIdentifier {\n return {\n type: \"VIdentifier\",\n parent: directiveKey,\n range: [offset + start, offset + end],\n loc: {\n start: { column: column + start, line },\n end: { column: column + end, line },\n },\n name: name || text.slice(start, end),\n rawName: rawText.slice(start, end),\n }\n }\n\n // Parse.\n if (shorthandSign.test(text)) {\n const sign = text[0] as \":\" | \".\" | \"@\" | \"#\"\n directiveKey.name = createIdentifier(0, 1, shorthandNameMap[sign])\n i = 1\n } else {\n const colon = text.indexOf(\":\")\n if (colon !== -1) {\n directiveKey.name = createIdentifier(0, colon)\n i = colon + 1\n }\n }\n\n if (directiveKey.name != null && text[i] === \"[\") {\n // Dynamic argument.\n const len = text.slice(i).lastIndexOf(\"]\")\n if (len !== -1) {\n directiveKey.argument = createIdentifier(i, i + len + 1)\n i = i + len + 1 + (text[i + len + 1] === \".\" ? 1 : 0)\n }\n }\n\n const modifiers = text\n .slice(i)\n .split(\".\")\n .map((modifierName) => {\n const modifier = createIdentifier(i, i + modifierName.length)\n if (modifierName === \"\" && i < text.length) {\n insertError(\n document,\n new ParseError(\n `Unexpected token '${text[i]}'`,\n undefined,\n offset + i,\n line,\n column + i,\n ),\n )\n }\n i += modifierName.length + 1\n return modifier\n })\n\n if (directiveKey.name == null) {\n directiveKey.name = modifiers.shift()!\n } else if (directiveKey.argument == null && modifiers[0].name !== \"\") {\n directiveKey.argument = modifiers.shift() ?? null\n }\n directiveKey.modifiers = modifiers.filter(isNotEmptyModifier)\n\n if (directiveKey.name.name === \"v-\") {\n insertError(\n document,\n new ParseError(\n `Unexpected token '${\n text[directiveKey.name.range[1] - offset]\n }'`,\n undefined,\n directiveKey.name.range[1],\n directiveKey.name.loc.end.line,\n directiveKey.name.loc.end.column,\n ),\n )\n }\n\n // v-bind.prop shorthand\n if (\n directiveKey.name.rawName === \".\" &&\n !directiveKey.modifiers.some(isPropModifier)\n ) {\n const pos =\n (directiveKey.argument || directiveKey.name).range[1] - offset\n const propModifier = createIdentifier(pos, pos, \"prop\")\n directiveKey.modifiers.unshift(propModifier)\n }\n\n return directiveKey\n}\n\n/**\n * Check whether a given identifier node is `prop` or not.\n * @param node The identifier node to check.\n */\nfunction isPropModifier(node: VIdentifier): boolean {\n return node.name === \"prop\"\n}\n\n/**\n * Check whether a given identifier node is empty or not.\n * @param node The identifier node to check.\n */\nfunction isNotEmptyModifier(node: VIdentifier): boolean {\n return node.name !== \"\"\n}\n\n/**\n * Parse the tokens of a given key node.\n * @param node The key node to parse.\n */\nfunction parseDirectiveKeyTokens(node: VDirectiveKey): Token[] {\n const { name, argument, modifiers } = node\n const shorthand = name.range[1] - name.range[0] === 1\n const tokens: Token[] = []\n\n if (shorthand) {\n tokens.push({\n type: \"Punctuator\",\n range: name.range,\n loc: name.loc,\n value: name.rawName,\n })\n } else {\n tokens.push({\n type: \"HTMLIdentifier\",\n range: name.range,\n loc: name.loc,\n value: name.rawName,\n })\n\n if (argument) {\n tokens.push({\n type: \"Punctuator\",\n range: [name.range[1], argument.range[0]],\n loc: { start: name.loc.end, end: argument.loc.start },\n value: \":\",\n })\n }\n }\n\n if (argument) {\n tokens.push({\n type: \"HTMLIdentifier\",\n range: argument.range,\n loc: argument.loc,\n value: (argument as VIdentifier).rawName,\n })\n }\n\n let lastNode = (argument as VIdentifier | null) || name\n for (const modifier of modifiers) {\n if (modifier.rawName === \"\") {\n continue\n }\n\n tokens.push(\n {\n type: \"Punctuator\",\n range: [lastNode.range[1], modifier.range[0]],\n loc: { start: lastNode.loc.end, end: modifier.loc.start },\n value: \".\",\n },\n {\n type: \"HTMLIdentifier\",\n range: modifier.range,\n loc: modifier.loc,\n value: modifier.rawName,\n },\n )\n lastNode = modifier\n }\n\n return tokens\n}\n\n/**\n * Convert `node.argument` property to a `VExpressionContainer` node if it's a dynamic argument.\n * @param text The source code text of the directive key node.\n * @param node The directive key node to convert.\n * @param document The belonging document node.\n * @param parserOptions The parser options to parse.\n * @param locationCalculator The location calculator to parse.\n */\nfunction convertDynamicArgument(\n node: VDirectiveKey,\n document: VDocumentFragment | null,\n parserOptions: ParserOptions,\n locationCalculator: LocationCalculatorForHtml,\n): void {\n const { argument } = node\n if (\n !(\n argument != null &&\n argument.type === \"VIdentifier\" &&\n argument.name.startsWith(\"[\") &&\n argument.name.endsWith(\"]\")\n )\n ) {\n return\n }\n\n const { rawName, range, loc } = argument\n try {\n const { comments, expression, references, tokens } = parseExpression(\n rawName.slice(1, -1),\n locationCalculator.getSubCalculatorAfter(range[0] + 1),\n parserOptions,\n )\n\n node.argument = {\n type: \"VExpressionContainer\",\n range,\n loc,\n parent: node,\n expression,\n references,\n }\n\n if (expression != null) {\n expression.parent = node.argument\n }\n\n // Add tokens of `[` and `]`.\n tokens.unshift(\n createSimpleToken(\n \"Punctuator\",\n range[0],\n range[0] + 1,\n \"[\",\n locationCalculator,\n ),\n )\n tokens.push(\n createSimpleToken(\n \"Punctuator\",\n range[1] - 1,\n range[1],\n \"]\",\n locationCalculator,\n ),\n )\n\n replaceTokens(document, node.argument, tokens)\n insertComments(document, comments)\n } catch (error) {\n debug(\"[template] Parse error: %s\", error)\n\n if (ParseError.isParseError(error)) {\n node.argument = {\n type: \"VExpressionContainer\",\n range,\n loc,\n parent: node,\n expression: null,\n references: [],\n }\n insertError(document, error)\n } else {\n throw error\n }\n }\n}\n\n/**\n * Parse the given attribute name as a directive key.\n * @param node The identifier node to parse.\n * @returns The directive key node.\n */\nfunction createDirectiveKey(\n node: VIdentifier,\n document: VDocumentFragment | null,\n parserOptions: ParserOptions,\n locationCalculator: LocationCalculatorForHtml,\n): VDirectiveKey {\n // Parse node and tokens.\n const directiveKey = parseDirectiveKeyStatically(node, document)\n const tokens = parseDirectiveKeyTokens(directiveKey)\n replaceTokens(document, directiveKey, tokens)\n\n // Drop `v-` prefix.\n if (directiveKey.name.name.startsWith(\"v-\")) {\n directiveKey.name.name = directiveKey.name.name.slice(2)\n }\n if (directiveKey.name.rawName.startsWith(\"v-\")) {\n directiveKey.name.rawName = directiveKey.name.rawName.slice(2)\n }\n\n // Parse dynamic argument.\n convertDynamicArgument(\n directiveKey,\n document,\n parserOptions,\n locationCalculator,\n )\n\n return directiveKey\n}\n\n/**\n * Parse the given attribute value as an expression.\n * @param code Whole source code text.\n * @param parserOptions The parser options to parse expressions.\n * @param globalLocationCalculator The location calculator to adjust the locations of nodes.\n * @param node The attribute node to replace. This function modifies this node directly.\n * @param tagName The name of this tag.\n * @param directiveKey The key of this directive.\n */\nfunction parseAttributeValue(\n code: string,\n parserOptions: ParserOptions,\n scriptParserOptions: ParserOptions,\n globalLocationCalculator: LocationCalculatorForHtml,\n node: VLiteral,\n element: VElement,\n directiveKey: VDirectiveKey,\n): ExpressionParseResult<\n | ESLintExpression\n | VFilterSequenceExpression\n | VForExpression\n | VOnExpression\n | VSlotScopeExpression\n | VGenericExpression\n> {\n const firstChar = code[node.range[0]]\n const quoted = firstChar === '\"' || firstChar === \"'\"\n const locationCalculator = globalLocationCalculator.getSubCalculatorAfter(\n node.range[0] + (quoted ? 1 : 0),\n )\n const directiveKind = getStandardDirectiveKind(\n parserOptions,\n element,\n directiveKey,\n )\n\n let result: ExpressionParseResult<\n | ESLintExpression\n | VFilterSequenceExpression\n | VForExpression\n | VOnExpression\n | VSlotScopeExpression\n | VGenericExpression\n >\n if (quoted && node.value === \"\") {\n result = {\n expression: null,\n tokens: [],\n comments: [],\n variables: [],\n references: [],\n }\n } else if (directiveKind === \"for\") {\n result = parseVForExpression(\n node.value,\n locationCalculator,\n parserOptions,\n )\n } else if (directiveKind === \"on\" && directiveKey.argument != null) {\n result = parseVOnExpression(\n node.value,\n locationCalculator,\n parserOptions,\n )\n } else if (directiveKind === \"slot\") {\n result = parseSlotScopeExpression(\n node.value,\n locationCalculator,\n parserOptions,\n )\n } else if (directiveKind === \"bind\") {\n result = parseExpression(\n node.value,\n locationCalculator,\n parserOptions,\n { allowFilters: true },\n )\n } else if (directiveKind === \"generic\") {\n result = parseGenericExpression(\n node.value,\n locationCalculator,\n scriptParserOptions,\n )\n } else {\n result = parseExpression(node.value, locationCalculator, parserOptions)\n }\n\n // Add the tokens of quotes.\n if (quoted) {\n result.tokens.unshift(\n createSimpleToken(\n \"Punctuator\",\n node.range[0],\n node.range[0] + 1,\n firstChar,\n globalLocationCalculator,\n ),\n )\n result.tokens.push(\n createSimpleToken(\n \"Punctuator\",\n node.range[1] - 1,\n node.range[1],\n firstChar,\n globalLocationCalculator,\n ),\n )\n }\n\n return result\n}\n\nfunction getStandardDirectiveKind(\n parserOptions: ParserOptions,\n element: VElement,\n directiveKey: VDirectiveKey,\n) {\n const directiveName = directiveKey.name.name\n\n if (directiveName === \"for\") {\n return \"for\"\n } else if (directiveName === \"on\") {\n return \"on\"\n } else if (\n directiveName === \"slot\" ||\n directiveName === \"slot-scope\" ||\n (directiveName === \"scope\" &&\n getTagName(element, isSFCFile(parserOptions)) === \"template\")\n ) {\n return \"slot\"\n } else if (directiveName === \"bind\") {\n return \"bind\"\n } else if (\n directiveName === \"generic\" &&\n element.parent.type === \"VDocumentFragment\" &&\n getTagName(element, isSFCFile(parserOptions)) === \"script\" &&\n isScriptSetupElement(element) &&\n isTSLang(element)\n ) {\n return \"generic\"\n }\n return null\n}\n\n/**\n * Resolve the variable of the given reference.\n * @param referene The reference to resolve.\n * @param element The belonging element of the reference.\n */\nfunction resolveReference(referene: Reference, element: VElement): void {\n let node: VNode | null = element\n\n // Find the variable of this reference.\n while (node?.type === \"VElement\") {\n for (const variable of node.variables) {\n if (variable.id.name === referene.id.name) {\n referene.variable = variable\n variable.references.push(referene)\n return\n }\n }\n\n node = node.parent\n }\n}\n\n/**\n * Information of a mustache.\n */\nexport interface Mustache {\n value: string\n startToken: Token\n endToken: Token\n}\n\n/**\n * Replace the given attribute by a directive.\n * @param code Whole source code text.\n * @param parserOptions The parser options to parse expressions.\n * @param locationCalculator The location calculator to adjust the locations of nodes.\n * @param node The attribute node to replace. This function modifies this node directly.\n */\nexport function convertToDirective(\n code: string,\n parserOptions: ParserOptions,\n scriptParserOptions: ParserOptions,\n locationCalculator: LocationCalculatorForHtml,\n node: VAttribute,\n): void {\n debug(\n '[template] convert to directive: %s=\"%s\" %j',\n node.key.name,\n node.value?.value,\n node.range,\n )\n\n const document = getOwnerDocument(node)\n const directive: VDirective = node as any\n directive.directive = true\n directive.key = createDirectiveKey(\n node.key,\n document,\n parserOptions,\n locationCalculator,\n )\n\n const { argument } = directive.key\n if (argument?.type === \"VIdentifier\" && argument.name.startsWith(\"[\")) {\n const nextChar = code[argument.range[1]]\n if (nextChar == null || invalidDynamicArgumentNextChar.test(nextChar)) {\n const char =\n nextChar == null ? \"EOF\" : JSON.stringify(nextChar).slice(1, -1)\n insertError(\n document,\n new ParseError(\n `Dynamic argument cannot contain the '${char}' character.`,\n undefined,\n argument.range[1],\n argument.loc.end.line,\n argument.loc.end.column,\n ),\n )\n }\n }\n\n if (node.value == null) {\n if (directive.key.name.name === \"bind\") {\n // v-bind same-name shorthand (Vue 3.4+)\n convertForVBindSameNameShorthandValue(\n directive,\n parserOptions,\n locationCalculator,\n )\n }\n return\n }\n\n try {\n const ret = parseAttributeValue(\n code,\n parserOptions,\n scriptParserOptions,\n locationCalculator,\n node.value,\n node.parent.parent,\n directive.key,\n )\n\n directive.value = {\n type: \"VExpressionContainer\",\n range: node.value.range,\n loc: node.value.loc,\n parent: directive,\n expression: ret.expression,\n references: ret.references,\n }\n if (ret.expression != null) {\n ret.expression.parent = directive.value\n }\n\n for (const variable of ret.variables) {\n node.parent.parent.variables.push(variable)\n }\n\n replaceTokens(document, node.value, ret.tokens)\n insertComments(document, ret.comments)\n } catch (err) {\n debug(\"[template] Parse error: %s\", err)\n\n if (ParseError.isParseError(err)) {\n directive.value = {\n type: \"VExpressionContainer\",\n range: node.value.range,\n loc: node.value.loc,\n parent: directive,\n expression: null,\n references: [],\n }\n insertError(document, err)\n } else {\n throw err\n }\n }\n}\n\nfunction convertForVBindSameNameShorthandValue(\n directive: VDirective,\n parserOptions: ParserOptions,\n locationCalculator: LocationCalculatorForHtml,\n) {\n if (\n directive.key.name.name !== \"bind\" ||\n directive.key.argument == null ||\n directive.key.argument.type !== \"VIdentifier\"\n ) {\n return\n }\n // v-bind same-name shorthand (Vue 3.4+)\n const vId = directive.key.argument\n const camelName = camelize(vId.rawName)\n let result: ESLintExtendedProgram | null = null\n try {\n result = parseScriptFragment(\n camelName,\n locationCalculator.getSubCalculatorAfter(vId.range[0]),\n parserOptions,\n )\n } catch (err) {\n debug(\"[template] Parse error: %s\", err)\n }\n if (\n result == null ||\n result.ast.body.length !== 1 ||\n result.ast.body[0].type !== \"ExpressionStatement\" ||\n result.ast.body[0].expression.type !== \"Identifier\"\n ) {\n return\n }\n const id: ESLintIdentifier = result.ast.body[0].expression\n id.range[1] = vId.range[1]\n id.loc.end = { ...vId.loc.end }\n if (id.end != null) {\n id.end = vId.end\n }\n directive.value = {\n type: \"VExpressionContainer\",\n range: [...vId.range],\n loc: {\n start: { ...vId.loc.start },\n end: { ...vId.loc.end },\n },\n parent: directive,\n expression: id,\n references: [\n {\n id,\n mode: \"r\",\n variable: null,\n },\n ],\n }\n id.parent = directive.value\n}\n\n/**\n * Parse the content of the given mustache.\n * @param parserOptions The parser options to parse expressions.\n * @param globalLocationCalculator The location calculator to adjust the locations of nodes.\n * @param node The expression container node. This function modifies the `expression` and `references` properties of this node.\n * @param mustache The information of mustache to parse.\n */\nexport function processMustache(\n parserOptions: ParserOptions,\n globalLocationCalculator: LocationCalculatorForHtml,\n node: VExpressionContainer,\n mustache: Mustache,\n): void {\n const range: [number, number] = [\n mustache.startToken.range[1],\n mustache.endToken.range[0],\n ]\n debug(\"[template] convert mustache {{%s}} %j\", mustache.value, range)\n\n const document = getOwnerDocument(node)\n try {\n const locationCalculator =\n globalLocationCalculator.getSubCalculatorAfter(range[0])\n const ret = parseExpression(\n mustache.value,\n locationCalculator,\n parserOptions,\n { allowEmpty: true, allowFilters: true },\n )\n\n node.expression = ret.expression ?? null\n node.references = ret.references\n if (ret.expression != null) {\n ret.expression.parent = node\n }\n\n replaceTokens(document, { range }, ret.tokens)\n insertComments(document, ret.comments)\n } catch (err) {\n debug(\"[template] Parse error: %s\", err)\n\n if (ParseError.isParseError(err)) {\n insertError(document, err)\n } else {\n throw err\n }\n }\n}\n\n/**\n * Resolve all references of the given expression container.\n * @param container The expression container to resolve references.\n */\nexport function resolveReferences(container: VExpressionContainer): void {\n let element: VNode | null = container.parent\n\n // Get the belonging element.\n while (element != null && element.type !== \"VElement\") {\n element = element.parent\n }\n\n // Resolve.\n if (element != null) {\n for (const reference of container.references) {\n resolveReference(reference, element)\n }\n }\n}\n","/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2017 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\nexport const SVG_ATTRIBUTE_NAME_MAP = new Map([\n [\"attributename\", \"attributeName\"],\n [\"attributetype\", \"attributeType\"],\n [\"basefrequency\", \"baseFrequency\"],\n [\"baseprofile\", \"baseProfile\"],\n [\"calcmode\", \"calcMode\"],\n [\"clippathunits\", \"clipPathUnits\"],\n [\"diffuseconstant\", \"diffuseConstant\"],\n [\"edgemode\", \"edgeMode\"],\n [\"filterunits\", \"filterUnits\"],\n [\"glyphref\", \"glyphRef\"],\n [\"gradienttransform\", \"gradientTransform\"],\n [\"gradientunits\", \"gradientUnits\"],\n [\"kernelmatrix\", \"kernelMatrix\"],\n [\"kernelunitlength\", \"kernelUnitLength\"],\n [\"keypoints\", \"keyPoints\"],\n [\"keysplines\", \"keySplines\"],\n [\"keytimes\", \"keyTimes\"],\n [\"lengthadjust\", \"lengthAdjust\"],\n [\"limitingconeangle\", \"limitingConeAngle\"],\n [\"markerheight\", \"markerHeight\"],\n [\"markerunits\", \"markerUnits\"],\n [\"markerwidth\", \"markerWidth\"],\n [\"maskcontentunits\", \"maskContentUnits\"],\n [\"maskunits\", \"maskUnits\"],\n [\"numoctaves\", \"numOctaves\"],\n [\"pathlength\", \"pathLength\"],\n [\"patterncontentunits\", \"patternContentUnits\"],\n [\"patterntransform\", \"patternTransform\"],\n [\"patternunits\", \"patternUnits\"],\n [\"pointsatx\", \"pointsAtX\"],\n [\"pointsaty\", \"pointsAtY\"],\n [\"pointsatz\", \"pointsAtZ\"],\n [\"preservealpha\", \"preserveAlpha\"],\n [\"preserveaspectratio\", \"preserveAspectRatio\"],\n [\"primitiveunits\", \"primitiveUnits\"],\n [\"refx\", \"refX\"],\n [\"refy\", \"refY\"],\n [\"repeatcount\", \"repeatCount\"],\n [\"repeatdur\", \"repeatDur\"],\n [\"requiredextensions\", \"requiredExtensions\"],\n [\"requiredfeatures\", \"requiredFeatures\"],\n [\"specularconstant\", \"specularConstant\"],\n [\"specularexponent\", \"specularExponent\"],\n [\"spreadmethod\", \"spreadMethod\"],\n [\"startoffset\", \"startOffset\"],\n [\"stddeviation\", \"stdDeviation\"],\n [\"stitchtiles\", \"stitchTiles\"],\n [\"surfacescale\", \"surfaceScale\"],\n [\"systemlanguage\", \"systemLanguage\"],\n [\"tablevalues\", \"tableValues\"],\n [\"targetx\", \"targetX\"],\n [\"targety\", \"targetY\"],\n [\"textlength\", \"textLength\"],\n [\"viewbox\", \"viewBox\"],\n [\"viewtarget\", \"viewTarget\"],\n [\"xchannelselector\", \"xChannelSelector\"],\n [\"ychannelselector\", \"yChannelSelector\"],\n [\"zoomandpan\", \"zoomAndPan\"],\n])\n\nexport const MATHML_ATTRIBUTE_NAME_MAP = new Map([\n [\"definitionurl\", \"definitionUrl\"]\n])\n","/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2017 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\n\n/**\n * HTML tag names.\n */\nexport const HTML_TAGS = new Set([\n \"a\", \"abbr\", \"address\", \"area\", \"article\",\"aside\", \"audio\", \"b\", \"base\",\n \"bdi\", \"bdo\", \"blockquote\", \"body\", \"br\", \"button\", \"canvas\", \"caption\",\n \"cite\", \"code\", \"col\", \"colgroup\", \"data\", \"datalist\", \"dd\", \"del\",\n \"details\", \"dfn\", \"dialog\", \"div\", \"dl\", \"document\", \"dt\", \"em\", \"embed\",\n \"fieldset\", \"figcaption\", \"figure\", \"footer\", \"form\", \"h1\", \"h2\", \"h3\",\n \"h4\", \"h5\", \"h6\", \"head\", \"header\", \"hgroup\", \"hr\", \"html\", \"i\", \"iframe\",\n \"img\", \"input\", \"ins\", \"kbd\", \"label\", \"legend\", \"li\", \"link\", \"main\",\n \"map\", \"mark\", \"marquee\", \"menu\", \"meta\", \"meter\", \"nav\", \"noscript\",\n \"object\", \"ol\", \"optgroup\", \"option\", \"output\", \"p\", \"param\", \"picture\",\n \"pre\", \"progress\", \"q\", \"rp\", \"rt\", \"ruby\", \"s\", \"samp\", \"script\",\n \"section\", \"select\", \"slot\", \"small\", \"source\", \"span\", \"strong\", \"style\",\n \"sub\", \"summary\", \"sup\", \"table\", \"tbody\", \"td\", \"template\", \"textarea\",\n \"tfoot\", \"th\", \"thead\", \"time\", \"title\", \"tr\", \"track\", \"u\", \"ul\", \"var\",\n \"video\", \"wbr\"\n])\n\n/**\n * HTML tag names of void elements.\n */\nexport const HTML_VOID_ELEMENT_TAGS = new Set([\n \"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"link\", \"meta\",\n \"param\", \"source\", \"track\", \"wbr\",\n])\n\n/**\n * https://github.com/vuejs/vue/blob/e4da249ab8ef32a0b8156c840c9d2b9773090f8a/src/platforms/web/compiler/util.js#L12\n */\nexport const HTML_CAN_BE_LEFT_OPEN_TAGS = new Set([\n \"colgroup\", \"li\", \"options\", \"p\", \"td\", \"tfoot\", \"th\", \"thead\", \n \"tr\", \"source\",\n])\n\n/**\n * https://github.com/vuejs/vue/blob/e4da249ab8ef32a0b8156c840c9d2b9773090f8a/src/platforms/web/compiler/util.js#L18\n */\nexport const HTML_NON_FHRASING_TAGS = new Set([\n \"address\", \"article\", \"aside\", \"base\", \"blockquote\", \"body\", \"caption\", \n \"col\", \"colgroup\", \"dd\", \"details\", \"dialog\", \"div\", \"dl\", \"dt\", \"fieldset\", \n \"figcaption\", \"figure\", \"footer\", \"form\", \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \n \"h6\", \"head\", \"header\", \"hgroup\", \"hr\", \"html\", \"legend\", \"li\", \"menuitem\", \n \"meta\", \"optgroup\", \"option\", \"param\", \"rp\", \"rt\", \"source\", \"style\", \n \"summary\", \"tbody\", \"td\", \"tfoot\", \"th\", \"thead\", \"title\", \"tr\", \"track\",\n])\n\n/**\n * HTML tag names of RCDATA.\n */\nexport const HTML_RCDATA_TAGS = new Set([\n \"title\", \"textarea\",\n])\n\n/**\n * HTML tag names of RAWTEXT.\n */\nexport const HTML_RAWTEXT_TAGS = new Set([\n \"style\", \"xmp\", \"iframe\", \"noembed\", \"noframes\", \"noscript\", \"script\",\n])\n\n/**\n * SVG tag names.\n */\nexport const SVG_TAGS = new Set([\n \"a\", \"altGlyph\", \"altGlyphDef\", \"altGlyphItem\", \"animate\", \"animateColor\", \n \"animateMotion\", \"animateTransform\", \"animation\", \"audio\", \"canvas\", \n \"circle\", \"clipPath\", \"color-profile\", \"cursor\", \"defs\", \"desc\", \"discard\", \n \"ellipse\", \"feBlend\", \"feColorMatrix\", \"feComponentTransfer\", \"feComposite\", \n \"feConvolveMatrix\", \"feDiffuseLighting\", \"feDisplacementMap\", \n \"feDistantLight\", \"feDropShadow\", \"feFlood\", \"feFuncA\", \"feFuncB\", \n \"feFuncG\", \"feFuncR\", \"feGaussianBlur\", \"feImage\", \"feMerge\", \"feMergeNode\", \n \"feMorphology\", \"feOffset\", \"fePointLight\", \"feSpecularLighting\", \n \"feSpotLight\", \"feTile\", \"feTurbulence\", \"filter\", \"font\", \"font-face\", \n \"font-face-format\", \"font-face-name\", \"font-face-src\", \"font-face-uri\", \n \"foreignObject\", \"g\", \"glyph\", \"glyphRef\", \"handler\", \"hatch\", \"hatchpath\", \n \"hkern\", \"iframe\", \"image\", \"line\", \"linearGradient\", \"listener\", \"marker\", \n \"mask\", \"mesh\", \"meshgradient\", \"meshpatch\", \"meshrow\", \"metadata\", \n \"missing-glyph\", \"mpath\", \"path\", \"pattern\", \"polygon\", \"polyline\", \n \"prefetch\", \"radialGradient\", \"rect\", \"script\", \"set\", \"solidColor\", \n \"solidcolor\", \"stop\", \"style\", \"svg\", \"switch\", \"symbol\", \"tbreak\", \"text\", \n \"textArea\", \"textPath\", \"title\", \"tref\", \"tspan\", \"unknown\", \"use\", \"video\", \n \"view\", \"vkern\",\n])\n\n/**\n * The map from lowercase names to actual names in SVG.\n */\nexport const SVG_ELEMENT_NAME_MAP = new Map<string, string>()\nfor (const name of SVG_TAGS) {\n if (/[A-Z]/.test(name)) {\n SVG_ELEMENT_NAME_MAP.set(name.toLowerCase(), name)\n }\n}\n\n/**\n * MathML tag names.\n */\nexport const MATHML_TAGS = new Set([\n \"abs\", \"and\", \"annotation\", \"annotation-xml\", \"apply\", \"approx\", \"arccos\", \n \"arccosh\", \"arccot\", \"arccoth\", \"arccsc\", \"arccsch\", \"arcsec\", \"arcsech\", \n \"arcsin\", \"arcsinh\", \"arctan\", \"arctanh\", \"arg\", \"bind\", \"bvar\", \"card\", \n \"cartesianproduct\", \"cbytes\", \"ceiling\", \"cerror\", \"ci\", \"cn\", \"codomain\", \n \"complexes\", \"compose\", \"condition\", \"conjugate\", \"cos\", \"cosh\", \"cot\", \n \"coth\", \"cs\", \"csc\", \"csch\", \"csymbol\", \"curl\", \"declare\", \"degree\", \n \"determinant\", \"diff\", \"divergence\", \"divide\", \"domain\", \n \"domainofapplication\", \"emptyset\", \"encoding\", \"eq\", \"equivalent\", \n \"eulergamma\", \"exists\", \"exp\", \"exponentiale\", \"factorial\", \"factorof\", \n \"false\", \"floor\", \"fn\", \"forall\", \"function\", \"gcd\", \"geq\", \"grad\", \"gt\", \n \"ident\", \"image\", \"imaginary\", \"imaginaryi\", \"implies\", \"in\", \"infinity\", \n \"int\", \"integers\", \"intersect\", \"interval\", \"inverse\", \"lambda\", \n \"laplacian\", \"lcm\", \"leq\", \"limit\", \"list\", \"ln\", \"log\", \"logbase\", \n \"lowlimit\", \"lt\", \"m:apply\", \"m:mrow\", \"maction\", \"malign\", \"maligngroup\", \n \"malignmark\", \"malignscope\", \"math\", \"matrix\", \"matrixrow\", \"max\", \"mean\", \n \"median\", \"menclose\", \"merror\", \"mfenced\", \"mfrac\", \"mfraction\", \"mglyph\", \n \"mi\", \"mi\\\"\", \"min\", \"minus\", \"mlabeledtr\", \"mlongdiv\", \"mmultiscripts\", \n \"mn\", \"mo\", \"mode\", \"moment\", \"momentabout\", \"mover\", \"mpadded\", \"mphantom\", \n \"mprescripts\", \"mroot\", \"mrow\", \"ms\", \"mscarries\", \"mscarry\", \"msgroup\", \n \"msline\", \"mspace\", \"msqrt\", \"msrow\", \"mstack\", \"mstyle\", \"msub\", \"msubsup\", \n \"msup\", \"mtable\", \"mtd\", \"mtext\", \"mtr\", \"munder\", \"munderover\", \n \"naturalnumbers\", \"neq\", \"none\", \"not\", \"notanumber\", \"notin\", \n \"notprsubset\", \"notsubset\", \"or\", \"otherwise\", \"outerproduct\", \n \"partialdiff\", \"pi\", \"piece\", \"piecewice\", \"piecewise\", \"plus\", \"power\", \n \"primes\", \"product\", \"prsubset\", \"quotient\", \"rationals\", \"real\", \"reals\", \n \"reln\", \"rem\", \"root\", \"scalarproduct\", \"sdev\", \"sec\", \"sech\", \"select\", \n \"selector\", \"semantics\", \"sep\", \"set\", \"setdiff\", \"share\", \"sin\", \"sinh\", \n \"span\", \"subset\", \"sum\", \"tan\", \"tanh\", \"tendsto\", \"times\", \"transpose\", \n \"true\", \"union\", \"uplimit\", \"var\", \"variance\", \"vector\", \"vectorproduct\", \n \"xor\",\n])\n","/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2017 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\nimport assert from \"assert\"\nimport type {\n ErrorCode,\n HasLocation,\n Namespace,\n Token,\n VAttribute,\n} from \"../ast/index\"\nimport { ParseError } from \"../ast/index\"\nimport { debug } from \"../common/debug\"\nimport type { Tokenizer, TokenizerState, TokenType } from \"./tokenizer\"\n\nconst DUMMY_PARENT: any = Object.freeze({})\n\n/**\n * Concatenate token values.\n * @param text Concatenated text.\n * @param token The token to concatenate.\n */\nfunction concat(text: string, token: Token): string {\n return text + token.value\n}\n\n/**\n * The type of intermediate tokens.\n */\nexport type IntermediateToken = StartTag | EndTag | Text | Mustache\n\n/**\n * The type of start tags.\n */\nexport interface StartTag extends HasLocation {\n type: \"StartTag\"\n name: string\n rawName: string\n selfClosing: boolean\n attributes: VAttribute[]\n}\n\n/**\n * The type of end tags.\n */\nexport interface EndTag extends HasLocation {\n type: \"EndTag\"\n name: string\n}\n\n/**\n * The type of text chunks.\n */\nexport interface Text extends HasLocation {\n type: \"Text\"\n value: string\n}\n\n/**\n * The type of text chunks of an expression container.\n */\nexport interface Mustache extends HasLocation {\n type: \"Mustache\"\n value: string\n startToken: Token\n endToken: Token\n}\n\n/**\n * The class to create HTML tokens from ESTree-like tokens which are created by a Tokenizer.\n */\nexport class IntermediateTokenizer {\n private tokenizer: Tokenizer\n private currentToken: IntermediateToken | null\n private attribute: VAttribute | null\n private attributeNames: Set<string>\n private expressionStartToken: Token | null\n private expressionTokens: Token[]\n\n public readonly tokens: Token[]\n public readonly comments: Token[]\n\n /**\n * The source code text.\n */\n public get text(): string {\n return this.tokenizer.text\n }\n\n /**\n * The parse errors.\n */\n public get errors(): ParseError[] {\n return this.tokenizer.errors\n }\n\n /**\n * The current state.\n */\n public get state(): TokenizerState {\n return this.tokenizer.state\n }\n public set state(value: TokenizerState) {\n this.tokenizer.state = value\n }\n\n /**\n * The current namespace.\n */\n public get namespace(): Namespace {\n return this.tokenizer.namespace\n }\n public set namespace(value: Namespace) {\n this.tokenizer.namespace = value\n }\n\n /**\n * The current flag of expression enabled.\n */\n public get expressionEnabled(): boolean {\n return this.tokenizer.expressionEnabled\n }\n public set expressionEnabled(value: boolean) {\n this.tokenizer.expressionEnabled = value\n }\n\n /**\n * Initialize this intermediate tokenizer.\n * @param tokenizer The tokenizer.\n */\n public constructor(tokenizer: Tokenizer) {\n this.tokenizer = tokenizer\n this.currentToken = null\n this.attribute = null\n this.attributeNames = new Set<string>()\n this.expressionStartToken = null\n this.expressionTokens = []\n this.tokens = []\n this.comments = []\n }\n\n /**\n * Get the next intermediate token.\n * @returns The intermediate token or null.\n */\n public nextToken(): IntermediateToken | null {\n let token: Token | null = null\n let result: IntermediateToken | null = null\n\n while (result == null && (token = this.tokenizer.nextToken()) != null) {\n result = this[token.type as TokenType](token)\n }\n\n if (result == null && token == null && this.currentToken != null) {\n result = this.commit()\n }\n\n return result\n }\n\n /**\n * Commit the current token.\n */\n private commit(): IntermediateToken {\n assert(this.currentToken != null || this.expressionStartToken != null)\n\n let token = this.currentToken\n this.currentToken = null\n this.attribute = null\n\n if (this.expressionStartToken != null) {\n // VExpressionEnd was not found.\n // Concatenate the deferred tokens to the committed token.\n const start = this.expressionStartToken\n const end = this.expressionTokens.at(-1) || start\n const value = this.expressionTokens.reduce(concat, start.value)\n this.expressionStartToken = null\n this.expressionTokens = []\n\n if (token == null) {\n token = {\n type: \"Text\",\n range: [start.range[0], end.range[1]],\n loc: { start: start.loc.start, end: end.loc.end },\n value,\n }\n } else if (token.type === \"Text\") {\n token.range[1] = end.range[1]\n token.loc.end = end.loc.end\n token.value += value\n } else {\n throw new Error(\"unreachable\")\n }\n }\n\n return token as IntermediateToken\n }\n\n /**\n * Report an invalid character error.\n * @param code The error code.\n */\n private reportParseError(token: HasLocation, code: ErrorCode): void {\n const error = ParseError.fromCode(\n code,\n token.range[0],\n token.loc.start.line,\n token.loc.start.column,\n )\n this.errors.push(error)\n\n debug(\"[html] syntax error:\", error.message)\n }\n\n /**\n * Process the given comment token.\n * @param token The comment token to process.\n */\n private processComment(token: Token): IntermediateToken | null {\n this.comments.push(token)\n\n if (this.currentToken?.type === \"Text\") {\n return this.commit()\n }\n return null\n }\n\n /**\n * Process the given text token.\n * @param token The text token to process.\n */\n private processText(token: Token): IntermediateToken | null {\n this.tokens.push(token)\n\n let result: IntermediateToken | null = null\n\n if (this.expressionStartToken != null) {\n // Defer this token until a VExpressionEnd token or a non-text token appear.\n const lastToken =\n this.expressionTokens.at(-1) || this.expressionStartToken\n if (lastToken.range[1] === token.range[0]) {\n this.expressionTokens.push(token)\n return null\n }\n\n result = this.commit()\n } else if (this.currentToken != null) {\n // Concatenate this token to the current text token.\n if (\n this.currentToken.type === \"Text\" &&\n this.currentToken.range[1] === token.range[0]\n ) {\n this.currentToken.value += token.value\n this.currentToken.range[1] = token.range[1]\n this.currentToken.loc.end = token.loc.end\n return null\n }\n\n result = this.commit()\n }\n assert(this.currentToken == null)\n\n this.currentToken = {\n type: \"Text\",\n range: [token.range[0], token.range[1]],\n loc: { start: token.loc.start, end: token.loc.end },\n value: token.value,\n }\n\n return result\n }\n\n /**\n * Process a HTMLAssociation token.\n * @param token The token to process.\n */\n protected HTMLAssociation(token: Token): IntermediateToken | null {\n this.tokens.push(token)\n\n if (this.attribute != null) {\n this.attribute.range[1] = token.range[1]\n this.attribute.loc.end = token.loc.end\n\n if (\n this.currentToken == null ||\n this.currentToken.type !== \"StartTag\"\n ) {\n throw new Error(\"unreachable\")\n }\n this.currentToken.range[1] = token.range[1]\n this.currentToken.loc.end = token.loc.end\n }\n\n return null\n }\n\n /**\n * Process a HTMLBogusComment token.\n * @param token The token to process.\n */\n protected HTMLBogusComment(token: Token): IntermediateToken | null {\n return this.processComment(token)\n }\n\n /**\n * Process a HTMLCDataText token.\n * @param token The token to process.\n */\n protected HTMLCDataText(token: Token): IntermediateToken | null {\n return this.processText(token)\n }\n\n /**\n * Process a HTMLComment token.\n * @param token The token to process.\n */\n protected HTMLComment(token: Token): IntermediateToken | null {\n return this.processComment(token)\n }\n\n /**\n * Process a HTMLEndTagOpen token.\n * @param token The token to process.\n */\n protected HTMLEndTagOpen(token: Token): IntermediateToken | null {\n this.tokens.push(token)\n\n let result: IntermediateToken | null = null\n\n if (this.currentToken != null || this.expressionStartToken != null) {\n result = this.commit()\n }\n\n this.currentToken = {\n type: \"EndTag\",\n range: [token.range[0], token.range[1]],\n loc: { start: token.loc.start, end: token.loc.end },\n name: token.value,\n }\n\n return result\n }\n\n /**\n * Process a HTMLIdentifier token.\n * @param token The token to process.\n */\n protected HTMLIdentifier(token: Token): IntermediateToken | null {\n this.tokens.push(token)\n\n if (\n this.currentToken == null ||\n this.currentToken.type === \"Text\" ||\n this.currentToken.type === \"Mustache\"\n ) {\n throw new Error(\"unreachable\")\n }\n if (this.currentToken.type === \"EndTag\") {\n this.reportParseError(token, \"end-tag-with-attributes\")\n return null\n }\n if (this.attributeNames.has(token.value)) {\n this.reportParseError(token, \"duplicate-attribute\")\n }\n this.attributeNames.add(token.value)\n\n this.attribute = {\n type: \"VAttribute\",\n range: [token.range[0], token.range[1]],\n loc: { start: token.loc.start, end: token.loc.end },\n parent: DUMMY_PARENT,\n directive: false,\n key: {\n type: \"VIdentifier\",\n range: [token.range[0], token.range[1]],\n loc: { start: token.loc.start, end: token.loc.end },\n parent: DUMMY_PARENT,\n name: token.value,\n rawName: this.text.slice(token.range[0], token.range[1]),\n },\n value: null,\n }\n this.attribute.key.parent = this.attribute\n\n this.currentToken.range[1] = token.range[1]\n this.currentToken.loc.end = token.loc.end\n this.currentToken.attributes.push(this.attribute)\n\n return null\n }\n\n /**\n * Process a HTMLLiteral token.\n * @param token The token to process.\n */\n protected HTMLLiteral(token: Token): IntermediateToken | null {\n this.tokens.push(token)\n\n if (this.attribute != null) {\n this.attribute.range[1] = token.range[1]\n this.attribute.loc.end = token.loc.end\n this.attribute.value = {\n type: \"VLiteral\",\n range: [token.range[0], token.range[1]],\n loc: { start: token.loc.start, end: token.loc.end },\n parent: this.attribute,\n value: token.value,\n }\n\n if (\n this.currentToken == null ||\n this.currentToken.type !== \"StartTag\"\n ) {\n throw new Error(\"unreachable\")\n }\n this.currentToken.range[1] = token.range[1]\n this.currentToken.loc.end = token.loc.end\n }\n\n return null\n }\n\n /**\n * Process a HTMLRCDataText token.\n * @param token The token to process.\n */\n protected HTMLRCDataText(token: Token): IntermediateToken | null {\n return this.processText(token)\n }\n\n /**\n * Process a HTMLRawText token.\n * @param token The token to process.\n */\n protected HTMLRawText(token: Token): IntermediateToken | null {\n return this.processText(token)\n }\n\n /**\n * Process a HTMLSelfClosingTagClose token.\n * @param token The token to process.\n */\n protected HTMLSelfClosingTagClose(token: Token): IntermediateToken | null {\n this.tokens.push(token)\n\n if (this.currentToken == null || this.currentToken.type === \"Text\") {\n throw new Error(\"unreachable\")\n }\n\n if (this.currentToken.type === \"StartTag\") {\n this.currentToken.selfClosing = true\n } else {\n this.reportParseError(token, \"end-tag-with-trailing-solidus\")\n }\n\n this.currentToken.range[1] = token.range[1]\n this.currentToken.loc.end = token.loc.end\n\n return this.commit()\n }\n\n /**\n * Process a HTMLTagClose token.\n * @param token The token to process.\n */\n protected HTMLTagClose(token: Token): IntermediateToken | null {\n this.tokens.push(token)\n\n if (this.currentToken == null || this.currentToken.type === \"Text\") {\n throw new Error(\"unreachable\")\n }\n\n this.currentToken.range[1] = token.range[1]\n this.currentToken.loc.end = token.loc.end\n\n return this.commit()\n }\n\n /**\n * Process a HTMLTagOpen token.\n * @param token The token to process.\n */\n protected HTMLTagOpen(token: Token): IntermediateToken | null {\n this.tokens.push(token)\n\n let result: IntermediateToken | null = null\n\n if (this.currentToken != null || this.expressionStartToken != null) {\n result = this.commit()\n }\n\n this.currentToken = {\n type: \"StartTag\",\n range: [token.range[0], token.range[1]],\n loc: { start: token.loc.start, end: token.loc.end },\n name: token.value,\n rawName: this.text.slice(token.range[0] + 1, token.range[1]),\n selfClosing: false,\n attributes: [],\n }\n this.attribute = null\n this.attributeNames.clear()\n\n return result\n }\n\n /**\n * Process a HTMLText token.\n * @param token The token to process.\n */\n protected HTMLText(token: Token): IntermediateToken | null {\n return this.processText(token)\n }\n\n /**\n * Process a HTMLWhitespace token.\n * @param token The token to process.\n */\n protected HTMLWhitespace(token: Token): IntermediateToken | null {\n return this.processText(token)\n }\n\n /**\n * Process a VExpressionStart token.\n * @param token The token to process.\n */\n protected VExpressionStart(token: Token): IntermediateToken | null {\n if (this.expressionStartToken != null) {\n return this.processText(token)\n }\n const separated =\n this.currentToken != null &&\n this.currentToken.range[1] !== token.range[0]\n const result = separated ? this.commit() : null\n\n this.tokens.push(token)\n this.expressionStartToken = token\n\n return result\n }\n\n /**\n * Process a VExpressionEnd token.\n * @param token The token to process.\n */\n protected VExpressionEnd(token: Token): IntermediateToken | null {\n if (this.expressionStartToken == null) {\n return this.processText(token)\n }\n\n const start = this.expressionStartToken\n const end = this.expressionTokens.at(-1) || start\n\n // If it's '{{}}', it's handled as a text.\n if (token.range[0] === start.range[1]) {\n this.tokens.pop()\n this.expressionStartToken = null\n const result = this.processText(start)\n this.processText(token)\n return result\n }\n\n // If invalid notation `</>` exists directly before this token, separate it.\n if (end.range[1] !== token.range[0]) {\n const result = this.commit()\n this.processText(token)\n return result\n }\n\n // Clear state.\n const value = this.expressionTokens.reduce(concat, \"\")\n this.tokens.push(token)\n this.expressionStartToken = null\n this.expressionTokens = []\n\n // Create token.\n const result = this.currentToken != null ? this.commit() : null\n this.currentToken = {\n type: \"Mustache\",\n range: [start.range[0], token.range[1]],\n loc: { start: start.loc.start, end: token.loc.end },\n value,\n startToken: start,\n endToken: token,\n }\n\n return result || this.commit()\n }\n}\n","/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2017 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\nimport assert from \"assert\"\nimport type {\n ErrorCode,\n HasLocation,\n Namespace,\n Token,\n VAttribute,\n VDocumentFragment,\n VElement,\n VExpressionContainer,\n VLiteral,\n} from \"../ast/index\"\nimport { NS, ParseError } from \"../ast/index\"\nimport { debug } from \"../common/debug\"\nimport { LocationCalculatorForHtml } from \"../common/location-calculator\"\nimport {\n convertToDirective,\n processMustache,\n resolveReferences,\n} from \"../template/index\"\nimport {\n MATHML_ATTRIBUTE_NAME_MAP,\n SVG_ATTRIBUTE_NAME_MAP,\n} from \"./util/attribute-names\"\nimport {\n HTML_CAN_BE_LEFT_OPEN_TAGS,\n HTML_NON_FHRASING_TAGS,\n HTML_RAWTEXT_TAGS,\n HTML_RCDATA_TAGS,\n HTML_VOID_ELEMENT_TAGS,\n SVG_ELEMENT_NAME_MAP,\n} from \"./util/tag-names\"\nimport type {\n IntermediateToken,\n EndTag,\n Mustache,\n StartTag,\n Text,\n} from \"./intermediate-tokenizer\"\nimport { IntermediateTokenizer } from \"./intermediate-tokenizer\"\nimport type { Tokenizer } from \"./tokenizer\"\nimport type { ParserOptions } from \"../common/parser-options\"\nimport {\n isSFCFile,\n getScriptParser,\n getParserLangFromSFC,\n} from \"../common/parser-options\"\nimport { sortedIndexBy, sortedLastIndexBy } from \"../utils/utils\"\nimport type {\n CustomTemplateTokenizer,\n CustomTemplateTokenizerConstructor,\n} from \"./custom-tokenizer\"\nimport { isScriptSetupElement, isTSLang } from \"../common/ast-utils\"\n\nconst DIRECTIVE_NAME = /^(?:v-|[.:@#]).*[^.:@#]$/u\nconst DT_DD = /^d[dt]$/u\nconst DUMMY_PARENT: any = Object.freeze({})\n\n/**\n * Gets the tag name from the given node or token.\n * For SFC, it returns the value of `rawName` to be case sensitive.\n */\nfunction getTagName(\n startTagOrElement: { name: string; rawName: string },\n isSFC: boolean,\n) {\n return isSFC ? startTagOrElement.rawName : startTagOrElement.name\n}\n\n/**\n * Check whether the element is a MathML text integration point or not.\n * @see https://html.spec.whatwg.org/multipage/parsing.html#tree-construction-dispatcher\n * @param element The current element.\n * @param isSFC For SFC, give `true`.\n * @returns `true` if the element is a MathML text integration point.\n */\nfunction isMathMLIntegrationPoint(element: VElement, isSFC: boolean): boolean {\n if (element.namespace === NS.MathML) {\n const name = getTagName(element, isSFC)\n return (\n name === \"mi\" ||\n name === \"mo\" ||\n name === \"mn\" ||\n name === \"ms\" ||\n name === \"mtext\"\n )\n }\n return false\n}\n\n/**\n * Check whether the element is a HTML integration point or not.\n * @see https://html.spec.whatwg.org/multipage/parsing.html#tree-construction-dispatcher\n * @param element The current element.\n * @param isSFC For SFC, give `true`.\n * @returns `true` if the element is a HTML integration point.\n */\nfunction isHTMLIntegrationPoint(element: VElement, isSFC: boolean): boolean {\n if (element.namespace === NS.MathML) {\n return (\n getTagName(element, isSFC) === \"annotation-xml\" &&\n element.startTag.attributes.some(\n (a) =>\n a.directive === false &&\n a.key.name === \"encoding\" &&\n a.value != null &&\n (a.value.value === \"text/html\" ||\n a.value.value === \"application/xhtml+xml\"),\n )\n )\n }\n if (element.namespace === NS.SVG) {\n const name = getTagName(element, isSFC)\n return name === \"foreignObject\" || name === \"desc\" || name === \"title\"\n }\n\n return false\n}\n\n/**\n * Adjust element names by the current namespace.\n * @param name The lowercase element name to adjust.\n * @param namespace The current namespace.\n * @returns The adjusted element name.\n */\nfunction adjustElementName(name: string, namespace: Namespace): string {\n if (namespace === NS.SVG) {\n return SVG_ELEMENT_NAME_MAP.get(name) || name\n }\n return name\n}\n\n/**\n * Adjust attribute names by the current namespace.\n * @param name The lowercase attribute name to adjust.\n * @param namespace The current namespace.\n * @returns The adjusted attribute name.\n */\nfunction adjustAttributeName(name: string, namespace: Namespace): string {\n if (namespace === NS.SVG) {\n return SVG_ATTRIBUTE_NAME_MAP.get(name) || name\n }\n if (namespace === NS.MathML) {\n return MATHML_ATTRIBUTE_NAME_MAP.get(name) || name\n }\n return name\n}\n\n/**\n * Set the location of the last child node to the end location of the given node.\n * @param node The node to commit the end location.\n */\nfunction propagateEndLocation(node: VDocumentFragment | VElement): void {\n const lastChild =\n (node.type === \"VElement\" ? node.endTag : null) || node.children.at(-1)\n if (lastChild != null) {\n node.range[1] = lastChild.range[1]\n node.loc.end = lastChild.loc.end\n }\n}\n\n/**\n * The parser of HTML.\n * This is not following to the HTML spec completely because Vue.js template spec is pretty different to HTML.\n */\nexport class Parser {\n private tokenizer: IntermediateTokenizer | CustomTemplateTokenizer\n private locationCalculator: LocationCalculatorForHtml\n private baseParserOptions: ParserOptions\n private isSFC: boolean\n private document: VDocumentFragment\n private elementStack: VElement[]\n private vPreElement: VElement | null\n private postProcessesForScript: ((\n htmlParserOptions: ParserOptions,\n scriptParserOptions: ParserOptions,\n ) => void)[] = []\n\n /**\n * The source code text.\n */\n private get text(): string {\n return this.tokenizer.text\n }\n\n /**\n * The tokens.\n */\n private get tokens(): Token[] {\n return this.tokenizer.tokens\n }\n\n /**\n * The comments.\n */\n private get comments(): Token[] {\n return this.tokenizer.comments\n }\n\n /**\n * The syntax errors which are found in this parsing.\n */\n private get errors(): ParseError[] {\n return this.tokenizer.errors\n }\n\n /**\n * The current namespace.\n */\n private get namespace(): Namespace {\n return this.tokenizer.namespace\n }\n private set namespace(value: Namespace) {\n this.tokenizer.namespace = value\n }\n\n /**\n * The current flag of expression enabled.\n */\n private get expressionEnabled(): boolean {\n return this.tokenizer.expressionEnabled\n }\n private set expressionEnabled(value: boolean) {\n this.tokenizer.expressionEnabled = value\n }\n\n /**\n * Get the current node.\n */\n private get currentNode(): VDocumentFragment | VElement {\n return this.elementStack.at(-1) || this.document\n }\n\n /**\n * Check if the current location is in a v-pre element.\n */\n private get isInVPreElement(): boolean {\n return this.vPreElement != null\n }\n\n /**\n * Initialize this parser.\n * @param tokenizer The tokenizer to parse.\n * @param parserOptions The parser options to parse inline expressions.\n */\n public constructor(tokenizer: Tokenizer, parserOptions: ParserOptions) {\n this.tokenizer = new IntermediateTokenizer(tokenizer)\n this.locationCalculator = new LocationCalculatorForHtml(\n tokenizer.gaps,\n tokenizer.lineTerminators,\n )\n this.baseParserOptions = parserOptions\n this.isSFC = isSFCFile(parserOptions)\n this.document = {\n type: \"VDocumentFragment\",\n range: [0, 0],\n loc: {\n start: { line: 1, column: 0 },\n end: { line: 1, column: 0 },\n },\n parent: null,\n children: [],\n tokens: this.tokens,\n comments: this.comments,\n errors: this.errors,\n }\n this.elementStack = []\n this.vPreElement = null\n\n this.postProcessesForScript = []\n }\n\n /**\n * Parse the HTML which was given in this constructor.\n * @returns The result of parsing.\n */\n public parse(): VDocumentFragment {\n let token: IntermediateToken | null = null\n while ((token = this.tokenizer.nextToken()) != null) {\n ;(this as any)[token.type](token)\n }\n\n this.popElementStackUntil(0)\n propagateEndLocation(this.document)\n\n const doc = this.document\n\n const htmlParserOptions = {\n ...this.baseParserOptions,\n parser: getScriptParser(\n this.baseParserOptions.parser,\n function* () {\n yield \"<template>\"\n yield getParserLangFromSFC(doc)\n },\n ),\n project: undefined,\n projectService: undefined,\n }\n const scriptParserOptions = {\n ...this.baseParserOptions,\n parser: getScriptParser(this.baseParserOptions.parser, () =>\n getParserLangFromSFC(doc),\n ),\n }\n for (const proc of this.postProcessesForScript) {\n proc(htmlParserOptions, scriptParserOptions)\n }\n this.postProcessesForScript = []\n\n return doc\n }\n\n /**\n * Report an invalid character error.\n * @param code The error code.\n */\n private reportParseError(token: HasLocation, code: ErrorCode): void {\n const error = ParseError.fromCode(\n code,\n token.range[0],\n token.loc.start.line,\n token.loc.start.column,\n )\n this.errors.push(error)\n\n debug(\"[html] syntax error:\", error.message)\n }\n\n /**\n * Pop an element from the current element stack.\n */\n private popElementStack(): void {\n assert(this.elementStack.length >= 1)\n\n const element = this.elementStack.pop()!\n propagateEndLocation(element)\n\n // Update the current namespace.\n const current = this.currentNode\n this.namespace =\n current.type === \"VElement\" ? current.namespace : NS.HTML\n\n // Update v-pre state.\n if (this.vPreElement === element) {\n this.vPreElement = null\n this.expressionEnabled = true\n }\n\n // Update expression flag.\n if (this.elementStack.length === 0) {\n this.expressionEnabled = false\n }\n }\n\n /**\n * Pop elements from the current element stack.\n * @param index The index of the element you want to pop.\n */\n private popElementStackUntil(index: number): void {\n while (this.elementStack.length > index) {\n this.popElementStack()\n }\n }\n\n /**\n * Gets the tag name from the given node or token.\n * For SFC, it returns the value of `rawName` to be case sensitive.\n */\n private getTagName(startTagOrElement: { name: string; rawName: string }) {\n return getTagName(startTagOrElement, this.isSFC)\n }\n\n /**\n * Detect the namespace of the new element.\n * @param token The StartTag token to detect.\n * @returns The namespace of the new element.\n */\n //eslint-disable-next-line complexity\n private detectNamespace(token: StartTag): Namespace {\n const name = this.getTagName(token)\n let ns = this.namespace\n\n if (ns === NS.MathML || ns === NS.SVG) {\n const element = this.currentNode\n if (element.type === \"VElement\") {\n if (\n element.namespace === NS.MathML &&\n this.getTagName(element) === \"annotation-xml\" &&\n name === \"svg\"\n ) {\n return NS.SVG\n }\n if (\n isHTMLIntegrationPoint(element, this.isSFC) ||\n (isMathMLIntegrationPoint(element, this.isSFC) &&\n name !== \"mglyph\" &&\n name !== \"malignmark\")\n ) {\n ns = NS.HTML\n }\n }\n }\n\n if (ns === NS.HTML) {\n if (name === \"svg\") {\n return NS.SVG\n }\n if (name === \"math\") {\n return NS.MathML\n }\n }\n\n if (name === \"template\") {\n const xmlns = token.attributes.find((a) => a.key.name === \"xmlns\")\n const value = xmlns?.value?.value\n\n if (value === NS.HTML || value === NS.MathML || value === NS.SVG) {\n return value\n }\n }\n\n return ns\n }\n\n /**\n * Close the current element if necessary.\n * @param token The start tag to check.\n */\n private closeCurrentElementIfNecessary(token: StartTag): void {\n const element = this.currentNode\n if (element.type !== \"VElement\") {\n return\n }\n const name = this.getTagName(token)\n const elementName = this.getTagName(element)\n\n if (elementName === \"p\" && HTML_NON_FHRASING_TAGS.has(name)) {\n this.popElementStack()\n }\n if (elementName === name && HTML_CAN_BE_LEFT_OPEN_TAGS.has(name)) {\n this.popElementStack()\n }\n if (DT_DD.test(elementName) && DT_DD.test(name)) {\n this.popElementStack()\n }\n }\n\n /**\n * Adjust and validate the given attribute node.\n * @param node The attribute node to handle.\n * @param namespace The current namespace.\n */\n private processAttribute(node: VAttribute, namespace: Namespace): void {\n if (this.needConvertToDirective(node)) {\n this.postProcessesForScript.push(\n (parserOptions, scriptParserOptions) => {\n convertToDirective(\n this.text,\n parserOptions,\n scriptParserOptions,\n this.locationCalculator,\n node,\n )\n },\n )\n return\n }\n\n node.key.name = adjustAttributeName(node.key.name, namespace)\n const key = this.getTagName(node.key)\n const value = node.value?.value\n\n if (key === \"xmlns\" && value !== namespace) {\n this.reportParseError(node, \"x-invalid-namespace\")\n } else if (key === \"xmlns:xlink\" && value !== NS.XLink) {\n this.reportParseError(node, \"x-invalid-namespace\")\n }\n }\n /**\n * Checks whether the given attribute node is need convert to directive.\n * @param node The node to check\n */\n private needConvertToDirective(node: VAttribute) {\n const element = node.parent.parent\n const tagName = this.getTagName(element)\n const attrName = this.getTagName(node.key)\n\n if (\n attrName === \"generic\" &&\n element.parent.type === \"VDocumentFragment\" &&\n isScriptSetupElement(element) &&\n isTSLang(element)\n ) {\n return true\n }\n const expressionEnabled =\n this.expressionEnabled ||\n (attrName === \"v-pre\" && !this.isInVPreElement)\n if (!expressionEnabled) {\n return false\n }\n return (\n DIRECTIVE_NAME.test(attrName) ||\n attrName === \"slot-scope\" ||\n (tagName === \"template\" && attrName === \"scope\")\n )\n }\n\n /**\n * Process the given template text token with a configured template tokenizer, based on language.\n * @param token The template text token to process.\n * @param templateTokenizerOption The template tokenizer option.\n */\n private processTemplateText(\n token: Text,\n templateTokenizerOption: string | CustomTemplateTokenizerConstructor,\n ): void {\n const TemplateTokenizer: CustomTemplateTokenizerConstructor =\n typeof templateTokenizerOption === \"function\"\n ? templateTokenizerOption\n : // eslint-disable-next-line @typescript-eslint/no-require-imports\n require(templateTokenizerOption)\n const templateTokenizer = new TemplateTokenizer(\n token.value,\n this.text,\n {\n startingLine: token.loc.start.line,\n startingColumn: token.loc.start.column,\n },\n )\n\n // override this.tokenizer to forward expressionEnabled and state changes\n const rootTokenizer = this.tokenizer\n this.tokenizer = templateTokenizer\n\n let templateToken: IntermediateToken | null = null\n while ((templateToken = templateTokenizer.nextToken()) != null) {\n ;(this as any)[templateToken.type](templateToken)\n }\n\n this.tokenizer = rootTokenizer\n\n const index = sortedIndexBy(\n this.tokenizer.tokens,\n token,\n (x) => x.range[0],\n )\n const count =\n sortedLastIndexBy(this.tokenizer.tokens, token, (x) => x.range[1]) -\n index\n this.tokenizer.tokens.splice(index, count, ...templateTokenizer.tokens)\n this.tokenizer.comments.push(...templateTokenizer.comments)\n this.tokenizer.errors.push(...templateTokenizer.errors)\n }\n\n /**\n * Handle the start tag token.\n * @param token The token to handle.\n */\n //eslint-disable-next-line complexity\n protected StartTag(token: StartTag): void {\n debug(\"[html] StartTag %j\", token)\n\n this.closeCurrentElementIfNecessary(token)\n\n const parent = this.currentNode\n const namespace = this.detectNamespace(token)\n const element: VElement = {\n type: \"VElement\",\n range: [token.range[0], token.range[1]],\n loc: { start: token.loc.start, end: token.loc.end },\n parent,\n name: adjustElementName(token.name, namespace),\n rawName: token.rawName,\n namespace,\n startTag: {\n type: \"VStartTag\",\n range: token.range,\n loc: token.loc,\n parent: DUMMY_PARENT,\n selfClosing: token.selfClosing,\n attributes: token.attributes,\n },\n children: [],\n endTag: null,\n variables: [],\n }\n const hasVPre =\n !this.isInVPreElement &&\n token.attributes.some((a) => this.getTagName(a.key) === \"v-pre\")\n\n // Disable expression if v-pre\n if (hasVPre) {\n this.expressionEnabled = false\n }\n\n // Setup relations.\n parent.children.push(element)\n element.startTag.parent = element\n for (const attribute of token.attributes) {\n attribute.parent = element.startTag\n this.processAttribute(attribute, namespace)\n }\n\n // Resolve references.\n this.postProcessesForScript.push(() => {\n for (const attribute of element.startTag.attributes) {\n if (attribute.directive) {\n if (\n attribute.key.argument?.type === \"VExpressionContainer\"\n ) {\n resolveReferences(attribute.key.argument)\n }\n if (attribute.value != null) {\n resolveReferences(attribute.value)\n }\n }\n }\n })\n\n // Check whether the self-closing is valid.\n const isVoid =\n namespace === NS.HTML &&\n HTML_VOID_ELEMENT_TAGS.has(this.getTagName(element))\n if (token.selfClosing && !isVoid && namespace === NS.HTML) {\n this.reportParseError(\n token,\n \"non-void-html-element-start-tag-with-trailing-solidus\",\n )\n }\n\n // Vue.js supports self-closing elements even if it's not one of void elements.\n if (token.selfClosing || isVoid) {\n this.expressionEnabled = !this.isInVPreElement\n return\n }\n\n // Push to stack.\n this.elementStack.push(element)\n if (hasVPre) {\n assert(this.vPreElement === null)\n this.vPreElement = element\n }\n this.namespace = namespace\n\n // Update the content type of this element.\n if (namespace === NS.HTML) {\n const elementName = this.getTagName(element)\n if (element.parent.type === \"VDocumentFragment\") {\n const langAttr = element.startTag.attributes.find(\n (a) => !a.directive && a.key.name === \"lang\",\n ) as VAttribute | undefined\n const lang = langAttr?.value?.value\n\n if (elementName === \"template\") {\n this.expressionEnabled = true\n if (lang && lang !== \"html\") {\n // It is not an HTML template.\n this.tokenizer.state = \"RAWTEXT\"\n this.expressionEnabled = false\n }\n } else if (this.isSFC) {\n // Element is Custom Block. e.g. <i18n>\n // Referred to the Vue parser. See https://github.com/vuejs/vue-next/blob/cbaa3805064cb581fc2007cf63774c91d39844fe/packages/compiler-sfc/src/parse.ts#L127\n if (!lang || lang !== \"html\") {\n // Custom Block is not HTML.\n this.tokenizer.state = \"RAWTEXT\"\n }\n } else {\n if (HTML_RCDATA_TAGS.has(elementName)) {\n this.tokenizer.state = \"RCDATA\"\n }\n if (HTML_RAWTEXT_TAGS.has(elementName)) {\n this.tokenizer.state = \"RAWTEXT\"\n }\n }\n } else {\n if (HTML_RCDATA_TAGS.has(elementName)) {\n this.tokenizer.state = \"RCDATA\"\n }\n if (HTML_RAWTEXT_TAGS.has(elementName)) {\n this.tokenizer.state = \"RAWTEXT\"\n }\n }\n }\n }\n\n /**\n * Handle the end tag token.\n * @param token The token to handle.\n */\n protected EndTag(token: EndTag): void {\n debug(\"[html] EndTag %j\", token)\n\n const i = this.elementStack.findLastIndex(\n (el) => el.name.toLowerCase() === token.name,\n )\n if (i === -1) {\n this.reportParseError(token, \"x-invalid-end-tag\")\n return\n }\n\n const element = this.elementStack[i]\n element.endTag = {\n type: \"VEndTag\",\n range: token.range,\n loc: token.loc,\n parent: element,\n }\n\n this.popElementStackUntil(i)\n }\n\n /**\n * Handle the text token.\n * @param token The token to handle.\n */\n protected Text(token: Text): void {\n debug(\"[html] Text %j\", token)\n const parent = this.currentNode\n if (\n token.value &&\n parent.type === \"VElement\" &&\n parent.name === \"template\" &&\n parent.parent.type === \"VDocumentFragment\"\n ) {\n const langAttribute = parent.startTag.attributes.find(\n (a) => a.key.name === \"lang\",\n )\n const lang = (langAttribute?.value as VLiteral)?.value\n if (lang && lang !== \"html\") {\n const templateTokenizerOption =\n this.baseParserOptions.templateTokenizer?.[lang]\n if (templateTokenizerOption) {\n this.processTemplateText(token, templateTokenizerOption)\n return\n }\n }\n }\n parent.children.push({\n type: \"VText\",\n range: token.range,\n loc: token.loc,\n parent,\n value: token.value,\n })\n }\n\n /**\n * Handle the text token.\n * @param token The token to handle.\n */\n protected Mustache(token: Mustache): void {\n debug(\"[html] Mustache %j\", token)\n\n const parent = this.currentNode\n const container: VExpressionContainer = {\n type: \"VExpressionContainer\",\n range: token.range,\n loc: token.loc,\n parent,\n expression: null,\n references: [],\n }\n // Set relationship.\n parent.children.push(container)\n\n this.postProcessesForScript.push((parserOptions) => {\n processMustache(\n parserOptions,\n this.locationCalculator,\n container,\n token,\n )\n // Resolve references.\n resolveReferences(container)\n })\n }\n}\n","/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2017 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\n\n/**\n * Code mapping of HTML numeric entities.\n */\nexport const alternativeCR = new Map(\n [[128, 8364], [130, 8218], [131, 402], [132, 8222], [133, 8230], [134, 8224], [135, 8225], [136, 710], [137, 8240], [138, 352], [139, 8249], [140, 338], [142, 381], [145, 8216], [146, 8217], [147, 8220], [148, 8221], [149, 8226], [150, 8211], [151, 8212], [152, 732], [153, 8482], [154, 353], [155, 8250], [156, 339], [158, 382], [159, 376]]\n)\n","/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2017 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\n\n/**\n * HTML entities which are separated by their length.\n */\nexport const entitySets: {\n length: number,\n entities: {\n [name: string]: number[] | undefined\n }\n}[] = [{\"length\":32,\"entities\":{\"CounterClockwiseContourIntegral;\":[8755]}},{\"length\":25,\"entities\":{\"ClockwiseContourIntegral;\":[8754],\"DoubleLongLeftRightArrow;\":[10234]}},{\"length\":24,\"entities\":{\"NotNestedGreaterGreater;\":[10914,824]}},{\"length\":23,\"entities\":{\"DiacriticalDoubleAcute;\":[733],\"NotSquareSupersetEqual;\":[8931]}},{\"length\":22,\"entities\":{\"CloseCurlyDoubleQuote;\":[8221],\"DoubleContourIntegral;\":[8751],\"FilledVerySmallSquare;\":[9642],\"NegativeVeryThinSpace;\":[8203],\"NotPrecedesSlantEqual;\":[8928],\"NotRightTriangleEqual;\":[8941],\"NotSucceedsSlantEqual;\":[8929]}},{\"length\":21,\"entities\":{\"CapitalDifferentialD;\":[8517],\"DoubleLeftRightArrow;\":[8660],\"DoubleLongRightArrow;\":[10233],\"EmptyVerySmallSquare;\":[9643],\"NestedGreaterGreater;\":[8811],\"NotDoubleVerticalBar;\":[8742],\"NotGreaterSlantEqual;\":[10878,824],\"NotLeftTriangleEqual;\":[8940],\"NotSquareSubsetEqual;\":[8930],\"OpenCurlyDoubleQuote;\":[8220],\"ReverseUpEquilibrium;\":[10607]}},{\"length\":20,\"entities\":{\"DoubleLongLeftArrow;\":[10232],\"DownLeftRightVector;\":[10576],\"LeftArrowRightArrow;\":[8646],\"NegativeMediumSpace;\":[8203],\"NotGreaterFullEqual;\":[8807,824],\"NotRightTriangleBar;\":[10704,824],\"RightArrowLeftArrow;\":[8644],\"SquareSupersetEqual;\":[8850],\"leftrightsquigarrow;\":[8621]}},{\"length\":19,\"entities\":{\"DownRightTeeVector;\":[10591],\"DownRightVectorBar;\":[10583],\"LongLeftRightArrow;\":[10231],\"Longleftrightarrow;\":[10234],\"NegativeThickSpace;\":[8203],\"NotLeftTriangleBar;\":[10703,824],\"PrecedesSlantEqual;\":[8828],\"ReverseEquilibrium;\":[8651],\"RightDoubleBracket;\":[10215],\"RightDownTeeVector;\":[10589],\"RightDownVectorBar;\":[10581],\"RightTriangleEqual;\":[8885],\"SquareIntersection;\":[8851],\"SucceedsSlantEqual;\":[8829],\"blacktriangleright;\":[9656],\"longleftrightarrow;\":[10231]}},{\"length\":18,\"entities\":{\"DoubleUpDownArrow;\":[8661],\"DoubleVerticalBar;\":[8741],\"DownLeftTeeVector;\":[10590],\"DownLeftVectorBar;\":[10582],\"FilledSmallSquare;\":[9724],\"GreaterSlantEqual;\":[10878],\"LeftDoubleBracket;\":[10214],\"LeftDownTeeVector;\":[10593],\"LeftDownVectorBar;\":[10585],\"LeftTriangleEqual;\":[8884],\"NegativeThinSpace;\":[8203],\"NotGreaterGreater;\":[8811,824],\"NotLessSlantEqual;\":[10877,824],\"NotNestedLessLess;\":[10913,824],\"NotReverseElement;\":[8716],\"NotSquareSuperset;\":[8848,824],\"NotTildeFullEqual;\":[8775],\"RightAngleBracket;\":[10217],\"RightUpDownVector;\":[10575],\"SquareSubsetEqual;\":[8849],\"VerticalSeparator;\":[10072],\"blacktriangledown;\":[9662],\"blacktriangleleft;\":[9666],\"leftrightharpoons;\":[8651],\"rightleftharpoons;\":[8652],\"twoheadrightarrow;\":[8608]}},{\"length\":17,\"entities\":{\"DiacriticalAcute;\":[180],\"DiacriticalGrave;\":[96],\"DiacriticalTilde;\":[732],\"DoubleRightArrow;\":[8658],\"DownArrowUpArrow;\":[8693],\"EmptySmallSquare;\":[9723],\"GreaterEqualLess;\":[8923],\"GreaterFullEqual;\":[8807],\"LeftAngleBracket;\":[10216],\"LeftUpDownVector;\":[10577],\"LessEqualGreater;\":[8922],\"NonBreakingSpace;\":[160],\"NotPrecedesEqual;\":[10927,824],\"NotRightTriangle;\":[8939],\"NotSucceedsEqual;\":[10928,824],\"NotSucceedsTilde;\":[8831,824],\"NotSupersetEqual;\":[8841],\"RightTriangleBar;\":[10704],\"RightUpTeeVector;\":[10588],\"RightUpVectorBar;\":[10580],\"UnderParenthesis;\":[9181],\"UpArrowDownArrow;\":[8645],\"circlearrowright;\":[8635],\"downharpoonright;\":[8642],\"ntrianglerighteq;\":[8941],\"rightharpoondown;\":[8641],\"rightrightarrows;\":[8649],\"twoheadleftarrow;\":[8606],\"vartriangleright;\":[8883]}},{\"length\":16,\"entities\":{\"CloseCurlyQuote;\":[8217],\"ContourIntegral;\":[8750],\"DoubleDownArrow;\":[8659],\"DoubleLeftArrow;\":[8656],\"DownRightVector;\":[8641],\"LeftRightVector;\":[10574],\"LeftTriangleBar;\":[10703],\"LeftUpTeeVector;\":[10592],\"LeftUpVectorBar;\":[10584],\"LowerRightArrow;\":[8600],\"NotGreaterEqual;\":[8817],\"NotGreaterTilde;\":[8821],\"NotHumpDownHump;\":[8782,824],\"NotLeftTriangle;\":[8938],\"NotSquareSubset;\":[8847,824],\"OverParenthesis;\":[9180],\"RightDownVector;\":[8642],\"ShortRightArrow;\":[8594],\"UpperRightArrow;\":[8599],\"bigtriangledown;\":[9661],\"circlearrowleft;\":[8634],\"curvearrowright;\":[8631],\"downharpoonleft;\":[8643],\"leftharpoondown;\":[8637],\"leftrightarrows;\":[8646],\"nLeftrightarrow;\":[8654],\"nleftrightarrow;\":[8622],\"ntrianglelefteq;\":[8940],\"rightleftarrows;\":[8644],\"rightsquigarrow;\":[8605],\"rightthreetimes;\":[8908],\"straightepsilon;\":[1013],\"trianglerighteq;\":[8885],\"vartriangleleft;\":[8882]}},{\"length\":15,\"entities\":{\"DiacriticalDot;\":[729],\"DoubleRightTee;\":[8872],\"DownLeftVector;\":[8637],\"GreaterGreater;\":[10914],\"HorizontalLine;\":[9472],\"InvisibleComma;\":[8291],\"InvisibleTimes;\":[8290],\"LeftDownVector;\":[8643],\"LeftRightArrow;\":[8596],\"Leftrightarrow;\":[8660],\"LessSlantEqual;\":[10877],\"LongRightArrow;\":[10230],\"Longrightarrow;\":[10233],\"LowerLeftArrow;\":[8601],\"NestedLessLess;\":[8810],\"NotGreaterLess;\":[8825],\"NotLessGreater;\":[8824],\"NotSubsetEqual;\":[8840],\"NotVerticalBar;\":[8740],\"OpenCurlyQuote;\":[8216],\"ReverseElement;\":[8715],\"RightTeeVector;\":[10587],\"RightVectorBar;\":[10579],\"ShortDownArrow;\":[8595],\"ShortLeftArrow;\":[8592],\"SquareSuperset;\":[8848],\"TildeFullEqual;\":[8773],\"UpperLeftArrow;\":[8598],\"ZeroWidthSpace;\":[8203],\"curvearrowleft;\":[8630],\"doublebarwedge;\":[8966],\"downdownarrows;\":[8650],\"hookrightarrow;\":[8618],\"leftleftarrows;\":[8647],\"leftrightarrow;\":[8596],\"leftthreetimes;\":[8907],\"longrightarrow;\":[10230],\"looparrowright;\":[8620],\"nshortparallel;\":[8742],\"ntriangleright;\":[8939],\"rightarrowtail;\":[8611],\"rightharpoonup;\":[8640],\"trianglelefteq;\":[8884],\"upharpoonright;\":[8638]}},{\"length\":14,\"entities\":{\"ApplyFunction;\":[8289],\"DifferentialD;\":[8518],\"DoubleLeftTee;\":[10980],\"DoubleUpArrow;\":[8657],\"LeftTeeVector;\":[10586],\"LeftVectorBar;\":[10578],\"LessFullEqual;\":[8806],\"LongLeftArrow;\":[10229],\"Longleftarrow;\":[10232],\"NotEqualTilde;\":[8770,824],\"NotTildeEqual;\":[8772],\"NotTildeTilde;\":[8777],\"Poincareplane;\":[8460],\"PrecedesEqual;\":[10927],\"PrecedesTilde;\":[8830],\"RightArrowBar;\":[8677],\"RightTeeArrow;\":[8614],\"RightTriangle;\":[8883],\"RightUpVector;\":[8638],\"SucceedsEqual;\":[10928],\"SucceedsTilde;\":[8831],\"SupersetEqual;\":[8839],\"UpEquilibrium;\":[10606],\"VerticalTilde;\":[8768],\"VeryThinSpace;\":[8202],\"bigtriangleup;\":[9651],\"blacktriangle;\":[9652],\"divideontimes;\":[8903],\"fallingdotseq;\":[8786],\"hookleftarrow;\":[8617],\"leftarrowtail;\":[8610],\"leftharpoonup;\":[8636],\"longleftarrow;\":[10229],\"looparrowleft;\":[8619],\"measuredangle;\":[8737],\"ntriangleleft;\":[8938],\"shortparallel;\":[8741],\"smallsetminus;\":[8726],\"triangleright;\":[9657],\"upharpoonleft;\":[8639],\"varsubsetneqq;\":[10955,65024],\"varsupsetneqq;\":[10956,65024]}},{\"length\":13,\"entities\":{\"DownArrowBar;\":[10515],\"DownTeeArrow;\":[8615],\"ExponentialE;\":[8519],\"GreaterEqual;\":[8805],\"GreaterTilde;\":[8819],\"HilbertSpace;\":[8459],\"HumpDownHump;\":[8782],\"Intersection;\":[8898],\"LeftArrowBar;\":[8676],\"LeftTeeArrow;\":[8612],\"LeftTriangle;\":[8882],\"LeftUpVector;\":[8639],\"NotCongruent;\":[8802],\"NotHumpEqual;\":[8783,824],\"NotLessEqual;\":[8816],\"NotLessTilde;\":[8820],\"Proportional;\":[8733],\"RightCeiling;\":[8969],\"RoundImplies;\":[10608],\"ShortUpArrow;\":[8593],\"SquareSubset;\":[8847],\"UnderBracket;\":[9141],\"VerticalLine;\":[124],\"blacklozenge;\":[10731],\"exponentiale;\":[8519],\"risingdotseq;\":[8787],\"triangledown;\":[9663],\"triangleleft;\":[9667],\"varsubsetneq;\":[8842,65024],\"varsupsetneq;\":[8843,65024]}},{\"length\":12,\"entities\":{\"CircleMinus;\":[8854],\"CircleTimes;\":[8855],\"Equilibrium;\":[8652],\"GreaterLess;\":[8823],\"LeftCeiling;\":[8968],\"LessGreater;\":[8822],\"MediumSpace;\":[8287],\"NotLessLess;\":[8810,824],\"NotPrecedes;\":[8832],\"NotSucceeds;\":[8833],\"NotSuperset;\":[8835,8402],\"OverBracket;\":[9140],\"RightVector;\":[8640],\"Rrightarrow;\":[8667],\"RuleDelayed;\":[10740],\"SmallCircle;\":[8728],\"SquareUnion;\":[8852],\"SubsetEqual;\":[8838],\"UpDownArrow;\":[8597],\"Updownarrow;\":[8661],\"VerticalBar;\":[8739],\"backepsilon;\":[1014],\"blacksquare;\":[9642],\"circledcirc;\":[8858],\"circleddash;\":[8861],\"curlyeqprec;\":[8926],\"curlyeqsucc;\":[8927],\"diamondsuit;\":[9830],\"eqslantless;\":[10901],\"expectation;\":[8496],\"nRightarrow;\":[8655],\"nrightarrow;\":[8603],\"preccurlyeq;\":[8828],\"precnapprox;\":[10937],\"quaternions;\":[8461],\"straightphi;\":[981],\"succcurlyeq;\":[8829],\"succnapprox;\":[10938],\"thickapprox;\":[8776],\"updownarrow;\":[8597]}},{\"length\":11,\"entities\":{\"Bernoullis;\":[8492],\"CirclePlus;\":[8853],\"EqualTilde;\":[8770],\"Fouriertrf;\":[8497],\"ImaginaryI;\":[8520],\"Laplacetrf;\":[8466],\"LeftVector;\":[8636],\"Lleftarrow;\":[8666],\"NotElement;\":[8713],\"NotGreater;\":[8815],\"Proportion;\":[8759],\"RightArrow;\":[8594],\"RightFloor;\":[8971],\"Rightarrow;\":[8658],\"ThickSpace;\":[8287,8202],\"TildeEqual;\":[8771],\"TildeTilde;\":[8776],\"UnderBrace;\":[9183],\"UpArrowBar;\":[10514],\"UpTeeArrow;\":[8613],\"circledast;\":[8859],\"complement;\":[8705],\"curlywedge;\":[8911],\"eqslantgtr;\":[10902],\"gtreqqless;\":[10892],\"lessapprox;\":[10885],\"lesseqqgtr;\":[10891],\"lmoustache;\":[9136],\"longmapsto;\":[10236],\"mapstodown;\":[8615],\"mapstoleft;\":[8612],\"nLeftarrow;\":[8653],\"nleftarrow;\":[8602],\"nsubseteqq;\":[10949,824],\"nsupseteqq;\":[10950,824],\"precapprox;\":[10935],\"rightarrow;\":[8594],\"rmoustache;\":[9137],\"sqsubseteq;\":[8849],\"sqsupseteq;\":[8850],\"subsetneqq;\":[10955],\"succapprox;\":[10936],\"supsetneqq;\":[10956],\"upuparrows;\":[8648],\"varepsilon;\":[1013],\"varnothing;\":[8709]}},{\"length\":10,\"entities\":{\"Backslash;\":[8726],\"CenterDot;\":[183],\"CircleDot;\":[8857],\"Congruent;\":[8801],\"Coproduct;\":[8720],\"DoubleDot;\":[168],\"DownArrow;\":[8595],\"DownBreve;\":[785],\"Downarrow;\":[8659],\"HumpEqual;\":[8783],\"LeftArrow;\":[8592],\"LeftFloor;\":[8970],\"Leftarrow;\":[8656],\"LessTilde;\":[8818],\"Mellintrf;\":[8499],\"MinusPlus;\":[8723],\"NotCupCap;\":[8813],\"NotExists;\":[8708],\"NotSubset;\":[8834,8402],\"OverBrace;\":[9182],\"PlusMinus;\":[177],\"Therefore;\":[8756],\"ThinSpace;\":[8201],\"TripleDot;\":[8411],\"UnionPlus;\":[8846],\"backprime;\":[8245],\"backsimeq;\":[8909],\"bigotimes;\":[10754],\"centerdot;\":[183],\"checkmark;\":[10003],\"complexes;\":[8450],\"dotsquare;\":[8865],\"downarrow;\":[8595],\"gtrapprox;\":[10886],\"gtreqless;\":[8923],\"gvertneqq;\":[8809,65024],\"heartsuit;\":[9829],\"leftarrow;\":[8592],\"lesseqgtr;\":[8922],\"lvertneqq;\":[8808,65024],\"ngeqslant;\":[10878,824],\"nleqslant;\":[10877,824],\"nparallel;\":[8742],\"nshortmid;\":[8740],\"nsubseteq;\":[8840],\"nsupseteq;\":[8841],\"pitchfork;\":[8916],\"rationals;\":[8474],\"spadesuit;\":[9824],\"subseteqq;\":[10949],\"subsetneq;\":[8842],\"supseteqq;\":[10950],\"supsetneq;\":[8843],\"therefore;\":[8756],\"triangleq;\":[8796],\"varpropto;\":[8733]}},{\"length\":9,\"entities\":{\"DDotrahd;\":[10513],\"DotEqual;\":[8784],\"Integral;\":[8747],\"LessLess;\":[10913],\"NotEqual;\":[8800],\"NotTilde;\":[8769],\"PartialD;\":[8706],\"Precedes;\":[8826],\"RightTee;\":[8866],\"Succeeds;\":[8827],\"SuchThat;\":[8715],\"Superset;\":[8835],\"Uarrocir;\":[10569],\"UnderBar;\":[95],\"andslope;\":[10840],\"angmsdaa;\":[10664],\"angmsdab;\":[10665],\"angmsdac;\":[10666],\"angmsdad;\":[10667],\"angmsdae;\":[10668],\"angmsdaf;\":[10669],\"angmsdag;\":[10670],\"angmsdah;\":[10671],\"angrtvbd;\":[10653],\"approxeq;\":[8778],\"awconint;\":[8755],\"backcong;\":[8780],\"barwedge;\":[8965],\"bbrktbrk;\":[9142],\"bigoplus;\":[10753],\"bigsqcup;\":[10758],\"biguplus;\":[10756],\"bigwedge;\":[8896],\"boxminus;\":[8863],\"boxtimes;\":[8864],\"bsolhsub;\":[10184],\"capbrcup;\":[10825],\"circledR;\":[174],\"circledS;\":[9416],\"cirfnint;\":[10768],\"clubsuit;\":[9827],\"cupbrcap;\":[10824],\"curlyvee;\":[8910],\"cwconint;\":[8754],\"doteqdot;\":[8785],\"dotminus;\":[8760],\"drbkarow;\":[10512],\"dzigrarr;\":[10239],\"elinters;\":[9191],\"emptyset;\":[8709],\"eqvparsl;\":[10725],\"fpartint;\":[10765],\"geqslant;\":[10878],\"gesdotol;\":[10884],\"gnapprox;\":[10890],\"hksearow;\":[10533],\"hkswarow;\":[10534],\"imagline;\":[8464],\"imagpart;\":[8465],\"infintie;\":[10717],\"integers;\":[8484],\"intercal;\":[8890],\"intlarhk;\":[10775],\"laemptyv;\":[10676],\"ldrushar;\":[10571],\"leqslant;\":[10877],\"lesdotor;\":[10883],\"llcorner;\":[8990],\"lnapprox;\":[10889],\"lrcorner;\":[8991],\"lurdshar;\":[10570],\"mapstoup;\":[8613],\"multimap;\":[8888],\"naturals;\":[8469],\"ncongdot;\":[10861,824],\"notindot;\":[8949,824],\"otimesas;\":[10806],\"parallel;\":[8741],\"plusacir;\":[10787],\"pointint;\":[10773],\"precneqq;\":[10933],\"precnsim;\":[8936],\"profalar;\":[9006],\"profline;\":[8978],\"profsurf;\":[8979],\"raemptyv;\":[10675],\"realpart;\":[8476],\"rppolint;\":[10770],\"rtriltri;\":[10702],\"scpolint;\":[10771],\"setminus;\":[8726],\"shortmid;\":[8739],\"smeparsl;\":[10724],\"sqsubset;\":[8847],\"sqsupset;\":[8848],\"subseteq;\":[8838],\"succneqq;\":[10934],\"succnsim;\":[8937],\"supseteq;\":[8839],\"thetasym;\":[977],\"thicksim;\":[8764],\"timesbar;\":[10801],\"triangle;\":[9653],\"triminus;\":[10810],\"trpezium;\":[9186],\"ulcorner;\":[8988],\"urcorner;\":[8989],\"varkappa;\":[1008],\"varsigma;\":[962],\"vartheta;\":[977]}},{\"length\":8,\"entities\":{\"Because;\":[8757],\"Cayleys;\":[8493],\"Cconint;\":[8752],\"Cedilla;\":[184],\"Diamond;\":[8900],\"DownTee;\":[8868],\"Element;\":[8712],\"Epsilon;\":[917],\"Implies;\":[8658],\"LeftTee;\":[8867],\"NewLine;\":[10],\"NoBreak;\":[8288],\"NotLess;\":[8814],\"Omicron;\":[927],\"OverBar;\":[8254],\"Product;\":[8719],\"UpArrow;\":[8593],\"Uparrow;\":[8657],\"Upsilon;\":[933],\"alefsym;\":[8501],\"angrtvb;\":[8894],\"angzarr;\":[9084],\"asympeq;\":[8781],\"backsim;\":[8765],\"because;\":[8757],\"bemptyv;\":[10672],\"between;\":[8812],\"bigcirc;\":[9711],\"bigodot;\":[10752],\"bigstar;\":[9733],\"bnequiv;\":[8801,8421],\"boxplus;\":[8862],\"ccupssm;\":[10832],\"cemptyv;\":[10674],\"cirscir;\":[10690],\"coloneq;\":[8788],\"congdot;\":[10861],\"cudarrl;\":[10552],\"cudarrr;\":[10549],\"cularrp;\":[10557],\"curarrm;\":[10556],\"dbkarow;\":[10511],\"ddagger;\":[8225],\"ddotseq;\":[10871],\"demptyv;\":[10673],\"diamond;\":[8900],\"digamma;\":[989],\"dotplus;\":[8724],\"dwangle;\":[10662],\"epsilon;\":[949],\"eqcolon;\":[8789],\"equivDD;\":[10872],\"gesdoto;\":[10882],\"gtquest;\":[10876],\"gtrless;\":[8823],\"harrcir;\":[10568],\"intprod;\":[10812],\"isindot;\":[8949],\"larrbfs;\":[10527],\"larrsim;\":[10611],\"lbrksld;\":[10639],\"lbrkslu;\":[10637],\"ldrdhar;\":[10599],\"lesdoto;\":[10881],\"lessdot;\":[8918],\"lessgtr;\":[8822],\"lesssim;\":[8818],\"lotimes;\":[10804],\"lozenge;\":[9674],\"ltquest;\":[10875],\"luruhar;\":[10598],\"maltese;\":[10016],\"minusdu;\":[10794],\"napprox;\":[8777],\"natural;\":[9838],\"nearrow;\":[8599],\"nexists;\":[8708],\"notinva;\":[8713],\"notinvb;\":[8951],\"notinvc;\":[8950],\"notniva;\":[8716],\"notnivb;\":[8958],\"notnivc;\":[8957],\"npolint;\":[10772],\"npreceq;\":[10927,824],\"nsqsube;\":[8930],\"nsqsupe;\":[8931],\"nsubset;\":[8834,8402],\"nsucceq;\":[10928,824],\"nsupset;\":[8835,8402],\"nvinfin;\":[10718],\"nvltrie;\":[8884,8402],\"nvrtrie;\":[8885,8402],\"nwarrow;\":[8598],\"olcross;\":[10683],\"omicron;\":[959],\"orderof;\":[8500],\"orslope;\":[10839],\"pertenk;\":[8241],\"planckh;\":[8462],\"pluscir;\":[10786],\"plussim;\":[10790],\"plustwo;\":[10791],\"precsim;\":[8830],\"quatint;\":[10774],\"questeq;\":[8799],\"rarrbfs;\":[10528],\"rarrsim;\":[10612],\"rbrksld;\":[10638],\"rbrkslu;\":[10640],\"rdldhar;\":[10601],\"realine;\":[8475],\"rotimes;\":[10805],\"ruluhar;\":[10600],\"searrow;\":[8600],\"simplus;\":[10788],\"simrarr;\":[10610],\"subedot;\":[10947],\"submult;\":[10945],\"subplus;\":[10943],\"subrarr;\":[10617],\"succsim;\":[8831],\"supdsub;\":[10968],\"supedot;\":[10948],\"suphsol;\":[10185],\"suphsub;\":[10967],\"suplarr;\":[10619],\"supmult;\":[10946],\"supplus;\":[10944],\"swarrow;\":[8601],\"topfork;\":[10970],\"triplus;\":[10809],\"tritime;\":[10811],\"uparrow;\":[8593],\"upsilon;\":[965],\"uwangle;\":[10663],\"vzigzag;\":[10650],\"zigrarr;\":[8669]}},{\"length\":7,\"entities\":{\"Aacute;\":[193],\"Abreve;\":[258],\"Agrave;\":[192],\"Assign;\":[8788],\"Atilde;\":[195],\"Barwed;\":[8966],\"Bumpeq;\":[8782],\"Cacute;\":[262],\"Ccaron;\":[268],\"Ccedil;\":[199],\"Colone;\":[10868],\"Conint;\":[8751],\"CupCap;\":[8781],\"Dagger;\":[8225],\"Dcaron;\":[270],\"DotDot;\":[8412],\"Dstrok;\":[272],\"Eacute;\":[201],\"Ecaron;\":[282],\"Egrave;\":[200],\"Exists;\":[8707],\"ForAll;\":[8704],\"Gammad;\":[988],\"Gbreve;\":[286],\"Gcedil;\":[290],\"HARDcy;\":[1066],\"Hstrok;\":[294],\"Iacute;\":[205],\"Igrave;\":[204],\"Itilde;\":[296],\"Jsercy;\":[1032],\"Kcedil;\":[310],\"Lacute;\":[313],\"Lambda;\":[923],\"Lcaron;\":[317],\"Lcedil;\":[315],\"Lmidot;\":[319],\"Lstrok;\":[321],\"Nacute;\":[323],\"Ncaron;\":[327],\"Ncedil;\":[325],\"Ntilde;\":[209],\"Oacute;\":[211],\"Odblac;\":[336],\"Ograve;\":[210],\"Oslash;\":[216],\"Otilde;\":[213],\"Otimes;\":[10807],\"Racute;\":[340],\"Rarrtl;\":[10518],\"Rcaron;\":[344],\"Rcedil;\":[342],\"SHCHcy;\":[1065],\"SOFTcy;\":[1068],\"Sacute;\":[346],\"Scaron;\":[352],\"Scedil;\":[350],\"Square;\":[9633],\"Subset;\":[8912],\"Supset;\":[8913],\"Tcaron;\":[356],\"Tcedil;\":[354],\"Tstrok;\":[358],\"Uacute;\":[218],\"Ubreve;\":[364],\"Udblac;\":[368],\"Ugrave;\":[217],\"Utilde;\":[360],\"Vdashl;\":[10982],\"Verbar;\":[8214],\"Vvdash;\":[8874],\"Yacute;\":[221],\"Zacute;\":[377],\"Zcaron;\":[381],\"aacute;\":[225],\"abreve;\":[259],\"agrave;\":[224],\"andand;\":[10837],\"angmsd;\":[8737],\"angsph;\":[8738],\"apacir;\":[10863],\"approx;\":[8776],\"atilde;\":[227],\"barvee;\":[8893],\"barwed;\":[8965],\"becaus;\":[8757],\"bernou;\":[8492],\"bigcap;\":[8898],\"bigcup;\":[8899],\"bigvee;\":[8897],\"bkarow;\":[10509],\"bottom;\":[8869],\"bowtie;\":[8904],\"boxbox;\":[10697],\"bprime;\":[8245],\"brvbar;\":[166],\"bullet;\":[8226],\"bumpeq;\":[8783],\"cacute;\":[263],\"capand;\":[10820],\"capcap;\":[10827],\"capcup;\":[10823],\"capdot;\":[10816],\"ccaron;\":[269],\"ccedil;\":[231],\"circeq;\":[8791],\"cirmid;\":[10991],\"colone;\":[8788],\"commat;\":[64],\"compfn;\":[8728],\"conint;\":[8750],\"coprod;\":[8720],\"copysr;\":[8471],\"cularr;\":[8630],\"cupcap;\":[10822],\"cupcup;\":[10826],\"cupdot;\":[8845],\"curarr;\":[8631],\"curren;\":[164],\"cylcty;\":[9005],\"dagger;\":[8224],\"daleth;\":[8504],\"dcaron;\":[271],\"dfisht;\":[10623],\"divide;\":[247],\"divonx;\":[8903],\"dlcorn;\":[8990],\"dlcrop;\":[8973],\"dollar;\":[36],\"drcorn;\":[8991],\"drcrop;\":[8972],\"dstrok;\":[273],\"eacute;\":[233],\"easter;\":[10862],\"ecaron;\":[283],\"ecolon;\":[8789],\"egrave;\":[232],\"egsdot;\":[10904],\"elsdot;\":[10903],\"emptyv;\":[8709],\"emsp13;\":[8196],\"emsp14;\":[8197],\"eparsl;\":[10723],\"eqcirc;\":[8790],\"equals;\":[61],\"equest;\":[8799],\"female;\":[9792],\"ffilig;\":[64259],\"ffllig;\":[64260],\"forall;\":[8704],\"frac12;\":[189],\"frac13;\":[8531],\"frac14;\":[188],\"frac15;\":[8533],\"frac16;\":[8537],\"frac18;\":[8539],\"frac23;\":[8532],\"frac25;\":[8534],\"frac34;\":[190],\"frac35;\":[8535],\"frac38;\":[8540],\"frac45;\":[8536],\"frac56;\":[8538],\"frac58;\":[8541],\"frac78;\":[8542],\"gacute;\":[501],\"gammad;\":[989],\"gbreve;\":[287],\"gesdot;\":[10880],\"gesles;\":[10900],\"gtlPar;\":[10645],\"gtrarr;\":[10616],\"gtrdot;\":[8919],\"gtrsim;\":[8819],\"hairsp;\":[8202],\"hamilt;\":[8459],\"hardcy;\":[1098],\"hearts;\":[9829],\"hellip;\":[8230],\"hercon;\":[8889],\"homtht;\":[8763],\"horbar;\":[8213],\"hslash;\":[8463],\"hstrok;\":[295],\"hybull;\":[8259],\"hyphen;\":[8208],\"iacute;\":[237],\"igrave;\":[236],\"iiiint;\":[10764],\"iinfin;\":[10716],\"incare;\":[8453],\"inodot;\":[305],\"intcal;\":[8890],\"iquest;\":[191],\"isinsv;\":[8947],\"itilde;\":[297],\"jsercy;\":[1112],\"kappav;\":[1008],\"kcedil;\":[311],\"kgreen;\":[312],\"lAtail;\":[10523],\"lacute;\":[314],\"lagran;\":[8466],\"lambda;\":[955],\"langle;\":[10216],\"larrfs;\":[10525],\"larrhk;\":[8617],\"larrlp;\":[8619],\"larrpl;\":[10553],\"larrtl;\":[8610],\"latail;\":[10521],\"lbrace;\":[123],\"lbrack;\":[91],\"lcaron;\":[318],\"lcedil;\":[316],\"ldquor;\":[8222],\"lesdot;\":[10879],\"lesges;\":[10899],\"lfisht;\":[10620],\"lfloor;\":[8970],\"lharul;\":[10602],\"llhard;\":[10603],\"lmidot;\":[320],\"lmoust;\":[9136],\"loplus;\":[10797],\"lowast;\":[8727],\"lowbar;\":[95],\"lparlt;\":[10643],\"lrhard;\":[10605],\"lsaquo;\":[8249],\"lsquor;\":[8218],\"lstrok;\":[322],\"lthree;\":[8907],\"ltimes;\":[8905],\"ltlarr;\":[10614],\"ltrPar;\":[10646],\"mapsto;\":[8614],\"marker;\":[9646],\"mcomma;\":[10793],\"midast;\":[42],\"midcir;\":[10992],\"middot;\":[183],\"minusb;\":[8863],\"minusd;\":[8760],\"mnplus;\":[8723],\"models;\":[8871],\"mstpos;\":[8766],\"nVDash;\":[8879],\"nVdash;\":[8878],\"nacute;\":[324],\"nbumpe;\":[8783,824],\"ncaron;\":[328],\"ncedil;\":[326],\"nearhk;\":[10532],\"nequiv;\":[8802],\"nesear;\":[10536],\"nexist;\":[8708],\"nltrie;\":[8940],\"notinE;\":[8953,824],\"nparsl;\":[11005,8421],\"nprcue;\":[8928],\"nrarrc;\":[10547,824],\"nrarrw;\":[8605,824],\"nrtrie;\":[8941],\"nsccue;\":[8929],\"nsimeq;\":[8772],\"ntilde;\":[241],\"numero;\":[8470],\"nvDash;\":[8877],\"nvHarr;\":[10500],\"nvdash;\":[8876],\"nvlArr;\":[10498],\"nvrArr;\":[10499],\"nwarhk;\":[10531],\"nwnear;\":[10535],\"oacute;\":[243],\"odblac;\":[337],\"odsold;\":[10684],\"ograve;\":[242],\"ominus;\":[8854],\"origof;\":[8886],\"oslash;\":[248],\"otilde;\":[245],\"otimes;\":[8855],\"parsim;\":[10995],\"percnt;\":[37],\"period;\":[46],\"permil;\":[8240],\"phmmat;\":[8499],\"planck;\":[8463],\"plankv;\":[8463],\"plusdo;\":[8724],\"plusdu;\":[10789],\"plusmn;\":[177],\"preceq;\":[10927],\"primes;\":[8473],\"prnsim;\":[8936],\"propto;\":[8733],\"prurel;\":[8880],\"puncsp;\":[8200],\"qprime;\":[8279],\"rAtail;\":[10524],\"racute;\":[341],\"rangle;\":[10217],\"rarrap;\":[10613],\"rarrfs;\":[10526],\"rarrhk;\":[8618],\"rarrlp;\":[8620],\"rarrpl;\":[10565],\"rarrtl;\":[8611],\"ratail;\":[10522],\"rbrace;\":[125],\"rbrack;\":[93],\"rcaron;\":[345],\"rcedil;\":[343],\"rdquor;\":[8221],\"rfisht;\":[10621],\"rfloor;\":[8971],\"rharul;\":[10604],\"rmoust;\":[9137],\"roplus;\":[10798],\"rpargt;\":[10644],\"rsaquo;\":[8250],\"rsquor;\":[8217],\"rthree;\":[8908],\"rtimes;\":[8906],\"sacute;\":[347],\"scaron;\":[353],\"scedil;\":[351],\"scnsim;\":[8937],\"searhk;\":[10533],\"seswar;\":[10537],\"sfrown;\":[8994],\"shchcy;\":[1097],\"sigmaf;\":[962],\"sigmav;\":[962],\"simdot;\":[10858],\"smashp;\":[10803],\"softcy;\":[1100],\"solbar;\":[9023],\"spades;\":[9824],\"sqcaps;\":[8851,65024],\"sqcups;\":[8852,65024],\"sqsube;\":[8849],\"sqsupe;\":[8850],\"square;\":[9633],\"squarf;\":[9642],\"ssetmn;\":[8726],\"ssmile;\":[8995],\"sstarf;\":[8902],\"subdot;\":[10941],\"subset;\":[8834],\"subsim;\":[10951],\"subsub;\":[10965],\"subsup;\":[10963],\"succeq;\":[10928],\"supdot;\":[10942],\"supset;\":[8835],\"supsim;\":[10952],\"supsub;\":[10964],\"supsup;\":[10966],\"swarhk;\":[10534],\"swnwar;\":[10538],\"target;\":[8982],\"tcaron;\":[357],\"tcedil;\":[355],\"telrec;\":[8981],\"there4;\":[8756],\"thetav;\":[977],\"thinsp;\":[8201],\"thksim;\":[8764],\"timesb;\":[8864],\"timesd;\":[10800],\"topbot;\":[9014],\"topcir;\":[10993],\"tprime;\":[8244],\"tridot;\":[9708],\"tstrok;\":[359],\"uacute;\":[250],\"ubreve;\":[365],\"udblac;\":[369],\"ufisht;\":[10622],\"ugrave;\":[249],\"ulcorn;\":[8988],\"ulcrop;\":[8975],\"urcorn;\":[8989],\"urcrop;\":[8974],\"utilde;\":[361],\"vangrt;\":[10652],\"varphi;\":[981],\"varrho;\":[1009],\"veebar;\":[8891],\"vellip;\":[8942],\"verbar;\":[124],\"vsubnE;\":[10955,65024],\"vsubne;\":[8842,65024],\"vsupnE;\":[10956,65024],\"vsupne;\":[8843,65024],\"wedbar;\":[10847],\"wedgeq;\":[8793],\"weierp;\":[8472],\"wreath;\":[8768],\"xoplus;\":[10753],\"xotime;\":[10754],\"xsqcup;\":[10758],\"xuplus;\":[10756],\"xwedge;\":[8896],\"yacute;\":[253],\"zacute;\":[378],\"zcaron;\":[382],\"zeetrf;\":[8488]}},{\"length\":6,\"entities\":{\"AElig;\":[198],\"Aacute\":[193],\"Acirc;\":[194],\"Agrave\":[192],\"Alpha;\":[913],\"Amacr;\":[256],\"Aogon;\":[260],\"Aring;\":[197],\"Atilde\":[195],\"Breve;\":[728],\"Ccedil\":[199],\"Ccirc;\":[264],\"Colon;\":[8759],\"Cross;\":[10799],\"Dashv;\":[10980],\"Delta;\":[916],\"Eacute\":[201],\"Ecirc;\":[202],\"Egrave\":[200],\"Emacr;\":[274],\"Eogon;\":[280],\"Equal;\":[10869],\"Gamma;\":[915],\"Gcirc;\":[284],\"Hacek;\":[711],\"Hcirc;\":[292],\"IJlig;\":[306],\"Iacute\":[205],\"Icirc;\":[206],\"Igrave\":[204],\"Imacr;\":[298],\"Iogon;\":[302],\"Iukcy;\":[1030],\"Jcirc;\":[308],\"Jukcy;\":[1028],\"Kappa;\":[922],\"Ntilde\":[209],\"OElig;\":[338],\"Oacute\":[211],\"Ocirc;\":[212],\"Ograve\":[210],\"Omacr;\":[332],\"Omega;\":[937],\"Oslash\":[216],\"Otilde\":[213],\"Prime;\":[8243],\"RBarr;\":[10512],\"Scirc;\":[348],\"Sigma;\":[931],\"THORN;\":[222],\"TRADE;\":[8482],\"TSHcy;\":[1035],\"Theta;\":[920],\"Tilde;\":[8764],\"Uacute\":[218],\"Ubrcy;\":[1038],\"Ucirc;\":[219],\"Ugrave\":[217],\"Umacr;\":[362],\"Union;\":[8899],\"Uogon;\":[370],\"UpTee;\":[8869],\"Uring;\":[366],\"VDash;\":[8875],\"Vdash;\":[8873],\"Wcirc;\":[372],\"Wedge;\":[8896],\"Yacute\":[221],\"Ycirc;\":[374],\"aacute\":[225],\"acirc;\":[226],\"acute;\":[180],\"aelig;\":[230],\"agrave\":[224],\"aleph;\":[8501],\"alpha;\":[945],\"amacr;\":[257],\"amalg;\":[10815],\"angle;\":[8736],\"angrt;\":[8735],\"angst;\":[197],\"aogon;\":[261],\"aring;\":[229],\"asymp;\":[8776],\"atilde\":[227],\"awint;\":[10769],\"bcong;\":[8780],\"bdquo;\":[8222],\"bepsi;\":[1014],\"blank;\":[9251],\"blk12;\":[9618],\"blk14;\":[9617],\"blk34;\":[9619],\"block;\":[9608],\"boxDL;\":[9559],\"boxDR;\":[9556],\"boxDl;\":[9558],\"boxDr;\":[9555],\"boxHD;\":[9574],\"boxHU;\":[9577],\"boxHd;\":[9572],\"boxHu;\":[9575],\"boxUL;\":[9565],\"boxUR;\":[9562],\"boxUl;\":[9564],\"boxUr;\":[9561],\"boxVH;\":[9580],\"boxVL;\":[9571],\"boxVR;\":[9568],\"boxVh;\":[9579],\"boxVl;\":[9570],\"boxVr;\":[9567],\"boxdL;\":[9557],\"boxdR;\":[9554],\"boxdl;\":[9488],\"boxdr;\":[9484],\"boxhD;\":[9573],\"boxhU;\":[9576],\"boxhd;\":[9516],\"boxhu;\":[9524],\"boxuL;\":[9563],\"boxuR;\":[9560],\"boxul;\":[9496],\"boxur;\":[9492],\"boxvH;\":[9578],\"boxvL;\":[9569],\"boxvR;\":[9566],\"boxvh;\":[9532],\"boxvl;\":[9508],\"boxvr;\":[9500],\"breve;\":[728],\"brvbar\":[166],\"bsemi;\":[8271],\"bsime;\":[8909],\"bsolb;\":[10693],\"bumpE;\":[10926],\"bumpe;\":[8783],\"caret;\":[8257],\"caron;\":[711],\"ccaps;\":[10829],\"ccedil\":[231],\"ccirc;\":[265],\"ccups;\":[10828],\"cedil;\":[184],\"check;\":[10003],\"clubs;\":[9827],\"colon;\":[58],\"comma;\":[44],\"crarr;\":[8629],\"cross;\":[10007],\"csube;\":[10961],\"csupe;\":[10962],\"ctdot;\":[8943],\"cuepr;\":[8926],\"cuesc;\":[8927],\"cupor;\":[10821],\"curren\":[164],\"cuvee;\":[8910],\"cuwed;\":[8911],\"cwint;\":[8753],\"dashv;\":[8867],\"dblac;\":[733],\"ddarr;\":[8650],\"delta;\":[948],\"dharl;\":[8643],\"dharr;\":[8642],\"diams;\":[9830],\"disin;\":[8946],\"divide\":[247],\"doteq;\":[8784],\"dtdot;\":[8945],\"dtrif;\":[9662],\"duarr;\":[8693],\"duhar;\":[10607],\"eDDot;\":[10871],\"eacute\":[233],\"ecirc;\":[234],\"efDot;\":[8786],\"egrave\":[232],\"emacr;\":[275],\"empty;\":[8709],\"eogon;\":[281],\"eplus;\":[10865],\"epsiv;\":[1013],\"eqsim;\":[8770],\"equiv;\":[8801],\"erDot;\":[8787],\"erarr;\":[10609],\"esdot;\":[8784],\"exist;\":[8707],\"fflig;\":[64256],\"filig;\":[64257],\"fjlig;\":[102,106],\"fllig;\":[64258],\"fltns;\":[9649],\"forkv;\":[10969],\"frac12\":[189],\"frac14\":[188],\"frac34\":[190],\"frasl;\":[8260],\"frown;\":[8994],\"gamma;\":[947],\"gcirc;\":[285],\"gescc;\":[10921],\"gimel;\":[8503],\"gneqq;\":[8809],\"gnsim;\":[8935],\"grave;\":[96],\"gsime;\":[10894],\"gsiml;\":[10896],\"gtcir;\":[10874],\"gtdot;\":[8919],\"harrw;\":[8621],\"hcirc;\":[293],\"hoarr;\":[8703],\"iacute\":[237],\"icirc;\":[238],\"iexcl;\":[161],\"igrave\":[236],\"iiint;\":[8749],\"iiota;\":[8489],\"ijlig;\":[307],\"imacr;\":[299],\"image;\":[8465],\"imath;\":[305],\"imped;\":[437],\"infin;\":[8734],\"iogon;\":[303],\"iprod;\":[10812],\"iquest\":[191],\"isinE;\":[8953],\"isins;\":[8948],\"isinv;\":[8712],\"iukcy;\":[1110],\"jcirc;\":[309],\"jmath;\":[567],\"jukcy;\":[1108],\"kappa;\":[954],\"lAarr;\":[8666],\"lBarr;\":[10510],\"langd;\":[10641],\"laquo;\":[171],\"larrb;\":[8676],\"lates;\":[10925,65024],\"lbarr;\":[10508],\"lbbrk;\":[10098],\"lbrke;\":[10635],\"lceil;\":[8968],\"ldquo;\":[8220],\"lescc;\":[10920],\"lhard;\":[8637],\"lharu;\":[8636],\"lhblk;\":[9604],\"llarr;\":[8647],\"lltri;\":[9722],\"lneqq;\":[8808],\"lnsim;\":[8934],\"loang;\":[10220],\"loarr;\":[8701],\"lobrk;\":[10214],\"lopar;\":[10629],\"lrarr;\":[8646],\"lrhar;\":[8651],\"lrtri;\":[8895],\"lsime;\":[10893],\"lsimg;\":[10895],\"lsquo;\":[8216],\"ltcir;\":[10873],\"ltdot;\":[8918],\"ltrie;\":[8884],\"ltrif;\":[9666],\"mDDot;\":[8762],\"mdash;\":[8212],\"micro;\":[181],\"middot\":[183],\"minus;\":[8722],\"mumap;\":[8888],\"nabla;\":[8711],\"napid;\":[8779,824],\"napos;\":[329],\"natur;\":[9838],\"nbump;\":[8782,824],\"ncong;\":[8775],\"ndash;\":[8211],\"neArr;\":[8663],\"nearr;\":[8599],\"nedot;\":[8784,824],\"nesim;\":[8770,824],\"ngeqq;\":[8807,824],\"ngsim;\":[8821],\"nhArr;\":[8654],\"nharr;\":[8622],\"nhpar;\":[10994],\"nlArr;\":[8653],\"nlarr;\":[8602],\"nleqq;\":[8806,824],\"nless;\":[8814],\"nlsim;\":[8820],\"nltri;\":[8938],\"notin;\":[8713],\"notni;\":[8716],\"npart;\":[8706,824],\"nprec;\":[8832],\"nrArr;\":[8655],\"nrarr;\":[8603],\"nrtri;\":[8939],\"nsime;\":[8772],\"nsmid;\":[8740],\"nspar;\":[8742],\"nsubE;\":[10949,824],\"nsube;\":[8840],\"nsucc;\":[8833],\"nsupE;\":[10950,824],\"nsupe;\":[8841],\"ntilde\":[241],\"numsp;\":[8199],\"nvsim;\":[8764,8402],\"nwArr;\":[8662],\"nwarr;\":[8598],\"oacute\":[243],\"ocirc;\":[244],\"odash;\":[8861],\"oelig;\":[339],\"ofcir;\":[10687],\"ograve\":[242],\"ohbar;\":[10677],\"olarr;\":[8634],\"olcir;\":[10686],\"oline;\":[8254],\"omacr;\":[333],\"omega;\":[969],\"operp;\":[10681],\"oplus;\":[8853],\"orarr;\":[8635],\"order;\":[8500],\"oslash\":[248],\"otilde\":[245],\"ovbar;\":[9021],\"parsl;\":[11005],\"phone;\":[9742],\"plusb;\":[8862],\"pluse;\":[10866],\"plusmn\":[177],\"pound;\":[163],\"prcue;\":[8828],\"prime;\":[8242],\"prnap;\":[10937],\"prsim;\":[8830],\"quest;\":[63],\"rAarr;\":[8667],\"rBarr;\":[10511],\"radic;\":[8730],\"rangd;\":[10642],\"range;\":[10661],\"raquo;\":[187],\"rarrb;\":[8677],\"rarrc;\":[10547],\"rarrw;\":[8605],\"ratio;\":[8758],\"rbarr;\":[10509],\"rbbrk;\":[10099],\"rbrke;\":[10636],\"rceil;\":[8969],\"rdquo;\":[8221],\"reals;\":[8477],\"rhard;\":[8641],\"rharu;\":[8640],\"rlarr;\":[8644],\"rlhar;\":[8652],\"rnmid;\":[10990],\"roang;\":[10221],\"roarr;\":[8702],\"robrk;\":[10215],\"ropar;\":[10630],\"rrarr;\":[8649],\"rsquo;\":[8217],\"rtrie;\":[8885],\"rtrif;\":[9656],\"sbquo;\":[8218],\"sccue;\":[8829],\"scirc;\":[349],\"scnap;\":[10938],\"scsim;\":[8831],\"sdotb;\":[8865],\"sdote;\":[10854],\"seArr;\":[8664],\"searr;\":[8600],\"setmn;\":[8726],\"sharp;\":[9839],\"sigma;\":[963],\"simeq;\":[8771],\"simgE;\":[10912],\"simlE;\":[10911],\"simne;\":[8774],\"slarr;\":[8592],\"smile;\":[8995],\"smtes;\":[10924,65024],\"sqcap;\":[8851],\"sqcup;\":[8852],\"sqsub;\":[8847],\"sqsup;\":[8848],\"srarr;\":[8594],\"starf;\":[9733],\"strns;\":[175],\"subnE;\":[10955],\"subne;\":[8842],\"supnE;\":[10956],\"supne;\":[8843],\"swArr;\":[8665],\"swarr;\":[8601],\"szlig;\":[223],\"theta;\":[952],\"thkap;\":[8776],\"thorn;\":[254],\"tilde;\":[732],\"times;\":[215],\"trade;\":[8482],\"trisb;\":[10701],\"tshcy;\":[1115],\"twixt;\":[8812],\"uacute\":[250],\"ubrcy;\":[1118],\"ucirc;\":[251],\"udarr;\":[8645],\"udhar;\":[10606],\"ugrave\":[249],\"uharl;\":[8639],\"uharr;\":[8638],\"uhblk;\":[9600],\"ultri;\":[9720],\"umacr;\":[363],\"uogon;\":[371],\"uplus;\":[8846],\"upsih;\":[978],\"uring;\":[367],\"urtri;\":[9721],\"utdot;\":[8944],\"utrif;\":[9652],\"uuarr;\":[8648],\"vBarv;\":[10985],\"vDash;\":[8872],\"varpi;\":[982],\"vdash;\":[8866],\"veeeq;\":[8794],\"vltri;\":[8882],\"vnsub;\":[8834,8402],\"vnsup;\":[8835,8402],\"vprop;\":[8733],\"vrtri;\":[8883],\"wcirc;\":[373],\"wedge;\":[8743],\"xcirc;\":[9711],\"xdtri;\":[9661],\"xhArr;\":[10234],\"xharr;\":[10231],\"xlArr;\":[10232],\"xlarr;\":[10229],\"xodot;\":[10752],\"xrArr;\":[10233],\"xrarr;\":[10230],\"xutri;\":[9651],\"yacute\":[253],\"ycirc;\":[375]}},{\"length\":5,\"entities\":{\"AElig\":[198],\"Acirc\":[194],\"Aopf;\":[120120],\"Aring\":[197],\"Ascr;\":[119964],\"Auml;\":[196],\"Barv;\":[10983],\"Beta;\":[914],\"Bopf;\":[120121],\"Bscr;\":[8492],\"CHcy;\":[1063],\"COPY;\":[169],\"Cdot;\":[266],\"Copf;\":[8450],\"Cscr;\":[119966],\"DJcy;\":[1026],\"DScy;\":[1029],\"DZcy;\":[1039],\"Darr;\":[8609],\"Dopf;\":[120123],\"Dscr;\":[119967],\"Ecirc\":[202],\"Edot;\":[278],\"Eopf;\":[120124],\"Escr;\":[8496],\"Esim;\":[10867],\"Euml;\":[203],\"Fopf;\":[120125],\"Fscr;\":[8497],\"GJcy;\":[1027],\"Gdot;\":[288],\"Gopf;\":[120126],\"Gscr;\":[119970],\"Hopf;\":[8461],\"Hscr;\":[8459],\"IEcy;\":[1045],\"IOcy;\":[1025],\"Icirc\":[206],\"Idot;\":[304],\"Iopf;\":[120128],\"Iota;\":[921],\"Iscr;\":[8464],\"Iuml;\":[207],\"Jopf;\":[120129],\"Jscr;\":[119973],\"KHcy;\":[1061],\"KJcy;\":[1036],\"Kopf;\":[120130],\"Kscr;\":[119974],\"LJcy;\":[1033],\"Lang;\":[10218],\"Larr;\":[8606],\"Lopf;\":[120131],\"Lscr;\":[8466],\"Mopf;\":[120132],\"Mscr;\":[8499],\"NJcy;\":[1034],\"Nopf;\":[8469],\"Nscr;\":[119977],\"Ocirc\":[212],\"Oopf;\":[120134],\"Oscr;\":[119978],\"Ouml;\":[214],\"Popf;\":[8473],\"Pscr;\":[119979],\"QUOT;\":[34],\"Qopf;\":[8474],\"Qscr;\":[119980],\"Rang;\":[10219],\"Rarr;\":[8608],\"Ropf;\":[8477],\"Rscr;\":[8475],\"SHcy;\":[1064],\"Sopf;\":[120138],\"Sqrt;\":[8730],\"Sscr;\":[119982],\"Star;\":[8902],\"THORN\":[222],\"TScy;\":[1062],\"Topf;\":[120139],\"Tscr;\":[119983],\"Uarr;\":[8607],\"Ucirc\":[219],\"Uopf;\":[120140],\"Upsi;\":[978],\"Uscr;\":[119984],\"Uuml;\":[220],\"Vbar;\":[10987],\"Vert;\":[8214],\"Vopf;\":[120141],\"Vscr;\":[119985],\"Wopf;\":[120142],\"Wscr;\":[119986],\"Xopf;\":[120143],\"Xscr;\":[119987],\"YAcy;\":[1071],\"YIcy;\":[1031],\"YUcy;\":[1070],\"Yopf;\":[120144],\"Yscr;\":[119988],\"Yuml;\":[376],\"ZHcy;\":[1046],\"Zdot;\":[379],\"Zeta;\":[918],\"Zopf;\":[8484],\"Zscr;\":[119989],\"acirc\":[226],\"acute\":[180],\"aelig\":[230],\"andd;\":[10844],\"andv;\":[10842],\"ange;\":[10660],\"aopf;\":[120146],\"apid;\":[8779],\"apos;\":[39],\"aring\":[229],\"ascr;\":[119990],\"auml;\":[228],\"bNot;\":[10989],\"bbrk;\":[9141],\"beta;\":[946],\"beth;\":[8502],\"bnot;\":[8976],\"bopf;\":[120147],\"boxH;\":[9552],\"boxV;\":[9553],\"boxh;\":[9472],\"boxv;\":[9474],\"bscr;\":[119991],\"bsim;\":[8765],\"bsol;\":[92],\"bull;\":[8226],\"bump;\":[8782],\"caps;\":[8745,65024],\"cdot;\":[267],\"cedil\":[184],\"cent;\":[162],\"chcy;\":[1095],\"cirE;\":[10691],\"circ;\":[710],\"cire;\":[8791],\"comp;\":[8705],\"cong;\":[8773],\"copf;\":[120148],\"copy;\":[169],\"cscr;\":[119992],\"csub;\":[10959],\"csup;\":[10960],\"cups;\":[8746,65024],\"dArr;\":[8659],\"dHar;\":[10597],\"darr;\":[8595],\"dash;\":[8208],\"diam;\":[8900],\"djcy;\":[1106],\"dopf;\":[120149],\"dscr;\":[119993],\"dscy;\":[1109],\"dsol;\":[10742],\"dtri;\":[9663],\"dzcy;\":[1119],\"eDot;\":[8785],\"ecir;\":[8790],\"ecirc\":[234],\"edot;\":[279],\"emsp;\":[8195],\"ensp;\":[8194],\"eopf;\":[120150],\"epar;\":[8917],\"epsi;\":[949],\"escr;\":[8495],\"esim;\":[8770],\"euml;\":[235],\"euro;\":[8364],\"excl;\":[33],\"flat;\":[9837],\"fnof;\":[402],\"fopf;\":[120151],\"fork;\":[8916],\"fscr;\":[119995],\"gdot;\":[289],\"geqq;\":[8807],\"gesl;\":[8923,65024],\"gjcy;\":[1107],\"gnap;\":[10890],\"gneq;\":[10888],\"gopf;\":[120152],\"gscr;\":[8458],\"gsim;\":[8819],\"gtcc;\":[10919],\"gvnE;\":[8809,65024],\"hArr;\":[8660],\"half;\":[189],\"harr;\":[8596],\"hbar;\":[8463],\"hopf;\":[120153],\"hscr;\":[119997],\"icirc\":[238],\"iecy;\":[1077],\"iexcl\":[161],\"imof;\":[8887],\"iocy;\":[1105],\"iopf;\":[120154],\"iota;\":[953],\"iscr;\":[119998],\"isin;\":[8712],\"iuml;\":[239],\"jopf;\":[120155],\"jscr;\":[119999],\"khcy;\":[1093],\"kjcy;\":[1116],\"kopf;\":[120156],\"kscr;\":[120000],\"lArr;\":[8656],\"lHar;\":[10594],\"lang;\":[10216],\"laquo\":[171],\"larr;\":[8592],\"late;\":[10925],\"lcub;\":[123],\"ldca;\":[10550],\"ldsh;\":[8626],\"leqq;\":[8806],\"lesg;\":[8922,65024],\"ljcy;\":[1113],\"lnap;\":[10889],\"lneq;\":[10887],\"lopf;\":[120157],\"lozf;\":[10731],\"lpar;\":[40],\"lscr;\":[120001],\"lsim;\":[8818],\"lsqb;\":[91],\"ltcc;\":[10918],\"ltri;\":[9667],\"lvnE;\":[8808,65024],\"macr;\":[175],\"male;\":[9794],\"malt;\":[10016],\"micro\":[181],\"mlcp;\":[10971],\"mldr;\":[8230],\"mopf;\":[120158],\"mscr;\":[120002],\"nGtv;\":[8811,824],\"nLtv;\":[8810,824],\"nang;\":[8736,8402],\"napE;\":[10864,824],\"nbsp;\":[160],\"ncap;\":[10819],\"ncup;\":[10818],\"ngeq;\":[8817],\"nges;\":[10878,824],\"ngtr;\":[8815],\"nisd;\":[8954],\"njcy;\":[1114],\"nldr;\":[8229],\"nleq;\":[8816],\"nles;\":[10877,824],\"nmid;\":[8740],\"nopf;\":[120159],\"npar;\":[8742],\"npre;\":[10927,824],\"nsce;\":[10928,824],\"nscr;\":[120003],\"nsim;\":[8769],\"nsub;\":[8836],\"nsup;\":[8837],\"ntgl;\":[8825],\"ntlg;\":[8824],\"nvap;\":[8781,8402],\"nvge;\":[8805,8402],\"nvgt;\":[62,8402],\"nvle;\":[8804,8402],\"nvlt;\":[60,8402],\"oast;\":[8859],\"ocir;\":[8858],\"ocirc\":[244],\"odiv;\":[10808],\"odot;\":[8857],\"ogon;\":[731],\"oint;\":[8750],\"omid;\":[10678],\"oopf;\":[120160],\"opar;\":[10679],\"ordf;\":[170],\"ordm;\":[186],\"oror;\":[10838],\"oscr;\":[8500],\"osol;\":[8856],\"ouml;\":[246],\"para;\":[182],\"part;\":[8706],\"perp;\":[8869],\"phiv;\":[981],\"plus;\":[43],\"popf;\":[120161],\"pound\":[163],\"prap;\":[10935],\"prec;\":[8826],\"prnE;\":[10933],\"prod;\":[8719],\"prop;\":[8733],\"pscr;\":[120005],\"qint;\":[10764],\"qopf;\":[120162],\"qscr;\":[120006],\"quot;\":[34],\"rArr;\":[8658],\"rHar;\":[10596],\"race;\":[8765,817],\"rang;\":[10217],\"raquo\":[187],\"rarr;\":[8594],\"rcub;\":[125],\"rdca;\":[10551],\"rdsh;\":[8627],\"real;\":[8476],\"rect;\":[9645],\"rhov;\":[1009],\"ring;\":[730],\"ropf;\":[120163],\"rpar;\":[41],\"rscr;\":[120007],\"rsqb;\":[93],\"rtri;\":[9657],\"scap;\":[10936],\"scnE;\":[10934],\"sdot;\":[8901],\"sect;\":[167],\"semi;\":[59],\"sext;\":[10038],\"shcy;\":[1096],\"sime;\":[8771],\"simg;\":[10910],\"siml;\":[10909],\"smid;\":[8739],\"smte;\":[10924],\"solb;\":[10692],\"sopf;\":[120164],\"spar;\":[8741],\"squf;\":[9642],\"sscr;\":[120008],\"star;\":[9734],\"subE;\":[10949],\"sube;\":[8838],\"succ;\":[8827],\"sung;\":[9834],\"sup1;\":[185],\"sup2;\":[178],\"sup3;\":[179],\"supE;\":[10950],\"supe;\":[8839],\"szlig\":[223],\"tbrk;\":[9140],\"tdot;\":[8411],\"thorn\":[254],\"times\":[215],\"tint;\":[8749],\"toea;\":[10536],\"topf;\":[120165],\"tosa;\":[10537],\"trie;\":[8796],\"tscr;\":[120009],\"tscy;\":[1094],\"uArr;\":[8657],\"uHar;\":[10595],\"uarr;\":[8593],\"ucirc\":[251],\"uopf;\":[120166],\"upsi;\":[965],\"uscr;\":[120010],\"utri;\":[9653],\"uuml;\":[252],\"vArr;\":[8661],\"vBar;\":[10984],\"varr;\":[8597],\"vert;\":[124],\"vopf;\":[120167],\"vscr;\":[120011],\"wopf;\":[120168],\"wscr;\":[120012],\"xcap;\":[8898],\"xcup;\":[8899],\"xmap;\":[10236],\"xnis;\":[8955],\"xopf;\":[120169],\"xscr;\":[120013],\"xvee;\":[8897],\"yacy;\":[1103],\"yicy;\":[1111],\"yopf;\":[120170],\"yscr;\":[120014],\"yucy;\":[1102],\"yuml;\":[255],\"zdot;\":[380],\"zeta;\":[950],\"zhcy;\":[1078],\"zopf;\":[120171],\"zscr;\":[120015],\"zwnj;\":[8204]}},{\"length\":4,\"entities\":{\"AMP;\":[38],\"Acy;\":[1040],\"Afr;\":[120068],\"And;\":[10835],\"Auml\":[196],\"Bcy;\":[1041],\"Bfr;\":[120069],\"COPY\":[169],\"Cap;\":[8914],\"Cfr;\":[8493],\"Chi;\":[935],\"Cup;\":[8915],\"Dcy;\":[1044],\"Del;\":[8711],\"Dfr;\":[120071],\"Dot;\":[168],\"ENG;\":[330],\"ETH;\":[208],\"Ecy;\":[1069],\"Efr;\":[120072],\"Eta;\":[919],\"Euml\":[203],\"Fcy;\":[1060],\"Ffr;\":[120073],\"Gcy;\":[1043],\"Gfr;\":[120074],\"Hat;\":[94],\"Hfr;\":[8460],\"Icy;\":[1048],\"Ifr;\":[8465],\"Int;\":[8748],\"Iuml\":[207],\"Jcy;\":[1049],\"Jfr;\":[120077],\"Kcy;\":[1050],\"Kfr;\":[120078],\"Lcy;\":[1051],\"Lfr;\":[120079],\"Lsh;\":[8624],\"Map;\":[10501],\"Mcy;\":[1052],\"Mfr;\":[120080],\"Ncy;\":[1053],\"Nfr;\":[120081],\"Not;\":[10988],\"Ocy;\":[1054],\"Ofr;\":[120082],\"Ouml\":[214],\"Pcy;\":[1055],\"Pfr;\":[120083],\"Phi;\":[934],\"Psi;\":[936],\"QUOT\":[34],\"Qfr;\":[120084],\"REG;\":[174],\"Rcy;\":[1056],\"Rfr;\":[8476],\"Rho;\":[929],\"Rsh;\":[8625],\"Scy;\":[1057],\"Sfr;\":[120086],\"Sub;\":[8912],\"Sum;\":[8721],\"Sup;\":[8913],\"Tab;\":[9],\"Tau;\":[932],\"Tcy;\":[1058],\"Tfr;\":[120087],\"Ucy;\":[1059],\"Ufr;\":[120088],\"Uuml\":[220],\"Vcy;\":[1042],\"Vee;\":[8897],\"Vfr;\":[120089],\"Wfr;\":[120090],\"Xfr;\":[120091],\"Ycy;\":[1067],\"Yfr;\":[120092],\"Zcy;\":[1047],\"Zfr;\":[8488],\"acE;\":[8766,819],\"acd;\":[8767],\"acy;\":[1072],\"afr;\":[120094],\"amp;\":[38],\"and;\":[8743],\"ang;\":[8736],\"apE;\":[10864],\"ape;\":[8778],\"ast;\":[42],\"auml\":[228],\"bcy;\":[1073],\"bfr;\":[120095],\"bne;\":[61,8421],\"bot;\":[8869],\"cap;\":[8745],\"cent\":[162],\"cfr;\":[120096],\"chi;\":[967],\"cir;\":[9675],\"copy\":[169],\"cup;\":[8746],\"dcy;\":[1076],\"deg;\":[176],\"dfr;\":[120097],\"die;\":[168],\"div;\":[247],\"dot;\":[729],\"ecy;\":[1101],\"efr;\":[120098],\"egs;\":[10902],\"ell;\":[8467],\"els;\":[10901],\"eng;\":[331],\"eta;\":[951],\"eth;\":[240],\"euml\":[235],\"fcy;\":[1092],\"ffr;\":[120099],\"gEl;\":[10892],\"gap;\":[10886],\"gcy;\":[1075],\"gel;\":[8923],\"geq;\":[8805],\"ges;\":[10878],\"gfr;\":[120100],\"ggg;\":[8921],\"glE;\":[10898],\"gla;\":[10917],\"glj;\":[10916],\"gnE;\":[8809],\"gne;\":[10888],\"hfr;\":[120101],\"icy;\":[1080],\"iff;\":[8660],\"ifr;\":[120102],\"int;\":[8747],\"iuml\":[239],\"jcy;\":[1081],\"jfr;\":[120103],\"kcy;\":[1082],\"kfr;\":[120104],\"lEg;\":[10891],\"lap;\":[10885],\"lat;\":[10923],\"lcy;\":[1083],\"leg;\":[8922],\"leq;\":[8804],\"les;\":[10877],\"lfr;\":[120105],\"lgE;\":[10897],\"lnE;\":[8808],\"lne;\":[10887],\"loz;\":[9674],\"lrm;\":[8206],\"lsh;\":[8624],\"macr\":[175],\"map;\":[8614],\"mcy;\":[1084],\"mfr;\":[120106],\"mho;\":[8487],\"mid;\":[8739],\"nGg;\":[8921,824],\"nGt;\":[8811,8402],\"nLl;\":[8920,824],\"nLt;\":[8810,8402],\"nap;\":[8777],\"nbsp\":[160],\"ncy;\":[1085],\"nfr;\":[120107],\"ngE;\":[8807,824],\"nge;\":[8817],\"ngt;\":[8815],\"nis;\":[8956],\"niv;\":[8715],\"nlE;\":[8806,824],\"nle;\":[8816],\"nlt;\":[8814],\"not;\":[172],\"npr;\":[8832],\"nsc;\":[8833],\"num;\":[35],\"ocy;\":[1086],\"ofr;\":[120108],\"ogt;\":[10689],\"ohm;\":[937],\"olt;\":[10688],\"ord;\":[10845],\"ordf\":[170],\"ordm\":[186],\"orv;\":[10843],\"ouml\":[246],\"par;\":[8741],\"para\":[182],\"pcy;\":[1087],\"pfr;\":[120109],\"phi;\":[966],\"piv;\":[982],\"prE;\":[10931],\"pre;\":[10927],\"psi;\":[968],\"qfr;\":[120110],\"quot\":[34],\"rcy;\":[1088],\"reg;\":[174],\"rfr;\":[120111],\"rho;\":[961],\"rlm;\":[8207],\"rsh;\":[8625],\"scE;\":[10932],\"sce;\":[10928],\"scy;\":[1089],\"sect\":[167],\"sfr;\":[120112],\"shy;\":[173],\"sim;\":[8764],\"smt;\":[10922],\"sol;\":[47],\"squ;\":[9633],\"sub;\":[8834],\"sum;\":[8721],\"sup1\":[185],\"sup2\":[178],\"sup3\":[179],\"sup;\":[8835],\"tau;\":[964],\"tcy;\":[1090],\"tfr;\":[120113],\"top;\":[8868],\"ucy;\":[1091],\"ufr;\":[120114],\"uml;\":[168],\"uuml\":[252],\"vcy;\":[1074],\"vee;\":[8744],\"vfr;\":[120115],\"wfr;\":[120116],\"xfr;\":[120117],\"ycy;\":[1099],\"yen;\":[165],\"yfr;\":[120118],\"yuml\":[255],\"zcy;\":[1079],\"zfr;\":[120119],\"zwj;\":[8205]}},{\"length\":3,\"entities\":{\"AMP\":[38],\"DD;\":[8517],\"ETH\":[208],\"GT;\":[62],\"Gg;\":[8921],\"Gt;\":[8811],\"Im;\":[8465],\"LT;\":[60],\"Ll;\":[8920],\"Lt;\":[8810],\"Mu;\":[924],\"Nu;\":[925],\"Or;\":[10836],\"Pi;\":[928],\"Pr;\":[10939],\"REG\":[174],\"Re;\":[8476],\"Sc;\":[10940],\"Xi;\":[926],\"ac;\":[8766],\"af;\":[8289],\"amp\":[38],\"ap;\":[8776],\"dd;\":[8518],\"deg\":[176],\"ee;\":[8519],\"eg;\":[10906],\"el;\":[10905],\"eth\":[240],\"gE;\":[8807],\"ge;\":[8805],\"gg;\":[8811],\"gl;\":[8823],\"gt;\":[62],\"ic;\":[8291],\"ii;\":[8520],\"in;\":[8712],\"it;\":[8290],\"lE;\":[8806],\"le;\":[8804],\"lg;\":[8822],\"ll;\":[8810],\"lt;\":[60],\"mp;\":[8723],\"mu;\":[956],\"ne;\":[8800],\"ni;\":[8715],\"not\":[172],\"nu;\":[957],\"oS;\":[9416],\"or;\":[8744],\"pi;\":[960],\"pm;\":[177],\"pr;\":[8826],\"reg\":[174],\"rx;\":[8478],\"sc;\":[8827],\"shy\":[173],\"uml\":[168],\"wp;\":[8472],\"wr;\":[8768],\"xi;\":[958],\"yen\":[165]}},{\"length\":2,\"entities\":{\"GT\":[62],\"LT\":[60],\"gt\":[62],\"lt\":[60]}}]\n","/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2017 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\n\nexport const EOF = -1\nexport const NULL = 0x00\nexport const TABULATION = 0x09\nexport const CARRIAGE_RETURN = 0x0d\nexport const LINE_FEED = 0x0a\nexport const FORM_FEED = 0x0c\nexport const SPACE = 0x20\nexport const EXCLAMATION_MARK = 0x21 // !\nexport const QUOTATION_MARK = 0x22 // \"\nexport const NUMBER_SIGN = 0x23 // #\nexport const AMPERSAND = 0x26 // &\nexport const APOSTROPHE = 0x27 // '\nexport const LEFT_PARENTHESIS = 0x28 // (\nexport const RIGHT_PARENTHESIS = 0x29 // )\nexport const ASTERISK = 0x2a // *\nexport const HYPHEN_MINUS = 0x2d // -\nexport const SOLIDUS = 0x2f // /\nexport const DIGIT_0 = 0x30\nexport const DIGIT_9 = 0x39\nexport const COLON = 0x3a // :\nexport const SEMICOLON = 0x3b // ;\nexport const LESS_THAN_SIGN = 0x3c // <\nexport const EQUALS_SIGN = 0x3d // =\nexport const GREATER_THAN_SIGN = 0x3e // >\nexport const QUESTION_MARK = 0x3f // ?\nexport const LATIN_CAPITAL_A = 0x41\nexport const LATIN_CAPITAL_D = 0x44\nexport const LATIN_CAPITAL_F = 0x46\nexport const LATIN_CAPITAL_X = 0x58\nexport const LATIN_CAPITAL_Z = 0x5a\nexport const LEFT_SQUARE_BRACKET = 0x5b // [\nexport const REVERSE_SOLIDUS = 0x5c // \\\nexport const RIGHT_SQUARE_BRACKET = 0x5d // ]\nexport const GRAVE_ACCENT = 0x60 // `\nexport const LATIN_SMALL_A = 0x61\nexport const LATIN_SMALL_F = 0x66\nexport const LATIN_SMALL_X = 0x78\nexport const LATIN_SMALL_Z = 0x7a\nexport const LEFT_CURLY_BRACKET = 0x7b // {\nexport const RIGHT_CURLY_BRACKET = 0x7d // }\nexport const NULL_REPLACEMENT = 0xfffd\n\n/**\n * Check whether the code point is a whitespace.\n * @param cp The code point to check.\n * @returns `true` if the code point is a whitespace.\n */\nexport function isWhitespace(cp: number): boolean {\n return (\n cp === TABULATION ||\n cp === LINE_FEED ||\n cp === FORM_FEED ||\n cp === CARRIAGE_RETURN ||\n cp === SPACE\n )\n}\n\n/**\n * Check whether the code point is an uppercase letter character.\n * @param cp The code point to check.\n * @returns `true` if the code point is an uppercase letter character.\n */\nexport function isUpperLetter(cp: number): boolean {\n return cp >= LATIN_CAPITAL_A && cp <= LATIN_CAPITAL_Z\n}\n\n/**\n * Check whether the code point is a lowercase letter character.\n * @param cp The code point to check.\n * @returns `true` if the code point is a lowercase letter character.\n */\nexport function isLowerLetter(cp: number): boolean {\n return cp >= LATIN_SMALL_A && cp <= LATIN_SMALL_Z\n}\n\n/**\n * Check whether the code point is a letter character.\n * @param cp The code point to check.\n * @returns `true` if the code point is a letter character.\n */\nexport function isLetter(cp: number): boolean {\n return isLowerLetter(cp) || isUpperLetter(cp)\n}\n\n/**\n * Check whether the code point is a digit character.\n * @param cp The code point to check.\n * @returns `true` if the code point is a digit character.\n */\nexport function isDigit(cp: number): boolean {\n return cp >= DIGIT_0 && cp <= DIGIT_9\n}\n\n/**\n * Check whether the code point is a digit character.\n * @param cp The code point to check.\n * @returns `true` if the code point is a digit character.\n */\nexport function isUpperHexDigit(cp: number): boolean {\n return cp >= LATIN_CAPITAL_A && cp <= LATIN_CAPITAL_F\n}\n\n/**\n * Check whether the code point is a digit character.\n * @param cp The code point to check.\n * @returns `true` if the code point is a digit character.\n */\nexport function isLowerHexDigit(cp: number): boolean {\n return cp >= LATIN_SMALL_A && cp <= LATIN_SMALL_F\n}\n\n/**\n * Check whether the code point is a digit character.\n * @param cp The code point to check.\n * @returns `true` if the code point is a digit character.\n */\nexport function isHexDigit(cp: number): boolean {\n return isDigit(cp) || isUpperHexDigit(cp) || isLowerHexDigit(cp)\n}\n\n/**\n * Check whether the code point is a control character.\n * @param cp The code point to check.\n * @returns `true` if the code point is a control character.\n */\nexport function isControl(cp: number): boolean {\n return (cp >= 0 && cp <= 0x1f) || (cp >= 0x7f && cp <= 0x9f)\n}\n\n/**\n * Check whether the code point is a surrogate character.\n * @param cp The code point to check.\n * @returns `true` if the code point is a surrogate character.\n */\nexport function isSurrogate(cp: number): boolean {\n return cp >= 0xd800 && cp <= 0xdfff\n}\n\n/**\n * Check whether the code point is a surrogate pair character.\n * @param cp The code point to check.\n * @returns `true` if the code point is a surrogate pair character.\n */\nexport function isSurrogatePair(cp: number): boolean {\n return cp >= 0xdc00 && cp <= 0xdfff\n}\n\n/**\n * Check whether the code point is a surrogate character.\n * @param cp The code point to check.\n * @returns `true` if the code point is a surrogate character.\n */\nexport function isNonCharacter(cp: number): boolean {\n return (\n (cp >= 0xfdd0 && cp <= 0xfdef) ||\n ((cp & 0xfffe) === 0xfffe && cp <= 0x10ffff)\n )\n}\n\n// export function isReservedCodePoint(cp: number): boolean {\n// return (cp >= 0xD800 && cp <= 0xDFFF) || cp > 0x10FFFF\n// }\n\n/**\n * Convert the given character to lowercases.\n * @param cp The code point to convert.\n * @returns Converted code point.\n */\nexport function toLowerCodePoint(cp: number): number {\n return cp + 0x0020\n}\n","/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2017 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\n\n/*eslint-disable no-param-reassign */\n\nimport assert from \"assert\"\nimport { debug } from \"../common/debug\"\nimport type { ErrorCode, Namespace, Token } from \"../ast/index\"\nimport { NS, ParseError } from \"../ast/index\"\nimport { alternativeCR } from \"./util/alternative-cr\"\nimport { entitySets } from \"./util/entities\"\nimport {\n AMPERSAND,\n APOSTROPHE,\n CARRIAGE_RETURN,\n EOF,\n EQUALS_SIGN,\n EXCLAMATION_MARK,\n GRAVE_ACCENT,\n GREATER_THAN_SIGN,\n HYPHEN_MINUS,\n isControl,\n isDigit,\n isHexDigit,\n isLetter,\n isLowerHexDigit,\n isNonCharacter,\n isSurrogate,\n isSurrogatePair,\n isUpperHexDigit,\n isUpperLetter,\n isWhitespace,\n LATIN_CAPITAL_D,\n LATIN_CAPITAL_X,\n LATIN_SMALL_X,\n LEFT_CURLY_BRACKET,\n LEFT_SQUARE_BRACKET,\n LESS_THAN_SIGN,\n LINE_FEED,\n NULL,\n NULL_REPLACEMENT,\n NUMBER_SIGN,\n QUESTION_MARK,\n QUOTATION_MARK,\n RIGHT_CURLY_BRACKET,\n RIGHT_SQUARE_BRACKET,\n SEMICOLON,\n SOLIDUS,\n toLowerCodePoint,\n} from \"./util/unicode\"\nimport type { ParserOptions } from \"../common/parser-options\"\n\n/**\n * Enumeration of token types.\n */\nexport type TokenType =\n | \"HTMLAssociation\"\n | \"HTMLBogusComment\"\n | \"HTMLCDataText\"\n | \"HTMLComment\"\n | \"HTMLEndTagOpen\"\n | \"HTMLIdentifier\"\n | \"HTMLLiteral\"\n | \"HTMLRCDataText\"\n | \"HTMLRawText\"\n | \"HTMLSelfClosingTagClose\"\n | \"HTMLTagClose\"\n | \"HTMLTagOpen\"\n | \"HTMLText\"\n | \"HTMLWhitespace\"\n | \"VExpressionStart\"\n | \"VExpressionEnd\"\n\n/**\n * Enumeration of tokenizer's state types.\n */\nexport type TokenizerState =\n | \"DATA\"\n | \"TAG_OPEN\"\n | \"END_TAG_OPEN\"\n | \"TAG_NAME\"\n | \"RCDATA\"\n | \"RCDATA_LESS_THAN_SIGN\"\n | \"RCDATA_END_TAG_OPEN\"\n | \"RCDATA_END_TAG_NAME\"\n | \"RAWTEXT\"\n | \"RAWTEXT_LESS_THAN_SIGN\"\n | \"RAWTEXT_END_TAG_OPEN\"\n | \"RAWTEXT_END_TAG_NAME\"\n | \"BEFORE_ATTRIBUTE_NAME\"\n | \"ATTRIBUTE_NAME\"\n | \"AFTER_ATTRIBUTE_NAME\"\n | \"BEFORE_ATTRIBUTE_VALUE\"\n | \"ATTRIBUTE_VALUE_DOUBLE_QUOTED\"\n | \"ATTRIBUTE_VALUE_SINGLE_QUOTED\"\n | \"ATTRIBUTE_VALUE_UNQUOTED\"\n | \"AFTER_ATTRIBUTE_VALUE_QUOTED\"\n | \"SELF_CLOSING_START_TAG\"\n | \"BOGUS_COMMENT\"\n | \"MARKUP_DECLARATION_OPEN\"\n | \"COMMENT_START\"\n | \"COMMENT_START_DASH\"\n | \"COMMENT\"\n | \"COMMENT_LESS_THAN_SIGN\"\n | \"COMMENT_LESS_THAN_SIGN_BANG\"\n | \"COMMENT_LESS_THAN_SIGN_BANG_DASH\"\n | \"COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH\"\n | \"COMMENT_END_DASH\"\n | \"COMMENT_END\"\n | \"COMMENT_END_BANG\"\n | \"CDATA_SECTION\"\n | \"CDATA_SECTION_BRACKET\"\n | \"CDATA_SECTION_END\"\n | \"CHARACTER_REFERENCE\"\n | \"NAMED_CHARACTER_REFERENCE\"\n | \"AMBIGUOUS_AMPERSAND\"\n | \"NUMERIC_CHARACTER_REFERENCE\"\n | \"HEXADEMICAL_CHARACTER_REFERENCE_START\"\n | \"DECIMAL_CHARACTER_REFERENCE_START\"\n | \"HEXADEMICAL_CHARACTER_REFERENCE\"\n | \"DECIMAL_CHARACTER_REFERENCE\"\n | \"NUMERIC_CHARACTER_REFERENCE_END\"\n | \"CHARACTER_REFERENCE_END\"\n | \"V_EXPRESSION_START\"\n | \"V_EXPRESSION_DATA\"\n | \"V_EXPRESSION_END\"\n// ---- Use RAWTEXT state for <script> elements instead ----\n// \"SCRIPT_DATA\" |\n// \"SCRIPT_DATA_LESS_THAN_SIGN\" |\n// \"SCRIPT_DATA_END_TAG_OPEN\" |\n// \"SCRIPT_DATA_END_TAG_NAME\" |\n// \"SCRIPT_DATA_ESCAPE_START\" |\n// \"SCRIPT_DATA_ESCAPE_START_DASH\" |\n// \"SCRIPT_DATA_ESCAPED\" |\n// \"SCRIPT_DATA_ESCAPED_DASH\" |\n// \"SCRIPT_DATA_ESCAPED_DASH_DASH\" |\n// \"SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN\" |\n// \"SCRIPT_DATA_ESCAPED_END_TAG_OPEN\" |\n// \"SCRIPT_DATA_ESCAPED_END_TAG_NAME\" |\n// \"SCRIPT_DATA_DOUBLE_ESCAPE_START\" |\n// \"SCRIPT_DATA_DOUBLE_ESCAPED\" |\n// \"SCRIPT_DATA_DOUBLE_ESCAPED_DASH\" |\n// \"SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH\" |\n// \"SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN\" |\n// \"SCRIPT_DATA_DOUBLE_ESCAPE_END\" |\n// ---- Use BOGUS_COMMENT state for DOCTYPEs instead ----\n// \"DOCTYPE\" |\n// \"DOCTYPE_NAME\" |\n// \"AFTER_DOCTYPE_NAME\" |\n// \"BEFORE_DOCTYPE_PUBLIC_IDENTIFIER\" |\n// \"DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED\" |\n// \"DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED\" |\n// \"BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS\" |\n// \"BEFORE_DOCTYPE_SYSTEM_IDENTIFIER\" |\n// \"DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED\" |\n// \"DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED\" |\n// \"AFTER_DOCTYPE_SYSTEM_IDENTIFIER\" |\n// \"BOGUS_DOCTYPE\"\n\n/**\n * Tokenizer for HTML.\n */\nexport class Tokenizer {\n // Reading\n public readonly text: string\n public readonly gaps: number[]\n public readonly lineTerminators: number[]\n private readonly parserOptions: ParserOptions\n private lastCodePoint: number\n private lastCodePointRaw: number\n private offset: number\n private column: number\n private line: number\n\n // Tokenizing\n private returnState: TokenizerState\n private vExpressionScriptState: { state: TokenizerState } | null = null\n private reconsuming: boolean\n private buffer: number[]\n private crStartOffset: number\n private crCode: number\n private committedToken: Token | null\n private provisionalToken: Token | null // can be rollbacked.\n private currentToken: Token | null\n private lastTagOpenToken: Token | null\n private tokenStartOffset: number\n private tokenStartLine: number\n private tokenStartColumn: number\n\n /**\n * The current state.\n */\n public state: TokenizerState\n\n /**\n * Syntax errors.\n */\n public errors: ParseError[]\n\n /**\n * The current namespace.\n */\n public namespace: Namespace\n\n /**\n * The flag which enables expression tokens.\n * If this is true, this tokenizer will generate V_EXPRESSION_START and V_EXPRESSION_END tokens.\n */\n public expressionEnabled: boolean\n\n /**\n * Initialize this tokenizer.\n * @param text The source code to tokenize.\n * @param parserOptions The parser options.\n */\n public constructor(text: string, parserOptions?: ParserOptions) {\n debug(\"[html] the source code length: %d\", text.length)\n this.text = text\n this.gaps = []\n this.lineTerminators = []\n this.parserOptions = parserOptions || {}\n this.lastCodePoint = this.lastCodePointRaw = NULL\n this.offset = -1\n this.column = -1\n this.line = 1\n this.state = \"DATA\"\n this.returnState = \"DATA\"\n this.reconsuming = false\n this.buffer = []\n this.crStartOffset = -1\n this.crCode = 0\n this.errors = []\n this.committedToken = null\n this.provisionalToken = null\n this.currentToken = null\n this.lastTagOpenToken = null\n this.tokenStartOffset = -1\n this.tokenStartColumn = -1\n this.tokenStartLine = 1\n this.namespace = NS.HTML\n this.expressionEnabled = false\n }\n\n /**\n * Get the next token.\n * @returns The next token or null.\n */\n public nextToken(): Token | null {\n let cp = this.lastCodePoint\n while (\n this.committedToken == null &&\n (cp !== EOF || this.reconsuming)\n ) {\n if (this.provisionalToken != null && !this.isProvisionalState()) {\n this.commitProvisionalToken()\n if (this.committedToken != null) {\n break\n }\n }\n\n if (this.reconsuming) {\n this.reconsuming = false\n cp = this.lastCodePoint\n } else {\n cp = this.consumeNextCodePoint()\n }\n\n debug(\"[html] parse\", cp, this.state)\n this.state = this[this.state](cp)\n }\n\n {\n const token = this.consumeCommittedToken()\n if (token != null) {\n return token\n }\n }\n\n assert(cp === EOF)\n\n if (this.currentToken != null) {\n this.endToken()\n\n const token = this.consumeCommittedToken()\n if (token != null) {\n return token\n }\n }\n return this.currentToken\n }\n\n /**\n * Consume the last committed token.\n * @returns The last committed token.\n */\n private consumeCommittedToken(): Token | null {\n const token = this.committedToken\n this.committedToken = null\n return token\n }\n\n /**\n * Consume the next code point.\n * @returns The consumed code point.\n */\n private consumeNextCodePoint(): number {\n if (this.offset >= this.text.length) {\n this.lastCodePoint = this.lastCodePointRaw = EOF\n return EOF\n }\n\n this.offset += this.lastCodePoint >= 0x10000 ? 2 : 1\n if (this.offset >= this.text.length) {\n this.advanceLocation()\n this.lastCodePoint = this.lastCodePointRaw = EOF\n return EOF\n }\n\n const cp = this.text.codePointAt(this.offset) as number\n\n if (\n isSurrogate(this.text.charCodeAt(this.offset)) &&\n !isSurrogatePair(this.text.charCodeAt(this.offset + 1))\n ) {\n this.reportParseError(\"surrogate-in-input-stream\")\n }\n if (isNonCharacter(cp)) {\n this.reportParseError(\"noncharacter-in-input-stream\")\n }\n if (isControl(cp) && !isWhitespace(cp) && cp !== NULL) {\n this.reportParseError(\"control-character-in-input-stream\")\n }\n\n // Skip LF to convert CRLF → LF.\n if (this.lastCodePointRaw === CARRIAGE_RETURN && cp === LINE_FEED) {\n this.lastCodePoint = this.lastCodePointRaw = LINE_FEED\n this.gaps.push(this.offset)\n return this.consumeNextCodePoint()\n }\n\n // Update locations.\n this.advanceLocation()\n this.lastCodePoint = this.lastCodePointRaw = cp\n\n // To convert CRLF → LF.\n if (cp === CARRIAGE_RETURN) {\n this.lastCodePoint = LINE_FEED\n return LINE_FEED\n }\n\n return cp\n }\n\n /**\n * Advance the current line and column.\n */\n private advanceLocation(): void {\n if (this.lastCodePointRaw === LINE_FEED) {\n this.lineTerminators.push(this.offset)\n this.line += 1\n this.column = 0\n } else {\n this.column += this.lastCodePoint >= 0x10000 ? 2 : 1\n }\n }\n\n /**\n * Directive reconsuming the current code point as the given state.\n * @param state The next state.\n * @returns The next state.\n */\n private reconsumeAs(state: TokenizerState): TokenizerState {\n this.reconsuming = true\n return state\n }\n\n /**\n * Report an invalid character error.\n * @param code The error code.\n */\n private reportParseError(code: ErrorCode): void {\n const error = ParseError.fromCode(\n code,\n this.offset,\n this.line,\n this.column,\n )\n this.errors.push(error)\n\n debug(\"[html] syntax error:\", error.message)\n }\n\n /**\n * Mark the current location as a start of tokens.\n */\n private setStartTokenMark(): void {\n this.tokenStartOffset = this.offset\n this.tokenStartLine = this.line\n this.tokenStartColumn = this.column\n }\n\n /**\n * Mark the current location as a start of tokens.\n */\n private clearStartTokenMark(): void {\n this.tokenStartOffset = -1\n }\n\n /**\n * Start new token.\n * @param type The type of new token.\n * @returns The new token.\n */\n private startToken(type: TokenType): Token {\n if (this.tokenStartOffset === -1) {\n this.setStartTokenMark()\n }\n const offset = this.tokenStartOffset\n const line = this.tokenStartLine\n const column = this.tokenStartColumn\n\n if (this.currentToken != null) {\n this.endToken()\n }\n this.tokenStartOffset = -1\n\n const token = (this.currentToken = {\n type,\n range: [offset, -1],\n loc: {\n start: { line, column },\n end: { line: -1, column: -1 },\n },\n value: \"\",\n })\n\n debug(\"[html] start token: %d %s\", offset, token.type)\n return this.currentToken\n }\n\n /**\n * Commit the current token.\n * @returns The ended token.\n */\n private endToken(): Token | null {\n if (this.currentToken == null) {\n throw new Error(\"Invalid state\")\n }\n if (this.tokenStartOffset === -1) {\n this.setStartTokenMark()\n }\n const token = this.currentToken\n const offset = this.tokenStartOffset\n const line = this.tokenStartLine\n const column = this.tokenStartColumn\n const provisional = this.isProvisionalState()\n\n this.currentToken = null\n this.tokenStartOffset = -1\n\n token.range[1] = offset\n token.loc.end.line = line\n token.loc.end.column = column\n\n if (token.range[0] === offset && !provisional) {\n debug(\n \"[html] abandon token: %j %s %j\",\n token.range,\n token.type,\n token.value,\n )\n return null\n }\n\n if (provisional) {\n if (this.provisionalToken != null) {\n this.commitProvisionalToken()\n }\n this.provisionalToken = token\n debug(\n \"[html] provisional-commit token: %j %s %j\",\n token.range,\n token.type,\n token.value,\n )\n } else {\n this.commitToken(token)\n }\n\n return token\n }\n\n /**\n * Commit the given token.\n * @param token The token to commit.\n */\n private commitToken(token: Token): void {\n assert(\n this.committedToken == null,\n \"Invalid state: the commited token existed already.\",\n )\n debug(\n \"[html] commit token: %j %j %s %j\",\n token.range,\n token.loc,\n token.type,\n token.value,\n )\n\n this.committedToken = token\n if (token.type === \"HTMLTagOpen\") {\n this.lastTagOpenToken = token\n }\n }\n\n /**\n * Check whether this is provisional state or not.\n * @returns `true` if this is provisional state.\n */\n private isProvisionalState(): boolean {\n return (\n this.state.startsWith(\"RCDATA_\") ||\n this.state.startsWith(\"RAWTEXT_\")\n )\n }\n\n /**\n * Commit the last provisional committed token.\n */\n private commitProvisionalToken(): void {\n assert(\n this.provisionalToken != null,\n \"Invalid state: the provisional token was not found.\",\n )\n\n const token = this.provisionalToken\n this.provisionalToken = null\n\n if (token.range[0] < token.range[1]) {\n this.commitToken(token)\n }\n }\n\n /**\n * Cancel the current token and set the last provisional committed token as the current token.\n */\n private rollbackProvisionalToken(): void {\n assert(this.currentToken != null)\n assert(this.provisionalToken != null)\n\n const token = this.currentToken\n debug(\"[html] rollback token: %d %s\", token.range[0], token.type)\n\n this.currentToken = this.provisionalToken\n this.provisionalToken = null\n }\n\n /**\n * Append the given code point into the value of the current token.\n * @param cp The code point to append.\n * @param expected The expected type of the current token.\n */\n private appendTokenValue(cp: number, expected: TokenType | null): void {\n const token = this.currentToken\n if (token == null || (expected != null && token.type !== expected)) {\n const msg1 = expected ? `\"${expected}\" type` : \"any token\"\n const msg2 = token ? `\"${token.type}\" type` : \"no token\"\n\n throw new Error(\n `Tokenizer: Invalid state. Expected ${msg1}, but got ${msg2}.`,\n )\n }\n\n token.value += String.fromCodePoint(cp)\n }\n\n /**\n * Check whether the current token is appropriate `HTMLEndTagOpen` token.\n * @returns {boolean} `true` if the current token is appropriate `HTMLEndTagOpen` token.\n */\n private isAppropriateEndTagOpen(): boolean {\n return (\n this.currentToken != null &&\n this.lastTagOpenToken != null &&\n this.currentToken.type === \"HTMLEndTagOpen\" &&\n this.currentToken.value === this.lastTagOpenToken.value\n )\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/syntax.html#data-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected DATA(cp: number): TokenizerState {\n this.clearStartTokenMark()\n\n while (true) {\n const type = isWhitespace(cp) ? \"HTMLWhitespace\" : \"HTMLText\"\n if (this.currentToken != null && this.currentToken.type !== type) {\n this.endToken()\n return this.reconsumeAs(this.state)\n }\n if (this.currentToken == null) {\n this.startToken(type)\n }\n\n if (cp === AMPERSAND) {\n this.returnState = \"DATA\"\n return \"CHARACTER_REFERENCE\"\n }\n if (cp === LESS_THAN_SIGN) {\n this.setStartTokenMark()\n return \"TAG_OPEN\"\n }\n if (cp === LEFT_CURLY_BRACKET && this.expressionEnabled) {\n this.setStartTokenMark()\n this.returnState = \"DATA\"\n return \"V_EXPRESSION_START\"\n }\n if (cp === RIGHT_CURLY_BRACKET && this.expressionEnabled) {\n this.setStartTokenMark()\n this.returnState = \"DATA\"\n return \"V_EXPRESSION_END\"\n }\n if (cp === EOF) {\n return \"DATA\"\n }\n\n if (cp === NULL) {\n this.reportParseError(\"unexpected-null-character\")\n }\n this.appendTokenValue(cp, type)\n\n cp = this.consumeNextCodePoint()\n }\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/syntax.html#rcdata-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected RCDATA(cp: number): TokenizerState {\n this.clearStartTokenMark()\n\n while (true) {\n const type = isWhitespace(cp) ? \"HTMLWhitespace\" : \"HTMLRCDataText\"\n if (this.currentToken != null && this.currentToken.type !== type) {\n this.endToken()\n return this.reconsumeAs(this.state)\n }\n if (this.currentToken == null) {\n this.startToken(type)\n }\n\n if (cp === AMPERSAND) {\n this.returnState = \"RCDATA\"\n return \"CHARACTER_REFERENCE\"\n }\n if (cp === LESS_THAN_SIGN) {\n this.setStartTokenMark()\n return \"RCDATA_LESS_THAN_SIGN\"\n }\n if (cp === LEFT_CURLY_BRACKET && this.expressionEnabled) {\n this.setStartTokenMark()\n this.returnState = \"RCDATA\"\n return \"V_EXPRESSION_START\"\n }\n if (cp === RIGHT_CURLY_BRACKET && this.expressionEnabled) {\n this.setStartTokenMark()\n this.returnState = \"RCDATA\"\n return \"V_EXPRESSION_END\"\n }\n if (cp === EOF) {\n return \"DATA\"\n }\n\n if (cp === NULL) {\n this.reportParseError(\"unexpected-null-character\")\n cp = NULL_REPLACEMENT\n }\n this.appendTokenValue(cp, type)\n\n cp = this.consumeNextCodePoint()\n }\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/syntax.html#rawtext-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected RAWTEXT(cp: number): TokenizerState {\n this.clearStartTokenMark()\n\n while (true) {\n const type = isWhitespace(cp) ? \"HTMLWhitespace\" : \"HTMLRawText\"\n if (this.currentToken != null && this.currentToken.type !== type) {\n this.endToken()\n return this.reconsumeAs(this.state)\n }\n if (this.currentToken == null) {\n this.startToken(type)\n }\n\n if (cp === LESS_THAN_SIGN) {\n this.setStartTokenMark()\n return \"RAWTEXT_LESS_THAN_SIGN\"\n }\n if (cp === LEFT_CURLY_BRACKET && this.expressionEnabled) {\n this.setStartTokenMark()\n this.returnState = \"RAWTEXT\"\n return \"V_EXPRESSION_START\"\n }\n if (cp === RIGHT_CURLY_BRACKET && this.expressionEnabled) {\n this.setStartTokenMark()\n this.returnState = \"RAWTEXT\"\n return \"V_EXPRESSION_END\"\n }\n if (cp === EOF) {\n return \"DATA\"\n }\n\n if (cp === NULL) {\n this.reportParseError(\"unexpected-null-character\")\n cp = NULL_REPLACEMENT\n }\n this.appendTokenValue(cp, type)\n\n cp = this.consumeNextCodePoint()\n }\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/syntax.html#tag-open-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected TAG_OPEN(cp: number): TokenizerState {\n if (cp === EXCLAMATION_MARK) {\n return \"MARKUP_DECLARATION_OPEN\"\n }\n if (cp === SOLIDUS) {\n return \"END_TAG_OPEN\"\n }\n if (isLetter(cp)) {\n this.startToken(\"HTMLTagOpen\")\n return this.reconsumeAs(\"TAG_NAME\")\n }\n if (cp === QUESTION_MARK) {\n this.reportParseError(\n \"unexpected-question-mark-instead-of-tag-name\",\n )\n this.startToken(\"HTMLBogusComment\")\n return this.reconsumeAs(\"BOGUS_COMMENT\")\n }\n if (cp === EOF) {\n this.clearStartTokenMark()\n this.reportParseError(\"eof-before-tag-name\")\n this.appendTokenValue(LESS_THAN_SIGN, \"HTMLText\")\n return \"DATA\"\n }\n\n this.reportParseError(\"invalid-first-character-of-tag-name\")\n this.appendTokenValue(LESS_THAN_SIGN, \"HTMLText\")\n return this.reconsumeAs(\"DATA\")\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/syntax.html#end-tag-open-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected END_TAG_OPEN(cp: number): TokenizerState {\n if (isLetter(cp)) {\n this.startToken(\"HTMLEndTagOpen\")\n return this.reconsumeAs(\"TAG_NAME\")\n }\n if (cp === GREATER_THAN_SIGN) {\n this.endToken() // < Commit or abandon the current text token.\n this.reportParseError(\"missing-end-tag-name\")\n return \"DATA\"\n }\n if (cp === EOF) {\n this.clearStartTokenMark()\n this.reportParseError(\"eof-before-tag-name\")\n this.appendTokenValue(LESS_THAN_SIGN, \"HTMLText\")\n this.appendTokenValue(SOLIDUS, \"HTMLText\")\n return \"DATA\"\n }\n\n this.reportParseError(\"invalid-first-character-of-tag-name\")\n this.startToken(\"HTMLBogusComment\")\n return this.reconsumeAs(\"BOGUS_COMMENT\")\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/syntax.html#tag-name-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected TAG_NAME(cp: number): TokenizerState {\n while (true) {\n if (isWhitespace(cp)) {\n this.endToken()\n return \"BEFORE_ATTRIBUTE_NAME\"\n }\n if (cp === SOLIDUS) {\n this.endToken()\n this.setStartTokenMark()\n return \"SELF_CLOSING_START_TAG\"\n }\n if (cp === GREATER_THAN_SIGN) {\n this.startToken(\"HTMLTagClose\")\n return \"DATA\"\n }\n if (cp === EOF) {\n this.reportParseError(\"eof-in-tag\")\n return \"DATA\"\n }\n if (cp === NULL) {\n this.reportParseError(\"unexpected-null-character\")\n cp = NULL_REPLACEMENT\n }\n\n this.appendTokenValue(\n isUpperLetter(cp) ? toLowerCodePoint(cp) : cp,\n null,\n )\n\n cp = this.consumeNextCodePoint()\n }\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/syntax.html#rcdata-less-than-sign-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected RCDATA_LESS_THAN_SIGN(cp: number): TokenizerState {\n if (cp === SOLIDUS) {\n this.buffer = []\n return \"RCDATA_END_TAG_OPEN\"\n }\n\n this.appendTokenValue(LESS_THAN_SIGN, \"HTMLRCDataText\")\n return this.reconsumeAs(\"RCDATA\")\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/syntax.html#rcdata-end-tag-open-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected RCDATA_END_TAG_OPEN(cp: number): TokenizerState {\n if (isLetter(cp)) {\n this.startToken(\"HTMLEndTagOpen\")\n return this.reconsumeAs(\"RCDATA_END_TAG_NAME\")\n }\n\n this.appendTokenValue(LESS_THAN_SIGN, \"HTMLRCDataText\")\n this.appendTokenValue(SOLIDUS, \"HTMLRCDataText\")\n return this.reconsumeAs(\"RCDATA\")\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/syntax.html#rcdata-end-tag-name-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected RCDATA_END_TAG_NAME(cp: number): TokenizerState {\n while (true) {\n if (isWhitespace(cp) && this.isAppropriateEndTagOpen()) {\n this.endToken()\n return \"BEFORE_ATTRIBUTE_NAME\"\n }\n if (cp === SOLIDUS && this.isAppropriateEndTagOpen()) {\n this.endToken()\n this.setStartTokenMark()\n return \"SELF_CLOSING_START_TAG\"\n }\n if (cp === GREATER_THAN_SIGN && this.isAppropriateEndTagOpen()) {\n this.startToken(\"HTMLTagClose\")\n return \"DATA\"\n }\n if (!isLetter(cp)) {\n this.rollbackProvisionalToken()\n this.appendTokenValue(LESS_THAN_SIGN, \"HTMLRCDataText\")\n this.appendTokenValue(SOLIDUS, \"HTMLRCDataText\")\n for (const cp1 of this.buffer) {\n this.appendTokenValue(cp1, \"HTMLRCDataText\")\n }\n return this.reconsumeAs(\"RCDATA\")\n }\n\n this.appendTokenValue(\n isUpperLetter(cp) ? toLowerCodePoint(cp) : cp,\n \"HTMLEndTagOpen\",\n )\n this.buffer.push(cp)\n\n cp = this.consumeNextCodePoint()\n }\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/syntax.html#rawtext-less-than-sign-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected RAWTEXT_LESS_THAN_SIGN(cp: number): TokenizerState {\n if (cp === SOLIDUS) {\n this.buffer = []\n return \"RAWTEXT_END_TAG_OPEN\"\n }\n\n this.appendTokenValue(LESS_THAN_SIGN, \"HTMLRawText\")\n return this.reconsumeAs(\"RAWTEXT\")\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/syntax.html#rawtext-end-tag-open-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected RAWTEXT_END_TAG_OPEN(cp: number): TokenizerState {\n if (isLetter(cp)) {\n this.startToken(\"HTMLEndTagOpen\")\n return this.reconsumeAs(\"RAWTEXT_END_TAG_NAME\")\n }\n\n this.appendTokenValue(LESS_THAN_SIGN, \"HTMLRawText\")\n this.appendTokenValue(SOLIDUS, \"HTMLRawText\")\n return this.reconsumeAs(\"RAWTEXT\")\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/syntax.html#rawtext-end-tag-name-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected RAWTEXT_END_TAG_NAME(cp: number): TokenizerState {\n while (true) {\n if (cp === SOLIDUS && this.isAppropriateEndTagOpen()) {\n this.endToken()\n this.setStartTokenMark()\n return \"SELF_CLOSING_START_TAG\"\n }\n if (cp === GREATER_THAN_SIGN && this.isAppropriateEndTagOpen()) {\n this.startToken(\"HTMLTagClose\")\n return \"DATA\"\n }\n if (isWhitespace(cp) && this.isAppropriateEndTagOpen()) {\n this.endToken()\n return \"BEFORE_ATTRIBUTE_NAME\"\n }\n if (!isLetter(cp) && !maybeValidCustomBlock.call(this, cp)) {\n this.rollbackProvisionalToken()\n this.appendTokenValue(LESS_THAN_SIGN, \"HTMLRawText\")\n this.appendTokenValue(SOLIDUS, \"HTMLRawText\")\n for (const cp1 of this.buffer) {\n this.appendTokenValue(cp1, \"HTMLRawText\")\n }\n return this.reconsumeAs(\"RAWTEXT\")\n }\n\n this.appendTokenValue(\n isUpperLetter(cp) ? toLowerCodePoint(cp) : cp,\n \"HTMLEndTagOpen\",\n )\n this.buffer.push(cp)\n\n cp = this.consumeNextCodePoint()\n }\n\n function maybeValidCustomBlock(this: Tokenizer, nextCp: number) {\n return (\n this.currentToken &&\n this.lastTagOpenToken?.value.startsWith(\n this.currentToken.value + String.fromCodePoint(nextCp),\n )\n )\n }\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#before-attribute-name-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected BEFORE_ATTRIBUTE_NAME(cp: number): TokenizerState {\n while (isWhitespace(cp)) {\n cp = this.consumeNextCodePoint()\n }\n\n if (cp === SOLIDUS || cp === GREATER_THAN_SIGN || cp === EOF) {\n return this.reconsumeAs(\"AFTER_ATTRIBUTE_NAME\")\n }\n\n if (cp === EQUALS_SIGN) {\n this.reportParseError(\n \"unexpected-equals-sign-before-attribute-name\",\n )\n this.startToken(\"HTMLIdentifier\")\n this.appendTokenValue(cp, \"HTMLIdentifier\")\n return \"ATTRIBUTE_NAME\"\n }\n\n this.startToken(\"HTMLIdentifier\")\n return this.reconsumeAs(\"ATTRIBUTE_NAME\")\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#attribute-name-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected ATTRIBUTE_NAME(cp: number): TokenizerState {\n while (true) {\n if (\n isWhitespace(cp) ||\n cp === SOLIDUS ||\n cp === GREATER_THAN_SIGN ||\n cp === EOF\n ) {\n this.endToken()\n return this.reconsumeAs(\"AFTER_ATTRIBUTE_NAME\")\n }\n if (cp === EQUALS_SIGN) {\n this.startToken(\"HTMLAssociation\")\n return \"BEFORE_ATTRIBUTE_VALUE\"\n }\n\n if (cp === NULL) {\n this.reportParseError(\"unexpected-null-character\")\n cp = NULL_REPLACEMENT\n }\n if (\n cp === QUOTATION_MARK ||\n cp === APOSTROPHE ||\n cp === LESS_THAN_SIGN\n ) {\n this.reportParseError(\"unexpected-character-in-attribute-name\")\n }\n\n this.appendTokenValue(\n isUpperLetter(cp) ? toLowerCodePoint(cp) : cp,\n \"HTMLIdentifier\",\n )\n cp = this.consumeNextCodePoint()\n }\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#after-attribute-name-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected AFTER_ATTRIBUTE_NAME(cp: number): TokenizerState {\n while (isWhitespace(cp)) {\n cp = this.consumeNextCodePoint()\n }\n\n if (cp === SOLIDUS) {\n this.setStartTokenMark()\n return \"SELF_CLOSING_START_TAG\"\n }\n if (cp === EQUALS_SIGN) {\n this.startToken(\"HTMLAssociation\")\n return \"BEFORE_ATTRIBUTE_VALUE\"\n }\n if (cp === GREATER_THAN_SIGN) {\n this.startToken(\"HTMLTagClose\")\n return \"DATA\"\n }\n\n if (cp === EOF) {\n this.reportParseError(\"eof-in-tag\")\n return \"DATA\"\n }\n\n this.startToken(\"HTMLIdentifier\")\n return this.reconsumeAs(\"ATTRIBUTE_NAME\")\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#before-attribute-value-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected BEFORE_ATTRIBUTE_VALUE(cp: number): TokenizerState {\n this.endToken()\n\n while (isWhitespace(cp)) {\n cp = this.consumeNextCodePoint()\n }\n\n if (cp === GREATER_THAN_SIGN) {\n this.reportParseError(\"missing-attribute-value\")\n this.startToken(\"HTMLTagClose\")\n return \"DATA\"\n }\n\n this.startToken(\"HTMLLiteral\")\n if (cp === QUOTATION_MARK) {\n return \"ATTRIBUTE_VALUE_DOUBLE_QUOTED\"\n }\n if (cp === APOSTROPHE) {\n return \"ATTRIBUTE_VALUE_SINGLE_QUOTED\"\n }\n return this.reconsumeAs(\"ATTRIBUTE_VALUE_UNQUOTED\")\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#attribute-value-(double-quoted)-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected ATTRIBUTE_VALUE_DOUBLE_QUOTED(cp: number): TokenizerState {\n while (true) {\n if (cp === QUOTATION_MARK) {\n return \"AFTER_ATTRIBUTE_VALUE_QUOTED\"\n }\n if (cp === AMPERSAND) {\n this.returnState = \"ATTRIBUTE_VALUE_DOUBLE_QUOTED\"\n return \"CHARACTER_REFERENCE\"\n }\n\n if (cp === NULL) {\n this.reportParseError(\"unexpected-null-character\")\n cp = NULL_REPLACEMENT\n }\n if (cp === EOF) {\n this.reportParseError(\"eof-in-tag\")\n return \"DATA\"\n }\n\n this.appendTokenValue(cp, \"HTMLLiteral\")\n cp = this.consumeNextCodePoint()\n }\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#attribute-value-(single-quoted)-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected ATTRIBUTE_VALUE_SINGLE_QUOTED(cp: number): TokenizerState {\n while (true) {\n if (cp === APOSTROPHE) {\n return \"AFTER_ATTRIBUTE_VALUE_QUOTED\"\n }\n if (cp === AMPERSAND) {\n this.returnState = \"ATTRIBUTE_VALUE_SINGLE_QUOTED\"\n return \"CHARACTER_REFERENCE\"\n }\n\n if (cp === NULL) {\n this.reportParseError(\"unexpected-null-character\")\n cp = NULL_REPLACEMENT\n }\n if (cp === EOF) {\n this.reportParseError(\"eof-in-tag\")\n return \"DATA\"\n }\n\n this.appendTokenValue(cp, \"HTMLLiteral\")\n cp = this.consumeNextCodePoint()\n }\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#attribute-value-(unquoted)-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected ATTRIBUTE_VALUE_UNQUOTED(cp: number): TokenizerState {\n while (true) {\n if (isWhitespace(cp)) {\n this.endToken()\n return \"BEFORE_ATTRIBUTE_NAME\"\n }\n if (cp === AMPERSAND) {\n this.returnState = \"ATTRIBUTE_VALUE_UNQUOTED\"\n return \"CHARACTER_REFERENCE\"\n }\n if (cp === GREATER_THAN_SIGN) {\n this.startToken(\"HTMLTagClose\")\n return \"DATA\"\n }\n\n if (cp === NULL) {\n this.reportParseError(\"unexpected-null-character\")\n cp = NULL_REPLACEMENT\n }\n if (\n cp === QUOTATION_MARK ||\n cp === APOSTROPHE ||\n cp === LESS_THAN_SIGN ||\n cp === EQUALS_SIGN ||\n cp === GRAVE_ACCENT\n ) {\n this.reportParseError(\n \"unexpected-character-in-unquoted-attribute-value\",\n )\n }\n if (cp === EOF) {\n this.reportParseError(\"eof-in-tag\")\n return \"DATA\"\n }\n\n this.appendTokenValue(cp, \"HTMLLiteral\")\n cp = this.consumeNextCodePoint()\n }\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#after-attribute-value-(quoted)-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected AFTER_ATTRIBUTE_VALUE_QUOTED(cp: number): TokenizerState {\n this.endToken()\n\n if (isWhitespace(cp)) {\n return \"BEFORE_ATTRIBUTE_NAME\"\n }\n if (cp === SOLIDUS) {\n this.setStartTokenMark()\n return \"SELF_CLOSING_START_TAG\"\n }\n if (cp === GREATER_THAN_SIGN) {\n this.startToken(\"HTMLTagClose\")\n return \"DATA\"\n }\n\n if (cp === EOF) {\n this.reportParseError(\"eof-in-tag\")\n return \"DATA\"\n }\n\n this.reportParseError(\"missing-whitespace-between-attributes\")\n return this.reconsumeAs(\"BEFORE_ATTRIBUTE_NAME\")\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#self-closing-start-tag-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected SELF_CLOSING_START_TAG(cp: number): TokenizerState {\n if (cp === GREATER_THAN_SIGN) {\n this.startToken(\"HTMLSelfClosingTagClose\")\n\n // Vue.js supports self-closing elements.\n // So don't switch to RCDATA/RAWTEXT from any elements.\n return \"DATA\"\n }\n\n if (cp === EOF) {\n this.reportParseError(\"eof-in-tag\")\n return \"DATA\"\n }\n\n this.reportParseError(\"unexpected-solidus-in-tag\")\n this.clearStartTokenMark()\n return this.reconsumeAs(\"BEFORE_ATTRIBUTE_NAME\")\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#bogus-comment-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected BOGUS_COMMENT(cp: number): TokenizerState {\n while (true) {\n if (cp === GREATER_THAN_SIGN) {\n return \"DATA\"\n }\n\n if (cp === EOF) {\n return \"DATA\"\n }\n if (cp === NULL) {\n cp = NULL_REPLACEMENT\n }\n this.appendTokenValue(cp, null)\n\n cp = this.consumeNextCodePoint()\n }\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#markup-declaration-open-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected MARKUP_DECLARATION_OPEN(cp: number): TokenizerState {\n if (cp === HYPHEN_MINUS && this.text[this.offset + 1] === \"-\") {\n this.offset += 1\n this.column += 1\n\n this.startToken(\"HTMLComment\")\n return \"COMMENT_START\"\n }\n if (\n cp === LATIN_CAPITAL_D &&\n this.text.slice(this.offset + 1, this.offset + 7) === \"OCTYPE\"\n ) {\n // It does not support DOCTYPE.\n // this.offset += 6\n // this.column += 6\n // return \"DOCTYPE\"\n\n // TODO\n this.startToken(\"HTMLBogusComment\")\n this.appendTokenValue(cp, \"HTMLBogusComment\")\n return \"BOGUS_COMMENT\"\n }\n if (\n cp === LEFT_SQUARE_BRACKET &&\n this.text.slice(this.offset + 1, this.offset + 7) === \"CDATA[\"\n ) {\n this.offset += 6\n this.column += 6\n\n if (this.namespace === NS.HTML) {\n this.reportParseError(\"cdata-in-html-content\")\n this.startToken(\"HTMLBogusComment\").value = \"[CDATA[\"\n return \"BOGUS_COMMENT\"\n }\n\n this.startToken(\"HTMLCDataText\")\n return \"CDATA_SECTION\"\n }\n\n this.reportParseError(\"incorrectly-opened-comment\")\n this.startToken(\"HTMLBogusComment\")\n return this.reconsumeAs(\"BOGUS_COMMENT\")\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#comment-start-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected COMMENT_START(cp: number): TokenizerState {\n if (cp === HYPHEN_MINUS) {\n return \"COMMENT_START_DASH\"\n }\n if (cp === GREATER_THAN_SIGN) {\n this.reportParseError(\"abrupt-closing-of-empty-comment\")\n return \"DATA\"\n }\n\n return this.reconsumeAs(\"COMMENT\")\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#comment-start-dash-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected COMMENT_START_DASH(cp: number): TokenizerState {\n if (cp === HYPHEN_MINUS) {\n return \"COMMENT_END\"\n }\n\n if (cp === GREATER_THAN_SIGN) {\n this.reportParseError(\"abrupt-closing-of-empty-comment\")\n return \"DATA\"\n }\n if (cp === EOF) {\n this.reportParseError(\"eof-in-comment\")\n return \"DATA\"\n }\n\n this.appendTokenValue(HYPHEN_MINUS, \"HTMLComment\")\n return this.reconsumeAs(\"COMMENT\")\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#comment-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected COMMENT(cp: number): TokenizerState {\n while (true) {\n if (cp === LESS_THAN_SIGN) {\n this.appendTokenValue(LESS_THAN_SIGN, \"HTMLComment\")\n return \"COMMENT_LESS_THAN_SIGN\"\n }\n if (cp === HYPHEN_MINUS) {\n return \"COMMENT_END_DASH\"\n }\n\n if (cp === NULL) {\n this.reportParseError(\"unexpected-null-character\")\n cp = NULL_REPLACEMENT\n }\n if (cp === EOF) {\n this.reportParseError(\"eof-in-comment\")\n return \"DATA\"\n }\n\n this.appendTokenValue(cp, \"HTMLComment\")\n cp = this.consumeNextCodePoint()\n }\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#comment-less-than-sign-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected COMMENT_LESS_THAN_SIGN(cp: number): TokenizerState {\n while (true) {\n if (cp === EXCLAMATION_MARK) {\n this.appendTokenValue(cp, \"HTMLComment\")\n return \"COMMENT_LESS_THAN_SIGN_BANG\"\n }\n if (cp !== LESS_THAN_SIGN) {\n return this.reconsumeAs(\"COMMENT\")\n }\n\n this.appendTokenValue(cp, \"HTMLComment\")\n cp = this.consumeNextCodePoint()\n }\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#comment-less-than-sign-bang-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected COMMENT_LESS_THAN_SIGN_BANG(cp: number): TokenizerState {\n if (cp === HYPHEN_MINUS) {\n return \"COMMENT_LESS_THAN_SIGN_BANG_DASH\"\n }\n return this.reconsumeAs(\"COMMENT\")\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#comment-less-than-sign-bang-dash-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected COMMENT_LESS_THAN_SIGN_BANG_DASH(cp: number): TokenizerState {\n if (cp === HYPHEN_MINUS) {\n return \"COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH\"\n }\n return this.reconsumeAs(\"COMMENT_END_DASH\")\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#comment-less-than-sign-bang-dash-dash-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH(\n cp: number,\n ): TokenizerState {\n if (cp !== GREATER_THAN_SIGN && cp !== EOF) {\n this.reportParseError(\"nested-comment\")\n }\n return this.reconsumeAs(\"COMMENT_END\")\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#comment-end-dash-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected COMMENT_END_DASH(cp: number): TokenizerState {\n if (cp === HYPHEN_MINUS) {\n return \"COMMENT_END\"\n }\n\n if (cp === EOF) {\n this.reportParseError(\"eof-in-comment\")\n return \"DATA\"\n }\n\n this.appendTokenValue(HYPHEN_MINUS, \"HTMLComment\")\n return this.reconsumeAs(\"COMMENT\")\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#comment-end-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected COMMENT_END(cp: number): TokenizerState {\n while (true) {\n if (cp === GREATER_THAN_SIGN) {\n return \"DATA\"\n }\n if (cp === EXCLAMATION_MARK) {\n return \"COMMENT_END_BANG\"\n }\n\n if (cp === EOF) {\n this.reportParseError(\"eof-in-comment\")\n return \"DATA\"\n }\n\n this.appendTokenValue(HYPHEN_MINUS, \"HTMLComment\")\n\n if (cp !== HYPHEN_MINUS) {\n this.appendTokenValue(HYPHEN_MINUS, \"HTMLComment\")\n return this.reconsumeAs(\"COMMENT\")\n }\n cp = this.consumeNextCodePoint()\n }\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#comment-end-bang-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected COMMENT_END_BANG(cp: number): TokenizerState {\n if (cp === HYPHEN_MINUS) {\n this.appendTokenValue(HYPHEN_MINUS, \"HTMLComment\")\n this.appendTokenValue(EXCLAMATION_MARK, \"HTMLComment\")\n return \"COMMENT_END_DASH\"\n }\n\n if (cp === GREATER_THAN_SIGN) {\n this.reportParseError(\"incorrectly-closed-comment\")\n return \"DATA\"\n }\n if (cp === EOF) {\n this.reportParseError(\"eof-in-comment\")\n return \"DATA\"\n }\n\n this.appendTokenValue(HYPHEN_MINUS, \"HTMLComment\")\n this.appendTokenValue(EXCLAMATION_MARK, \"HTMLComment\")\n return this.reconsumeAs(\"COMMENT\")\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#cdata-section-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected CDATA_SECTION(cp: number): TokenizerState {\n while (true) {\n if (cp === RIGHT_SQUARE_BRACKET) {\n return \"CDATA_SECTION_BRACKET\"\n }\n\n if (cp === EOF) {\n this.reportParseError(\"eof-in-cdata\")\n return \"DATA\"\n }\n\n this.appendTokenValue(cp, \"HTMLCDataText\")\n cp = this.consumeNextCodePoint()\n }\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#cdata-section-bracket-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected CDATA_SECTION_BRACKET(cp: number): TokenizerState {\n if (cp === RIGHT_SQUARE_BRACKET) {\n return \"CDATA_SECTION_END\"\n }\n\n this.appendTokenValue(RIGHT_SQUARE_BRACKET, \"HTMLCDataText\")\n return this.reconsumeAs(\"CDATA_SECTION\")\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#cdata-section-end-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected CDATA_SECTION_END(cp: number): TokenizerState {\n while (true) {\n if (cp === GREATER_THAN_SIGN) {\n return \"DATA\"\n }\n if (cp !== RIGHT_SQUARE_BRACKET) {\n this.appendTokenValue(RIGHT_SQUARE_BRACKET, \"HTMLCDataText\")\n this.appendTokenValue(RIGHT_SQUARE_BRACKET, \"HTMLCDataText\")\n return this.reconsumeAs(\"CDATA_SECTION\")\n }\n\n this.appendTokenValue(RIGHT_SQUARE_BRACKET, \"HTMLCDataText\")\n cp = this.consumeNextCodePoint()\n }\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#character-reference-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected CHARACTER_REFERENCE(cp: number): TokenizerState {\n this.crStartOffset = this.offset - 1\n this.buffer = [AMPERSAND]\n\n if (isDigit(cp) || isLetter(cp)) {\n return this.reconsumeAs(\"NAMED_CHARACTER_REFERENCE\")\n }\n if (cp === NUMBER_SIGN) {\n this.buffer.push(cp)\n return \"NUMERIC_CHARACTER_REFERENCE\"\n }\n return this.reconsumeAs(\"CHARACTER_REFERENCE_END\")\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#named-character-reference-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected NAMED_CHARACTER_REFERENCE(cp: number): TokenizerState {\n for (const entitySet of entitySets) {\n const length = entitySet.length\n const entities = entitySet.entities\n const text = this.text.slice(this.offset, this.offset + length)\n const codepoints = entities[text]\n\n if (codepoints == null) {\n continue\n }\n\n const semi = text.endsWith(\";\")\n const next = this.text.codePointAt(this.offset + 1)\n\n this.offset += length - 1\n this.column += length - 1\n\n if (\n this.returnState.startsWith(\"ATTR\") &&\n !semi &&\n next != null &&\n (next === EQUALS_SIGN || isLetter(next) || isDigit(next))\n ) {\n for (const cp1 of text) {\n this.buffer.push(cp1.codePointAt(0) as number)\n }\n } else {\n if (!semi) {\n this.reportParseError(\n \"missing-semicolon-after-character-reference\",\n )\n }\n this.buffer = codepoints\n }\n\n return \"CHARACTER_REFERENCE_END\"\n }\n\n for (const cp0 of this.buffer) {\n this.appendTokenValue(cp0, null)\n }\n this.appendTokenValue(cp, null)\n\n return \"AMBIGUOUS_AMPERSAND\"\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#ambiguous-ampersand-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected AMBIGUOUS_AMPERSAND(cp: number): TokenizerState {\n while (isDigit(cp) || isLetter(cp)) {\n this.appendTokenValue(cp, null)\n cp = this.consumeNextCodePoint()\n }\n\n if (cp === SEMICOLON) {\n this.reportParseError(\"unknown-named-character-reference\")\n }\n return this.reconsumeAs(this.returnState)\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#numeric-character-reference-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected NUMERIC_CHARACTER_REFERENCE(cp: number): TokenizerState {\n this.crCode = 0\n\n if (cp === LATIN_SMALL_X || cp === LATIN_CAPITAL_X) {\n this.buffer.push(cp)\n return \"HEXADEMICAL_CHARACTER_REFERENCE_START\"\n }\n return this.reconsumeAs(\"DECIMAL_CHARACTER_REFERENCE_START\")\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#hexademical-character-reference-start-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected HEXADEMICAL_CHARACTER_REFERENCE_START(\n cp: number,\n ): TokenizerState {\n if (isHexDigit(cp)) {\n return this.reconsumeAs(\"HEXADEMICAL_CHARACTER_REFERENCE\")\n }\n\n this.reportParseError(\n \"absence-of-digits-in-numeric-character-reference\",\n )\n return this.reconsumeAs(\"CHARACTER_REFERENCE_END\")\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#decimal-character-reference-start-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected DECIMAL_CHARACTER_REFERENCE_START(cp: number): TokenizerState {\n if (isDigit(cp)) {\n return this.reconsumeAs(\"DECIMAL_CHARACTER_REFERENCE\")\n }\n\n this.reportParseError(\n \"absence-of-digits-in-numeric-character-reference\",\n )\n return this.reconsumeAs(\"CHARACTER_REFERENCE_END\")\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#hexademical-character-reference-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected HEXADEMICAL_CHARACTER_REFERENCE(cp: number): TokenizerState {\n while (true) {\n if (isDigit(cp)) {\n this.crCode = 16 * this.crCode + (cp - 0x30)\n } else if (isUpperHexDigit(cp)) {\n this.crCode = 16 * this.crCode + (cp - 0x37)\n } else if (isLowerHexDigit(cp)) {\n this.crCode = 16 * this.crCode + (cp - 0x57)\n } else {\n if (cp === SEMICOLON) {\n return \"NUMERIC_CHARACTER_REFERENCE_END\"\n }\n\n this.reportParseError(\n \"missing-semicolon-after-character-reference\",\n )\n return this.reconsumeAs(\"NUMERIC_CHARACTER_REFERENCE_END\")\n }\n\n cp = this.consumeNextCodePoint()\n }\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#decimal-character-reference-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected DECIMAL_CHARACTER_REFERENCE(cp: number): TokenizerState {\n while (true) {\n if (isDigit(cp)) {\n this.crCode = 10 * this.crCode + (cp - 0x30)\n } else {\n if (cp === SEMICOLON) {\n return \"NUMERIC_CHARACTER_REFERENCE_END\"\n }\n\n this.reportParseError(\n \"missing-semicolon-after-character-reference\",\n )\n return this.reconsumeAs(\"NUMERIC_CHARACTER_REFERENCE_END\")\n }\n\n cp = this.consumeNextCodePoint()\n }\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#numeric-character-reference-end-state\n * @param cp The current code point.\n * @returns The next state.\n */\n protected NUMERIC_CHARACTER_REFERENCE_END(_cp: number): TokenizerState {\n let code = this.crCode\n\n if (code === 0) {\n this.reportParseError(\"null-character-reference\")\n code = NULL_REPLACEMENT\n } else if (code > 0x10ffff) {\n this.reportParseError(\"character-reference-outside-unicode-range\")\n code = NULL_REPLACEMENT\n } else if (isSurrogate(code)) {\n this.reportParseError(\"surrogate-character-reference\")\n code = NULL_REPLACEMENT\n } else if (isNonCharacter(code)) {\n this.reportParseError(\"noncharacter-character-reference\")\n } else if (code === 0x0d || (isControl(code) && !isWhitespace(code))) {\n this.reportParseError(\"control-character-reference\")\n code = alternativeCR.get(code) || code\n }\n\n this.buffer = [code]\n return this.reconsumeAs(\"CHARACTER_REFERENCE_END\")\n }\n\n /**\n * https://html.spec.whatwg.org/multipage/parsing.html#flush-code-points-consumed-as-a-character-reference\n * @param cp The current code point.\n * @returns The next state.\n */\n protected CHARACTER_REFERENCE_END(_cp: number): TokenizerState {\n assert(this.currentToken != null)\n\n // The this.buffer.length is not new length since it includes surrogate pairs.\n // Calculate new length.\n const token = this.currentToken\n const len0 = token.value.length\n for (const cp1 of this.buffer) {\n this.appendTokenValue(cp1, null)\n }\n const newLength = token.value.length - len0\n\n // Make gaps in the difference of length.\n for (let i = this.crStartOffset + newLength; i < this.offset; ++i) {\n this.gaps.push(i)\n }\n\n return this.reconsumeAs(this.returnState)\n }\n\n /**\n * Original state.\n * Create `{{ `token.\n * @param cp The current code point.\n * @returns The next state.\n */\n protected V_EXPRESSION_START(cp: number): TokenizerState {\n if (cp === LEFT_CURLY_BRACKET) {\n this.startToken(\"VExpressionStart\")\n this.appendTokenValue(LEFT_CURLY_BRACKET, null)\n this.appendTokenValue(LEFT_CURLY_BRACKET, null)\n\n if (\n !(\n this.parserOptions.vueFeatures?.interpolationAsNonHTML ??\n true\n )\n ) {\n return this.returnState\n }\n\n const closeIndex = this.text.indexOf(\"}}\", this.offset + 1)\n if (closeIndex === -1) {\n this.reportParseError(\"x-missing-interpolation-end\")\n return this.returnState\n }\n this.vExpressionScriptState = {\n state: this.returnState,\n }\n return \"V_EXPRESSION_DATA\"\n }\n\n this.appendTokenValue(LEFT_CURLY_BRACKET, null)\n return this.reconsumeAs(this.returnState)\n }\n\n /**\n * Original state.\n * Parse in interpolation.\n * @see https://github.com/vuejs/vue-next/blob/3a6b1207fa39cb35eed5bae0b5fdcdb465926bca/packages/compiler-core/src/parse.ts#L752\n * @param cp The current code point.\n * @returns The next state.\n */\n protected V_EXPRESSION_DATA(cp: number): TokenizerState {\n this.clearStartTokenMark()\n const state = this.vExpressionScriptState!.state\n\n while (true) {\n const type = isWhitespace(cp)\n ? \"HTMLWhitespace\"\n : state === \"RCDATA\"\n ? \"HTMLRCDataText\"\n : state === \"RAWTEXT\"\n ? \"HTMLRawText\"\n : \"HTMLText\"\n if (this.currentToken != null && this.currentToken.type !== type) {\n this.endToken()\n return this.reconsumeAs(this.state)\n }\n if (this.currentToken == null) {\n this.startToken(type)\n }\n\n if (cp === AMPERSAND && state !== \"RAWTEXT\") {\n this.returnState = \"V_EXPRESSION_DATA\"\n return \"CHARACTER_REFERENCE\"\n }\n // if (cp === LESS_THAN_SIGN) {\n // this.setStartTokenMark()\n // return \"TAG_OPEN\"\n // }\n if (cp === RIGHT_CURLY_BRACKET) {\n this.setStartTokenMark()\n this.returnState = \"V_EXPRESSION_DATA\"\n return \"V_EXPRESSION_END\"\n }\n // Already checked\n /* istanbul ignore next */\n if (cp === EOF) {\n this.reportParseError(\"x-missing-interpolation-end\")\n return \"DATA\"\n }\n\n if (cp === NULL) {\n this.reportParseError(\"unexpected-null-character\")\n }\n this.appendTokenValue(cp, type)\n\n cp = this.consumeNextCodePoint()\n }\n }\n /**\n * Create `}} `token.\n * @param cp The current code point.\n * @returns The next state.\n */\n protected V_EXPRESSION_END(cp: number): TokenizerState {\n if (cp === RIGHT_CURLY_BRACKET) {\n this.startToken(\"VExpressionEnd\")\n this.appendTokenValue(RIGHT_CURLY_BRACKET, null)\n this.appendTokenValue(RIGHT_CURLY_BRACKET, null)\n if (this.vExpressionScriptState) {\n const state = this.vExpressionScriptState.state\n this.vExpressionScriptState = null\n return state\n }\n return this.returnState\n }\n\n this.appendTokenValue(RIGHT_CURLY_BRACKET, null)\n return this.reconsumeAs(this.returnState)\n }\n}\n\n/*eslint-enable no-param-reassign */\n","/**\n * Creates a memoized version of the provided function. The memoized function caches\n * results based on the argument it receives, so if the same argument is passed again,\n * it returns the cached result instead of recomputing it.\n *\n * This function works with functions that take zero or just one argument. If your function\n * originally takes multiple arguments, you should refactor it to take a single object or array\n * that combines those arguments.\n *\n * If the argument is not primitive (e.g., arrays or objects), provide a\n * `getCacheKey` function to generate a unique cache key for proper caching.\n *\n * @template F - The type of the function to be memoized.\n * @param {F} fn - The function to be memoized. It should accept a single argument and return a value.\n * @param {MemoizeOptions<Parameters<F>[0], ReturnType<F>>} [options={}] - Optional configuration for the memoization.\n * @param {MemoizeCache<any, V>} [options.cache] - The cache object used to store results. Defaults to a new `Map`.\n * @param {(args: A) => unknown} [options.getCacheKey] - An optional function to generate a unique cache key for each argument.\n *\n * @returns The memoized function with an additional `cache` property that exposes the internal cache.\n *\n * @example\n * // Example using the default cache\n * const add = (x: number) => x + 10;\n * const memoizedAdd = memoize(add);\n *\n * console.log(memoizedAdd(5)); // 15\n * console.log(memoizedAdd(5)); // 15 (cached result)\n * console.log(memoizedAdd.cache.size); // 1\n *\n * @example\n * // Example using a custom resolver\n * const sum = (arr: number[]) => arr.reduce((x, y) => x + y, 0);\n * const memoizedSum = memoize(sum, { getCacheKey: (arr: number[]) => arr.join(',') });\n * console.log(memoizedSum([1, 2])); // 3\n * console.log(memoizedSum([1, 2])); // 3 (cached result)\n * console.log(memoizedSum.cache.size); // 1\n *\n * @example\n * // Example using a custom cache implementation\n * class CustomCache<K, T> implements MemoizeCache<K, T> {\n * private cache = new Map<K, T>();\n *\n * set(key: K, value: T): void {\n * this.cache.set(key, value);\n * }\n *\n * get(key: K): T | undefined {\n * return this.cache.get(key);\n * }\n *\n * has(key: K): boolean {\n * return this.cache.has(key);\n * }\n *\n * delete(key: K): boolean {\n * return this.cache.delete(key);\n * }\n *\n * clear(): void {\n * this.cache.clear();\n * }\n *\n * get size(): number {\n * return this.cache.size;\n * }\n * }\n * const customCache = new CustomCache<string, number>();\n * const memoizedSumWithCustomCache = memoize(sum, { cache: customCache });\n * console.log(memoizedSumWithCustomCache([1, 2])); // 3\n * console.log(memoizedSumWithCustomCache([1, 2])); // 3 (cached result)\n * console.log(memoizedAddWithCustomCache.cache.size); // 1\n *\n * MIT © Viva Republica, Inc. | https://es-toolkit.dev/\n *\n * The implementation is copied from es-toolkit package:\n * https://github.com/toss/es-toolkit/blob/16709839f131269b84cdd96e9645df52648ccedf/src/function/memoize.ts\n */\nexport function memoize<F extends (...args: any) => any>(\n fn: F,\n options: {\n cache?: MemoizeCache<any, ReturnType<F>>\n getCacheKey?: (args: Parameters<F>[0]) => unknown\n } = {},\n): F & { cache: MemoizeCache<any, ReturnType<F>> } {\n const { cache = new Map<unknown, ReturnType<F>>(), getCacheKey } = options\n\n const memoizedFn = function (\n this: unknown,\n arg: Parameters<F>[0],\n ): ReturnType<F> {\n const key = getCacheKey ? getCacheKey(arg) : arg\n\n if (cache.has(key)) {\n return cache.get(key)!\n }\n\n const result = fn.call(this, arg)\n\n cache.set(key, result)\n\n return result\n }\n\n memoizedFn.cache = cache\n\n return memoizedFn as F & { cache: MemoizeCache<any, ReturnType<F>> }\n}\n\n/**\n * Represents a cache for memoization, allowing storage and retrieval of computed values.\n *\n * @template K - The type of keys used to store values in the cache.\n * @template V - The type of values stored in the cache.\n */\ninterface MemoizeCache<K, V> {\n /**\n * Stores a value in the cache with the specified key.\n *\n * @param key - The key to associate with the value.\n * @param value - The value to store in the cache.\n */\n set(key: K, value: V): void\n\n /**\n * Retrieves a value from the cache by its key.\n *\n * @param key - The key of the value to retrieve.\n * @returns The value associated with the key, or undefined if the key does not exist.\n */\n get(key: K): V | undefined\n\n /**\n * Checks if a value exists in the cache for the specified key.\n *\n * @param key - The key to check for existence in the cache.\n * @returns True if the cache contains the key, false otherwise.\n */\n has(key: K): boolean\n\n /**\n * Deletes a value from the cache by its key.\n *\n * @param key - The key of the value to delete.\n * @returns True if the value was successfully deleted, false otherwise.\n */\n delete(key: K): boolean | void\n\n /**\n * Clears all values from the cache.\n */\n clear(): void\n\n /**\n * The number of entries in the cache.\n */\n size: number\n}\n","/**\n * This file is copied from `eslint/lib/util/node-event-generator.js`\n */\nimport type EventEmitter from \"events\"\nimport type { ESQueryOptions, Selector } from \"esquery\"\nimport esquery from \"esquery\"\nimport { memoize } from \"../utils/memoize\"\nimport { union, intersection } from \"../utils/utils\"\nimport type { Node } from \"../ast/index\"\n\ninterface NodeSelector {\n rawSelector: string\n isExit: boolean\n parsedSelector: Selector\n listenerTypes: string[] | null\n attributeCount: number\n identifierCount: number\n}\n\n/**\n * Gets the possible types of a selector\n * @param parsedSelector An object (from esquery) describing the matching behavior of the selector\n * @returns The node types that could possibly trigger this selector, or `null` if all node types could trigger it\n */\nfunction getPossibleTypes(parsedSelector: Selector): string[] | null {\n switch (parsedSelector.type) {\n case \"identifier\":\n return [parsedSelector.value]\n\n case \"matches\": {\n const typesForComponents =\n parsedSelector.selectors.map(getPossibleTypes)\n\n if (typesForComponents.every(Boolean)) {\n return union(...(typesForComponents as string[][]))\n }\n return null\n }\n\n case \"compound\": {\n const typesForComponents = parsedSelector.selectors\n .map(getPossibleTypes)\n .filter(Boolean) as string[][]\n\n // If all of the components could match any type, then the compound could also match any type.\n if (!typesForComponents.length) {\n return null\n }\n\n // If at least one of the components could only match a particular type, the compound could only match\n // the intersection of those types.\n return intersection(...typesForComponents)\n }\n\n case \"child\":\n case \"descendant\":\n case \"sibling\":\n case \"adjacent\":\n return getPossibleTypes(parsedSelector.right)\n\n default:\n return null\n }\n}\n\n/**\n * Counts the number of class, pseudo-class, and attribute queries in this selector\n * @param parsedSelector An object (from esquery) describing the selector's matching behavior\n * @returns The number of class, pseudo-class, and attribute queries in this selector\n */\nfunction countClassAttributes(parsedSelector: Selector): number {\n switch (parsedSelector.type) {\n case \"child\":\n case \"descendant\":\n case \"sibling\":\n case \"adjacent\":\n return (\n countClassAttributes(parsedSelector.left) +\n countClassAttributes(parsedSelector.right)\n )\n\n case \"compound\":\n case \"not\":\n case \"matches\":\n return parsedSelector.selectors.reduce(\n (sum, childSelector) =>\n sum + countClassAttributes(childSelector),\n 0,\n )\n\n case \"attribute\":\n case \"field\":\n case \"nth-child\":\n case \"nth-last-child\":\n return 1\n\n default:\n return 0\n }\n}\n\n/**\n * Counts the number of identifier queries in this selector\n * @param parsedSelector An object (from esquery) describing the selector's matching behavior\n * @returns The number of identifier queries\n */\nfunction countIdentifiers(parsedSelector: Selector): number {\n switch (parsedSelector.type) {\n case \"child\":\n case \"descendant\":\n case \"sibling\":\n case \"adjacent\":\n return (\n countIdentifiers(parsedSelector.left) +\n countIdentifiers(parsedSelector.right)\n )\n\n case \"compound\":\n case \"not\":\n case \"matches\":\n return parsedSelector.selectors.reduce(\n (sum, childSelector) => sum + countIdentifiers(childSelector),\n 0,\n )\n\n case \"identifier\":\n return 1\n\n default:\n return 0\n }\n}\n\n/**\n * Compares the specificity of two selector objects, with CSS-like rules.\n * @param selectorA An AST selector descriptor\n * @param selectorB Another AST selector descriptor\n * @returns\n * a value less than 0 if selectorA is less specific than selectorB\n * a value greater than 0 if selectorA is more specific than selectorB\n * a value less than 0 if selectorA and selectorB have the same specificity, and selectorA <= selectorB alphabetically\n * a value greater than 0 if selectorA and selectorB have the same specificity, and selectorA > selectorB alphabetically\n */\nfunction compareSpecificity(\n selectorA: NodeSelector,\n selectorB: NodeSelector,\n): number {\n return (\n selectorA.attributeCount - selectorB.attributeCount ||\n selectorA.identifierCount - selectorB.identifierCount ||\n (selectorA.rawSelector <= selectorB.rawSelector ? -1 : 1)\n )\n}\n\n/**\n * Parses a raw selector string, and throws a useful error if parsing fails.\n * @param rawSelector A raw AST selector\n * @returns An object (from esquery) describing the matching behavior of this selector\n * @throws An error if the selector is invalid\n */\nfunction tryParseSelector(rawSelector: string): Selector {\n try {\n return esquery.parse(rawSelector.replace(/:exit$/u, \"\"))\n } catch (err: any) {\n if (typeof err.offset === \"number\") {\n throw new Error(\n `Syntax error in selector \"${rawSelector}\" at position ${err.offset}: ${err.message}`,\n )\n }\n throw err\n }\n}\n\n/**\n * Parses a raw selector string, and returns the parsed selector along with specificity and type information.\n * @param {string} rawSelector A raw AST selector\n * @returns {ASTSelector} A selector descriptor\n */\nconst parseSelector = memoize<(rawSelector: string) => NodeSelector>(\n (rawSelector) => {\n const parsedSelector = tryParseSelector(rawSelector)\n\n return {\n rawSelector,\n isExit: rawSelector.endsWith(\":exit\"),\n parsedSelector,\n listenerTypes: getPossibleTypes(parsedSelector),\n attributeCount: countClassAttributes(parsedSelector),\n identifierCount: countIdentifiers(parsedSelector),\n }\n },\n)\n\n//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n\n/**\n * The event generator for AST nodes.\n * This implements below interface.\n *\n * ```ts\n * interface EventGenerator {\n * emitter: EventEmitter\n * enterNode(node: ASTNode): void\n * leaveNode(node: ASTNode): void\n * }\n * ```\n */\nexport default class NodeEventGenerator {\n public emitter: EventEmitter\n public esqueryOptions: ESQueryOptions\n\n private currentAncestry: Node[]\n private enterSelectorsByNodeType: Map<string, NodeSelector[]>\n private exitSelectorsByNodeType: Map<string, NodeSelector[]>\n private anyTypeEnterSelectors: NodeSelector[]\n private anyTypeExitSelectors: NodeSelector[]\n\n /**\n * @param emitter - An event emitter which is the destination of events. This emitter must already\n * have registered listeners for all of the events that it needs to listen for.\n */\n public constructor(emitter: EventEmitter, esqueryOptions: ESQueryOptions) {\n this.emitter = emitter\n this.esqueryOptions = esqueryOptions\n this.currentAncestry = []\n this.enterSelectorsByNodeType = new Map()\n this.exitSelectorsByNodeType = new Map()\n this.anyTypeEnterSelectors = []\n this.anyTypeExitSelectors = []\n\n const eventNames =\n typeof emitter.eventNames === \"function\"\n ? // Use the built-in eventNames() function if available (Node 6+)\n emitter.eventNames()\n : /*\n * Otherwise, use the private _events property.\n * Using a private property isn't ideal here, but this seems to\n * be the best way to get a list of event names without overriding\n * addEventListener, which would hurt performance. This property\n * is widely used and unlikely to be removed in a future version\n * (see https://github.com/nodejs/node/issues/1817). Also, future\n * node versions will have eventNames() anyway.\n */\n Object.keys((emitter as any)._events)\n\n for (const rawSelector of eventNames) {\n if (typeof rawSelector === \"symbol\") {\n continue\n }\n const selector = parseSelector(rawSelector)\n\n if (selector.listenerTypes) {\n for (const nodeType of selector.listenerTypes) {\n const typeMap = selector.isExit\n ? this.exitSelectorsByNodeType\n : this.enterSelectorsByNodeType\n\n let selectors = typeMap.get(nodeType)\n if (selectors == null) {\n typeMap.set(nodeType, (selectors = []))\n }\n selectors.push(selector)\n }\n } else {\n ;(selector.isExit\n ? this.anyTypeExitSelectors\n : this.anyTypeEnterSelectors\n ).push(selector)\n }\n }\n\n this.anyTypeEnterSelectors.sort(compareSpecificity)\n this.anyTypeExitSelectors.sort(compareSpecificity)\n for (const selectorList of this.enterSelectorsByNodeType.values()) {\n selectorList.sort(compareSpecificity)\n }\n for (const selectorList of this.exitSelectorsByNodeType.values()) {\n selectorList.sort(compareSpecificity)\n }\n }\n\n /**\n * Checks a selector against a node, and emits it if it matches\n * @param node The node to check\n * @param selector An AST selector descriptor\n */\n private applySelector(node: Node, selector: NodeSelector): void {\n if (\n esquery.matches(\n node,\n selector.parsedSelector,\n this.currentAncestry,\n this.esqueryOptions,\n )\n ) {\n this.emitter.emit(selector.rawSelector, node)\n }\n }\n\n /**\n * Applies all appropriate selectors to a node, in specificity order\n * @param node The node to check\n * @param isExit `false` if the node is currently being entered, `true` if it's currently being exited\n */\n private applySelectors(node: Node, isExit: boolean): void {\n const selectorsByNodeType =\n (isExit\n ? this.exitSelectorsByNodeType\n : this.enterSelectorsByNodeType\n ).get(node.type) || []\n const anyTypeSelectors = isExit\n ? this.anyTypeExitSelectors\n : this.anyTypeEnterSelectors\n\n // selectorsByNodeType and anyTypeSelectors were already sorted by specificity in the constructor.\n // Iterate through each of them, applying selectors in the right order.\n let selectorsByTypeIndex = 0\n let anyTypeSelectorsIndex = 0\n\n while (\n selectorsByTypeIndex < selectorsByNodeType.length ||\n anyTypeSelectorsIndex < anyTypeSelectors.length\n ) {\n if (\n selectorsByTypeIndex >= selectorsByNodeType.length ||\n (anyTypeSelectorsIndex < anyTypeSelectors.length &&\n compareSpecificity(\n anyTypeSelectors[anyTypeSelectorsIndex],\n selectorsByNodeType[selectorsByTypeIndex],\n ) < 0)\n ) {\n this.applySelector(\n node,\n anyTypeSelectors[anyTypeSelectorsIndex++],\n )\n } else {\n this.applySelector(\n node,\n selectorsByNodeType[selectorsByTypeIndex++],\n )\n }\n }\n }\n\n /**\n * Emits an event of entering AST node.\n * @param node - A node which was entered.\n */\n public enterNode(node: Node): void {\n if (node.parent) {\n this.currentAncestry.unshift(node.parent)\n }\n this.applySelectors(node, false)\n }\n\n /**\n * Emits an event of leaving AST node.\n * @param node - A node which was left.\n */\n public leaveNode(node: Node): void {\n this.applySelectors(node, true)\n this.currentAncestry.shift()\n }\n}\n","/**\n * @fileoverview Define utilify functions for token store.\n * @author Toru Nagashima\n */\nimport { sortedIndexBy } from \"../../utils/utils\"\nimport type { HasLocation } from \"../../ast/index\"\n\n/**\n * Gets `token.range[0]` from the given token.\n *\n * @param token - The token to get.\n * @returns The start location.\n * @private\n */\nfunction getStartLocation(token: { range: number[] }): number {\n return token.range[0]\n}\n\n/**\n * Binary-searches the index of the first token which is after the given location.\n * If it was not found, this returns `tokens.length`.\n *\n * @param tokens - It searches the token in this list.\n * @param location - The location to search.\n * @returns The found index or `tokens.length`.\n */\nexport function search(tokens: HasLocation[], location: number): number {\n return sortedIndexBy(\n tokens as { range: number[] }[],\n { range: [location] },\n getStartLocation,\n )\n}\n\n/**\n * Gets the index of the `startLoc` in `tokens`.\n * `startLoc` can be the value of `node.range[1]`, so this checks about `startLoc - 1` as well.\n *\n * @param tokens - The tokens to find an index.\n * @param indexMap - The map from locations to indices.\n * @param startLoc - The location to get an index.\n * @returns The index.\n */\nexport function getFirstIndex(\n tokens: HasLocation[],\n indexMap: { [key: number]: number },\n startLoc: number,\n): number {\n if (startLoc in indexMap) {\n return indexMap[startLoc]\n }\n if (startLoc - 1 in indexMap) {\n const index = indexMap[startLoc - 1]\n const token = index >= 0 && index < tokens.length ? tokens[index] : null\n\n // For the map of \"comment's location -> token's index\", it points the next token of a comment.\n // In that case, +1 is unnecessary.\n if (token && token.range[0] >= startLoc) {\n return index\n }\n return index + 1\n }\n return 0\n}\n\n/**\n * Gets the index of the `endLoc` in `tokens`.\n * The information of end locations are recorded at `endLoc - 1` in `indexMap`, so this checks about `endLoc - 1` as well.\n *\n * @param tokens - The tokens to find an index.\n * @param indexMap - The map from locations to indices.\n * @param endLoc - The location to get an index.\n * @returns The index.\n */\nexport function getLastIndex(\n tokens: HasLocation[],\n indexMap: { [key: number]: number },\n endLoc: number,\n): number {\n if (endLoc in indexMap) {\n return indexMap[endLoc] - 1\n }\n if (endLoc - 1 in indexMap) {\n const index = indexMap[endLoc - 1]\n const token = index >= 0 && index < tokens.length ? tokens[index] : null\n\n // For the map of \"comment's location -> token's index\", it points the next token of a comment.\n // In that case, -1 is necessary.\n if (token && token.range[1] > endLoc) {\n return index - 1\n }\n return index\n }\n return tokens.length - 1\n}\n","/**\n * @fileoverview Define the abstract class about cursors which iterate tokens.\n * @author Toru Nagashima\n */\nimport type { Token } from \"../../../ast/index\"\n\n/**\n * The abstract class about cursors which iterate tokens.\n *\n * This class has 2 abstract methods.\n *\n * - `current: Token | Comment | null` ... The current token.\n * - `moveNext(): boolean` ... Moves this cursor to the next token. If the next token didn't exist, it returns `false`.\n *\n * This is similar to ES2015 Iterators.\n * However, Iterators were slow (at 2017-01), so I created this class as similar to C# IEnumerable.\n *\n * There are the following known sub classes.\n *\n * - ForwardTokenCursor .......... The cursor which iterates tokens only.\n * - BackwardTokenCursor ......... The cursor which iterates tokens only in reverse.\n * - ForwardTokenCommentCursor ... The cursor which iterates tokens and comments.\n * - BackwardTokenCommentCursor .. The cursor which iterates tokens and comments in reverse.\n * - DecorativeCursor\n * - FilterCursor ............ The cursor which ignores the specified tokens.\n * - SkipCursor .............. The cursor which ignores the first few tokens.\n * - LimitCursor ............. The cursor which limits the count of tokens.\n *\n */\nexport default abstract class Cursor {\n public current: Token | null\n\n /**\n * Initializes this cursor.\n */\n public constructor() {\n this.current = null\n }\n\n /**\n * Gets the first token.\n * This consumes this cursor.\n * @returns The first token or null.\n */\n public getOneToken(): Token | null {\n return this.moveNext() ? this.current : null\n }\n\n /**\n * Gets the first tokens.\n * This consumes this cursor.\n * @returns All tokens.\n */\n public getAllTokens(): Token[] {\n const tokens: Token[] = []\n\n while (this.moveNext()) {\n tokens.push(this.current as Token)\n }\n\n return tokens\n }\n\n /**\n * Moves this cursor to the next token.\n * @returns {boolean} `true` if the next token exists.\n * @abstract\n */\n public abstract moveNext(): boolean\n}\n","/**\n * @fileoverview Define the cursor which iterates tokens and comments in reverse.\n * @author Toru Nagashima\n */\nimport type { Token } from \"../../../ast/index\"\nimport { getLastIndex, search } from \"../utils\"\nimport Cursor from \"./cursor\"\n\n/**\n * The cursor which iterates tokens and comments in reverse.\n */\nexport default class BackwardTokenCommentCursor extends Cursor {\n private tokens: Token[]\n private comments: Token[]\n private tokenIndex: number\n private commentIndex: number\n private border: number\n\n /**\n * Initializes this cursor.\n * @param tokens - The array of tokens.\n * @param comments - The array of comments.\n * @param indexMap - The map from locations to indices in `tokens`.\n * @param startLoc - The start location of the iteration range.\n * @param endLoc - The end location of the iteration range.\n */\n public constructor(\n tokens: Token[],\n comments: Token[],\n indexMap: { [key: number]: number },\n startLoc: number,\n endLoc: number,\n ) {\n super()\n this.tokens = tokens\n this.comments = comments\n this.tokenIndex = getLastIndex(tokens, indexMap, endLoc)\n this.commentIndex = search(comments, endLoc) - 1\n this.border = startLoc\n }\n\n /** @inheritdoc */\n public moveNext(): boolean {\n const token = this.tokenIndex >= 0 ? this.tokens[this.tokenIndex] : null\n const comment =\n this.commentIndex >= 0 ? this.comments[this.commentIndex] : null\n\n if (token && (!comment || token.range[1] > comment.range[1])) {\n this.current = token\n this.tokenIndex -= 1\n } else if (comment) {\n this.current = comment\n this.commentIndex -= 1\n } else {\n this.current = null\n }\n\n return (\n this.current != null &&\n (this.border === -1 || this.current.range[0] >= this.border)\n )\n }\n}\n","/**\n * @fileoverview Define the cursor which iterates tokens only in reverse.\n * @author Toru Nagashima\n */\nimport type { Token } from \"../../../ast/index\"\nimport { getFirstIndex, getLastIndex } from \"../utils\"\nimport Cursor from \"./cursor\"\n\n/**\n * The cursor which iterates tokens only in reverse.\n */\nexport default class BackwardTokenCursor extends Cursor {\n private tokens: Token[]\n private index: number\n private indexEnd: number\n\n /**\n * Initializes this cursor.\n * @param tokens - The array of tokens.\n * @param comments - The array of comments.\n * @param indexMap - The map from locations to indices in `tokens`.\n * @param startLoc - The start location of the iteration range.\n * @param endLoc - The end location of the iteration range.\n */\n public constructor(\n tokens: Token[],\n _comments: Token[],\n indexMap: { [key: number]: number },\n startLoc: number,\n endLoc: number,\n ) {\n super()\n this.tokens = tokens\n this.index = getLastIndex(tokens, indexMap, endLoc)\n this.indexEnd = getFirstIndex(tokens, indexMap, startLoc)\n }\n\n /** @inheritdoc */\n public moveNext(): boolean {\n if (this.index >= this.indexEnd) {\n this.current = this.tokens[this.index]\n this.index -= 1\n return true\n }\n return false\n }\n\n //\n // Shorthand for performance.\n //\n\n /** @inheritdoc */\n public getOneToken(): Token | null {\n return this.index >= this.indexEnd ? this.tokens[this.index] : null\n }\n}\n","/**\n * @fileoverview Define the abstract class about cursors which manipulate another cursor.\n * @author Toru Nagashima\n */\nimport Cursor from \"./cursor\"\n\n//------------------------------------------------------------------------------\n// Exports\n//------------------------------------------------------------------------------\n\n/**\n * The abstract class about cursors which manipulate another cursor.\n */\nexport default class DecorativeCursor extends Cursor {\n protected cursor: Cursor\n\n /**\n * Initializes this cursor.\n * @param cursor - The cursor to be decorated.\n */\n public constructor(cursor: Cursor) {\n super()\n this.cursor = cursor\n }\n\n /** @inheritdoc */\n public moveNext(): boolean {\n const retv = this.cursor.moveNext()\n\n this.current = this.cursor.current\n\n return retv\n }\n}\n","/**\n * @fileoverview Define the cursor which ignores specified tokens.\n * @author Toru Nagashima\n */\nimport type { Token } from \"../../../ast/index\"\nimport type Cursor from \"./cursor\"\nimport DecorativeCursor from \"./decorative-cursor\"\n\n/**\n * The decorative cursor which ignores specified tokens.\n */\nexport default class FilterCursor extends DecorativeCursor {\n private predicate: (token: Token) => boolean\n\n /**\n * Initializes this cursor.\n * @param cursor - The cursor to be decorated.\n * @param predicate - The predicate function to decide tokens this cursor iterates.\n */\n public constructor(cursor: Cursor, predicate: (token: Token) => boolean) {\n super(cursor)\n this.predicate = predicate\n }\n\n /** @inheritdoc */\n public moveNext(): boolean {\n const predicate = this.predicate\n\n while (super.moveNext()) {\n if (predicate(this.current as Token)) {\n return true\n }\n }\n return false\n }\n}\n","/**\n * @fileoverview Define the cursor which iterates tokens and comments.\n * @author Toru Nagashima\n */\nimport type { Token } from \"../../../ast/index\"\nimport { getFirstIndex, search } from \"../utils\"\nimport Cursor from \"./cursor\"\n\n/**\n * The cursor which iterates tokens and comments.\n */\nexport default class ForwardTokenCommentCursor extends Cursor {\n private tokens: Token[]\n private comments: Token[]\n private tokenIndex: number\n private commentIndex: number\n private border: number\n\n /**\n * Initializes this cursor.\n * @param tokens - The array of tokens.\n * @param comments - The array of comments.\n * @param indexMap - The map from locations to indices in `tokens`.\n * @param startLoc - The start location of the iteration range.\n * @param endLoc - The end location of the iteration range.\n */\n public constructor(\n tokens: Token[],\n comments: Token[],\n indexMap: { [key: number]: number },\n startLoc: number,\n endLoc: number,\n ) {\n super()\n this.tokens = tokens\n this.comments = comments\n this.tokenIndex = getFirstIndex(tokens, indexMap, startLoc)\n this.commentIndex = search(comments, startLoc)\n this.border = endLoc\n }\n\n /** @inheritdoc */\n public moveNext(): boolean {\n const token =\n this.tokenIndex < this.tokens.length\n ? this.tokens[this.tokenIndex]\n : null\n const comment =\n this.commentIndex < this.comments.length\n ? this.comments[this.commentIndex]\n : null\n\n if (token && (!comment || token.range[0] < comment.range[0])) {\n this.current = token\n this.tokenIndex += 1\n } else if (comment) {\n this.current = comment\n this.commentIndex += 1\n } else {\n this.current = null\n }\n\n return (\n this.current != null &&\n (this.border === -1 || this.current.range[1] <= this.border)\n )\n }\n}\n","/**\n * @fileoverview Define the cursor which iterates tokens only.\n * @author Toru Nagashima\n */\nimport type { Token } from \"../../../ast/index\"\nimport { getFirstIndex, getLastIndex } from \"../utils\"\nimport Cursor from \"./cursor\"\n\n/**\n * The cursor which iterates tokens only.\n */\nexport default class ForwardTokenCursor extends Cursor {\n private tokens: Token[]\n protected index: number\n protected indexEnd: number\n\n /**\n * Initializes this cursor.\n * @param tokens - The array of tokens.\n * @param comments - The array of comments.\n * @param indexMap - The map from locations to indices in `tokens`.\n * @param startLoc - The start location of the iteration range.\n * @param endLoc - The end location of the iteration range.\n */\n public constructor(\n tokens: Token[],\n _comments: Token[],\n indexMap: { [key: number]: number },\n startLoc: number,\n endLoc: number,\n ) {\n super()\n this.tokens = tokens\n this.index = getFirstIndex(tokens, indexMap, startLoc)\n this.indexEnd = getLastIndex(tokens, indexMap, endLoc)\n }\n\n /** @inheritdoc */\n public moveNext(): boolean {\n if (this.index <= this.indexEnd) {\n this.current = this.tokens[this.index]\n this.index += 1\n return true\n }\n return false\n }\n\n //\n // Shorthand for performance.\n //\n\n /** @inheritdoc */\n public getOneToken(): Token | null {\n return this.index <= this.indexEnd ? this.tokens[this.index] : null\n }\n\n /** @inheritdoc */\n public getAllTokens(): Token[] {\n return this.tokens.slice(this.index, this.indexEnd + 1)\n }\n}\n","/**\n * @fileoverview Define the cursor which limits the number of tokens.\n * @author Toru Nagashima\n */\nimport type Cursor from \"./cursor\"\nimport DecorativeCursor from \"./decorative-cursor\"\n\n/**\n * The decorative cursor which limits the number of tokens.\n */\nexport default class LimitCursor extends DecorativeCursor {\n private count: number\n\n /**\n * Initializes this cursor.\n * @param cursor - The cursor to be decorated.\n * @param count - The count of tokens this cursor iterates.\n */\n public constructor(cursor: Cursor, count: number) {\n super(cursor)\n this.count = count\n }\n\n /** @inheritdoc */\n public moveNext(): boolean {\n if (this.count > 0) {\n this.count -= 1\n return super.moveNext()\n }\n return false\n }\n}\n","/**\n * @fileoverview Define the cursor which ignores the first few tokens.\n * @author Toru Nagashima\n */\nimport type Cursor from \"./cursor\"\nimport DecorativeCursor from \"./decorative-cursor\"\n\n/**\n * The decorative cursor which ignores the first few tokens.\n */\nexport default class SkipCursor extends DecorativeCursor {\n private count: number\n\n /**\n * Initializes this cursor.\n * @param cursor - The cursor to be decorated.\n * @param count - The count of tokens this cursor skips.\n */\n public constructor(cursor: Cursor, count: number) {\n super(cursor)\n this.count = count\n }\n\n /** @inheritdoc */\n public moveNext(): boolean {\n while (this.count > 0) {\n this.count -= 1\n if (!super.moveNext()) {\n return false\n }\n }\n return super.moveNext()\n }\n}\n","/**\n * @fileoverview Define 2 token factories; forward and backward.\n * @author Toru Nagashima\n */\nimport type { Token } from \"../../../ast/index\"\nimport BackwardTokenCommentCursor from \"./backward-token-comment-cursor\"\nimport BackwardTokenCursor from \"./backward-token-cursor\"\nimport type Cursor from \"./cursor\"\nimport FilterCursor from \"./filter-cursor\"\nimport ForwardTokenCommentCursor from \"./forward-token-comment-cursor\"\nimport ForwardTokenCursor from \"./forward-token-cursor\"\nimport LimitCursor from \"./limit-cursor\"\nimport SkipCursor from \"./skip-cursor\"\n\n/**\n * The cursor factory.\n * @private\n */\nexport class CursorFactory {\n private TokenCursor: typeof BackwardTokenCursor | typeof ForwardTokenCursor\n private TokenCommentCursor:\n | typeof BackwardTokenCommentCursor\n | typeof ForwardTokenCommentCursor\n\n /**\n * Initializes this cursor.\n * @param TokenCursor - The class of the cursor which iterates tokens only.\n * @param TokenCommentCursor - The class of the cursor which iterates the mix of tokens and comments.\n */\n public constructor(\n TokenCursor: typeof BackwardTokenCursor | typeof ForwardTokenCursor,\n TokenCommentCursor:\n | typeof BackwardTokenCommentCursor\n | typeof ForwardTokenCommentCursor,\n ) {\n this.TokenCursor = TokenCursor\n this.TokenCommentCursor = TokenCommentCursor\n }\n\n /**\n * Creates a base cursor instance that can be decorated by createCursor.\n *\n * @param tokens - The array of tokens.\n * @param comments - The array of comments.\n * @param indexMap - The map from locations to indices in `tokens`.\n * @param startLoc - The start location of the iteration range.\n * @param endLoc - The end location of the iteration range.\n * @param includeComments - The flag to iterate comments as well.\n * @returns The created base cursor.\n */\n public createBaseCursor(\n tokens: Token[],\n comments: Token[],\n indexMap: { [key: number]: number },\n startLoc: number,\n endLoc: number,\n includeComments: boolean,\n ): Cursor {\n const TokenCursor = includeComments\n ? this.TokenCommentCursor\n : this.TokenCursor\n return new TokenCursor(tokens, comments, indexMap, startLoc, endLoc)\n }\n\n /**\n * Creates a cursor that iterates tokens with normalized options.\n *\n * @param tokens - The array of tokens.\n * @param comments - The array of comments.\n * @param indexMap - The map from locations to indices in `tokens`.\n * @param startLoc - The start location of the iteration range.\n * @param endLoc - The end location of the iteration range.\n * @param includeComments - The flag to iterate comments as well.\n * @param filter - The predicate function to choose tokens.\n * @param skip - The count of tokens the cursor skips.\n * @param count - The maximum count of tokens the cursor iterates. Zero is no iteration for backward compatibility.\n * @returns The created cursor.\n */\n // eslint-disable-next-line max-params\n public createCursor(\n tokens: Token[],\n comments: Token[],\n indexMap: { [key: number]: number },\n startLoc: number,\n endLoc: number,\n includeComments: boolean,\n filter: ((token: Token) => boolean) | null,\n skip: number,\n count: number,\n ): Cursor {\n let cursor = this.createBaseCursor(\n tokens,\n comments,\n indexMap,\n startLoc,\n endLoc,\n includeComments,\n )\n\n if (filter) {\n cursor = new FilterCursor(cursor, filter)\n }\n if (skip >= 1) {\n cursor = new SkipCursor(cursor, skip)\n }\n if (count >= 0) {\n cursor = new LimitCursor(cursor, count)\n }\n\n return cursor\n }\n}\n\nexport const forward = new CursorFactory(\n ForwardTokenCursor,\n ForwardTokenCommentCursor,\n)\nexport const backward = new CursorFactory(\n BackwardTokenCursor,\n BackwardTokenCommentCursor,\n)\n","/**\n * @fileoverview Define the cursor which iterates tokens only, with inflated range.\n * @author Toru Nagashima\n */\nimport type { Token } from \"../../../ast/index\"\nimport ForwardTokenCursor from \"./forward-token-cursor\"\n\n/**\n * The cursor which iterates tokens only, with inflated range.\n * This is for the backward compatibility of padding options.\n */\nexport default class PaddedTokenCursor extends ForwardTokenCursor {\n /**\n * Initializes this cursor.\n * @param tokens - The array of tokens.\n * @param comments - The array of comments.\n * @param indexMap - The map from locations to indices in `tokens`.\n * @param startLoc - The start location of the iteration range.\n * @param endLoc - The end location of the iteration range.\n * @param beforeCount - The number of tokens this cursor iterates before start.\n * @param afterCount - The number of tokens this cursor iterates after end.\n */\n public constructor(\n tokens: Token[],\n comments: Token[],\n indexMap: { [key: number]: number },\n startLoc: number,\n endLoc: number,\n beforeCount: number,\n afterCount: number,\n ) {\n super(tokens, comments, indexMap, startLoc, endLoc)\n this.index = Math.max(0, this.index - beforeCount)\n this.indexEnd = Math.min(tokens.length - 1, this.indexEnd + afterCount)\n }\n}\n","/**\n * @fileoverview Object to handle access and retrieval of tokens.\n * @author Brandon Mills\n */\nimport assert from \"assert\"\nimport type { HasLocation, Token } from \"../../ast/index\"\nimport * as cursors from \"./cursors/index\"\nimport type Cursor from \"./cursors/cursor\"\nimport ForwardTokenCursor from \"./cursors/forward-token-cursor\"\nimport PaddedTokenCursor from \"./cursors/padded-token-cursor\"\nimport { search } from \"./utils\"\n\nexport type SkipOptions =\n | number\n | ((token: Token) => boolean)\n | {\n includeComments?: boolean\n filter?: (token: Token) => boolean\n skip?: number\n }\nexport type CountOptions =\n | number\n | ((token: Token) => boolean)\n | {\n includeComments?: boolean\n filter?: (token: Token) => boolean\n count?: number\n }\n\n/**\n * Check whether the given token is a comment token or not.\n * @param token The token to check.\n * @returns `true` if the token is a comment token.\n */\nfunction isCommentToken(token: Token): boolean {\n return (\n token.type === \"Line\" ||\n token.type === \"Block\" ||\n token.type === \"Shebang\"\n )\n}\n\n/**\n * Creates the map from locations to indices in `tokens`.\n *\n * The first/last location of tokens is mapped to the index of the token.\n * The first/last location of comments is mapped to the index of the next token of each comment.\n *\n * @param tokens - The array of tokens.\n * @param comments - The array of comments.\n * @returns The map from locations to indices in `tokens`.\n * @private\n */\nfunction createIndexMap(\n tokens: Token[],\n comments: Token[],\n): { [key: number]: number } {\n const map = Object.create(null)\n let tokenIndex = 0\n let commentIndex = 0\n let nextStart = 0\n let range: [number, number] | null = null\n\n while (tokenIndex < tokens.length || commentIndex < comments.length) {\n nextStart =\n commentIndex < comments.length\n ? comments[commentIndex].range[0]\n : Number.MAX_SAFE_INTEGER\n while (\n tokenIndex < tokens.length &&\n (range = tokens[tokenIndex].range)[0] < nextStart\n ) {\n map[range[0]] = tokenIndex\n map[range[1] - 1] = tokenIndex\n tokenIndex += 1\n }\n\n nextStart =\n tokenIndex < tokens.length\n ? tokens[tokenIndex].range[0]\n : Number.MAX_SAFE_INTEGER\n while (\n commentIndex < comments.length &&\n (range = comments[commentIndex].range)[0] < nextStart\n ) {\n map[range[0]] = tokenIndex\n map[range[1] - 1] = tokenIndex\n commentIndex += 1\n }\n }\n\n return map\n}\n\n/**\n * Creates the cursor iterates tokens with options.\n *\n * @param factory - The cursor factory to initialize cursor.\n * @param tokens - The array of tokens.\n * @param comments - The array of comments.\n * @param indexMap - The map from locations to indices in `tokens`.\n * @param startLoc - The start location of the iteration range.\n * @param endLoc - The end location of the iteration range.\n * @param opts - The option object. If this is a number then it's `opts.skip`. If this is a function then it's `opts.filter`.\n * @returns The created cursor.\n * @private\n */\nfunction createCursorWithSkip(\n factory: cursors.CursorFactory,\n tokens: Token[],\n comments: Token[],\n indexMap: { [key: number]: number },\n startLoc: number,\n endLoc: number,\n opts?: SkipOptions,\n): Cursor {\n let includeComments = false\n let skip = 0\n let filter: ((token: Token) => boolean) | null = null\n\n if (typeof opts === \"number\") {\n skip = opts | 0\n } else if (typeof opts === \"function\") {\n filter = opts\n } else if (opts) {\n includeComments = Boolean(opts.includeComments)\n skip = opts.skip || 0\n filter = opts.filter || null\n }\n assert(skip >= 0, \"options.skip should be zero or a positive integer.\")\n assert(\n !filter || typeof filter === \"function\",\n \"options.filter should be a function.\",\n )\n\n return factory.createCursor(\n tokens,\n comments,\n indexMap,\n startLoc,\n endLoc,\n includeComments,\n filter,\n skip,\n -1,\n )\n}\n\n/**\n * Creates the cursor iterates tokens with options.\n *\n * @param factory - The cursor factory to initialize cursor.\n * @param tokens - The array of tokens.\n * @param comments - The array of comments.\n * @param indexMap - The map from locations to indices in `tokens`.\n * @param startLoc - The start location of the iteration range.\n * @param endLoc - The end location of the iteration range.\n * @param opts - The option object. If this is a number then it's `opts.count`. If this is a function then it's `opts.filter`.\n * @returns The created cursor.\n * @private\n */\nfunction createCursorWithCount(\n factory: cursors.CursorFactory,\n tokens: Token[],\n comments: Token[],\n indexMap: { [key: number]: number },\n startLoc: number,\n endLoc: number,\n opts?: CountOptions,\n): Cursor {\n let includeComments = false\n let count = 0\n let countExists = false\n let filter: ((token: Token) => boolean) | null = null\n\n if (typeof opts === \"number\") {\n count = opts | 0\n countExists = true\n } else if (typeof opts === \"function\") {\n filter = opts\n } else if (opts) {\n includeComments = Boolean(opts.includeComments)\n count = opts.count || 0\n countExists = typeof opts.count === \"number\"\n filter = opts.filter || null\n }\n assert(count >= 0, \"options.count should be zero or a positive integer.\")\n assert(\n !filter || typeof filter === \"function\",\n \"options.filter should be a function.\",\n )\n\n return factory.createCursor(\n tokens,\n comments,\n indexMap,\n startLoc,\n endLoc,\n includeComments,\n filter,\n 0,\n countExists ? count : -1,\n )\n}\n\n/**\n * Creates the cursor iterates tokens with options.\n *\n * @param tokens - The array of tokens.\n * @param comments - The array of comments.\n * @param indexMap - The map from locations to indices in `tokens`.\n * @param startLoc - The start location of the iteration range.\n * @param endLoc - The end location of the iteration range.\n * @param beforeCount - The number of tokens before the node to retrieve.\n * @param afterCount - The number of tokens after the node to retrieve.\n * @returns The created cursor.\n * @private\n */\nfunction createCursorWithPadding(\n tokens: Token[],\n comments: Token[],\n indexMap: { [key: number]: number },\n startLoc: number,\n endLoc: number,\n beforeCount?: CountOptions,\n afterCount?: number,\n): Cursor {\n if (\n typeof beforeCount === \"undefined\" &&\n typeof afterCount === \"undefined\"\n ) {\n return new ForwardTokenCursor(\n tokens,\n comments,\n indexMap,\n startLoc,\n endLoc,\n )\n }\n if (typeof beforeCount === \"number\" || typeof beforeCount === \"undefined\") {\n return new PaddedTokenCursor(\n tokens,\n comments,\n indexMap,\n startLoc,\n endLoc,\n beforeCount || 0,\n afterCount || 0,\n )\n }\n return createCursorWithCount(\n cursors.forward,\n tokens,\n comments,\n indexMap,\n startLoc,\n endLoc,\n beforeCount,\n )\n}\n\n/**\n * Gets comment tokens that are adjacent to the current cursor position.\n * @param cursor - A cursor instance.\n * @returns An array of comment tokens adjacent to the current cursor position.\n * @private\n */\nfunction getAdjacentCommentTokensFromCursor(cursor: Cursor): Token[] {\n const tokens: Token[] = []\n let currentToken = cursor.getOneToken()\n\n while (currentToken && isCommentToken(currentToken)) {\n tokens.push(currentToken)\n currentToken = cursor.getOneToken()\n }\n\n return tokens\n}\n\n//------------------------------------------------------------------------------\n// Exports\n//------------------------------------------------------------------------------\n\n/**\n * The token store.\n *\n * This class provides methods to get tokens by locations as fast as possible.\n * The methods are a part of public API, so we should be careful if it changes this class.\n *\n * People can get tokens in O(1) by the hash map which is mapping from the location of tokens/comments to tokens.\n * Also people can get a mix of tokens and comments in O(log k), the k is the number of comments.\n * Assuming that comments to be much fewer than tokens, this does not make hash map from token's locations to comments to reduce memory cost.\n * This uses binary-searching instead for comments.\n */\nexport default class TokenStore {\n private _tokens: Token[]\n private _comments: Token[]\n private _indexMap: { [key: number]: number }\n\n /**\n * Initializes this token store.\n * @param tokens - The array of tokens.\n * @param comments - The array of comments.\n */\n public constructor(tokens: Token[], comments: Token[]) {\n this._tokens = tokens\n this._comments = comments\n this._indexMap = createIndexMap(tokens, comments)\n }\n\n //--------------------------------------------------------------------------\n // Gets single token.\n //--------------------------------------------------------------------------\n\n /**\n * Gets the token starting at the specified index.\n * @param offset - Index of the start of the token's range.\n * @param options - The option object.\n * @returns The token starting at index, or null if no such token.\n */\n public getTokenByRangeStart(\n offset: number,\n options?: { includeComments: boolean },\n ): Token | null {\n const includeComments = Boolean(options && options.includeComments)\n const token = cursors.forward\n .createBaseCursor(\n this._tokens,\n this._comments,\n this._indexMap,\n offset,\n -1,\n includeComments,\n )\n .getOneToken()\n\n if (token?.range[0] === offset) {\n return token\n }\n return null\n }\n\n /**\n * Gets the first token of the given node.\n * @param node - The AST node.\n * @param options - The option object.\n * @returns An object representing the token.\n */\n public getFirstToken(\n node: HasLocation,\n options?: SkipOptions,\n ): Token | null {\n return createCursorWithSkip(\n cursors.forward,\n this._tokens,\n this._comments,\n this._indexMap,\n node.range[0],\n node.range[1],\n options,\n ).getOneToken()\n }\n\n /**\n * Gets the last token of the given node.\n * @param node - The AST node.\n * @param options - The option object.\n * @returns An object representing the token.\n */\n public getLastToken(\n node: HasLocation,\n options?: SkipOptions,\n ): Token | null {\n return createCursorWithSkip(\n cursors.backward,\n this._tokens,\n this._comments,\n this._indexMap,\n node.range[0],\n node.range[1],\n options,\n ).getOneToken()\n }\n\n /**\n * Gets the token that precedes a given node or token.\n * @param node - The AST node or token.\n * @param options - The option object.\n * @returns An object representing the token.\n */\n public getTokenBefore(\n node: HasLocation,\n options?: SkipOptions,\n ): Token | null {\n return createCursorWithSkip(\n cursors.backward,\n this._tokens,\n this._comments,\n this._indexMap,\n -1,\n node.range[0],\n options,\n ).getOneToken()\n }\n\n /**\n * Gets the token that follows a given node or token.\n * @param node - The AST node or token.\n * @param options - The option object.\n * @returns An object representing the token.\n */\n public getTokenAfter(\n node: HasLocation,\n options?: SkipOptions,\n ): Token | null {\n return createCursorWithSkip(\n cursors.forward,\n this._tokens,\n this._comments,\n this._indexMap,\n node.range[1],\n -1,\n options,\n ).getOneToken()\n }\n\n /**\n * Gets the first token between two non-overlapping nodes.\n * @param left - Node before the desired token range.\n * @param right - Node after the desired token range.\n * @param options - The option object.\n * @returns An object representing the token.\n */\n public getFirstTokenBetween(\n left: HasLocation,\n right: HasLocation,\n options?: SkipOptions,\n ): Token | null {\n return createCursorWithSkip(\n cursors.forward,\n this._tokens,\n this._comments,\n this._indexMap,\n left.range[1],\n right.range[0],\n options,\n ).getOneToken()\n }\n\n /**\n * Gets the last token between two non-overlapping nodes.\n * @param left Node before the desired token range.\n * @param right Node after the desired token range.\n * @param options - The option object.\n * @returns An object representing the token.\n */\n public getLastTokenBetween(\n left: HasLocation,\n right: HasLocation,\n options?: SkipOptions,\n ): Token | null {\n return createCursorWithSkip(\n cursors.backward,\n this._tokens,\n this._comments,\n this._indexMap,\n left.range[1],\n right.range[0],\n options,\n ).getOneToken()\n }\n\n /**\n * Gets the token that precedes a given node or token in the token stream.\n * This is defined for backward compatibility. Use `includeComments` option instead.\n * TODO: We have a plan to remove this in a future major version.\n * @param node The AST node or token.\n * @param skip A number of tokens to skip.\n * @returns An object representing the token.\n * @deprecated\n */\n public getTokenOrCommentBefore(\n node: HasLocation,\n skip?: number,\n ): Token | null {\n return this.getTokenBefore(node, { includeComments: true, skip })\n }\n\n /**\n * Gets the token that follows a given node or token in the token stream.\n * This is defined for backward compatibility. Use `includeComments` option instead.\n * TODO: We have a plan to remove this in a future major version.\n * @param node The AST node or token.\n * @param skip A number of tokens to skip.\n * @returns An object representing the token.\n * @deprecated\n */\n public getTokenOrCommentAfter(\n node: HasLocation,\n skip?: number,\n ): Token | null {\n return this.getTokenAfter(node, { includeComments: true, skip })\n }\n\n //--------------------------------------------------------------------------\n // Gets multiple tokens.\n //--------------------------------------------------------------------------\n\n /**\n * Gets the first `count` tokens of the given node.\n * @param node - The AST node.\n * @param [options=0] - The option object. If this is a number then it's `options.count`. If this is a function then it's `options.filter`.\n * @param [options.includeComments=false] - The flag to iterate comments as well.\n * @param [options.filter=null] - The predicate function to choose tokens.\n * @param [options.count=0] - The maximum count of tokens the cursor iterates.\n * @returns Tokens.\n */\n public getFirstTokens(node: HasLocation, options?: CountOptions): Token[] {\n return createCursorWithCount(\n cursors.forward,\n this._tokens,\n this._comments,\n this._indexMap,\n node.range[0],\n node.range[1],\n options,\n ).getAllTokens()\n }\n\n /**\n * Gets the last `count` tokens of the given node.\n * @param node - The AST node.\n * @param [options=0] - The option object. Same options as getFirstTokens()\n * @returns Tokens.\n */\n public getLastTokens(node: HasLocation, options?: CountOptions) {\n return createCursorWithCount(\n cursors.backward,\n this._tokens,\n this._comments,\n this._indexMap,\n node.range[0],\n node.range[1],\n options,\n )\n .getAllTokens()\n .reverse()\n }\n\n /**\n * Gets the `count` tokens that precedes a given node or token.\n * @param node - The AST node or token.\n * @param [options=0] - The option object. Same options as getFirstTokens()\n * @returns Tokens.\n */\n public getTokensBefore(node: HasLocation, options?: CountOptions): Token[] {\n return createCursorWithCount(\n cursors.backward,\n this._tokens,\n this._comments,\n this._indexMap,\n -1,\n node.range[0],\n options,\n )\n .getAllTokens()\n .reverse()\n }\n\n /**\n * Gets the `count` tokens that follows a given node or token.\n * @param node - The AST node or token.\n * @param [options=0] - The option object. Same options as getFirstTokens()\n * @returns Tokens.\n */\n public getTokensAfter(node: HasLocation, options?: CountOptions): Token[] {\n return createCursorWithCount(\n cursors.forward,\n this._tokens,\n this._comments,\n this._indexMap,\n node.range[1],\n -1,\n options,\n ).getAllTokens()\n }\n\n /**\n * Gets the first `count` tokens between two non-overlapping nodes.\n * @param left - Node before the desired token range.\n * @param right - Node after the desired token range.\n * @param [options=0] - The option object. Same options as getFirstTokens()\n * @returns Tokens between left and right.\n */\n public getFirstTokensBetween(\n left: HasLocation,\n right: HasLocation,\n options?: CountOptions,\n ): Token[] {\n return createCursorWithCount(\n cursors.forward,\n this._tokens,\n this._comments,\n this._indexMap,\n left.range[1],\n right.range[0],\n options,\n ).getAllTokens()\n }\n\n /**\n * Gets the last `count` tokens between two non-overlapping nodes.\n * @param left Node before the desired token range.\n * @param right Node after the desired token range.\n * @param [options=0] - The option object. Same options as getFirstTokens()\n * @returns Tokens between left and right.\n */\n public getLastTokensBetween(\n left: HasLocation,\n right: HasLocation,\n options?: CountOptions,\n ): Token[] {\n return createCursorWithCount(\n cursors.backward,\n this._tokens,\n this._comments,\n this._indexMap,\n left.range[1],\n right.range[0],\n options,\n )\n .getAllTokens()\n .reverse()\n }\n\n /**\n * Gets all tokens that are related to the given node.\n * @param node - The AST node.\n * @param beforeCount - The number of tokens before the node to retrieve.\n * @param afterCount - The number of tokens after the node to retrieve.\n * @returns Array of objects representing tokens.\n */\n public getTokens(\n node: HasLocation,\n beforeCount?: CountOptions,\n afterCount?: number,\n ): Token[] {\n return createCursorWithPadding(\n this._tokens,\n this._comments,\n this._indexMap,\n node.range[0],\n node.range[1],\n beforeCount,\n afterCount,\n ).getAllTokens()\n }\n\n /**\n * Gets all of the tokens between two non-overlapping nodes.\n * @param left Node before the desired token range.\n * @param right Node after the desired token range.\n * @param padding Number of extra tokens on either side of center.\n * @returns Tokens between left and right.\n */\n public getTokensBetween(\n left: HasLocation,\n right: HasLocation,\n padding?: CountOptions,\n ): Token[] {\n return createCursorWithPadding(\n this._tokens,\n this._comments,\n this._indexMap,\n left.range[1],\n right.range[0],\n padding,\n typeof padding === \"number\" ? padding : undefined,\n ).getAllTokens()\n }\n\n //--------------------------------------------------------------------------\n // Others.\n //--------------------------------------------------------------------------\n\n /**\n * Checks whether any comments exist or not between the given 2 nodes.\n *\n * @param left - The node to check.\n * @param right - The node to check.\n * @returns `true` if one or more comments exist.\n */\n public commentsExistBetween(\n left: HasLocation,\n right: HasLocation,\n ): boolean {\n const index = search(this._comments, left.range[1])\n\n return (\n index < this._comments.length &&\n this._comments[index].range[1] <= right.range[0]\n )\n }\n\n /**\n * Gets all comment tokens directly before the given node or token.\n * @param nodeOrToken The AST node or token to check for adjacent comment tokens.\n * @returns An array of comments in occurrence order.\n */\n public getCommentsBefore(nodeOrToken: HasLocation): Token[] {\n const cursor = createCursorWithCount(\n cursors.backward,\n this._tokens,\n this._comments,\n this._indexMap,\n -1,\n nodeOrToken.range[0],\n { includeComments: true },\n )\n\n return getAdjacentCommentTokensFromCursor(cursor).reverse()\n }\n\n /**\n * Gets all comment tokens directly after the given node or token.\n * @param nodeOrToken The AST node or token to check for adjacent comment tokens.\n * @returns An array of comments in occurrence order.\n */\n public getCommentsAfter(nodeOrToken: HasLocation): Token[] {\n const cursor = createCursorWithCount(\n cursors.forward,\n this._tokens,\n this._comments,\n this._indexMap,\n nodeOrToken.range[1],\n -1,\n { includeComments: true },\n )\n\n return getAdjacentCommentTokensFromCursor(cursor)\n }\n\n /**\n * Gets all comment tokens inside the given node.\n * @param node The AST node to get the comments for.\n * @returns An array of comments in occurrence order.\n */\n public getCommentsInside(node: HasLocation): Token[] {\n return this.getTokens(node, {\n includeComments: true,\n filter: isCommentToken,\n })\n }\n\n /**\n * Returns the location of the given node or token.\n * @param nodeOrToken The node or token to get the location of.\n * @returns The location of the node or token.\n */\n // eslint-disable-next-line class-methods-use-this\n public getLoc(nodeOrToken: HasLocation) {\n return nodeOrToken.loc\n }\n\n /**\n * Returns the range of the given node or token.\n * @param nodeOrToken The node or token to get the range of.\n * @returns The range of the node or token.\n */\n // eslint-disable-next-line class-methods-use-this\n public getRange(nodeOrToken: HasLocation) {\n return nodeOrToken.range\n }\n}\n","import type { Rule, SourceCode } from \"eslint\"\nimport type { ScopeManager, Scope } from \"eslint-scope\"\nimport type {\n ESLintExtendedProgram,\n Node,\n OffsetRange,\n VDocumentFragment,\n VElement,\n VExpressionContainer,\n VText,\n} from \"../../ast/index\"\nimport { getFallbackKeys, ParseError } from \"../../ast/index\"\nimport { getEslintScope } from \"../../common/eslint-scope\"\nimport { getEcmaVersionIfUseEspree } from \"../../common/espree\"\nimport { fixErrorLocation, fixLocations } from \"../../common/fix-locations\"\nimport type { LocationCalculatorForHtml } from \"../../common/location-calculator\"\nimport type { ParserObject } from \"../../common/parser-object\"\nimport { isEnhancedParserObject } from \"../../common/parser-object\"\nimport type { ParserOptions } from \"../../common/parser-options\"\nimport {\n ANALYZE_SCOPE_DEFAULT_ECMA_VERSION,\n DEFAULT_ECMA_VERSION,\n} from \"../../script-setup/parser-options\"\n\nexport type ESLintCustomBlockParser = ParserObject<any, any>\n\nexport type CustomBlockContext = {\n getSourceCode(): SourceCode\n sourceCode: SourceCode\n parserServices: any\n getAncestors(): any[]\n getDeclaredVariables(node: any): any[]\n getScope(): any\n markVariableAsUsed(name: string): boolean\n\n // Same as the original context.\n id: string\n options: any[]\n settings: { [name: string]: any }\n parserPath: string\n parserOptions: any\n getFilename(): string\n report(descriptor: Rule.ReportDescriptor): void\n}\n\n/**\n * Checks whether the given node is VElement.\n */\nfunction isVElement(\n node: VElement | VExpressionContainer | VText,\n): node is VElement {\n return node.type === \"VElement\"\n}\n\n/**\n * Get the all custom blocks from given document\n * @param document\n */\nexport function getCustomBlocks(\n document: VDocumentFragment | null,\n): VElement[] {\n return document\n ? document.children\n .filter(isVElement)\n .filter(\n (block) =>\n block.name !== \"script\" &&\n block.name !== \"template\" &&\n block.name !== \"style\",\n )\n : []\n}\n\n/**\n * Parse the source code of the given custom block element.\n * @param node The custom block element to parse.\n * @param parser The custom parser.\n * @param globalLocationCalculator The location calculator for fixLocations.\n * @param parserOptions The parser options.\n * @returns The result of parsing.\n */\nexport function parseCustomBlockElement(\n node: VElement,\n parser: ESLintCustomBlockParser,\n globalLocationCalculator: LocationCalculatorForHtml,\n parserOptions: ParserOptions,\n): ESLintExtendedProgram & { error?: ParseError | Error } {\n const text = node.children[0]\n const { code, range, loc } =\n text?.type === \"VText\"\n ? {\n code: text.value,\n range: text.range,\n loc: text.loc,\n }\n : {\n code: \"\",\n range: [\n node.startTag.range[1],\n node.endTag!.range[0],\n ] as OffsetRange,\n loc: {\n start: node.startTag.loc.end,\n end: node.endTag!.loc.start,\n },\n }\n const locationCalculator = globalLocationCalculator.getSubCalculatorAfter(\n range[0],\n )\n try {\n return parseCustomBlockFragment(\n code,\n parser,\n locationCalculator,\n parserOptions,\n )\n } catch (e) {\n if (!(e instanceof Error)) {\n throw e\n }\n return {\n error: e,\n ast: {\n type: \"Program\",\n sourceType: \"module\",\n loc: {\n start: {\n ...loc.start,\n },\n end: {\n ...loc.end,\n },\n },\n range: [...range],\n body: [],\n tokens: [],\n comments: [],\n },\n }\n }\n}\n\n/**\n * Parse the given source code.\n *\n * @param code The source code to parse.\n * @param parser The custom parser.\n * @param locationCalculator The location calculator for fixLocations.\n * @param parserOptions The parser options.\n * @returns The result of parsing.\n */\nfunction parseCustomBlockFragment(\n code: string,\n parser: ESLintCustomBlockParser,\n locationCalculator: LocationCalculatorForHtml,\n parserOptions: ParserOptions,\n): ESLintExtendedProgram {\n try {\n const result = parseBlock(code, parser, {\n ecmaVersion: DEFAULT_ECMA_VERSION,\n loc: true,\n range: true,\n raw: true,\n tokens: true,\n comment: true,\n eslintVisitorKeys: true,\n eslintScopeManager: true,\n ...parserOptions,\n })\n fixLocations(result, locationCalculator)\n return result\n } catch (err) {\n const perr = ParseError.normalize(err)\n if (perr) {\n fixErrorLocation(perr, locationCalculator)\n throw perr\n }\n throw err\n }\n}\n\nfunction parseBlock(\n code: string,\n parser: ESLintCustomBlockParser,\n parserOptions: any,\n): any {\n const result = isEnhancedParserObject(parser)\n ? parser.parseForESLint(code, parserOptions)\n : parser.parse(code, parserOptions)\n\n if (result.ast != null) {\n return result\n }\n return { ast: result }\n}\n\n/**\n * Create shared context.\n *\n * @param text The source code of SFC.\n * @param customBlock The custom block node.\n * @param parsedResult The parse result data\n * @param parserOptions The parser options.\n */\nexport function createCustomBlockSharedContext({\n text,\n customBlock,\n parsedResult,\n globalLocationCalculator,\n parserOptions,\n}: {\n text: string\n customBlock: VElement\n parsedResult: ESLintExtendedProgram & { error?: ParseError | Error }\n globalLocationCalculator: LocationCalculatorForHtml\n parserOptions: any\n}) {\n let sourceCode: SourceCode\n let currentNode: any\n return {\n serCurrentNode(node: any) {\n currentNode = node\n },\n context: {\n getAncestors: () => getSourceCode().getAncestors(currentNode),\n getDeclaredVariables: (...args: any[]) =>\n // @ts-expect-error -- ignore\n getSourceCode().getDeclaredVariables(...args),\n getScope: () => getSourceCode().getScope(currentNode),\n markVariableAsUsed: (name: string) =>\n getSourceCode().markVariableAsUsed(name, currentNode),\n get parserServices() {\n return getSourceCode().parserServices\n },\n getSourceCode,\n get sourceCode() {\n return getSourceCode()\n },\n },\n }\n\n function getSourceCode(): SourceCode {\n if (sourceCode) {\n return sourceCode\n }\n\n const scopeManager = getScopeManager()\n\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const originalSourceCode = new (require(\"eslint\").SourceCode)({\n text,\n ast: parsedResult.ast,\n parserServices: {\n customBlock,\n parseCustomBlockElement(\n parser: ESLintCustomBlockParser,\n options: any,\n ) {\n return parseCustomBlockElement(\n customBlock,\n parser,\n globalLocationCalculator,\n { ...parserOptions, ...options },\n )\n },\n ...parsedResult.services,\n ...(parsedResult.error\n ? { parseError: parsedResult.error }\n : {}),\n },\n scopeManager,\n visitorKeys: parsedResult.visitorKeys,\n })\n\n const polyfills = {\n markVariableAsUsed: (name: string, node: any) =>\n markVariableAsUsed(scopeManager, node, parsedResult.ast, name),\n getScope: (node: any) => getScope(scopeManager, node),\n getAncestors: (node: any) => getAncestors(node),\n getDeclaredVariables: (...args: any[]) =>\n // @ts-expect-error -- ignore\n scopeManager.getDeclaredVariables(...args),\n }\n\n return (sourceCode = new Proxy(originalSourceCode, {\n get(_target, prop) {\n return originalSourceCode[prop] || (polyfills as any)[prop]\n },\n }))\n }\n\n function getScopeManager() {\n if (parsedResult.scopeManager) {\n return parsedResult.scopeManager\n }\n\n const ecmaVersion =\n getEcmaVersionIfUseEspree(parserOptions) ??\n ANALYZE_SCOPE_DEFAULT_ECMA_VERSION\n const ecmaFeatures = parserOptions.ecmaFeatures ?? {}\n const sourceType = parserOptions.sourceType ?? \"script\"\n return getEslintScope().analyze(parsedResult.ast, {\n ignoreEval: true,\n nodejsScope: false,\n impliedStrict: ecmaFeatures.impliedStrict,\n ecmaVersion,\n sourceType,\n fallback: getFallbackKeys,\n })\n }\n}\n\n/* The following source code is copied from `eslint/lib/linter/linter.js` */\n\n/**\n * Gets all the ancestors of a given node\n * @param {ASTNode} node The node\n * @returns {ASTNode[]} All the ancestor nodes in the AST, not including the provided node, starting\n * from the root node and going inwards to the parent node.\n */\nfunction getAncestors(node: Node) {\n const ancestorsStartingAtParent = []\n\n for (let ancestor = node.parent; ancestor; ancestor = ancestor.parent) {\n ancestorsStartingAtParent.push(ancestor)\n }\n\n return ancestorsStartingAtParent.reverse()\n}\n\n/**\n * Gets the scope for the current node\n * @param {ScopeManager} scopeManager The scope manager for this AST\n * @param {ASTNode} currentNode The node to get the scope of\n * @returns {eslint-scope.Scope} The scope information for this node\n */\nfunction getScope(scopeManager: ScopeManager, currentNode: Node) {\n // On Program node, get the outermost scope to avoid return Node.js special function scope or ES modules scope.\n const inner = currentNode.type !== \"Program\"\n\n for (\n let node: Node | null = currentNode;\n node;\n node = node.parent ?? null\n ) {\n const scope = scopeManager.acquire(node as any, inner)\n\n if (scope) {\n if (scope.type === \"function-expression-name\") {\n return scope.childScopes[0]\n }\n return scope\n }\n }\n\n return scopeManager.scopes[0]\n}\n\n/**\n * Marks a variable as used in the current scope\n * @param {ScopeManager} scopeManager The scope manager for this AST. The scope may be mutated by this function.\n * @param {ASTNode} currentNode The node currently being traversed\n * @param {Object} parserOptions The options used to parse this text\n * @param {string} name The name of the variable that should be marked as used.\n * @returns {boolean} True if the variable was found and marked as used, false if not.\n */\nfunction markVariableAsUsed(\n scopeManager: ScopeManager,\n currentNode: Node,\n program: Node,\n name: string,\n) {\n const currentScope = getScope(scopeManager, currentNode)\n let initialScope = currentScope\n if (\n currentScope.type === \"global\" &&\n currentScope.childScopes.length > 0 &&\n // top-level scopes refer to a `Program` node\n currentScope.childScopes[0].block === program\n ) {\n initialScope = currentScope.childScopes[0]\n }\n\n for (let scope: Scope | null = initialScope; scope; scope = scope.upper) {\n const variable = scope.variables.find(\n (scopeVar) => scopeVar.name === name,\n )\n\n if (variable) {\n // @ts-expect-error -- ignore\n variable.eslintUsed = true\n return true\n }\n }\n\n return false\n}\n","/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2017 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\nimport type { Rule } from \"eslint\"\nimport EventEmitter from \"events\"\nimport NodeEventGenerator from \"./external/node-event-generator\"\nimport TokenStore from \"./external/token-store/index\"\nimport type {\n ESLintProgram,\n VElement,\n VDocumentFragment,\n VAttribute,\n} from \"./ast/index\"\nimport { getFallbackKeys, KEYS, traverseNodes } from \"./ast/traverse\"\nimport type { LocationCalculatorForHtml } from \"./common/location-calculator\"\nimport type {\n CustomBlockContext,\n ESLintCustomBlockParser,\n} from \"./sfc/custom-block/index\"\nimport {\n createCustomBlockSharedContext,\n getCustomBlocks,\n parseCustomBlockElement,\n} from \"./sfc/custom-block/index\"\nimport type { ParserOptions } from \"./common/parser-options\"\nimport { isSFCFile } from \"./common/parser-options\"\nimport { getLang } from \"./common/ast-utils\"\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\ntype CustomBlockVisitorFactory = (context: CustomBlockContext) =>\n | {\n [key: string]: (...args: any) => void\n }\n | null\n | undefined\n\n//------------------------------------------------------------------------------\n// Exports\n//------------------------------------------------------------------------------\n\nexport interface ParserServices {\n /**\n * Define handlers to traverse the template body.\n * @param templateBodyVisitor The template body handlers.\n * @param scriptVisitor The script handlers. This is optional.\n * @param options The options. This is optional.\n */\n defineTemplateBodyVisitor(\n templateBodyVisitor: { [key: string]: (...args: any) => void },\n scriptVisitor?: { [key: string]: (...args: any) => void },\n options?: { templateBodyTriggerSelector: \"Program\" | \"Program:exit\" },\n ): object\n\n /**\n * Define handlers to traverse the document.\n * @param documentVisitor The document handlers.\n * @param options The options. This is optional.\n */\n defineDocumentVisitor(\n documentVisitor: { [key: string]: (...args: any) => void },\n options?: { triggerSelector: \"Program\" | \"Program:exit\" },\n ): object\n\n /**\n * Define handlers to traverse custom blocks.\n * @param context The rule context.\n * @param parser The custom parser.\n * @param rule The custom block rule definition\n * @param scriptVisitor The script handlers. This is optional.\n */\n defineCustomBlocksVisitor(\n context: Rule.RuleContext,\n parser: ESLintCustomBlockParser,\n rule: {\n target:\n | string\n | string[]\n | ((lang: string | null, customBlock: VElement) => boolean)\n create: CustomBlockVisitorFactory\n },\n scriptVisitor?: { [key: string]: (...args: any) => void },\n ): { [key: string]: (...args: any) => void }\n\n /**\n * Get the token store of the template body.\n * @returns The token store of template body.\n */\n getTemplateBodyTokenStore(): TokenStore\n\n /**\n * Get the root document fragment.\n * @returns The root document fragment.\n */\n getDocumentFragment(): VDocumentFragment | null\n}\n\n/**\n * Define the parser service\n * @param rootAST\n */\nexport function define(\n sourceText: string,\n rootAST: ESLintProgram,\n document: VDocumentFragment | null,\n globalLocationCalculator: LocationCalculatorForHtml | null,\n { parserOptions }: { parserOptions: ParserOptions },\n): ParserServices {\n const templateBodyEmitters = new Map<string, EventEmitter>()\n const stores = new WeakMap<object, TokenStore>()\n\n const documentEmitters = new Map<string, EventEmitter>()\n\n const customBlocksEmitters = new Map<\n | ESLintCustomBlockParser[\"parseForESLint\"]\n | ESLintCustomBlockParser[\"parse\"],\n {\n context: Rule.RuleContext\n test: (lang: string | null, customBlock: VElement) => boolean\n create: CustomBlockVisitorFactory\n }[]\n >()\n\n const isSFC = isSFCFile(parserOptions)\n\n return {\n /**\n * Define handlers to traverse the template body.\n * @param templateBodyVisitor The template body handlers.\n * @param scriptVisitor The script handlers. This is optional.\n */\n defineTemplateBodyVisitor(\n templateBodyVisitor: { [key: string]: (...args: any) => void },\n scriptVisitor?: { [key: string]: (...args: any) => void },\n options?: {\n templateBodyTriggerSelector: \"Program\" | \"Program:exit\"\n },\n ): object {\n if (scriptVisitor == null) {\n scriptVisitor = {} //eslint-disable-line no-param-reassign\n }\n if (rootAST.templateBody == null) {\n return scriptVisitor\n }\n const templateBodyTriggerSelector =\n options?.templateBodyTriggerSelector ?? \"Program:exit\"\n\n let emitter = templateBodyEmitters.get(templateBodyTriggerSelector)\n\n // If this is the first time, initialize the intermediate event emitter.\n if (emitter == null) {\n emitter = new EventEmitter()\n emitter.setMaxListeners(0)\n templateBodyEmitters.set(templateBodyTriggerSelector, emitter)\n\n const programExitHandler =\n scriptVisitor[templateBodyTriggerSelector]\n scriptVisitor[templateBodyTriggerSelector] = (node) => {\n try {\n if (typeof programExitHandler === \"function\") {\n programExitHandler(node)\n }\n\n // Traverse template body.\n const generator = new NodeEventGenerator(emitter!, {\n visitorKeys: KEYS,\n fallback: getFallbackKeys,\n })\n traverseNodes(\n rootAST.templateBody as VElement,\n generator,\n )\n } finally {\n scriptVisitor[templateBodyTriggerSelector] =\n programExitHandler\n templateBodyEmitters.delete(templateBodyTriggerSelector)\n }\n }\n }\n\n // Register handlers into the intermediate event emitter.\n for (const selector of Object.keys(templateBodyVisitor)) {\n emitter.on(selector, templateBodyVisitor[selector])\n }\n\n return scriptVisitor\n },\n\n /**\n * Define handlers to traverse the document.\n * @param documentVisitor The document handlers.\n * @param options The options. This is optional.\n */\n defineDocumentVisitor(\n documentVisitor: { [key: string]: (...args: any) => void },\n options?: { triggerSelector: \"Program\" | \"Program:exit\" },\n ): object {\n const scriptVisitor: { [key: string]: (...args: any) => void } = {}\n if (!document) {\n return scriptVisitor\n }\n\n const documentTriggerSelector =\n options?.triggerSelector ?? \"Program:exit\"\n\n let emitter = documentEmitters.get(documentTriggerSelector)\n\n // If this is the first time, initialize the intermediate event emitter.\n if (emitter == null) {\n emitter = new EventEmitter()\n emitter.setMaxListeners(0)\n documentEmitters.set(documentTriggerSelector, emitter)\n\n const programExitHandler =\n scriptVisitor[documentTriggerSelector]\n scriptVisitor[documentTriggerSelector] = (node) => {\n try {\n if (typeof programExitHandler === \"function\") {\n programExitHandler(node)\n }\n\n // Traverse document.\n const generator = new NodeEventGenerator(emitter!, {\n visitorKeys: KEYS,\n fallback: getFallbackKeys,\n })\n traverseNodes(document, generator)\n } finally {\n scriptVisitor[documentTriggerSelector] =\n programExitHandler\n documentEmitters.delete(documentTriggerSelector)\n }\n }\n }\n\n // Register handlers into the intermediate event emitter.\n for (const selector of Object.keys(documentVisitor)) {\n emitter.on(selector, documentVisitor[selector])\n }\n\n return scriptVisitor\n },\n\n /**\n * Define handlers to traverse custom blocks.\n * @param context The rule context.\n * @param parser The custom parser.\n * @param rule The custom block rule definition\n * @param scriptVisitor The script handlers. This is optional.\n */\n defineCustomBlocksVisitor(\n context: Rule.RuleContext,\n parser: ESLintCustomBlockParser,\n rule: {\n target:\n | string\n | string[]\n | ((lang: string | null, customBlock: VElement) => boolean)\n create: CustomBlockVisitorFactory\n },\n scriptVisitor?: { [key: string]: (...args: any) => void },\n ): { [key: string]: (...args: any) => void } {\n if (scriptVisitor == null) {\n scriptVisitor = {} //eslint-disable-line no-param-reassign\n }\n if (!isSFC) {\n return scriptVisitor\n }\n parserOptions = { ...parserOptions } //eslint-disable-line no-param-reassign\n const customBlocks = getCustomBlocks(document).filter(\n (block) =>\n block.endTag &&\n !block.startTag.attributes.some(\n (attr): attr is VAttribute =>\n !attr.directive && attr.key.name === \"src\",\n ),\n )\n if (!customBlocks.length || globalLocationCalculator == null) {\n return {}\n }\n const key = parser.parseForESLint ?? parser.parse\n let factories = customBlocksEmitters.get(key)\n\n // If this is the first time, initialize the intermediate event emitter.\n if (factories == null) {\n factories = []\n customBlocksEmitters.set(key, factories)\n const visitorFactories = factories\n\n const programExitHandler = scriptVisitor[\"Program:exit\"]\n scriptVisitor[\"Program:exit\"] = (node) => {\n try {\n if (typeof programExitHandler === \"function\") {\n programExitHandler(node)\n }\n for (const customBlock of customBlocks) {\n const lang = getLang(customBlock)\n\n const activeVisitorFactories =\n visitorFactories.filter((f) =>\n f.test(lang, customBlock),\n )\n if (!activeVisitorFactories.length) {\n continue\n }\n\n const parsedResult = parseCustomBlockElement(\n customBlock,\n parser,\n globalLocationCalculator,\n parserOptions,\n )\n\n const {\n serCurrentNode,\n context: customBlockContext,\n } = createCustomBlockSharedContext({\n text: sourceText,\n customBlock,\n parsedResult,\n globalLocationCalculator,\n parserOptions,\n })\n\n const emitter = new EventEmitter()\n emitter.setMaxListeners(0)\n\n for (const factory of activeVisitorFactories) {\n const ctx = {\n ...customBlockContext,\n }\n // @ts-expect-error -- custom context\n ctx.__proto__ = factory.context\n\n const visitor = factory.create(\n ctx as CustomBlockContext,\n )\n // Register handlers into the intermediate event emitter.\n for (const selector of Object.keys(\n visitor ?? {},\n )) {\n emitter.on(selector, visitor![selector])\n }\n }\n\n // Traverse custom block.\n const generator = new NodeEventGenerator(emitter, {\n visitorKeys: parsedResult.visitorKeys,\n fallback: getFallbackKeys,\n })\n traverseNodes(parsedResult.ast, {\n visitorKeys: parsedResult.visitorKeys,\n enterNode(n) {\n serCurrentNode(n)\n generator.enterNode(n)\n },\n leaveNode(n) {\n serCurrentNode(n)\n generator.leaveNode(n)\n },\n })\n }\n } finally {\n scriptVisitor[\"Program:exit\"] = programExitHandler\n customBlocksEmitters.delete(key)\n }\n }\n }\n\n const target = rule.target\n const test =\n typeof target === \"function\"\n ? target\n : Array.isArray(target)\n ? (lang: string | null) =>\n Boolean(lang && target.includes(lang))\n : (lang: string | null) => target === lang\n factories.push({\n context,\n test,\n create: rule.create,\n })\n\n return scriptVisitor\n },\n\n /**\n * Get the token store of the template body.\n * @returns The token store of template body.\n */\n getTemplateBodyTokenStore(): TokenStore {\n const key = document || stores\n let store = stores.get(key)\n\n if (!store) {\n store =\n document != null\n ? new TokenStore(document.tokens, document.comments)\n : new TokenStore([], [])\n stores.set(key, store)\n }\n\n return store\n },\n\n /**\n * Get the root document fragment.\n * @returns The root document fragment.\n */\n getDocumentFragment(): VDocumentFragment | null {\n return document\n },\n }\n}\n","/**\n * @author Yosuke Ota <https://github.com/ota-meshi>\n * See LICENSE file in root directory for full license.\n */\nimport type { ScopeManager, Scope } from \"eslint-scope\"\nimport type {\n ESLintBlockStatement,\n ESLintExportNamedDeclaration,\n ESLintExportSpecifier,\n ESLintExtendedProgram,\n ESLintIdentifier,\n ESLintModuleDeclaration,\n ESLintNode,\n ESLintProgram,\n ESLintStatement,\n Token,\n VElement,\n} from \"../ast/index\"\nimport { ParseError, traverseNodes } from \"../ast/index\"\nimport {\n fixErrorLocation,\n fixLocation,\n fixLocations,\n fixNodeLocations,\n} from \"../common/fix-locations\"\nimport type { LinesAndColumns } from \"../common/lines-and-columns\"\nimport type { LocationCalculator } from \"../common/location-calculator\"\nimport type { ParserOptions } from \"../common/parser-options\"\nimport {\n parseScript as parseScriptBase,\n parseScriptFragment,\n} from \"../script/index\"\nimport { extractGeneric } from \"../script/generic\"\nimport { DEFAULT_ECMA_VERSION } from \"./parser-options\"\n\ntype RemapBlock = {\n range: [number, number]\n offset: number\n}\n\n/**\n * `parseScriptSetupElements` rewrites the source code so that it can parse\n * the combination of `<script>` and `<script setup>`, and parses it source code with JavaScript parser.\n * This class holds the information to restore the AST and token locations parsed in the rewritten source code.\n */\nclass CodeBlocks {\n public code: string\n // The location information for remapping.\n public remapBlocks: RemapBlock[] = []\n // The list of extra punctuation locations added to split the statement.\n public splitPunctuators: number[] = []\n\n public constructor() {\n this.code = \"\"\n }\n public get length() {\n return this.code.length\n }\n public append(codeLet: string, originalOffset: number) {\n const rangeStart = this.code.length\n this.code += codeLet.trimEnd()\n this.remapBlocks.push({\n range: [rangeStart, this.code.length],\n offset: originalOffset - rangeStart,\n })\n }\n public appendSplitPunctuators(punctuator: string) {\n this.splitPunctuators.push(this.code.length, this.code.length + 1)\n this.code += `\\n${punctuator}\\n`\n }\n public appendCodeBlocks(codeBlocks: CodeBlocks) {\n const start = this.code.length\n this.code += codeBlocks.code\n this.remapBlocks.push(\n ...codeBlocks.remapBlocks.map(\n (b): RemapBlock => ({\n range: [b.range[0] + start, b.range[1] + start],\n offset: b.offset - start,\n }),\n ),\n )\n this.splitPunctuators.push(\n ...codeBlocks.splitPunctuators.map((s) => s + start),\n )\n }\n}\n\ntype RestoreASTCallback = (node: ESLintStatement) => {\n statement: ESLintStatement | ESLintModuleDeclaration\n tokens: Token[]\n} | null\n/**\n * Some named exports need to be replaced with a different syntax to successfully parse\n * the combination of `<script>` and `<script setup>`.\n * e.g. `export {a,b}` -> `({a,b});`, `export let a` -> `let a`\n * This class holds the callbacks to restore the rewritten syntax AST back to the original `export` AST.\n */\nclass RestoreASTCallbacks {\n private callbacks: {\n range: [number, number]\n callback: RestoreASTCallback\n }[] = []\n public addCallback(\n originalOffsetStart: number,\n range: [number, number],\n callback: RestoreASTCallback,\n ) {\n this.callbacks.push({\n range: [\n originalOffsetStart + range[0],\n originalOffsetStart + range[1],\n ],\n callback,\n })\n }\n public restore(\n program: ESLintProgram,\n scriptSetupStatements: ESLintStatement[],\n linesAndColumns: LinesAndColumns,\n ) {\n if (this.callbacks.length === 0) {\n return\n }\n const callbacks = new Set(this.callbacks)\n for (const statement of scriptSetupStatements) {\n for (const cb of callbacks) {\n if (\n cb.range[0] <= statement.range[0] &&\n statement.range[1] <= cb.range[1]\n ) {\n const restored = cb.callback(statement)\n if (restored) {\n const removeIndex = program.body.indexOf(statement)\n if (removeIndex >= 0) {\n program.body.splice(removeIndex, 1)\n program.body.push(restored.statement)\n program.tokens!.push(...restored.tokens)\n restored.statement.parent = program\n callbacks.delete(cb)\n break\n }\n }\n }\n }\n }\n if (callbacks.size) {\n const [cb] = callbacks\n const loc = linesAndColumns.getLocFromIndex(cb.range[0])\n throw new ParseError(\n \"Could not parse <script setup>. Failed to restore ExportNamedDeclaration.\",\n undefined,\n cb.range[0],\n loc.line,\n loc.column,\n )\n }\n }\n}\n\ntype Postprocess = (\n result: ESLintExtendedProgram,\n context: { scriptSetupBlockRange: [number, number] },\n) => void\n\ntype ScriptSetupCodeBlocks = {\n codeBlocks: CodeBlocks\n // The location of the code of the statements in `<script setup>`.\n scriptSetupBlockRange: [number, number]\n // Post process\n postprocess: Postprocess\n // Used to restore ExportNamedDeclaration.\n restoreASTCallbacks: RestoreASTCallbacks\n}\ntype ScriptSetupModuleCodeBlocks =\n | ScriptSetupCodeBlocks\n | {\n codeBlocks: CodeBlocks\n scriptSetupBlockRange?: undefined\n postprocess?: undefined\n restoreASTCallbacks?: undefined\n }\n\nfunction parseScript(\n code: string,\n parserOptions: ParserOptions,\n locationCalculatorForError: LocationCalculator,\n) {\n try {\n return parseScriptBase(code, parserOptions)\n } catch (err) {\n const perr = ParseError.normalize(err)\n if (perr) {\n // console.log(code)\n fixErrorLocation(perr, locationCalculatorForError)\n throw perr\n }\n throw err\n }\n}\n\n/**\n * Parse the source code of the given `<script setup>` and `<script>` elements.\n * @param scriptSetupElement The `<script setup>` element to parse.\n * @param nodes The `<script>` elements to parse.\n * @param sfcCode The source code of SFC.\n * @param linesAndColumns The lines and columns location calculator.\n * @param parserOptions The parser options.\n * @returns The result of parsing.\n */\nexport function parseScriptSetupElements(\n scriptSetupElement: VElement,\n scriptElement: VElement,\n sfcCode: string,\n linesAndColumns: LinesAndColumns,\n originalParserOptions: ParserOptions,\n): ESLintExtendedProgram {\n const parserOptions: ParserOptions = {\n ...originalParserOptions,\n ecmaVersion: originalParserOptions.ecmaVersion ?? DEFAULT_ECMA_VERSION,\n }\n const scriptSetupModuleCodeBlocks = getScriptSetupModuleCodeBlocks(\n scriptSetupElement,\n scriptElement,\n sfcCode,\n linesAndColumns,\n parserOptions,\n )\n if (!scriptSetupModuleCodeBlocks) {\n return parseScriptFragment(\n \"\",\n linesAndColumns.createOffsetLocationCalculator(\n scriptSetupElement.startTag.range[1],\n ),\n parserOptions,\n )\n }\n\n const locationCalculator: LocationCalculator = {\n getFixOffset(offset, kind) {\n const test: (block: RemapBlock) => boolean =\n kind === \"start\"\n ? (block) =>\n block.range[0] <= offset && offset < block.range[1]\n : (block) =>\n block.range[0] < offset && offset <= block.range[1]\n\n for (const block of scriptSetupModuleCodeBlocks.codeBlocks\n .remapBlocks) {\n if (test(block)) {\n return block.offset\n }\n }\n return offset\n },\n getLocFromIndex: linesAndColumns.getLocFromIndex.bind(linesAndColumns),\n }\n\n const result = parseScript(\n scriptSetupModuleCodeBlocks.codeBlocks.code,\n parserOptions,\n locationCalculator,\n )\n if (scriptSetupModuleCodeBlocks.postprocess) {\n scriptSetupModuleCodeBlocks.postprocess(result, {\n scriptSetupBlockRange:\n scriptSetupModuleCodeBlocks.scriptSetupBlockRange,\n })\n }\n\n /* Remap ASTs */\n const scriptSetupStatements = remapAST(result, scriptSetupModuleCodeBlocks)\n\n /* Remap locations */\n remapLocationAndTokens(\n result,\n scriptSetupModuleCodeBlocks,\n locationCalculator,\n )\n\n if (scriptSetupModuleCodeBlocks.restoreASTCallbacks) {\n scriptSetupModuleCodeBlocks.restoreASTCallbacks.restore(\n result.ast,\n scriptSetupStatements,\n linesAndColumns,\n )\n }\n\n // Adjust AST and tokens\n if (result.ast.tokens != null) {\n for (const node of [scriptSetupElement, scriptElement]) {\n const startTag = node.startTag\n const endTag = node.endTag\n\n result.ast.tokens.unshift({\n type: \"Punctuator\",\n range: startTag.range,\n loc: startTag.loc,\n value: \"<script>\",\n })\n if (endTag != null) {\n result.ast.tokens.push({\n type: \"Punctuator\",\n range: endTag.range,\n loc: endTag.loc,\n value: \"</script>\",\n })\n }\n }\n result.ast.tokens.sort((a, b) => a.range[0] - b.range[0])\n }\n\n if (result.ast.comments != null) {\n result.ast.comments.sort((a, b) => a.range[0] - b.range[0])\n }\n result.ast.body.sort((a, b) => a.range[0] - b.range[0])\n\n const programStartOffset = result.ast.body.reduce(\n (start, node) => Math.min(start, node.range[0]),\n result.ast.range[0],\n )\n result.ast.range[0] = programStartOffset\n result.ast.loc.start =\n locationCalculator.getLocFromIndex(programStartOffset)\n if (result.ast.start != null) {\n result.ast.start = [scriptSetupElement, scriptElement].reduce(\n (start, node) => {\n const textNode = node.children[0]\n return Math.min(\n start,\n textNode?.type === \"VText\"\n ? textNode.range[0]\n : node.startTag.range[1],\n )\n },\n result.ast.start,\n )\n }\n\n const programEndOffset = result.ast.body.reduce(\n (end, node) => Math.max(end, node.range[1]),\n 0,\n )\n result.ast.range[1] = programEndOffset\n result.ast.loc.end = locationCalculator.getLocFromIndex(programEndOffset)\n if (result.ast.end != null) {\n result.ast.end = [scriptSetupElement, scriptElement].reduce(\n (end, node) => {\n const textNode = node.children[0]\n return Math.max(\n end,\n textNode?.type === \"VText\"\n ? textNode.range[1]\n : (node.endTag?.range[0] ?? node.range[1]),\n )\n },\n 0,\n )\n }\n\n return result\n}\n\n/**\n * Parses the scripts of the given `<script>` elements and returns\n * the reconstructed source code as a parseable script.\n * It also returns information for remapping the location.\n *\n * For examples, the script is reconstructed as follows.\n *\n * Example 1:\n *\n * ```vue\n * <script>\n * export let count = 42\n * </script>\n * <script setup>\n * import MyComponent from './MyComponent.vue'\n * let count = 42\n * </script>\n * ```\n *\n * ↓\n *\n * ```js\n * export let count = 42\n * ;\n * import MyComponent from './MyComponent.vue';\n * {\n * let count = 42\n * }\n * ```\n *\n * Example 2:\n *\n * ```vue\n * <script>\n * export let count = 42\n * </script>\n * <script setup>\n * import MyComponent1 from './MyComponent1.vue'\n * let count = 42\n * import MyComponent2 from './MyComponent2.vue'\n * let a\n * </script>\n * ```\n *\n * ↓\n *\n * ```js\n * export let count = 42\n * ;\n * import MyComponent1 from './MyComponent1.vue';\n * import MyComponent2 from './MyComponent2.vue';\n * {\n * let count = 42;\n * let a\n * }\n * ```\n *\n * Example 3:\n *\n * ```vue\n * <script>\n * export let count = 42\n * export let count2 = 42\n * </script>\n * <script setup>\n * import MyComponent1 from './MyComponent1.vue'\n * let count = 42\n * export {count as ns}\n * export let count2 = 42\n * count2++\n * </script>\n * ```\n *\n * ↓\n *\n * ```js\n * export let count = 42\n * export let count2 = 42\n * ;\n * import MyComponent1 from './MyComponent1.vue';\n * {\n * let count = 42;\n * let a\n * ;\n * ({count})\n * ;\n * let count2 = 42\n * ;\n * count2++\n * ;\n * }\n * ```\n */\nfunction getScriptSetupModuleCodeBlocks(\n scriptSetupElement: VElement,\n scriptElement: VElement,\n sfcCode: string,\n linesAndColumns: LinesAndColumns,\n parserOptions: ParserOptions,\n): ScriptSetupModuleCodeBlocks | null {\n const scriptSetupCodeBlocks = getScriptSetupCodeBlocks(\n scriptSetupElement,\n sfcCode,\n linesAndColumns,\n parserOptions,\n )\n\n const textNode = scriptElement.children[0]\n if (textNode == null || textNode.type !== \"VText\") {\n return scriptSetupCodeBlocks\n }\n\n const [scriptStartOffset, scriptEndOffset] = textNode.range\n const codeBlocks = new CodeBlocks()\n codeBlocks.append(\n sfcCode.slice(scriptStartOffset, scriptEndOffset),\n scriptStartOffset,\n )\n if (scriptSetupCodeBlocks == null) {\n return { codeBlocks }\n }\n\n codeBlocks.appendSplitPunctuators(\";\")\n const scriptSetupOffset = codeBlocks.length\n codeBlocks.appendCodeBlocks(scriptSetupCodeBlocks.codeBlocks)\n return {\n codeBlocks,\n scriptSetupBlockRange: [\n scriptSetupCodeBlocks.scriptSetupBlockRange[0] + scriptSetupOffset,\n scriptSetupCodeBlocks.scriptSetupBlockRange[1] + scriptSetupOffset,\n ],\n postprocess: scriptSetupCodeBlocks.postprocess,\n restoreASTCallbacks: scriptSetupCodeBlocks.restoreASTCallbacks,\n }\n}\n\n/**\n * Parses the script in the given `<script setup>` and returns the source code with\n * the import blocks and other statements reconstructed.\n * It also returns information for remapping the location.\n */\nfunction getScriptSetupCodeBlocks(\n node: VElement,\n sfcCode: string,\n linesAndColumns: LinesAndColumns,\n parserOptions: ParserOptions,\n): ScriptSetupCodeBlocks | null {\n const textNode = node.children[0]\n if (textNode == null || textNode.type !== \"VText\") {\n return null\n }\n\n const [scriptSetupStartOffset, scriptSetupEndOffset] = textNode.range\n const scriptCode = sfcCode.slice(\n scriptSetupStartOffset,\n scriptSetupEndOffset,\n )\n\n const offsetLocationCalculator =\n linesAndColumns.createOffsetLocationCalculator(scriptSetupStartOffset)\n\n const { ast, visitorKeys } = parseScript(\n scriptCode,\n { ...parserOptions, project: undefined, projectService: undefined },\n offsetLocationCalculator,\n )\n\n // Holds the `import` and re-`export` statements.\n // All import and re-`export` statements are hoisted to the top.\n const importCodeBlocks = new CodeBlocks()\n // Holds statements other than `import`, re-`export` and `export default` statements.\n // This is moved to a block statement to avoid conflicts with variables of the same name in `<script>`.\n const statementCodeBlocks = new CodeBlocks()\n // Holds `export default` statements.\n // All `export default` statements are move to the bottom.\n const exportDefaultCodeBlocks = new CodeBlocks()\n // It holds the information to restore the transformation source code of the export statements held in `statementCodeBlocks`.\n const restoreASTCallbacks = new RestoreASTCallbacks()\n\n let usedOffset = 0\n\n /**\n * Consume and append the given range of code to the given codeBlocks.\n */\n function append(codeBlocks: CodeBlocks, start: number, end: number) {\n if (start < end) {\n codeBlocks.append(\n scriptCode.slice(start, end),\n scriptSetupStartOffset + start,\n )\n usedOffset = end\n return true\n }\n return false\n }\n\n /**\n * Append the given range of import or export statement to the given codeBlocks.\n */\n function appendRangeAsStatement(\n codeBlocks: CodeBlocks,\n start: number,\n end: number,\n ) {\n if (append(codeBlocks, start, end)) {\n codeBlocks.appendSplitPunctuators(\";\")\n }\n }\n\n function transformExportNamed(body: ESLintExportNamedDeclaration) {\n const [start, end] = getNodeFullRange(body)\n // Consume code up to the start position.\n appendRangeAsStatement(statementCodeBlocks, usedOffset, start)\n\n const tokens = ast.tokens!\n const exportTokenIndex = tokens.findIndex(\n (t) => t.range[0] === body.range[0],\n )\n const exportToken = tokens[exportTokenIndex]\n if (exportToken?.value === \"export\") {\n // Consume code up to the start position of `export`.\n // The code may contain legacy decorators.\n append(statementCodeBlocks, usedOffset, exportToken.range[0])\n if (body.declaration) {\n // Append declaration section (Skip `export` token)\n appendRangeAsStatement(\n statementCodeBlocks,\n exportToken.range[1],\n end,\n )\n\n restoreASTCallbacks.addCallback(\n scriptSetupStartOffset,\n [start, end],\n (statement) => {\n if (statement.type !== body.declaration!.type) {\n return null\n }\n fixNodeLocations(\n body,\n visitorKeys,\n offsetLocationCalculator,\n )\n fixLocation(exportToken, offsetLocationCalculator)\n body.declaration = statement\n statement.parent = body\n return {\n statement: body,\n tokens: [exportToken],\n }\n },\n )\n } else {\n // Append the code that converted specifiers to destructuring.\n statementCodeBlocks.appendSplitPunctuators(\"(\")\n const restoreTokens: Token[] = [exportToken]\n let startOffset = exportToken.range[1]\n for (const spec of body.specifiers) {\n if (spec.local.range[0] < spec.exported.range[0]) {\n // {a as b}\n const localTokenIndex = tokens.findIndex(\n (t) => t.range[0] === spec.local.range[0],\n exportTokenIndex,\n )\n checkToken(\n tokens[localTokenIndex],\n (spec.local as ESLintIdentifier).name,\n )\n const asToken = tokens[localTokenIndex + 1]\n checkToken(asToken, \"as\")\n restoreTokens.push(asToken)\n const exportedToken = tokens[localTokenIndex + 2]\n checkToken(\n exportedToken,\n spec.exported.type === \"Identifier\"\n ? spec.exported.name\n : spec.exported.raw,\n )\n restoreTokens.push(exportedToken)\n // Skip `as` token\n append(\n statementCodeBlocks,\n startOffset,\n asToken.range[0],\n )\n append(\n statementCodeBlocks,\n asToken.range[1],\n exportedToken.range[0],\n )\n startOffset = exportedToken.range[1]\n }\n }\n append(statementCodeBlocks, startOffset, end)\n statementCodeBlocks.appendSplitPunctuators(\")\")\n statementCodeBlocks.appendSplitPunctuators(\";\")\n\n restoreASTCallbacks.addCallback(\n scriptSetupStartOffset,\n [start, end],\n (statement) => {\n if (\n statement.type !== \"ExpressionStatement\" ||\n statement.expression.type !== \"ObjectExpression\"\n ) {\n return null\n }\n // preprocess and check\n const locals: ESLintIdentifier[] = []\n for (const prop of statement.expression.properties) {\n if (\n prop.type !== \"Property\" ||\n prop.value.type !== \"Identifier\"\n ) {\n return null\n }\n locals.push(prop.value)\n }\n if (body.specifiers.length !== locals.length) {\n return null\n }\n const map = new Map<\n ESLintExportSpecifier,\n ESLintIdentifier\n >()\n for (\n let index = 0;\n index < body.specifiers.length;\n index++\n ) {\n const spec = body.specifiers[index]\n const local = locals[index]\n map.set(spec, local)\n }\n\n // restore\n fixNodeLocations(\n body,\n visitorKeys,\n offsetLocationCalculator,\n )\n for (const token of restoreTokens) {\n fixLocation(token, offsetLocationCalculator)\n }\n for (const [spec, local] of map) {\n spec.local = local\n local.parent = spec\n }\n return {\n statement: body,\n tokens: restoreTokens,\n }\n },\n )\n }\n } else {\n // Unknown format\n appendRangeAsStatement(statementCodeBlocks, usedOffset, end)\n }\n }\n\n for (const body of ast.body) {\n if (\n body.type === \"ImportDeclaration\" ||\n body.type === \"ExportAllDeclaration\" ||\n (body.type === \"ExportNamedDeclaration\" && body.source != null)\n ) {\n const [start, end] = getNodeFullRange(body)\n // Consume code up to the start position.\n appendRangeAsStatement(statementCodeBlocks, usedOffset, start)\n // Append declaration\n appendRangeAsStatement(importCodeBlocks, start, end)\n } else if (body.type === \"ExportDefaultDeclaration\") {\n const [start, end] = getNodeFullRange(body)\n // Consume code up to the start position.\n appendRangeAsStatement(statementCodeBlocks, usedOffset, start)\n // Append declaration\n appendRangeAsStatement(exportDefaultCodeBlocks, start, end)\n } else if (body.type === \"ExportNamedDeclaration\") {\n // Transform ExportNamedDeclaration\n // The transformed statement ASTs are restored by RestoreASTCallbacks.\n // e.g.\n // - `export let v = 42` -> `let v = 42`\n // - `export {foo, bar as Bar}` -> `({foo, bar})`\n transformExportNamed(body)\n }\n }\n // Consume the remaining code.\n appendRangeAsStatement(\n statementCodeBlocks,\n usedOffset,\n scriptSetupEndOffset,\n )\n\n // Creates a code block that combines import, statement block, and export default.\n const codeBlocks = new CodeBlocks()\n\n let postprocess: Postprocess = () => {\n // noop\n }\n\n codeBlocks.appendCodeBlocks(importCodeBlocks)\n const scriptSetupBlockRangeStart = codeBlocks.length\n codeBlocks.appendSplitPunctuators(\"{\")\n const generic = extractGeneric(node)\n if (generic) {\n const defineGenericTypeRangeStart = codeBlocks.length\n for (const defineType of generic.defineTypes) {\n codeBlocks.append(defineType.define, defineType.node.range[0])\n codeBlocks.appendSplitPunctuators(\";\")\n }\n const defineGenericTypeRangeEnd = codeBlocks.length\n postprocess = (eslintResult, context) => {\n const diffOffset =\n context.scriptSetupBlockRange[0] - scriptSetupBlockRangeStart\n const defineGenericTypeRange = [\n defineGenericTypeRangeStart + diffOffset,\n defineGenericTypeRangeEnd + diffOffset,\n ] as const\n\n function isTypeBlock(\n block: ESLintNode,\n ): block is ESLintBlockStatement {\n return (\n block.type === \"BlockStatement\" &&\n context.scriptSetupBlockRange[0] <= block.range[0] &&\n block.range[1] <= context.scriptSetupBlockRange[1]\n )\n }\n\n generic.postprocess({\n result: eslintResult,\n getTypeBlock: (program) => program.body.find(isTypeBlock)!,\n isRemoveTarget(nodeOrToken) {\n return (\n defineGenericTypeRange[0] <= nodeOrToken.range[0] &&\n nodeOrToken.range[1] <= defineGenericTypeRange[1]\n )\n },\n getTypeDefScope(scopeManager) {\n const moduleScope =\n scopeManager.globalScope.childScopes.find(\n (s) => s.type === \"module\",\n ) ?? scopeManager.globalScope\n return moduleScope.childScopes.find((scope) =>\n isTypeBlock(scope.block as ESLintNode),\n )!\n },\n })\n }\n }\n codeBlocks.appendCodeBlocks(statementCodeBlocks)\n codeBlocks.appendSplitPunctuators(\"}\")\n const scriptSetupBlockRangeEnd = codeBlocks.length\n codeBlocks.appendCodeBlocks(exportDefaultCodeBlocks)\n return {\n codeBlocks,\n scriptSetupBlockRange: [\n scriptSetupBlockRangeStart,\n scriptSetupBlockRangeEnd,\n ],\n postprocess,\n restoreASTCallbacks,\n }\n\n function getNodeFullRange(n: ESLintNode) {\n let start = n.range[0]\n let end = n.range[1]\n traverseNodes(n, {\n visitorKeys,\n enterNode(c) {\n start = Math.min(start, c.range[0])\n end = Math.max(end, c.range[1])\n },\n leaveNode() {\n // Do nothing.\n },\n })\n return [start, end] as const\n }\n\n function checkToken(token: Token, value: string) {\n if (token.value === value) {\n return\n }\n\n const perr = new ParseError(\n `Could not parse <script setup>. Expected \"${value}\", but it was \"${token.value}\".`,\n undefined,\n token.range[0],\n token.loc.start.line,\n token.loc.start.column,\n )\n fixErrorLocation(perr, offsetLocationCalculator)\n throw perr\n }\n}\n\nfunction remapAST(\n result: ESLintExtendedProgram,\n { scriptSetupBlockRange, codeBlocks }: ScriptSetupModuleCodeBlocks,\n): ESLintStatement[] {\n if (!scriptSetupBlockRange) {\n return []\n }\n\n let scriptSetupBlock: ESLintBlockStatement | null = null\n const scriptSetupStatements: ESLintStatement[] = []\n for (let index = result.ast.body.length - 1; index >= 0; index--) {\n const body = result.ast.body[index]\n\n if (body.type === \"BlockStatement\") {\n if (\n scriptSetupBlockRange[0] <= body.range[0] &&\n body.range[1] <= scriptSetupBlockRange[1]\n ) {\n if (scriptSetupBlock) {\n throw new Error(\n `Unexpected state error: An unexpected block statement was found. ${JSON.stringify(\n body.loc,\n )}`,\n )\n }\n scriptSetupBlock = body\n scriptSetupStatements.push(\n ...body.body.filter(\n (b) => !isSplitPunctuatorsEmptyStatement(b),\n ),\n )\n result.ast.body.splice(index, 1, ...scriptSetupStatements)\n }\n } else if (body.type === \"EmptyStatement\") {\n if (isSplitPunctuatorsEmptyStatement(body)) {\n // remove\n result.ast.body.splice(index, 1)\n }\n }\n }\n\n if (result.scopeManager && scriptSetupBlock) {\n const blockScope = result.scopeManager.acquire(\n scriptSetupBlock as never,\n true,\n )!\n remapScope(result.scopeManager, blockScope)\n }\n\n return scriptSetupStatements\n\n function isSplitPunctuatorsEmptyStatement(body: ESLintStatement) {\n return (\n body.type === \"EmptyStatement\" &&\n codeBlocks.splitPunctuators.includes(body.range[1] - 1)\n )\n }\n\n function remapScope(scopeManager: ScopeManager, blockScope: Scope) {\n const moduleScope = blockScope.upper!\n\n // Restore references\n for (const reference of blockScope.references) {\n reference.from = moduleScope\n moduleScope.references.push(reference)\n }\n // Restore variables\n for (const variable of blockScope.variables) {\n variable.scope = moduleScope\n const alreadyVariable = moduleScope.variables.find(\n (v) => v.name === variable.name,\n )\n if (alreadyVariable) {\n alreadyVariable.defs.push(...variable.defs)\n alreadyVariable.identifiers.push(...variable.identifiers)\n alreadyVariable.references.push(...variable.references)\n for (const reference of variable.references) {\n reference.resolved = alreadyVariable\n }\n } else {\n moduleScope.variables.push(variable)\n moduleScope.set.set(variable.name, variable)\n }\n }\n // Remove scope\n const upper = blockScope.upper\n if (upper) {\n const index = upper.childScopes.indexOf(blockScope)\n if (index >= 0) {\n upper.childScopes.splice(index, 1)\n }\n }\n const index = scopeManager.scopes.indexOf(blockScope)\n if (index >= 0) {\n scopeManager.scopes.splice(index, 1)\n }\n }\n}\n\nfunction remapLocationAndTokens(\n result: ESLintExtendedProgram,\n { codeBlocks }: ScriptSetupModuleCodeBlocks,\n locationCalculator: LocationCalculator,\n) {\n const tokens = result.ast.tokens ?? []\n\n const endMap = new Map<number, number>()\n const buffer: number[] = []\n for (let index = tokens.length - 1; index >= 0; index--) {\n const token = tokens[index]\n\n if (\n token.range[0] + 1 === token.range[1] &&\n codeBlocks.splitPunctuators.includes(token.range[0])\n ) {\n // remove\n tokens.splice(index, 1)\n buffer.push(token.range[1])\n continue\n } else {\n for (const end of buffer) {\n endMap.set(end, token.range[1])\n }\n buffer.length = 0\n }\n }\n\n traverseNodes(result.ast, {\n visitorKeys: result.visitorKeys,\n enterNode(node) {\n const rangeEnd = endMap.get(node.range[1])\n if (rangeEnd != null) {\n node.range[1] = rangeEnd\n }\n if (node.end) {\n const end = endMap.get(node.end)\n if (end != null) {\n node.end = rangeEnd\n }\n }\n },\n leaveNode() {\n // Do nothing.\n },\n })\n\n fixLocations(result, locationCalculator)\n}\n","import { debug } from \"../common/debug\"\nimport type { OffsetRange } from \"../ast/index\"\nimport {\n APOSTROPHE,\n ASTERISK,\n CARRIAGE_RETURN,\n EOF,\n isWhitespace,\n LEFT_CURLY_BRACKET,\n LEFT_PARENTHESIS,\n LINE_FEED,\n NULL,\n QUOTATION_MARK,\n REVERSE_SOLIDUS,\n RIGHT_CURLY_BRACKET,\n RIGHT_PARENTHESIS,\n SOLIDUS,\n COLON,\n SEMICOLON,\n LEFT_SQUARE_BRACKET,\n RIGHT_SQUARE_BRACKET,\n} from \"../html/util/unicode\"\n\nexport const enum CSSTokenType {\n Quoted = \"Quoted\",\n Block = \"Block\",\n Line = \"Line\",\n Word = \"Word\",\n Punctuator = \"Punctuator\",\n}\n\nexport interface CSSWordToken {\n type: CSSTokenType.Word\n value: string\n range: OffsetRange\n}\nexport interface CSSQuotedToken {\n type: CSSTokenType.Quoted\n valueRange: OffsetRange\n value: string\n range: OffsetRange\n quote: '\"' | \"'\"\n}\nexport interface CSSPunctuatorToken {\n type: CSSTokenType.Punctuator\n value: string\n range: OffsetRange\n}\nexport interface CSSCommentToken {\n type: CSSTokenType.Block | CSSTokenType.Line\n valueRange: OffsetRange\n value: string\n range: OffsetRange\n}\nexport type CSSToken =\n | CSSWordToken\n | CSSQuotedToken\n | CSSPunctuatorToken\n | CSSCommentToken\n\nexport type CSSTokenizeOption = { inlineComment?: boolean }\n\n/**\n * A simplified CSS tokenizer.\n * The tokenizer is implemented with reference to the CSS specification,\n * but it does not follow it. This tokenizer only does the tokenization needed to properly handle `v-bind()`.\n * @see https://drafts.csswg.org/css-syntax/#tokenization\n */\nexport class CSSTokenizer {\n // Reading\n public readonly text: string\n private readonly options: CSSTokenizeOption\n private cp: number\n private offset: number\n private nextOffset: number\n\n // Tokenizing\n private reconsuming: boolean\n\n /**\n * Initialize this tokenizer.\n * @param text The source code to tokenize.\n * @param options The tokenizer options.\n */\n public constructor(\n text: string,\n startOffset: number,\n options?: CSSTokenizeOption,\n ) {\n debug(\"[css] the source code length: %d\", text.length)\n this.text = text\n this.options = {\n inlineComment: options?.inlineComment ?? false,\n }\n this.cp = NULL\n this.offset = startOffset - 1\n this.nextOffset = startOffset\n this.reconsuming = false\n }\n\n /**\n * Get the next token.\n * @returns The next token or null.\n */\n public nextToken(): CSSToken | null {\n let cp\n if (this.reconsuming) {\n cp = this.cp\n this.reconsuming = false\n } else {\n cp = this.consumeNextCodePoint()\n }\n // Skip whitespaces\n while (isWhitespace(cp)) {\n cp = this.consumeNextCodePoint()\n }\n if (cp === EOF) {\n return null\n }\n\n const start = this.offset\n return this.consumeNextToken(cp, start)\n }\n\n /**\n * Get the next code point.\n * @returns The code point.\n */\n private nextCodePoint(): number {\n if (this.nextOffset >= this.text.length) {\n return EOF\n }\n return this.text.codePointAt(this.nextOffset)!\n }\n\n /**\n * Consume the next code point.\n * @returns The consumed code point.\n */\n private consumeNextCodePoint(): number {\n if (this.offset >= this.text.length) {\n this.cp = EOF\n return EOF\n }\n\n this.offset = this.nextOffset\n\n if (this.offset >= this.text.length) {\n this.cp = EOF\n return EOF\n }\n\n let cp = this.text.codePointAt(this.offset)!\n if (cp === CARRIAGE_RETURN) {\n this.nextOffset = this.offset + 1\n if (this.text.codePointAt(this.nextOffset)! === LINE_FEED) {\n this.nextOffset++\n }\n cp = LINE_FEED\n } else {\n this.nextOffset = this.offset + (cp >= 0x10000 ? 2 : 1)\n }\n\n this.cp = cp\n\n return cp\n }\n\n private consumeNextToken(cp: number, start: number): CSSToken | null {\n if (cp === SOLIDUS) {\n const nextCp = this.nextCodePoint()\n if (nextCp === ASTERISK) {\n return this.consumeComment(start)\n }\n if (nextCp === SOLIDUS && this.options.inlineComment) {\n return this.consumeInlineComment(start)\n }\n }\n if (isQuote(cp)) {\n return this.consumeString(start, cp)\n }\n if (isPunctuator(cp)) {\n return {\n type: CSSTokenType.Punctuator,\n range: [start, start + 1],\n value: String.fromCodePoint(cp),\n }\n }\n return this.consumeWord(start)\n }\n\n /**\n * Consume word\n */\n private consumeWord(start: number): CSSToken {\n let cp = this.consumeNextCodePoint()\n while (!isWhitespace(cp) && !isPunctuator(cp) && !isQuote(cp)) {\n cp = this.consumeNextCodePoint()\n }\n this.reconsuming = true\n const range: OffsetRange = [start, this.offset]\n const text = this.text\n let value: string\n return {\n type: CSSTokenType.Word,\n range,\n get value() {\n return (value ??= text.slice(...range))\n },\n }\n }\n\n /**\n * https://drafts.csswg.org/css-syntax/#consume-string-token\n */\n private consumeString(start: number, quote: number): CSSToken {\n let valueEndOffset: number | null = null\n let cp = this.consumeNextCodePoint()\n while (cp !== EOF) {\n if (cp === quote) {\n valueEndOffset = this.offset\n break\n }\n // PostCSS seems to continue parsing.\n // if (cp === LINE_FEED) {\n // // Bad string\n // this.reconsuming = true\n // valueEndOffset = this.offset\n // break\n // }\n if (cp === REVERSE_SOLIDUS) {\n // Escape\n this.consumeNextCodePoint()\n }\n cp = this.consumeNextCodePoint()\n }\n const text = this.text\n let value: string\n const valueRange: OffsetRange = [\n start + 1,\n valueEndOffset ?? this.nextOffset,\n ]\n return {\n type: CSSTokenType.Quoted,\n range: [start, this.nextOffset],\n valueRange,\n get value() {\n return (value ??= text.slice(...valueRange))\n },\n quote: String.fromCodePoint(quote) as never,\n }\n }\n /**\n * https://drafts.csswg.org/css-syntax/#consume-comment\n */\n private consumeComment(start: number): CSSToken {\n this.consumeNextCodePoint() // consume \"*\"\n let valueEndOffset: number | null = null\n let cp = this.consumeNextCodePoint()\n while (cp !== EOF) {\n if (cp === ASTERISK) {\n cp = this.consumeNextCodePoint()\n if (cp === SOLIDUS) {\n valueEndOffset = this.offset - 1\n break\n }\n }\n cp = this.consumeNextCodePoint()\n }\n const valueRange: OffsetRange = [\n start + 2,\n valueEndOffset ?? this.nextOffset,\n ]\n const text = this.text\n let value: string\n return {\n type: CSSTokenType.Block,\n range: [start, this.nextOffset],\n valueRange,\n get value() {\n return (value ??= text.slice(...valueRange))\n },\n }\n }\n /**\n * Consume inline comment\n */\n private consumeInlineComment(start: number): CSSToken {\n this.consumeNextCodePoint() // consume \"/\"\n let valueEndOffset: number | null = null\n let cp = this.consumeNextCodePoint()\n while (cp !== EOF) {\n if (cp === LINE_FEED) {\n valueEndOffset = this.offset - 1\n break\n }\n cp = this.consumeNextCodePoint()\n }\n const valueRange: OffsetRange = [\n start + 2,\n valueEndOffset ?? this.nextOffset,\n ]\n const text = this.text\n let value: string\n return {\n type: CSSTokenType.Line,\n range: [start, this.nextOffset],\n valueRange,\n get value() {\n return (value ??= text.slice(...valueRange))\n },\n }\n }\n}\n\nfunction isPunctuator(cp: number): boolean {\n return (\n cp === COLON ||\n cp === SEMICOLON ||\n // Brackets\n cp === LEFT_PARENTHESIS ||\n cp === RIGHT_PARENTHESIS ||\n cp === LEFT_CURLY_BRACKET ||\n cp === RIGHT_CURLY_BRACKET ||\n cp === LEFT_SQUARE_BRACKET ||\n cp === RIGHT_SQUARE_BRACKET ||\n // Maybe v-bind() in calc()\n cp === SOLIDUS ||\n cp === ASTERISK\n )\n}\n\nfunction isQuote(cp: number): boolean {\n return cp === APOSTROPHE || cp === QUOTATION_MARK\n}\n","import type {\n OffsetRange,\n Token,\n VDocumentFragment,\n VElement,\n VExpressionContainer,\n VStyleElement,\n VText,\n} from \"../ast/index\"\nimport { ParseError } from \"../ast/index\"\nimport { getLang, getOwnerDocument } from \"../common/ast-utils\"\nimport { debug } from \"../common/debug\"\nimport { insertError } from \"../common/error-utils\"\nimport type { LocationCalculatorForHtml } from \"../common/location-calculator\"\nimport type { ParserOptions } from \"../common/parser-options\"\nimport {\n createSimpleToken,\n insertComments,\n replaceAndSplitTokens,\n} from \"../common/token-utils\"\nimport { parseExpression } from \"../script/index\"\nimport { DEFAULT_ECMA_VERSION } from \"../script-setup/parser-options\"\nimport { resolveReferences } from \"../template/index\"\nimport type {\n CSSCommentToken,\n CSSPunctuatorToken,\n CSSToken,\n CSSTokenizeOption,\n} from \"./tokenizer\"\nimport { CSSTokenType, CSSTokenizer } from \"./tokenizer\"\n\nclass CSSTokenScanner {\n private reconsuming: CSSToken[] = []\n private tokenizer: CSSTokenizer\n public constructor(text: string, options: CSSTokenizeOption) {\n this.tokenizer = new CSSTokenizer(text, 0, options)\n }\n public nextToken(): CSSToken | null {\n return this.reconsuming.shift() ?? this.tokenizer.nextToken()\n }\n public reconsume(...tokens: CSSToken[]) {\n this.reconsuming.push(...tokens)\n }\n}\n\n/**\n * Parse the source code of the given `<style>` elements.\n * @param elements The `<style>` elements to parse.\n * @param globalLocationCalculator The location calculator for fixLocations.\n * @param parserOptions The parser options.\n * @returns The result of parsing.\n */\nexport function parseStyleElements(\n elements: VElement[],\n globalLocationCalculator: LocationCalculatorForHtml,\n originalParserOptions: ParserOptions,\n): void {\n const parserOptions: ParserOptions = {\n ...originalParserOptions,\n ecmaVersion: originalParserOptions.ecmaVersion ?? DEFAULT_ECMA_VERSION,\n }\n\n for (const style of elements) {\n ;(style as VStyleElement).style = true\n parseStyleElement(\n style as VStyleElement,\n globalLocationCalculator,\n parserOptions,\n {\n inlineComment: (getLang(style) || \"css\") !== \"css\",\n },\n )\n }\n}\n\nfunction parseStyleElement(\n style: VStyleElement,\n globalLocationCalculator: LocationCalculatorForHtml,\n parserOptions: ParserOptions,\n cssOptions: CSSTokenizeOption,\n) {\n if (style.children.length !== 1) {\n return\n }\n const textNode = style.children[0]\n if (textNode.type !== \"VText\") {\n return\n }\n const code = textNode.value\n // short circuit\n if (!/v-bind\\s*(?:\\(|\\/)/u.test(code)) {\n return\n }\n\n const locationCalculator = globalLocationCalculator.getSubCalculatorAfter(\n textNode.range[0],\n )\n const document = getOwnerDocument(style)\n parseStyle(\n document,\n style,\n code,\n locationCalculator,\n parserOptions,\n cssOptions,\n )\n}\n\nfunction parseStyle(\n document: VDocumentFragment | null,\n style: VStyleElement,\n code: string,\n locationCalculator: LocationCalculatorForHtml,\n parserOptions: ParserOptions,\n cssOptions: CSSTokenizeOption,\n) {\n let textStart = 0\n for (const {\n range,\n exprRange,\n quote,\n openingParenOffset,\n comments,\n } of iterateVBind(code, cssOptions)) {\n insertComments(\n document,\n comments.map((c) =>\n createSimpleToken(\n c.type,\n locationCalculator.getOffsetWithGap(c.range[0]),\n locationCalculator.getOffsetWithGap(c.range[1]),\n c.value,\n locationCalculator,\n ),\n ),\n )\n\n const container: VExpressionContainer = {\n type: \"VExpressionContainer\",\n range: [\n locationCalculator.getOffsetWithGap(range[0]),\n locationCalculator.getOffsetWithGap(range[1]),\n ],\n loc: {\n start: locationCalculator.getLocation(range[0]),\n end: locationCalculator.getLocation(range[1]),\n },\n parent: style,\n expression: null,\n references: [],\n }\n\n const openingParenStart =\n locationCalculator.getOffsetWithGap(openingParenOffset)\n const beforeTokens: Token[] = [\n createSimpleToken(\n \"HTMLRawText\",\n container.range[0],\n container.range[0] + 6 /* v-bind */,\n \"v-bind\",\n locationCalculator,\n ),\n createSimpleToken(\n \"Punctuator\",\n openingParenStart,\n openingParenStart + 1,\n \"(\",\n locationCalculator,\n ),\n ]\n const afterTokens: Token[] = [\n createSimpleToken(\n \"Punctuator\",\n container.range[1] - 1,\n container.range[1],\n \")\",\n locationCalculator,\n ),\n ]\n if (quote) {\n const openStart = locationCalculator.getOffsetWithGap(\n exprRange[0] - 1,\n )\n beforeTokens.push(\n createSimpleToken(\n \"Punctuator\",\n openStart,\n openStart + 1,\n quote,\n locationCalculator,\n ),\n )\n const closeStart = locationCalculator.getOffsetWithGap(exprRange[1])\n afterTokens.unshift(\n createSimpleToken(\n \"Punctuator\",\n closeStart,\n closeStart + 1,\n quote,\n locationCalculator,\n ),\n )\n }\n const beforeLast = beforeTokens[beforeTokens.length - 1]\n replaceAndSplitTokens(\n document,\n {\n range: [container.range[0], beforeLast.range[1]],\n loc: { start: container.loc.start, end: beforeLast.loc.end },\n },\n beforeTokens,\n )\n const afterFirst = afterTokens[0]\n replaceAndSplitTokens(\n document,\n {\n range: [afterFirst.range[0], container.range[1]],\n loc: { start: afterFirst.loc.start, end: container.loc.end },\n },\n afterTokens,\n )\n\n const lastChild = style.children[style.children.length - 1]\n style.children.push(container)\n if (lastChild.type === \"VText\") {\n const newTextNode: VText = {\n type: \"VText\",\n range: [container.range[1], lastChild.range[1]],\n loc: {\n start: { ...container.loc.end },\n end: { ...lastChild.loc.end },\n },\n parent: style,\n value: code.slice(range[1]),\n }\n style.children.push(newTextNode)\n\n lastChild.range[1] = container.range[0]\n lastChild.loc.end = { ...container.loc.start }\n lastChild.value = code.slice(textStart, range[0])\n textStart = range[1]\n }\n try {\n const ret = parseExpression(\n code.slice(...exprRange),\n locationCalculator.getSubCalculatorShift(exprRange[0]),\n parserOptions,\n { allowEmpty: false, allowFilters: false },\n )\n if (ret.expression) {\n ret.expression.parent = container\n container.expression = ret.expression\n container.references = ret.references\n }\n replaceAndSplitTokens(\n document,\n {\n range: [beforeLast.range[1], afterFirst.range[0]],\n loc: {\n start: beforeLast.loc.end,\n end: afterFirst.loc.start,\n },\n },\n ret.tokens,\n )\n insertComments(document, ret.comments)\n\n for (const variable of ret.variables) {\n style.variables.push(variable)\n }\n resolveReferences(container)\n } catch (err) {\n debug(\"[style] Parse error: %s\", err)\n\n if (ParseError.isParseError(err)) {\n insertError(document, err)\n } else {\n throw err\n }\n }\n }\n}\n\ntype VBindLocations = {\n range: OffsetRange\n exprRange: OffsetRange\n quote: '\"' | \"'\" | null\n openingParenOffset: number\n comments: CSSCommentToken[]\n}\n\n/**\n * Iterate the `v-bind()` information.\n */\nfunction* iterateVBind(\n code: string,\n cssOptions: CSSTokenizeOption,\n): IterableIterator<VBindLocations> {\n const tokenizer = new CSSTokenScanner(code, cssOptions)\n\n let token\n while ((token = tokenizer.nextToken())) {\n if (token.type !== CSSTokenType.Word || token.value !== \"v-bind\") {\n continue\n }\n const openingParen = findVBindOpeningParen(tokenizer)\n if (!openingParen) {\n continue\n }\n const arg = parseVBindArg(tokenizer)\n if (!arg) {\n continue\n }\n yield {\n range: [token.range[0], arg.closingParen.range[1]],\n exprRange: arg.exprRange,\n quote: arg.quote,\n openingParenOffset: openingParen.openingParen.range[0],\n comments: [...openingParen.comments, ...arg.comments],\n }\n }\n}\n\nfunction findVBindOpeningParen(tokenizer: CSSTokenScanner): {\n openingParen: CSSPunctuatorToken\n comments: CSSCommentToken[]\n} | null {\n const comments: CSSCommentToken[] = []\n let token\n while ((token = tokenizer.nextToken())) {\n if (token.type === CSSTokenType.Punctuator && token.value === \"(\") {\n return {\n openingParen: token,\n comments,\n }\n } else if (isComment(token)) {\n // Comment between `v-bind` and opening paren.\n comments.push(token)\n continue\n }\n tokenizer.reconsume(...comments, token)\n // There were no opening parens.\n return null\n }\n return null\n}\n\nfunction parseVBindArg(tokenizer: CSSTokenScanner): {\n exprRange: OffsetRange\n quote: '\"' | \"'\" | null\n closingParen: CSSPunctuatorToken\n comments: CSSCommentToken[]\n} | null {\n const tokensBuffer: CSSToken[] = []\n const comments: CSSCommentToken[] = []\n const tokens: CSSToken[] = []\n const closeTokenStack: string[] = []\n let token\n while ((token = tokenizer.nextToken())) {\n if (token.type === CSSTokenType.Punctuator) {\n if (token.value === \")\" && !closeTokenStack.length) {\n if (\n tokens.length === 1 &&\n tokens[0].type === CSSTokenType.Quoted\n ) {\n // for v-bind( 'expr' ), and v-bind( /**/ 'expr' /**/ )\n const quotedToken = tokens[0]\n return {\n exprRange: quotedToken.valueRange,\n quote: quotedToken.quote,\n closingParen: token,\n comments,\n }\n }\n const startToken = tokensBuffer[0] ?? token\n return {\n exprRange: [startToken.range[0], token.range[0]],\n quote: null,\n closingParen: token,\n comments: [],\n }\n }\n\n if (token.value === closeTokenStack[0]) {\n closeTokenStack.shift()\n } else if (token.value === \"(\") {\n closeTokenStack.unshift(\")\")\n }\n }\n\n tokensBuffer.push(token)\n if (isComment(token)) {\n comments.push(token)\n } else {\n tokens.push(token)\n }\n }\n tokenizer.reconsume(...tokensBuffer)\n return null\n}\n\nfunction isComment(token: CSSToken): token is CSSCommentToken {\n return token.type === CSSTokenType.Block || token.type === CSSTokenType.Line\n}\n","import type * as escopeTypes from \"eslint-scope\"\nimport type { ParserOptions } from \"../common/parser-options\"\nimport type {\n Reference,\n VAttribute,\n VDirective,\n VDocumentFragment,\n VElement,\n VExpressionContainer,\n} from \"../ast/index\"\nimport { traverseNodes } from \"../ast/index\"\nimport { getEslintScope } from \"../common/eslint-scope\"\nimport {\n findGenericDirective,\n isScriptElement,\n isScriptSetupElement,\n} from \"../common/ast-utils\"\nimport { camelize } from \"../utils/utils\"\n\nconst BUILTIN_COMPONENTS = new Set([\n \"template\",\n \"slot\",\n \"component\",\n \"Component\",\n \"transition\",\n \"Transition\",\n \"transition-group\",\n \"TransitionGroup\",\n \"keep-alive\",\n \"KeepAlive\",\n \"teleport\",\n \"Teleport\",\n \"suspense\",\n \"Suspense\",\n])\n\nconst BUILTIN_DIRECTIVES = new Set([\n \"bind\",\n \"on\",\n \"text\",\n \"html\",\n \"show\",\n \"if\",\n \"else\",\n \"else-if\",\n \"for\",\n \"model\",\n \"slot\",\n \"pre\",\n \"cloak\",\n \"once\",\n \"memo\",\n \"is\",\n])\n\n/**\n * @see https://github.com/vuejs/core/blob/48de8a42b7fed7a03f7f1ff5d53d6a704252cafe/packages/shared/src/domTagConfig.ts#L5-L28\n */\n// https://developer.mozilla.org/en-US/docs/Web/HTML/Element\nconst HTML_TAGS =\n \"html,body,base,head,link,meta,style,title,address,article,aside,footer,\" +\n \"header,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,\" +\n \"figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,\" +\n \"data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,\" +\n \"time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,\" +\n \"canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,\" +\n \"th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,\" +\n \"option,output,progress,select,textarea,details,dialog,menu,\" +\n \"summary,template,blockquote,iframe,tfoot\"\n\n// https://developer.mozilla.org/en-US/docs/Web/SVG/Element\nconst SVG_TAGS =\n \"svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,\" +\n \"defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,\" +\n \"feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,\" +\n \"feDistanceLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,\" +\n \"feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,\" +\n \"fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,\" +\n \"foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,\" +\n \"mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,\" +\n \"polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,\" +\n \"text,textPath,title,tspan,unknown,use,view\"\n\nconst NATIVE_TAGS = new Set([...HTML_TAGS.split(\",\"), ...SVG_TAGS.split(\",\")])\n\nconst COMPILER_MACROS_AT_ROOT = new Set([\n \"defineProps\",\n \"defineEmits\",\n \"defineExpose\",\n \"withDefaults\",\n // Added in Vue 3.3\n \"defineOptions\",\n \"defineSlots\",\n // Added in Vue 3.4\n \"defineModel\",\n])\n\nfunction capitalize(str: string) {\n return str[0].toUpperCase() + str.slice(1)\n}\n\n/**\n * Analyze `<script setup>` scope.\n * This method does the following process:\n *\n * 1. Add a virtual reference to the variables used in the template to mark them as used.\n * (This is the same way typescript-eslint marks a `React` variable.)\n *\n * 2. If compiler macros were used, add these variables as global variables.\n */\nexport function analyzeScriptSetupScope(\n scopeManager: escopeTypes.ScopeManager,\n templateBody: VElement | undefined,\n df: VDocumentFragment,\n parserOptions: ParserOptions,\n): void {\n analyzeUsedInTemplateVariables(scopeManager, templateBody, df)\n\n analyzeScriptSetupVariables(scopeManager, df, parserOptions)\n}\n\nfunction extractVariables(scopeManager: escopeTypes.ScopeManager) {\n const scriptVariables = new Map<string, escopeTypes.Variable>()\n const globalScope = scopeManager.globalScope\n if (!globalScope) {\n return scriptVariables\n }\n for (const variable of globalScope.variables) {\n scriptVariables.set(variable.name, variable)\n }\n const moduleScope = globalScope.childScopes.find(\n (scope) => scope.type === \"module\",\n )\n for (const variable of moduleScope?.variables ?? []) {\n scriptVariables.set(variable.name, variable)\n }\n return scriptVariables\n}\n\n/**\n * Analyze the variables used in the template.\n * Add a virtual reference to the variables used in the template to mark them as used.\n * (This is the same way typescript-eslint marks a `React` variable.)\n */\nfunction analyzeUsedInTemplateVariables(\n scopeManager: escopeTypes.ScopeManager,\n templateBody: VElement | undefined,\n df: VDocumentFragment,\n) {\n const scriptVariables = extractVariables(scopeManager)\n\n const markedVariables = new Set<string>()\n\n /**\n * @see https://github.com/vuejs/vue-next/blob/48de8a42b7fed7a03f7f1ff5d53d6a704252cafe/packages/compiler-core/src/transforms/transformElement.ts#L335\n */\n function markSetupReferenceVariableAsUsed(name: string) {\n if (scriptVariables.has(name)) {\n markVariableAsUsed(name)\n return true\n }\n const camelName = camelize(name)\n if (scriptVariables.has(camelName)) {\n markVariableAsUsed(camelName)\n return true\n }\n const pascalName = capitalize(camelName)\n if (scriptVariables.has(pascalName)) {\n markVariableAsUsed(pascalName)\n return true\n }\n return false\n }\n\n function markVariableAsUsed(nameOrRef: string | Reference) {\n let name: string\n let isValueReference: boolean | undefined\n let isTypeReference: boolean | undefined\n if (typeof nameOrRef === \"string\") {\n name = nameOrRef\n } else {\n name = nameOrRef.id.name\n isValueReference = nameOrRef.isValueReference\n isTypeReference = nameOrRef.isTypeReference\n }\n const variable = scriptVariables.get(name)\n if (!variable || variable.identifiers.length === 0) {\n return\n }\n if (markedVariables.has(name)) {\n return\n }\n markedVariables.add(name)\n\n const reference = new (getEslintScope().Reference)()\n ;(reference as any).vueUsedInTemplate = true // Mark for debugging.\n reference.from = variable.scope\n reference.identifier = variable.identifiers[0]\n reference.isWrite = () => false\n reference.isWriteOnly = () => false\n reference.isRead = () => true\n reference.isReadOnly = () => true\n reference.isReadWrite = () => false\n // For typescript-eslint\n reference.isValueReference = isValueReference\n reference.isTypeReference = isTypeReference\n\n variable.references.push(reference)\n reference.resolved = variable\n\n // This needs to be marked to avoid false positives with `@typescript-eslint/no-unused-vars` and `no-useless-assignment`.\n ;(variable as any).eslintUsed = true\n }\n\n function processVExpressionContainer(node: VExpressionContainer) {\n for (const reference of node.references.filter(\n (ref) => ref.variable == null,\n )) {\n markVariableAsUsed(reference)\n }\n }\n\n function processVElement(node: VElement) {\n if (\n (node.rawName === node.name && NATIVE_TAGS.has(node.rawName)) ||\n BUILTIN_COMPONENTS.has(node.rawName)\n ) {\n return\n }\n if (!markSetupReferenceVariableAsUsed(node.rawName)) {\n // Check namespace\n // https://github.com/vuejs/vue-next/blob/48de8a42b7fed7a03f7f1ff5d53d6a704252cafe/packages/compiler-core/src/transforms/transformElement.ts#L306\n const dotIndex = node.rawName.indexOf(\".\")\n if (dotIndex > 0) {\n markSetupReferenceVariableAsUsed(\n node.rawName.slice(0, dotIndex),\n )\n }\n }\n }\n\n function processVAttribute(node: VAttribute | VDirective) {\n if (node.directive) {\n if (BUILTIN_DIRECTIVES.has(node.key.name.name)) {\n return\n }\n markSetupReferenceVariableAsUsed(`v-${node.key.name.rawName}`)\n } else if (node.key.name === \"ref\" && node.value) {\n markVariableAsUsed(node.value.value)\n }\n }\n\n if (templateBody) {\n // Analyze `<template>`\n traverseNodes(templateBody, {\n enterNode(node) {\n if (node.type === \"VExpressionContainer\") {\n processVExpressionContainer(node)\n } else if (node.type === \"VElement\") {\n processVElement(node)\n } else if (node.type === \"VAttribute\") {\n processVAttribute(node)\n }\n },\n leaveNode() {\n /* noop */\n },\n })\n }\n\n for (const child of df.children) {\n if (child.type === \"VElement\") {\n if (isScriptSetupElement(child)) {\n // Analyze <script setup lang=\"ts\" generic=\"...\">\n const generic = findGenericDirective(child)\n if (generic) {\n processVExpressionContainer(generic.value)\n }\n } else if (child.name === \"style\") {\n // Analyze CSS v-bind()\n for (const node of child.children) {\n if (node.type === \"VExpressionContainer\") {\n processVExpressionContainer(node)\n }\n }\n }\n }\n }\n}\n\n/**\n * Analyze <script setup> variables.\n * - Analyze compiler macros.\n * If compiler macros were used, add these variables as global variables.\n * - Generic variables.\n * If defined generics are used, add these variables as global variables.\n */\nfunction analyzeScriptSetupVariables(\n scopeManager: escopeTypes.ScopeManager,\n df: VDocumentFragment,\n parserOptions: ParserOptions,\n) {\n const globalScope = scopeManager.globalScope\n if (!globalScope) {\n return\n }\n const customMacros = new Set(\n parserOptions.vueFeatures?.customMacros &&\n Array.isArray(parserOptions.vueFeatures.customMacros)\n ? parserOptions.vueFeatures.customMacros\n : [],\n )\n\n const genericDefineNames = new Set<string>()\n const scriptElements = df.children.filter(isScriptElement)\n const scriptSetupElement = scriptElements.find(isScriptSetupElement)\n if (scriptSetupElement && findGenericDirective(scriptSetupElement)) {\n for (const variable of scriptSetupElement.variables) {\n if (variable.kind === \"generic\") {\n genericDefineNames.add(variable.id.name)\n }\n }\n }\n\n const newThrough: escopeTypes.Reference[] = []\n for (const reference of globalScope.through) {\n if (\n COMPILER_MACROS_AT_ROOT.has(reference.identifier.name) ||\n customMacros.has(reference.identifier.name)\n ) {\n if (\n reference.from.type === \"global\" ||\n reference.from.type === \"module\"\n ) {\n addCompilerMacroVariable(reference)\n // This reference is removed from `Scope#through`.\n continue\n }\n }\n if (genericDefineNames.has(reference.identifier.name)) {\n addGenericVariable(reference)\n // This reference is removed from `Scope#through`.\n continue\n }\n\n newThrough.push(reference)\n }\n\n globalScope.through = newThrough\n\n function addCompilerMacroVariable(reference: escopeTypes.Reference) {\n addVariable(globalScope, reference)\n }\n\n function addGenericVariable(reference: escopeTypes.Reference) {\n addVariable(globalScope, reference)\n }\n}\n\nfunction addVariable(\n scope: escopeTypes.Scope,\n reference: escopeTypes.Reference,\n) {\n const name = reference.identifier.name\n let variable = scope.set.get(name)\n if (!variable) {\n variable = new (getEslintScope().Variable)()\n variable.name = name\n variable.scope = scope\n scope.variables.push(variable)\n scope.set.set(name, variable)\n }\n // Links the variable and the reference.\n reference.resolved = variable\n variable.references.push(reference)\n}\n","","/**\n * @author Toru Nagashima <https://github.com/mysticatea>\n * @copyright 2017 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\nimport * as path from \"path\"\nimport * as AST from \"./ast/index\"\nimport { LocationCalculatorForHtml } from \"./common/location-calculator\"\nimport { HTMLParser, HTMLTokenizer } from \"./html/index\"\nimport { parseScript, parseScriptElement } from \"./script/index\"\nimport * as services from \"./parser-services\"\nimport type { ParserOptions } from \"./common/parser-options\"\nimport { getScriptParser, getParserLangFromSFC } from \"./common/parser-options\"\nimport { parseScriptSetupElements } from \"./script-setup/index\"\nimport { LinesAndColumns } from \"./common/lines-and-columns\"\nimport type { VElement } from \"./ast/index\"\nimport { DEFAULT_ECMA_VERSION } from \"./script-setup/parser-options\"\nimport {\n getLang,\n isScriptElement,\n isScriptSetupElement,\n isStyleElement,\n isTemplateElement,\n} from \"./common/ast-utils\"\nimport { parseStyleElements } from \"./style/index\"\nimport { analyzeScope } from \"./script/scope-analyzer\"\nimport { analyzeScriptSetupScope } from \"./script-setup/scope-analyzer\"\nimport { name, version } from \"../package.json\" with { type: \"json\" }\n\nconst STARTS_WITH_LT = /^\\s*</u\n\n/**\n * Check whether the code is a Vue.js component.\n * @param code The source code to check.\n * @param options The parser options.\n * @returns `true` if the source code is a Vue.js component.\n */\nfunction isVueFile(code: string, options: ParserOptions): boolean {\n const filePath = options.filePath || \"unknown.js\"\n return path.extname(filePath) === \".vue\" || STARTS_WITH_LT.test(code)\n}\n\n/**\n * Parse the given source code.\n * @param code The source code to parse.\n * @param parserOptions The parser options.\n * @returns The parsing result.\n */\nexport function parseForESLint(\n code: string,\n parserOptions: any,\n): AST.ESLintExtendedProgram {\n const options: ParserOptions = {\n comment: true,\n loc: true,\n range: true,\n tokens: true,\n ...parserOptions,\n }\n\n let result: AST.ESLintExtendedProgram\n let document: AST.VDocumentFragment | null\n let locationCalculator: LocationCalculatorForHtml | null\n if (!isVueFile(code, options)) {\n result = parseAsScript(code, options)\n document = null\n locationCalculator = null\n } else {\n ;({ result, document, locationCalculator } = parseAsSFC(code, options))\n }\n\n result.services = {\n ...result.services,\n ...services.define(code, result.ast, document, locationCalculator, {\n parserOptions: options,\n }),\n }\n\n return result\n}\n\n/**\n * Parse the given source code.\n * @param code The source code to parse.\n * @param options The parser options.\n * @returns The parsing result.\n */\nexport function parse(code: string, options?: any): AST.ESLintProgram {\n return parseForESLint(code, options).ast\n}\n\nexport { AST }\n\n// eslint-disable-next-line complexity -- ignore\nfunction parseAsSFC(code: string, options: ParserOptions) {\n const optionsForTemplate = {\n ...options,\n ecmaVersion: options.ecmaVersion ?? DEFAULT_ECMA_VERSION,\n }\n const skipParsingScript = options.parser === false\n const tokenizer = new HTMLTokenizer(code, optionsForTemplate)\n const rootAST = new HTMLParser(tokenizer, optionsForTemplate).parse()\n\n const locationCalculator = new LocationCalculatorForHtml(\n tokenizer.gaps,\n tokenizer.lineTerminators,\n )\n const scripts = rootAST.children.filter(isScriptElement)\n const template = rootAST.children.find(isTemplateElement)\n const templateLang = getLang(template) || \"html\"\n const hasTemplateTokenizer = options?.templateTokenizer?.[templateLang]\n const concreteInfo: AST.HasConcreteInfo = {\n tokens: rootAST.tokens,\n comments: rootAST.comments,\n errors: rootAST.errors,\n }\n const templateBody =\n template != null && (templateLang === \"html\" || hasTemplateTokenizer)\n ? Object.assign(template, concreteInfo)\n : undefined\n\n const scriptParser = getScriptParser(options.parser, () =>\n getParserLangFromSFC(rootAST),\n )\n let result: AST.ESLintExtendedProgram\n let scriptSetup: VElement | undefined\n if (skipParsingScript || !scripts.length) {\n result = parseScript(\"\", {\n ...options,\n ecmaVersion: options.ecmaVersion ?? DEFAULT_ECMA_VERSION,\n parser: scriptParser,\n })\n } else if (\n scripts.length === 2 &&\n (scriptSetup = scripts.find(isScriptSetupElement))\n ) {\n result = parseScriptSetupElements(\n scriptSetup,\n scripts.find((e) => e !== scriptSetup)!,\n code,\n new LinesAndColumns(tokenizer.lineTerminators),\n {\n ...options,\n parser: scriptParser,\n },\n )\n } else {\n result = parseScriptElement(\n scripts[0],\n code,\n new LinesAndColumns(tokenizer.lineTerminators),\n {\n ...options,\n parser: scriptParser,\n },\n )\n }\n\n if (options.vueFeatures?.styleCSSVariableInjection ?? true) {\n const styles = rootAST.children.filter(isStyleElement)\n parseStyleElements(styles, locationCalculator, {\n ...options,\n parser: getScriptParser(options.parser, function* () {\n yield \"<template>\"\n yield getParserLangFromSFC(rootAST)\n }),\n project: undefined,\n projectService: undefined,\n })\n }\n result.ast.templateBody = templateBody\n\n if (options.eslintScopeManager) {\n if (scripts.some(isScriptSetupElement)) {\n if (!result.scopeManager) {\n result.scopeManager = analyzeScope(result.ast, options)\n }\n analyzeScriptSetupScope(\n result.scopeManager,\n templateBody,\n rootAST,\n options,\n )\n }\n }\n\n return {\n result,\n locationCalculator,\n document: rootAST,\n }\n}\n\nfunction parseAsScript(code: string, options: ParserOptions) {\n return parseScript(code, {\n ...options,\n ecmaVersion: options.ecmaVersion ?? DEFAULT_ECMA_VERSION,\n parser: getScriptParser(options.parser, () => {\n const ext = (\n path.extname(options.filePath || \"unknown.js\").toLowerCase() ||\n \"\"\n )\n // remove dot\n .slice(1)\n if (/^[jt]sx$/u.test(ext)) {\n return [ext, ext.slice(0, -1)]\n }\n\n return ext\n }),\n })\n}\n\nexport const meta = {\n name,\n version,\n}\n"],"mappings":"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AAC,KAAK;GAAC,aAAY,CAAC,KAAK;GAAC,aAAY,CAAC,MAAM;GAAC,aAAY,CAAC,MAAM;GAAC,aAAY,CAAC,IAAI;GAAC,aAAY,CAAC,KAAK;GAAC,aAAY,CAAC,MAAM;GAAC,aAAY,CAAC,KAAK;GAAC,aAAY,CAAC,MAAM;GAAC,aAAY,CAAC,KAAK;GAAC,aAAY,CAAC,KAAK;GAAC,aAAY,CAAC,KAAK;GAAC,aAAY,CAAC,KAAK;GAAC,aAAY,CAAC,MAAM;GAAC,aAAY,CAAC,MAAM;GAAC,aAAY,CAAC,KAAK;GAAC,aAAY,CAAC,KAAK;GAAC,aAAY,CAAC,MAAM;GAAC,aAAY,CAAC,MAAM;GAAC,aAAY,CAAC,MAAM;GAAC,aAAY,CAAC,MAAM;GAAC,aAAY,CAAC,MAAM;GAAC,aAAY,CAAC,MAAM;GAAC,aAAY,CAAC,MAAM;GAAC,aAAY,CAAC,KAAK;GAAC,aAAY,CAAC,KAAK;GAAC,aAAY,CAAC,MAAM;GAAC,aAAY,CAAC,KAAK;GAAC,aAAY,CAAC,KAAK;GAAC,aAAY,CAAC,MAAM;GAAC,aAAY,CAAC,MAAM;GAAC,aAAY,CAAC,MAAM;GAAC,aAAY,CAAC,MAAM;GAAC,aAAY,CAAC,MAAM;GAAC,aAAY,CAAC,KAAK;GAAC,aAAY,CAAC,MAAM;GAAC,aAAY,CAAC,KAAK;GAAC,aAAY,CAAC,MAAM;GAAC,aAAY,CAAC,KAAK;GAAC,aAAY,CAAC,KAAK;GAAC,aAAY,CAAC,KAAK;GAAC,aAAY,CAAC,OAAM,IAAI;GAAC,aAAY,CAAC,MAAK,IAAI;GAAC,aAAY,CAAC,MAAM;GAAC,aAAY,CAAC,KAAK;GAAC,aAAY,CAAC,MAAM;GAAC,aAAY,CAAC,MAAM;GAAC,aAAY,CAAC,MAAM;GAAC,aAAY,CAAC,KAAK;GAAC,aAAY,CAAC,KAAK;GAAC,aAAY,CAAC,KAAK;GAAC,aAAY,CAAC,KAAK;GAAC,aAAY,CAAC,MAAM;GAAC,aAAY,CAAC,KAAK;GAAC,aAAY,CAAC,MAAM;GAAC,aAAY,CAAC,MAAM;GAAC,aAAY,CAAC,MAAM;GAAC,aAAY,CAAC,KAAK;GAAC,aAAY,CAAC,KAAK;GAAC,aAAY,CAAC,MAAM;GAAC,aAAY,CAAC,KAAK;GAAC,aAAY,CAAC,KAAK;GAAC,aAAY,CAAC,KAAK;GAAC,aAAY,CAAC,MAAM;GAAC,aAAY,CAAC,KAAK;GAAC,aAAY,CAAC,KAAK;GAAC,aAAY,CAAC,IAAI;GAAC,aAAY,CAAC,KAAK;GAAC,aAAY,CAAC,MAAM;GAAC,aAAY,CAAC,KAAK;GAAC,aAAY,CAAC,MAAM;GAAC,aAAY,CAAC,KAAK;GAAC,aAAY,CAAC,KAAK;GAAC,aAAY,CAAC,KAAK;GAAC,aAAY,CAAC,KAAK;GAAC,aAAY,CAAC,IAAI;GAAC,aAAY,CAAC,IAAI;GAAC;EAAC;CAAC;EAAC,UAAS;EAAE,YAAW;GAAC,YAAW,CAAC,KAAK;GAAC,YAAW,CAAC,KAAK;GAAC,YAAW,CAAC,KAAK;GAAC,YAAW,CAAC,IAAI;GAAC,YAAW,CAAC,KAAK;GAAC,YAAW,CAAC,KAAK;GAAC,YAAW,CAAC,KAAK;GAAC,YAAW,CAAC,IAAI;GAAC,YAAW,CAAC,KAAK;GAAC,YAAW,CAAC,KAAK;GAAC,YAAW,CAAC,GAAG;GAAC,YAAW,CAAC,KAAK;GAAC,YAAW,CAAC,KAAK;GAAC,YAAW,CAAC,IAAI;GAAC,YAAW,CAAC,KAAK;GAAC,YAAW,CAAC,KAAK;GAAC,YAAW,CAAC,KAAK;GAAC,YAAW,CAAC,KAAK;GAAC,YAAW,CAAC,IAAI;GAAC,YAAW,CAAC,KAAK;GAAC,YAAW,CAAC,KAAK;GAAC,YAAW,CAAC,KAAK;GAAC,YAAW,CAAC,KAAK;GAAC,YAAW,CAAC,KAAK;GAAC,YAAW,CAAC,KAAK;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,KAAK;GAAC,YAAW,CAAC,KAAK;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,KAAK;GAAC,YAAW,CAAC,MAAK,KAAK;GAAC,YAAW,CAAC,KAAK;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,KAAK;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,KAAK;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,KAAK;GAAC,YAAW,CAAC,IAAI;GAAC,YAAW,CAAC,KAAK;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,IAAI;GAAC,YAAW,CAAC,KAAK;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,KAAK;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,KAAK;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,KAAK;GAAC,YAAW,CAAC,KAAK;GAAC,YAAW,CAAC,KAAK;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,KAAK;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,KAAK;GAAC,YAAW,CAAC,KAAK;GAAC,YAAW,CAAC,KAAK;GAAC,YAAW,CAAC,KAAK;GAAC,YAAW,CAAC,KAAK;GAAC,YAAW,CAAC,KAAK;GAAC,YAAW,CAAC,KAAK;GAAC,YAAW,CAAC,KAAK;GAAC,YAAW,CAAC,KAAK;GAAC,YAAW,CAAC,KAAK;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,OAAM,IAAI;GAAC,YAAW,CAAC,KAAK;GAAC,YAAW,CAAC,KAAK;GAAC,YAAW,CAAC,MAAK,KAAK;GAAC,YAAW,CAAC,OAAM,IAAI;GAAC,YAAW,CAAC,MAAK,KAAK;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,MAAK,KAAK;GAAC,YAAW,CAAC,MAAK,KAAK;GAAC,YAAW,CAAC,KAAK;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,IAAI;GAAC,YAAW,CAAC,KAAK;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,KAAK;GAAC,YAAW,CAAC,KAAK;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,KAAK;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,KAAK;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,KAAK;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,KAAK;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,KAAK;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,KAAK;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,KAAK;GAAC,YAAW,CAAC,IAAI;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,MAAM;GAAC,YAAW,CAAC,KAAK;GAAC;EAAC;CAAC;EAAC,UAAS;EAAE,YAAW;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,GAAG;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,GAAG;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,GAAG;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,GAAG;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,GAAG;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,GAAG;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,MAAK,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,MAAK,IAAI;GAAC,WAAU,CAAC,OAAM,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,OAAM,IAAI;GAAC,WAAU,CAAC,MAAK,IAAI;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,GAAG;GAAC,WAAU,CAAC,GAAG;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,GAAG;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,MAAK,MAAM;GAAC,WAAU,CAAC,MAAK,MAAM;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,OAAM,MAAM;GAAC,WAAU,CAAC,MAAK,MAAM;GAAC,WAAU,CAAC,OAAM,MAAM;GAAC,WAAU,CAAC,MAAK,MAAM;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,MAAM;GAAC,WAAU,CAAC,KAAK;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,IAAI;GAAC,WAAU,CAAC,KAAK;GAAC;EAAC;CAAC;EAAC,UAAS;EAAE,YAAW;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,GAAG;GAAC,UAAS,CAAC,GAAG;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,KAAI,IAAI;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,GAAG;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,OAAM,MAAM;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,MAAK,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,MAAK,IAAI;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,MAAK,IAAI;GAAC,UAAS,CAAC,MAAK,IAAI;GAAC,UAAS,CAAC,MAAK,IAAI;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,MAAK,IAAI;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,MAAK,IAAI;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,OAAM,IAAI;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,OAAM,IAAI;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,MAAK,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,GAAG;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,OAAM,MAAM;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,MAAK,KAAK;GAAC,UAAS,CAAC,MAAK,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,MAAM;GAAC,UAAS,CAAC,KAAK;GAAC,UAAS,CAAC,IAAI;GAAC,UAAS,CAAC,IAAI;GAAC;EAAC;CAAC;EAAC,UAAS;EAAE,YAAW;GAAC,SAAQ,CAAC,IAAI;GAAC,SAAQ,CAAC,IAAI;GAAC,SAAQ,CAAC,OAAO;GAAC,SAAQ,CAAC,IAAI;GAAC,SAAQ,CAAC,OAAO;GAAC,SAAQ,CAAC,IAAI;GAAC,SAAQ,CAAC,MAAM;GAAC,SAAQ,CAAC,IAAI;GAAC,SAAQ,CAAC,OAAO;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,IAAI;GAAC,SAAQ,CAAC,IAAI;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,OAAO;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,OAAO;GAAC,SAAQ,CAAC,OAAO;GAAC,SAAQ,CAAC,IAAI;GAAC,SAAQ,CAAC,IAAI;GAAC,SAAQ,CAAC,OAAO;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,MAAM;GAAC,SAAQ,CAAC,IAAI;GAAC,SAAQ,CAAC,OAAO;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,IAAI;GAAC,SAAQ,CAAC,OAAO;GAAC,SAAQ,CAAC,OAAO;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,IAAI;GAAC,SAAQ,CAAC,IAAI;GAAC,SAAQ,CAAC,OAAO;GAAC,SAAQ,CAAC,IAAI;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,IAAI;GAAC,SAAQ,CAAC,OAAO;GAAC,SAAQ,CAAC,OAAO;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,OAAO;GAAC,SAAQ,CAAC,OAAO;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,MAAM;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,OAAO;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,OAAO;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,OAAO;GAAC,SAAQ,CAAC,IAAI;GAAC,SAAQ,CAAC,OAAO;GAAC,SAAQ,CAAC,OAAO;GAAC,SAAQ,CAAC,IAAI;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,OAAO;GAAC,SAAQ,CAAC,GAAG;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,OAAO;GAAC,SAAQ,CAAC,MAAM;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,OAAO;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,OAAO;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,IAAI;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,OAAO;GAAC,SAAQ,CAAC,OAAO;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,IAAI;GAAC,SAAQ,CAAC,OAAO;GAAC,SAAQ,CAAC,IAAI;GAAC,SAAQ,CAAC,OAAO;GAAC,SAAQ,CAAC,IAAI;GAAC,SAAQ,CAAC,MAAM;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,OAAO;GAAC,SAAQ,CAAC,OAAO;GAAC,SAAQ,CAAC,OAAO;GAAC,SAAQ,CAAC,OAAO;GAAC,SAAQ,CAAC,OAAO;GAAC,SAAQ,CAAC,OAAO;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,OAAO;GAAC,SAAQ,CAAC,OAAO;GAAC,SAAQ,CAAC,IAAI;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,IAAI;GAAC,SAAQ,CAAC,IAAI;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,OAAO;GAAC,SAAQ,CAAC,IAAI;GAAC,SAAQ,CAAC,IAAI;GAAC,SAAQ,CAAC,IAAI;GAAC,SAAQ,CAAC,MAAM;GAAC,SAAQ,CAAC,MAAM;GAAC,SAAQ,CAAC,MAAM;GAAC,SAAQ,CAAC,OAAO;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,GAAG;GAAC,SAAQ,CAAC,IAAI;GAAC,SAAQ,CAAC,OAAO;GAAC,SAAQ,CAAC,IAAI;GAAC,SAAQ,CAAC,MAAM;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,IAAI;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,OAAO;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,OAAO;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,GAAG;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,MAAK,MAAM;GAAC,SAAQ,CAAC,IAAI;GAAC,SAAQ,CAAC,IAAI;GAAC,SAAQ,CAAC,IAAI;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,MAAM;GAAC,SAAQ,CAAC,IAAI;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,OAAO;GAAC,SAAQ,CAAC,IAAI;GAAC,SAAQ,CAAC,OAAO;GAAC,SAAQ,CAAC,MAAM;GAAC,SAAQ,CAAC,MAAM;GAAC,SAAQ,CAAC,MAAK,MAAM;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,MAAM;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,KAAK;GAAC,S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AAG;GAAC,SAAQ,CAAC,MAAM;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,MAAM;GAAC,SAAQ,CAAC,MAAM;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,MAAM;GAAC,SAAQ,CAAC,MAAM;GAAC,SAAQ,CAAC,OAAO;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,OAAO;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,MAAM;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,IAAI;GAAC,SAAQ,CAAC,IAAI;GAAC,SAAQ,CAAC,IAAI;GAAC,SAAQ,CAAC,MAAM;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,IAAI;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,IAAI;GAAC,SAAQ,CAAC,IAAI;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,MAAM;GAAC,SAAQ,CAAC,OAAO;GAAC,SAAQ,CAAC,MAAM;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,OAAO;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,MAAM;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,IAAI;GAAC,SAAQ,CAAC,OAAO;GAAC,SAAQ,CAAC,IAAI;GAAC,SAAQ,CAAC,OAAO;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,IAAI;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,MAAM;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,IAAI;GAAC,SAAQ,CAAC,OAAO;GAAC,SAAQ,CAAC,OAAO;GAAC,SAAQ,CAAC,OAAO;GAAC,SAAQ,CAAC,OAAO;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,MAAM;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,OAAO;GAAC,SAAQ,CAAC,OAAO;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,KAAK;GAAC,SAAQ,CAAC,K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AAC,IAAI;GAAC,QAAO,CAAC,KAAK;GAAC,QAAO,CAAC,OAAO;GAAC,QAAO,CAAC,MAAM;GAAC,QAAO,CAAC,KAAK;GAAC,QAAO,CAAC,MAAM;GAAC,QAAO,CAAC,IAAI;GAAC,QAAO,CAAC,IAAI;GAAC,QAAO,CAAC,IAAI;GAAC,QAAO,CAAC,IAAI;GAAC,QAAO,CAAC,KAAK;GAAC,QAAO,CAAC,OAAO;GAAC,QAAO,CAAC,MAAM;GAAC,QAAO,CAAC,MAAM;GAAC,QAAO,CAAC,KAAK;GAAC,QAAO,CAAC,KAAK;GAAC,QAAO,CAAC,KAAK;GAAC,QAAO,CAAC,MAAM;GAAC,QAAO,CAAC,OAAO;GAAC,QAAO,CAAC,KAAK;GAAC,QAAO,CAAC,MAAM;GAAC,QAAO,CAAC,MAAM;GAAC,QAAO,CAAC,MAAM;GAAC,QAAO,CAAC,KAAK;GAAC,QAAO,CAAC,MAAM;GAAC,QAAO,CAAC,OAAO;GAAC,QAAO,CAAC,KAAK;GAAC,QAAO,CAAC,KAAK;GAAC,QAAO,CAAC,OAAO;GAAC,QAAO,CAAC,KAAK;GAAC,QAAO,CAAC,IAAI;GAAC,QAAO,CAAC,KAAK;GAAC,QAAO,CAAC,OAAO;GAAC,QAAO,CAAC,KAAK;GAAC,QAAO,CAAC,OAAO;GAAC,QAAO,CAAC,MAAM;GAAC,QAAO,CAAC,MAAM;GAAC,QAAO,CAAC,MAAM;GAAC,QAAO,CAAC,KAAK;GAAC,QAAO,CAAC,KAAK;GAAC,QAAO,CAAC,KAAK;GAAC,QAAO,CAAC,MAAM;GAAC,QAAO,CAAC,OAAO;GAAC,QAAO,CAAC,MAAM;GAAC,QAAO,CAAC,KAAK;GAAC,QAAO,CAAC,MAAM;GAAC,QAAO,CAAC,KAAK;GAAC,QAAO,CAAC,KAAK;GAAC,QAAO,CAAC,KAAK;GAAC,QAAO,CAAC,IAAI;GAAC,QAAO,CAAC,KAAK;GAAC,QAAO,CAAC,KAAK;GAAC,QAAO,CAAC,OAAO;GAAC,QAAO,CAAC,KAAK;GAAC,QAAO,CAAC,KAAK;GAAC,QAAO,CAAC,MAAK,IAAI;GAAC,QAAO,CAAC,MAAK,KAAK;GAAC,QAAO,CAAC,MAAK,IAAI;GAAC,QAAO,CAAC,MAAK,KAAK;GAAC,QAAO,CAAC,KAAK;GAAC,QAAO,CAAC,IAAI;GAAC,QAAO,CAAC,KAAK;GAAC,QAAO,CAAC,OAAO;GAAC,QAAO,CAAC,MAAK,IAAI;GAAC,QAAO,CAAC,KAAK;GAAC,QAAO,CAAC,KAAK;GAAC,QAAO,CAAC,KAAK;GAAC,QAAO,CAAC,KAAK;GAAC,QAAO,CAAC,MAAK,IAAI;GAAC,QAAO,CAAC,KAAK;GAAC,QAAO,CAAC,KAAK;GAAC,QAAO,CAAC,IAAI;GAAC,QAAO,CAAC,KAAK;GAAC,QAAO,CAAC,KAAK;GAAC,QAAO,CAAC,GAAG;GAAC,QAAO,CAAC,KAAK;GAAC,QAAO,CAAC,OAAO;GAAC,QAAO,CAAC,MAAM;GAAC,QAAO,CAAC,IAAI;GAAC,QAAO,CAAC,MAAM;GAAC,QAAO,CAAC,MAAM;GAAC,QAAO,CAAC,IAAI;GAAC,QAAO,CAAC,IAAI;GAAC,QAAO,CAAC,MAAM;GAAC,QAAO,CAAC,IAAI;GAAC,QAAO,CAAC,KAAK;GAAC,QAAO,CAAC,IAAI;GAAC,QAAO,CAAC,KAAK;GAAC,QAAO,CAAC,OAAO;GAAC,QAAO,CAAC,IAAI;GAAC,QAAO,CAAC,IAAI;GAAC,QAAO,CAAC,MAAM;GAAC,QAAO,CAAC,MAAM;GAAC,QAAO,CAAC,IAAI;GAAC,QAAO,CAAC,OAAO;GAAC,QAAO,CAAC,GAAG;GAAC,QAAO,CAAC,KAAK;GAAC,QAAO,CAAC,IAAI;GAAC,QAAO,CAAC,OAAO;GAAC,QAAO,CAAC,IAAI;GAAC,QAAO,CAAC,KAAK;GAAC,QAAO,CAAC,KAAK;GAAC,QAAO,CAAC,MAAM;GAAC,QAAO,CAAC,MAAM;GAAC,QAAO,CAAC,KAAK;GAAC,QAAO,CAAC,IAAI;GAAC,QAAO,CAAC,OAAO;GAAC,QAAO,CAAC,IAAI;GAAC,QAAO,CAAC,KAAK;GAAC,QAAO,CAAC,MAAM;GAAC,QAAO,CAAC,GAAG;GAAC,QAAO,CAAC,KAAK;GAAC,QAAO,CAAC,KAAK;GAAC,QAAO,CAAC,KAAK;GAAC,QAAO,CAAC,IAAI;GAAC,QAAO,CAAC,IAAI;GAAC,QAAO,CAAC,IAAI;GAAC,QAAO,CAAC,KAAK;GAAC,QAAO,CAAC,IAAI;G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"}