@happyvertical/smrt-app-mcp 0.57.42 → 0.57.44
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +6 -0
- package/README.md +41 -0
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +12 -4
- package/dist/auth.js.map +1 -1
- package/dist/chunks/errors-XG_zn1pP.js +73 -0
- package/dist/chunks/errors-XG_zn1pP.js.map +1 -0
- package/dist/chunks/identity-BNzyRsWf.js +14 -0
- package/dist/chunks/identity-BNzyRsWf.js.map +1 -0
- package/dist/chunks/{protocol-CoCuR_w7.js → protocol-BRQji5k_.js} +110 -48
- package/dist/chunks/protocol-BRQji5k_.js.map +1 -0
- package/dist/errors.d.ts +42 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/host-operations.d.ts +117 -0
- package/dist/host-operations.d.ts.map +1 -0
- package/dist/host-operations.js +160 -0
- package/dist/host-operations.js.map +1 -0
- package/dist/identity.d.ts +11 -0
- package/dist/identity.d.ts.map +1 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/manifest.json +1 -1
- package/dist/server.d.ts +46 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/smrt-knowledge.json +6 -5
- package/dist/sveltekit.d.ts.map +1 -1
- package/dist/sveltekit.js +5 -3
- package/dist/sveltekit.js.map +1 -1
- package/dist/workflow-tools.d.ts +8 -0
- package/dist/workflow-tools.d.ts.map +1 -1
- package/package.json +7 -3
- package/dist/chunks/protocol-CoCuR_w7.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol-BRQji5k_.js","names":["$","isAsciiAlphaNumeric","$","$$","$","$","$","TN","foreignContent.isIntegrationPoint","doctype.getDocumentMode","doctype.isConforming","foreignContent.causesExit","$","info"],"sources":["../../src/workflow-tools.ts","../../../../node_modules/.pnpm/parse5@8.0.1/node_modules/parse5/dist/common/unicode.js","../../../../node_modules/.pnpm/parse5@8.0.1/node_modules/parse5/dist/common/error-codes.js","../../../../node_modules/.pnpm/parse5@8.0.1/node_modules/parse5/dist/tokenizer/preprocessor.js","../../../../node_modules/.pnpm/parse5@8.0.1/node_modules/parse5/dist/common/token.js","../../../../node_modules/.pnpm/entities@8.0.0/node_modules/entities/dist/decode-codepoint.js","../../../../node_modules/.pnpm/entities@8.0.0/node_modules/entities/dist/internal/decode-shared.js","../../../../node_modules/.pnpm/entities@8.0.0/node_modules/entities/dist/generated/decode-data-html.js","../../../../node_modules/.pnpm/entities@8.0.0/node_modules/entities/dist/internal/bin-trie-flags.js","../../../../node_modules/.pnpm/entities@8.0.0/node_modules/entities/dist/decode.js","../../../../node_modules/.pnpm/parse5@8.0.1/node_modules/parse5/dist/common/html.js","../../../../node_modules/.pnpm/parse5@8.0.1/node_modules/parse5/dist/tokenizer/index.js","../../../../node_modules/.pnpm/parse5@8.0.1/node_modules/parse5/dist/parser/open-element-stack.js","../../../../node_modules/.pnpm/parse5@8.0.1/node_modules/parse5/dist/parser/formatting-element-list.js","../../../../node_modules/.pnpm/parse5@8.0.1/node_modules/parse5/dist/tree-adapters/default.js","../../../../node_modules/.pnpm/parse5@8.0.1/node_modules/parse5/dist/common/doctype.js","../../../../node_modules/.pnpm/parse5@8.0.1/node_modules/parse5/dist/common/foreign-content.js","../../../../node_modules/.pnpm/parse5@8.0.1/node_modules/parse5/dist/parser/index.js","../../../../node_modules/.pnpm/parse5@8.0.1/node_modules/parse5/dist/serializer/index.js","../../../../node_modules/.pnpm/parse5@8.0.1/node_modules/parse5/dist/index.js","../../src/resources.ts","../../src/tools.ts","../../src/server.ts","../../src/defaults.ts","../../src/protocol.ts"],"sourcesContent":["/** Explicit application workflow tools composed into an app MCP catalog. */\nimport {\n assertMcpJsonSchemaSafety,\n type MCPResponse,\n type MCPTool,\n type MCPToolIcon,\n mcpToolAnnotationsFor,\n type ToolEffect,\n type ToolJsonSchema,\n} from '@happyvertical/smrt-core/generators/mcp';\nimport type { McpToolErrorMapper } from './errors.js';\nimport type { McpAppPrincipal } from './server.js';\n\n/** Trusted server context supplied to an application-owned workflow handler. */\nexport interface McpWorkflowToolContext {\n arguments: Record<string, unknown>;\n principal: McpAppPrincipal | null;\n}\n\n/** Portable UI visibility hints. They are host presentation metadata only. */\nexport type McpWorkflowToolVisibility = 'app' | 'model';\n\n/** One explicitly declared, principal-bound application workflow tool. */\nexport interface McpWorkflowToolDefinition {\n name: string;\n description: string;\n inputSchema: ToolJsonSchema;\n outputSchema: ToolJsonSchema;\n /** Required canonical classification; names and UI metadata never infer it. */\n effect: ToolEffect;\n idempotent: boolean;\n openWorld: boolean;\n title?: string;\n icons?: readonly MCPToolIcon[];\n /**\n * Portable MCP Apps presentation metadata. Resources themselves arrive in\n * M3; visibility-only declarations are useful for host entrypoints.\n */\n ui?: {\n resourceUri?: string;\n visibility?: readonly McpWorkflowToolVisibility[];\n };\n /** Preserved extension metadata. It is never used as an authorization input. */\n metadata?: Record<string, unknown>;\n execute(context: McpWorkflowToolContext): MCPResponse | Promise<MCPResponse>;\n /**\n * Map a handler failure to a safe `{ code, message }` for the agent. A\n * thrown `McpToolError` is already safe and wins; other errors reach this\n * mapper. Return nothing (or throw) to keep the generic failure message.\n */\n mapError?: McpToolErrorMapper;\n}\n\nexport interface McpWorkflowTool {\n tool: MCPTool;\n execute: McpWorkflowToolDefinition['execute'];\n mapError?: McpToolErrorMapper;\n}\n\nconst TOOL_NAME = /^[a-z][a-z0-9_]{0,63}$/;\n\nfunction assertRecord(\n value: unknown,\n label: string,\n): asserts value is Record<string, unknown> {\n if (\n !value ||\n typeof value !== 'object' ||\n Array.isArray(value) ||\n (Object.getPrototypeOf(value) !== Object.prototype &&\n Object.getPrototypeOf(value) !== null)\n ) {\n throw new TypeError(`${label} must be an object.`);\n }\n}\n\n/** MCP tools-list descriptors require input and output schema object roots. */\nfunction assertMcpToolSchemaRoot(schema: ToolJsonSchema, label: string): void {\n if (schema.type !== 'object') {\n throw new TypeError(`${label} must declare type: 'object'.`);\n }\n}\n\nconst MAX_METADATA_DEPTH = 16;\nconst MAX_METADATA_BYTES = 65_536;\n\nfunction assertJsonMetadata(\n value: unknown,\n depth = 0,\n ancestors = new WeakSet<object>(),\n): void {\n if (depth > MAX_METADATA_DEPTH) {\n throw new TypeError(\n `Workflow tool metadata exceeds ${MAX_METADATA_DEPTH} levels.`,\n );\n }\n if (\n value === null ||\n typeof value === 'string' ||\n typeof value === 'boolean'\n ) {\n return;\n }\n if (typeof value === 'number') {\n if (!Number.isFinite(value)) {\n throw new TypeError('Workflow tool metadata numbers must be finite.');\n }\n return;\n }\n if (Array.isArray(value)) {\n if (ancestors.has(value)) {\n throw new TypeError('Workflow tool metadata must not contain cycles.');\n }\n ancestors.add(value);\n for (const item of value) assertJsonMetadata(item, depth + 1, ancestors);\n ancestors.delete(value);\n return;\n }\n assertRecord(value, 'Workflow tool metadata value');\n if (ancestors.has(value)) {\n throw new TypeError('Workflow tool metadata must not contain cycles.');\n }\n ancestors.add(value);\n for (const item of Object.values(value)) {\n assertJsonMetadata(item, depth + 1, ancestors);\n }\n ancestors.delete(value);\n}\n\nfunction cloneMetadata(\n metadata: Record<string, unknown> | undefined,\n): Record<string, unknown> | undefined {\n if (metadata === undefined) return undefined;\n assertRecord(metadata, 'Workflow tool metadata');\n if (Object.hasOwn(metadata, 'ui')) {\n throw new TypeError(\n 'Workflow tool metadata.ui is reserved; use ui.resourceUri.',\n );\n }\n assertJsonMetadata(metadata);\n const encoded = JSON.stringify(metadata);\n if (new TextEncoder().encode(encoded).byteLength > MAX_METADATA_BYTES) {\n throw new TypeError(\n `Workflow tool metadata exceeds ${MAX_METADATA_BYTES} serialized bytes.`,\n );\n }\n return JSON.parse(encoded) as Record<string, unknown>;\n}\n\nfunction assertResourceUri(resourceUri: string): void {\n let parsed: URL;\n try {\n parsed = new URL(resourceUri);\n } catch {\n throw new TypeError(\n 'Workflow tool ui.resourceUri must be an absolute URI.',\n );\n }\n if (parsed.protocol !== 'ui:' || parsed.username || parsed.password) {\n throw new TypeError(\n 'Workflow tool ui.resourceUri must be a credential-free ui: URI.',\n );\n }\n}\n\nfunction normalizeVisibility(\n visibility: readonly McpWorkflowToolVisibility[] | undefined,\n): McpWorkflowToolVisibility[] | undefined {\n if (visibility === undefined) return undefined;\n if (!Array.isArray(visibility) || visibility.length === 0) {\n throw new TypeError(\n 'Workflow tool ui.visibility must be a non-empty array.',\n );\n }\n const normalized: McpWorkflowToolVisibility[] = [];\n for (const value of visibility) {\n if (value !== 'app' && value !== 'model') {\n throw new TypeError(\n 'Workflow tool ui.visibility contains an unsupported value.',\n );\n }\n if (normalized.includes(value)) {\n throw new TypeError(\n 'Workflow tool ui.visibility must not contain duplicates.',\n );\n }\n normalized.push(value);\n }\n return normalized;\n}\n\nfunction normalizeIcons(\n icons: readonly MCPToolIcon[] | undefined,\n): MCPToolIcon[] | undefined {\n if (icons === undefined) return undefined;\n return icons.map((icon, index) => {\n assertRecord(icon, `Workflow tool icon ${index}`);\n if (typeof icon.src !== 'string' || !icon.src) {\n throw new TypeError(\n `Workflow tool icon ${index} requires a non-empty src.`,\n );\n }\n if (icon.mimeType !== undefined && typeof icon.mimeType !== 'string') {\n throw new TypeError(\n `Workflow tool icon ${index} mimeType must be a string.`,\n );\n }\n if (\n icon.theme !== undefined &&\n icon.theme !== 'light' &&\n icon.theme !== 'dark'\n ) {\n throw new TypeError(`Workflow tool icon ${index} theme is invalid.`);\n }\n if (\n icon.sizes !== undefined &&\n (!Array.isArray(icon.sizes) ||\n icon.sizes.some((size) => typeof size !== 'string'))\n ) {\n throw new TypeError(`Workflow tool icon ${index} sizes must be strings.`);\n }\n return { ...icon, ...(icon.sizes ? { sizes: [...icon.sizes] } : {}) };\n });\n}\n\n/** Validate and materialize an authored workflow as an inert MCP descriptor. */\nexport function createMcpWorkflowTool(\n definition: McpWorkflowToolDefinition,\n): McpWorkflowTool {\n if (typeof definition.name !== 'string' || !TOOL_NAME.test(definition.name)) {\n throw new TypeError(\n 'Workflow tool name must be lowercase snake_case with at most 64 characters.',\n );\n }\n if (\n typeof definition.description !== 'string' ||\n !definition.description.trim()\n ) {\n throw new TypeError('Workflow tool description must be non-empty.');\n }\n if (typeof definition.execute !== 'function') {\n throw new TypeError('Workflow tool execute must be a function.');\n }\n if (\n definition.mapError !== undefined &&\n typeof definition.mapError !== 'function'\n ) {\n throw new TypeError('Workflow tool mapError must be a function.');\n }\n if (!['read', 'write', 'destructive'].includes(definition.effect)) {\n throw new TypeError(\n 'Workflow tool effect must be read, write, or destructive.',\n );\n }\n if (\n typeof definition.idempotent !== 'boolean' ||\n typeof definition.openWorld !== 'boolean'\n ) {\n throw new TypeError(\n 'Workflow tool idempotent and openWorld must be boolean.',\n );\n }\n if (\n definition.title !== undefined &&\n (typeof definition.title !== 'string' || !definition.title.trim())\n ) {\n throw new TypeError('Workflow tool title must be a non-empty string.');\n }\n assertRecord(definition.inputSchema, 'Workflow tool input schema');\n assertRecord(definition.outputSchema, 'Workflow tool output schema');\n assertMcpJsonSchemaSafety(definition.inputSchema);\n assertMcpJsonSchemaSafety(definition.outputSchema);\n assertMcpToolSchemaRoot(definition.inputSchema, 'Workflow tool input schema');\n assertMcpToolSchemaRoot(\n definition.outputSchema,\n 'Workflow tool output schema',\n );\n const metadata = cloneMetadata(definition.metadata);\n if (definition.ui !== undefined) {\n assertRecord(definition.ui, 'Workflow tool ui');\n if (\n definition.ui.resourceUri === undefined &&\n definition.ui.visibility === undefined\n ) {\n throw new TypeError(\n 'Workflow tool ui requires resourceUri or visibility metadata.',\n );\n }\n if (\n definition.ui.resourceUri !== undefined &&\n typeof definition.ui.resourceUri !== 'string'\n ) {\n throw new TypeError('Workflow tool ui.resourceUri must be a string.');\n }\n if (definition.ui.resourceUri !== undefined) {\n assertResourceUri(definition.ui.resourceUri);\n }\n }\n const icons = normalizeIcons(definition.icons);\n const visibility = normalizeVisibility(definition.ui?.visibility);\n const meta = {\n ...(metadata ?? {}),\n ...(definition.ui !== undefined\n ? {\n ui: {\n ...(definition.ui.resourceUri\n ? { resourceUri: definition.ui.resourceUri }\n : {}),\n ...(visibility ? { visibility } : {}),\n },\n }\n : {}),\n };\n return {\n tool: {\n name: definition.name,\n description: definition.description,\n inputSchema: definition.inputSchema,\n outputSchema: definition.outputSchema,\n annotations: mcpToolAnnotationsFor(\n definition.effect,\n definition.idempotent,\n definition.openWorld,\n ),\n ...(definition.title ? { title: definition.title } : {}),\n ...(icons ? { icons } : {}),\n ...(Object.keys(meta).length > 0 ? { _meta: meta } : {}),\n },\n execute: definition.execute,\n ...(definition.mapError ? { mapError: definition.mapError } : {}),\n };\n}\n","const UNDEFINED_CODE_POINTS = new Set([\n 65534, 65535, 131070, 131071, 196606, 196607, 262142, 262143, 327678, 327679, 393214,\n 393215, 458750, 458751, 524286, 524287, 589822, 589823, 655358, 655359, 720894,\n 720895, 786430, 786431, 851966, 851967, 917502, 917503, 983038, 983039, 1048574,\n 1048575, 1114110, 1114111,\n]);\nexport const REPLACEMENT_CHARACTER = '\\uFFFD';\nexport var CODE_POINTS;\n(function (CODE_POINTS) {\n CODE_POINTS[CODE_POINTS[\"EOF\"] = -1] = \"EOF\";\n CODE_POINTS[CODE_POINTS[\"NULL\"] = 0] = \"NULL\";\n CODE_POINTS[CODE_POINTS[\"TABULATION\"] = 9] = \"TABULATION\";\n CODE_POINTS[CODE_POINTS[\"CARRIAGE_RETURN\"] = 13] = \"CARRIAGE_RETURN\";\n CODE_POINTS[CODE_POINTS[\"LINE_FEED\"] = 10] = \"LINE_FEED\";\n CODE_POINTS[CODE_POINTS[\"FORM_FEED\"] = 12] = \"FORM_FEED\";\n CODE_POINTS[CODE_POINTS[\"SPACE\"] = 32] = \"SPACE\";\n CODE_POINTS[CODE_POINTS[\"EXCLAMATION_MARK\"] = 33] = \"EXCLAMATION_MARK\";\n CODE_POINTS[CODE_POINTS[\"QUOTATION_MARK\"] = 34] = \"QUOTATION_MARK\";\n CODE_POINTS[CODE_POINTS[\"AMPERSAND\"] = 38] = \"AMPERSAND\";\n CODE_POINTS[CODE_POINTS[\"APOSTROPHE\"] = 39] = \"APOSTROPHE\";\n CODE_POINTS[CODE_POINTS[\"HYPHEN_MINUS\"] = 45] = \"HYPHEN_MINUS\";\n CODE_POINTS[CODE_POINTS[\"SOLIDUS\"] = 47] = \"SOLIDUS\";\n CODE_POINTS[CODE_POINTS[\"DIGIT_0\"] = 48] = \"DIGIT_0\";\n CODE_POINTS[CODE_POINTS[\"DIGIT_9\"] = 57] = \"DIGIT_9\";\n CODE_POINTS[CODE_POINTS[\"SEMICOLON\"] = 59] = \"SEMICOLON\";\n CODE_POINTS[CODE_POINTS[\"LESS_THAN_SIGN\"] = 60] = \"LESS_THAN_SIGN\";\n CODE_POINTS[CODE_POINTS[\"EQUALS_SIGN\"] = 61] = \"EQUALS_SIGN\";\n CODE_POINTS[CODE_POINTS[\"GREATER_THAN_SIGN\"] = 62] = \"GREATER_THAN_SIGN\";\n CODE_POINTS[CODE_POINTS[\"QUESTION_MARK\"] = 63] = \"QUESTION_MARK\";\n CODE_POINTS[CODE_POINTS[\"LATIN_CAPITAL_A\"] = 65] = \"LATIN_CAPITAL_A\";\n CODE_POINTS[CODE_POINTS[\"LATIN_CAPITAL_Z\"] = 90] = \"LATIN_CAPITAL_Z\";\n CODE_POINTS[CODE_POINTS[\"RIGHT_SQUARE_BRACKET\"] = 93] = \"RIGHT_SQUARE_BRACKET\";\n CODE_POINTS[CODE_POINTS[\"GRAVE_ACCENT\"] = 96] = \"GRAVE_ACCENT\";\n CODE_POINTS[CODE_POINTS[\"LATIN_SMALL_A\"] = 97] = \"LATIN_SMALL_A\";\n CODE_POINTS[CODE_POINTS[\"LATIN_SMALL_Z\"] = 122] = \"LATIN_SMALL_Z\";\n})(CODE_POINTS || (CODE_POINTS = {}));\nexport const SEQUENCES = {\n DASH_DASH: '--',\n CDATA_START: '[CDATA[',\n DOCTYPE: 'doctype',\n SCRIPT: 'script',\n PUBLIC: 'public',\n SYSTEM: 'system',\n};\n//Surrogates\nexport function isSurrogate(cp) {\n return cp >= 55296 && cp <= 57343;\n}\nexport function isSurrogatePair(cp) {\n return cp >= 56320 && cp <= 57343;\n}\nexport function getSurrogatePairCodePoint(cp1, cp2) {\n return (cp1 - 55296) * 1024 + 9216 + cp2;\n}\n//NOTE: excluding NULL and ASCII whitespace\nexport function isControlCodePoint(cp) {\n return ((cp !== 0x20 && cp !== 0x0a && cp !== 0x0d && cp !== 0x09 && cp !== 0x0c && cp >= 0x01 && cp <= 0x1f) ||\n (cp >= 0x7f && cp <= 0x9f));\n}\nexport function isUndefinedCodePoint(cp) {\n return (cp >= 64976 && cp <= 65007) || UNDEFINED_CODE_POINTS.has(cp);\n}\n","export var ERR;\n(function (ERR) {\n ERR[\"controlCharacterInInputStream\"] = \"control-character-in-input-stream\";\n ERR[\"noncharacterInInputStream\"] = \"noncharacter-in-input-stream\";\n ERR[\"surrogateInInputStream\"] = \"surrogate-in-input-stream\";\n ERR[\"nonVoidHtmlElementStartTagWithTrailingSolidus\"] = \"non-void-html-element-start-tag-with-trailing-solidus\";\n ERR[\"endTagWithAttributes\"] = \"end-tag-with-attributes\";\n ERR[\"endTagWithTrailingSolidus\"] = \"end-tag-with-trailing-solidus\";\n ERR[\"unexpectedSolidusInTag\"] = \"unexpected-solidus-in-tag\";\n ERR[\"unexpectedNullCharacter\"] = \"unexpected-null-character\";\n ERR[\"unexpectedQuestionMarkInsteadOfTagName\"] = \"unexpected-question-mark-instead-of-tag-name\";\n ERR[\"invalidFirstCharacterOfTagName\"] = \"invalid-first-character-of-tag-name\";\n ERR[\"unexpectedEqualsSignBeforeAttributeName\"] = \"unexpected-equals-sign-before-attribute-name\";\n ERR[\"missingEndTagName\"] = \"missing-end-tag-name\";\n ERR[\"unexpectedCharacterInAttributeName\"] = \"unexpected-character-in-attribute-name\";\n ERR[\"unknownNamedCharacterReference\"] = \"unknown-named-character-reference\";\n ERR[\"missingSemicolonAfterCharacterReference\"] = \"missing-semicolon-after-character-reference\";\n ERR[\"unexpectedCharacterAfterDoctypeSystemIdentifier\"] = \"unexpected-character-after-doctype-system-identifier\";\n ERR[\"unexpectedCharacterInUnquotedAttributeValue\"] = \"unexpected-character-in-unquoted-attribute-value\";\n ERR[\"eofBeforeTagName\"] = \"eof-before-tag-name\";\n ERR[\"eofInTag\"] = \"eof-in-tag\";\n ERR[\"missingAttributeValue\"] = \"missing-attribute-value\";\n ERR[\"missingWhitespaceBetweenAttributes\"] = \"missing-whitespace-between-attributes\";\n ERR[\"missingWhitespaceAfterDoctypePublicKeyword\"] = \"missing-whitespace-after-doctype-public-keyword\";\n ERR[\"missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers\"] = \"missing-whitespace-between-doctype-public-and-system-identifiers\";\n ERR[\"missingWhitespaceAfterDoctypeSystemKeyword\"] = \"missing-whitespace-after-doctype-system-keyword\";\n ERR[\"missingQuoteBeforeDoctypePublicIdentifier\"] = \"missing-quote-before-doctype-public-identifier\";\n ERR[\"missingQuoteBeforeDoctypeSystemIdentifier\"] = \"missing-quote-before-doctype-system-identifier\";\n ERR[\"missingDoctypePublicIdentifier\"] = \"missing-doctype-public-identifier\";\n ERR[\"missingDoctypeSystemIdentifier\"] = \"missing-doctype-system-identifier\";\n ERR[\"abruptDoctypePublicIdentifier\"] = \"abrupt-doctype-public-identifier\";\n ERR[\"abruptDoctypeSystemIdentifier\"] = \"abrupt-doctype-system-identifier\";\n ERR[\"cdataInHtmlContent\"] = \"cdata-in-html-content\";\n ERR[\"incorrectlyOpenedComment\"] = \"incorrectly-opened-comment\";\n ERR[\"eofInScriptHtmlCommentLikeText\"] = \"eof-in-script-html-comment-like-text\";\n ERR[\"eofInDoctype\"] = \"eof-in-doctype\";\n ERR[\"nestedComment\"] = \"nested-comment\";\n ERR[\"abruptClosingOfEmptyComment\"] = \"abrupt-closing-of-empty-comment\";\n ERR[\"eofInComment\"] = \"eof-in-comment\";\n ERR[\"incorrectlyClosedComment\"] = \"incorrectly-closed-comment\";\n ERR[\"eofInCdata\"] = \"eof-in-cdata\";\n ERR[\"absenceOfDigitsInNumericCharacterReference\"] = \"absence-of-digits-in-numeric-character-reference\";\n ERR[\"nullCharacterReference\"] = \"null-character-reference\";\n ERR[\"surrogateCharacterReference\"] = \"surrogate-character-reference\";\n ERR[\"characterReferenceOutsideUnicodeRange\"] = \"character-reference-outside-unicode-range\";\n ERR[\"controlCharacterReference\"] = \"control-character-reference\";\n ERR[\"noncharacterCharacterReference\"] = \"noncharacter-character-reference\";\n ERR[\"missingWhitespaceBeforeDoctypeName\"] = \"missing-whitespace-before-doctype-name\";\n ERR[\"missingDoctypeName\"] = \"missing-doctype-name\";\n ERR[\"invalidCharacterSequenceAfterDoctypeName\"] = \"invalid-character-sequence-after-doctype-name\";\n ERR[\"duplicateAttribute\"] = \"duplicate-attribute\";\n ERR[\"nonConformingDoctype\"] = \"non-conforming-doctype\";\n ERR[\"missingDoctype\"] = \"missing-doctype\";\n ERR[\"misplacedDoctype\"] = \"misplaced-doctype\";\n ERR[\"endTagWithoutMatchingOpenElement\"] = \"end-tag-without-matching-open-element\";\n ERR[\"closingOfElementWithOpenChildElements\"] = \"closing-of-element-with-open-child-elements\";\n ERR[\"disallowedContentInNoscriptInHead\"] = \"disallowed-content-in-noscript-in-head\";\n ERR[\"openElementsLeftAfterEof\"] = \"open-elements-left-after-eof\";\n ERR[\"abandonedHeadElementChild\"] = \"abandoned-head-element-child\";\n ERR[\"misplacedStartTagForHeadElement\"] = \"misplaced-start-tag-for-head-element\";\n ERR[\"nestedNoscriptInHead\"] = \"nested-noscript-in-head\";\n ERR[\"eofInElementThatCanContainOnlyText\"] = \"eof-in-element-that-can-contain-only-text\";\n})(ERR || (ERR = {}));\n","import { CODE_POINTS as $, getSurrogatePairCodePoint, isControlCodePoint, isSurrogate, isSurrogatePair, isUndefinedCodePoint, } from '../common/unicode.js';\nimport { ERR } from '../common/error-codes.js';\n//Const\nconst DEFAULT_BUFFER_WATERLINE = 1 << 16;\n//Preprocessor\n//NOTE: HTML input preprocessing\n//(see: http://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html#preprocessing-the-input-stream)\nexport class Preprocessor {\n constructor(handler) {\n this.handler = handler;\n this.html = '';\n this.pos = -1;\n // NOTE: Initial `lastGapPos` is -2, to ensure `col` on initialisation is 0\n this.lastGapPos = -2;\n this.gapStack = [];\n this.skipNextNewLine = false;\n this.lastChunkWritten = false;\n this.endOfChunkHit = false;\n this.bufferWaterline = DEFAULT_BUFFER_WATERLINE;\n this.isEol = false;\n this.lineStartPos = 0;\n this.droppedBufferSize = 0;\n this.line = 1;\n //NOTE: avoid reporting errors twice on advance/retreat\n this.lastErrOffset = -1;\n }\n /** The column on the current line. If we just saw a gap (eg. a surrogate pair), return the index before. */\n get col() {\n return this.pos - this.lineStartPos + Number(this.lastGapPos !== this.pos);\n }\n get offset() {\n return this.droppedBufferSize + this.pos;\n }\n getError(code, cpOffset) {\n const { line, col, offset } = this;\n const startCol = col + cpOffset;\n const startOffset = offset + cpOffset;\n return {\n code,\n startLine: line,\n endLine: line,\n startCol,\n endCol: startCol,\n startOffset,\n endOffset: startOffset,\n };\n }\n _err(code) {\n if (this.handler.onParseError && this.lastErrOffset !== this.offset) {\n this.lastErrOffset = this.offset;\n this.handler.onParseError(this.getError(code, 0));\n }\n }\n _addGap() {\n this.gapStack.push(this.lastGapPos);\n this.lastGapPos = this.pos;\n }\n _processSurrogate(cp) {\n //NOTE: try to peek a surrogate pair\n if (this.pos !== this.html.length - 1) {\n const nextCp = this.html.charCodeAt(this.pos + 1);\n if (isSurrogatePair(nextCp)) {\n //NOTE: we have a surrogate pair. Peek pair character and recalculate code point.\n this.pos++;\n //NOTE: add a gap that should be avoided during retreat\n this._addGap();\n return getSurrogatePairCodePoint(cp, nextCp);\n }\n }\n //NOTE: we are at the end of a chunk, therefore we can't infer the surrogate pair yet.\n else if (!this.lastChunkWritten) {\n this.endOfChunkHit = true;\n return $.EOF;\n }\n //NOTE: isolated surrogate\n this._err(ERR.surrogateInInputStream);\n return cp;\n }\n willDropParsedChunk() {\n return this.pos > this.bufferWaterline;\n }\n dropParsedChunk() {\n if (this.willDropParsedChunk()) {\n this.html = this.html.substring(this.pos);\n this.lineStartPos -= this.pos;\n this.droppedBufferSize += this.pos;\n this.pos = 0;\n this.lastGapPos = -2;\n this.gapStack.length = 0;\n }\n }\n write(chunk, isLastChunk) {\n if (this.html.length > 0) {\n this.html += chunk;\n }\n else {\n this.html = chunk;\n }\n this.endOfChunkHit = false;\n this.lastChunkWritten = isLastChunk;\n }\n insertHtmlAtCurrentPos(chunk) {\n this.html = this.html.substring(0, this.pos + 1) + chunk + this.html.substring(this.pos + 1);\n this.endOfChunkHit = false;\n }\n startsWith(pattern, caseSensitive) {\n // Check if our buffer has enough characters\n if (this.pos + pattern.length > this.html.length) {\n this.endOfChunkHit = !this.lastChunkWritten;\n return false;\n }\n if (caseSensitive) {\n return this.html.startsWith(pattern, this.pos);\n }\n for (let i = 0; i < pattern.length; i++) {\n const cp = this.html.charCodeAt(this.pos + i) | 0x20;\n if (cp !== pattern.charCodeAt(i)) {\n return false;\n }\n }\n return true;\n }\n peek(offset) {\n const pos = this.pos + offset;\n if (pos >= this.html.length) {\n this.endOfChunkHit = !this.lastChunkWritten;\n return $.EOF;\n }\n const code = this.html.charCodeAt(pos);\n return code === $.CARRIAGE_RETURN ? $.LINE_FEED : code;\n }\n advance() {\n this.pos++;\n //NOTE: LF should be in the last column of the line\n if (this.isEol) {\n this.isEol = false;\n this.line++;\n this.lineStartPos = this.pos;\n }\n if (this.pos >= this.html.length) {\n this.endOfChunkHit = !this.lastChunkWritten;\n return $.EOF;\n }\n let cp = this.html.charCodeAt(this.pos);\n //NOTE: all U+000D CARRIAGE RETURN (CR) characters must be converted to U+000A LINE FEED (LF) characters\n if (cp === $.CARRIAGE_RETURN) {\n this.isEol = true;\n this.skipNextNewLine = true;\n return $.LINE_FEED;\n }\n //NOTE: any U+000A LINE FEED (LF) characters that immediately follow a U+000D CARRIAGE RETURN (CR) character\n //must be ignored.\n if (cp === $.LINE_FEED) {\n this.isEol = true;\n if (this.skipNextNewLine) {\n // `line` will be bumped again in the recursive call.\n this.line--;\n this.skipNextNewLine = false;\n this._addGap();\n return this.advance();\n }\n }\n this.skipNextNewLine = false;\n if (isSurrogate(cp)) {\n cp = this._processSurrogate(cp);\n }\n //OPTIMIZATION: first check if code point is in the common allowed\n //range (ASCII alphanumeric, whitespaces, big chunk of BMP)\n //before going into detailed performance cost validation.\n const isCommonValidRange = this.handler.onParseError === null ||\n (cp > 0x1f && cp < 0x7f) ||\n cp === $.LINE_FEED ||\n cp === $.CARRIAGE_RETURN ||\n (cp > 0x9f && cp < 64976);\n if (!isCommonValidRange) {\n this._checkForProblematicCharacters(cp);\n }\n return cp;\n }\n _checkForProblematicCharacters(cp) {\n if (isControlCodePoint(cp)) {\n this._err(ERR.controlCharacterInInputStream);\n }\n else if (isUndefinedCodePoint(cp)) {\n this._err(ERR.noncharacterInInputStream);\n }\n }\n retreat(count) {\n this.pos -= count;\n while (this.pos < this.lastGapPos) {\n this.lastGapPos = this.gapStack.pop();\n this.pos--;\n }\n this.isEol = false;\n }\n}\n","export var TokenType;\n(function (TokenType) {\n TokenType[TokenType[\"CHARACTER\"] = 0] = \"CHARACTER\";\n TokenType[TokenType[\"NULL_CHARACTER\"] = 1] = \"NULL_CHARACTER\";\n TokenType[TokenType[\"WHITESPACE_CHARACTER\"] = 2] = \"WHITESPACE_CHARACTER\";\n TokenType[TokenType[\"START_TAG\"] = 3] = \"START_TAG\";\n TokenType[TokenType[\"END_TAG\"] = 4] = \"END_TAG\";\n TokenType[TokenType[\"COMMENT\"] = 5] = \"COMMENT\";\n TokenType[TokenType[\"DOCTYPE\"] = 6] = \"DOCTYPE\";\n TokenType[TokenType[\"EOF\"] = 7] = \"EOF\";\n TokenType[TokenType[\"HIBERNATION\"] = 8] = \"HIBERNATION\";\n})(TokenType || (TokenType = {}));\nexport function getTokenAttr(token, attrName) {\n for (let i = token.attrs.length - 1; i >= 0; i--) {\n if (token.attrs[i].name === attrName) {\n return token.attrs[i].value;\n }\n }\n return null;\n}\n","// Adapted from https://github.com/mathiasbynens/he/blob/36afe179392226cf1b6ccdb16ebbb7a5a844d93a/src/he.js#L106-L134\nconst decodeMap = new Map([\n [0, 65_533],\n // C1 Unicode control character reference replacements\n [128, 8364],\n [130, 8218],\n [131, 402],\n [132, 8222],\n [133, 8230],\n [134, 8224],\n [135, 8225],\n [136, 710],\n [137, 8240],\n [138, 352],\n [139, 8249],\n [140, 338],\n [142, 381],\n [145, 8216],\n [146, 8217],\n [147, 8220],\n [148, 8221],\n [149, 8226],\n [150, 8211],\n [151, 8212],\n [152, 732],\n [153, 8482],\n [154, 353],\n [155, 8250],\n [156, 339],\n [158, 382],\n [159, 376],\n]);\n/**\n * Replace the given code point with a replacement character if it is a\n * surrogate or is outside the valid range. Otherwise return the code\n * point unchanged.\n * @param codePoint Unicode code point to convert.\n */\nexport function replaceCodePoint(codePoint) {\n if ((codePoint >= 0xd8_00 && codePoint <= 0xdf_ff) ||\n codePoint > 0x10_ff_ff) {\n return 0xff_fd;\n }\n return decodeMap.get(codePoint) ?? codePoint;\n}\n//# sourceMappingURL=decode-codepoint.js.map","/**\n * Shared base64 decode helper for generated decode data.\n * Assumes global atob is available.\n * @param input Input string to encode or decode.\n */\nexport function decodeBase64(input) {\n const binary = atob(input);\n const evenLength = binary.length & ~1; // Round down to even length\n const out = new Uint16Array(evenLength / 2);\n for (let index = 0, outIndex = 0; index < evenLength; index += 2) {\n const lo = binary.charCodeAt(index);\n const hi = binary.charCodeAt(index + 1);\n out[outIndex++] = lo | (hi << 8);\n }\n return out;\n}\n//# sourceMappingURL=decode-shared.js.map","// Generated using scripts/write-decode-map.ts\nimport { decodeBase64 } from \"../internal/decode-shared.js\";\n/** Packed HTML decode trie data. */\nexport const htmlDecodeTree = /* #__PURE__ */ decodeBase64(\"QR08ALkAAgH6AYsDNQR2BO0EPgXZBQEGLAbdBxMISQrvCmQLfQurDKQNLw4fD4YPpA+6D/IPAAAAAAAAAAAAAAAAKhBMEY8TmxUWF2EYLBkxGuAa3RsJHDscWR8YIC8jSCSIJcMl6ie3Ku8rEC0CLjoupS7kLgAIRU1hYmNmZ2xtbm9wcnN0dVQAWgBeAGUAaQBzAHcAfgCBAIQAhwCSAJoAoACsALMAbABpAGcAO4DGAMZAUAA7gCYAJkBjAHUAdABlADuAwQDBQHIiZXZlAAJhAAFpeW0AcgByAGMAO4DCAMJAEGRyAADgNdgE3XIAYQB2AGUAO4DAAMBA8CFoYZFj4SFjcgBhZAAAoFMqAAFncIsAjgBvAG4ABGFmAADgNdg43fAlbHlGdW5jdGlvbgCgYSBpAG4AZwA7gMUAxUAAAWNzpACoAHIAAOA12Jzc6SFnbgCgVCJpAGwAZABlADuAwwDDQG0AbAA7gMQAxEAABGFjZWZvcnN1xQDYANoA7QDxAPYA+QD8AAABY3LJAM8AayNzbGFzaAAAoBYidgHTANUAAKDnKmUAZAAAoAYjeQARZIABY3J0AOAA5QDrAGEidXNlAACgNSLuI291bGxpcwCgLCFhAJJjcgAA4DXYBd1wAGYAAOA12Dnd5SF2ZdhiYwDyAOoAbSJwZXEAAKBOIgAHSE9hY2RlZmhpbG9yc3UXARoBHwE6AVIBVQFiAWQBZgGCAakB6QHtAfIBYwB5ACdkUABZADuAqQCpQIABY3B5ACUBKAE1AfUhdGUGYWmg0iJ0KGFsRGlmZmVyZW50aWFsRAAAoEUhbCJleXMAAKAtIQACYWVpb0EBRAFKAU0B8iFvbgxhZABpAGwAO4DHAMdAcgBjAAhhbiJpbnQAAKAwIm8AdAAKYQABZG5ZAV0BaSJsbGEAuGB0I2VyRG90ALdg8gA5AWkAp2NyImNsZQAAAkRNUFRwAXQBeQF9AW8AdAAAoJkiaSJudXMAAKCWIuwhdXMAoJUiaSJtZXMAAKCXIm8AAAFjc4cBlAFrKndpc2VDb250b3VySW50ZWdyYWwAAKAyImUjQ3VybHkAAAFEUZwBpAFvJXVibGVRdW90ZQAAoB0gdSJvdGUAAKAZIAACbG5wdbABtgHNAdgBbwBuAGWgNyIAoHQqgAFnaXQAvAHBAcUB8iJ1ZW50AKBhIm4AdAAAoC8i7yV1ckludGVncmFsAKAuIgABZnLRAdMBAKACIe8iZHVjdACgECJuLnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbAAAoDMi7yFzcwCgLypjAHIAAOA12J7ccABDoNMiYQBwAACgTSKABURKU1phY2VmaW9zAAsCEgIVAhgCGwIsAjQCOQI9AnMCfwNvoEUh9CJyYWhkAKARKWMAeQACZGMAeQAFZGMAeQAPZIABZ3JzACECJQIoAuchZXIAoCEgcgAAoKEhaAB2AACg5CoAAWF5MAIzAvIhb24OYRRkbAB0oAciYQCUY3IAAOA12AfdAAFhZkECawIAAWNtRQJnAvIjaXRpY2FsAAJBREdUUAJUAl8CYwJjInV0ZQC0YG8AdAFZAloC2WJiJGxlQWN1dGUA3WJyImF2ZQBgYGkibGRlANxi7yFuZACgxCJmJWVyZW50aWFsRAAAoEYhcAR9AgAAAAAAAIECjgIAABoDZgAA4DXYO91EoagAhQKJAm8AdAAAoNwgcSJ1YWwAAKBQIuIhbGUAA0NETFJVVpkCqAK1Au8C/wIRA28AbgB0AG8AdQByAEkAbgB0AGUAZwByAGEA7ADEAW8AdAKvAgAAAACwAqhgbiNBcnJvdwAAoNMhAAFlb7kC0AJmAHQAgAFBUlQAwQLGAs0CciJyb3cAAKDQIekkZ2h0QXJyb3cAoNQhZQDlACsCbgBnAAABTFLWAugC5SFmdAABQVLcAuECciJyb3cAAKD4J+kkZ2h0QXJyb3cAoPon6SRnaHRBcnJvdwCg+SdpImdodAAAAUFU9gL7AnIicm93AACg0iFlAGUAAKCoInAAQQIGAwAAAAALA3Iicm93AACg0SFvJHduQXJyb3cAAKDVIWUlcnRpY2FsQmFyAACgJSJuAAADQUJMUlRhJAM2AzoDWgNxA3oDciJyb3cAAKGTIUJVLAMwA2EAcgAAoBMpcCNBcnJvdwAAoPUhciJldmUAEWPlIWZ00gJDAwAASwMAAFIDaSVnaHRWZWN0b3IAAKBQKWUkZVZlY3RvcgAAoF4p5SJjdG9yQqC9IWEAcgAAoFYpaSJnaHQA1AFiAwAAaQNlJGVWZWN0b3IAAKBfKeUiY3RvckKgwSFhAHIAAKBXKWUAZQBBoKQiciJyb3cAAKCnIXIAcgBvAPcAtAIAAWN0gwOHA3IA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YwAAoN8i4SFycnCgtiEAoD0pgKIqImJjZG9zACsVMBU6FT4VQRVyImNhcAAAoEgqAAFhdTQVNxVwAACgRipwAACgSipvAHQAAKCNInIAAKBFKgDgKiIA/gACYWxydksVURVuFXMVcgByAG2gtyEAoDwpeQCAAWV2dwBYFWUVaRVxAHACXxUAAAAAYxVyAGUA4wAXFXUA4wAZFWUAZQAAoM4iZSJkZ2UAAKDPImUAbgA7gKQApEBlI2Fycm93AAABbHJ7FX8V5SFmdACgtiFpImdodAAAoLchZQDkAG0VAAFjaYsVkRVvAG4AaQBuAPQAkwFuAHQAAKAxImwiY3R5AACgLSOACUFIYWJjZGVmaGlqbG9yc3R1d3oAuBW7Fb8V1RXgFegV+RUKFhUWHxZUFlcWZRbFFtsW7xb7FgUXChdyAPIAtAJhAHIAAKBlKQACZ2xyc8YVyhXOFdAV5yFlcgCgICDlIXRoAKA4IfIA9QxoAHagECAAoKMiawHZFd4VYSJyb3cAAKAPKWEA4wBfAgABYXnkFecV8iFvbg9hNGQAoUYhYW/tFfQVAAFnciEC8RVyAACgyiF0InNlcQAAoHcqgAFnbG0A/xUCFgUWO4CwALBAdABhALRjcCJ0eXYAAKCxKQABaXIOFhIW8yFodACgfykA4DXYId1hAHIAAAFschsWHRYAoMMhAKDCIYACYWVnc3YAKBauAjYWOhY+Fm0AAKHEIm9zLhY0Fm4AZABzoMQi9SFpdACgZiZhIm1tYQDdY2kAbgAAoPIiAKH3AGlvQxZRFmQAZQAAgfcAO29KFksW90BuI3RpbWVzAACgxyJuAPgAUBZjAHkAUmRjAG8CXhYAAAAAYhZyAG4AAKAeI28AcAAAoA0jgAJscHR1dwBuFnEWdRaSFp4W7CFhciRgZgAA4DXYVd0AotkCZW1wc30WhBaJFo0WcQBkoFAibwB0AACgUSJpIm51cwAAoDgi7CF1cwCgFCLxInVhcmUAoKEiYgBsAGUAYgBhAHIAdwBlAGQAZwDlANcAbgCAAWFkaAClFqoWtBZyAHIAbwD3APUMbwB3AG4AYQByAHIAbwB3APMA8xVhI3Jwb29uAAABbHK8FsAWZQBmAPQAHBZpAGcAaAD0AB4WYgHJFs8WawBhAHIAbwD3AJILbwLUFgAAAADYFnIAbgAAoB8jbwBwAACgDCOAAWNvdADhFukW7BYAAXJ55RboFgDgNdi53FVkbAAAoPYp8iFvaxFhAAFkcvMW9xZvAHQAAKDxImkA5qC/JVsSAAFhaP8WAhdyAPIANQNhAPIA1wvhIm5nbGUAoKYpAAFjaQ4XEBd5AF9k5yJyYXJyAKD/JwAJRGFjZGVmZ2xtbm9wcXJzdHV4MRc4F0YXWxcyBF4XaRd5F40XrBe0F78X2RcVGCEYLRg1GEAYAAFEbzUXgRZvAPQA+BUAAWNzPBdCF3UAdABlADuA6QDpQPQhZXIAoG4qAAJhaW95TRdQF1YXWhfyIW9uG2FyAGOgViI7gOoA6kDsIW9uAKBVIk1kbwB0ABdhAAFEcmIXZhdvAHQAAKBSIgDgNdgi3XKhmipuF3QXYQB2AGUAO4DoAOhAZKCWKm8AdAAAoJgqgKGZKmlscwCAF4UXhxfuInRlcnMAoOcjAKATIWSglSpvAHQAAKCXKoABYXBzAJMXlheiF2MAcgATYXQAeQBzogUinxcAAAAAoRdlAHQAAKAFInAAMaADIDMBqRerFwCgBCAAoAUgAAFnc7AXsRdLYXAAAKACIAABZ3C4F7sXbwBuABlhZgAA4DXYVt2AAWFscwDFF8sXzxdyAHOg1SJsAACg4yl1AHMAAKBxKmkAAKG1A2x21RfYF28AbgC1Y/VjAAJjc3V24BfoF/0XEBgAAWlv5BdWF3IAYwAAoFYiaQLuFwAAAADwF+0ADQThIW50AAFnbPUX+Rd0AHIAAKCWKuUhc3MAoJUqgAFhZWkAAxgGGAoYbABzAD1gcwB0AACgXyJ2AESgYSJEAACgeCrwImFyc2wAoOUpAAFEYRkYHRhvAHQAAKBTInIAcgAAoHEpgAFjZGkAJxgqGO0XcgAAoC8hbwD0AIwCAAFhaDEYMhi3YzuA8ADwQAABbXI5GD0YbAA7gOsA60BvAACgrCCAAWNpcABGGEgYSxhsACFgcwD0ACwEAAFlb08YVxhjAHQAYQB0AGkAbwDuABoEbgBlAG4AdABpAGEAbADlADME4Ql1GAAAgRgAAIMYiBgAAAAAoRilGAAAqhgAALsYvhjRGAAA1xgnGWwAbABpAG4AZwBkAG8AdABzAGUA8QBlF3kARGRtImFsZQAAoEAmgAFpbHIAjRiRGJ0Y7CFpZwCgA/tpApcYAAAAAJoYZwAAoAD7aQBnAACgBPsA4DXYI93sIWlnAKAB++whaWcA4GYAagCAAWFsdACvGLIYthh0AACgbSZpAGcAAKAC+24AcwAAoLElbwBmAJJh8AHCGAAAxhhmAADgNdhX3QABYWvJGMwYbADsAGsEdqDUIgCg2SphI3J0aW50AACgDSoAAWFv2hgiGQABY3PeGB8ZsQPnGP0YBRkSGRUZAAAdGbID7xjyGPQY9xj5GAAA+xg7gL0AvUAAoFMhO4C8ALxAAKBVIQCgWSEAoFshswEBGQAAAxkAoFQhAKBWIbQCCxkOGQAAAAAQGTuAvgC+QACgVyEAoFwhNQAAoFghtgEZGQAAGxkAoFohAKBdITgAAKBeIWwAAKBEIHcAbgAAoCIjYwByAADgNdi73IAIRWFiY2RlZmdpamxub3JzdHYARhlKGVoZXhlmGWkZkhmWGZkZnRmgGa0ZxhnLGc8Z4BkjGmygZyIAoIwqgAFjbXAAUBlTGVgZ9SF0ZfVhbQBhAOSgswM6FgCghipyImV2ZQAfYQABaXliGWUZcgBjAB1hM2RvAHQAIWGAoWUibHFzAMYEcBl6GfGhZSLOBAAAdhlsAGEAbgD0AN8EgKF+KmNkbACBGYQZjBljAACgqSpvAHQAb6CAKmyggioAoIQqZeDbIgD+cwAAoJQqcgAA4DXYJN3noGsirATtIWVsAKA3IWMAeQBTZIChdyJFYWoApxmpGasZAKCSKgCgpSoAoKQqAAJFYWVztBm2Gb0ZwhkAoGkicABwoIoq8iFveACgiipxoIgq8aCIKrUZaQBtAACg5yJwAGYAAOA12FjdYQB2AOUAYwIAAWNp0xnWGXIAAKAKIW0AAKFzImVs3BneGQCgjioAoJAqAIM+ADtjZGxxco0E6xn0GfgZ/BkBGgABY2nvGfEZAKCnKnIAAKB6Km8AdAAAoNci0CFhcgCglSl1ImVzdAAAoHwqgAJhZGVscwAKGvQZFhrVBCAa8AEPGgAAFBpwAHIAbwD4AFkZcgAAoHgpcQAAAWxxxAQbGmwAZQBzAPMASRlpAO0A5AQAAWVuJxouGnIjdG5lcXEAAOBpIgD+xQAsGgAFQWFiY2Vma29zeUAaQxpmGmoabRqDGocalhrCGtMacgDyAMwCAAJpbG1yShpOGlAaVBpyAHMA8ABxD2YAvWBpAGwA9AASBQABZHJYGlsaYwB5AEpkAKGUIWN3YBpkGmkAcgAAoEgpAKCtIWEAcgAAoA8h6SFyYyVhgAFhbHIAcxp7Gn8a8iF0c3WgZSZpAHQAAKBlJuwhaXAAoCYg4yFvbgCguSJyAADgNdgl3XMAAAFld4wakRphInJvdwAAoCUpYSJyb3cAAKAmKYACYW1vcHIAnxqjGqcauhq+GnIAcgAAoP8h9CFodACgOyJrAAABbHKsGrMaZSRmdGFycm93AACgqSHpJGdodGFycm93AKCqIWYAAOA12Fnd4iFhcgCgFSCAAWNsdADIGswa0BpyAADgNdi93GEAcwDoAGka8iFvaydhAAFicNca2xr1IWxsAKBDIOghZW4AoBAg4Qr2GgAA/RoAAAgbExsaGwAAIRs7GwAAAAA+G2IbmRuVG6sbAACyG80b0htjAHUAdABlADuA7QDtQAChYyBpeQEbBhtyAGMAO4DuAO5AOGQAAWN4CxsNG3kANWRjAGwAO4ChAKFAAAFmcssCFhsA4DXYJt1yAGEAdgBlADuA7ADsQIChSCFpbm8AJxsyGzYbAAFpbisbLxtuAHQAAKAMKnQAAKAtIuYhaW4AoNwpdABhAACgKSHsIWlnM2GAAWFvcABDG1sbXhuAAWNndABJG0sbWRtyACthgAFlbHAAcQVRG1UbaQBuAOUAyAVhAHIA9AByBWgAMWFmAACgtyJlAGQAtWEAoggiY2ZvdGkbbRt1G3kb4SFyZQCgBSFpAG4AdKAeImkAZQAAoN0pZABvAPQAWxsAoisiY2VscIEbhRuPG5QbYQBsAACguiIAAWdyiRuNG2UAcgDzACMQ4wCCG2EicmhrAACgFyryIW9kAKA8KgACY2dwdJ8boRukG6gbeQBRZG8AbgAvYWYAAOA12FrdYQC5Y3UAZQBzAHQAO4C/AL9AAAFjabUbuRtyAADgNdi+3G4AAKIIIkVkc3bCG8QbyBvQAwCg+SJvAHQAAKD1Inag9CIAoPMiaaBiIOwhZGUpYesB1hsAANkbYwB5AFZkbAA7gO8A70AAA2NmbW9zdeYb7hvyG/Ub+hsFHAABaXnqG+0bcgBjADVhOWRyAADgNdgn3eEhdGg3YnAAZgAA4DXYW93jAf8bAAADHHIAAOA12L/c8iFjeVhk6yFjeVRkAARhY2ZnaGpvcxUcGhwiHCYcKhwtHDAcNRzwIXBhdqC6A/BjAAFleR4cIRzkIWls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ZmdobG1vcHJzdHV3CiwNLBEsHSwnLDEsQCxLLFIsYix6LIQsjyzLLOgs7Sz/LAotcgDyAAkDYQByAACgYykAAWNyFSwbLHUAdABlADuA+gD6QPIACQ1yAOMBIywAACUseQBeZHYAZQBtYQABaXkrLDAscgBjADuA+wD7QENkgAFhYmgANyw6LD0scgDyANEO7CFhY3FhYQDyAOAOAAFpckQsSCzzIWh0AKB+KQDgNdgy3XIAYQB2AGUAO4D5APlAYQFWLF8scgAAAWxyWixcLACgvyEAoL4hbABrAACggCUAAWN0Zix2LG8CbCwAAAAAcyxyAG4AZaAcI3IAAKAcI28AcAAAoA8jcgBpAACg+CUAAWFsfiyBLGMAcgBrYTuAqACoQAABZ3CILIssbwBuAHNhZgAA4DXYZt0AA2FkaGxzdZksniynLLgsuyzFLHIAcgBvAPcACQ1vAHcAbgBhAHIAcgBvAPcA2A5hI3Jwb29uAAABbHKvLLMsZQBmAPQAWyxpAGcAaAD0AF0sdQDzAKYOaQAAocUDaGzBLMIs0mNvAG4AxWPwI2Fycm93cwCgyCGAAWNpdADRLOEs5CxvAtcsAAAAAN4scgBuAGWgHSNyAACgHSNvAHAAAKAOI24AZwBvYXIAaQAAoPklYwByAADgNdjK3IABZGlyAPMs9yz6LG8AdAAAoPAi7CFkZWlhaQBmoLUlAKC0JQABYW0DLQYtcgDyAMosbAA7gPwA/EDhIm5nbGUAoKcpgAdBQkRhY2RlZmxub3Byc3oAJy0qLTAtNC2bLZ0toS2/LcMtxy3TLdgt3C3gLfwtcgDyABADYQByAHag6CoAoOkqYQBzAOgA/gIAAW5yOC08LechcnQAoJwpgANla25wcnN0AJkpSC1NLVQtXi1iLYItYQBwAHAA4QAaHG8AdABoAGkAbgDnAKEXgAFoaXIAoSmzJFotbwBwAPQAdCVooJUh7wD4JgABaXVmLWotZwBtAOEAuygAAWJwbi14LXMjZXRuZXEAceCKIgD+AODLKgD+cyNldG5lcQBx4IsiAP4A4MwqAP4AAWhyhi2KLWUAdADhABIraSNhbmdsZQAAAWxyki2WLeUhZnQAoLIiaSJnaHQAAKCzInkAMmThIXNoAKCiIoABZWxyAKcttC24LWKiKCKuLQAAAACyLWEAcgAAoLsicQAAoFoi7CFpcACg7iIAAWJ0vC1eD2EA8gBfD3IAAOA12DPddAByAOkAlS1zAHUAAAFicM0t0C0A4IIi0iAA4IMi0iBwAGYAAOA12GfdcgBvAPAAWQt0AHIA6QCaLQABY3XkLegtcgAA4DXYy9wAAWJw7C30LW4AAAFFZXUt8S0A4IoiAP5uAAABRWV/LfktAOCLIgD+6SJnemFnAKCaKYADY2Vmb3BycwANLhAuJS4pLiMuLi40LukhcmN1YQABZGkULiEuAAFiZxguHC5hAHIAAKBfKmUAcaAnIgCgWSLlIXJwAKAYIXIAAOA12DTdcABmAADgNdho3WWgQCJhAHQA6ABqD2MAcgAA4DXYzNzjCuQRUC4AAFQuAABYLmIuAAAAAGMubS5wLnQuAAAAAIguki4AAJouJxIqEnQAcgDpAB0ScgAA4DXYNd0AAUFhWy5eLnIA8gDnAnIA8gCTB75jAAFBYWYuaS5yAPIA4AJyAPIAjAdhAPAAeh5pAHMAAKD7IoABZHB0APgReS6DLgABZmx9LoAuAOA12GnddQDzAP8RaQBtAOUABBIAAUFhiy6OLnIA8gDuAnIA8gCaBwABY3GVLgoScgAA4DXYzdwAAXB0nS6hLmwAdQDzACUScgDpACASAARhY2VmaW9zdbEuvC7ELsguzC7PLtQu2S5jAAABdXm2LrsudABlADuA/QD9QE9kAAFpecAuwy5yAGMAd2FLZG4AO4ClAKVAcgAA4DXYNt1jAHkAV2RwAGYAAOA12GrdYwByAADgNdjO3AABY23dLt8ueQBOZGwAO4D/AP9AAAVhY2RlZmhpb3N38y73Lv8uAi8MLxAvEy8YLx0vIi9jInV0ZQB6YQABYXn7Lv4u8iFvbn5hN2RvAHQAfGEAAWV0Bi8KL3QAcgDmAB8QYQC2Y3IAAOA12DfdYwB5ADZk5yJyYXJyAKDdIXAAZgAA4DXYa91jAHIAAOA12M/cAAFqbiYvKC8AoA0gagAAoAwg\");\n//# sourceMappingURL=decode-data-html.js.map","/**\n * Bit flags & masks for the binary trie encoding used for entity decoding.\n *\n * Bit layout (16 bits total):\n * 15..14 VALUE_LENGTH (+1 encoding; 0 => no value)\n * 13 FLAG13. If valueLength>0: semicolon required flag (implicit ';').\n * If valueLength==0: compact run flag.\n * 12..7 BRANCH_LENGTH Branch length (0 => single branch in 6..0 if jumpOffset==char) OR run length (when compact run)\n * 6..0 JUMP_TABLE Jump offset (jump table) OR single-branch char code OR first run char\n */\nexport var BinTrieFlags;\n(function (BinTrieFlags) {\n BinTrieFlags[BinTrieFlags[\"VALUE_LENGTH\"] = 49152] = \"VALUE_LENGTH\";\n BinTrieFlags[BinTrieFlags[\"FLAG13\"] = 8192] = \"FLAG13\";\n BinTrieFlags[BinTrieFlags[\"BRANCH_LENGTH\"] = 8064] = \"BRANCH_LENGTH\";\n BinTrieFlags[BinTrieFlags[\"JUMP_TABLE\"] = 127] = \"JUMP_TABLE\";\n})(BinTrieFlags || (BinTrieFlags = {}));\n//# sourceMappingURL=bin-trie-flags.js.map","import { replaceCodePoint } from \"./decode-codepoint.js\";\nimport { htmlDecodeTree } from \"./generated/decode-data-html.js\";\nimport { xmlDecodeTree } from \"./generated/decode-data-xml.js\";\nimport { BinTrieFlags } from \"./internal/bin-trie-flags.js\";\nvar CharCodes;\n(function (CharCodes) {\n CharCodes[CharCodes[\"NUM\"] = 35] = \"NUM\";\n CharCodes[CharCodes[\"SEMI\"] = 59] = \"SEMI\";\n CharCodes[CharCodes[\"EQUALS\"] = 61] = \"EQUALS\";\n CharCodes[CharCodes[\"ZERO\"] = 48] = \"ZERO\";\n CharCodes[CharCodes[\"NINE\"] = 57] = \"NINE\";\n CharCodes[CharCodes[\"LOWER_A\"] = 97] = \"LOWER_A\";\n CharCodes[CharCodes[\"LOWER_F\"] = 102] = \"LOWER_F\";\n CharCodes[CharCodes[\"LOWER_X\"] = 120] = \"LOWER_X\";\n CharCodes[CharCodes[\"LOWER_Z\"] = 122] = \"LOWER_Z\";\n CharCodes[CharCodes[\"UPPER_A\"] = 65] = \"UPPER_A\";\n CharCodes[CharCodes[\"UPPER_F\"] = 70] = \"UPPER_F\";\n CharCodes[CharCodes[\"UPPER_Z\"] = 90] = \"UPPER_Z\";\n})(CharCodes || (CharCodes = {}));\n/** Bit that needs to be set to convert an upper case ASCII character to lower case */\nconst TO_LOWER_BIT = 0b10_0000;\nfunction isNumber(code) {\n return code >= CharCodes.ZERO && code <= CharCodes.NINE;\n}\nfunction isHexadecimalCharacter(code) {\n return ((code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_F) ||\n (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_F));\n}\nfunction isAsciiAlphaNumeric(code) {\n return ((code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_Z) ||\n (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_Z) ||\n isNumber(code));\n}\n/**\n * Checks if the given character is a valid end character for an entity in an attribute.\n *\n * Attribute values that aren't terminated properly aren't parsed, and shouldn't lead to a parser error.\n * See the example in https://html.spec.whatwg.org/multipage/parsing.html#named-character-reference-state\n * @param code Code point to decode.\n */\nfunction isEntityInAttributeInvalidEnd(code) {\n return code === CharCodes.EQUALS || isAsciiAlphaNumeric(code);\n}\nvar EntityDecoderState;\n(function (EntityDecoderState) {\n EntityDecoderState[EntityDecoderState[\"EntityStart\"] = 0] = \"EntityStart\";\n EntityDecoderState[EntityDecoderState[\"NumericStart\"] = 1] = \"NumericStart\";\n EntityDecoderState[EntityDecoderState[\"NumericDecimal\"] = 2] = \"NumericDecimal\";\n EntityDecoderState[EntityDecoderState[\"NumericHex\"] = 3] = \"NumericHex\";\n EntityDecoderState[EntityDecoderState[\"NamedEntity\"] = 4] = \"NamedEntity\";\n})(EntityDecoderState || (EntityDecoderState = {}));\n/**\n * Decoding mode for named entities.\n */\nexport var DecodingMode;\n(function (DecodingMode) {\n /** Entities in text nodes that can end with any character. */\n DecodingMode[DecodingMode[\"Legacy\"] = 0] = \"Legacy\";\n /** Only allow entities terminated with a semicolon. */\n DecodingMode[DecodingMode[\"Strict\"] = 1] = \"Strict\";\n /** Entities in attributes have limitations on ending characters. */\n DecodingMode[DecodingMode[\"Attribute\"] = 2] = \"Attribute\";\n})(DecodingMode || (DecodingMode = {}));\n/**\n * Token decoder with support of writing partial entities.\n */\nexport class EntityDecoder {\n decodeTree;\n emitCodePoint;\n errors;\n constructor(\n /** The tree used to decode entities. */\n // biome-ignore lint/correctness/noUnusedPrivateClassMembers: False positive\n decodeTree, \n /**\n * The function that is called when a codepoint is decoded.\n *\n * For multi-byte named entities, this will be called multiple times,\n * with the second codepoint, and the same `consumed` value.\n * @param codepoint The decoded codepoint.\n * @param consumed The number of bytes consumed by the decoder.\n */\n emitCodePoint, \n /** An object that is used to produce errors. */\n errors) {\n this.decodeTree = decodeTree;\n this.emitCodePoint = emitCodePoint;\n this.errors = errors;\n }\n /** The current state of the decoder. */\n state = EntityDecoderState.EntityStart;\n /** Characters that were consumed while parsing an entity. */\n consumed = 1;\n /**\n * The result of the entity.\n *\n * Either the result index of a numeric entity, or the codepoint of a\n * numeric entity.\n */\n result = 0;\n /** The current index in the decode tree. */\n treeIndex = 0;\n /** The number of characters that were consumed in excess. */\n excess = 1;\n /** The mode in which the decoder is operating. */\n decodeMode = DecodingMode.Strict;\n /** The number of characters that have been consumed in the current run. */\n runConsumed = 0;\n /**\n * Resets the instance to make it reusable.\n * @param decodeMode Entity decoding mode to use.\n */\n startEntity(decodeMode) {\n this.decodeMode = decodeMode;\n this.state = EntityDecoderState.EntityStart;\n this.result = 0;\n this.treeIndex = 0;\n this.excess = 1;\n this.consumed = 1;\n this.runConsumed = 0;\n }\n /**\n * Write an entity to the decoder. This can be called multiple times with partial entities.\n * If the entity is incomplete, the decoder will return -1.\n *\n * Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the\n * entity is incomplete, and resume when the next string is written.\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The offset at which the entity begins. Should be 0 if this is not the first call.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n write(input, offset) {\n switch (this.state) {\n case EntityDecoderState.EntityStart: {\n if (input.charCodeAt(offset) === CharCodes.NUM) {\n this.state = EntityDecoderState.NumericStart;\n this.consumed += 1;\n return this.stateNumericStart(input, offset + 1);\n }\n this.state = EntityDecoderState.NamedEntity;\n return this.stateNamedEntity(input, offset);\n }\n case EntityDecoderState.NumericStart: {\n return this.stateNumericStart(input, offset);\n }\n case EntityDecoderState.NumericDecimal: {\n return this.stateNumericDecimal(input, offset);\n }\n case EntityDecoderState.NumericHex: {\n return this.stateNumericHex(input, offset);\n }\n case EntityDecoderState.NamedEntity: {\n return this.stateNamedEntity(input, offset);\n }\n }\n }\n /**\n * Switches between the numeric decimal and hexadecimal states.\n *\n * Equivalent to the `Numeric character reference state` in the HTML spec.\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n stateNumericStart(input, offset) {\n if (offset >= input.length) {\n return -1;\n }\n if ((input.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) {\n this.state = EntityDecoderState.NumericHex;\n this.consumed += 1;\n return this.stateNumericHex(input, offset + 1);\n }\n this.state = EntityDecoderState.NumericDecimal;\n return this.stateNumericDecimal(input, offset);\n }\n /**\n * Parses a hexadecimal numeric entity.\n *\n * Equivalent to the `Hexademical character reference state` in the HTML spec.\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n stateNumericHex(input, offset) {\n while (offset < input.length) {\n const char = input.charCodeAt(offset);\n if (isNumber(char) || isHexadecimalCharacter(char)) {\n // Convert hex digit to value (0-15); 'a'/'A' -> 10.\n const digit = char <= CharCodes.NINE\n ? char - CharCodes.ZERO\n : (char | TO_LOWER_BIT) - CharCodes.LOWER_A + 10;\n this.result = this.result * 16 + digit;\n this.consumed++;\n offset++;\n }\n else {\n return this.emitNumericEntity(char, 3);\n }\n }\n return -1; // Incomplete entity\n }\n /**\n * Parses a decimal numeric entity.\n *\n * Equivalent to the `Decimal character reference state` in the HTML spec.\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n stateNumericDecimal(input, offset) {\n while (offset < input.length) {\n const char = input.charCodeAt(offset);\n if (isNumber(char)) {\n this.result = this.result * 10 + (char - CharCodes.ZERO);\n this.consumed++;\n offset++;\n }\n else {\n return this.emitNumericEntity(char, 2);\n }\n }\n return -1; // Incomplete entity\n }\n /**\n * Validate and emit a numeric entity.\n *\n * Implements the logic from the `Hexademical character reference start\n * state` and `Numeric character reference end state` in the HTML spec.\n * @param lastCp The last code point of the entity. Used to see if the\n * entity was terminated with a semicolon.\n * @param expectedLength The minimum number of characters that should be\n * consumed. Used to validate that at least one digit\n * was consumed.\n * @returns The number of characters that were consumed.\n */\n emitNumericEntity(lastCp, expectedLength) {\n // Ensure we consumed at least one digit.\n if (this.consumed <= expectedLength) {\n this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed);\n return 0;\n }\n // Figure out if this is a legit end of the entity\n if (lastCp === CharCodes.SEMI) {\n this.consumed += 1;\n }\n else if (this.decodeMode === DecodingMode.Strict) {\n return 0;\n }\n this.emitCodePoint(replaceCodePoint(this.result), this.consumed);\n if (this.errors) {\n if (lastCp !== CharCodes.SEMI) {\n this.errors.missingSemicolonAfterCharacterReference();\n }\n this.errors.validateNumericCharacterReference(this.result);\n }\n return this.consumed;\n }\n /**\n * Parses a named entity.\n *\n * Equivalent to the `Named character reference state` in the HTML spec.\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n stateNamedEntity(input, offset) {\n const { decodeTree } = this;\n let current = decodeTree[this.treeIndex];\n // The length is the number of bytes of the value, including the current byte.\n let valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n while (offset < input.length) {\n // Handle compact runs (possibly inline): valueLength == 0 and SEMI_REQUIRED bit set.\n if (valueLength === 0 && (current & BinTrieFlags.FLAG13) !== 0) {\n const runLength = (current & BinTrieFlags.BRANCH_LENGTH) >> 7; /* 2..63 */\n // If we are starting a run, check the first char.\n if (this.runConsumed === 0) {\n const firstChar = current & BinTrieFlags.JUMP_TABLE;\n if (input.charCodeAt(offset) !== firstChar) {\n return this.result === 0\n ? 0\n : this.emitNotTerminatedNamedEntity();\n }\n offset++;\n this.excess++;\n this.runConsumed++;\n }\n // Check remaining characters in the run.\n while (this.runConsumed < runLength) {\n if (offset >= input.length) {\n return -1;\n }\n const charIndexInPacked = this.runConsumed - 1;\n const packedWord = decodeTree[this.treeIndex + 1 + (charIndexInPacked >> 1)];\n const expectedChar = charIndexInPacked % 2 === 0\n ? packedWord & 0xff\n : (packedWord >> 8) & 0xff;\n if (input.charCodeAt(offset) !== expectedChar) {\n this.runConsumed = 0;\n return this.result === 0\n ? 0\n : this.emitNotTerminatedNamedEntity();\n }\n offset++;\n this.excess++;\n this.runConsumed++;\n }\n this.runConsumed = 0;\n this.treeIndex += 1 + (runLength >> 1);\n current = decodeTree[this.treeIndex];\n valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n }\n if (offset >= input.length)\n break;\n const char = input.charCodeAt(offset);\n /*\n * Implicit semicolon handling for nodes that require a semicolon but\n * don't have an explicit ';' branch stored in the trie. If we have\n * a value on the current node, it requires a semicolon, and the\n * current input character is a semicolon, emit the entity using the\n * current node (without descending further).\n */\n if (char === CharCodes.SEMI &&\n valueLength !== 0 &&\n (current & BinTrieFlags.FLAG13) !== 0) {\n return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);\n }\n this.treeIndex = determineBranch(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char);\n if (this.treeIndex < 0) {\n return this.result === 0 ||\n // If we are parsing an attribute\n (this.decodeMode === DecodingMode.Attribute &&\n // We shouldn't have consumed any characters after the entity,\n (valueLength === 0 ||\n // And there should be no invalid characters.\n isEntityInAttributeInvalidEnd(char)))\n ? 0\n : this.emitNotTerminatedNamedEntity();\n }\n current = decodeTree[this.treeIndex];\n valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n // If the branch is a value, store it and continue\n if (valueLength !== 0) {\n // If the entity is terminated by a semicolon, we are done.\n if (char === CharCodes.SEMI) {\n return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);\n }\n // If we encounter a non-terminated (legacy) entity while parsing strictly, then ignore it.\n if (this.decodeMode !== DecodingMode.Strict &&\n (current & BinTrieFlags.FLAG13) === 0) {\n this.result = this.treeIndex;\n this.consumed += this.excess;\n this.excess = 0;\n }\n }\n // Increment offset & excess for next iteration\n offset++;\n this.excess++;\n }\n return -1;\n }\n /**\n * Emit a named entity that was not terminated with a semicolon.\n * @returns The number of characters consumed.\n */\n emitNotTerminatedNamedEntity() {\n const { result, decodeTree } = this;\n const valueLength = (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14;\n this.emitNamedEntityData(result, valueLength, this.consumed);\n this.errors?.missingSemicolonAfterCharacterReference();\n return this.consumed;\n }\n /**\n * Emit a named entity.\n * @param result The index of the entity in the decode tree.\n * @param valueLength The number of bytes in the entity.\n * @param consumed The number of characters consumed.\n * @returns The number of characters consumed.\n */\n emitNamedEntityData(result, valueLength, consumed) {\n const { decodeTree } = this;\n this.emitCodePoint(valueLength === 1\n ? decodeTree[result] &\n ~(BinTrieFlags.VALUE_LENGTH | BinTrieFlags.FLAG13)\n : decodeTree[result + 1], consumed);\n if (valueLength === 3) {\n // For multi-byte values, we need to emit the second byte.\n this.emitCodePoint(decodeTree[result + 2], consumed);\n }\n return consumed;\n }\n /**\n * Signal to the parser that the end of the input was reached.\n *\n * Remaining data will be emitted and relevant errors will be produced.\n * @returns The number of characters consumed.\n */\n end() {\n switch (this.state) {\n case EntityDecoderState.NamedEntity: {\n // Emit a named entity if we have one.\n return this.result !== 0 &&\n (this.decodeMode !== DecodingMode.Attribute ||\n this.result === this.treeIndex)\n ? this.emitNotTerminatedNamedEntity()\n : 0;\n }\n // Otherwise, emit a numeric entity if we have one.\n case EntityDecoderState.NumericDecimal: {\n return this.emitNumericEntity(0, 2);\n }\n case EntityDecoderState.NumericHex: {\n return this.emitNumericEntity(0, 3);\n }\n case EntityDecoderState.NumericStart: {\n this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed);\n return 0;\n }\n case EntityDecoderState.EntityStart: {\n // Return 0 if we have no entity.\n return 0;\n }\n }\n }\n}\n/**\n * Creates a function that decodes entities in a string.\n * @param decodeTree The decode tree.\n * @returns A function that decodes entities in a string.\n */\nfunction getDecoder(decodeTree) {\n let returnValue = \"\";\n const decoder = new EntityDecoder(decodeTree, (data) => (returnValue += String.fromCodePoint(data)));\n return function decodeWithTrie(input, decodeMode) {\n let lastIndex = 0;\n let offset = 0;\n while ((offset = input.indexOf(\"&\", offset)) >= 0) {\n returnValue += input.slice(lastIndex, offset);\n decoder.startEntity(decodeMode);\n const length = decoder.write(input, \n // Skip the \"&\"\n offset + 1);\n if (length < 0) {\n lastIndex = offset + decoder.end();\n break;\n }\n lastIndex = offset + length;\n // If `length` is 0, skip the current `&` and continue.\n offset = length === 0 ? lastIndex + 1 : lastIndex;\n }\n const result = returnValue + input.slice(lastIndex);\n // Make sure we don't keep a reference to the final string.\n returnValue = \"\";\n return result;\n };\n}\n/**\n * Determines the branch of the current node that is taken given the current\n * character. This function is used to traverse the trie.\n * @param decodeTree The trie.\n * @param current The current node.\n * @param nodeIndex Index immediately after the current node header.\n * @param char The current character.\n * @returns The index of the next node, or -1 if no branch is taken.\n */\nexport function determineBranch(decodeTree, current, nodeIndex, char) {\n const branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;\n const jumpOffset = current & BinTrieFlags.JUMP_TABLE;\n // Case 1: Single branch encoded in jump offset\n if (branchCount === 0) {\n return jumpOffset !== 0 && char === jumpOffset ? nodeIndex : -1;\n }\n // Case 2: Multiple branches encoded in jump table\n if (jumpOffset) {\n const value = char - jumpOffset;\n return value < 0 || value >= branchCount\n ? -1\n : decodeTree[nodeIndex + value] - 1;\n }\n // Case 3: Multiple branches encoded in packed dictionary (two keys per uint16)\n const packedKeySlots = (branchCount + 1) >> 1;\n /*\n * Treat packed keys as a virtual sorted array of length `branchCount`.\n * Key(i) = low byte for even i, high byte for odd i in slot i>>1.\n */\n let lo = 0;\n let hi = branchCount - 1;\n while (lo <= hi) {\n const mid = (lo + hi) >>> 1;\n const slot = mid >> 1;\n const packed = decodeTree[nodeIndex + slot];\n const midKey = (packed >> ((mid & 1) * 8)) & 0xff;\n if (midKey < char) {\n lo = mid + 1;\n }\n else if (midKey > char) {\n hi = mid - 1;\n }\n else {\n return decodeTree[nodeIndex + packedKeySlots + mid];\n }\n }\n return -1;\n}\nconst htmlDecoder = /* #__PURE__ */ getDecoder(htmlDecodeTree);\nconst xmlDecoder = /* #__PURE__ */ getDecoder(xmlDecodeTree);\n/**\n * Decodes an HTML string.\n * @param htmlString The string to decode.\n * @param mode The decoding mode.\n * @returns The decoded string.\n */\nexport function decodeHTML(htmlString, mode = DecodingMode.Legacy) {\n return htmlDecoder(htmlString, mode);\n}\n/**\n * Decodes an HTML string in an attribute.\n * @param htmlAttribute The string to decode.\n * @returns The decoded string.\n */\nexport function decodeHTMLAttribute(htmlAttribute) {\n return htmlDecoder(htmlAttribute, DecodingMode.Attribute);\n}\n/**\n * Decodes an HTML string, requiring all entities to be terminated by a semicolon.\n * @param htmlString The string to decode.\n * @returns The decoded string.\n */\nexport function decodeHTMLStrict(htmlString) {\n return htmlDecoder(htmlString, DecodingMode.Strict);\n}\n/**\n * Decodes an XML string, requiring all entities to be terminated by a semicolon.\n * @param xmlString The string to decode.\n * @returns The decoded string.\n */\nexport function decodeXML(xmlString) {\n return xmlDecoder(xmlString, DecodingMode.Strict);\n}\nexport { replaceCodePoint } from \"./decode-codepoint.js\";\n// Re-export for use by eg. htmlparser2\nexport { htmlDecodeTree } from \"./generated/decode-data-html.js\";\nexport { xmlDecodeTree } from \"./generated/decode-data-xml.js\";\n//# sourceMappingURL=decode.js.map","/** All valid namespaces in HTML. */\nexport var NS;\n(function (NS) {\n NS[\"HTML\"] = \"http://www.w3.org/1999/xhtml\";\n NS[\"MATHML\"] = \"http://www.w3.org/1998/Math/MathML\";\n NS[\"SVG\"] = \"http://www.w3.org/2000/svg\";\n NS[\"XLINK\"] = \"http://www.w3.org/1999/xlink\";\n NS[\"XML\"] = \"http://www.w3.org/XML/1998/namespace\";\n NS[\"XMLNS\"] = \"http://www.w3.org/2000/xmlns/\";\n})(NS || (NS = {}));\nexport var ATTRS;\n(function (ATTRS) {\n ATTRS[\"TYPE\"] = \"type\";\n ATTRS[\"ACTION\"] = \"action\";\n ATTRS[\"ENCODING\"] = \"encoding\";\n ATTRS[\"PROMPT\"] = \"prompt\";\n ATTRS[\"NAME\"] = \"name\";\n ATTRS[\"COLOR\"] = \"color\";\n ATTRS[\"FACE\"] = \"face\";\n ATTRS[\"SIZE\"] = \"size\";\n})(ATTRS || (ATTRS = {}));\n/**\n * The mode of the document.\n *\n * @see {@link https://dom.spec.whatwg.org/#concept-document-limited-quirks}\n */\nexport var DOCUMENT_MODE;\n(function (DOCUMENT_MODE) {\n DOCUMENT_MODE[\"NO_QUIRKS\"] = \"no-quirks\";\n DOCUMENT_MODE[\"QUIRKS\"] = \"quirks\";\n DOCUMENT_MODE[\"LIMITED_QUIRKS\"] = \"limited-quirks\";\n})(DOCUMENT_MODE || (DOCUMENT_MODE = {}));\nexport var TAG_NAMES;\n(function (TAG_NAMES) {\n TAG_NAMES[\"A\"] = \"a\";\n TAG_NAMES[\"ADDRESS\"] = \"address\";\n TAG_NAMES[\"ANNOTATION_XML\"] = \"annotation-xml\";\n TAG_NAMES[\"APPLET\"] = \"applet\";\n TAG_NAMES[\"AREA\"] = \"area\";\n TAG_NAMES[\"ARTICLE\"] = \"article\";\n TAG_NAMES[\"ASIDE\"] = \"aside\";\n TAG_NAMES[\"B\"] = \"b\";\n TAG_NAMES[\"BASE\"] = \"base\";\n TAG_NAMES[\"BASEFONT\"] = \"basefont\";\n TAG_NAMES[\"BGSOUND\"] = \"bgsound\";\n TAG_NAMES[\"BIG\"] = \"big\";\n TAG_NAMES[\"BLOCKQUOTE\"] = \"blockquote\";\n TAG_NAMES[\"BODY\"] = \"body\";\n TAG_NAMES[\"BR\"] = \"br\";\n TAG_NAMES[\"BUTTON\"] = \"button\";\n TAG_NAMES[\"CAPTION\"] = \"caption\";\n TAG_NAMES[\"CENTER\"] = \"center\";\n TAG_NAMES[\"CODE\"] = \"code\";\n TAG_NAMES[\"COL\"] = \"col\";\n TAG_NAMES[\"COLGROUP\"] = \"colgroup\";\n TAG_NAMES[\"DD\"] = \"dd\";\n TAG_NAMES[\"DESC\"] = \"desc\";\n TAG_NAMES[\"DETAILS\"] = \"details\";\n TAG_NAMES[\"DIALOG\"] = \"dialog\";\n TAG_NAMES[\"DIR\"] = \"dir\";\n TAG_NAMES[\"DIV\"] = \"div\";\n TAG_NAMES[\"DL\"] = \"dl\";\n TAG_NAMES[\"DT\"] = \"dt\";\n TAG_NAMES[\"EM\"] = \"em\";\n TAG_NAMES[\"EMBED\"] = \"embed\";\n TAG_NAMES[\"FIELDSET\"] = \"fieldset\";\n TAG_NAMES[\"FIGCAPTION\"] = \"figcaption\";\n TAG_NAMES[\"FIGURE\"] = \"figure\";\n TAG_NAMES[\"FONT\"] = \"font\";\n TAG_NAMES[\"FOOTER\"] = \"footer\";\n TAG_NAMES[\"FOREIGN_OBJECT\"] = \"foreignObject\";\n TAG_NAMES[\"FORM\"] = \"form\";\n TAG_NAMES[\"FRAME\"] = \"frame\";\n TAG_NAMES[\"FRAMESET\"] = \"frameset\";\n TAG_NAMES[\"H1\"] = \"h1\";\n TAG_NAMES[\"H2\"] = \"h2\";\n TAG_NAMES[\"H3\"] = \"h3\";\n TAG_NAMES[\"H4\"] = \"h4\";\n TAG_NAMES[\"H5\"] = \"h5\";\n TAG_NAMES[\"H6\"] = \"h6\";\n TAG_NAMES[\"HEAD\"] = \"head\";\n TAG_NAMES[\"HEADER\"] = \"header\";\n TAG_NAMES[\"HGROUP\"] = \"hgroup\";\n TAG_NAMES[\"HR\"] = \"hr\";\n TAG_NAMES[\"HTML\"] = \"html\";\n TAG_NAMES[\"I\"] = \"i\";\n TAG_NAMES[\"IMG\"] = \"img\";\n TAG_NAMES[\"IMAGE\"] = \"image\";\n TAG_NAMES[\"INPUT\"] = \"input\";\n TAG_NAMES[\"IFRAME\"] = \"iframe\";\n TAG_NAMES[\"KEYGEN\"] = \"keygen\";\n TAG_NAMES[\"LABEL\"] = \"label\";\n TAG_NAMES[\"LI\"] = \"li\";\n TAG_NAMES[\"LINK\"] = \"link\";\n TAG_NAMES[\"LISTING\"] = \"listing\";\n TAG_NAMES[\"MAIN\"] = \"main\";\n TAG_NAMES[\"MALIGNMARK\"] = \"malignmark\";\n TAG_NAMES[\"MARQUEE\"] = \"marquee\";\n TAG_NAMES[\"MATH\"] = \"math\";\n TAG_NAMES[\"MENU\"] = \"menu\";\n TAG_NAMES[\"META\"] = \"meta\";\n TAG_NAMES[\"MGLYPH\"] = \"mglyph\";\n TAG_NAMES[\"MI\"] = \"mi\";\n TAG_NAMES[\"MO\"] = \"mo\";\n TAG_NAMES[\"MN\"] = \"mn\";\n TAG_NAMES[\"MS\"] = \"ms\";\n TAG_NAMES[\"MTEXT\"] = \"mtext\";\n TAG_NAMES[\"NAV\"] = \"nav\";\n TAG_NAMES[\"NOBR\"] = \"nobr\";\n TAG_NAMES[\"NOFRAMES\"] = \"noframes\";\n TAG_NAMES[\"NOEMBED\"] = \"noembed\";\n TAG_NAMES[\"NOSCRIPT\"] = \"noscript\";\n TAG_NAMES[\"OBJECT\"] = \"object\";\n TAG_NAMES[\"OL\"] = \"ol\";\n TAG_NAMES[\"OPTGROUP\"] = \"optgroup\";\n TAG_NAMES[\"OPTION\"] = \"option\";\n TAG_NAMES[\"P\"] = \"p\";\n TAG_NAMES[\"PARAM\"] = \"param\";\n TAG_NAMES[\"PLAINTEXT\"] = \"plaintext\";\n TAG_NAMES[\"PRE\"] = \"pre\";\n TAG_NAMES[\"RB\"] = \"rb\";\n TAG_NAMES[\"RP\"] = \"rp\";\n TAG_NAMES[\"RT\"] = \"rt\";\n TAG_NAMES[\"RTC\"] = \"rtc\";\n TAG_NAMES[\"RUBY\"] = \"ruby\";\n TAG_NAMES[\"S\"] = \"s\";\n TAG_NAMES[\"SCRIPT\"] = \"script\";\n TAG_NAMES[\"SEARCH\"] = \"search\";\n TAG_NAMES[\"SECTION\"] = \"section\";\n TAG_NAMES[\"SELECT\"] = \"select\";\n TAG_NAMES[\"SOURCE\"] = \"source\";\n TAG_NAMES[\"SMALL\"] = \"small\";\n TAG_NAMES[\"SPAN\"] = \"span\";\n TAG_NAMES[\"STRIKE\"] = \"strike\";\n TAG_NAMES[\"STRONG\"] = \"strong\";\n TAG_NAMES[\"STYLE\"] = \"style\";\n TAG_NAMES[\"SUB\"] = \"sub\";\n TAG_NAMES[\"SUMMARY\"] = \"summary\";\n TAG_NAMES[\"SUP\"] = \"sup\";\n TAG_NAMES[\"TABLE\"] = \"table\";\n TAG_NAMES[\"TBODY\"] = \"tbody\";\n TAG_NAMES[\"TEMPLATE\"] = \"template\";\n TAG_NAMES[\"TEXTAREA\"] = \"textarea\";\n TAG_NAMES[\"TFOOT\"] = \"tfoot\";\n TAG_NAMES[\"TD\"] = \"td\";\n TAG_NAMES[\"TH\"] = \"th\";\n TAG_NAMES[\"THEAD\"] = \"thead\";\n TAG_NAMES[\"TITLE\"] = \"title\";\n TAG_NAMES[\"TR\"] = \"tr\";\n TAG_NAMES[\"TRACK\"] = \"track\";\n TAG_NAMES[\"TT\"] = \"tt\";\n TAG_NAMES[\"U\"] = \"u\";\n TAG_NAMES[\"UL\"] = \"ul\";\n TAG_NAMES[\"SVG\"] = \"svg\";\n TAG_NAMES[\"VAR\"] = \"var\";\n TAG_NAMES[\"WBR\"] = \"wbr\";\n TAG_NAMES[\"XMP\"] = \"xmp\";\n})(TAG_NAMES || (TAG_NAMES = {}));\n/**\n * Tag IDs are numeric IDs for known tag names.\n *\n * We use tag IDs to improve the performance of tag name comparisons.\n */\nexport var TAG_ID;\n(function (TAG_ID) {\n TAG_ID[TAG_ID[\"UNKNOWN\"] = 0] = \"UNKNOWN\";\n TAG_ID[TAG_ID[\"A\"] = 1] = \"A\";\n TAG_ID[TAG_ID[\"ADDRESS\"] = 2] = \"ADDRESS\";\n TAG_ID[TAG_ID[\"ANNOTATION_XML\"] = 3] = \"ANNOTATION_XML\";\n TAG_ID[TAG_ID[\"APPLET\"] = 4] = \"APPLET\";\n TAG_ID[TAG_ID[\"AREA\"] = 5] = \"AREA\";\n TAG_ID[TAG_ID[\"ARTICLE\"] = 6] = \"ARTICLE\";\n TAG_ID[TAG_ID[\"ASIDE\"] = 7] = \"ASIDE\";\n TAG_ID[TAG_ID[\"B\"] = 8] = \"B\";\n TAG_ID[TAG_ID[\"BASE\"] = 9] = \"BASE\";\n TAG_ID[TAG_ID[\"BASEFONT\"] = 10] = \"BASEFONT\";\n TAG_ID[TAG_ID[\"BGSOUND\"] = 11] = \"BGSOUND\";\n TAG_ID[TAG_ID[\"BIG\"] = 12] = \"BIG\";\n TAG_ID[TAG_ID[\"BLOCKQUOTE\"] = 13] = \"BLOCKQUOTE\";\n TAG_ID[TAG_ID[\"BODY\"] = 14] = \"BODY\";\n TAG_ID[TAG_ID[\"BR\"] = 15] = \"BR\";\n TAG_ID[TAG_ID[\"BUTTON\"] = 16] = \"BUTTON\";\n TAG_ID[TAG_ID[\"CAPTION\"] = 17] = \"CAPTION\";\n TAG_ID[TAG_ID[\"CENTER\"] = 18] = \"CENTER\";\n TAG_ID[TAG_ID[\"CODE\"] = 19] = \"CODE\";\n TAG_ID[TAG_ID[\"COL\"] = 20] = \"COL\";\n TAG_ID[TAG_ID[\"COLGROUP\"] = 21] = \"COLGROUP\";\n TAG_ID[TAG_ID[\"DD\"] = 22] = \"DD\";\n TAG_ID[TAG_ID[\"DESC\"] = 23] = \"DESC\";\n TAG_ID[TAG_ID[\"DETAILS\"] = 24] = \"DETAILS\";\n TAG_ID[TAG_ID[\"DIALOG\"] = 25] = \"DIALOG\";\n TAG_ID[TAG_ID[\"DIR\"] = 26] = \"DIR\";\n TAG_ID[TAG_ID[\"DIV\"] = 27] = \"DIV\";\n TAG_ID[TAG_ID[\"DL\"] = 28] = \"DL\";\n TAG_ID[TAG_ID[\"DT\"] = 29] = \"DT\";\n TAG_ID[TAG_ID[\"EM\"] = 30] = \"EM\";\n TAG_ID[TAG_ID[\"EMBED\"] = 31] = \"EMBED\";\n TAG_ID[TAG_ID[\"FIELDSET\"] = 32] = \"FIELDSET\";\n TAG_ID[TAG_ID[\"FIGCAPTION\"] = 33] = \"FIGCAPTION\";\n TAG_ID[TAG_ID[\"FIGURE\"] = 34] = \"FIGURE\";\n TAG_ID[TAG_ID[\"FONT\"] = 35] = \"FONT\";\n TAG_ID[TAG_ID[\"FOOTER\"] = 36] = \"FOOTER\";\n TAG_ID[TAG_ID[\"FOREIGN_OBJECT\"] = 37] = \"FOREIGN_OBJECT\";\n TAG_ID[TAG_ID[\"FORM\"] = 38] = \"FORM\";\n TAG_ID[TAG_ID[\"FRAME\"] = 39] = \"FRAME\";\n TAG_ID[TAG_ID[\"FRAMESET\"] = 40] = \"FRAMESET\";\n TAG_ID[TAG_ID[\"H1\"] = 41] = \"H1\";\n TAG_ID[TAG_ID[\"H2\"] = 42] = \"H2\";\n TAG_ID[TAG_ID[\"H3\"] = 43] = \"H3\";\n TAG_ID[TAG_ID[\"H4\"] = 44] = \"H4\";\n TAG_ID[TAG_ID[\"H5\"] = 45] = \"H5\";\n TAG_ID[TAG_ID[\"H6\"] = 46] = \"H6\";\n TAG_ID[TAG_ID[\"HEAD\"] = 47] = \"HEAD\";\n TAG_ID[TAG_ID[\"HEADER\"] = 48] = \"HEADER\";\n TAG_ID[TAG_ID[\"HGROUP\"] = 49] = \"HGROUP\";\n TAG_ID[TAG_ID[\"HR\"] = 50] = \"HR\";\n TAG_ID[TAG_ID[\"HTML\"] = 51] = \"HTML\";\n TAG_ID[TAG_ID[\"I\"] = 52] = \"I\";\n TAG_ID[TAG_ID[\"IMG\"] = 53] = \"IMG\";\n TAG_ID[TAG_ID[\"IMAGE\"] = 54] = \"IMAGE\";\n TAG_ID[TAG_ID[\"INPUT\"] = 55] = \"INPUT\";\n TAG_ID[TAG_ID[\"IFRAME\"] = 56] = \"IFRAME\";\n TAG_ID[TAG_ID[\"KEYGEN\"] = 57] = \"KEYGEN\";\n TAG_ID[TAG_ID[\"LABEL\"] = 58] = \"LABEL\";\n TAG_ID[TAG_ID[\"LI\"] = 59] = \"LI\";\n TAG_ID[TAG_ID[\"LINK\"] = 60] = \"LINK\";\n TAG_ID[TAG_ID[\"LISTING\"] = 61] = \"LISTING\";\n TAG_ID[TAG_ID[\"MAIN\"] = 62] = \"MAIN\";\n TAG_ID[TAG_ID[\"MALIGNMARK\"] = 63] = \"MALIGNMARK\";\n TAG_ID[TAG_ID[\"MARQUEE\"] = 64] = \"MARQUEE\";\n TAG_ID[TAG_ID[\"MATH\"] = 65] = \"MATH\";\n TAG_ID[TAG_ID[\"MENU\"] = 66] = \"MENU\";\n TAG_ID[TAG_ID[\"META\"] = 67] = \"META\";\n TAG_ID[TAG_ID[\"MGLYPH\"] = 68] = \"MGLYPH\";\n TAG_ID[TAG_ID[\"MI\"] = 69] = \"MI\";\n TAG_ID[TAG_ID[\"MO\"] = 70] = \"MO\";\n TAG_ID[TAG_ID[\"MN\"] = 71] = \"MN\";\n TAG_ID[TAG_ID[\"MS\"] = 72] = \"MS\";\n TAG_ID[TAG_ID[\"MTEXT\"] = 73] = \"MTEXT\";\n TAG_ID[TAG_ID[\"NAV\"] = 74] = \"NAV\";\n TAG_ID[TAG_ID[\"NOBR\"] = 75] = \"NOBR\";\n TAG_ID[TAG_ID[\"NOFRAMES\"] = 76] = \"NOFRAMES\";\n TAG_ID[TAG_ID[\"NOEMBED\"] = 77] = \"NOEMBED\";\n TAG_ID[TAG_ID[\"NOSCRIPT\"] = 78] = \"NOSCRIPT\";\n TAG_ID[TAG_ID[\"OBJECT\"] = 79] = \"OBJECT\";\n TAG_ID[TAG_ID[\"OL\"] = 80] = \"OL\";\n TAG_ID[TAG_ID[\"OPTGROUP\"] = 81] = \"OPTGROUP\";\n TAG_ID[TAG_ID[\"OPTION\"] = 82] = \"OPTION\";\n TAG_ID[TAG_ID[\"P\"] = 83] = \"P\";\n TAG_ID[TAG_ID[\"PARAM\"] = 84] = \"PARAM\";\n TAG_ID[TAG_ID[\"PLAINTEXT\"] = 85] = \"PLAINTEXT\";\n TAG_ID[TAG_ID[\"PRE\"] = 86] = \"PRE\";\n TAG_ID[TAG_ID[\"RB\"] = 87] = \"RB\";\n TAG_ID[TAG_ID[\"RP\"] = 88] = \"RP\";\n TAG_ID[TAG_ID[\"RT\"] = 89] = \"RT\";\n TAG_ID[TAG_ID[\"RTC\"] = 90] = \"RTC\";\n TAG_ID[TAG_ID[\"RUBY\"] = 91] = \"RUBY\";\n TAG_ID[TAG_ID[\"S\"] = 92] = \"S\";\n TAG_ID[TAG_ID[\"SCRIPT\"] = 93] = \"SCRIPT\";\n TAG_ID[TAG_ID[\"SEARCH\"] = 94] = \"SEARCH\";\n TAG_ID[TAG_ID[\"SECTION\"] = 95] = \"SECTION\";\n TAG_ID[TAG_ID[\"SELECT\"] = 96] = \"SELECT\";\n TAG_ID[TAG_ID[\"SOURCE\"] = 97] = \"SOURCE\";\n TAG_ID[TAG_ID[\"SMALL\"] = 98] = \"SMALL\";\n TAG_ID[TAG_ID[\"SPAN\"] = 99] = \"SPAN\";\n TAG_ID[TAG_ID[\"STRIKE\"] = 100] = \"STRIKE\";\n TAG_ID[TAG_ID[\"STRONG\"] = 101] = \"STRONG\";\n TAG_ID[TAG_ID[\"STYLE\"] = 102] = \"STYLE\";\n TAG_ID[TAG_ID[\"SUB\"] = 103] = \"SUB\";\n TAG_ID[TAG_ID[\"SUMMARY\"] = 104] = \"SUMMARY\";\n TAG_ID[TAG_ID[\"SUP\"] = 105] = \"SUP\";\n TAG_ID[TAG_ID[\"TABLE\"] = 106] = \"TABLE\";\n TAG_ID[TAG_ID[\"TBODY\"] = 107] = \"TBODY\";\n TAG_ID[TAG_ID[\"TEMPLATE\"] = 108] = \"TEMPLATE\";\n TAG_ID[TAG_ID[\"TEXTAREA\"] = 109] = \"TEXTAREA\";\n TAG_ID[TAG_ID[\"TFOOT\"] = 110] = \"TFOOT\";\n TAG_ID[TAG_ID[\"TD\"] = 111] = \"TD\";\n TAG_ID[TAG_ID[\"TH\"] = 112] = \"TH\";\n TAG_ID[TAG_ID[\"THEAD\"] = 113] = \"THEAD\";\n TAG_ID[TAG_ID[\"TITLE\"] = 114] = \"TITLE\";\n TAG_ID[TAG_ID[\"TR\"] = 115] = \"TR\";\n TAG_ID[TAG_ID[\"TRACK\"] = 116] = \"TRACK\";\n TAG_ID[TAG_ID[\"TT\"] = 117] = \"TT\";\n TAG_ID[TAG_ID[\"U\"] = 118] = \"U\";\n TAG_ID[TAG_ID[\"UL\"] = 119] = \"UL\";\n TAG_ID[TAG_ID[\"SVG\"] = 120] = \"SVG\";\n TAG_ID[TAG_ID[\"VAR\"] = 121] = \"VAR\";\n TAG_ID[TAG_ID[\"WBR\"] = 122] = \"WBR\";\n TAG_ID[TAG_ID[\"XMP\"] = 123] = \"XMP\";\n})(TAG_ID || (TAG_ID = {}));\nconst TAG_NAME_TO_ID = new Map([\n [TAG_NAMES.A, TAG_ID.A],\n [TAG_NAMES.ADDRESS, TAG_ID.ADDRESS],\n [TAG_NAMES.ANNOTATION_XML, TAG_ID.ANNOTATION_XML],\n [TAG_NAMES.APPLET, TAG_ID.APPLET],\n [TAG_NAMES.AREA, TAG_ID.AREA],\n [TAG_NAMES.ARTICLE, TAG_ID.ARTICLE],\n [TAG_NAMES.ASIDE, TAG_ID.ASIDE],\n [TAG_NAMES.B, TAG_ID.B],\n [TAG_NAMES.BASE, TAG_ID.BASE],\n [TAG_NAMES.BASEFONT, TAG_ID.BASEFONT],\n [TAG_NAMES.BGSOUND, TAG_ID.BGSOUND],\n [TAG_NAMES.BIG, TAG_ID.BIG],\n [TAG_NAMES.BLOCKQUOTE, TAG_ID.BLOCKQUOTE],\n [TAG_NAMES.BODY, TAG_ID.BODY],\n [TAG_NAMES.BR, TAG_ID.BR],\n [TAG_NAMES.BUTTON, TAG_ID.BUTTON],\n [TAG_NAMES.CAPTION, TAG_ID.CAPTION],\n [TAG_NAMES.CENTER, TAG_ID.CENTER],\n [TAG_NAMES.CODE, TAG_ID.CODE],\n [TAG_NAMES.COL, TAG_ID.COL],\n [TAG_NAMES.COLGROUP, TAG_ID.COLGROUP],\n [TAG_NAMES.DD, TAG_ID.DD],\n [TAG_NAMES.DESC, TAG_ID.DESC],\n [TAG_NAMES.DETAILS, TAG_ID.DETAILS],\n [TAG_NAMES.DIALOG, TAG_ID.DIALOG],\n [TAG_NAMES.DIR, TAG_ID.DIR],\n [TAG_NAMES.DIV, TAG_ID.DIV],\n [TAG_NAMES.DL, TAG_ID.DL],\n [TAG_NAMES.DT, TAG_ID.DT],\n [TAG_NAMES.EM, TAG_ID.EM],\n [TAG_NAMES.EMBED, TAG_ID.EMBED],\n [TAG_NAMES.FIELDSET, TAG_ID.FIELDSET],\n [TAG_NAMES.FIGCAPTION, TAG_ID.FIGCAPTION],\n [TAG_NAMES.FIGURE, TAG_ID.FIGURE],\n [TAG_NAMES.FONT, TAG_ID.FONT],\n [TAG_NAMES.FOOTER, TAG_ID.FOOTER],\n [TAG_NAMES.FOREIGN_OBJECT, TAG_ID.FOREIGN_OBJECT],\n [TAG_NAMES.FORM, TAG_ID.FORM],\n [TAG_NAMES.FRAME, TAG_ID.FRAME],\n [TAG_NAMES.FRAMESET, TAG_ID.FRAMESET],\n [TAG_NAMES.H1, TAG_ID.H1],\n [TAG_NAMES.H2, TAG_ID.H2],\n [TAG_NAMES.H3, TAG_ID.H3],\n [TAG_NAMES.H4, TAG_ID.H4],\n [TAG_NAMES.H5, TAG_ID.H5],\n [TAG_NAMES.H6, TAG_ID.H6],\n [TAG_NAMES.HEAD, TAG_ID.HEAD],\n [TAG_NAMES.HEADER, TAG_ID.HEADER],\n [TAG_NAMES.HGROUP, TAG_ID.HGROUP],\n [TAG_NAMES.HR, TAG_ID.HR],\n [TAG_NAMES.HTML, TAG_ID.HTML],\n [TAG_NAMES.I, TAG_ID.I],\n [TAG_NAMES.IMG, TAG_ID.IMG],\n [TAG_NAMES.IMAGE, TAG_ID.IMAGE],\n [TAG_NAMES.INPUT, TAG_ID.INPUT],\n [TAG_NAMES.IFRAME, TAG_ID.IFRAME],\n [TAG_NAMES.KEYGEN, TAG_ID.KEYGEN],\n [TAG_NAMES.LABEL, TAG_ID.LABEL],\n [TAG_NAMES.LI, TAG_ID.LI],\n [TAG_NAMES.LINK, TAG_ID.LINK],\n [TAG_NAMES.LISTING, TAG_ID.LISTING],\n [TAG_NAMES.MAIN, TAG_ID.MAIN],\n [TAG_NAMES.MALIGNMARK, TAG_ID.MALIGNMARK],\n [TAG_NAMES.MARQUEE, TAG_ID.MARQUEE],\n [TAG_NAMES.MATH, TAG_ID.MATH],\n [TAG_NAMES.MENU, TAG_ID.MENU],\n [TAG_NAMES.META, TAG_ID.META],\n [TAG_NAMES.MGLYPH, TAG_ID.MGLYPH],\n [TAG_NAMES.MI, TAG_ID.MI],\n [TAG_NAMES.MO, TAG_ID.MO],\n [TAG_NAMES.MN, TAG_ID.MN],\n [TAG_NAMES.MS, TAG_ID.MS],\n [TAG_NAMES.MTEXT, TAG_ID.MTEXT],\n [TAG_NAMES.NAV, TAG_ID.NAV],\n [TAG_NAMES.NOBR, TAG_ID.NOBR],\n [TAG_NAMES.NOFRAMES, TAG_ID.NOFRAMES],\n [TAG_NAMES.NOEMBED, TAG_ID.NOEMBED],\n [TAG_NAMES.NOSCRIPT, TAG_ID.NOSCRIPT],\n [TAG_NAMES.OBJECT, TAG_ID.OBJECT],\n [TAG_NAMES.OL, TAG_ID.OL],\n [TAG_NAMES.OPTGROUP, TAG_ID.OPTGROUP],\n [TAG_NAMES.OPTION, TAG_ID.OPTION],\n [TAG_NAMES.P, TAG_ID.P],\n [TAG_NAMES.PARAM, TAG_ID.PARAM],\n [TAG_NAMES.PLAINTEXT, TAG_ID.PLAINTEXT],\n [TAG_NAMES.PRE, TAG_ID.PRE],\n [TAG_NAMES.RB, TAG_ID.RB],\n [TAG_NAMES.RP, TAG_ID.RP],\n [TAG_NAMES.RT, TAG_ID.RT],\n [TAG_NAMES.RTC, TAG_ID.RTC],\n [TAG_NAMES.RUBY, TAG_ID.RUBY],\n [TAG_NAMES.S, TAG_ID.S],\n [TAG_NAMES.SCRIPT, TAG_ID.SCRIPT],\n [TAG_NAMES.SEARCH, TAG_ID.SEARCH],\n [TAG_NAMES.SECTION, TAG_ID.SECTION],\n [TAG_NAMES.SELECT, TAG_ID.SELECT],\n [TAG_NAMES.SOURCE, TAG_ID.SOURCE],\n [TAG_NAMES.SMALL, TAG_ID.SMALL],\n [TAG_NAMES.SPAN, TAG_ID.SPAN],\n [TAG_NAMES.STRIKE, TAG_ID.STRIKE],\n [TAG_NAMES.STRONG, TAG_ID.STRONG],\n [TAG_NAMES.STYLE, TAG_ID.STYLE],\n [TAG_NAMES.SUB, TAG_ID.SUB],\n [TAG_NAMES.SUMMARY, TAG_ID.SUMMARY],\n [TAG_NAMES.SUP, TAG_ID.SUP],\n [TAG_NAMES.TABLE, TAG_ID.TABLE],\n [TAG_NAMES.TBODY, TAG_ID.TBODY],\n [TAG_NAMES.TEMPLATE, TAG_ID.TEMPLATE],\n [TAG_NAMES.TEXTAREA, TAG_ID.TEXTAREA],\n [TAG_NAMES.TFOOT, TAG_ID.TFOOT],\n [TAG_NAMES.TD, TAG_ID.TD],\n [TAG_NAMES.TH, TAG_ID.TH],\n [TAG_NAMES.THEAD, TAG_ID.THEAD],\n [TAG_NAMES.TITLE, TAG_ID.TITLE],\n [TAG_NAMES.TR, TAG_ID.TR],\n [TAG_NAMES.TRACK, TAG_ID.TRACK],\n [TAG_NAMES.TT, TAG_ID.TT],\n [TAG_NAMES.U, TAG_ID.U],\n [TAG_NAMES.UL, TAG_ID.UL],\n [TAG_NAMES.SVG, TAG_ID.SVG],\n [TAG_NAMES.VAR, TAG_ID.VAR],\n [TAG_NAMES.WBR, TAG_ID.WBR],\n [TAG_NAMES.XMP, TAG_ID.XMP],\n]);\nexport function getTagID(tagName) {\n var _a;\n return (_a = TAG_NAME_TO_ID.get(tagName)) !== null && _a !== void 0 ? _a : TAG_ID.UNKNOWN;\n}\nconst $ = TAG_ID;\nexport const SPECIAL_ELEMENTS = {\n [NS.HTML]: new Set([\n $.ADDRESS,\n $.APPLET,\n $.AREA,\n $.ARTICLE,\n $.ASIDE,\n $.BASE,\n $.BASEFONT,\n $.BGSOUND,\n $.BLOCKQUOTE,\n $.BODY,\n $.BR,\n $.BUTTON,\n $.CAPTION,\n $.CENTER,\n $.COL,\n $.COLGROUP,\n $.DD,\n $.DETAILS,\n $.DIR,\n $.DIV,\n $.DL,\n $.DT,\n $.EMBED,\n $.FIELDSET,\n $.FIGCAPTION,\n $.FIGURE,\n $.FOOTER,\n $.FORM,\n $.FRAME,\n $.FRAMESET,\n $.H1,\n $.H2,\n $.H3,\n $.H4,\n $.H5,\n $.H6,\n $.HEAD,\n $.HEADER,\n $.HGROUP,\n $.HR,\n $.HTML,\n $.IFRAME,\n $.IMG,\n $.INPUT,\n $.LI,\n $.LINK,\n $.LISTING,\n $.MAIN,\n $.MARQUEE,\n $.MENU,\n $.META,\n $.NAV,\n $.NOEMBED,\n $.NOFRAMES,\n $.NOSCRIPT,\n $.OBJECT,\n $.OL,\n $.P,\n $.PARAM,\n $.PLAINTEXT,\n $.PRE,\n $.SCRIPT,\n $.SECTION,\n $.SELECT,\n $.SOURCE,\n $.STYLE,\n $.SUMMARY,\n $.TABLE,\n $.TBODY,\n $.TD,\n $.TEMPLATE,\n $.TEXTAREA,\n $.TFOOT,\n $.TH,\n $.THEAD,\n $.TITLE,\n $.TR,\n $.TRACK,\n $.UL,\n $.WBR,\n $.XMP,\n ]),\n [NS.MATHML]: new Set([$.MI, $.MO, $.MN, $.MS, $.MTEXT, $.ANNOTATION_XML]),\n [NS.SVG]: new Set([$.TITLE, $.FOREIGN_OBJECT, $.DESC]),\n [NS.XLINK]: new Set(),\n [NS.XML]: new Set(),\n [NS.XMLNS]: new Set(),\n};\nexport const NUMBERED_HEADERS = new Set([$.H1, $.H2, $.H3, $.H4, $.H5, $.H6]);\nconst UNESCAPED_TEXT = new Set([\n TAG_NAMES.STYLE,\n TAG_NAMES.SCRIPT,\n TAG_NAMES.XMP,\n TAG_NAMES.IFRAME,\n TAG_NAMES.NOEMBED,\n TAG_NAMES.NOFRAMES,\n TAG_NAMES.PLAINTEXT,\n]);\nexport function hasUnescapedText(tn, scriptingEnabled) {\n return UNESCAPED_TEXT.has(tn) || (scriptingEnabled && tn === TAG_NAMES.NOSCRIPT);\n}\n","import { Preprocessor } from './preprocessor.js';\nimport { CODE_POINTS as $, SEQUENCES as $$, REPLACEMENT_CHARACTER, isSurrogate, isUndefinedCodePoint, isControlCodePoint, } from '../common/unicode.js';\nimport { TokenType, getTokenAttr, } from '../common/token.js';\nimport { htmlDecodeTree, EntityDecoder, DecodingMode } from 'entities/decode';\nimport { ERR } from '../common/error-codes.js';\nimport { TAG_ID, getTagID } from '../common/html.js';\n//States\nvar State;\n(function (State) {\n State[State[\"DATA\"] = 0] = \"DATA\";\n State[State[\"RCDATA\"] = 1] = \"RCDATA\";\n State[State[\"RAWTEXT\"] = 2] = \"RAWTEXT\";\n State[State[\"SCRIPT_DATA\"] = 3] = \"SCRIPT_DATA\";\n State[State[\"PLAINTEXT\"] = 4] = \"PLAINTEXT\";\n State[State[\"TAG_OPEN\"] = 5] = \"TAG_OPEN\";\n State[State[\"END_TAG_OPEN\"] = 6] = \"END_TAG_OPEN\";\n State[State[\"TAG_NAME\"] = 7] = \"TAG_NAME\";\n State[State[\"RCDATA_LESS_THAN_SIGN\"] = 8] = \"RCDATA_LESS_THAN_SIGN\";\n State[State[\"RCDATA_END_TAG_OPEN\"] = 9] = \"RCDATA_END_TAG_OPEN\";\n State[State[\"RCDATA_END_TAG_NAME\"] = 10] = \"RCDATA_END_TAG_NAME\";\n State[State[\"RAWTEXT_LESS_THAN_SIGN\"] = 11] = \"RAWTEXT_LESS_THAN_SIGN\";\n State[State[\"RAWTEXT_END_TAG_OPEN\"] = 12] = \"RAWTEXT_END_TAG_OPEN\";\n State[State[\"RAWTEXT_END_TAG_NAME\"] = 13] = \"RAWTEXT_END_TAG_NAME\";\n State[State[\"SCRIPT_DATA_LESS_THAN_SIGN\"] = 14] = \"SCRIPT_DATA_LESS_THAN_SIGN\";\n State[State[\"SCRIPT_DATA_END_TAG_OPEN\"] = 15] = \"SCRIPT_DATA_END_TAG_OPEN\";\n State[State[\"SCRIPT_DATA_END_TAG_NAME\"] = 16] = \"SCRIPT_DATA_END_TAG_NAME\";\n State[State[\"SCRIPT_DATA_ESCAPE_START\"] = 17] = \"SCRIPT_DATA_ESCAPE_START\";\n State[State[\"SCRIPT_DATA_ESCAPE_START_DASH\"] = 18] = \"SCRIPT_DATA_ESCAPE_START_DASH\";\n State[State[\"SCRIPT_DATA_ESCAPED\"] = 19] = \"SCRIPT_DATA_ESCAPED\";\n State[State[\"SCRIPT_DATA_ESCAPED_DASH\"] = 20] = \"SCRIPT_DATA_ESCAPED_DASH\";\n State[State[\"SCRIPT_DATA_ESCAPED_DASH_DASH\"] = 21] = \"SCRIPT_DATA_ESCAPED_DASH_DASH\";\n State[State[\"SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN\"] = 22] = \"SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN\";\n State[State[\"SCRIPT_DATA_ESCAPED_END_TAG_OPEN\"] = 23] = \"SCRIPT_DATA_ESCAPED_END_TAG_OPEN\";\n State[State[\"SCRIPT_DATA_ESCAPED_END_TAG_NAME\"] = 24] = \"SCRIPT_DATA_ESCAPED_END_TAG_NAME\";\n State[State[\"SCRIPT_DATA_DOUBLE_ESCAPE_START\"] = 25] = \"SCRIPT_DATA_DOUBLE_ESCAPE_START\";\n State[State[\"SCRIPT_DATA_DOUBLE_ESCAPED\"] = 26] = \"SCRIPT_DATA_DOUBLE_ESCAPED\";\n State[State[\"SCRIPT_DATA_DOUBLE_ESCAPED_DASH\"] = 27] = \"SCRIPT_DATA_DOUBLE_ESCAPED_DASH\";\n State[State[\"SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH\"] = 28] = \"SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH\";\n State[State[\"SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN\"] = 29] = \"SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN\";\n State[State[\"SCRIPT_DATA_DOUBLE_ESCAPE_END\"] = 30] = \"SCRIPT_DATA_DOUBLE_ESCAPE_END\";\n State[State[\"BEFORE_ATTRIBUTE_NAME\"] = 31] = \"BEFORE_ATTRIBUTE_NAME\";\n State[State[\"ATTRIBUTE_NAME\"] = 32] = \"ATTRIBUTE_NAME\";\n State[State[\"AFTER_ATTRIBUTE_NAME\"] = 33] = \"AFTER_ATTRIBUTE_NAME\";\n State[State[\"BEFORE_ATTRIBUTE_VALUE\"] = 34] = \"BEFORE_ATTRIBUTE_VALUE\";\n State[State[\"ATTRIBUTE_VALUE_DOUBLE_QUOTED\"] = 35] = \"ATTRIBUTE_VALUE_DOUBLE_QUOTED\";\n State[State[\"ATTRIBUTE_VALUE_SINGLE_QUOTED\"] = 36] = \"ATTRIBUTE_VALUE_SINGLE_QUOTED\";\n State[State[\"ATTRIBUTE_VALUE_UNQUOTED\"] = 37] = \"ATTRIBUTE_VALUE_UNQUOTED\";\n State[State[\"AFTER_ATTRIBUTE_VALUE_QUOTED\"] = 38] = \"AFTER_ATTRIBUTE_VALUE_QUOTED\";\n State[State[\"SELF_CLOSING_START_TAG\"] = 39] = \"SELF_CLOSING_START_TAG\";\n State[State[\"BOGUS_COMMENT\"] = 40] = \"BOGUS_COMMENT\";\n State[State[\"MARKUP_DECLARATION_OPEN\"] = 41] = \"MARKUP_DECLARATION_OPEN\";\n State[State[\"COMMENT_START\"] = 42] = \"COMMENT_START\";\n State[State[\"COMMENT_START_DASH\"] = 43] = \"COMMENT_START_DASH\";\n State[State[\"COMMENT\"] = 44] = \"COMMENT\";\n State[State[\"COMMENT_LESS_THAN_SIGN\"] = 45] = \"COMMENT_LESS_THAN_SIGN\";\n State[State[\"COMMENT_LESS_THAN_SIGN_BANG\"] = 46] = \"COMMENT_LESS_THAN_SIGN_BANG\";\n State[State[\"COMMENT_LESS_THAN_SIGN_BANG_DASH\"] = 47] = \"COMMENT_LESS_THAN_SIGN_BANG_DASH\";\n State[State[\"COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH\"] = 48] = \"COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH\";\n State[State[\"COMMENT_END_DASH\"] = 49] = \"COMMENT_END_DASH\";\n State[State[\"COMMENT_END\"] = 50] = \"COMMENT_END\";\n State[State[\"COMMENT_END_BANG\"] = 51] = \"COMMENT_END_BANG\";\n State[State[\"DOCTYPE\"] = 52] = \"DOCTYPE\";\n State[State[\"BEFORE_DOCTYPE_NAME\"] = 53] = \"BEFORE_DOCTYPE_NAME\";\n State[State[\"DOCTYPE_NAME\"] = 54] = \"DOCTYPE_NAME\";\n State[State[\"AFTER_DOCTYPE_NAME\"] = 55] = \"AFTER_DOCTYPE_NAME\";\n State[State[\"AFTER_DOCTYPE_PUBLIC_KEYWORD\"] = 56] = \"AFTER_DOCTYPE_PUBLIC_KEYWORD\";\n State[State[\"BEFORE_DOCTYPE_PUBLIC_IDENTIFIER\"] = 57] = \"BEFORE_DOCTYPE_PUBLIC_IDENTIFIER\";\n State[State[\"DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED\"] = 58] = \"DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED\";\n State[State[\"DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED\"] = 59] = \"DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED\";\n State[State[\"AFTER_DOCTYPE_PUBLIC_IDENTIFIER\"] = 60] = \"AFTER_DOCTYPE_PUBLIC_IDENTIFIER\";\n State[State[\"BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS\"] = 61] = \"BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS\";\n State[State[\"AFTER_DOCTYPE_SYSTEM_KEYWORD\"] = 62] = \"AFTER_DOCTYPE_SYSTEM_KEYWORD\";\n State[State[\"BEFORE_DOCTYPE_SYSTEM_IDENTIFIER\"] = 63] = \"BEFORE_DOCTYPE_SYSTEM_IDENTIFIER\";\n State[State[\"DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED\"] = 64] = \"DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED\";\n State[State[\"DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED\"] = 65] = \"DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED\";\n State[State[\"AFTER_DOCTYPE_SYSTEM_IDENTIFIER\"] = 66] = \"AFTER_DOCTYPE_SYSTEM_IDENTIFIER\";\n State[State[\"BOGUS_DOCTYPE\"] = 67] = \"BOGUS_DOCTYPE\";\n State[State[\"CDATA_SECTION\"] = 68] = \"CDATA_SECTION\";\n State[State[\"CDATA_SECTION_BRACKET\"] = 69] = \"CDATA_SECTION_BRACKET\";\n State[State[\"CDATA_SECTION_END\"] = 70] = \"CDATA_SECTION_END\";\n State[State[\"CHARACTER_REFERENCE\"] = 71] = \"CHARACTER_REFERENCE\";\n State[State[\"AMBIGUOUS_AMPERSAND\"] = 72] = \"AMBIGUOUS_AMPERSAND\";\n})(State || (State = {}));\n//Tokenizer initial states for different modes\nexport const TokenizerMode = {\n DATA: State.DATA,\n RCDATA: State.RCDATA,\n RAWTEXT: State.RAWTEXT,\n SCRIPT_DATA: State.SCRIPT_DATA,\n PLAINTEXT: State.PLAINTEXT,\n CDATA_SECTION: State.CDATA_SECTION,\n};\n//Utils\n//OPTIMIZATION: these utility functions should not be moved out of this module. V8 Crankshaft will not inline\n//this functions if they will be situated in another module due to context switch.\n//Always perform inlining check before modifying this functions ('node --trace-inlining').\nfunction isAsciiDigit(cp) {\n return cp >= $.DIGIT_0 && cp <= $.DIGIT_9;\n}\nfunction isAsciiUpper(cp) {\n return cp >= $.LATIN_CAPITAL_A && cp <= $.LATIN_CAPITAL_Z;\n}\nfunction isAsciiLower(cp) {\n return cp >= $.LATIN_SMALL_A && cp <= $.LATIN_SMALL_Z;\n}\nfunction isAsciiLetter(cp) {\n return isAsciiLower(cp) || isAsciiUpper(cp);\n}\nfunction isAsciiAlphaNumeric(cp) {\n return isAsciiLetter(cp) || isAsciiDigit(cp);\n}\nfunction toAsciiLower(cp) {\n return cp + 32;\n}\nfunction isWhitespace(cp) {\n return cp === $.SPACE || cp === $.LINE_FEED || cp === $.TABULATION || cp === $.FORM_FEED;\n}\nfunction isScriptDataDoubleEscapeSequenceEnd(cp) {\n return isWhitespace(cp) || cp === $.SOLIDUS || cp === $.GREATER_THAN_SIGN;\n}\nfunction getErrorForNumericCharacterReference(code) {\n if (code === $.NULL) {\n return ERR.nullCharacterReference;\n }\n else if (code > 1114111) {\n return ERR.characterReferenceOutsideUnicodeRange;\n }\n else if (isSurrogate(code)) {\n return ERR.surrogateCharacterReference;\n }\n else if (isUndefinedCodePoint(code)) {\n return ERR.noncharacterCharacterReference;\n }\n else if (isControlCodePoint(code) || code === $.CARRIAGE_RETURN) {\n return ERR.controlCharacterReference;\n }\n return null;\n}\n//Tokenizer\nexport class Tokenizer {\n constructor(options, handler) {\n this.options = options;\n this.handler = handler;\n this.paused = false;\n /** Ensures that the parsing loop isn't run multiple times at once. */\n this.inLoop = false;\n /**\n * Indicates that the current adjusted node exists, is not an element in the HTML namespace,\n * and that it is not an integration point for either MathML or HTML.\n *\n * @see {@link https://html.spec.whatwg.org/multipage/parsing.html#tree-construction}\n */\n this.inForeignNode = false;\n this.lastStartTagName = '';\n this.active = false;\n this.state = State.DATA;\n this.returnState = State.DATA;\n this.entityStartPos = 0;\n this.consumedAfterSnapshot = -1;\n this.currentCharacterToken = null;\n this.currentToken = null;\n this.currentAttr = { name: '', value: '' };\n this.preprocessor = new Preprocessor(handler);\n this.currentLocation = this.getCurrentLocation(-1);\n this.entityDecoder = new EntityDecoder(htmlDecodeTree, (cp, consumed) => {\n // Note: Set `pos` _before_ flushing, as flushing might drop\n // the current chunk and invalidate `entityStartPos`.\n this.preprocessor.pos = this.entityStartPos + consumed - 1;\n this._flushCodePointConsumedAsCharacterReference(cp);\n }, handler.onParseError\n ? {\n missingSemicolonAfterCharacterReference: () => {\n this._err(ERR.missingSemicolonAfterCharacterReference, 1);\n },\n absenceOfDigitsInNumericCharacterReference: (consumed) => {\n this._err(ERR.absenceOfDigitsInNumericCharacterReference, this.entityStartPos - this.preprocessor.pos + consumed);\n },\n validateNumericCharacterReference: (code) => {\n const error = getErrorForNumericCharacterReference(code);\n if (error)\n this._err(error, 1);\n },\n }\n : undefined);\n }\n //Errors\n _err(code, cpOffset = 0) {\n var _a, _b;\n (_b = (_a = this.handler).onParseError) === null || _b === void 0 ? void 0 : _b.call(_a, this.preprocessor.getError(code, cpOffset));\n }\n // NOTE: `offset` may never run across line boundaries.\n getCurrentLocation(offset) {\n if (!this.options.sourceCodeLocationInfo) {\n return null;\n }\n return {\n startLine: this.preprocessor.line,\n startCol: this.preprocessor.col - offset,\n startOffset: this.preprocessor.offset - offset,\n endLine: -1,\n endCol: -1,\n endOffset: -1,\n };\n }\n _runParsingLoop() {\n if (this.inLoop)\n return;\n this.inLoop = true;\n while (this.active && !this.paused) {\n this.consumedAfterSnapshot = 0;\n const cp = this._consume();\n if (!this._ensureHibernation()) {\n this._callState(cp);\n }\n }\n this.inLoop = false;\n }\n //API\n pause() {\n this.paused = true;\n }\n resume(writeCallback) {\n if (!this.paused) {\n throw new Error('Parser was already resumed');\n }\n this.paused = false;\n // Necessary for synchronous resume.\n if (this.inLoop)\n return;\n this._runParsingLoop();\n if (!this.paused) {\n writeCallback === null || writeCallback === void 0 ? void 0 : writeCallback();\n }\n }\n write(chunk, isLastChunk, writeCallback) {\n this.active = true;\n this.preprocessor.write(chunk, isLastChunk);\n this._runParsingLoop();\n if (!this.paused) {\n writeCallback === null || writeCallback === void 0 ? void 0 : writeCallback();\n }\n }\n insertHtmlAtCurrentPos(chunk) {\n this.active = true;\n this.preprocessor.insertHtmlAtCurrentPos(chunk);\n this._runParsingLoop();\n }\n //Hibernation\n _ensureHibernation() {\n if (this.preprocessor.endOfChunkHit) {\n this.preprocessor.retreat(this.consumedAfterSnapshot);\n this.consumedAfterSnapshot = 0;\n this.active = false;\n return true;\n }\n return false;\n }\n //Consumption\n _consume() {\n this.consumedAfterSnapshot++;\n return this.preprocessor.advance();\n }\n _advanceBy(count) {\n this.consumedAfterSnapshot += count;\n for (let i = 0; i < count; i++) {\n this.preprocessor.advance();\n }\n }\n _consumeSequenceIfMatch(pattern, caseSensitive) {\n if (this.preprocessor.startsWith(pattern, caseSensitive)) {\n // We will already have consumed one character before calling this method.\n this._advanceBy(pattern.length - 1);\n return true;\n }\n return false;\n }\n //Token creation\n _createStartTagToken() {\n this.currentToken = {\n type: TokenType.START_TAG,\n tagName: '',\n tagID: TAG_ID.UNKNOWN,\n selfClosing: false,\n ackSelfClosing: false,\n attrs: [],\n location: this.getCurrentLocation(1),\n };\n }\n _createEndTagToken() {\n this.currentToken = {\n type: TokenType.END_TAG,\n tagName: '',\n tagID: TAG_ID.UNKNOWN,\n selfClosing: false,\n ackSelfClosing: false,\n attrs: [],\n location: this.getCurrentLocation(2),\n };\n }\n _createCommentToken(offset) {\n this.currentToken = {\n type: TokenType.COMMENT,\n data: '',\n location: this.getCurrentLocation(offset),\n };\n }\n _createDoctypeToken(initialName) {\n this.currentToken = {\n type: TokenType.DOCTYPE,\n name: initialName,\n forceQuirks: false,\n publicId: null,\n systemId: null,\n location: this.currentLocation,\n };\n }\n _createCharacterToken(type, chars) {\n this.currentCharacterToken = {\n type,\n chars,\n location: this.currentLocation,\n };\n }\n //Tag attributes\n _createAttr(attrNameFirstCh) {\n this.currentAttr = {\n name: attrNameFirstCh,\n value: '',\n };\n this.currentLocation = this.getCurrentLocation(0);\n }\n _leaveAttrName() {\n var _a;\n var _b;\n const token = this.currentToken;\n if (getTokenAttr(token, this.currentAttr.name) === null) {\n token.attrs.push(this.currentAttr);\n if (token.location && this.currentLocation) {\n const attrLocations = ((_a = (_b = token.location).attrs) !== null && _a !== void 0 ? _a : (_b.attrs = Object.create(null)));\n attrLocations[this.currentAttr.name] = this.currentLocation;\n // Set end location\n this._leaveAttrValue();\n }\n }\n else {\n this._err(ERR.duplicateAttribute);\n }\n }\n _leaveAttrValue() {\n if (this.currentLocation) {\n this.currentLocation.endLine = this.preprocessor.line;\n this.currentLocation.endCol = this.preprocessor.col;\n this.currentLocation.endOffset = this.preprocessor.offset;\n }\n }\n //Token emission\n prepareToken(ct) {\n this._emitCurrentCharacterToken(ct.location);\n this.currentToken = null;\n if (ct.location) {\n ct.location.endLine = this.preprocessor.line;\n ct.location.endCol = this.preprocessor.col + 1;\n ct.location.endOffset = this.preprocessor.offset + 1;\n }\n this.currentLocation = this.getCurrentLocation(-1);\n }\n emitCurrentTagToken() {\n const ct = this.currentToken;\n this.prepareToken(ct);\n ct.tagID = getTagID(ct.tagName);\n if (ct.type === TokenType.START_TAG) {\n this.lastStartTagName = ct.tagName;\n this.handler.onStartTag(ct);\n }\n else {\n if (ct.attrs.length > 0) {\n this._err(ERR.endTagWithAttributes);\n }\n if (ct.selfClosing) {\n this._err(ERR.endTagWithTrailingSolidus);\n }\n this.handler.onEndTag(ct);\n }\n this.preprocessor.dropParsedChunk();\n }\n emitCurrentComment(ct) {\n this.prepareToken(ct);\n this.handler.onComment(ct);\n this.preprocessor.dropParsedChunk();\n }\n emitCurrentDoctype(ct) {\n this.prepareToken(ct);\n this.handler.onDoctype(ct);\n this.preprocessor.dropParsedChunk();\n }\n _emitCurrentCharacterToken(nextLocation) {\n if (this.currentCharacterToken) {\n //NOTE: if we have a pending character token, make it's end location equal to the\n //current token's start location.\n if (nextLocation && this.currentCharacterToken.location) {\n this.currentCharacterToken.location.endLine = nextLocation.startLine;\n this.currentCharacterToken.location.endCol = nextLocation.startCol;\n this.currentCharacterToken.location.endOffset = nextLocation.startOffset;\n }\n switch (this.currentCharacterToken.type) {\n case TokenType.CHARACTER: {\n this.handler.onCharacter(this.currentCharacterToken);\n break;\n }\n case TokenType.NULL_CHARACTER: {\n this.handler.onNullCharacter(this.currentCharacterToken);\n break;\n }\n case TokenType.WHITESPACE_CHARACTER: {\n this.handler.onWhitespaceCharacter(this.currentCharacterToken);\n break;\n }\n }\n this.currentCharacterToken = null;\n }\n }\n _emitEOFToken() {\n const location = this.getCurrentLocation(0);\n if (location) {\n location.endLine = location.startLine;\n location.endCol = location.startCol;\n location.endOffset = location.startOffset;\n }\n this._emitCurrentCharacterToken(location);\n this.handler.onEof({ type: TokenType.EOF, location });\n this.active = false;\n }\n //Characters emission\n //OPTIMIZATION: The specification uses only one type of character token (one token per character).\n //This causes a huge memory overhead and a lot of unnecessary parser loops. parse5 uses 3 groups of characters.\n //If we have a sequence of characters that belong to the same group, the parser can process it\n //as a single solid character token.\n //So, there are 3 types of character tokens in parse5:\n //1)TokenType.NULL_CHARACTER - \\u0000-character sequences (e.g. '\\u0000\\u0000\\u0000')\n //2)TokenType.WHITESPACE_CHARACTER - any whitespace/new-line character sequences (e.g. '\\n \\r\\t \\f')\n //3)TokenType.CHARACTER - any character sequence which don't belong to groups 1 and 2 (e.g. 'abcdef1234@@#$%^')\n _appendCharToCurrentCharacterToken(type, ch) {\n if (this.currentCharacterToken) {\n if (this.currentCharacterToken.type === type) {\n this.currentCharacterToken.chars += ch;\n return;\n }\n else {\n this.currentLocation = this.getCurrentLocation(0);\n this._emitCurrentCharacterToken(this.currentLocation);\n this.preprocessor.dropParsedChunk();\n }\n }\n this._createCharacterToken(type, ch);\n }\n _emitCodePoint(cp) {\n const type = isWhitespace(cp)\n ? TokenType.WHITESPACE_CHARACTER\n : cp === $.NULL\n ? TokenType.NULL_CHARACTER\n : TokenType.CHARACTER;\n // OPTIMIZATION: Use String.fromCharCode for BMP characters (< 0x10000) which is faster\n // than String.fromCodePoint. Characters outside BMP are rare in HTML.\n this._appendCharToCurrentCharacterToken(type, cp < 65536 ? String.fromCharCode(cp) : String.fromCodePoint(cp));\n }\n //NOTE: used when we emit characters explicitly.\n //This is always for non-whitespace and non-null characters, which allows us to avoid additional checks.\n _emitChars(ch) {\n this._appendCharToCurrentCharacterToken(TokenType.CHARACTER, ch);\n }\n // Character reference helpers\n _startCharacterReference() {\n this.returnState = this.state;\n this.state = State.CHARACTER_REFERENCE;\n this.entityStartPos = this.preprocessor.pos;\n this.entityDecoder.startEntity(this._isCharacterReferenceInAttribute() ? DecodingMode.Attribute : DecodingMode.Legacy);\n }\n _isCharacterReferenceInAttribute() {\n return (this.returnState === State.ATTRIBUTE_VALUE_DOUBLE_QUOTED ||\n this.returnState === State.ATTRIBUTE_VALUE_SINGLE_QUOTED ||\n this.returnState === State.ATTRIBUTE_VALUE_UNQUOTED);\n }\n _flushCodePointConsumedAsCharacterReference(cp) {\n if (this._isCharacterReferenceInAttribute()) {\n this.currentAttr.value += String.fromCodePoint(cp);\n }\n else {\n this._emitCodePoint(cp);\n }\n }\n // Calling states this way turns out to be much faster than any other approach.\n _callState(cp) {\n switch (this.state) {\n case State.DATA: {\n this._stateData(cp);\n break;\n }\n case State.RCDATA: {\n this._stateRcdata(cp);\n break;\n }\n case State.RAWTEXT: {\n this._stateRawtext(cp);\n break;\n }\n case State.SCRIPT_DATA: {\n this._stateScriptData(cp);\n break;\n }\n case State.PLAINTEXT: {\n this._statePlaintext(cp);\n break;\n }\n case State.TAG_OPEN: {\n this._stateTagOpen(cp);\n break;\n }\n case State.END_TAG_OPEN: {\n this._stateEndTagOpen(cp);\n break;\n }\n case State.TAG_NAME: {\n this._stateTagName(cp);\n break;\n }\n case State.RCDATA_LESS_THAN_SIGN: {\n this._stateRcdataLessThanSign(cp);\n break;\n }\n case State.RCDATA_END_TAG_OPEN: {\n this._stateRcdataEndTagOpen(cp);\n break;\n }\n case State.RCDATA_END_TAG_NAME: {\n this._stateRcdataEndTagName(cp);\n break;\n }\n case State.RAWTEXT_LESS_THAN_SIGN: {\n this._stateRawtextLessThanSign(cp);\n break;\n }\n case State.RAWTEXT_END_TAG_OPEN: {\n this._stateRawtextEndTagOpen(cp);\n break;\n }\n case State.RAWTEXT_END_TAG_NAME: {\n this._stateRawtextEndTagName(cp);\n break;\n }\n case State.SCRIPT_DATA_LESS_THAN_SIGN: {\n this._stateScriptDataLessThanSign(cp);\n break;\n }\n case State.SCRIPT_DATA_END_TAG_OPEN: {\n this._stateScriptDataEndTagOpen(cp);\n break;\n }\n case State.SCRIPT_DATA_END_TAG_NAME: {\n this._stateScriptDataEndTagName(cp);\n break;\n }\n case State.SCRIPT_DATA_ESCAPE_START: {\n this._stateScriptDataEscapeStart(cp);\n break;\n }\n case State.SCRIPT_DATA_ESCAPE_START_DASH: {\n this._stateScriptDataEscapeStartDash(cp);\n break;\n }\n case State.SCRIPT_DATA_ESCAPED: {\n this._stateScriptDataEscaped(cp);\n break;\n }\n case State.SCRIPT_DATA_ESCAPED_DASH: {\n this._stateScriptDataEscapedDash(cp);\n break;\n }\n case State.SCRIPT_DATA_ESCAPED_DASH_DASH: {\n this._stateScriptDataEscapedDashDash(cp);\n break;\n }\n case State.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN: {\n this._stateScriptDataEscapedLessThanSign(cp);\n break;\n }\n case State.SCRIPT_DATA_ESCAPED_END_TAG_OPEN: {\n this._stateScriptDataEscapedEndTagOpen(cp);\n break;\n }\n case State.SCRIPT_DATA_ESCAPED_END_TAG_NAME: {\n this._stateScriptDataEscapedEndTagName(cp);\n break;\n }\n case State.SCRIPT_DATA_DOUBLE_ESCAPE_START: {\n this._stateScriptDataDoubleEscapeStart(cp);\n break;\n }\n case State.SCRIPT_DATA_DOUBLE_ESCAPED: {\n this._stateScriptDataDoubleEscaped(cp);\n break;\n }\n case State.SCRIPT_DATA_DOUBLE_ESCAPED_DASH: {\n this._stateScriptDataDoubleEscapedDash(cp);\n break;\n }\n case State.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH: {\n this._stateScriptDataDoubleEscapedDashDash(cp);\n break;\n }\n case State.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN: {\n this._stateScriptDataDoubleEscapedLessThanSign(cp);\n break;\n }\n case State.SCRIPT_DATA_DOUBLE_ESCAPE_END: {\n this._stateScriptDataDoubleEscapeEnd(cp);\n break;\n }\n case State.BEFORE_ATTRIBUTE_NAME: {\n this._stateBeforeAttributeName(cp);\n break;\n }\n case State.ATTRIBUTE_NAME: {\n this._stateAttributeName(cp);\n break;\n }\n case State.AFTER_ATTRIBUTE_NAME: {\n this._stateAfterAttributeName(cp);\n break;\n }\n case State.BEFORE_ATTRIBUTE_VALUE: {\n this._stateBeforeAttributeValue(cp);\n break;\n }\n case State.ATTRIBUTE_VALUE_DOUBLE_QUOTED: {\n this._stateAttributeValueDoubleQuoted(cp);\n break;\n }\n case State.ATTRIBUTE_VALUE_SINGLE_QUOTED: {\n this._stateAttributeValueSingleQuoted(cp);\n break;\n }\n case State.ATTRIBUTE_VALUE_UNQUOTED: {\n this._stateAttributeValueUnquoted(cp);\n break;\n }\n case State.AFTER_ATTRIBUTE_VALUE_QUOTED: {\n this._stateAfterAttributeValueQuoted(cp);\n break;\n }\n case State.SELF_CLOSING_START_TAG: {\n this._stateSelfClosingStartTag(cp);\n break;\n }\n case State.BOGUS_COMMENT: {\n this._stateBogusComment(cp);\n break;\n }\n case State.MARKUP_DECLARATION_OPEN: {\n this._stateMarkupDeclarationOpen(cp);\n break;\n }\n case State.COMMENT_START: {\n this._stateCommentStart(cp);\n break;\n }\n case State.COMMENT_START_DASH: {\n this._stateCommentStartDash(cp);\n break;\n }\n case State.COMMENT: {\n this._stateComment(cp);\n break;\n }\n case State.COMMENT_LESS_THAN_SIGN: {\n this._stateCommentLessThanSign(cp);\n break;\n }\n case State.COMMENT_LESS_THAN_SIGN_BANG: {\n this._stateCommentLessThanSignBang(cp);\n break;\n }\n case State.COMMENT_LESS_THAN_SIGN_BANG_DASH: {\n this._stateCommentLessThanSignBangDash(cp);\n break;\n }\n case State.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH: {\n this._stateCommentLessThanSignBangDashDash(cp);\n break;\n }\n case State.COMMENT_END_DASH: {\n this._stateCommentEndDash(cp);\n break;\n }\n case State.COMMENT_END: {\n this._stateCommentEnd(cp);\n break;\n }\n case State.COMMENT_END_BANG: {\n this._stateCommentEndBang(cp);\n break;\n }\n case State.DOCTYPE: {\n this._stateDoctype(cp);\n break;\n }\n case State.BEFORE_DOCTYPE_NAME: {\n this._stateBeforeDoctypeName(cp);\n break;\n }\n case State.DOCTYPE_NAME: {\n this._stateDoctypeName(cp);\n break;\n }\n case State.AFTER_DOCTYPE_NAME: {\n this._stateAfterDoctypeName(cp);\n break;\n }\n case State.AFTER_DOCTYPE_PUBLIC_KEYWORD: {\n this._stateAfterDoctypePublicKeyword(cp);\n break;\n }\n case State.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER: {\n this._stateBeforeDoctypePublicIdentifier(cp);\n break;\n }\n case State.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED: {\n this._stateDoctypePublicIdentifierDoubleQuoted(cp);\n break;\n }\n case State.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED: {\n this._stateDoctypePublicIdentifierSingleQuoted(cp);\n break;\n }\n case State.AFTER_DOCTYPE_PUBLIC_IDENTIFIER: {\n this._stateAfterDoctypePublicIdentifier(cp);\n break;\n }\n case State.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS: {\n this._stateBetweenDoctypePublicAndSystemIdentifiers(cp);\n break;\n }\n case State.AFTER_DOCTYPE_SYSTEM_KEYWORD: {\n this._stateAfterDoctypeSystemKeyword(cp);\n break;\n }\n case State.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER: {\n this._stateBeforeDoctypeSystemIdentifier(cp);\n break;\n }\n case State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED: {\n this._stateDoctypeSystemIdentifierDoubleQuoted(cp);\n break;\n }\n case State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED: {\n this._stateDoctypeSystemIdentifierSingleQuoted(cp);\n break;\n }\n case State.AFTER_DOCTYPE_SYSTEM_IDENTIFIER: {\n this._stateAfterDoctypeSystemIdentifier(cp);\n break;\n }\n case State.BOGUS_DOCTYPE: {\n this._stateBogusDoctype(cp);\n break;\n }\n case State.CDATA_SECTION: {\n this._stateCdataSection(cp);\n break;\n }\n case State.CDATA_SECTION_BRACKET: {\n this._stateCdataSectionBracket(cp);\n break;\n }\n case State.CDATA_SECTION_END: {\n this._stateCdataSectionEnd(cp);\n break;\n }\n case State.CHARACTER_REFERENCE: {\n this._stateCharacterReference();\n break;\n }\n case State.AMBIGUOUS_AMPERSAND: {\n this._stateAmbiguousAmpersand(cp);\n break;\n }\n default: {\n throw new Error('Unknown state');\n }\n }\n }\n // State machine\n // Data state\n //------------------------------------------------------------------\n _stateData(cp) {\n switch (cp) {\n case $.LESS_THAN_SIGN: {\n this.state = State.TAG_OPEN;\n break;\n }\n case $.AMPERSAND: {\n this._startCharacterReference();\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this._emitCodePoint(cp);\n break;\n }\n case $.EOF: {\n this._emitEOFToken();\n break;\n }\n default: {\n this._emitCodePoint(cp);\n }\n }\n }\n // RCDATA state\n //------------------------------------------------------------------\n _stateRcdata(cp) {\n switch (cp) {\n case $.AMPERSAND: {\n this._startCharacterReference();\n break;\n }\n case $.LESS_THAN_SIGN: {\n this.state = State.RCDATA_LESS_THAN_SIGN;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._emitEOFToken();\n break;\n }\n default: {\n this._emitCodePoint(cp);\n }\n }\n }\n // RAWTEXT state\n //------------------------------------------------------------------\n _stateRawtext(cp) {\n switch (cp) {\n case $.LESS_THAN_SIGN: {\n this.state = State.RAWTEXT_LESS_THAN_SIGN;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._emitEOFToken();\n break;\n }\n default: {\n this._emitCodePoint(cp);\n }\n }\n }\n // Script data state\n //------------------------------------------------------------------\n _stateScriptData(cp) {\n switch (cp) {\n case $.LESS_THAN_SIGN: {\n this.state = State.SCRIPT_DATA_LESS_THAN_SIGN;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._emitEOFToken();\n break;\n }\n default: {\n this._emitCodePoint(cp);\n }\n }\n }\n // PLAINTEXT state\n //------------------------------------------------------------------\n _statePlaintext(cp) {\n switch (cp) {\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._emitEOFToken();\n break;\n }\n default: {\n this._emitCodePoint(cp);\n }\n }\n }\n // Tag open state\n //------------------------------------------------------------------\n _stateTagOpen(cp) {\n if (isAsciiLetter(cp)) {\n this._createStartTagToken();\n this.state = State.TAG_NAME;\n this._stateTagName(cp);\n }\n else\n switch (cp) {\n case $.EXCLAMATION_MARK: {\n this.state = State.MARKUP_DECLARATION_OPEN;\n break;\n }\n case $.SOLIDUS: {\n this.state = State.END_TAG_OPEN;\n break;\n }\n case $.QUESTION_MARK: {\n this._err(ERR.unexpectedQuestionMarkInsteadOfTagName);\n this._createCommentToken(1);\n this.state = State.BOGUS_COMMENT;\n this._stateBogusComment(cp);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofBeforeTagName);\n this._emitChars('<');\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.invalidFirstCharacterOfTagName);\n this._emitChars('<');\n this.state = State.DATA;\n this._stateData(cp);\n }\n }\n }\n // End tag open state\n //------------------------------------------------------------------\n _stateEndTagOpen(cp) {\n if (isAsciiLetter(cp)) {\n this._createEndTagToken();\n this.state = State.TAG_NAME;\n this._stateTagName(cp);\n }\n else\n switch (cp) {\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.missingEndTagName);\n this.state = State.DATA;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofBeforeTagName);\n this._emitChars('</');\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.invalidFirstCharacterOfTagName);\n this._createCommentToken(2);\n this.state = State.BOGUS_COMMENT;\n this._stateBogusComment(cp);\n }\n }\n }\n // Tag name state\n //------------------------------------------------------------------\n _stateTagName(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n this.state = State.BEFORE_ATTRIBUTE_NAME;\n break;\n }\n case $.SOLIDUS: {\n this.state = State.SELF_CLOSING_START_TAG;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.state = State.DATA;\n this.emitCurrentTagToken();\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n token.tagName += REPLACEMENT_CHARACTER;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInTag);\n this._emitEOFToken();\n break;\n }\n default: {\n token.tagName += String.fromCodePoint(isAsciiUpper(cp) ? toAsciiLower(cp) : cp);\n }\n }\n }\n // RCDATA less-than sign state\n //------------------------------------------------------------------\n _stateRcdataLessThanSign(cp) {\n if (cp === $.SOLIDUS) {\n this.state = State.RCDATA_END_TAG_OPEN;\n }\n else {\n this._emitChars('<');\n this.state = State.RCDATA;\n this._stateRcdata(cp);\n }\n }\n // RCDATA end tag open state\n //------------------------------------------------------------------\n _stateRcdataEndTagOpen(cp) {\n if (isAsciiLetter(cp)) {\n this.state = State.RCDATA_END_TAG_NAME;\n this._stateRcdataEndTagName(cp);\n }\n else {\n this._emitChars('</');\n this.state = State.RCDATA;\n this._stateRcdata(cp);\n }\n }\n handleSpecialEndTag(_cp) {\n if (!this.preprocessor.startsWith(this.lastStartTagName, false)) {\n return !this._ensureHibernation();\n }\n this._createEndTagToken();\n const token = this.currentToken;\n token.tagName = this.lastStartTagName;\n const cp = this.preprocessor.peek(this.lastStartTagName.length);\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n this._advanceBy(this.lastStartTagName.length);\n this.state = State.BEFORE_ATTRIBUTE_NAME;\n return false;\n }\n case $.SOLIDUS: {\n this._advanceBy(this.lastStartTagName.length);\n this.state = State.SELF_CLOSING_START_TAG;\n return false;\n }\n case $.GREATER_THAN_SIGN: {\n this._advanceBy(this.lastStartTagName.length);\n this.emitCurrentTagToken();\n this.state = State.DATA;\n return false;\n }\n default: {\n return !this._ensureHibernation();\n }\n }\n }\n // RCDATA end tag name state\n //------------------------------------------------------------------\n _stateRcdataEndTagName(cp) {\n if (this.handleSpecialEndTag(cp)) {\n this._emitChars('</');\n this.state = State.RCDATA;\n this._stateRcdata(cp);\n }\n }\n // RAWTEXT less-than sign state\n //------------------------------------------------------------------\n _stateRawtextLessThanSign(cp) {\n if (cp === $.SOLIDUS) {\n this.state = State.RAWTEXT_END_TAG_OPEN;\n }\n else {\n this._emitChars('<');\n this.state = State.RAWTEXT;\n this._stateRawtext(cp);\n }\n }\n // RAWTEXT end tag open state\n //------------------------------------------------------------------\n _stateRawtextEndTagOpen(cp) {\n if (isAsciiLetter(cp)) {\n this.state = State.RAWTEXT_END_TAG_NAME;\n this._stateRawtextEndTagName(cp);\n }\n else {\n this._emitChars('</');\n this.state = State.RAWTEXT;\n this._stateRawtext(cp);\n }\n }\n // RAWTEXT end tag name state\n //------------------------------------------------------------------\n _stateRawtextEndTagName(cp) {\n if (this.handleSpecialEndTag(cp)) {\n this._emitChars('</');\n this.state = State.RAWTEXT;\n this._stateRawtext(cp);\n }\n }\n // Script data less-than sign state\n //------------------------------------------------------------------\n _stateScriptDataLessThanSign(cp) {\n switch (cp) {\n case $.SOLIDUS: {\n this.state = State.SCRIPT_DATA_END_TAG_OPEN;\n break;\n }\n case $.EXCLAMATION_MARK: {\n this.state = State.SCRIPT_DATA_ESCAPE_START;\n this._emitChars('<!');\n break;\n }\n default: {\n this._emitChars('<');\n this.state = State.SCRIPT_DATA;\n this._stateScriptData(cp);\n }\n }\n }\n // Script data end tag open state\n //------------------------------------------------------------------\n _stateScriptDataEndTagOpen(cp) {\n if (isAsciiLetter(cp)) {\n this.state = State.SCRIPT_DATA_END_TAG_NAME;\n this._stateScriptDataEndTagName(cp);\n }\n else {\n this._emitChars('</');\n this.state = State.SCRIPT_DATA;\n this._stateScriptData(cp);\n }\n }\n // Script data end tag name state\n //------------------------------------------------------------------\n _stateScriptDataEndTagName(cp) {\n if (this.handleSpecialEndTag(cp)) {\n this._emitChars('</');\n this.state = State.SCRIPT_DATA;\n this._stateScriptData(cp);\n }\n }\n // Script data escape start state\n //------------------------------------------------------------------\n _stateScriptDataEscapeStart(cp) {\n if (cp === $.HYPHEN_MINUS) {\n this.state = State.SCRIPT_DATA_ESCAPE_START_DASH;\n this._emitChars('-');\n }\n else {\n this.state = State.SCRIPT_DATA;\n this._stateScriptData(cp);\n }\n }\n // Script data escape start dash state\n //------------------------------------------------------------------\n _stateScriptDataEscapeStartDash(cp) {\n if (cp === $.HYPHEN_MINUS) {\n this.state = State.SCRIPT_DATA_ESCAPED_DASH_DASH;\n this._emitChars('-');\n }\n else {\n this.state = State.SCRIPT_DATA;\n this._stateScriptData(cp);\n }\n }\n // Script data escaped state\n //------------------------------------------------------------------\n _stateScriptDataEscaped(cp) {\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this.state = State.SCRIPT_DATA_ESCAPED_DASH;\n this._emitChars('-');\n break;\n }\n case $.LESS_THAN_SIGN: {\n this.state = State.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInScriptHtmlCommentLikeText);\n this._emitEOFToken();\n break;\n }\n default: {\n this._emitCodePoint(cp);\n }\n }\n }\n // Script data escaped dash state\n //------------------------------------------------------------------\n _stateScriptDataEscapedDash(cp) {\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this.state = State.SCRIPT_DATA_ESCAPED_DASH_DASH;\n this._emitChars('-');\n break;\n }\n case $.LESS_THAN_SIGN: {\n this.state = State.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this.state = State.SCRIPT_DATA_ESCAPED;\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInScriptHtmlCommentLikeText);\n this._emitEOFToken();\n break;\n }\n default: {\n this.state = State.SCRIPT_DATA_ESCAPED;\n this._emitCodePoint(cp);\n }\n }\n }\n // Script data escaped dash dash state\n //------------------------------------------------------------------\n _stateScriptDataEscapedDashDash(cp) {\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this._emitChars('-');\n break;\n }\n case $.LESS_THAN_SIGN: {\n this.state = State.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.state = State.SCRIPT_DATA;\n this._emitChars('>');\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this.state = State.SCRIPT_DATA_ESCAPED;\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInScriptHtmlCommentLikeText);\n this._emitEOFToken();\n break;\n }\n default: {\n this.state = State.SCRIPT_DATA_ESCAPED;\n this._emitCodePoint(cp);\n }\n }\n }\n // Script data escaped less-than sign state\n //------------------------------------------------------------------\n _stateScriptDataEscapedLessThanSign(cp) {\n if (cp === $.SOLIDUS) {\n this.state = State.SCRIPT_DATA_ESCAPED_END_TAG_OPEN;\n }\n else if (isAsciiLetter(cp)) {\n this._emitChars('<');\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPE_START;\n this._stateScriptDataDoubleEscapeStart(cp);\n }\n else {\n this._emitChars('<');\n this.state = State.SCRIPT_DATA_ESCAPED;\n this._stateScriptDataEscaped(cp);\n }\n }\n // Script data escaped end tag open state\n //------------------------------------------------------------------\n _stateScriptDataEscapedEndTagOpen(cp) {\n if (isAsciiLetter(cp)) {\n this.state = State.SCRIPT_DATA_ESCAPED_END_TAG_NAME;\n this._stateScriptDataEscapedEndTagName(cp);\n }\n else {\n this._emitChars('</');\n this.state = State.SCRIPT_DATA_ESCAPED;\n this._stateScriptDataEscaped(cp);\n }\n }\n // Script data escaped end tag name state\n //------------------------------------------------------------------\n _stateScriptDataEscapedEndTagName(cp) {\n if (this.handleSpecialEndTag(cp)) {\n this._emitChars('</');\n this.state = State.SCRIPT_DATA_ESCAPED;\n this._stateScriptDataEscaped(cp);\n }\n }\n // Script data double escape start state\n //------------------------------------------------------------------\n _stateScriptDataDoubleEscapeStart(cp) {\n if (this.preprocessor.startsWith($$.SCRIPT, false) &&\n isScriptDataDoubleEscapeSequenceEnd(this.preprocessor.peek($$.SCRIPT.length))) {\n this._emitCodePoint(cp);\n for (let i = 0; i < $$.SCRIPT.length; i++) {\n this._emitCodePoint(this._consume());\n }\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;\n }\n else if (!this._ensureHibernation()) {\n this.state = State.SCRIPT_DATA_ESCAPED;\n this._stateScriptDataEscaped(cp);\n }\n }\n // Script data double escaped state\n //------------------------------------------------------------------\n _stateScriptDataDoubleEscaped(cp) {\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_DASH;\n this._emitChars('-');\n break;\n }\n case $.LESS_THAN_SIGN: {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN;\n this._emitChars('<');\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInScriptHtmlCommentLikeText);\n this._emitEOFToken();\n break;\n }\n default: {\n this._emitCodePoint(cp);\n }\n }\n }\n // Script data double escaped dash state\n //------------------------------------------------------------------\n _stateScriptDataDoubleEscapedDash(cp) {\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH;\n this._emitChars('-');\n break;\n }\n case $.LESS_THAN_SIGN: {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN;\n this._emitChars('<');\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInScriptHtmlCommentLikeText);\n this._emitEOFToken();\n break;\n }\n default: {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;\n this._emitCodePoint(cp);\n }\n }\n }\n // Script data double escaped dash dash state\n //------------------------------------------------------------------\n _stateScriptDataDoubleEscapedDashDash(cp) {\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this._emitChars('-');\n break;\n }\n case $.LESS_THAN_SIGN: {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN;\n this._emitChars('<');\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.state = State.SCRIPT_DATA;\n this._emitChars('>');\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInScriptHtmlCommentLikeText);\n this._emitEOFToken();\n break;\n }\n default: {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;\n this._emitCodePoint(cp);\n }\n }\n }\n // Script data double escaped less-than sign state\n //------------------------------------------------------------------\n _stateScriptDataDoubleEscapedLessThanSign(cp) {\n if (cp === $.SOLIDUS) {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPE_END;\n this._emitChars('/');\n }\n else {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;\n this._stateScriptDataDoubleEscaped(cp);\n }\n }\n // Script data double escape end state\n //------------------------------------------------------------------\n _stateScriptDataDoubleEscapeEnd(cp) {\n if (this.preprocessor.startsWith($$.SCRIPT, false) &&\n isScriptDataDoubleEscapeSequenceEnd(this.preprocessor.peek($$.SCRIPT.length))) {\n this._emitCodePoint(cp);\n for (let i = 0; i < $$.SCRIPT.length; i++) {\n this._emitCodePoint(this._consume());\n }\n this.state = State.SCRIPT_DATA_ESCAPED;\n }\n else if (!this._ensureHibernation()) {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;\n this._stateScriptDataDoubleEscaped(cp);\n }\n }\n // Before attribute name state\n //------------------------------------------------------------------\n _stateBeforeAttributeName(cp) {\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n // Ignore whitespace\n break;\n }\n case $.SOLIDUS:\n case $.GREATER_THAN_SIGN:\n case $.EOF: {\n this.state = State.AFTER_ATTRIBUTE_NAME;\n this._stateAfterAttributeName(cp);\n break;\n }\n case $.EQUALS_SIGN: {\n this._err(ERR.unexpectedEqualsSignBeforeAttributeName);\n this._createAttr('=');\n this.state = State.ATTRIBUTE_NAME;\n break;\n }\n default: {\n this._createAttr('');\n this.state = State.ATTRIBUTE_NAME;\n this._stateAttributeName(cp);\n }\n }\n }\n // Attribute name state\n //------------------------------------------------------------------\n _stateAttributeName(cp) {\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED:\n case $.SOLIDUS:\n case $.GREATER_THAN_SIGN:\n case $.EOF: {\n this._leaveAttrName();\n this.state = State.AFTER_ATTRIBUTE_NAME;\n this._stateAfterAttributeName(cp);\n break;\n }\n case $.EQUALS_SIGN: {\n this._leaveAttrName();\n this.state = State.BEFORE_ATTRIBUTE_VALUE;\n break;\n }\n case $.QUOTATION_MARK:\n case $.APOSTROPHE:\n case $.LESS_THAN_SIGN: {\n this._err(ERR.unexpectedCharacterInAttributeName);\n this.currentAttr.name += String.fromCodePoint(cp);\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this.currentAttr.name += REPLACEMENT_CHARACTER;\n break;\n }\n default: {\n this.currentAttr.name += String.fromCodePoint(isAsciiUpper(cp) ? toAsciiLower(cp) : cp);\n }\n }\n }\n // After attribute name state\n //------------------------------------------------------------------\n _stateAfterAttributeName(cp) {\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n // Ignore whitespace\n break;\n }\n case $.SOLIDUS: {\n this.state = State.SELF_CLOSING_START_TAG;\n break;\n }\n case $.EQUALS_SIGN: {\n this.state = State.BEFORE_ATTRIBUTE_VALUE;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.state = State.DATA;\n this.emitCurrentTagToken();\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInTag);\n this._emitEOFToken();\n break;\n }\n default: {\n this._createAttr('');\n this.state = State.ATTRIBUTE_NAME;\n this._stateAttributeName(cp);\n }\n }\n }\n // Before attribute value state\n //------------------------------------------------------------------\n _stateBeforeAttributeValue(cp) {\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n // Ignore whitespace\n break;\n }\n case $.QUOTATION_MARK: {\n this.state = State.ATTRIBUTE_VALUE_DOUBLE_QUOTED;\n break;\n }\n case $.APOSTROPHE: {\n this.state = State.ATTRIBUTE_VALUE_SINGLE_QUOTED;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.missingAttributeValue);\n this.state = State.DATA;\n this.emitCurrentTagToken();\n break;\n }\n default: {\n this.state = State.ATTRIBUTE_VALUE_UNQUOTED;\n this._stateAttributeValueUnquoted(cp);\n }\n }\n }\n // Attribute value (double-quoted) state\n //------------------------------------------------------------------\n _stateAttributeValueDoubleQuoted(cp) {\n switch (cp) {\n case $.QUOTATION_MARK: {\n this.state = State.AFTER_ATTRIBUTE_VALUE_QUOTED;\n break;\n }\n case $.AMPERSAND: {\n this._startCharacterReference();\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this.currentAttr.value += REPLACEMENT_CHARACTER;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInTag);\n this._emitEOFToken();\n break;\n }\n default: {\n this.currentAttr.value += String.fromCodePoint(cp);\n }\n }\n }\n // Attribute value (single-quoted) state\n //------------------------------------------------------------------\n _stateAttributeValueSingleQuoted(cp) {\n switch (cp) {\n case $.APOSTROPHE: {\n this.state = State.AFTER_ATTRIBUTE_VALUE_QUOTED;\n break;\n }\n case $.AMPERSAND: {\n this._startCharacterReference();\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this.currentAttr.value += REPLACEMENT_CHARACTER;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInTag);\n this._emitEOFToken();\n break;\n }\n default: {\n this.currentAttr.value += String.fromCodePoint(cp);\n }\n }\n }\n // Attribute value (unquoted) state\n //------------------------------------------------------------------\n _stateAttributeValueUnquoted(cp) {\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n this._leaveAttrValue();\n this.state = State.BEFORE_ATTRIBUTE_NAME;\n break;\n }\n case $.AMPERSAND: {\n this._startCharacterReference();\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._leaveAttrValue();\n this.state = State.DATA;\n this.emitCurrentTagToken();\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this.currentAttr.value += REPLACEMENT_CHARACTER;\n break;\n }\n case $.QUOTATION_MARK:\n case $.APOSTROPHE:\n case $.LESS_THAN_SIGN:\n case $.EQUALS_SIGN:\n case $.GRAVE_ACCENT: {\n this._err(ERR.unexpectedCharacterInUnquotedAttributeValue);\n this.currentAttr.value += String.fromCodePoint(cp);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInTag);\n this._emitEOFToken();\n break;\n }\n default: {\n this.currentAttr.value += String.fromCodePoint(cp);\n }\n }\n }\n // After attribute value (quoted) state\n //------------------------------------------------------------------\n _stateAfterAttributeValueQuoted(cp) {\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n this._leaveAttrValue();\n this.state = State.BEFORE_ATTRIBUTE_NAME;\n break;\n }\n case $.SOLIDUS: {\n this._leaveAttrValue();\n this.state = State.SELF_CLOSING_START_TAG;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._leaveAttrValue();\n this.state = State.DATA;\n this.emitCurrentTagToken();\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInTag);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.missingWhitespaceBetweenAttributes);\n this.state = State.BEFORE_ATTRIBUTE_NAME;\n this._stateBeforeAttributeName(cp);\n }\n }\n }\n // Self-closing start tag state\n //------------------------------------------------------------------\n _stateSelfClosingStartTag(cp) {\n switch (cp) {\n case $.GREATER_THAN_SIGN: {\n const token = this.currentToken;\n token.selfClosing = true;\n this.state = State.DATA;\n this.emitCurrentTagToken();\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInTag);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.unexpectedSolidusInTag);\n this.state = State.BEFORE_ATTRIBUTE_NAME;\n this._stateBeforeAttributeName(cp);\n }\n }\n }\n // Bogus comment state\n //------------------------------------------------------------------\n _stateBogusComment(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.GREATER_THAN_SIGN: {\n this.state = State.DATA;\n this.emitCurrentComment(token);\n break;\n }\n case $.EOF: {\n this.emitCurrentComment(token);\n this._emitEOFToken();\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n token.data += REPLACEMENT_CHARACTER;\n break;\n }\n default: {\n token.data += String.fromCodePoint(cp);\n }\n }\n }\n // Markup declaration open state\n //------------------------------------------------------------------\n _stateMarkupDeclarationOpen(cp) {\n if (this._consumeSequenceIfMatch($$.DASH_DASH, true)) {\n this._createCommentToken($$.DASH_DASH.length + 1);\n this.state = State.COMMENT_START;\n }\n else if (this._consumeSequenceIfMatch($$.DOCTYPE, false)) {\n // NOTE: Doctypes tokens are created without fixed offsets. We keep track of the moment a doctype *might* start here.\n this.currentLocation = this.getCurrentLocation($$.DOCTYPE.length + 1);\n this.state = State.DOCTYPE;\n }\n else if (this._consumeSequenceIfMatch($$.CDATA_START, true)) {\n if (this.inForeignNode) {\n this.state = State.CDATA_SECTION;\n }\n else {\n this._err(ERR.cdataInHtmlContent);\n this._createCommentToken($$.CDATA_START.length + 1);\n this.currentToken.data = '[CDATA[';\n this.state = State.BOGUS_COMMENT;\n }\n }\n //NOTE: Sequence lookups can be abrupted by hibernation. In that case, lookup\n //results are no longer valid and we will need to start over.\n else if (!this._ensureHibernation()) {\n this._err(ERR.incorrectlyOpenedComment);\n this._createCommentToken(2);\n this.state = State.BOGUS_COMMENT;\n this._stateBogusComment(cp);\n }\n }\n // Comment start state\n //------------------------------------------------------------------\n _stateCommentStart(cp) {\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this.state = State.COMMENT_START_DASH;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.abruptClosingOfEmptyComment);\n this.state = State.DATA;\n const token = this.currentToken;\n this.emitCurrentComment(token);\n break;\n }\n default: {\n this.state = State.COMMENT;\n this._stateComment(cp);\n }\n }\n }\n // Comment start dash state\n //------------------------------------------------------------------\n _stateCommentStartDash(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this.state = State.COMMENT_END;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.abruptClosingOfEmptyComment);\n this.state = State.DATA;\n this.emitCurrentComment(token);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInComment);\n this.emitCurrentComment(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.data += '-';\n this.state = State.COMMENT;\n this._stateComment(cp);\n }\n }\n }\n // Comment state\n //------------------------------------------------------------------\n _stateComment(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this.state = State.COMMENT_END_DASH;\n break;\n }\n case $.LESS_THAN_SIGN: {\n token.data += '<';\n this.state = State.COMMENT_LESS_THAN_SIGN;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n token.data += REPLACEMENT_CHARACTER;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInComment);\n this.emitCurrentComment(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.data += String.fromCodePoint(cp);\n }\n }\n }\n // Comment less-than sign state\n //------------------------------------------------------------------\n _stateCommentLessThanSign(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.EXCLAMATION_MARK: {\n token.data += '!';\n this.state = State.COMMENT_LESS_THAN_SIGN_BANG;\n break;\n }\n case $.LESS_THAN_SIGN: {\n token.data += '<';\n break;\n }\n default: {\n this.state = State.COMMENT;\n this._stateComment(cp);\n }\n }\n }\n // Comment less-than sign bang state\n //------------------------------------------------------------------\n _stateCommentLessThanSignBang(cp) {\n if (cp === $.HYPHEN_MINUS) {\n this.state = State.COMMENT_LESS_THAN_SIGN_BANG_DASH;\n }\n else {\n this.state = State.COMMENT;\n this._stateComment(cp);\n }\n }\n // Comment less-than sign bang dash state\n //------------------------------------------------------------------\n _stateCommentLessThanSignBangDash(cp) {\n if (cp === $.HYPHEN_MINUS) {\n this.state = State.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH;\n }\n else {\n this.state = State.COMMENT_END_DASH;\n this._stateCommentEndDash(cp);\n }\n }\n // Comment less-than sign bang dash dash state\n //------------------------------------------------------------------\n _stateCommentLessThanSignBangDashDash(cp) {\n if (cp !== $.GREATER_THAN_SIGN && cp !== $.EOF) {\n this._err(ERR.nestedComment);\n }\n this.state = State.COMMENT_END;\n this._stateCommentEnd(cp);\n }\n // Comment end dash state\n //------------------------------------------------------------------\n _stateCommentEndDash(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this.state = State.COMMENT_END;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInComment);\n this.emitCurrentComment(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.data += '-';\n this.state = State.COMMENT;\n this._stateComment(cp);\n }\n }\n }\n // Comment end state\n //------------------------------------------------------------------\n _stateCommentEnd(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.GREATER_THAN_SIGN: {\n this.state = State.DATA;\n this.emitCurrentComment(token);\n break;\n }\n case $.EXCLAMATION_MARK: {\n this.state = State.COMMENT_END_BANG;\n break;\n }\n case $.HYPHEN_MINUS: {\n token.data += '-';\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInComment);\n this.emitCurrentComment(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.data += '--';\n this.state = State.COMMENT;\n this._stateComment(cp);\n }\n }\n }\n // Comment end bang state\n //------------------------------------------------------------------\n _stateCommentEndBang(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.HYPHEN_MINUS: {\n token.data += '--!';\n this.state = State.COMMENT_END_DASH;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.incorrectlyClosedComment);\n this.state = State.DATA;\n this.emitCurrentComment(token);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInComment);\n this.emitCurrentComment(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.data += '--!';\n this.state = State.COMMENT;\n this._stateComment(cp);\n }\n }\n }\n // DOCTYPE state\n //------------------------------------------------------------------\n _stateDoctype(cp) {\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n this.state = State.BEFORE_DOCTYPE_NAME;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.state = State.BEFORE_DOCTYPE_NAME;\n this._stateBeforeDoctypeName(cp);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n this._createDoctypeToken(null);\n const token = this.currentToken;\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.missingWhitespaceBeforeDoctypeName);\n this.state = State.BEFORE_DOCTYPE_NAME;\n this._stateBeforeDoctypeName(cp);\n }\n }\n }\n // Before DOCTYPE name state\n //------------------------------------------------------------------\n _stateBeforeDoctypeName(cp) {\n if (isAsciiUpper(cp)) {\n this._createDoctypeToken(String.fromCharCode(toAsciiLower(cp)));\n this.state = State.DOCTYPE_NAME;\n }\n else\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n // Ignore whitespace\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this._createDoctypeToken(REPLACEMENT_CHARACTER);\n this.state = State.DOCTYPE_NAME;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.missingDoctypeName);\n this._createDoctypeToken(null);\n const token = this.currentToken;\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this.state = State.DATA;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n this._createDoctypeToken(null);\n const token = this.currentToken;\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n this._createDoctypeToken(String.fromCodePoint(cp));\n this.state = State.DOCTYPE_NAME;\n }\n }\n }\n // DOCTYPE name state\n //------------------------------------------------------------------\n _stateDoctypeName(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n this.state = State.AFTER_DOCTYPE_NAME;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.state = State.DATA;\n this.emitCurrentDoctype(token);\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n token.name += REPLACEMENT_CHARACTER;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.name += String.fromCodePoint(isAsciiUpper(cp) ? toAsciiLower(cp) : cp);\n }\n }\n }\n // After DOCTYPE name state\n //------------------------------------------------------------------\n _stateAfterDoctypeName(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n // Ignore whitespace\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.state = State.DATA;\n this.emitCurrentDoctype(token);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n if (this._consumeSequenceIfMatch($$.PUBLIC, false)) {\n this.state = State.AFTER_DOCTYPE_PUBLIC_KEYWORD;\n }\n else if (this._consumeSequenceIfMatch($$.SYSTEM, false)) {\n this.state = State.AFTER_DOCTYPE_SYSTEM_KEYWORD;\n }\n //NOTE: sequence lookup can be abrupted by hibernation. In that case lookup\n //results are no longer valid and we will need to start over.\n else if (!this._ensureHibernation()) {\n this._err(ERR.invalidCharacterSequenceAfterDoctypeName);\n token.forceQuirks = true;\n this.state = State.BOGUS_DOCTYPE;\n this._stateBogusDoctype(cp);\n }\n }\n }\n }\n // After DOCTYPE public keyword state\n //------------------------------------------------------------------\n _stateAfterDoctypePublicKeyword(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n this.state = State.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER;\n break;\n }\n case $.QUOTATION_MARK: {\n this._err(ERR.missingWhitespaceAfterDoctypePublicKeyword);\n token.publicId = '';\n this.state = State.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;\n break;\n }\n case $.APOSTROPHE: {\n this._err(ERR.missingWhitespaceAfterDoctypePublicKeyword);\n token.publicId = '';\n this.state = State.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.missingDoctypePublicIdentifier);\n token.forceQuirks = true;\n this.state = State.DATA;\n this.emitCurrentDoctype(token);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.missingQuoteBeforeDoctypePublicIdentifier);\n token.forceQuirks = true;\n this.state = State.BOGUS_DOCTYPE;\n this._stateBogusDoctype(cp);\n }\n }\n }\n // Before DOCTYPE public identifier state\n //------------------------------------------------------------------\n _stateBeforeDoctypePublicIdentifier(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n // Ignore whitespace\n break;\n }\n case $.QUOTATION_MARK: {\n token.publicId = '';\n this.state = State.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;\n break;\n }\n case $.APOSTROPHE: {\n token.publicId = '';\n this.state = State.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.missingDoctypePublicIdentifier);\n token.forceQuirks = true;\n this.state = State.DATA;\n this.emitCurrentDoctype(token);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.missingQuoteBeforeDoctypePublicIdentifier);\n token.forceQuirks = true;\n this.state = State.BOGUS_DOCTYPE;\n this._stateBogusDoctype(cp);\n }\n }\n }\n // DOCTYPE public identifier (double-quoted) state\n //------------------------------------------------------------------\n _stateDoctypePublicIdentifierDoubleQuoted(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.QUOTATION_MARK: {\n this.state = State.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n token.publicId += REPLACEMENT_CHARACTER;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.abruptDoctypePublicIdentifier);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this.state = State.DATA;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.publicId += String.fromCodePoint(cp);\n }\n }\n }\n // DOCTYPE public identifier (single-quoted) state\n //------------------------------------------------------------------\n _stateDoctypePublicIdentifierSingleQuoted(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.APOSTROPHE: {\n this.state = State.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n token.publicId += REPLACEMENT_CHARACTER;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.abruptDoctypePublicIdentifier);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this.state = State.DATA;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.publicId += String.fromCodePoint(cp);\n }\n }\n }\n // After DOCTYPE public identifier state\n //------------------------------------------------------------------\n _stateAfterDoctypePublicIdentifier(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n this.state = State.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.state = State.DATA;\n this.emitCurrentDoctype(token);\n break;\n }\n case $.QUOTATION_MARK: {\n this._err(ERR.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers);\n token.systemId = '';\n this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;\n break;\n }\n case $.APOSTROPHE: {\n this._err(ERR.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers);\n token.systemId = '';\n this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.missingQuoteBeforeDoctypeSystemIdentifier);\n token.forceQuirks = true;\n this.state = State.BOGUS_DOCTYPE;\n this._stateBogusDoctype(cp);\n }\n }\n }\n // Between DOCTYPE public and system identifiers state\n //------------------------------------------------------------------\n _stateBetweenDoctypePublicAndSystemIdentifiers(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n // Ignore whitespace\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.emitCurrentDoctype(token);\n this.state = State.DATA;\n break;\n }\n case $.QUOTATION_MARK: {\n token.systemId = '';\n this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;\n break;\n }\n case $.APOSTROPHE: {\n token.systemId = '';\n this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.missingQuoteBeforeDoctypeSystemIdentifier);\n token.forceQuirks = true;\n this.state = State.BOGUS_DOCTYPE;\n this._stateBogusDoctype(cp);\n }\n }\n }\n // After DOCTYPE system keyword state\n //------------------------------------------------------------------\n _stateAfterDoctypeSystemKeyword(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n this.state = State.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER;\n break;\n }\n case $.QUOTATION_MARK: {\n this._err(ERR.missingWhitespaceAfterDoctypeSystemKeyword);\n token.systemId = '';\n this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;\n break;\n }\n case $.APOSTROPHE: {\n this._err(ERR.missingWhitespaceAfterDoctypeSystemKeyword);\n token.systemId = '';\n this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.missingDoctypeSystemIdentifier);\n token.forceQuirks = true;\n this.state = State.DATA;\n this.emitCurrentDoctype(token);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.missingQuoteBeforeDoctypeSystemIdentifier);\n token.forceQuirks = true;\n this.state = State.BOGUS_DOCTYPE;\n this._stateBogusDoctype(cp);\n }\n }\n }\n // Before DOCTYPE system identifier state\n //------------------------------------------------------------------\n _stateBeforeDoctypeSystemIdentifier(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n // Ignore whitespace\n break;\n }\n case $.QUOTATION_MARK: {\n token.systemId = '';\n this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;\n break;\n }\n case $.APOSTROPHE: {\n token.systemId = '';\n this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.missingDoctypeSystemIdentifier);\n token.forceQuirks = true;\n this.state = State.DATA;\n this.emitCurrentDoctype(token);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.missingQuoteBeforeDoctypeSystemIdentifier);\n token.forceQuirks = true;\n this.state = State.BOGUS_DOCTYPE;\n this._stateBogusDoctype(cp);\n }\n }\n }\n // DOCTYPE system identifier (double-quoted) state\n //------------------------------------------------------------------\n _stateDoctypeSystemIdentifierDoubleQuoted(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.QUOTATION_MARK: {\n this.state = State.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n token.systemId += REPLACEMENT_CHARACTER;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.abruptDoctypeSystemIdentifier);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this.state = State.DATA;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.systemId += String.fromCodePoint(cp);\n }\n }\n }\n // DOCTYPE system identifier (single-quoted) state\n //------------------------------------------------------------------\n _stateDoctypeSystemIdentifierSingleQuoted(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.APOSTROPHE: {\n this.state = State.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n token.systemId += REPLACEMENT_CHARACTER;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.abruptDoctypeSystemIdentifier);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this.state = State.DATA;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.systemId += String.fromCodePoint(cp);\n }\n }\n }\n // After DOCTYPE system identifier state\n //------------------------------------------------------------------\n _stateAfterDoctypeSystemIdentifier(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n // Ignore whitespace\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.emitCurrentDoctype(token);\n this.state = State.DATA;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.unexpectedCharacterAfterDoctypeSystemIdentifier);\n this.state = State.BOGUS_DOCTYPE;\n this._stateBogusDoctype(cp);\n }\n }\n }\n // Bogus DOCTYPE state\n //------------------------------------------------------------------\n _stateBogusDoctype(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.GREATER_THAN_SIGN: {\n this.emitCurrentDoctype(token);\n this.state = State.DATA;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n break;\n }\n case $.EOF: {\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default:\n // Do nothing\n }\n }\n // CDATA section state\n //------------------------------------------------------------------\n _stateCdataSection(cp) {\n switch (cp) {\n case $.RIGHT_SQUARE_BRACKET: {\n this.state = State.CDATA_SECTION_BRACKET;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInCdata);\n this._emitEOFToken();\n break;\n }\n default: {\n this._emitCodePoint(cp);\n }\n }\n }\n // CDATA section bracket state\n //------------------------------------------------------------------\n _stateCdataSectionBracket(cp) {\n if (cp === $.RIGHT_SQUARE_BRACKET) {\n this.state = State.CDATA_SECTION_END;\n }\n else {\n this._emitChars(']');\n this.state = State.CDATA_SECTION;\n this._stateCdataSection(cp);\n }\n }\n // CDATA section end state\n //------------------------------------------------------------------\n _stateCdataSectionEnd(cp) {\n switch (cp) {\n case $.GREATER_THAN_SIGN: {\n this.state = State.DATA;\n break;\n }\n case $.RIGHT_SQUARE_BRACKET: {\n this._emitChars(']');\n break;\n }\n default: {\n this._emitChars(']]');\n this.state = State.CDATA_SECTION;\n this._stateCdataSection(cp);\n }\n }\n }\n // Character reference state\n //------------------------------------------------------------------\n _stateCharacterReference() {\n let length = this.entityDecoder.write(this.preprocessor.html, this.preprocessor.pos);\n if (length < 0) {\n if (this.preprocessor.lastChunkWritten) {\n length = this.entityDecoder.end();\n }\n else {\n // Wait for the rest of the entity.\n this.active = false;\n // Mark the entire buffer as read.\n this.preprocessor.pos = this.preprocessor.html.length - 1;\n this.consumedAfterSnapshot = 0;\n this.preprocessor.endOfChunkHit = true;\n return;\n }\n }\n if (length === 0) {\n // This was not a valid entity. Go back to the beginning, and\n // figure out what to do.\n this.preprocessor.pos = this.entityStartPos;\n this._flushCodePointConsumedAsCharacterReference($.AMPERSAND);\n this.state =\n !this._isCharacterReferenceInAttribute() && isAsciiAlphaNumeric(this.preprocessor.peek(1))\n ? State.AMBIGUOUS_AMPERSAND\n : this.returnState;\n }\n else {\n // We successfully parsed an entity. Switch to the return state.\n this.state = this.returnState;\n }\n }\n // Ambiguos ampersand state\n //------------------------------------------------------------------\n _stateAmbiguousAmpersand(cp) {\n if (isAsciiAlphaNumeric(cp)) {\n this._flushCodePointConsumedAsCharacterReference(cp);\n }\n else {\n if (cp === $.SEMICOLON) {\n this._err(ERR.unknownNamedCharacterReference);\n }\n this.state = this.returnState;\n this._callState(cp);\n }\n }\n}\n","import { TAG_ID as $, NS, NUMBERED_HEADERS } from '../common/html.js';\n//Element utils\nconst IMPLICIT_END_TAG_REQUIRED = new Set([$.DD, $.DT, $.LI, $.OPTGROUP, $.OPTION, $.P, $.RB, $.RP, $.RT, $.RTC]);\nconst IMPLICIT_END_TAG_REQUIRED_THOROUGHLY = new Set([\n ...IMPLICIT_END_TAG_REQUIRED,\n $.CAPTION,\n $.COLGROUP,\n $.TBODY,\n $.TD,\n $.TFOOT,\n $.TH,\n $.THEAD,\n $.TR,\n]);\nconst SCOPING_ELEMENTS_HTML = new Set([\n $.APPLET,\n $.CAPTION,\n $.HTML,\n $.MARQUEE,\n $.OBJECT,\n $.TABLE,\n $.TD,\n $.TEMPLATE,\n $.TH,\n]);\nconst SCOPING_ELEMENTS_HTML_LIST = new Set([...SCOPING_ELEMENTS_HTML, $.OL, $.UL]);\nconst SCOPING_ELEMENTS_HTML_BUTTON = new Set([...SCOPING_ELEMENTS_HTML, $.BUTTON]);\nconst SCOPING_ELEMENTS_MATHML = new Set([$.ANNOTATION_XML, $.MI, $.MN, $.MO, $.MS, $.MTEXT]);\nconst SCOPING_ELEMENTS_SVG = new Set([$.DESC, $.FOREIGN_OBJECT, $.TITLE]);\nconst TABLE_ROW_CONTEXT = new Set([$.TR, $.TEMPLATE, $.HTML]);\nconst TABLE_BODY_CONTEXT = new Set([$.TBODY, $.TFOOT, $.THEAD, $.TEMPLATE, $.HTML]);\nconst TABLE_CONTEXT = new Set([$.TABLE, $.TEMPLATE, $.HTML]);\nconst TABLE_CELLS = new Set([$.TD, $.TH]);\n//Stack of open elements\nexport class OpenElementStack {\n get currentTmplContentOrNode() {\n return this._isInTemplate() ? this.treeAdapter.getTemplateContent(this.current) : this.current;\n }\n constructor(document, treeAdapter, handler) {\n this.treeAdapter = treeAdapter;\n this.handler = handler;\n this.items = [];\n this.tagIDs = [];\n this.stackTop = -1;\n this.tmplCount = 0;\n this.currentTagId = $.UNKNOWN;\n this.current = document;\n }\n //Index of element\n _indexOf(element) {\n return this.items.lastIndexOf(element, this.stackTop);\n }\n //Update current element\n _isInTemplate() {\n return this.currentTagId === $.TEMPLATE && this.treeAdapter.getNamespaceURI(this.current) === NS.HTML;\n }\n _updateCurrentElement() {\n this.current = this.items[this.stackTop];\n this.currentTagId = this.tagIDs[this.stackTop];\n }\n //Mutations\n push(element, tagID) {\n this.stackTop++;\n this.items[this.stackTop] = element;\n this.current = element;\n this.tagIDs[this.stackTop] = tagID;\n this.currentTagId = tagID;\n if (this._isInTemplate()) {\n this.tmplCount++;\n }\n this.handler.onItemPush(element, tagID, true);\n }\n pop() {\n const popped = this.current;\n if (this.tmplCount > 0 && this._isInTemplate()) {\n this.tmplCount--;\n }\n this.stackTop--;\n this._updateCurrentElement();\n this.handler.onItemPop(popped, true);\n }\n replace(oldElement, newElement) {\n const idx = this._indexOf(oldElement);\n this.items[idx] = newElement;\n if (idx === this.stackTop) {\n this.current = newElement;\n }\n }\n insertAfter(referenceElement, newElement, newElementID) {\n const insertionIdx = this._indexOf(referenceElement) + 1;\n this.items.splice(insertionIdx, 0, newElement);\n this.tagIDs.splice(insertionIdx, 0, newElementID);\n this.stackTop++;\n if (insertionIdx === this.stackTop) {\n this._updateCurrentElement();\n }\n if (this.current && this.currentTagId !== undefined) {\n this.handler.onItemPush(this.current, this.currentTagId, insertionIdx === this.stackTop);\n }\n }\n popUntilTagNamePopped(tagName) {\n let targetIdx = this.stackTop + 1;\n do {\n targetIdx = this.tagIDs.lastIndexOf(tagName, targetIdx - 1);\n } while (targetIdx > 0 && this.treeAdapter.getNamespaceURI(this.items[targetIdx]) !== NS.HTML);\n this.shortenToLength(Math.max(targetIdx, 0));\n }\n shortenToLength(idx) {\n while (this.stackTop >= idx) {\n const popped = this.current;\n if (this.tmplCount > 0 && this._isInTemplate()) {\n this.tmplCount -= 1;\n }\n this.stackTop--;\n this._updateCurrentElement();\n this.handler.onItemPop(popped, this.stackTop < idx);\n }\n }\n popUntilElementPopped(element) {\n const idx = this._indexOf(element);\n this.shortenToLength(Math.max(idx, 0));\n }\n popUntilPopped(tagNames, targetNS) {\n const idx = this._indexOfTagNames(tagNames, targetNS);\n this.shortenToLength(Math.max(idx, 0));\n }\n popUntilNumberedHeaderPopped() {\n this.popUntilPopped(NUMBERED_HEADERS, NS.HTML);\n }\n popUntilTableCellPopped() {\n this.popUntilPopped(TABLE_CELLS, NS.HTML);\n }\n popAllUpToHtmlElement() {\n //NOTE: here we assume that the root <html> element is always first in the open element stack, so\n //we perform this fast stack clean up.\n this.tmplCount = 0;\n this.shortenToLength(1);\n }\n _indexOfTagNames(tagNames, namespace) {\n for (let i = this.stackTop; i >= 0; i--) {\n if (tagNames.has(this.tagIDs[i]) && this.treeAdapter.getNamespaceURI(this.items[i]) === namespace) {\n return i;\n }\n }\n return -1;\n }\n clearBackTo(tagNames, targetNS) {\n const idx = this._indexOfTagNames(tagNames, targetNS);\n this.shortenToLength(idx + 1);\n }\n clearBackToTableContext() {\n this.clearBackTo(TABLE_CONTEXT, NS.HTML);\n }\n clearBackToTableBodyContext() {\n this.clearBackTo(TABLE_BODY_CONTEXT, NS.HTML);\n }\n clearBackToTableRowContext() {\n this.clearBackTo(TABLE_ROW_CONTEXT, NS.HTML);\n }\n remove(element) {\n const idx = this._indexOf(element);\n if (idx >= 0) {\n if (idx === this.stackTop) {\n this.pop();\n }\n else {\n this.items.splice(idx, 1);\n this.tagIDs.splice(idx, 1);\n this.stackTop--;\n this._updateCurrentElement();\n this.handler.onItemPop(element, false);\n }\n }\n }\n //Search\n tryPeekProperlyNestedBodyElement() {\n //Properly nested <body> element (should be second element in stack).\n return this.stackTop >= 1 && this.tagIDs[1] === $.BODY ? this.items[1] : null;\n }\n contains(element) {\n return this._indexOf(element) > -1;\n }\n getCommonAncestor(element) {\n const elementIdx = this._indexOf(element) - 1;\n return elementIdx >= 0 ? this.items[elementIdx] : null;\n }\n isRootHtmlElementCurrent() {\n return this.stackTop === 0 && this.tagIDs[0] === $.HTML;\n }\n //Element in scope\n hasInDynamicScope(tagName, htmlScope) {\n for (let i = this.stackTop; i >= 0; i--) {\n const tn = this.tagIDs[i];\n switch (this.treeAdapter.getNamespaceURI(this.items[i])) {\n case NS.HTML: {\n if (tn === tagName)\n return true;\n if (htmlScope.has(tn))\n return false;\n break;\n }\n case NS.SVG: {\n if (SCOPING_ELEMENTS_SVG.has(tn))\n return false;\n break;\n }\n case NS.MATHML: {\n if (SCOPING_ELEMENTS_MATHML.has(tn))\n return false;\n break;\n }\n }\n }\n return true;\n }\n hasInScope(tagName) {\n return this.hasInDynamicScope(tagName, SCOPING_ELEMENTS_HTML);\n }\n hasInListItemScope(tagName) {\n return this.hasInDynamicScope(tagName, SCOPING_ELEMENTS_HTML_LIST);\n }\n hasInButtonScope(tagName) {\n return this.hasInDynamicScope(tagName, SCOPING_ELEMENTS_HTML_BUTTON);\n }\n hasNumberedHeaderInScope() {\n for (let i = this.stackTop; i >= 0; i--) {\n const tn = this.tagIDs[i];\n switch (this.treeAdapter.getNamespaceURI(this.items[i])) {\n case NS.HTML: {\n if (NUMBERED_HEADERS.has(tn))\n return true;\n if (SCOPING_ELEMENTS_HTML.has(tn))\n return false;\n break;\n }\n case NS.SVG: {\n if (SCOPING_ELEMENTS_SVG.has(tn))\n return false;\n break;\n }\n case NS.MATHML: {\n if (SCOPING_ELEMENTS_MATHML.has(tn))\n return false;\n break;\n }\n }\n }\n return true;\n }\n hasInTableScope(tagName) {\n for (let i = this.stackTop; i >= 0; i--) {\n if (this.treeAdapter.getNamespaceURI(this.items[i]) !== NS.HTML) {\n continue;\n }\n switch (this.tagIDs[i]) {\n case tagName: {\n return true;\n }\n case $.TABLE:\n case $.HTML: {\n return false;\n }\n }\n }\n return true;\n }\n hasTableBodyContextInTableScope() {\n for (let i = this.stackTop; i >= 0; i--) {\n if (this.treeAdapter.getNamespaceURI(this.items[i]) !== NS.HTML) {\n continue;\n }\n switch (this.tagIDs[i]) {\n case $.TBODY:\n case $.THEAD:\n case $.TFOOT: {\n return true;\n }\n case $.TABLE:\n case $.HTML: {\n return false;\n }\n }\n }\n return true;\n }\n hasInSelectScope(tagName) {\n for (let i = this.stackTop; i >= 0; i--) {\n if (this.treeAdapter.getNamespaceURI(this.items[i]) !== NS.HTML) {\n continue;\n }\n switch (this.tagIDs[i]) {\n case tagName: {\n return true;\n }\n case $.OPTION:\n case $.OPTGROUP: {\n break;\n }\n default: {\n return false;\n }\n }\n }\n return true;\n }\n //Implied end tags\n generateImpliedEndTags() {\n while (this.currentTagId !== undefined && IMPLICIT_END_TAG_REQUIRED.has(this.currentTagId)) {\n this.pop();\n }\n }\n generateImpliedEndTagsThoroughly() {\n while (this.currentTagId !== undefined && IMPLICIT_END_TAG_REQUIRED_THOROUGHLY.has(this.currentTagId)) {\n this.pop();\n }\n }\n generateImpliedEndTagsWithExclusion(exclusionId) {\n while (this.currentTagId !== undefined &&\n this.currentTagId !== exclusionId &&\n IMPLICIT_END_TAG_REQUIRED_THOROUGHLY.has(this.currentTagId)) {\n this.pop();\n }\n }\n}\n","//Const\nconst NOAH_ARK_CAPACITY = 3;\nexport var EntryType;\n(function (EntryType) {\n EntryType[EntryType[\"Marker\"] = 0] = \"Marker\";\n EntryType[EntryType[\"Element\"] = 1] = \"Element\";\n})(EntryType || (EntryType = {}));\nconst MARKER = { type: EntryType.Marker };\n//List of formatting elements\nexport class FormattingElementList {\n constructor(treeAdapter) {\n this.treeAdapter = treeAdapter;\n this.entries = [];\n this.bookmark = null;\n }\n //Noah Ark's condition\n //OPTIMIZATION: at first we try to find possible candidates for exclusion using\n //lightweight heuristics without thorough attributes check.\n _getNoahArkConditionCandidates(newElement, neAttrs) {\n const candidates = [];\n const neAttrsLength = neAttrs.length;\n const neTagName = this.treeAdapter.getTagName(newElement);\n const neNamespaceURI = this.treeAdapter.getNamespaceURI(newElement);\n for (let i = 0; i < this.entries.length; i++) {\n const entry = this.entries[i];\n if (entry.type === EntryType.Marker) {\n break;\n }\n const { element } = entry;\n if (this.treeAdapter.getTagName(element) === neTagName &&\n this.treeAdapter.getNamespaceURI(element) === neNamespaceURI) {\n const elementAttrs = this.treeAdapter.getAttrList(element);\n if (elementAttrs.length === neAttrsLength) {\n candidates.push({ idx: i, attrs: elementAttrs });\n }\n }\n }\n return candidates;\n }\n _ensureNoahArkCondition(newElement) {\n if (this.entries.length < NOAH_ARK_CAPACITY)\n return;\n const neAttrs = this.treeAdapter.getAttrList(newElement);\n const candidates = this._getNoahArkConditionCandidates(newElement, neAttrs);\n if (candidates.length < NOAH_ARK_CAPACITY)\n return;\n //NOTE: build attrs map for the new element, so we can perform fast lookups\n const neAttrsMap = new Map(neAttrs.map((neAttr) => [neAttr.name, neAttr.value]));\n let validCandidates = 0;\n //NOTE: remove bottommost candidates, until Noah's Ark condition will not be met\n for (let i = 0; i < candidates.length; i++) {\n const candidate = candidates[i];\n // We know that `candidate.attrs.length === neAttrs.length`\n if (candidate.attrs.every((cAttr) => neAttrsMap.get(cAttr.name) === cAttr.value)) {\n validCandidates += 1;\n if (validCandidates >= NOAH_ARK_CAPACITY) {\n this.entries.splice(candidate.idx, 1);\n }\n }\n }\n }\n //Mutations\n insertMarker() {\n this.entries.unshift(MARKER);\n }\n pushElement(element, token) {\n this._ensureNoahArkCondition(element);\n this.entries.unshift({\n type: EntryType.Element,\n element,\n token,\n });\n }\n insertElementAfterBookmark(element, token) {\n const bookmarkIdx = this.entries.indexOf(this.bookmark);\n this.entries.splice(bookmarkIdx, 0, {\n type: EntryType.Element,\n element,\n token,\n });\n }\n removeEntry(entry) {\n const entryIndex = this.entries.indexOf(entry);\n if (entryIndex !== -1) {\n this.entries.splice(entryIndex, 1);\n }\n }\n /**\n * Clears the list of formatting elements up to the last marker.\n *\n * @see https://html.spec.whatwg.org/multipage/parsing.html#clear-the-list-of-active-formatting-elements-up-to-the-last-marker\n */\n clearToLastMarker() {\n const markerIdx = this.entries.indexOf(MARKER);\n if (markerIdx === -1) {\n this.entries.length = 0;\n }\n else {\n this.entries.splice(0, markerIdx + 1);\n }\n }\n //Search\n getElementEntryInScopeWithTagName(tagName) {\n const entry = this.entries.find((entry) => entry.type === EntryType.Marker || this.treeAdapter.getTagName(entry.element) === tagName);\n return entry && entry.type === EntryType.Element ? entry : null;\n }\n getElementEntry(element) {\n return this.entries.find((entry) => entry.type === EntryType.Element && entry.element === element);\n }\n}\n","import { DOCUMENT_MODE } from '../common/html.js';\nexport const defaultTreeAdapter = {\n //Node construction\n createDocument() {\n return {\n nodeName: '#document',\n mode: DOCUMENT_MODE.NO_QUIRKS,\n childNodes: [],\n };\n },\n createDocumentFragment() {\n return {\n nodeName: '#document-fragment',\n childNodes: [],\n };\n },\n createElement(tagName, namespaceURI, attrs) {\n return {\n nodeName: tagName,\n tagName,\n attrs,\n namespaceURI,\n childNodes: [],\n parentNode: null,\n };\n },\n createCommentNode(data) {\n return {\n nodeName: '#comment',\n data,\n parentNode: null,\n };\n },\n createTextNode(value) {\n return {\n nodeName: '#text',\n value,\n parentNode: null,\n };\n },\n //Tree mutation\n appendChild(parentNode, newNode) {\n parentNode.childNodes.push(newNode);\n newNode.parentNode = parentNode;\n },\n insertBefore(parentNode, newNode, referenceNode) {\n const insertionIdx = parentNode.childNodes.indexOf(referenceNode);\n parentNode.childNodes.splice(insertionIdx, 0, newNode);\n newNode.parentNode = parentNode;\n },\n setTemplateContent(templateElement, contentElement) {\n templateElement.content = contentElement;\n },\n getTemplateContent(templateElement) {\n return templateElement.content;\n },\n setDocumentType(document, name, publicId, systemId) {\n const doctypeNode = document.childNodes.find((node) => node.nodeName === '#documentType');\n if (doctypeNode) {\n doctypeNode.name = name;\n doctypeNode.publicId = publicId;\n doctypeNode.systemId = systemId;\n }\n else {\n const node = {\n nodeName: '#documentType',\n name,\n publicId,\n systemId,\n parentNode: null,\n };\n defaultTreeAdapter.appendChild(document, node);\n }\n },\n setDocumentMode(document, mode) {\n document.mode = mode;\n },\n getDocumentMode(document) {\n return document.mode;\n },\n detachNode(node) {\n if (node.parentNode) {\n const idx = node.parentNode.childNodes.indexOf(node);\n node.parentNode.childNodes.splice(idx, 1);\n node.parentNode = null;\n }\n },\n insertText(parentNode, text) {\n if (parentNode.childNodes.length > 0) {\n const prevNode = parentNode.childNodes[parentNode.childNodes.length - 1];\n if (defaultTreeAdapter.isTextNode(prevNode)) {\n prevNode.value += text;\n return;\n }\n }\n defaultTreeAdapter.appendChild(parentNode, defaultTreeAdapter.createTextNode(text));\n },\n insertTextBefore(parentNode, text, referenceNode) {\n const prevNode = parentNode.childNodes[parentNode.childNodes.indexOf(referenceNode) - 1];\n if (prevNode && defaultTreeAdapter.isTextNode(prevNode)) {\n prevNode.value += text;\n }\n else {\n defaultTreeAdapter.insertBefore(parentNode, defaultTreeAdapter.createTextNode(text), referenceNode);\n }\n },\n adoptAttributes(recipient, attrs) {\n const recipientAttrsMap = new Set(recipient.attrs.map((attr) => attr.name));\n for (let j = 0; j < attrs.length; j++) {\n if (!recipientAttrsMap.has(attrs[j].name)) {\n recipient.attrs.push(attrs[j]);\n }\n }\n },\n //Tree traversing\n getFirstChild(node) {\n return node.childNodes[0];\n },\n getChildNodes(node) {\n return node.childNodes;\n },\n getParentNode(node) {\n return node.parentNode;\n },\n getAttrList(element) {\n return element.attrs;\n },\n //Node data\n getTagName(element) {\n return element.tagName;\n },\n getNamespaceURI(element) {\n return element.namespaceURI;\n },\n getTextNodeContent(textNode) {\n return textNode.value;\n },\n getCommentNodeContent(commentNode) {\n return commentNode.data;\n },\n getDocumentTypeNodeName(doctypeNode) {\n return doctypeNode.name;\n },\n getDocumentTypeNodePublicId(doctypeNode) {\n return doctypeNode.publicId;\n },\n getDocumentTypeNodeSystemId(doctypeNode) {\n return doctypeNode.systemId;\n },\n //Node types\n isTextNode(node) {\n return node.nodeName === '#text';\n },\n isCommentNode(node) {\n return node.nodeName === '#comment';\n },\n isDocumentTypeNode(node) {\n return node.nodeName === '#documentType';\n },\n isElementNode(node) {\n return Object.prototype.hasOwnProperty.call(node, 'tagName');\n },\n // Source code location\n setNodeSourceCodeLocation(node, location) {\n node.sourceCodeLocation = location;\n },\n getNodeSourceCodeLocation(node) {\n return node.sourceCodeLocation;\n },\n updateNodeSourceCodeLocation(node, endLocation) {\n node.sourceCodeLocation = { ...node.sourceCodeLocation, ...endLocation };\n },\n};\n","import { DOCUMENT_MODE } from './html.js';\n//Const\nconst VALID_DOCTYPE_NAME = 'html';\nconst VALID_SYSTEM_ID = 'about:legacy-compat';\nconst QUIRKS_MODE_SYSTEM_ID = 'http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd';\nconst QUIRKS_MODE_PUBLIC_ID_PREFIXES = [\n '+//silmaril//dtd html pro v0r11 19970101//',\n '-//as//dtd html 3.0 aswedit + extensions//',\n '-//advasoft ltd//dtd html 3.0 aswedit + extensions//',\n '-//ietf//dtd html 2.0 level 1//',\n '-//ietf//dtd html 2.0 level 2//',\n '-//ietf//dtd html 2.0 strict level 1//',\n '-//ietf//dtd html 2.0 strict level 2//',\n '-//ietf//dtd html 2.0 strict//',\n '-//ietf//dtd html 2.0//',\n '-//ietf//dtd html 2.1e//',\n '-//ietf//dtd html 3.0//',\n '-//ietf//dtd html 3.2 final//',\n '-//ietf//dtd html 3.2//',\n '-//ietf//dtd html 3//',\n '-//ietf//dtd html level 0//',\n '-//ietf//dtd html level 1//',\n '-//ietf//dtd html level 2//',\n '-//ietf//dtd html level 3//',\n '-//ietf//dtd html strict level 0//',\n '-//ietf//dtd html strict level 1//',\n '-//ietf//dtd html strict level 2//',\n '-//ietf//dtd html strict level 3//',\n '-//ietf//dtd html strict//',\n '-//ietf//dtd html//',\n '-//metrius//dtd metrius presentational//',\n '-//microsoft//dtd internet explorer 2.0 html strict//',\n '-//microsoft//dtd internet explorer 2.0 html//',\n '-//microsoft//dtd internet explorer 2.0 tables//',\n '-//microsoft//dtd internet explorer 3.0 html strict//',\n '-//microsoft//dtd internet explorer 3.0 html//',\n '-//microsoft//dtd internet explorer 3.0 tables//',\n '-//netscape comm. corp.//dtd html//',\n '-//netscape comm. corp.//dtd strict html//',\n \"-//o'reilly and associates//dtd html 2.0//\",\n \"-//o'reilly and associates//dtd html extended 1.0//\",\n \"-//o'reilly and associates//dtd html extended relaxed 1.0//\",\n '-//sq//dtd html 2.0 hotmetal + extensions//',\n '-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//',\n '-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//',\n '-//spyglass//dtd html 2.0 extended//',\n '-//sun microsystems corp.//dtd hotjava html//',\n '-//sun microsystems corp.//dtd hotjava strict html//',\n '-//w3c//dtd html 3 1995-03-24//',\n '-//w3c//dtd html 3.2 draft//',\n '-//w3c//dtd html 3.2 final//',\n '-//w3c//dtd html 3.2//',\n '-//w3c//dtd html 3.2s draft//',\n '-//w3c//dtd html 4.0 frameset//',\n '-//w3c//dtd html 4.0 transitional//',\n '-//w3c//dtd html experimental 19960712//',\n '-//w3c//dtd html experimental 970421//',\n '-//w3c//dtd w3 html//',\n '-//w3o//dtd w3 html 3.0//',\n '-//webtechs//dtd mozilla html 2.0//',\n '-//webtechs//dtd mozilla html//',\n];\nconst QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES = [\n ...QUIRKS_MODE_PUBLIC_ID_PREFIXES,\n '-//w3c//dtd html 4.01 frameset//',\n '-//w3c//dtd html 4.01 transitional//',\n];\nconst QUIRKS_MODE_PUBLIC_IDS = new Set([\n '-//w3o//dtd w3 html strict 3.0//en//',\n '-/w3c/dtd html 4.0 transitional/en',\n 'html',\n]);\nconst LIMITED_QUIRKS_PUBLIC_ID_PREFIXES = ['-//w3c//dtd xhtml 1.0 frameset//', '-//w3c//dtd xhtml 1.0 transitional//'];\nconst LIMITED_QUIRKS_WITH_SYSTEM_ID_PUBLIC_ID_PREFIXES = [\n ...LIMITED_QUIRKS_PUBLIC_ID_PREFIXES,\n '-//w3c//dtd html 4.01 frameset//',\n '-//w3c//dtd html 4.01 transitional//',\n];\n//Utils\nfunction hasPrefix(publicId, prefixes) {\n return prefixes.some((prefix) => publicId.startsWith(prefix));\n}\n//API\nexport function isConforming(token) {\n return (token.name === VALID_DOCTYPE_NAME &&\n token.publicId === null &&\n (token.systemId === null || token.systemId === VALID_SYSTEM_ID));\n}\nexport function getDocumentMode(token) {\n if (token.name !== VALID_DOCTYPE_NAME) {\n return DOCUMENT_MODE.QUIRKS;\n }\n const { systemId } = token;\n if (systemId && systemId.toLowerCase() === QUIRKS_MODE_SYSTEM_ID) {\n return DOCUMENT_MODE.QUIRKS;\n }\n let { publicId } = token;\n if (publicId !== null) {\n publicId = publicId.toLowerCase();\n if (QUIRKS_MODE_PUBLIC_IDS.has(publicId)) {\n return DOCUMENT_MODE.QUIRKS;\n }\n let prefixes = systemId === null ? QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES : QUIRKS_MODE_PUBLIC_ID_PREFIXES;\n if (hasPrefix(publicId, prefixes)) {\n return DOCUMENT_MODE.QUIRKS;\n }\n prefixes =\n systemId === null ? LIMITED_QUIRKS_PUBLIC_ID_PREFIXES : LIMITED_QUIRKS_WITH_SYSTEM_ID_PUBLIC_ID_PREFIXES;\n if (hasPrefix(publicId, prefixes)) {\n return DOCUMENT_MODE.LIMITED_QUIRKS;\n }\n }\n return DOCUMENT_MODE.NO_QUIRKS;\n}\n","import { TAG_ID as $, NS, ATTRS, getTagID } from './html.js';\n//MIME types\nconst MIME_TYPES = {\n TEXT_HTML: 'text/html',\n APPLICATION_XML: 'application/xhtml+xml',\n};\n//Attributes\nconst DEFINITION_URL_ATTR = 'definitionurl';\nconst ADJUSTED_DEFINITION_URL_ATTR = 'definitionURL';\nconst SVG_ATTRS_ADJUSTMENT_MAP = new Map([\n 'attributeName',\n 'attributeType',\n 'baseFrequency',\n 'baseProfile',\n 'calcMode',\n 'clipPathUnits',\n 'diffuseConstant',\n 'edgeMode',\n 'filterUnits',\n 'glyphRef',\n 'gradientTransform',\n 'gradientUnits',\n 'kernelMatrix',\n 'kernelUnitLength',\n 'keyPoints',\n 'keySplines',\n 'keyTimes',\n 'lengthAdjust',\n 'limitingConeAngle',\n 'markerHeight',\n 'markerUnits',\n 'markerWidth',\n 'maskContentUnits',\n 'maskUnits',\n 'numOctaves',\n 'pathLength',\n 'patternContentUnits',\n 'patternTransform',\n 'patternUnits',\n 'pointsAtX',\n 'pointsAtY',\n 'pointsAtZ',\n 'preserveAlpha',\n 'preserveAspectRatio',\n 'primitiveUnits',\n 'refX',\n 'refY',\n 'repeatCount',\n 'repeatDur',\n 'requiredExtensions',\n 'requiredFeatures',\n 'specularConstant',\n 'specularExponent',\n 'spreadMethod',\n 'startOffset',\n 'stdDeviation',\n 'stitchTiles',\n 'surfaceScale',\n 'systemLanguage',\n 'tableValues',\n 'targetX',\n 'targetY',\n 'textLength',\n 'viewBox',\n 'viewTarget',\n 'xChannelSelector',\n 'yChannelSelector',\n 'zoomAndPan',\n].map((attr) => [attr.toLowerCase(), attr]));\nconst XML_ATTRS_ADJUSTMENT_MAP = new Map([\n ['xlink:actuate', { prefix: 'xlink', name: 'actuate', namespace: NS.XLINK }],\n ['xlink:arcrole', { prefix: 'xlink', name: 'arcrole', namespace: NS.XLINK }],\n ['xlink:href', { prefix: 'xlink', name: 'href', namespace: NS.XLINK }],\n ['xlink:role', { prefix: 'xlink', name: 'role', namespace: NS.XLINK }],\n ['xlink:show', { prefix: 'xlink', name: 'show', namespace: NS.XLINK }],\n ['xlink:title', { prefix: 'xlink', name: 'title', namespace: NS.XLINK }],\n ['xlink:type', { prefix: 'xlink', name: 'type', namespace: NS.XLINK }],\n ['xml:lang', { prefix: 'xml', name: 'lang', namespace: NS.XML }],\n ['xml:space', { prefix: 'xml', name: 'space', namespace: NS.XML }],\n ['xmlns', { prefix: '', name: 'xmlns', namespace: NS.XMLNS }],\n ['xmlns:xlink', { prefix: 'xmlns', name: 'xlink', namespace: NS.XMLNS }],\n]);\n//SVG tag names adjustment map\nexport const SVG_TAG_NAMES_ADJUSTMENT_MAP = new Map([\n 'altGlyph',\n 'altGlyphDef',\n 'altGlyphItem',\n 'animateColor',\n 'animateMotion',\n 'animateTransform',\n 'clipPath',\n 'feBlend',\n 'feColorMatrix',\n 'feComponentTransfer',\n 'feComposite',\n 'feConvolveMatrix',\n 'feDiffuseLighting',\n 'feDisplacementMap',\n 'feDistantLight',\n 'feFlood',\n 'feFuncA',\n 'feFuncB',\n 'feFuncG',\n 'feFuncR',\n 'feGaussianBlur',\n 'feImage',\n 'feMerge',\n 'feMergeNode',\n 'feMorphology',\n 'feOffset',\n 'fePointLight',\n 'feSpecularLighting',\n 'feSpotLight',\n 'feTile',\n 'feTurbulence',\n 'foreignObject',\n 'glyphRef',\n 'linearGradient',\n 'radialGradient',\n 'textPath',\n].map((tn) => [tn.toLowerCase(), tn]));\n//Tags that causes exit from foreign content\nconst EXITS_FOREIGN_CONTENT = new Set([\n $.B,\n $.BIG,\n $.BLOCKQUOTE,\n $.BODY,\n $.BR,\n $.CENTER,\n $.CODE,\n $.DD,\n $.DIV,\n $.DL,\n $.DT,\n $.EM,\n $.EMBED,\n $.H1,\n $.H2,\n $.H3,\n $.H4,\n $.H5,\n $.H6,\n $.HEAD,\n $.HR,\n $.I,\n $.IMG,\n $.LI,\n $.LISTING,\n $.MENU,\n $.META,\n $.NOBR,\n $.OL,\n $.P,\n $.PRE,\n $.RUBY,\n $.S,\n $.SMALL,\n $.SPAN,\n $.STRONG,\n $.STRIKE,\n $.SUB,\n $.SUP,\n $.TABLE,\n $.TT,\n $.U,\n $.UL,\n $.VAR,\n]);\n//Check exit from foreign content\nexport function causesExit(startTagToken) {\n const tn = startTagToken.tagID;\n const isFontWithAttrs = tn === $.FONT &&\n startTagToken.attrs.some(({ name }) => name === ATTRS.COLOR || name === ATTRS.SIZE || name === ATTRS.FACE);\n return isFontWithAttrs || EXITS_FOREIGN_CONTENT.has(tn);\n}\n//Token adjustments\nexport function adjustTokenMathMLAttrs(token) {\n for (let i = 0; i < token.attrs.length; i++) {\n if (token.attrs[i].name === DEFINITION_URL_ATTR) {\n token.attrs[i].name = ADJUSTED_DEFINITION_URL_ATTR;\n break;\n }\n }\n}\nexport function adjustTokenSVGAttrs(token) {\n for (let i = 0; i < token.attrs.length; i++) {\n const adjustedAttrName = SVG_ATTRS_ADJUSTMENT_MAP.get(token.attrs[i].name);\n if (adjustedAttrName != null) {\n token.attrs[i].name = adjustedAttrName;\n }\n }\n}\nexport function adjustTokenXMLAttrs(token) {\n for (let i = 0; i < token.attrs.length; i++) {\n const adjustedAttrEntry = XML_ATTRS_ADJUSTMENT_MAP.get(token.attrs[i].name);\n if (adjustedAttrEntry) {\n token.attrs[i].prefix = adjustedAttrEntry.prefix;\n token.attrs[i].name = adjustedAttrEntry.name;\n token.attrs[i].namespace = adjustedAttrEntry.namespace;\n }\n }\n}\nexport function adjustTokenSVGTagName(token) {\n const adjustedTagName = SVG_TAG_NAMES_ADJUSTMENT_MAP.get(token.tagName);\n if (adjustedTagName != null) {\n token.tagName = adjustedTagName;\n token.tagID = getTagID(token.tagName);\n }\n}\n//Integration points\nfunction isMathMLTextIntegrationPoint(tn, ns) {\n return ns === NS.MATHML && (tn === $.MI || tn === $.MO || tn === $.MN || tn === $.MS || tn === $.MTEXT);\n}\nfunction isHtmlIntegrationPoint(tn, ns, attrs) {\n if (ns === NS.MATHML && tn === $.ANNOTATION_XML) {\n for (let i = 0; i < attrs.length; i++) {\n if (attrs[i].name === ATTRS.ENCODING) {\n const value = attrs[i].value.toLowerCase();\n return value === MIME_TYPES.TEXT_HTML || value === MIME_TYPES.APPLICATION_XML;\n }\n }\n }\n return ns === NS.SVG && (tn === $.FOREIGN_OBJECT || tn === $.DESC || tn === $.TITLE);\n}\nexport function isIntegrationPoint(tn, ns, attrs, foreignNS) {\n return (((!foreignNS || foreignNS === NS.HTML) && isHtmlIntegrationPoint(tn, ns, attrs)) ||\n ((!foreignNS || foreignNS === NS.MATHML) && isMathMLTextIntegrationPoint(tn, ns)));\n}\n","import { Tokenizer, TokenizerMode } from '../tokenizer/index.js';\nimport { OpenElementStack } from './open-element-stack.js';\nimport { FormattingElementList, EntryType } from './formatting-element-list.js';\nimport { defaultTreeAdapter } from '../tree-adapters/default.js';\nimport * as doctype from '../common/doctype.js';\nimport * as foreignContent from '../common/foreign-content.js';\nimport { ERR } from '../common/error-codes.js';\nimport * as unicode from '../common/unicode.js';\nimport { TAG_ID as $, TAG_NAMES as TN, NS, ATTRS, SPECIAL_ELEMENTS, DOCUMENT_MODE, NUMBERED_HEADERS, getTagID, } from '../common/html.js';\nimport { TokenType, getTokenAttr, } from '../common/token.js';\n//Misc constants\nconst HIDDEN_INPUT_TYPE = 'hidden';\n//Adoption agency loops iteration count\nconst AA_OUTER_LOOP_ITER = 8;\nconst AA_INNER_LOOP_ITER = 3;\n//Insertion modes\nvar InsertionMode;\n(function (InsertionMode) {\n InsertionMode[InsertionMode[\"INITIAL\"] = 0] = \"INITIAL\";\n InsertionMode[InsertionMode[\"BEFORE_HTML\"] = 1] = \"BEFORE_HTML\";\n InsertionMode[InsertionMode[\"BEFORE_HEAD\"] = 2] = \"BEFORE_HEAD\";\n InsertionMode[InsertionMode[\"IN_HEAD\"] = 3] = \"IN_HEAD\";\n InsertionMode[InsertionMode[\"IN_HEAD_NO_SCRIPT\"] = 4] = \"IN_HEAD_NO_SCRIPT\";\n InsertionMode[InsertionMode[\"AFTER_HEAD\"] = 5] = \"AFTER_HEAD\";\n InsertionMode[InsertionMode[\"IN_BODY\"] = 6] = \"IN_BODY\";\n InsertionMode[InsertionMode[\"TEXT\"] = 7] = \"TEXT\";\n InsertionMode[InsertionMode[\"IN_TABLE\"] = 8] = \"IN_TABLE\";\n InsertionMode[InsertionMode[\"IN_TABLE_TEXT\"] = 9] = \"IN_TABLE_TEXT\";\n InsertionMode[InsertionMode[\"IN_CAPTION\"] = 10] = \"IN_CAPTION\";\n InsertionMode[InsertionMode[\"IN_COLUMN_GROUP\"] = 11] = \"IN_COLUMN_GROUP\";\n InsertionMode[InsertionMode[\"IN_TABLE_BODY\"] = 12] = \"IN_TABLE_BODY\";\n InsertionMode[InsertionMode[\"IN_ROW\"] = 13] = \"IN_ROW\";\n InsertionMode[InsertionMode[\"IN_CELL\"] = 14] = \"IN_CELL\";\n InsertionMode[InsertionMode[\"IN_SELECT\"] = 15] = \"IN_SELECT\";\n InsertionMode[InsertionMode[\"IN_SELECT_IN_TABLE\"] = 16] = \"IN_SELECT_IN_TABLE\";\n InsertionMode[InsertionMode[\"IN_TEMPLATE\"] = 17] = \"IN_TEMPLATE\";\n InsertionMode[InsertionMode[\"AFTER_BODY\"] = 18] = \"AFTER_BODY\";\n InsertionMode[InsertionMode[\"IN_FRAMESET\"] = 19] = \"IN_FRAMESET\";\n InsertionMode[InsertionMode[\"AFTER_FRAMESET\"] = 20] = \"AFTER_FRAMESET\";\n InsertionMode[InsertionMode[\"AFTER_AFTER_BODY\"] = 21] = \"AFTER_AFTER_BODY\";\n InsertionMode[InsertionMode[\"AFTER_AFTER_FRAMESET\"] = 22] = \"AFTER_AFTER_FRAMESET\";\n})(InsertionMode || (InsertionMode = {}));\nconst BASE_LOC = {\n startLine: -1,\n startCol: -1,\n startOffset: -1,\n endLine: -1,\n endCol: -1,\n endOffset: -1,\n};\nconst TABLE_STRUCTURE_TAGS = new Set([$.TABLE, $.TBODY, $.TFOOT, $.THEAD, $.TR]);\nconst defaultParserOptions = {\n scriptingEnabled: true,\n sourceCodeLocationInfo: false,\n treeAdapter: defaultTreeAdapter,\n onParseError: null,\n};\n//Parser\nexport class Parser {\n constructor(options, document, \n /** @internal */\n fragmentContext = null, \n /** @internal */\n scriptHandler = null) {\n this.fragmentContext = fragmentContext;\n this.scriptHandler = scriptHandler;\n this.currentToken = null;\n this.stopped = false;\n /** @internal */\n this.insertionMode = InsertionMode.INITIAL;\n /** @internal */\n this.originalInsertionMode = InsertionMode.INITIAL;\n /** @internal */\n this.headElement = null;\n /** @internal */\n this.formElement = null;\n /** Indicates that the current node is not an element in the HTML namespace */\n this.currentNotInHTML = false;\n /**\n * The template insertion mode stack is maintained from the left.\n * Ie. the topmost element will always have index 0.\n *\n * @internal\n */\n this.tmplInsertionModeStack = [];\n /** @internal */\n this.pendingCharacterTokens = [];\n /** @internal */\n this.hasNonWhitespacePendingCharacterToken = false;\n /** @internal */\n this.framesetOk = true;\n /** @internal */\n this.skipNextNewLine = false;\n /** @internal */\n this.fosterParentingEnabled = false;\n this.options = {\n ...defaultParserOptions,\n ...options,\n };\n this.treeAdapter = this.options.treeAdapter;\n this.onParseError = this.options.onParseError;\n // Always enable location info if we report parse errors.\n if (this.onParseError) {\n this.options.sourceCodeLocationInfo = true;\n }\n this.document = document !== null && document !== void 0 ? document : this.treeAdapter.createDocument();\n this.tokenizer = new Tokenizer(this.options, this);\n this.activeFormattingElements = new FormattingElementList(this.treeAdapter);\n this.fragmentContextID = fragmentContext ? getTagID(this.treeAdapter.getTagName(fragmentContext)) : $.UNKNOWN;\n this._setContextModes(fragmentContext !== null && fragmentContext !== void 0 ? fragmentContext : this.document, this.fragmentContextID);\n this.openElements = new OpenElementStack(this.document, this.treeAdapter, this);\n }\n // API\n static parse(html, options) {\n const parser = new this(options);\n parser.tokenizer.write(html, true);\n return parser.document;\n }\n static getFragmentParser(fragmentContext, options) {\n const opts = {\n ...defaultParserOptions,\n ...options,\n };\n //NOTE: use a <template> element as the fragment context if no context element was provided,\n //so we will parse in a \"forgiving\" manner\n fragmentContext !== null && fragmentContext !== void 0 ? fragmentContext : (fragmentContext = opts.treeAdapter.createElement(TN.TEMPLATE, NS.HTML, []));\n //NOTE: create a fake element which will be used as the `document` for fragment parsing.\n //This is important for jsdom, where a new `document` cannot be created. This led to\n //fragment parsing messing with the main `document`.\n const documentMock = opts.treeAdapter.createElement('documentmock', NS.HTML, []);\n const parser = new this(opts, documentMock, fragmentContext);\n if (parser.fragmentContextID === $.TEMPLATE) {\n parser.tmplInsertionModeStack.unshift(InsertionMode.IN_TEMPLATE);\n }\n parser._initTokenizerForFragmentParsing();\n parser._insertFakeRootElement();\n parser._resetInsertionMode();\n parser._findFormInFragmentContext();\n return parser;\n }\n getFragment() {\n const rootElement = this.treeAdapter.getFirstChild(this.document);\n const fragment = this.treeAdapter.createDocumentFragment();\n this._adoptNodes(rootElement, fragment);\n return fragment;\n }\n //Errors\n /** @internal */\n _err(token, code, beforeToken) {\n var _a;\n if (!this.onParseError)\n return;\n const loc = (_a = token.location) !== null && _a !== void 0 ? _a : BASE_LOC;\n const err = {\n code,\n startLine: loc.startLine,\n startCol: loc.startCol,\n startOffset: loc.startOffset,\n endLine: beforeToken ? loc.startLine : loc.endLine,\n endCol: beforeToken ? loc.startCol : loc.endCol,\n endOffset: beforeToken ? loc.startOffset : loc.endOffset,\n };\n this.onParseError(err);\n }\n //Stack events\n /** @internal */\n onItemPush(node, tid, isTop) {\n var _a, _b;\n (_b = (_a = this.treeAdapter).onItemPush) === null || _b === void 0 ? void 0 : _b.call(_a, node);\n if (isTop && this.openElements.stackTop > 0)\n this._setContextModes(node, tid);\n }\n /** @internal */\n onItemPop(node, isTop) {\n var _a, _b;\n if (this.options.sourceCodeLocationInfo) {\n this._setEndLocation(node, this.currentToken);\n }\n (_b = (_a = this.treeAdapter).onItemPop) === null || _b === void 0 ? void 0 : _b.call(_a, node, this.openElements.current);\n if (isTop) {\n let current;\n let currentTagId;\n if (this.openElements.stackTop === 0 && this.fragmentContext) {\n current = this.fragmentContext;\n currentTagId = this.fragmentContextID;\n }\n else {\n ({ current, currentTagId } = this.openElements);\n }\n this._setContextModes(current, currentTagId);\n }\n }\n _setContextModes(current, tid) {\n const isHTML = current === this.document || (current && this.treeAdapter.getNamespaceURI(current) === NS.HTML);\n this.currentNotInHTML = !isHTML;\n this.tokenizer.inForeignNode =\n !isHTML && current !== undefined && tid !== undefined && !this._isIntegrationPoint(tid, current);\n }\n /** @protected */\n _switchToTextParsing(currentToken, nextTokenizerState) {\n this._insertElement(currentToken, NS.HTML);\n this.tokenizer.state = nextTokenizerState;\n this.originalInsertionMode = this.insertionMode;\n this.insertionMode = InsertionMode.TEXT;\n }\n switchToPlaintextParsing() {\n this.insertionMode = InsertionMode.TEXT;\n this.originalInsertionMode = InsertionMode.IN_BODY;\n this.tokenizer.state = TokenizerMode.PLAINTEXT;\n }\n //Fragment parsing\n /** @protected */\n _getAdjustedCurrentElement() {\n return this.openElements.stackTop === 0 && this.fragmentContext\n ? this.fragmentContext\n : this.openElements.current;\n }\n /** @protected */\n _findFormInFragmentContext() {\n let node = this.fragmentContext;\n while (node) {\n if (this.treeAdapter.getTagName(node) === TN.FORM) {\n this.formElement = node;\n break;\n }\n node = this.treeAdapter.getParentNode(node);\n }\n }\n _initTokenizerForFragmentParsing() {\n if (!this.fragmentContext || this.treeAdapter.getNamespaceURI(this.fragmentContext) !== NS.HTML) {\n return;\n }\n switch (this.fragmentContextID) {\n case $.TITLE:\n case $.TEXTAREA: {\n this.tokenizer.state = TokenizerMode.RCDATA;\n break;\n }\n case $.STYLE:\n case $.XMP:\n case $.IFRAME:\n case $.NOEMBED:\n case $.NOFRAMES:\n case $.NOSCRIPT: {\n this.tokenizer.state = TokenizerMode.RAWTEXT;\n break;\n }\n case $.SCRIPT: {\n this.tokenizer.state = TokenizerMode.SCRIPT_DATA;\n break;\n }\n case $.PLAINTEXT: {\n this.tokenizer.state = TokenizerMode.PLAINTEXT;\n break;\n }\n default:\n // Do nothing\n }\n }\n //Tree mutation\n /** @protected */\n _setDocumentType(token) {\n const name = token.name || '';\n const publicId = token.publicId || '';\n const systemId = token.systemId || '';\n this.treeAdapter.setDocumentType(this.document, name, publicId, systemId);\n if (token.location) {\n const documentChildren = this.treeAdapter.getChildNodes(this.document);\n const docTypeNode = documentChildren.find((node) => this.treeAdapter.isDocumentTypeNode(node));\n if (docTypeNode) {\n this.treeAdapter.setNodeSourceCodeLocation(docTypeNode, token.location);\n }\n }\n }\n /** @protected */\n _attachElementToTree(element, location) {\n if (this.options.sourceCodeLocationInfo) {\n const loc = location && {\n ...location,\n startTag: location,\n };\n this.treeAdapter.setNodeSourceCodeLocation(element, loc);\n }\n if (this._shouldFosterParentOnInsertion()) {\n this._fosterParentElement(element);\n }\n else {\n const parent = this.openElements.currentTmplContentOrNode;\n this.treeAdapter.appendChild(parent !== null && parent !== void 0 ? parent : this.document, element);\n }\n }\n /**\n * For self-closing tags. Add an element to the tree, but skip adding it\n * to the stack.\n */\n /** @protected */\n _appendElement(token, namespaceURI) {\n const element = this.treeAdapter.createElement(token.tagName, namespaceURI, token.attrs);\n this._attachElementToTree(element, token.location);\n }\n /** @protected */\n _insertElement(token, namespaceURI) {\n const element = this.treeAdapter.createElement(token.tagName, namespaceURI, token.attrs);\n this._attachElementToTree(element, token.location);\n this.openElements.push(element, token.tagID);\n }\n /** @protected */\n _insertFakeElement(tagName, tagID) {\n const element = this.treeAdapter.createElement(tagName, NS.HTML, []);\n this._attachElementToTree(element, null);\n this.openElements.push(element, tagID);\n }\n /** @protected */\n _insertTemplate(token) {\n const tmpl = this.treeAdapter.createElement(token.tagName, NS.HTML, token.attrs);\n const content = this.treeAdapter.createDocumentFragment();\n this.treeAdapter.setTemplateContent(tmpl, content);\n this._attachElementToTree(tmpl, token.location);\n this.openElements.push(tmpl, token.tagID);\n if (this.options.sourceCodeLocationInfo)\n this.treeAdapter.setNodeSourceCodeLocation(content, null);\n }\n /** @protected */\n _insertFakeRootElement() {\n const element = this.treeAdapter.createElement(TN.HTML, NS.HTML, []);\n if (this.options.sourceCodeLocationInfo)\n this.treeAdapter.setNodeSourceCodeLocation(element, null);\n this.treeAdapter.appendChild(this.openElements.current, element);\n this.openElements.push(element, $.HTML);\n }\n /** @protected */\n _appendCommentNode(token, parent) {\n const commentNode = this.treeAdapter.createCommentNode(token.data);\n this.treeAdapter.appendChild(parent, commentNode);\n if (this.options.sourceCodeLocationInfo) {\n this.treeAdapter.setNodeSourceCodeLocation(commentNode, token.location);\n }\n }\n /** @protected */\n _insertCharacters(token) {\n let parent;\n let beforeElement;\n if (this._shouldFosterParentOnInsertion()) {\n ({ parent, beforeElement } = this._findFosterParentingLocation());\n if (beforeElement) {\n this.treeAdapter.insertTextBefore(parent, token.chars, beforeElement);\n }\n else {\n this.treeAdapter.insertText(parent, token.chars);\n }\n }\n else {\n parent = this.openElements.currentTmplContentOrNode;\n this.treeAdapter.insertText(parent, token.chars);\n }\n if (!token.location)\n return;\n const siblings = this.treeAdapter.getChildNodes(parent);\n const textNodeIdx = beforeElement ? siblings.lastIndexOf(beforeElement) : siblings.length;\n const textNode = siblings[textNodeIdx - 1];\n //NOTE: if we have a location assigned by another token, then just update the end position\n const tnLoc = this.treeAdapter.getNodeSourceCodeLocation(textNode);\n if (tnLoc) {\n const { endLine, endCol, endOffset } = token.location;\n this.treeAdapter.updateNodeSourceCodeLocation(textNode, { endLine, endCol, endOffset });\n }\n else if (this.options.sourceCodeLocationInfo) {\n this.treeAdapter.setNodeSourceCodeLocation(textNode, token.location);\n }\n }\n /** @protected */\n _adoptNodes(donor, recipient) {\n for (let child = this.treeAdapter.getFirstChild(donor); child; child = this.treeAdapter.getFirstChild(donor)) {\n this.treeAdapter.detachNode(child);\n this.treeAdapter.appendChild(recipient, child);\n }\n }\n /** @protected */\n _setEndLocation(element, closingToken) {\n if (this.treeAdapter.getNodeSourceCodeLocation(element) && closingToken.location) {\n const ctLoc = closingToken.location;\n const tn = this.treeAdapter.getTagName(element);\n const endLoc = \n // NOTE: For cases like <p> <p> </p> - First 'p' closes without a closing\n // tag and for cases like <td> <p> </td> - 'p' closes without a closing tag.\n closingToken.type === TokenType.END_TAG && tn === closingToken.tagName\n ? {\n endTag: { ...ctLoc },\n endLine: ctLoc.endLine,\n endCol: ctLoc.endCol,\n endOffset: ctLoc.endOffset,\n }\n : {\n endLine: ctLoc.startLine,\n endCol: ctLoc.startCol,\n endOffset: ctLoc.startOffset,\n };\n this.treeAdapter.updateNodeSourceCodeLocation(element, endLoc);\n }\n }\n //Token processing\n shouldProcessStartTagTokenInForeignContent(token) {\n // Check that neither current === document, or ns === NS.HTML\n if (!this.currentNotInHTML)\n return false;\n let current;\n let currentTagId;\n if (this.openElements.stackTop === 0 && this.fragmentContext) {\n current = this.fragmentContext;\n currentTagId = this.fragmentContextID;\n }\n else {\n ({ current, currentTagId } = this.openElements);\n }\n if (token.tagID === $.SVG &&\n this.treeAdapter.getTagName(current) === TN.ANNOTATION_XML &&\n this.treeAdapter.getNamespaceURI(current) === NS.MATHML) {\n return false;\n }\n return (\n // Check that `current` is not an integration point for HTML or MathML elements.\n this.tokenizer.inForeignNode ||\n // If it _is_ an integration point, then we might have to check that it is not an HTML\n // integration point.\n ((token.tagID === $.MGLYPH || token.tagID === $.MALIGNMARK) &&\n currentTagId !== undefined &&\n !this._isIntegrationPoint(currentTagId, current, NS.HTML)));\n }\n /** @protected */\n _processToken(token) {\n switch (token.type) {\n case TokenType.CHARACTER: {\n this.onCharacter(token);\n break;\n }\n case TokenType.NULL_CHARACTER: {\n this.onNullCharacter(token);\n break;\n }\n case TokenType.COMMENT: {\n this.onComment(token);\n break;\n }\n case TokenType.DOCTYPE: {\n this.onDoctype(token);\n break;\n }\n case TokenType.START_TAG: {\n this._processStartTag(token);\n break;\n }\n case TokenType.END_TAG: {\n this.onEndTag(token);\n break;\n }\n case TokenType.EOF: {\n this.onEof(token);\n break;\n }\n case TokenType.WHITESPACE_CHARACTER: {\n this.onWhitespaceCharacter(token);\n break;\n }\n }\n }\n //Integration points\n /** @protected */\n _isIntegrationPoint(tid, element, foreignNS) {\n const ns = this.treeAdapter.getNamespaceURI(element);\n const attrs = this.treeAdapter.getAttrList(element);\n return foreignContent.isIntegrationPoint(tid, ns, attrs, foreignNS);\n }\n //Active formatting elements reconstruction\n /** @protected */\n _reconstructActiveFormattingElements() {\n const listLength = this.activeFormattingElements.entries.length;\n if (listLength) {\n const endIndex = this.activeFormattingElements.entries.findIndex((entry) => entry.type === EntryType.Marker || this.openElements.contains(entry.element));\n const unopenIdx = endIndex === -1 ? listLength - 1 : endIndex - 1;\n for (let i = unopenIdx; i >= 0; i--) {\n const entry = this.activeFormattingElements.entries[i];\n this._insertElement(entry.token, this.treeAdapter.getNamespaceURI(entry.element));\n entry.element = this.openElements.current;\n }\n }\n }\n //Close elements\n /** @protected */\n _closeTableCell() {\n this.openElements.generateImpliedEndTags();\n this.openElements.popUntilTableCellPopped();\n this.activeFormattingElements.clearToLastMarker();\n this.insertionMode = InsertionMode.IN_ROW;\n }\n /** @protected */\n _closePElement() {\n this.openElements.generateImpliedEndTagsWithExclusion($.P);\n this.openElements.popUntilTagNamePopped($.P);\n }\n //Insertion modes\n /** @protected */\n _resetInsertionMode() {\n for (let i = this.openElements.stackTop; i >= 0; i--) {\n //Insertion mode reset map\n switch (i === 0 && this.fragmentContext ? this.fragmentContextID : this.openElements.tagIDs[i]) {\n case $.TR: {\n this.insertionMode = InsertionMode.IN_ROW;\n return;\n }\n case $.TBODY:\n case $.THEAD:\n case $.TFOOT: {\n this.insertionMode = InsertionMode.IN_TABLE_BODY;\n return;\n }\n case $.CAPTION: {\n this.insertionMode = InsertionMode.IN_CAPTION;\n return;\n }\n case $.COLGROUP: {\n this.insertionMode = InsertionMode.IN_COLUMN_GROUP;\n return;\n }\n case $.TABLE: {\n this.insertionMode = InsertionMode.IN_TABLE;\n return;\n }\n case $.BODY: {\n this.insertionMode = InsertionMode.IN_BODY;\n return;\n }\n case $.FRAMESET: {\n this.insertionMode = InsertionMode.IN_FRAMESET;\n return;\n }\n case $.SELECT: {\n this._resetInsertionModeForSelect(i);\n return;\n }\n case $.TEMPLATE: {\n this.insertionMode = this.tmplInsertionModeStack[0];\n return;\n }\n case $.HTML: {\n this.insertionMode = this.headElement ? InsertionMode.AFTER_HEAD : InsertionMode.BEFORE_HEAD;\n return;\n }\n case $.TD:\n case $.TH: {\n if (i > 0) {\n this.insertionMode = InsertionMode.IN_CELL;\n return;\n }\n break;\n }\n case $.HEAD: {\n if (i > 0) {\n this.insertionMode = InsertionMode.IN_HEAD;\n return;\n }\n break;\n }\n }\n }\n this.insertionMode = InsertionMode.IN_BODY;\n }\n /** @protected */\n _resetInsertionModeForSelect(selectIdx) {\n if (selectIdx > 0) {\n for (let i = selectIdx - 1; i > 0; i--) {\n const tn = this.openElements.tagIDs[i];\n if (tn === $.TEMPLATE) {\n break;\n }\n else if (tn === $.TABLE) {\n this.insertionMode = InsertionMode.IN_SELECT_IN_TABLE;\n return;\n }\n }\n }\n this.insertionMode = InsertionMode.IN_SELECT;\n }\n //Foster parenting\n /** @protected */\n _isElementCausesFosterParenting(tn) {\n return TABLE_STRUCTURE_TAGS.has(tn);\n }\n /** @protected */\n _shouldFosterParentOnInsertion() {\n return (this.fosterParentingEnabled &&\n this.openElements.currentTagId !== undefined &&\n this._isElementCausesFosterParenting(this.openElements.currentTagId));\n }\n /** @protected */\n _findFosterParentingLocation() {\n for (let i = this.openElements.stackTop; i >= 0; i--) {\n const openElement = this.openElements.items[i];\n switch (this.openElements.tagIDs[i]) {\n case $.TEMPLATE: {\n if (this.treeAdapter.getNamespaceURI(openElement) === NS.HTML) {\n return { parent: this.treeAdapter.getTemplateContent(openElement), beforeElement: null };\n }\n break;\n }\n case $.TABLE: {\n const parent = this.treeAdapter.getParentNode(openElement);\n if (parent) {\n return { parent, beforeElement: openElement };\n }\n return { parent: this.openElements.items[i - 1], beforeElement: null };\n }\n default:\n // Do nothing\n }\n }\n return { parent: this.openElements.items[0], beforeElement: null };\n }\n /** @protected */\n _fosterParentElement(element) {\n const location = this._findFosterParentingLocation();\n if (location.beforeElement) {\n this.treeAdapter.insertBefore(location.parent, element, location.beforeElement);\n }\n else {\n this.treeAdapter.appendChild(location.parent, element);\n }\n }\n //Special elements\n /** @protected */\n _isSpecialElement(element, id) {\n const ns = this.treeAdapter.getNamespaceURI(element);\n return SPECIAL_ELEMENTS[ns].has(id);\n }\n /** @internal */\n onCharacter(token) {\n this.skipNextNewLine = false;\n if (this.tokenizer.inForeignNode) {\n characterInForeignContent(this, token);\n return;\n }\n switch (this.insertionMode) {\n case InsertionMode.INITIAL: {\n tokenInInitialMode(this, token);\n break;\n }\n case InsertionMode.BEFORE_HTML: {\n tokenBeforeHtml(this, token);\n break;\n }\n case InsertionMode.BEFORE_HEAD: {\n tokenBeforeHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD: {\n tokenInHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD_NO_SCRIPT: {\n tokenInHeadNoScript(this, token);\n break;\n }\n case InsertionMode.AFTER_HEAD: {\n tokenAfterHead(this, token);\n break;\n }\n case InsertionMode.IN_BODY:\n case InsertionMode.IN_CAPTION:\n case InsertionMode.IN_CELL:\n case InsertionMode.IN_TEMPLATE: {\n characterInBody(this, token);\n break;\n }\n case InsertionMode.TEXT:\n case InsertionMode.IN_SELECT:\n case InsertionMode.IN_SELECT_IN_TABLE: {\n this._insertCharacters(token);\n break;\n }\n case InsertionMode.IN_TABLE:\n case InsertionMode.IN_TABLE_BODY:\n case InsertionMode.IN_ROW: {\n characterInTable(this, token);\n break;\n }\n case InsertionMode.IN_TABLE_TEXT: {\n characterInTableText(this, token);\n break;\n }\n case InsertionMode.IN_COLUMN_GROUP: {\n tokenInColumnGroup(this, token);\n break;\n }\n case InsertionMode.AFTER_BODY: {\n tokenAfterBody(this, token);\n break;\n }\n case InsertionMode.AFTER_AFTER_BODY: {\n tokenAfterAfterBody(this, token);\n break;\n }\n default:\n // Do nothing\n }\n }\n /** @internal */\n onNullCharacter(token) {\n this.skipNextNewLine = false;\n if (this.tokenizer.inForeignNode) {\n nullCharacterInForeignContent(this, token);\n return;\n }\n switch (this.insertionMode) {\n case InsertionMode.INITIAL: {\n tokenInInitialMode(this, token);\n break;\n }\n case InsertionMode.BEFORE_HTML: {\n tokenBeforeHtml(this, token);\n break;\n }\n case InsertionMode.BEFORE_HEAD: {\n tokenBeforeHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD: {\n tokenInHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD_NO_SCRIPT: {\n tokenInHeadNoScript(this, token);\n break;\n }\n case InsertionMode.AFTER_HEAD: {\n tokenAfterHead(this, token);\n break;\n }\n case InsertionMode.TEXT: {\n this._insertCharacters(token);\n break;\n }\n case InsertionMode.IN_TABLE:\n case InsertionMode.IN_TABLE_BODY:\n case InsertionMode.IN_ROW: {\n characterInTable(this, token);\n break;\n }\n case InsertionMode.IN_COLUMN_GROUP: {\n tokenInColumnGroup(this, token);\n break;\n }\n case InsertionMode.AFTER_BODY: {\n tokenAfterBody(this, token);\n break;\n }\n case InsertionMode.AFTER_AFTER_BODY: {\n tokenAfterAfterBody(this, token);\n break;\n }\n default:\n // Do nothing\n }\n }\n /** @internal */\n onComment(token) {\n this.skipNextNewLine = false;\n if (this.currentNotInHTML) {\n appendComment(this, token);\n return;\n }\n switch (this.insertionMode) {\n case InsertionMode.INITIAL:\n case InsertionMode.BEFORE_HTML:\n case InsertionMode.BEFORE_HEAD:\n case InsertionMode.IN_HEAD:\n case InsertionMode.IN_HEAD_NO_SCRIPT:\n case InsertionMode.AFTER_HEAD:\n case InsertionMode.IN_BODY:\n case InsertionMode.IN_TABLE:\n case InsertionMode.IN_CAPTION:\n case InsertionMode.IN_COLUMN_GROUP:\n case InsertionMode.IN_TABLE_BODY:\n case InsertionMode.IN_ROW:\n case InsertionMode.IN_CELL:\n case InsertionMode.IN_SELECT:\n case InsertionMode.IN_SELECT_IN_TABLE:\n case InsertionMode.IN_TEMPLATE:\n case InsertionMode.IN_FRAMESET:\n case InsertionMode.AFTER_FRAMESET: {\n appendComment(this, token);\n break;\n }\n case InsertionMode.IN_TABLE_TEXT: {\n tokenInTableText(this, token);\n break;\n }\n case InsertionMode.AFTER_BODY: {\n appendCommentToRootHtmlElement(this, token);\n break;\n }\n case InsertionMode.AFTER_AFTER_BODY:\n case InsertionMode.AFTER_AFTER_FRAMESET: {\n appendCommentToDocument(this, token);\n break;\n }\n default:\n // Do nothing\n }\n }\n /** @internal */\n onDoctype(token) {\n this.skipNextNewLine = false;\n switch (this.insertionMode) {\n case InsertionMode.INITIAL: {\n doctypeInInitialMode(this, token);\n break;\n }\n case InsertionMode.BEFORE_HEAD:\n case InsertionMode.IN_HEAD:\n case InsertionMode.IN_HEAD_NO_SCRIPT:\n case InsertionMode.AFTER_HEAD: {\n this._err(token, ERR.misplacedDoctype);\n break;\n }\n case InsertionMode.IN_TABLE_TEXT: {\n tokenInTableText(this, token);\n break;\n }\n default:\n // Do nothing\n }\n }\n /** @internal */\n onStartTag(token) {\n this.skipNextNewLine = false;\n this.currentToken = token;\n this._processStartTag(token);\n if (token.selfClosing && !token.ackSelfClosing) {\n this._err(token, ERR.nonVoidHtmlElementStartTagWithTrailingSolidus);\n }\n }\n /**\n * Processes a given start tag.\n *\n * `onStartTag` checks if a self-closing tag was recognized. When a token\n * is moved inbetween multiple insertion modes, this check for self-closing\n * could lead to false positives. To avoid this, `_processStartTag` is used\n * for nested calls.\n *\n * @param token The token to process.\n * @protected\n */\n _processStartTag(token) {\n if (this.shouldProcessStartTagTokenInForeignContent(token)) {\n startTagInForeignContent(this, token);\n }\n else {\n this._startTagOutsideForeignContent(token);\n }\n }\n /** @protected */\n _startTagOutsideForeignContent(token) {\n switch (this.insertionMode) {\n case InsertionMode.INITIAL: {\n tokenInInitialMode(this, token);\n break;\n }\n case InsertionMode.BEFORE_HTML: {\n startTagBeforeHtml(this, token);\n break;\n }\n case InsertionMode.BEFORE_HEAD: {\n startTagBeforeHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD: {\n startTagInHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD_NO_SCRIPT: {\n startTagInHeadNoScript(this, token);\n break;\n }\n case InsertionMode.AFTER_HEAD: {\n startTagAfterHead(this, token);\n break;\n }\n case InsertionMode.IN_BODY: {\n startTagInBody(this, token);\n break;\n }\n case InsertionMode.IN_TABLE: {\n startTagInTable(this, token);\n break;\n }\n case InsertionMode.IN_TABLE_TEXT: {\n tokenInTableText(this, token);\n break;\n }\n case InsertionMode.IN_CAPTION: {\n startTagInCaption(this, token);\n break;\n }\n case InsertionMode.IN_COLUMN_GROUP: {\n startTagInColumnGroup(this, token);\n break;\n }\n case InsertionMode.IN_TABLE_BODY: {\n startTagInTableBody(this, token);\n break;\n }\n case InsertionMode.IN_ROW: {\n startTagInRow(this, token);\n break;\n }\n case InsertionMode.IN_CELL: {\n startTagInCell(this, token);\n break;\n }\n case InsertionMode.IN_SELECT: {\n startTagInSelect(this, token);\n break;\n }\n case InsertionMode.IN_SELECT_IN_TABLE: {\n startTagInSelectInTable(this, token);\n break;\n }\n case InsertionMode.IN_TEMPLATE: {\n startTagInTemplate(this, token);\n break;\n }\n case InsertionMode.AFTER_BODY: {\n startTagAfterBody(this, token);\n break;\n }\n case InsertionMode.IN_FRAMESET: {\n startTagInFrameset(this, token);\n break;\n }\n case InsertionMode.AFTER_FRAMESET: {\n startTagAfterFrameset(this, token);\n break;\n }\n case InsertionMode.AFTER_AFTER_BODY: {\n startTagAfterAfterBody(this, token);\n break;\n }\n case InsertionMode.AFTER_AFTER_FRAMESET: {\n startTagAfterAfterFrameset(this, token);\n break;\n }\n default:\n // Do nothing\n }\n }\n /** @internal */\n onEndTag(token) {\n this.skipNextNewLine = false;\n this.currentToken = token;\n if (this.currentNotInHTML) {\n endTagInForeignContent(this, token);\n }\n else {\n this._endTagOutsideForeignContent(token);\n }\n }\n /** @protected */\n _endTagOutsideForeignContent(token) {\n switch (this.insertionMode) {\n case InsertionMode.INITIAL: {\n tokenInInitialMode(this, token);\n break;\n }\n case InsertionMode.BEFORE_HTML: {\n endTagBeforeHtml(this, token);\n break;\n }\n case InsertionMode.BEFORE_HEAD: {\n endTagBeforeHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD: {\n endTagInHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD_NO_SCRIPT: {\n endTagInHeadNoScript(this, token);\n break;\n }\n case InsertionMode.AFTER_HEAD: {\n endTagAfterHead(this, token);\n break;\n }\n case InsertionMode.IN_BODY: {\n endTagInBody(this, token);\n break;\n }\n case InsertionMode.TEXT: {\n endTagInText(this, token);\n break;\n }\n case InsertionMode.IN_TABLE: {\n endTagInTable(this, token);\n break;\n }\n case InsertionMode.IN_TABLE_TEXT: {\n tokenInTableText(this, token);\n break;\n }\n case InsertionMode.IN_CAPTION: {\n endTagInCaption(this, token);\n break;\n }\n case InsertionMode.IN_COLUMN_GROUP: {\n endTagInColumnGroup(this, token);\n break;\n }\n case InsertionMode.IN_TABLE_BODY: {\n endTagInTableBody(this, token);\n break;\n }\n case InsertionMode.IN_ROW: {\n endTagInRow(this, token);\n break;\n }\n case InsertionMode.IN_CELL: {\n endTagInCell(this, token);\n break;\n }\n case InsertionMode.IN_SELECT: {\n endTagInSelect(this, token);\n break;\n }\n case InsertionMode.IN_SELECT_IN_TABLE: {\n endTagInSelectInTable(this, token);\n break;\n }\n case InsertionMode.IN_TEMPLATE: {\n endTagInTemplate(this, token);\n break;\n }\n case InsertionMode.AFTER_BODY: {\n endTagAfterBody(this, token);\n break;\n }\n case InsertionMode.IN_FRAMESET: {\n endTagInFrameset(this, token);\n break;\n }\n case InsertionMode.AFTER_FRAMESET: {\n endTagAfterFrameset(this, token);\n break;\n }\n case InsertionMode.AFTER_AFTER_BODY: {\n tokenAfterAfterBody(this, token);\n break;\n }\n default:\n // Do nothing\n }\n }\n /** @internal */\n onEof(token) {\n switch (this.insertionMode) {\n case InsertionMode.INITIAL: {\n tokenInInitialMode(this, token);\n break;\n }\n case InsertionMode.BEFORE_HTML: {\n tokenBeforeHtml(this, token);\n break;\n }\n case InsertionMode.BEFORE_HEAD: {\n tokenBeforeHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD: {\n tokenInHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD_NO_SCRIPT: {\n tokenInHeadNoScript(this, token);\n break;\n }\n case InsertionMode.AFTER_HEAD: {\n tokenAfterHead(this, token);\n break;\n }\n case InsertionMode.IN_BODY:\n case InsertionMode.IN_TABLE:\n case InsertionMode.IN_CAPTION:\n case InsertionMode.IN_COLUMN_GROUP:\n case InsertionMode.IN_TABLE_BODY:\n case InsertionMode.IN_ROW:\n case InsertionMode.IN_CELL:\n case InsertionMode.IN_SELECT:\n case InsertionMode.IN_SELECT_IN_TABLE: {\n eofInBody(this, token);\n break;\n }\n case InsertionMode.TEXT: {\n eofInText(this, token);\n break;\n }\n case InsertionMode.IN_TABLE_TEXT: {\n tokenInTableText(this, token);\n break;\n }\n case InsertionMode.IN_TEMPLATE: {\n eofInTemplate(this, token);\n break;\n }\n case InsertionMode.AFTER_BODY:\n case InsertionMode.IN_FRAMESET:\n case InsertionMode.AFTER_FRAMESET:\n case InsertionMode.AFTER_AFTER_BODY:\n case InsertionMode.AFTER_AFTER_FRAMESET: {\n stopParsing(this, token);\n break;\n }\n default:\n // Do nothing\n }\n }\n /** @internal */\n onWhitespaceCharacter(token) {\n if (this.skipNextNewLine) {\n this.skipNextNewLine = false;\n if (token.chars.charCodeAt(0) === unicode.CODE_POINTS.LINE_FEED) {\n if (token.chars.length === 1) {\n return;\n }\n token.chars = token.chars.substr(1);\n }\n }\n if (this.tokenizer.inForeignNode) {\n this._insertCharacters(token);\n return;\n }\n switch (this.insertionMode) {\n case InsertionMode.IN_HEAD:\n case InsertionMode.IN_HEAD_NO_SCRIPT:\n case InsertionMode.AFTER_HEAD:\n case InsertionMode.TEXT:\n case InsertionMode.IN_COLUMN_GROUP:\n case InsertionMode.IN_SELECT:\n case InsertionMode.IN_SELECT_IN_TABLE:\n case InsertionMode.IN_FRAMESET:\n case InsertionMode.AFTER_FRAMESET: {\n this._insertCharacters(token);\n break;\n }\n case InsertionMode.IN_BODY:\n case InsertionMode.IN_CAPTION:\n case InsertionMode.IN_CELL:\n case InsertionMode.IN_TEMPLATE:\n case InsertionMode.AFTER_BODY:\n case InsertionMode.AFTER_AFTER_BODY:\n case InsertionMode.AFTER_AFTER_FRAMESET: {\n whitespaceCharacterInBody(this, token);\n break;\n }\n case InsertionMode.IN_TABLE:\n case InsertionMode.IN_TABLE_BODY:\n case InsertionMode.IN_ROW: {\n characterInTable(this, token);\n break;\n }\n case InsertionMode.IN_TABLE_TEXT: {\n whitespaceCharacterInTableText(this, token);\n break;\n }\n default:\n // Do nothing\n }\n }\n}\n//Adoption agency algorithm\n//(see: http://www.whatwg.org/specs/web-apps/current-work/multipage/tree-construction.html#adoptionAgency)\n//------------------------------------------------------------------\n//Steps 5-8 of the algorithm\nfunction aaObtainFormattingElementEntry(p, token) {\n let formattingElementEntry = p.activeFormattingElements.getElementEntryInScopeWithTagName(token.tagName);\n if (formattingElementEntry) {\n if (!p.openElements.contains(formattingElementEntry.element)) {\n p.activeFormattingElements.removeEntry(formattingElementEntry);\n formattingElementEntry = null;\n }\n else if (!p.openElements.hasInScope(token.tagID)) {\n formattingElementEntry = null;\n }\n }\n else {\n genericEndTagInBody(p, token);\n }\n return formattingElementEntry;\n}\n//Steps 9 and 10 of the algorithm\nfunction aaObtainFurthestBlock(p, formattingElementEntry) {\n let furthestBlock = null;\n let idx = p.openElements.stackTop;\n for (; idx >= 0; idx--) {\n const element = p.openElements.items[idx];\n if (element === formattingElementEntry.element) {\n break;\n }\n if (p._isSpecialElement(element, p.openElements.tagIDs[idx])) {\n furthestBlock = element;\n }\n }\n if (!furthestBlock) {\n p.openElements.shortenToLength(Math.max(idx, 0));\n p.activeFormattingElements.removeEntry(formattingElementEntry);\n }\n return furthestBlock;\n}\n//Step 13 of the algorithm\nfunction aaInnerLoop(p, furthestBlock, formattingElement) {\n let lastElement = furthestBlock;\n let nextElement = p.openElements.getCommonAncestor(furthestBlock);\n for (let i = 0, element = nextElement; element !== formattingElement; i++, element = nextElement) {\n //NOTE: store the next element for the next loop iteration (it may be deleted from the stack by step 9.5)\n nextElement = p.openElements.getCommonAncestor(element);\n const elementEntry = p.activeFormattingElements.getElementEntry(element);\n const counterOverflow = elementEntry && i >= AA_INNER_LOOP_ITER;\n const shouldRemoveFromOpenElements = !elementEntry || counterOverflow;\n if (shouldRemoveFromOpenElements) {\n if (counterOverflow) {\n p.activeFormattingElements.removeEntry(elementEntry);\n }\n p.openElements.remove(element);\n }\n else {\n element = aaRecreateElementFromEntry(p, elementEntry);\n if (lastElement === furthestBlock) {\n p.activeFormattingElements.bookmark = elementEntry;\n }\n p.treeAdapter.detachNode(lastElement);\n p.treeAdapter.appendChild(element, lastElement);\n lastElement = element;\n }\n }\n return lastElement;\n}\n//Step 13.7 of the algorithm\nfunction aaRecreateElementFromEntry(p, elementEntry) {\n const ns = p.treeAdapter.getNamespaceURI(elementEntry.element);\n const newElement = p.treeAdapter.createElement(elementEntry.token.tagName, ns, elementEntry.token.attrs);\n p.openElements.replace(elementEntry.element, newElement);\n elementEntry.element = newElement;\n return newElement;\n}\n//Step 14 of the algorithm\nfunction aaInsertLastNodeInCommonAncestor(p, commonAncestor, lastElement) {\n const tn = p.treeAdapter.getTagName(commonAncestor);\n const tid = getTagID(tn);\n if (p._isElementCausesFosterParenting(tid)) {\n p._fosterParentElement(lastElement);\n }\n else {\n const ns = p.treeAdapter.getNamespaceURI(commonAncestor);\n if (tid === $.TEMPLATE && ns === NS.HTML) {\n commonAncestor = p.treeAdapter.getTemplateContent(commonAncestor);\n }\n p.treeAdapter.appendChild(commonAncestor, lastElement);\n }\n}\n//Steps 15-19 of the algorithm\nfunction aaReplaceFormattingElement(p, furthestBlock, formattingElementEntry) {\n const ns = p.treeAdapter.getNamespaceURI(formattingElementEntry.element);\n const { token } = formattingElementEntry;\n const newElement = p.treeAdapter.createElement(token.tagName, ns, token.attrs);\n p._adoptNodes(furthestBlock, newElement);\n p.treeAdapter.appendChild(furthestBlock, newElement);\n p.activeFormattingElements.insertElementAfterBookmark(newElement, token);\n p.activeFormattingElements.removeEntry(formattingElementEntry);\n p.openElements.remove(formattingElementEntry.element);\n p.openElements.insertAfter(furthestBlock, newElement, token.tagID);\n}\n//Algorithm entry point\nfunction callAdoptionAgency(p, token) {\n for (let i = 0; i < AA_OUTER_LOOP_ITER; i++) {\n const formattingElementEntry = aaObtainFormattingElementEntry(p, token);\n if (!formattingElementEntry) {\n break;\n }\n const furthestBlock = aaObtainFurthestBlock(p, formattingElementEntry);\n if (!furthestBlock) {\n break;\n }\n p.activeFormattingElements.bookmark = formattingElementEntry;\n const lastElement = aaInnerLoop(p, furthestBlock, formattingElementEntry.element);\n const commonAncestor = p.openElements.getCommonAncestor(formattingElementEntry.element);\n p.treeAdapter.detachNode(lastElement);\n if (commonAncestor)\n aaInsertLastNodeInCommonAncestor(p, commonAncestor, lastElement);\n aaReplaceFormattingElement(p, furthestBlock, formattingElementEntry);\n }\n}\n//Generic token handlers\n//------------------------------------------------------------------\nfunction appendComment(p, token) {\n p._appendCommentNode(token, p.openElements.currentTmplContentOrNode);\n}\nfunction appendCommentToRootHtmlElement(p, token) {\n p._appendCommentNode(token, p.openElements.items[0]);\n}\nfunction appendCommentToDocument(p, token) {\n p._appendCommentNode(token, p.document);\n}\nfunction stopParsing(p, token) {\n p.stopped = true;\n // NOTE: Set end locations for elements that remain on the open element stack.\n if (token.location) {\n // NOTE: If we are not in a fragment, `html` and `body` will stay on the stack.\n // This is a problem, as we might overwrite their end position here.\n const target = p.fragmentContext ? 0 : 2;\n for (let i = p.openElements.stackTop; i >= target; i--) {\n p._setEndLocation(p.openElements.items[i], token);\n }\n // Handle `html` and `body`\n if (!p.fragmentContext && p.openElements.stackTop >= 0) {\n const htmlElement = p.openElements.items[0];\n const htmlLocation = p.treeAdapter.getNodeSourceCodeLocation(htmlElement);\n if (htmlLocation && !htmlLocation.endTag) {\n p._setEndLocation(htmlElement, token);\n if (p.openElements.stackTop >= 1) {\n const bodyElement = p.openElements.items[1];\n const bodyLocation = p.treeAdapter.getNodeSourceCodeLocation(bodyElement);\n if (bodyLocation && !bodyLocation.endTag) {\n p._setEndLocation(bodyElement, token);\n }\n }\n }\n }\n }\n}\n// The \"initial\" insertion mode\n//------------------------------------------------------------------\nfunction doctypeInInitialMode(p, token) {\n p._setDocumentType(token);\n const mode = token.forceQuirks ? DOCUMENT_MODE.QUIRKS : doctype.getDocumentMode(token);\n if (!doctype.isConforming(token)) {\n p._err(token, ERR.nonConformingDoctype);\n }\n p.treeAdapter.setDocumentMode(p.document, mode);\n p.insertionMode = InsertionMode.BEFORE_HTML;\n}\nfunction tokenInInitialMode(p, token) {\n p._err(token, ERR.missingDoctype, true);\n p.treeAdapter.setDocumentMode(p.document, DOCUMENT_MODE.QUIRKS);\n p.insertionMode = InsertionMode.BEFORE_HTML;\n p._processToken(token);\n}\n// The \"before html\" insertion mode\n//------------------------------------------------------------------\nfunction startTagBeforeHtml(p, token) {\n if (token.tagID === $.HTML) {\n p._insertElement(token, NS.HTML);\n p.insertionMode = InsertionMode.BEFORE_HEAD;\n }\n else {\n tokenBeforeHtml(p, token);\n }\n}\nfunction endTagBeforeHtml(p, token) {\n const tn = token.tagID;\n if (tn === $.HTML || tn === $.HEAD || tn === $.BODY || tn === $.BR) {\n tokenBeforeHtml(p, token);\n }\n}\nfunction tokenBeforeHtml(p, token) {\n p._insertFakeRootElement();\n p.insertionMode = InsertionMode.BEFORE_HEAD;\n p._processToken(token);\n}\n// The \"before head\" insertion mode\n//------------------------------------------------------------------\nfunction startTagBeforeHead(p, token) {\n switch (token.tagID) {\n case $.HTML: {\n startTagInBody(p, token);\n break;\n }\n case $.HEAD: {\n p._insertElement(token, NS.HTML);\n p.headElement = p.openElements.current;\n p.insertionMode = InsertionMode.IN_HEAD;\n break;\n }\n default: {\n tokenBeforeHead(p, token);\n }\n }\n}\nfunction endTagBeforeHead(p, token) {\n const tn = token.tagID;\n if (tn === $.HEAD || tn === $.BODY || tn === $.HTML || tn === $.BR) {\n tokenBeforeHead(p, token);\n }\n else {\n p._err(token, ERR.endTagWithoutMatchingOpenElement);\n }\n}\nfunction tokenBeforeHead(p, token) {\n p._insertFakeElement(TN.HEAD, $.HEAD);\n p.headElement = p.openElements.current;\n p.insertionMode = InsertionMode.IN_HEAD;\n p._processToken(token);\n}\n// The \"in head\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInHead(p, token) {\n switch (token.tagID) {\n case $.HTML: {\n startTagInBody(p, token);\n break;\n }\n case $.BASE:\n case $.BASEFONT:\n case $.BGSOUND:\n case $.LINK:\n case $.META: {\n p._appendElement(token, NS.HTML);\n token.ackSelfClosing = true;\n break;\n }\n case $.TITLE: {\n p._switchToTextParsing(token, TokenizerMode.RCDATA);\n break;\n }\n case $.NOSCRIPT: {\n if (p.options.scriptingEnabled) {\n p._switchToTextParsing(token, TokenizerMode.RAWTEXT);\n }\n else {\n p._insertElement(token, NS.HTML);\n p.insertionMode = InsertionMode.IN_HEAD_NO_SCRIPT;\n }\n break;\n }\n case $.NOFRAMES:\n case $.STYLE: {\n p._switchToTextParsing(token, TokenizerMode.RAWTEXT);\n break;\n }\n case $.SCRIPT: {\n p._switchToTextParsing(token, TokenizerMode.SCRIPT_DATA);\n break;\n }\n case $.TEMPLATE: {\n p._insertTemplate(token);\n p.activeFormattingElements.insertMarker();\n p.framesetOk = false;\n p.insertionMode = InsertionMode.IN_TEMPLATE;\n p.tmplInsertionModeStack.unshift(InsertionMode.IN_TEMPLATE);\n break;\n }\n case $.HEAD: {\n p._err(token, ERR.misplacedStartTagForHeadElement);\n break;\n }\n default: {\n tokenInHead(p, token);\n }\n }\n}\nfunction endTagInHead(p, token) {\n switch (token.tagID) {\n case $.HEAD: {\n p.openElements.pop();\n p.insertionMode = InsertionMode.AFTER_HEAD;\n break;\n }\n case $.BODY:\n case $.BR:\n case $.HTML: {\n tokenInHead(p, token);\n break;\n }\n case $.TEMPLATE: {\n templateEndTagInHead(p, token);\n break;\n }\n default: {\n p._err(token, ERR.endTagWithoutMatchingOpenElement);\n }\n }\n}\nfunction templateEndTagInHead(p, token) {\n if (p.openElements.tmplCount > 0) {\n p.openElements.generateImpliedEndTagsThoroughly();\n if (p.openElements.currentTagId !== $.TEMPLATE) {\n p._err(token, ERR.closingOfElementWithOpenChildElements);\n }\n p.openElements.popUntilTagNamePopped($.TEMPLATE);\n p.activeFormattingElements.clearToLastMarker();\n p.tmplInsertionModeStack.shift();\n p._resetInsertionMode();\n }\n else {\n p._err(token, ERR.endTagWithoutMatchingOpenElement);\n }\n}\nfunction tokenInHead(p, token) {\n p.openElements.pop();\n p.insertionMode = InsertionMode.AFTER_HEAD;\n p._processToken(token);\n}\n// The \"in head no script\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInHeadNoScript(p, token) {\n switch (token.tagID) {\n case $.HTML: {\n startTagInBody(p, token);\n break;\n }\n case $.BASEFONT:\n case $.BGSOUND:\n case $.HEAD:\n case $.LINK:\n case $.META:\n case $.NOFRAMES:\n case $.STYLE: {\n startTagInHead(p, token);\n break;\n }\n case $.NOSCRIPT: {\n p._err(token, ERR.nestedNoscriptInHead);\n break;\n }\n default: {\n tokenInHeadNoScript(p, token);\n }\n }\n}\nfunction endTagInHeadNoScript(p, token) {\n switch (token.tagID) {\n case $.NOSCRIPT: {\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_HEAD;\n break;\n }\n case $.BR: {\n tokenInHeadNoScript(p, token);\n break;\n }\n default: {\n p._err(token, ERR.endTagWithoutMatchingOpenElement);\n }\n }\n}\nfunction tokenInHeadNoScript(p, token) {\n const errCode = token.type === TokenType.EOF ? ERR.openElementsLeftAfterEof : ERR.disallowedContentInNoscriptInHead;\n p._err(token, errCode);\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_HEAD;\n p._processToken(token);\n}\n// The \"after head\" insertion mode\n//------------------------------------------------------------------\nfunction startTagAfterHead(p, token) {\n switch (token.tagID) {\n case $.HTML: {\n startTagInBody(p, token);\n break;\n }\n case $.BODY: {\n p._insertElement(token, NS.HTML);\n p.framesetOk = false;\n p.insertionMode = InsertionMode.IN_BODY;\n break;\n }\n case $.FRAMESET: {\n p._insertElement(token, NS.HTML);\n p.insertionMode = InsertionMode.IN_FRAMESET;\n break;\n }\n case $.BASE:\n case $.BASEFONT:\n case $.BGSOUND:\n case $.LINK:\n case $.META:\n case $.NOFRAMES:\n case $.SCRIPT:\n case $.STYLE:\n case $.TEMPLATE:\n case $.TITLE: {\n p._err(token, ERR.abandonedHeadElementChild);\n p.openElements.push(p.headElement, $.HEAD);\n startTagInHead(p, token);\n p.openElements.remove(p.headElement);\n break;\n }\n case $.HEAD: {\n p._err(token, ERR.misplacedStartTagForHeadElement);\n break;\n }\n default: {\n tokenAfterHead(p, token);\n }\n }\n}\nfunction endTagAfterHead(p, token) {\n switch (token.tagID) {\n case $.BODY:\n case $.HTML:\n case $.BR: {\n tokenAfterHead(p, token);\n break;\n }\n case $.TEMPLATE: {\n templateEndTagInHead(p, token);\n break;\n }\n default: {\n p._err(token, ERR.endTagWithoutMatchingOpenElement);\n }\n }\n}\nfunction tokenAfterHead(p, token) {\n p._insertFakeElement(TN.BODY, $.BODY);\n p.insertionMode = InsertionMode.IN_BODY;\n modeInBody(p, token);\n}\n// The \"in body\" insertion mode\n//------------------------------------------------------------------\nfunction modeInBody(p, token) {\n switch (token.type) {\n case TokenType.CHARACTER: {\n characterInBody(p, token);\n break;\n }\n case TokenType.WHITESPACE_CHARACTER: {\n whitespaceCharacterInBody(p, token);\n break;\n }\n case TokenType.COMMENT: {\n appendComment(p, token);\n break;\n }\n case TokenType.START_TAG: {\n startTagInBody(p, token);\n break;\n }\n case TokenType.END_TAG: {\n endTagInBody(p, token);\n break;\n }\n case TokenType.EOF: {\n eofInBody(p, token);\n break;\n }\n default:\n // Do nothing\n }\n}\nfunction whitespaceCharacterInBody(p, token) {\n p._reconstructActiveFormattingElements();\n p._insertCharacters(token);\n}\nfunction characterInBody(p, token) {\n p._reconstructActiveFormattingElements();\n p._insertCharacters(token);\n p.framesetOk = false;\n}\nfunction htmlStartTagInBody(p, token) {\n if (p.openElements.tmplCount === 0) {\n p.treeAdapter.adoptAttributes(p.openElements.items[0], token.attrs);\n }\n}\nfunction bodyStartTagInBody(p, token) {\n const bodyElement = p.openElements.tryPeekProperlyNestedBodyElement();\n if (bodyElement && p.openElements.tmplCount === 0) {\n p.framesetOk = false;\n p.treeAdapter.adoptAttributes(bodyElement, token.attrs);\n }\n}\nfunction framesetStartTagInBody(p, token) {\n const bodyElement = p.openElements.tryPeekProperlyNestedBodyElement();\n if (p.framesetOk && bodyElement) {\n p.treeAdapter.detachNode(bodyElement);\n p.openElements.popAllUpToHtmlElement();\n p._insertElement(token, NS.HTML);\n p.insertionMode = InsertionMode.IN_FRAMESET;\n }\n}\nfunction addressStartTagInBody(p, token) {\n if (p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n p._insertElement(token, NS.HTML);\n}\nfunction numberedHeaderStartTagInBody(p, token) {\n if (p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n if (p.openElements.currentTagId !== undefined && NUMBERED_HEADERS.has(p.openElements.currentTagId)) {\n p.openElements.pop();\n }\n p._insertElement(token, NS.HTML);\n}\nfunction preStartTagInBody(p, token) {\n if (p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n p._insertElement(token, NS.HTML);\n //NOTE: If the next token is a U+000A LINE FEED (LF) character token, then ignore that token and move\n //on to the next one. (Newlines at the start of pre blocks are ignored as an authoring convenience.)\n p.skipNextNewLine = true;\n p.framesetOk = false;\n}\nfunction formStartTagInBody(p, token) {\n const inTemplate = p.openElements.tmplCount > 0;\n if (!p.formElement || inTemplate) {\n if (p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n p._insertElement(token, NS.HTML);\n if (!inTemplate) {\n p.formElement = p.openElements.current;\n }\n }\n}\nfunction listItemStartTagInBody(p, token) {\n p.framesetOk = false;\n const tn = token.tagID;\n for (let i = p.openElements.stackTop; i >= 0; i--) {\n const elementId = p.openElements.tagIDs[i];\n if ((tn === $.LI && elementId === $.LI) ||\n ((tn === $.DD || tn === $.DT) && (elementId === $.DD || elementId === $.DT))) {\n p.openElements.generateImpliedEndTagsWithExclusion(elementId);\n p.openElements.popUntilTagNamePopped(elementId);\n break;\n }\n if (elementId !== $.ADDRESS &&\n elementId !== $.DIV &&\n elementId !== $.P &&\n p._isSpecialElement(p.openElements.items[i], elementId)) {\n break;\n }\n }\n if (p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n p._insertElement(token, NS.HTML);\n}\nfunction plaintextStartTagInBody(p, token) {\n if (p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n p._insertElement(token, NS.HTML);\n p.tokenizer.state = TokenizerMode.PLAINTEXT;\n}\nfunction buttonStartTagInBody(p, token) {\n if (p.openElements.hasInScope($.BUTTON)) {\n p.openElements.generateImpliedEndTags();\n p.openElements.popUntilTagNamePopped($.BUTTON);\n }\n p._reconstructActiveFormattingElements();\n p._insertElement(token, NS.HTML);\n p.framesetOk = false;\n}\nfunction aStartTagInBody(p, token) {\n const activeElementEntry = p.activeFormattingElements.getElementEntryInScopeWithTagName(TN.A);\n if (activeElementEntry) {\n callAdoptionAgency(p, token);\n p.openElements.remove(activeElementEntry.element);\n p.activeFormattingElements.removeEntry(activeElementEntry);\n }\n p._reconstructActiveFormattingElements();\n p._insertElement(token, NS.HTML);\n p.activeFormattingElements.pushElement(p.openElements.current, token);\n}\nfunction bStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n p._insertElement(token, NS.HTML);\n p.activeFormattingElements.pushElement(p.openElements.current, token);\n}\nfunction nobrStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n if (p.openElements.hasInScope($.NOBR)) {\n callAdoptionAgency(p, token);\n p._reconstructActiveFormattingElements();\n }\n p._insertElement(token, NS.HTML);\n p.activeFormattingElements.pushElement(p.openElements.current, token);\n}\nfunction appletStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n p._insertElement(token, NS.HTML);\n p.activeFormattingElements.insertMarker();\n p.framesetOk = false;\n}\nfunction tableStartTagInBody(p, token) {\n if (p.treeAdapter.getDocumentMode(p.document) !== DOCUMENT_MODE.QUIRKS && p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n p._insertElement(token, NS.HTML);\n p.framesetOk = false;\n p.insertionMode = InsertionMode.IN_TABLE;\n}\nfunction areaStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n p._appendElement(token, NS.HTML);\n p.framesetOk = false;\n token.ackSelfClosing = true;\n}\nfunction isHiddenInput(token) {\n const inputType = getTokenAttr(token, ATTRS.TYPE);\n return inputType != null && inputType.toLowerCase() === HIDDEN_INPUT_TYPE;\n}\nfunction inputStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n p._appendElement(token, NS.HTML);\n if (!isHiddenInput(token)) {\n p.framesetOk = false;\n }\n token.ackSelfClosing = true;\n}\nfunction paramStartTagInBody(p, token) {\n p._appendElement(token, NS.HTML);\n token.ackSelfClosing = true;\n}\nfunction hrStartTagInBody(p, token) {\n if (p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n p._appendElement(token, NS.HTML);\n p.framesetOk = false;\n token.ackSelfClosing = true;\n}\nfunction imageStartTagInBody(p, token) {\n token.tagName = TN.IMG;\n token.tagID = $.IMG;\n areaStartTagInBody(p, token);\n}\nfunction textareaStartTagInBody(p, token) {\n p._insertElement(token, NS.HTML);\n //NOTE: If the next token is a U+000A LINE FEED (LF) character token, then ignore that token and move\n //on to the next one. (Newlines at the start of textarea elements are ignored as an authoring convenience.)\n p.skipNextNewLine = true;\n p.tokenizer.state = TokenizerMode.RCDATA;\n p.originalInsertionMode = p.insertionMode;\n p.framesetOk = false;\n p.insertionMode = InsertionMode.TEXT;\n}\nfunction xmpStartTagInBody(p, token) {\n if (p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n p._reconstructActiveFormattingElements();\n p.framesetOk = false;\n p._switchToTextParsing(token, TokenizerMode.RAWTEXT);\n}\nfunction iframeStartTagInBody(p, token) {\n p.framesetOk = false;\n p._switchToTextParsing(token, TokenizerMode.RAWTEXT);\n}\n//NOTE: here we assume that we always act as a user agent with enabled plugins/frames, so we parse\n//<noembed>/<noframes> as rawtext.\nfunction rawTextStartTagInBody(p, token) {\n p._switchToTextParsing(token, TokenizerMode.RAWTEXT);\n}\nfunction selectStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n p._insertElement(token, NS.HTML);\n p.framesetOk = false;\n p.insertionMode =\n p.insertionMode === InsertionMode.IN_TABLE ||\n p.insertionMode === InsertionMode.IN_CAPTION ||\n p.insertionMode === InsertionMode.IN_TABLE_BODY ||\n p.insertionMode === InsertionMode.IN_ROW ||\n p.insertionMode === InsertionMode.IN_CELL\n ? InsertionMode.IN_SELECT_IN_TABLE\n : InsertionMode.IN_SELECT;\n}\nfunction optgroupStartTagInBody(p, token) {\n if (p.openElements.currentTagId === $.OPTION) {\n p.openElements.pop();\n }\n p._reconstructActiveFormattingElements();\n p._insertElement(token, NS.HTML);\n}\nfunction rbStartTagInBody(p, token) {\n if (p.openElements.hasInScope($.RUBY)) {\n p.openElements.generateImpliedEndTags();\n }\n p._insertElement(token, NS.HTML);\n}\nfunction rtStartTagInBody(p, token) {\n if (p.openElements.hasInScope($.RUBY)) {\n p.openElements.generateImpliedEndTagsWithExclusion($.RTC);\n }\n p._insertElement(token, NS.HTML);\n}\nfunction mathStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n foreignContent.adjustTokenMathMLAttrs(token);\n foreignContent.adjustTokenXMLAttrs(token);\n if (token.selfClosing) {\n p._appendElement(token, NS.MATHML);\n }\n else {\n p._insertElement(token, NS.MATHML);\n }\n token.ackSelfClosing = true;\n}\nfunction svgStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n foreignContent.adjustTokenSVGAttrs(token);\n foreignContent.adjustTokenXMLAttrs(token);\n if (token.selfClosing) {\n p._appendElement(token, NS.SVG);\n }\n else {\n p._insertElement(token, NS.SVG);\n }\n token.ackSelfClosing = true;\n}\nfunction genericStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n p._insertElement(token, NS.HTML);\n}\nfunction startTagInBody(p, token) {\n switch (token.tagID) {\n case $.I:\n case $.S:\n case $.B:\n case $.U:\n case $.EM:\n case $.TT:\n case $.BIG:\n case $.CODE:\n case $.FONT:\n case $.SMALL:\n case $.STRIKE:\n case $.STRONG: {\n bStartTagInBody(p, token);\n break;\n }\n case $.A: {\n aStartTagInBody(p, token);\n break;\n }\n case $.H1:\n case $.H2:\n case $.H3:\n case $.H4:\n case $.H5:\n case $.H6: {\n numberedHeaderStartTagInBody(p, token);\n break;\n }\n case $.P:\n case $.DL:\n case $.OL:\n case $.UL:\n case $.DIV:\n case $.DIR:\n case $.NAV:\n case $.MAIN:\n case $.MENU:\n case $.ASIDE:\n case $.CENTER:\n case $.FIGURE:\n case $.FOOTER:\n case $.HEADER:\n case $.HGROUP:\n case $.DIALOG:\n case $.DETAILS:\n case $.ADDRESS:\n case $.ARTICLE:\n case $.SEARCH:\n case $.SECTION:\n case $.SUMMARY:\n case $.FIELDSET:\n case $.BLOCKQUOTE:\n case $.FIGCAPTION: {\n addressStartTagInBody(p, token);\n break;\n }\n case $.LI:\n case $.DD:\n case $.DT: {\n listItemStartTagInBody(p, token);\n break;\n }\n case $.BR:\n case $.IMG:\n case $.WBR:\n case $.AREA:\n case $.EMBED:\n case $.KEYGEN: {\n areaStartTagInBody(p, token);\n break;\n }\n case $.HR: {\n hrStartTagInBody(p, token);\n break;\n }\n case $.RB:\n case $.RTC: {\n rbStartTagInBody(p, token);\n break;\n }\n case $.RT:\n case $.RP: {\n rtStartTagInBody(p, token);\n break;\n }\n case $.PRE:\n case $.LISTING: {\n preStartTagInBody(p, token);\n break;\n }\n case $.XMP: {\n xmpStartTagInBody(p, token);\n break;\n }\n case $.SVG: {\n svgStartTagInBody(p, token);\n break;\n }\n case $.HTML: {\n htmlStartTagInBody(p, token);\n break;\n }\n case $.BASE:\n case $.LINK:\n case $.META:\n case $.STYLE:\n case $.TITLE:\n case $.SCRIPT:\n case $.BGSOUND:\n case $.BASEFONT:\n case $.TEMPLATE: {\n startTagInHead(p, token);\n break;\n }\n case $.BODY: {\n bodyStartTagInBody(p, token);\n break;\n }\n case $.FORM: {\n formStartTagInBody(p, token);\n break;\n }\n case $.NOBR: {\n nobrStartTagInBody(p, token);\n break;\n }\n case $.MATH: {\n mathStartTagInBody(p, token);\n break;\n }\n case $.TABLE: {\n tableStartTagInBody(p, token);\n break;\n }\n case $.INPUT: {\n inputStartTagInBody(p, token);\n break;\n }\n case $.PARAM:\n case $.TRACK:\n case $.SOURCE: {\n paramStartTagInBody(p, token);\n break;\n }\n case $.IMAGE: {\n imageStartTagInBody(p, token);\n break;\n }\n case $.BUTTON: {\n buttonStartTagInBody(p, token);\n break;\n }\n case $.APPLET:\n case $.OBJECT:\n case $.MARQUEE: {\n appletStartTagInBody(p, token);\n break;\n }\n case $.IFRAME: {\n iframeStartTagInBody(p, token);\n break;\n }\n case $.SELECT: {\n selectStartTagInBody(p, token);\n break;\n }\n case $.OPTION:\n case $.OPTGROUP: {\n optgroupStartTagInBody(p, token);\n break;\n }\n case $.NOEMBED:\n case $.NOFRAMES: {\n rawTextStartTagInBody(p, token);\n break;\n }\n case $.FRAMESET: {\n framesetStartTagInBody(p, token);\n break;\n }\n case $.TEXTAREA: {\n textareaStartTagInBody(p, token);\n break;\n }\n case $.NOSCRIPT: {\n if (p.options.scriptingEnabled) {\n rawTextStartTagInBody(p, token);\n }\n else {\n genericStartTagInBody(p, token);\n }\n break;\n }\n case $.PLAINTEXT: {\n plaintextStartTagInBody(p, token);\n break;\n }\n case $.COL:\n case $.TH:\n case $.TD:\n case $.TR:\n case $.HEAD:\n case $.FRAME:\n case $.TBODY:\n case $.TFOOT:\n case $.THEAD:\n case $.CAPTION:\n case $.COLGROUP: {\n // Ignore token\n break;\n }\n default: {\n genericStartTagInBody(p, token);\n }\n }\n}\nfunction bodyEndTagInBody(p, token) {\n if (p.openElements.hasInScope($.BODY)) {\n p.insertionMode = InsertionMode.AFTER_BODY;\n //NOTE: <body> is never popped from the stack, so we need to updated\n //the end location explicitly.\n if (p.options.sourceCodeLocationInfo) {\n const bodyElement = p.openElements.tryPeekProperlyNestedBodyElement();\n if (bodyElement) {\n p._setEndLocation(bodyElement, token);\n }\n }\n }\n}\nfunction htmlEndTagInBody(p, token) {\n if (p.openElements.hasInScope($.BODY)) {\n p.insertionMode = InsertionMode.AFTER_BODY;\n endTagAfterBody(p, token);\n }\n}\nfunction addressEndTagInBody(p, token) {\n const tn = token.tagID;\n if (p.openElements.hasInScope(tn)) {\n p.openElements.generateImpliedEndTags();\n p.openElements.popUntilTagNamePopped(tn);\n }\n}\nfunction formEndTagInBody(p) {\n const inTemplate = p.openElements.tmplCount > 0;\n const { formElement } = p;\n if (!inTemplate) {\n p.formElement = null;\n }\n if ((formElement || inTemplate) && p.openElements.hasInScope($.FORM)) {\n p.openElements.generateImpliedEndTags();\n if (inTemplate) {\n p.openElements.popUntilTagNamePopped($.FORM);\n }\n else if (formElement) {\n p.openElements.remove(formElement);\n }\n }\n}\nfunction pEndTagInBody(p) {\n if (!p.openElements.hasInButtonScope($.P)) {\n p._insertFakeElement(TN.P, $.P);\n }\n p._closePElement();\n}\nfunction liEndTagInBody(p) {\n if (p.openElements.hasInListItemScope($.LI)) {\n p.openElements.generateImpliedEndTagsWithExclusion($.LI);\n p.openElements.popUntilTagNamePopped($.LI);\n }\n}\nfunction ddEndTagInBody(p, token) {\n const tn = token.tagID;\n if (p.openElements.hasInScope(tn)) {\n p.openElements.generateImpliedEndTagsWithExclusion(tn);\n p.openElements.popUntilTagNamePopped(tn);\n }\n}\nfunction numberedHeaderEndTagInBody(p) {\n if (p.openElements.hasNumberedHeaderInScope()) {\n p.openElements.generateImpliedEndTags();\n p.openElements.popUntilNumberedHeaderPopped();\n }\n}\nfunction appletEndTagInBody(p, token) {\n const tn = token.tagID;\n if (p.openElements.hasInScope(tn)) {\n p.openElements.generateImpliedEndTags();\n p.openElements.popUntilTagNamePopped(tn);\n p.activeFormattingElements.clearToLastMarker();\n }\n}\nfunction brEndTagInBody(p) {\n p._reconstructActiveFormattingElements();\n p._insertFakeElement(TN.BR, $.BR);\n p.openElements.pop();\n p.framesetOk = false;\n}\nfunction genericEndTagInBody(p, token) {\n const tn = token.tagName;\n const tid = token.tagID;\n for (let i = p.openElements.stackTop; i > 0; i--) {\n const element = p.openElements.items[i];\n const elementId = p.openElements.tagIDs[i];\n // Compare the tag name here, as the tag might not be a known tag with an ID.\n if (tid === elementId && (tid !== $.UNKNOWN || p.treeAdapter.getTagName(element) === tn)) {\n p.openElements.generateImpliedEndTagsWithExclusion(tid);\n if (p.openElements.stackTop >= i)\n p.openElements.shortenToLength(i);\n break;\n }\n if (p._isSpecialElement(element, elementId)) {\n break;\n }\n }\n}\nfunction endTagInBody(p, token) {\n switch (token.tagID) {\n case $.A:\n case $.B:\n case $.I:\n case $.S:\n case $.U:\n case $.EM:\n case $.TT:\n case $.BIG:\n case $.CODE:\n case $.FONT:\n case $.NOBR:\n case $.SMALL:\n case $.STRIKE:\n case $.STRONG: {\n callAdoptionAgency(p, token);\n break;\n }\n case $.P: {\n pEndTagInBody(p);\n break;\n }\n case $.DL:\n case $.UL:\n case $.OL:\n case $.DIR:\n case $.DIV:\n case $.NAV:\n case $.PRE:\n case $.MAIN:\n case $.MENU:\n case $.ASIDE:\n case $.BUTTON:\n case $.CENTER:\n case $.FIGURE:\n case $.FOOTER:\n case $.HEADER:\n case $.HGROUP:\n case $.DIALOG:\n case $.ADDRESS:\n case $.ARTICLE:\n case $.DETAILS:\n case $.SEARCH:\n case $.SECTION:\n case $.SUMMARY:\n case $.LISTING:\n case $.FIELDSET:\n case $.BLOCKQUOTE:\n case $.FIGCAPTION: {\n addressEndTagInBody(p, token);\n break;\n }\n case $.LI: {\n liEndTagInBody(p);\n break;\n }\n case $.DD:\n case $.DT: {\n ddEndTagInBody(p, token);\n break;\n }\n case $.H1:\n case $.H2:\n case $.H3:\n case $.H4:\n case $.H5:\n case $.H6: {\n numberedHeaderEndTagInBody(p);\n break;\n }\n case $.BR: {\n brEndTagInBody(p);\n break;\n }\n case $.BODY: {\n bodyEndTagInBody(p, token);\n break;\n }\n case $.HTML: {\n htmlEndTagInBody(p, token);\n break;\n }\n case $.FORM: {\n formEndTagInBody(p);\n break;\n }\n case $.APPLET:\n case $.OBJECT:\n case $.MARQUEE: {\n appletEndTagInBody(p, token);\n break;\n }\n case $.TEMPLATE: {\n templateEndTagInHead(p, token);\n break;\n }\n default: {\n genericEndTagInBody(p, token);\n }\n }\n}\nfunction eofInBody(p, token) {\n if (p.tmplInsertionModeStack.length > 0) {\n eofInTemplate(p, token);\n }\n else {\n stopParsing(p, token);\n }\n}\n// The \"text\" insertion mode\n//------------------------------------------------------------------\nfunction endTagInText(p, token) {\n var _a;\n if (token.tagID === $.SCRIPT) {\n (_a = p.scriptHandler) === null || _a === void 0 ? void 0 : _a.call(p, p.openElements.current);\n }\n p.openElements.pop();\n p.insertionMode = p.originalInsertionMode;\n}\nfunction eofInText(p, token) {\n p._err(token, ERR.eofInElementThatCanContainOnlyText);\n p.openElements.pop();\n p.insertionMode = p.originalInsertionMode;\n p.onEof(token);\n}\n// The \"in table\" insertion mode\n//------------------------------------------------------------------\nfunction characterInTable(p, token) {\n if (p.openElements.currentTagId !== undefined && TABLE_STRUCTURE_TAGS.has(p.openElements.currentTagId)) {\n p.pendingCharacterTokens.length = 0;\n p.hasNonWhitespacePendingCharacterToken = false;\n p.originalInsertionMode = p.insertionMode;\n p.insertionMode = InsertionMode.IN_TABLE_TEXT;\n switch (token.type) {\n case TokenType.CHARACTER: {\n characterInTableText(p, token);\n break;\n }\n case TokenType.WHITESPACE_CHARACTER: {\n whitespaceCharacterInTableText(p, token);\n break;\n }\n // Ignore null\n }\n }\n else {\n tokenInTable(p, token);\n }\n}\nfunction captionStartTagInTable(p, token) {\n p.openElements.clearBackToTableContext();\n p.activeFormattingElements.insertMarker();\n p._insertElement(token, NS.HTML);\n p.insertionMode = InsertionMode.IN_CAPTION;\n}\nfunction colgroupStartTagInTable(p, token) {\n p.openElements.clearBackToTableContext();\n p._insertElement(token, NS.HTML);\n p.insertionMode = InsertionMode.IN_COLUMN_GROUP;\n}\nfunction colStartTagInTable(p, token) {\n p.openElements.clearBackToTableContext();\n p._insertFakeElement(TN.COLGROUP, $.COLGROUP);\n p.insertionMode = InsertionMode.IN_COLUMN_GROUP;\n startTagInColumnGroup(p, token);\n}\nfunction tbodyStartTagInTable(p, token) {\n p.openElements.clearBackToTableContext();\n p._insertElement(token, NS.HTML);\n p.insertionMode = InsertionMode.IN_TABLE_BODY;\n}\nfunction tdStartTagInTable(p, token) {\n p.openElements.clearBackToTableContext();\n p._insertFakeElement(TN.TBODY, $.TBODY);\n p.insertionMode = InsertionMode.IN_TABLE_BODY;\n startTagInTableBody(p, token);\n}\nfunction tableStartTagInTable(p, token) {\n if (p.openElements.hasInTableScope($.TABLE)) {\n p.openElements.popUntilTagNamePopped($.TABLE);\n p._resetInsertionMode();\n p._processStartTag(token);\n }\n}\nfunction inputStartTagInTable(p, token) {\n if (isHiddenInput(token)) {\n p._appendElement(token, NS.HTML);\n }\n else {\n tokenInTable(p, token);\n }\n token.ackSelfClosing = true;\n}\nfunction formStartTagInTable(p, token) {\n if (!p.formElement && p.openElements.tmplCount === 0) {\n p._insertElement(token, NS.HTML);\n p.formElement = p.openElements.current;\n p.openElements.pop();\n }\n}\nfunction startTagInTable(p, token) {\n switch (token.tagID) {\n case $.TD:\n case $.TH:\n case $.TR: {\n tdStartTagInTable(p, token);\n break;\n }\n case $.STYLE:\n case $.SCRIPT:\n case $.TEMPLATE: {\n startTagInHead(p, token);\n break;\n }\n case $.COL: {\n colStartTagInTable(p, token);\n break;\n }\n case $.FORM: {\n formStartTagInTable(p, token);\n break;\n }\n case $.TABLE: {\n tableStartTagInTable(p, token);\n break;\n }\n case $.TBODY:\n case $.TFOOT:\n case $.THEAD: {\n tbodyStartTagInTable(p, token);\n break;\n }\n case $.INPUT: {\n inputStartTagInTable(p, token);\n break;\n }\n case $.CAPTION: {\n captionStartTagInTable(p, token);\n break;\n }\n case $.COLGROUP: {\n colgroupStartTagInTable(p, token);\n break;\n }\n default: {\n tokenInTable(p, token);\n }\n }\n}\nfunction endTagInTable(p, token) {\n switch (token.tagID) {\n case $.TABLE: {\n if (p.openElements.hasInTableScope($.TABLE)) {\n p.openElements.popUntilTagNamePopped($.TABLE);\n p._resetInsertionMode();\n }\n break;\n }\n case $.TEMPLATE: {\n templateEndTagInHead(p, token);\n break;\n }\n case $.BODY:\n case $.CAPTION:\n case $.COL:\n case $.COLGROUP:\n case $.HTML:\n case $.TBODY:\n case $.TD:\n case $.TFOOT:\n case $.TH:\n case $.THEAD:\n case $.TR: {\n // Ignore token\n break;\n }\n default: {\n tokenInTable(p, token);\n }\n }\n}\nfunction tokenInTable(p, token) {\n const savedFosterParentingState = p.fosterParentingEnabled;\n p.fosterParentingEnabled = true;\n // Process token in `In Body` mode\n modeInBody(p, token);\n p.fosterParentingEnabled = savedFosterParentingState;\n}\n// The \"in table text\" insertion mode\n//------------------------------------------------------------------\nfunction whitespaceCharacterInTableText(p, token) {\n p.pendingCharacterTokens.push(token);\n}\nfunction characterInTableText(p, token) {\n p.pendingCharacterTokens.push(token);\n p.hasNonWhitespacePendingCharacterToken = true;\n}\nfunction tokenInTableText(p, token) {\n let i = 0;\n if (p.hasNonWhitespacePendingCharacterToken) {\n for (; i < p.pendingCharacterTokens.length; i++) {\n tokenInTable(p, p.pendingCharacterTokens[i]);\n }\n }\n else {\n for (; i < p.pendingCharacterTokens.length; i++) {\n p._insertCharacters(p.pendingCharacterTokens[i]);\n }\n }\n p.insertionMode = p.originalInsertionMode;\n p._processToken(token);\n}\n// The \"in caption\" insertion mode\n//------------------------------------------------------------------\nconst TABLE_VOID_ELEMENTS = new Set([$.CAPTION, $.COL, $.COLGROUP, $.TBODY, $.TD, $.TFOOT, $.TH, $.THEAD, $.TR]);\nfunction startTagInCaption(p, token) {\n const tn = token.tagID;\n if (TABLE_VOID_ELEMENTS.has(tn)) {\n if (p.openElements.hasInTableScope($.CAPTION)) {\n p.openElements.generateImpliedEndTags();\n p.openElements.popUntilTagNamePopped($.CAPTION);\n p.activeFormattingElements.clearToLastMarker();\n p.insertionMode = InsertionMode.IN_TABLE;\n startTagInTable(p, token);\n }\n }\n else {\n startTagInBody(p, token);\n }\n}\nfunction endTagInCaption(p, token) {\n const tn = token.tagID;\n switch (tn) {\n case $.CAPTION:\n case $.TABLE: {\n if (p.openElements.hasInTableScope($.CAPTION)) {\n p.openElements.generateImpliedEndTags();\n p.openElements.popUntilTagNamePopped($.CAPTION);\n p.activeFormattingElements.clearToLastMarker();\n p.insertionMode = InsertionMode.IN_TABLE;\n if (tn === $.TABLE) {\n endTagInTable(p, token);\n }\n }\n break;\n }\n case $.BODY:\n case $.COL:\n case $.COLGROUP:\n case $.HTML:\n case $.TBODY:\n case $.TD:\n case $.TFOOT:\n case $.TH:\n case $.THEAD:\n case $.TR: {\n // Ignore token\n break;\n }\n default: {\n endTagInBody(p, token);\n }\n }\n}\n// The \"in column group\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInColumnGroup(p, token) {\n switch (token.tagID) {\n case $.HTML: {\n startTagInBody(p, token);\n break;\n }\n case $.COL: {\n p._appendElement(token, NS.HTML);\n token.ackSelfClosing = true;\n break;\n }\n case $.TEMPLATE: {\n startTagInHead(p, token);\n break;\n }\n default: {\n tokenInColumnGroup(p, token);\n }\n }\n}\nfunction endTagInColumnGroup(p, token) {\n switch (token.tagID) {\n case $.COLGROUP: {\n if (p.openElements.currentTagId === $.COLGROUP) {\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_TABLE;\n }\n break;\n }\n case $.TEMPLATE: {\n templateEndTagInHead(p, token);\n break;\n }\n case $.COL: {\n // Ignore token\n break;\n }\n default: {\n tokenInColumnGroup(p, token);\n }\n }\n}\nfunction tokenInColumnGroup(p, token) {\n if (p.openElements.currentTagId === $.COLGROUP) {\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_TABLE;\n p._processToken(token);\n }\n}\n// The \"in table body\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInTableBody(p, token) {\n switch (token.tagID) {\n case $.TR: {\n p.openElements.clearBackToTableBodyContext();\n p._insertElement(token, NS.HTML);\n p.insertionMode = InsertionMode.IN_ROW;\n break;\n }\n case $.TH:\n case $.TD: {\n p.openElements.clearBackToTableBodyContext();\n p._insertFakeElement(TN.TR, $.TR);\n p.insertionMode = InsertionMode.IN_ROW;\n startTagInRow(p, token);\n break;\n }\n case $.CAPTION:\n case $.COL:\n case $.COLGROUP:\n case $.TBODY:\n case $.TFOOT:\n case $.THEAD: {\n if (p.openElements.hasTableBodyContextInTableScope()) {\n p.openElements.clearBackToTableBodyContext();\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_TABLE;\n startTagInTable(p, token);\n }\n break;\n }\n default: {\n startTagInTable(p, token);\n }\n }\n}\nfunction endTagInTableBody(p, token) {\n const tn = token.tagID;\n switch (token.tagID) {\n case $.TBODY:\n case $.TFOOT:\n case $.THEAD: {\n if (p.openElements.hasInTableScope(tn)) {\n p.openElements.clearBackToTableBodyContext();\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_TABLE;\n }\n break;\n }\n case $.TABLE: {\n if (p.openElements.hasTableBodyContextInTableScope()) {\n p.openElements.clearBackToTableBodyContext();\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_TABLE;\n endTagInTable(p, token);\n }\n break;\n }\n case $.BODY:\n case $.CAPTION:\n case $.COL:\n case $.COLGROUP:\n case $.HTML:\n case $.TD:\n case $.TH:\n case $.TR: {\n // Ignore token\n break;\n }\n default: {\n endTagInTable(p, token);\n }\n }\n}\n// The \"in row\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInRow(p, token) {\n switch (token.tagID) {\n case $.TH:\n case $.TD: {\n p.openElements.clearBackToTableRowContext();\n p._insertElement(token, NS.HTML);\n p.insertionMode = InsertionMode.IN_CELL;\n p.activeFormattingElements.insertMarker();\n break;\n }\n case $.CAPTION:\n case $.COL:\n case $.COLGROUP:\n case $.TBODY:\n case $.TFOOT:\n case $.THEAD:\n case $.TR: {\n if (p.openElements.hasInTableScope($.TR)) {\n p.openElements.clearBackToTableRowContext();\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_TABLE_BODY;\n startTagInTableBody(p, token);\n }\n break;\n }\n default: {\n startTagInTable(p, token);\n }\n }\n}\nfunction endTagInRow(p, token) {\n switch (token.tagID) {\n case $.TR: {\n if (p.openElements.hasInTableScope($.TR)) {\n p.openElements.clearBackToTableRowContext();\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_TABLE_BODY;\n }\n break;\n }\n case $.TABLE: {\n if (p.openElements.hasInTableScope($.TR)) {\n p.openElements.clearBackToTableRowContext();\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_TABLE_BODY;\n endTagInTableBody(p, token);\n }\n break;\n }\n case $.TBODY:\n case $.TFOOT:\n case $.THEAD: {\n if (p.openElements.hasInTableScope(token.tagID) || p.openElements.hasInTableScope($.TR)) {\n p.openElements.clearBackToTableRowContext();\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_TABLE_BODY;\n endTagInTableBody(p, token);\n }\n break;\n }\n case $.BODY:\n case $.CAPTION:\n case $.COL:\n case $.COLGROUP:\n case $.HTML:\n case $.TD:\n case $.TH: {\n // Ignore end tag\n break;\n }\n default: {\n endTagInTable(p, token);\n }\n }\n}\n// The \"in cell\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInCell(p, token) {\n const tn = token.tagID;\n if (TABLE_VOID_ELEMENTS.has(tn)) {\n if (p.openElements.hasInTableScope($.TD) || p.openElements.hasInTableScope($.TH)) {\n p._closeTableCell();\n startTagInRow(p, token);\n }\n }\n else {\n startTagInBody(p, token);\n }\n}\nfunction endTagInCell(p, token) {\n const tn = token.tagID;\n switch (tn) {\n case $.TD:\n case $.TH: {\n if (p.openElements.hasInTableScope(tn)) {\n p.openElements.generateImpliedEndTags();\n p.openElements.popUntilTagNamePopped(tn);\n p.activeFormattingElements.clearToLastMarker();\n p.insertionMode = InsertionMode.IN_ROW;\n }\n break;\n }\n case $.TABLE:\n case $.TBODY:\n case $.TFOOT:\n case $.THEAD:\n case $.TR: {\n if (p.openElements.hasInTableScope(tn)) {\n p._closeTableCell();\n endTagInRow(p, token);\n }\n break;\n }\n case $.BODY:\n case $.CAPTION:\n case $.COL:\n case $.COLGROUP:\n case $.HTML: {\n // Ignore token\n break;\n }\n default: {\n endTagInBody(p, token);\n }\n }\n}\n// The \"in select\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInSelect(p, token) {\n switch (token.tagID) {\n case $.HTML: {\n startTagInBody(p, token);\n break;\n }\n case $.OPTION: {\n if (p.openElements.currentTagId === $.OPTION) {\n p.openElements.pop();\n }\n p._insertElement(token, NS.HTML);\n break;\n }\n case $.OPTGROUP: {\n if (p.openElements.currentTagId === $.OPTION) {\n p.openElements.pop();\n }\n if (p.openElements.currentTagId === $.OPTGROUP) {\n p.openElements.pop();\n }\n p._insertElement(token, NS.HTML);\n break;\n }\n case $.HR: {\n if (p.openElements.currentTagId === $.OPTION) {\n p.openElements.pop();\n }\n if (p.openElements.currentTagId === $.OPTGROUP) {\n p.openElements.pop();\n }\n p._appendElement(token, NS.HTML);\n token.ackSelfClosing = true;\n break;\n }\n case $.INPUT:\n case $.KEYGEN:\n case $.TEXTAREA:\n case $.SELECT: {\n if (p.openElements.hasInSelectScope($.SELECT)) {\n p.openElements.popUntilTagNamePopped($.SELECT);\n p._resetInsertionMode();\n if (token.tagID !== $.SELECT) {\n p._processStartTag(token);\n }\n }\n break;\n }\n case $.SCRIPT:\n case $.TEMPLATE: {\n startTagInHead(p, token);\n break;\n }\n default:\n // Do nothing\n }\n}\nfunction endTagInSelect(p, token) {\n switch (token.tagID) {\n case $.OPTGROUP: {\n if (p.openElements.stackTop > 0 &&\n p.openElements.currentTagId === $.OPTION &&\n p.openElements.tagIDs[p.openElements.stackTop - 1] === $.OPTGROUP) {\n p.openElements.pop();\n }\n if (p.openElements.currentTagId === $.OPTGROUP) {\n p.openElements.pop();\n }\n break;\n }\n case $.OPTION: {\n if (p.openElements.currentTagId === $.OPTION) {\n p.openElements.pop();\n }\n break;\n }\n case $.SELECT: {\n if (p.openElements.hasInSelectScope($.SELECT)) {\n p.openElements.popUntilTagNamePopped($.SELECT);\n p._resetInsertionMode();\n }\n break;\n }\n case $.TEMPLATE: {\n templateEndTagInHead(p, token);\n break;\n }\n default:\n // Do nothing\n }\n}\n// The \"in select in table\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInSelectInTable(p, token) {\n const tn = token.tagID;\n if (tn === $.CAPTION ||\n tn === $.TABLE ||\n tn === $.TBODY ||\n tn === $.TFOOT ||\n tn === $.THEAD ||\n tn === $.TR ||\n tn === $.TD ||\n tn === $.TH) {\n p.openElements.popUntilTagNamePopped($.SELECT);\n p._resetInsertionMode();\n p._processStartTag(token);\n }\n else {\n startTagInSelect(p, token);\n }\n}\nfunction endTagInSelectInTable(p, token) {\n const tn = token.tagID;\n if (tn === $.CAPTION ||\n tn === $.TABLE ||\n tn === $.TBODY ||\n tn === $.TFOOT ||\n tn === $.THEAD ||\n tn === $.TR ||\n tn === $.TD ||\n tn === $.TH) {\n if (p.openElements.hasInTableScope(tn)) {\n p.openElements.popUntilTagNamePopped($.SELECT);\n p._resetInsertionMode();\n p.onEndTag(token);\n }\n }\n else {\n endTagInSelect(p, token);\n }\n}\n// The \"in template\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInTemplate(p, token) {\n switch (token.tagID) {\n // First, handle tags that can start without a mode change\n case $.BASE:\n case $.BASEFONT:\n case $.BGSOUND:\n case $.LINK:\n case $.META:\n case $.NOFRAMES:\n case $.SCRIPT:\n case $.STYLE:\n case $.TEMPLATE:\n case $.TITLE: {\n startTagInHead(p, token);\n break;\n }\n // Re-process the token in the appropriate mode\n case $.CAPTION:\n case $.COLGROUP:\n case $.TBODY:\n case $.TFOOT:\n case $.THEAD: {\n p.tmplInsertionModeStack[0] = InsertionMode.IN_TABLE;\n p.insertionMode = InsertionMode.IN_TABLE;\n startTagInTable(p, token);\n break;\n }\n case $.COL: {\n p.tmplInsertionModeStack[0] = InsertionMode.IN_COLUMN_GROUP;\n p.insertionMode = InsertionMode.IN_COLUMN_GROUP;\n startTagInColumnGroup(p, token);\n break;\n }\n case $.TR: {\n p.tmplInsertionModeStack[0] = InsertionMode.IN_TABLE_BODY;\n p.insertionMode = InsertionMode.IN_TABLE_BODY;\n startTagInTableBody(p, token);\n break;\n }\n case $.TD:\n case $.TH: {\n p.tmplInsertionModeStack[0] = InsertionMode.IN_ROW;\n p.insertionMode = InsertionMode.IN_ROW;\n startTagInRow(p, token);\n break;\n }\n default: {\n p.tmplInsertionModeStack[0] = InsertionMode.IN_BODY;\n p.insertionMode = InsertionMode.IN_BODY;\n startTagInBody(p, token);\n }\n }\n}\nfunction endTagInTemplate(p, token) {\n if (token.tagID === $.TEMPLATE) {\n templateEndTagInHead(p, token);\n }\n}\nfunction eofInTemplate(p, token) {\n if (p.openElements.tmplCount > 0) {\n p.openElements.popUntilTagNamePopped($.TEMPLATE);\n p.activeFormattingElements.clearToLastMarker();\n p.tmplInsertionModeStack.shift();\n p._resetInsertionMode();\n p.onEof(token);\n }\n else {\n stopParsing(p, token);\n }\n}\n// The \"after body\" insertion mode\n//------------------------------------------------------------------\nfunction startTagAfterBody(p, token) {\n if (token.tagID === $.HTML) {\n startTagInBody(p, token);\n }\n else {\n tokenAfterBody(p, token);\n }\n}\nfunction endTagAfterBody(p, token) {\n var _a;\n if (token.tagID === $.HTML) {\n if (!p.fragmentContext) {\n p.insertionMode = InsertionMode.AFTER_AFTER_BODY;\n }\n //NOTE: <html> is never popped from the stack, so we need to updated\n //the end location explicitly.\n if (p.options.sourceCodeLocationInfo && p.openElements.tagIDs[0] === $.HTML) {\n p._setEndLocation(p.openElements.items[0], token);\n // Update the body element, if it doesn't have an end tag\n const bodyElement = p.openElements.items[1];\n if (bodyElement && !((_a = p.treeAdapter.getNodeSourceCodeLocation(bodyElement)) === null || _a === void 0 ? void 0 : _a.endTag)) {\n p._setEndLocation(bodyElement, token);\n }\n }\n }\n else {\n tokenAfterBody(p, token);\n }\n}\nfunction tokenAfterBody(p, token) {\n p.insertionMode = InsertionMode.IN_BODY;\n modeInBody(p, token);\n}\n// The \"in frameset\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInFrameset(p, token) {\n switch (token.tagID) {\n case $.HTML: {\n startTagInBody(p, token);\n break;\n }\n case $.FRAMESET: {\n p._insertElement(token, NS.HTML);\n break;\n }\n case $.FRAME: {\n p._appendElement(token, NS.HTML);\n token.ackSelfClosing = true;\n break;\n }\n case $.NOFRAMES: {\n startTagInHead(p, token);\n break;\n }\n default:\n // Do nothing\n }\n}\nfunction endTagInFrameset(p, token) {\n if (token.tagID === $.FRAMESET && !p.openElements.isRootHtmlElementCurrent()) {\n p.openElements.pop();\n if (!p.fragmentContext && p.openElements.currentTagId !== $.FRAMESET) {\n p.insertionMode = InsertionMode.AFTER_FRAMESET;\n }\n }\n}\n// The \"after frameset\" insertion mode\n//------------------------------------------------------------------\nfunction startTagAfterFrameset(p, token) {\n switch (token.tagID) {\n case $.HTML: {\n startTagInBody(p, token);\n break;\n }\n case $.NOFRAMES: {\n startTagInHead(p, token);\n break;\n }\n default:\n // Do nothing\n }\n}\nfunction endTagAfterFrameset(p, token) {\n if (token.tagID === $.HTML) {\n p.insertionMode = InsertionMode.AFTER_AFTER_FRAMESET;\n }\n}\n// The \"after after body\" insertion mode\n//------------------------------------------------------------------\nfunction startTagAfterAfterBody(p, token) {\n if (token.tagID === $.HTML) {\n startTagInBody(p, token);\n }\n else {\n tokenAfterAfterBody(p, token);\n }\n}\nfunction tokenAfterAfterBody(p, token) {\n p.insertionMode = InsertionMode.IN_BODY;\n modeInBody(p, token);\n}\n// The \"after after frameset\" insertion mode\n//------------------------------------------------------------------\nfunction startTagAfterAfterFrameset(p, token) {\n switch (token.tagID) {\n case $.HTML: {\n startTagInBody(p, token);\n break;\n }\n case $.NOFRAMES: {\n startTagInHead(p, token);\n break;\n }\n default:\n // Do nothing\n }\n}\n// The rules for parsing tokens in foreign content\n//------------------------------------------------------------------\nfunction nullCharacterInForeignContent(p, token) {\n token.chars = unicode.REPLACEMENT_CHARACTER;\n p._insertCharacters(token);\n}\nfunction characterInForeignContent(p, token) {\n p._insertCharacters(token);\n p.framesetOk = false;\n}\nfunction popUntilHtmlOrIntegrationPoint(p) {\n while (p.treeAdapter.getNamespaceURI(p.openElements.current) !== NS.HTML &&\n p.openElements.currentTagId !== undefined &&\n !p._isIntegrationPoint(p.openElements.currentTagId, p.openElements.current)) {\n p.openElements.pop();\n }\n}\nfunction startTagInForeignContent(p, token) {\n if (foreignContent.causesExit(token)) {\n popUntilHtmlOrIntegrationPoint(p);\n p._startTagOutsideForeignContent(token);\n }\n else {\n const current = p._getAdjustedCurrentElement();\n const currentNs = p.treeAdapter.getNamespaceURI(current);\n if (currentNs === NS.MATHML) {\n foreignContent.adjustTokenMathMLAttrs(token);\n }\n else if (currentNs === NS.SVG) {\n foreignContent.adjustTokenSVGTagName(token);\n foreignContent.adjustTokenSVGAttrs(token);\n }\n foreignContent.adjustTokenXMLAttrs(token);\n if (token.selfClosing) {\n p._appendElement(token, currentNs);\n }\n else {\n p._insertElement(token, currentNs);\n }\n token.ackSelfClosing = true;\n }\n}\nfunction endTagInForeignContent(p, token) {\n if (token.tagID === $.P || token.tagID === $.BR) {\n popUntilHtmlOrIntegrationPoint(p);\n p._endTagOutsideForeignContent(token);\n return;\n }\n for (let i = p.openElements.stackTop; i > 0; i--) {\n const element = p.openElements.items[i];\n if (p.treeAdapter.getNamespaceURI(element) === NS.HTML) {\n p._endTagOutsideForeignContent(token);\n break;\n }\n const tagName = p.treeAdapter.getTagName(element);\n if (tagName.toLowerCase() === token.tagName) {\n //NOTE: update the token tag name for `_setEndLocation`.\n token.tagName = tagName;\n p.openElements.shortenToLength(i);\n break;\n }\n }\n}\n","import { TAG_NAMES as $, NS, hasUnescapedText } from '../common/html.js';\nimport { escapeText, escapeAttribute } from 'entities/escape';\nimport { defaultTreeAdapter } from '../tree-adapters/default.js';\n// Sets\nconst VOID_ELEMENTS = new Set([\n $.AREA,\n $.BASE,\n $.BASEFONT,\n $.BGSOUND,\n $.BR,\n $.COL,\n $.EMBED,\n $.FRAME,\n $.HR,\n $.IMG,\n $.INPUT,\n $.KEYGEN,\n $.LINK,\n $.META,\n $.PARAM,\n $.SOURCE,\n $.TRACK,\n $.WBR,\n]);\nfunction isVoidElement(node, options) {\n return (options.treeAdapter.isElementNode(node) &&\n options.treeAdapter.getNamespaceURI(node) === NS.HTML &&\n VOID_ELEMENTS.has(options.treeAdapter.getTagName(node)));\n}\nconst defaultOpts = { treeAdapter: defaultTreeAdapter, scriptingEnabled: true };\n/**\n * Serializes an AST node to an HTML string.\n *\n * @example\n *\n * ```js\n * const parse5 = require('parse5');\n *\n * const document = parse5.parse('<!DOCTYPE html><html><head></head><body>Hi there!</body></html>');\n *\n * // Serializes a document.\n * const html = parse5.serialize(document);\n *\n * // Serializes the <html> element content.\n * const str = parse5.serialize(document.childNodes[1]);\n *\n * console.log(str); //> '<head></head><body>Hi there!</body>'\n * ```\n *\n * @param node Node to serialize.\n * @param options Serialization options.\n */\nexport function serialize(node, options) {\n const opts = { ...defaultOpts, ...options };\n if (isVoidElement(node, opts)) {\n return '';\n }\n return serializeChildNodes(node, opts);\n}\n/**\n * Serializes an AST element node to an HTML string, including the element node.\n *\n * @example\n *\n * ```js\n * const parse5 = require('parse5');\n *\n * const document = parse5.parseFragment('<div>Hello, <b>world</b>!</div>');\n *\n * // Serializes the <div> element.\n * const str = parse5.serializeOuter(document.childNodes[0]);\n *\n * console.log(str); //> '<div>Hello, <b>world</b>!</div>'\n * ```\n *\n * @param node Node to serialize.\n * @param options Serialization options.\n */\nexport function serializeOuter(node, options) {\n const opts = { ...defaultOpts, ...options };\n return serializeNode(node, opts);\n}\nfunction serializeChildNodes(parentNode, options) {\n let html = '';\n // Get container of the child nodes\n const container = options.treeAdapter.isElementNode(parentNode) &&\n options.treeAdapter.getTagName(parentNode) === $.TEMPLATE &&\n options.treeAdapter.getNamespaceURI(parentNode) === NS.HTML\n ? options.treeAdapter.getTemplateContent(parentNode)\n : parentNode;\n const childNodes = options.treeAdapter.getChildNodes(container);\n if (childNodes) {\n for (const currentNode of childNodes) {\n html += serializeNode(currentNode, options);\n }\n }\n return html;\n}\nfunction serializeNode(node, options) {\n if (options.treeAdapter.isElementNode(node)) {\n return serializeElement(node, options);\n }\n if (options.treeAdapter.isTextNode(node)) {\n return serializeTextNode(node, options);\n }\n if (options.treeAdapter.isCommentNode(node)) {\n return serializeCommentNode(node, options);\n }\n if (options.treeAdapter.isDocumentTypeNode(node)) {\n return serializeDocumentTypeNode(node, options);\n }\n // Return an empty string for unknown nodes\n return '';\n}\nfunction serializeElement(node, options) {\n const tn = options.treeAdapter.getTagName(node);\n return `<${tn}${serializeAttributes(node, options)}>${isVoidElement(node, options) ? '' : `${serializeChildNodes(node, options)}</${tn}>`}`;\n}\nfunction serializeAttributes(node, { treeAdapter }) {\n let html = '';\n for (const attr of treeAdapter.getAttrList(node)) {\n html += ' ';\n if (attr.namespace) {\n switch (attr.namespace) {\n case NS.XML: {\n html += `xml:${attr.name}`;\n break;\n }\n case NS.XMLNS: {\n if (attr.name !== 'xmlns') {\n html += 'xmlns:';\n }\n html += attr.name;\n break;\n }\n case NS.XLINK: {\n html += `xlink:${attr.name}`;\n break;\n }\n default: {\n html += `${attr.prefix}:${attr.name}`;\n }\n }\n }\n else {\n html += attr.name;\n }\n html += `=\"${escapeAttribute(attr.value)}\"`;\n }\n return html;\n}\nfunction serializeTextNode(node, options) {\n const { treeAdapter } = options;\n const content = treeAdapter.getTextNodeContent(node);\n const parent = treeAdapter.getParentNode(node);\n const parentTn = parent && treeAdapter.isElementNode(parent) && treeAdapter.getTagName(parent);\n return parentTn &&\n treeAdapter.getNamespaceURI(parent) === NS.HTML &&\n hasUnescapedText(parentTn, options.scriptingEnabled)\n ? content\n : escapeText(content);\n}\nfunction serializeCommentNode(node, { treeAdapter }) {\n return `<!--${treeAdapter.getCommentNodeContent(node)}-->`;\n}\nfunction serializeDocumentTypeNode(node, { treeAdapter }) {\n return `<!DOCTYPE ${treeAdapter.getDocumentTypeNodeName(node)}>`;\n}\n","import { Parser } from './parser/index.js';\nexport { defaultTreeAdapter } from './tree-adapters/default.js';\nexport { /** @internal */ Parser } from './parser/index.js';\nexport { serialize, serializeOuter } from './serializer/index.js';\nexport { ERR as ErrorCodes } from './common/error-codes.js';\n/** @internal */\nexport * as foreignContent from './common/foreign-content.js';\nexport * as html from './common/html.js';\nexport * as Token from './common/token.js';\n/** @internal */\nexport { Tokenizer, TokenizerMode } from './tokenizer/index.js';\n// Shorthands\n/**\n * Parses an HTML string.\n *\n * @param html Input HTML string.\n * @param options Parsing options.\n * @returns Document\n *\n * @example\n *\n * ```js\n * const parse5 = require('parse5');\n *\n * const document = parse5.parse('<!DOCTYPE html><html><head></head><body>Hi there!</body></html>');\n *\n * console.log(document.childNodes[1].tagName); //> 'html'\n *```\n */\nexport function parse(html, options) {\n return Parser.parse(html, options);\n}\nexport function parseFragment(fragmentContext, html, options) {\n if (typeof fragmentContext === 'string') {\n options = html;\n html = fragmentContext;\n fragmentContext = null;\n }\n const parser = Parser.getFragmentParser(fragmentContext, options);\n parser.tokenizer.write(html, true);\n return parser.getFragment();\n}\n","/** Prebuilt portable MCP Apps resources. This module never compiles source. */\nimport { createHash } from 'node:crypto';\nimport { type DefaultTreeAdapterMap, parse } from 'parse5';\nimport type { McpAppPrincipal } from './server.js';\n\nexport const MCP_APP_RESOURCE_MIME = 'text/html;profile=mcp-app';\nexport const MCP_APP_RESOURCE_MAX_BYTES = 100 * 1024;\nexport interface McpAppResourceCsp {\n connectDomains?: readonly string[];\n resourceDomains?: readonly string[];\n frameDomains?: readonly string[];\n baseUriDomains?: readonly string[];\n}\nexport interface McpAppResourceDefinition {\n /** Absolute ui:// URI containing the declared version as a path segment. */\n uri: string;\n name: string;\n version: string;\n /** Reproducibly built UTF-8 HTML; never per-user data or credentials. */\n html: string;\n description?: string;\n /** Bounded JSON extension metadata; portable ui and digest keys are reserved. */\n metadata?: Record<string, unknown>;\n /** Only explicit static templates may be read without authentication. */\n public?: boolean;\n csp?: McpAppResourceCsp;\n permissions?: Partial<\n Record<\n 'camera' | 'microphone' | 'geolocation' | 'clipboardWrite',\n Record<string, never>\n >\n >;\n}\nexport interface McpAppResource {\n uri: string;\n name: string;\n description?: string;\n mimeType: typeof MCP_APP_RESOURCE_MIME;\n _meta: Record<string, unknown> & {\n ui: {\n csp: Required<McpAppResourceCsp>;\n permissions: NonNullable<McpAppResourceDefinition['permissions']>;\n };\n 'com.happyvertical.smrt/resource': {\n version: string;\n sha256: string;\n bytes: number;\n };\n };\n}\nexport interface McpAppResourceContent extends McpAppResource {\n text: string;\n}\nexport type McpResourcePolicy = (context: {\n principal: McpAppPrincipal | null;\n resource: McpAppResource;\n}) => boolean | Promise<boolean>;\nexport interface PreparedMcpAppResource {\n descriptor: McpAppResource;\n html: string;\n public: boolean;\n}\n\nfunction record(\n value: unknown,\n label: string,\n): asserts value is Record<string, unknown> {\n if (!value || typeof value !== 'object' || Array.isArray(value))\n throw new TypeError(`${label} must be an object.`);\n}\nfunction origin(value: string, connect = false): string {\n const url = new URL(value);\n if (\n !(connect ? ['https:', 'wss:'] : ['https:']).includes(url.protocol) ||\n url.origin !== value ||\n url.username ||\n url.password ||\n value.includes('*')\n ) {\n throw new TypeError(\n 'Resource CSP entries must be exact HTTPS origins (WSS allowed for connections).',\n );\n }\n return value;\n}\n\n/** Validate static URL references; dynamic script networking still requires host CSP enforcement. */\nfunction validateAssets(html: string, csp: Required<McpAppResourceCsp>): void {\n const check = (value: string, frames = false) => {\n if (\n !value ||\n value.startsWith('#') ||\n /^data:image\\/(?:png|jpeg|gif|webp);base64,[A-Za-z0-9+/=]+$/.test(value)\n )\n return;\n // Encoded/relative references cannot be audited against an exact origin.\n if (/[&\\\\\\s]/.test(value))\n throw new TypeError(\n 'Resource asset references must be literal absolute URLs.',\n );\n const url = new URL(value);\n if (\n url.protocol !== 'https:' ||\n url.username ||\n url.password ||\n !(frames ? csp.frameDomains : csp.resourceDomains).includes(url.origin)\n ) {\n throw new TypeError('Resource contains an undeclared external asset.');\n }\n };\n function checkCss(css: string): void {\n if (/[\\\\&]|@import\\b|(?:image-set|image|src)\\s*\\(/i.test(css))\n throw new TypeError(\n 'CSS asset escapes and imports are unsupported; bundle assets inline.',\n );\n for (const url of css.matchAll(\n /url\\(\\s*(?:\"([^\"]*)\"|'([^']*)'|([^)]*))\\s*\\)/gi,\n ))\n check((url[1] ?? url[2] ?? url[3]).trim());\n }\n function visit(node: DefaultTreeAdapterMap['node']): void {\n if ('tagName' in node) {\n const tag = node.tagName.toLowerCase();\n if (['base', 'object', 'embed', 'meta'].includes(tag))\n throw new TypeError(\n 'Resource contains an unsupported asset construct; bundle assets inline.',\n );\n for (const attribute of node.attrs) {\n const name = attribute.name.toLowerCase();\n if (['srcdoc', 'srcset', 'imagesrcset'].includes(name))\n throw new TypeError(\n 'Resource contains an unsupported asset construct; bundle assets inline.',\n );\n if (\n [\n 'src',\n 'href',\n 'poster',\n 'data',\n 'action',\n 'formaction',\n 'background',\n 'ping',\n ].includes(name)\n )\n check(attribute.value, tag === 'iframe');\n if (\n [\n 'style',\n 'fill',\n 'stroke',\n 'filter',\n 'clip-path',\n 'mask',\n 'cursor',\n ].includes(name)\n )\n checkCss(attribute.value);\n }\n if (tag === 'style') {\n checkCss(\n node.childNodes\n .map((child) => ('value' in child ? child.value : ''))\n .join(''),\n );\n }\n if ('content' in node)\n visit(node.content as DefaultTreeAdapterMap['documentFragment']);\n }\n if ('childNodes' in node) for (const child of node.childNodes) visit(child);\n }\n // HTML parsing preserves raw-text script boundaries, decoded attributes and\n // comments. Never interpret JavaScript new URL(...) or template strings as CSS.\n visit(parse(html));\n}\n\n/** Clone only inert, bounded JSON; extension data never becomes policy input. */\nfunction resourceMetadata(\n metadata: Record<string, unknown> | undefined,\n): Record<string, unknown> {\n if (metadata === undefined) return {};\n record(metadata, 'Resource metadata');\n if (\n Object.hasOwn(metadata, 'ui') ||\n Object.hasOwn(metadata, 'com.happyvertical.smrt/resource')\n )\n throw new TypeError('Resource metadata contains a reserved key.');\n const ancestors = new WeakSet<object>();\n function validate(value: unknown, depth = 0): void {\n if (depth > 16) throw new TypeError('Resource metadata exceeds 16 levels.');\n if (\n value === null ||\n typeof value === 'string' ||\n typeof value === 'boolean'\n )\n return;\n if (typeof value === 'number' && Number.isFinite(value)) return;\n if (typeof value !== 'object' || !value)\n throw new TypeError(\n 'Resource metadata must contain only plain JSON values.',\n );\n if (\n !Array.isArray(value) &&\n Object.getPrototypeOf(value) !== Object.prototype &&\n Object.getPrototypeOf(value) !== null\n )\n throw new TypeError(\n 'Resource metadata must contain only plain JSON objects.',\n );\n if (ancestors.has(value))\n throw new TypeError('Resource metadata must not contain cycles.');\n ancestors.add(value);\n for (const descriptor of Object.values(\n Object.getOwnPropertyDescriptors(value),\n )) {\n if ('get' in descriptor || 'set' in descriptor)\n throw new TypeError('Resource metadata accessors are not permitted.');\n validate(descriptor.value, depth + 1);\n }\n if (Object.getOwnPropertySymbols(value).length)\n throw new TypeError('Resource metadata symbol keys are not permitted.');\n ancestors.delete(value);\n }\n validate(metadata);\n const encoded = JSON.stringify(metadata);\n if (Buffer.byteLength(encoded, 'utf8') > 65536)\n throw new RangeError('Resource metadata exceeds 64 KiB.');\n return JSON.parse(encoded) as Record<string, unknown>;\n}\n\n/** Snapshot and validate a deterministic declaration at application startup/build. */\nexport function prepareMcpAppResource(\n definition: McpAppResourceDefinition,\n): PreparedMcpAppResource {\n record(definition, 'Resource');\n const uri = new URL(definition.uri);\n if (\n uri.protocol !== 'ui:' ||\n !uri.hostname ||\n uri.username ||\n uri.password ||\n uri.search ||\n uri.hash ||\n uri.href !== definition.uri ||\n !/^[A-Za-z0-9._-]+$/.test(definition.version) ||\n !uri.pathname.split('/').includes(definition.version)\n ) {\n throw new TypeError(\n 'Resource URI must be a canonical ui:// URI with an explicit version path segment.',\n );\n }\n if (\n typeof definition.name !== 'string' ||\n !definition.name.trim() ||\n typeof definition.html !== 'string' ||\n !definition.html.trim()\n )\n throw new TypeError('Resource name and prebuilt HTML are required.');\n if (\n definition.description !== undefined &&\n typeof definition.description !== 'string'\n )\n throw new TypeError('Resource description must be a string.');\n if (definition.public !== undefined && typeof definition.public !== 'boolean')\n throw new TypeError('Resource public must be boolean.');\n const bytes = Buffer.byteLength(definition.html, 'utf8');\n if (bytes > MCP_APP_RESOURCE_MAX_BYTES)\n throw new RangeError('Resource exceeds the 100 KiB raw HTML budget.');\n const csp: Required<McpAppResourceCsp> = {\n connectDomains: [],\n resourceDomains: [],\n frameDomains: [],\n baseUriDomains: [],\n };\n if (definition.csp !== undefined) {\n record(definition.csp, 'Resource CSP');\n for (const [key, values] of Object.entries(definition.csp)) {\n if (\n !Object.hasOwn(csp, key) ||\n !Array.isArray(values) ||\n values.some((value) => typeof value !== 'string')\n )\n throw new TypeError('Unknown or malformed resource CSP directive.');\n csp[key as keyof McpAppResourceCsp] = [\n ...new Set(\n values.map((value) => origin(value, key === 'connectDomains')),\n ),\n ].sort();\n }\n }\n const permissions: NonNullable<McpAppResourceDefinition['permissions']> = {};\n if (definition.permissions !== undefined) {\n record(definition.permissions, 'Resource permissions');\n for (const [key, value] of Object.entries(definition.permissions)) {\n record(value, 'Resource permission');\n if (\n !['camera', 'microphone', 'geolocation', 'clipboardWrite'].includes(\n key,\n ) ||\n Object.keys(value).length\n )\n throw new TypeError('Unknown or malformed resource permission.');\n permissions[key as keyof typeof permissions] = {};\n }\n }\n validateAssets(definition.html, csp);\n return {\n html: definition.html,\n public: definition.public === true,\n descriptor: {\n uri: definition.uri,\n name: definition.name,\n mimeType: MCP_APP_RESOURCE_MIME,\n ...(definition.description === undefined\n ? {}\n : { description: definition.description }),\n _meta: {\n ...resourceMetadata(definition.metadata),\n ui: { csp, permissions },\n 'com.happyvertical.smrt/resource': {\n version: definition.version,\n sha256: createHash('sha256')\n .update(definition.html, 'utf8')\n .digest('hex'),\n bytes,\n },\n },\n },\n };\n}\n","/**\n * Tool-name policy helpers — used by `McpAppServer` to filter the full set\n * of generated tools down to what the calling principal is allowed to see,\n * and to decide whether an unauthenticated tool call should be permitted.\n *\n * @packageDocumentation\n */\n\n/**\n * Match a tool name against a glob-ish pattern with `*` wildcards.\n *\n * - Empty pattern → never matches.\n * - `*` → matches everything.\n * - `prefix_*` → matches anything starting with `prefix_`.\n * - `*_suffix` → matches anything ending with `_suffix`.\n * - `a_*_b` → matches any name containing `a_`, then any text, then `_b`.\n *\n * No regex characters are special besides `*` — the input is treated as a\n * literal string with star wildcards.\n */\nexport function matchesToolPattern(toolName: string, pattern: string): boolean {\n if (!pattern) return false;\n if (pattern === '*') return true;\n\n const parts = pattern.split('*');\n if (parts.length === 1) return toolName === pattern;\n\n let cursor = 0;\n if (parts[0] && !toolName.startsWith(parts[0])) return false;\n for (const part of parts) {\n if (!part) continue;\n const index = toolName.indexOf(part, cursor);\n if (index < 0) return false;\n cursor = index + part.length;\n }\n\n const last = parts.at(-1);\n return !last || toolName.endsWith(last);\n}\n\n/**\n * Read-only tool detection. Generated SMRT MCP tools follow the naming\n * convention `<class>_<verb>`; we treat `_list` and `_get` as read-only.\n */\nexport function isReadOnlyToolName(toolName: string): boolean {\n return toolName.endsWith('_list') || toolName.endsWith('_get');\n}\n\n/**\n * Check whether a tool name is currently allowed for unauthenticated callers\n * given the configured public-tool patterns. Only read-only tools may ever\n * be public, regardless of pattern.\n */\nexport function isPublicToolName(\n toolName: string,\n patterns: readonly string[],\n): boolean {\n return (\n isReadOnlyToolName(toolName) &&\n patterns.some((pattern) => matchesToolPattern(toolName, pattern))\n );\n}\n\n/**\n * Check public eligibility using a descriptor's canonical read annotation when\n * available. The legacy name rule remains for generated catalogs predating\n * canonical annotations.\n */\nexport function isPublicMcpTool(\n tool: {\n name: string;\n annotations?: { readOnlyHint?: boolean };\n },\n patterns: readonly string[],\n): boolean {\n const readOnly =\n tool.annotations?.readOnlyHint ?? isReadOnlyToolName(tool.name);\n return (\n readOnly &&\n patterns.some((pattern) => matchesToolPattern(tool.name, pattern))\n );\n}\n\n/** Canonical tool effect vocabulary, shared with WebMCP `effects`. */\nexport type McpToolEffect = 'read' | 'write' | 'destructive';\n\n/** Every supported {@link McpToolEffect}. */\nexport const MCP_TOOL_EFFECTS: readonly McpToolEffect[] = Object.freeze([\n 'read',\n 'write',\n 'destructive',\n]);\n\n/**\n * Classify a descriptor's effect. `read` uses the same read-only detection as\n * {@link isPublicMcpTool} (the canonical `readOnlyHint`, else the `_list`/`_get`\n * name rule). Any other tool is `destructive` unless it explicitly declares\n * `destructiveHint: false` (MCP's default for a non-read-only tool), so an\n * undeclared tool never counts as a mere write.\n */\nexport function mcpToolEffect(tool: {\n name: string;\n annotations?: { readOnlyHint?: boolean; destructiveHint?: boolean };\n}): McpToolEffect {\n const readOnly =\n tool.annotations?.readOnlyHint ?? isReadOnlyToolName(tool.name);\n if (readOnly) return 'read';\n return tool.annotations?.destructiveHint === false ? 'write' : 'destructive';\n}\n\n/**\n * Lower-case `<class>_` prefixes the app considers \"allowed core tools\"\n * given a list of SMRT class names. Used to build the allow-list for\n * `McpAppServer.listTools`.\n */\nexport function classNamePrefixes(\n classNames: readonly string[],\n): ReadonlySet<string> {\n return new Set(classNames.map((className) => `${className.toLowerCase()}_`));\n}\n\n/**\n * Whether a given tool name starts with any of the configured class\n * prefixes.\n */\nexport function isAllowedCoreTool(\n toolName: string,\n prefixes: ReadonlySet<string>,\n): boolean {\n for (const prefix of prefixes) {\n if (toolName.startsWith(prefix)) return true;\n }\n return false;\n}\n\n/**\n * Compare tool names by Unicode code unit, rather than the host locale, so a\n * catalog has one byte-stable order across every runtime.\n */\nexport function compareMcpToolNames(left: string, right: string): number {\n return left < right ? -1 : left > right ? 1 : 0;\n}\n","/**\n * `createMcpAppServer` returns the framework-agnostic core that backs an\n * app's HTTP MCP endpoints and transport-neutral protocol adapter. It wraps\n * `MCPGenerator` from `@happyvertical/smrt-core` with:\n *\n * - an allow-list of SMRT class names (so apps publish a subset of their\n * objects, not everything decorated with `@smrt()`),\n * - a public-tool policy for unauthenticated callers (read-only patterns\n * via `publicToolPatterns`),\n * - an optional principal-aware `toolPolicy`, used for both discovery and\n * direct calls,\n * - a pluggable `workflowAssertions` hook so apps can guard their own\n * domain-specific tool calls (e.g. \"approval requires an authenticated\n * user\") without that policy living in this package.\n *\n * @packageDocumentation\n */\n\nimport {\n isTenantScopedClassResolved,\n ObjectRegistry,\n} from '@happyvertical/smrt-core';\nimport type {\n MCPConfig,\n MCPResponse,\n MCPTool,\n MCPToolIdentity,\n} from '@happyvertical/smrt-core/generators/mcp';\nimport {\n MCP_STABLE_CATALOG_TTL_MS,\n MCPGenerator,\n} from '@happyvertical/smrt-core/generators/mcp';\nimport {\n type McpTask,\n McpTaskNotFoundError,\n McpTaskStore,\n SmrtJobCollection,\n} from '@happyvertical/smrt-jobs';\nimport type { DatabaseInterface } from '@happyvertical/sql';\nimport {\n authoredMcpToolError,\n MCP_AUTHENTICATION_REQUIRED_CODE,\n MCP_TOOL_ACCESS_DENIED_CODE,\n MCP_TOOL_NOT_FOUND_CODE,\n McpAccessError,\n type McpToolErrorInfo,\n safeMcpToolError,\n} from './errors.js';\nimport {\n type McpAppResource,\n type McpAppResourceContent,\n type McpAppResourceDefinition,\n type McpResourcePolicy,\n prepareMcpAppResource,\n} from './resources.js';\nimport {\n compareMcpToolNames,\n isPublicMcpTool,\n MCP_TOOL_EFFECTS,\n type McpToolEffect,\n mcpToolEffect,\n} from './tools.js';\nimport {\n createMcpWorkflowTool,\n type McpWorkflowTool,\n type McpWorkflowToolDefinition,\n} from './workflow-tools.js';\n\n/**\n * Generic authenticated caller information available to app-MCP policy.\n *\n * `kind`, `roles`, and `scopes` are deliberately unconstrained so an app can\n * represent a human or a scoped service without this package encoding an\n * application's identity or capability model. A missing principal means the\n * request is unauthenticated.\n */\n/**\n * How a bearer principal's tenant authority may be established when the\n * route binds it (`runtime.runAsPrincipal`): `direct` needs an active direct\n * membership in exactly `tenantId`; `direct-or-inherited` also accepts\n * authority inherited from an active inheritable ancestor membership.\n */\nexport type McpTenantBinding = 'direct' | 'direct-or-inherited';\n\n/**\n * The verified credential identity behind a principal, stamped only by the\n * authentication adapters (never request input, never a principal mapper):\n * the token `issuer`, `subject` and OAuth `clientId` the server itself\n * validated. Surfaced to {@link McpToolCallAuditEvent} for audit.\n */\nexport interface McpPrincipalIdentity {\n issuer: string;\n subject: string;\n clientId?: string;\n}\n\nexport interface McpAppPrincipal {\n id?: string;\n /** Adapter-stamped verified credential identity; see {@link McpPrincipalIdentity}. */\n identity?: McpPrincipalIdentity;\n /** Tenant boundary for task ownership and generated tenant-scoped actions. */\n tenantId?: string;\n /** Trusted operator override for generated tenant-scoped actions. */\n allowCrossTenant?: boolean;\n kind?: string;\n roles?: string[];\n scopes?: string[];\n /**\n * Binding mode carried from the authentication adapter, never request\n * input: local owner tokens are `direct`; hosted access tokens default to\n * `direct-or-inherited` unless their mapping narrows it.\n */\n tenantBinding?: McpTenantBinding;\n}\n\n/** Minimal legacy user shape used for generated tool-call attribution. */\nexport interface McpAppUser extends McpAppPrincipal {\n id: string;\n}\n\n/** How a call ended, as reported to {@link CreateMcpAppServerOptions.onToolCall}. */\nexport type McpToolCallOutcome = 'ok' | 'denied' | 'error';\n\n/**\n * One audited tool call. Every `tools/call` and task-creating call produces\n * exactly one event, including calls refused before any handler ran\n * (unknown or filtered tool, authentication, `toolPolicy`, workflow\n * assertion denials).\n *\n * `principal` and `identity` are what this server authenticated for the\n * request (adapter-derived), never anything the client claimed; they are\n * `null` for an unauthenticated call or one whose adapter stamps no\n * credential identity (session principals). `tool` is the name the caller\n * requested (truncated), which is client-supplied for an unknown tool.\n * `error` is only the safe `{ code, message }` an agent could see, never a\n * stack or raw error.\n */\nexport interface McpToolCallAuditEvent {\n tool: string;\n principal: Readonly<McpAppPrincipal> | null;\n identity: Readonly<McpPrincipalIdentity> | null;\n outcome: McpToolCallOutcome;\n error?: Readonly<McpToolErrorInfo>;\n}\n\n/** Context supplied to the optional per-tool principal policy. */\nexport interface McpToolPolicyContext {\n principal: McpAppPrincipal | null;\n tool: MCPTool;\n}\n\n/**\n * Per-tool access policy. Return `true` to expose/allow the tool and `false`\n * to hide it from discovery and deny a direct call. A thrown error is treated\n * as a denial so policy implementation details cannot escape the app-MCP\n * boundary.\n */\nexport type McpToolPolicy = (\n context: McpToolPolicyContext,\n) => boolean | Promise<boolean>;\n\n/**\n * Principal-level predicate for durable task lifecycle calls (`tasks/get`,\n * `tasks/update`, `tasks/cancel`). It receives the authenticated, bound\n * principal (with effective scopes) and no tool: return `false` to answer\n * the call as an unknown task. A thrown error is a denial.\n */\nexport type McpTaskPrincipalPolicy = (context: {\n principal: McpAppPrincipal;\n}) => boolean | Promise<boolean>;\n\n/**\n * Workflow assertion hook signature. Throw `McpAccessError` to reject the\n * call. Implementations may mutate `args` in place to inject server-trusted\n * fields (e.g. clamping `approvedByUserId` to the authenticated user's id).\n */\nexport type McpWorkflowAssertion = (\n args: Record<string, unknown>,\n user: McpAppUser | null,\n) => void;\n\n/**\n * SMRT options thunk — returns the `{ db }` (and similar) bag to pass into\n * MCPGenerator's per-request context. A function is used so apps can lazily\n * resolve env vars at call time.\n */\nexport type McpSmrtOptionsThunk = () => Record<string, unknown>;\n\n/** Public-tool patterns thunk — same lazy-evaluation rationale. */\nexport type McpPublicToolPatternsThunk = () => readonly string[];\n\nexport interface McpToolListCacheHint {\n ttlMs: number;\n cacheScope: 'private' | 'public';\n}\n\nexport interface McpToolListCacheOptions {\n /** Cache lifetime in milliseconds. Defaults to one day for a deploy-static catalog. */\n ttlMs?: number;\n /** Requested cache visibility. Defaults to private. */\n cacheScope?: 'private' | 'public';\n /**\n * Explicit attestation that every allowed tool is global, unauthenticated,\n * and safe to share through an intermediary cache.\n */\n publicCatalog?: true;\n}\n\n/**\n * Options for `createMcpAppServer`.\n */\nexport interface CreateMcpAppServerOptions {\n /** SMRT context bag (db, etc.) passed to MCPGenerator per call. */\n smrtOptions: McpSmrtOptionsThunk;\n /** Server identity surfaced in the MCP protocol. */\n serverInfo: Required<Pick<MCPConfig, 'name' | 'version'>> &\n Pick<MCPConfig, 'description'>;\n /**\n * SMRT class names the app wants to publish. Tools whose name does not\n * start with any of these classes (lowercased + underscore) are filtered\n * out, even if SMRT generated them.\n */\n allowedClassNames: readonly string[];\n /**\n * Optional thunk returning glob-ish patterns for read-only tools that\n * unauthenticated callers are allowed to use. Defaults to an empty list\n * (everything requires auth).\n */\n publicToolPatterns?: McpPublicToolPatternsThunk;\n /**\n * Cache policy for the MCP tools/list result. Public caching is honored only\n * when this explicitly opts in and every allowed tool is a non-tenant,\n * unauthenticated read-only tool with no principal-aware policy.\n */\n toolListCache?: McpToolListCacheOptions;\n /**\n * Optional generic principal-aware tool policy. It is evaluated for every\n * tool that passes the app allow-list and base public/authenticated policy,\n * for both discovery and a direct call.\n */\n toolPolicy?: McpToolPolicy;\n /**\n * Optional per-tool guards. Keyed by tool name. The assertion runs after\n * tool resolution and before `MCPGenerator.handleToolCall`; throwing\n * `McpAccessError` aborts the call with the error's status. Implementations\n * may mutate `args` to inject trusted fields.\n */\n workflowAssertions?: Record<string, McpWorkflowAssertion>;\n /**\n * Explicit application workflows composed with the generated catalog. Their\n * descriptors use core's canonical capability classification and every call\n * passes through this server's principal, tenant, allow-list policy, and\n * assertion gates before the handler runs.\n */\n workflowTools?: readonly McpWorkflowToolDefinition[];\n /**\n * Audit hook, awaited once per tool call after its outcome is known. A\n * hook that throws or rejects never changes the tool result and never\n * escapes; the failure is passed to `onToolCallHookError` when set. Keep it\n * fast: a call returns after the hook settles.\n */\n onToolCall?: (event: McpToolCallAuditEvent) => void | Promise<void>;\n /** Receives (never rethrown) failures of {@link onToolCall}. */\n onToolCallHookError?: (error: unknown) => void;\n /**\n * Restrict the catalog to tools whose effect (see `mcpToolEffect`) is\n * listed, for example `['read']` until per-operation authorization exists.\n * Excluded tools are absent from discovery and a direct call receives the\n * same not-found error as an unknown tool, so they cannot be enumerated.\n * Omitted: every allow-listed tool, regardless of effect.\n */\n effects?: readonly McpToolEffect[];\n resources?: readonly McpAppResourceDefinition[];\n /**\n * Gate every task lifecycle call (`tasks/get`, `tasks/update`,\n * `tasks/cancel`) on the calling principal before the task store is\n * touched; a denial is answered as an unknown task. `toolPolicy` is not\n * re-applied to lifecycle calls (a task does not yet record the tool that\n * created it), so a server whose `toolPolicy` encodes principal-level\n * requirements (scopes, roles, revocation) should restate them here.\n * `createDefaultMcpAppServer` supplies its principal scope policy.\n */\n taskPrincipalPolicy?: McpTaskPrincipalPolicy;\n /** Required for private resources; rechecked on catalog/read, errors deny. */\n resourcePolicy?: McpResourcePolicy;\n}\n\n/** Tool listing inputs. */\nexport interface ListToolsInput {\n /** Caller used for public/authenticated and optional tool-policy checks. */\n principal?: McpAppPrincipal | null;\n /**\n * Backwards-compatible authenticated marker. New mounts should pass\n * `principal` so discovery and direct calls use the same identity.\n */\n authenticated?: boolean;\n}\n\n/** Tool call inputs. */\nexport interface CallToolInput {\n name: string;\n arguments?: Record<string, unknown>;\n /** Caller used for public/authenticated and optional tool-policy checks. */\n principal?: McpAppPrincipal | null;\n /**\n * Backwards-compatible user input. New callers should pass `principal`.\n * Null/undefined means unauthenticated.\n */\n user?: McpAppUser | null;\n}\n\n/** Shape returned by `createMcpAppServer`. */\nexport interface McpAppServer {\n listTools(input: ListToolsInput): Promise<MCPTool[]>;\n listResources?(input: {\n principal?: McpAppPrincipal | null;\n }): Promise<McpAppResource[]>;\n readResource?(input: {\n uri: string;\n principal?: McpAppPrincipal | null;\n }): Promise<McpAppResourceContent>;\n callTool(input: CallToolInput): Promise<MCPResponse>;\n /** Whether this app has any explicitly enabled Tasks extension action. */\n hasTaskSupport?(): Promise<boolean>;\n /** Whether a particular visible tool is task-enabled. */\n isTaskTool?(name: string): Promise<boolean>;\n /** Static declaration used by the protocol discovery capability surface. */\n readonly tasksEnabled?: boolean;\n /** Create a durable task after applying the same tool policy as tools/call. */\n callTask?(input: CallToolInput): Promise<MCPResponse>;\n /** Principal-scoped task lifecycle operations. */\n getTask?(input: {\n taskId: string;\n principal?: McpAppPrincipal | null;\n }): Promise<McpTask>;\n updateTask?(input: {\n taskId: string;\n inputResponses: Record<string, unknown>;\n principal?: McpAppPrincipal | null;\n }): Promise<void>;\n cancelTask?(input: {\n taskId: string;\n principal?: McpAppPrincipal | null;\n }): Promise<void>;\n /** Cache policy for protocol tools/list responses. */\n getToolsListCacheHint?(): Promise<McpToolListCacheHint>;\n /** Read-only view of the configured server identity. */\n readonly serverInfo: CreateMcpAppServerOptions['serverInfo'];\n}\n\nfunction configuredToolListCacheHint(\n options: McpToolListCacheOptions | undefined,\n): McpToolListCacheHint {\n const ttlMs = options?.ttlMs ?? MCP_STABLE_CATALOG_TTL_MS;\n if (!Number.isSafeInteger(ttlMs) || ttlMs < 0) {\n throw new RangeError(\n 'MCP tools/list cache ttlMs must be a non-negative safe integer.',\n );\n }\n if (\n options?.cacheScope !== undefined &&\n options.cacheScope !== 'private' &&\n options.cacheScope !== 'public'\n ) {\n throw new RangeError(\n \"MCP tools/list cacheScope must be 'private' or 'public'.\",\n );\n }\n return {\n ttlMs,\n cacheScope:\n options?.cacheScope === 'public' && options.publicCatalog === true\n ? 'public'\n : 'private',\n };\n}\n\nfunction configuredEffects(\n effects: readonly McpToolEffect[] | undefined,\n): ReadonlySet<McpToolEffect> | undefined {\n if (effects === undefined) return undefined;\n if (\n !Array.isArray(effects) ||\n effects.some((effect) => !MCP_TOOL_EFFECTS.includes(effect))\n ) {\n throw new TypeError(\n \"MCP effects must be an array of 'read', 'write' or 'destructive'.\",\n );\n }\n return new Set(effects);\n}\n\ntype RegistryEntry =\n ReturnType<typeof ObjectRegistry.getAllClasses> extends Map<string, infer V>\n ? V\n : never;\n\n/** Distinct registrations whose simple name matches, case-insensitively. */\nfunction sameNamedClasses(simpleName: string): Array<[string, RegistryEntry]> {\n const wanted = simpleName.toLowerCase();\n const seen = new Set<RegistryEntry>();\n const matches: Array<[string, RegistryEntry]> = [];\n for (const [key, info] of ObjectRegistry.getAllClasses()) {\n if (seen.has(info) || (info.name || key).toLowerCase() !== wanted) continue;\n seen.add(info);\n matches.push([key, info]);\n }\n return matches;\n}\n\nfunction isTenantScopedTool(identity: MCPToolIdentity): boolean {\n // The generating class itself, never another class sharing its name (#3490).\n if (identity.qualifiedName) {\n return (\n ObjectRegistry.isTenantScoped(identity.qualifiedName) ||\n isTenantScopedClassResolved(identity.qualifiedName)\n );\n }\n // An identity without its registration: fail closed if any class of that\n // name is tenant-scoped.\n const objectName = identity.objectName.toLowerCase();\n for (const [key, classInfo] of ObjectRegistry.getAllClasses()) {\n const name = classInfo.name || key;\n if (\n name.toLowerCase() === objectName &&\n (ObjectRegistry.isTenantScoped(key) || isTenantScopedClassResolved(key))\n ) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Scope task lookup to both the authenticated principal and its tenant. The\n * opaque value is stored in the existing job row, so no separate task table\n * can accidentally bypass a tenant boundary.\n */\nfunction taskOwnerIdFor(principal: McpAppPrincipal): string {\n return JSON.stringify([principal.tenantId ?? null, principal.id]);\n}\n\n/**\n * Build the app-runtime MCP server core. The returned object is intentionally\n * framework-agnostic: HTTP wrappers live in `@happyvertical/smrt-app-mcp/sveltekit`,\n * this package's only other export.\n *\n * This package ships no stdio bridge. To pipe a deployed app's HTTP MCP surface\n * to a local stdio MCP client, use `@happyvertical/smrt-app-cli`, which provides\n * a generic `smrt-mcp-bridge` bin plus `runMcpStdioBridge` and\n * `createAppCli().startMcpBridge()` for branded entry points.\n */\nexport function createMcpAppServer(\n options: CreateMcpAppServerOptions,\n): McpAppServer {\n const resources = new Map<string, ReturnType<typeof prepareMcpAppResource>>();\n for (const definition of options.resources ?? []) {\n const resource = prepareMcpAppResource(definition);\n if (resources.has(resource.descriptor.uri))\n throw new TypeError('Duplicate MCP resource URI.');\n resources.set(resource.descriptor.uri, resource);\n }\n const allowedClassNames = new Set(\n options.allowedClassNames.map((name) => name.toLowerCase()),\n );\n const generatorScope = Object.freeze([...allowedClassNames]);\n const getPublicPatterns =\n options.publicToolPatterns ?? ((): readonly string[] => []);\n const toolPolicy = options.toolPolicy;\n const workflowAssertions = options.workflowAssertions ?? {};\n const workflowTools = options.workflowTools?.map(createMcpWorkflowTool) ?? [];\n const workflowToolsByName = new Map<string, McpWorkflowTool>();\n for (const workflowTool of workflowTools) {\n if (workflowToolsByName.has(workflowTool.tool.name)) {\n throw new Error(\n `Duplicate MCP workflow tool name: ${workflowTool.tool.name}`,\n );\n }\n workflowToolsByName.set(workflowTool.tool.name, workflowTool);\n }\n const allowedEffects = configuredEffects(options.effects);\n const requestedToolListCacheHint = configuredToolListCacheHint(\n options.toolListCache,\n );\n // Configuration is read per registration: an allow-list entry names a\n // registry key / qualified name exactly, or every class of a simple name.\n const tasksEnabled = [...ObjectRegistry.getAllClasses()].some(\n ([key, classInfo]) => {\n const names = [key, classInfo.qualifiedName, classInfo.name];\n if (\n !names.some(\n (name) => !!name && allowedClassNames.has(name.toLowerCase()),\n )\n ) {\n return false;\n }\n const mcp = ObjectRegistry.getConfig(key).mcp;\n return (\n typeof mcp === 'object' &&\n (mcp.tasks === true ||\n (Array.isArray(mcp.tasks) && mcp.tasks.length > 0))\n );\n },\n );\n\n function userForGenerator(\n principal?: McpAppPrincipal | null,\n ): McpAppUser | undefined {\n if (!principal?.id) return undefined;\n return { id: principal.id, roles: principal.roles };\n }\n\n async function taskStoreFor(\n principal?: McpAppPrincipal | null,\n ): Promise<McpTaskStore> {\n if (!principal?.id) {\n throw new McpAccessError(\n 401,\n 'Authentication is required for MCP tasks.',\n );\n }\n const db = options.smrtOptions().db as DatabaseInterface | undefined;\n if (!db) {\n throw new Error('MCP Tasks requires smrtOptions() to provide a database');\n }\n return McpTaskStore.create(db, {\n requireAuthorization: true,\n ownerId: taskOwnerIdFor(principal),\n tenantId: principal.tenantId ?? null,\n });\n }\n\n function makeGenerator(\n principal?: McpAppPrincipal | null,\n taskStore?: McpTaskStore,\n ): MCPGenerator {\n const user = userForGenerator(principal);\n // Generate only the allow-listed classes: a name collision among classes\n // this server never publishes must not fail its catalog or calls (#3490).\n const config: MCPConfig = {\n ...(options.serverInfo as MCPConfig),\n classNames: generatorScope,\n };\n return new MCPGenerator(config, {\n ...options.smrtOptions(),\n user,\n tenantId: principal?.tenantId,\n allowCrossTenant: principal?.allowCrossTenant,\n ...(taskStore ? { taskStore } : {}),\n });\n }\n\n function principalForList(input: ListToolsInput): McpAppPrincipal | null {\n if (input.principal !== undefined) return input.principal;\n // Preserve callers of the original boolean API without inventing an id.\n return input.authenticated ? {} : null;\n }\n\n function principalForCall(input: CallToolInput): McpAppPrincipal | null {\n if (input.principal !== undefined) return input.principal;\n return input.user ?? null;\n }\n\n async function catalogTools(\n applyEffects = true,\n ): Promise<Array<{ tool: MCPTool; identity?: MCPToolIdentity }>> {\n // Identity is owned by the exact generator that produced each descriptor.\n const generator = makeGenerator();\n const coreTools = (await generator.generateTools())\n .map((tool) => ({ tool, identity: generator.getToolIdentity(tool) }))\n .filter(\n ({ identity }) =>\n allowedClassNames.has(identity.objectName.toLowerCase()) ||\n (!!identity.qualifiedName &&\n allowedClassNames.has(identity.qualifiedName.toLowerCase())),\n );\n const names = new Set(coreTools.map(({ tool }) => tool.name));\n for (const workflowTool of workflowTools) {\n if (names.has(workflowTool.tool.name)) {\n throw new Error(`Duplicate MCP tool name: ${workflowTool.tool.name}`);\n }\n names.add(workflowTool.tool.name);\n }\n const allTools = [\n ...coreTools,\n ...workflowTools.map(({ tool }) => ({ tool })),\n ];\n for (const { tool } of allTools) {\n const ui = tool._meta?.ui as { resourceUri?: unknown } | undefined;\n if (\n ui?.resourceUri !== undefined &&\n (typeof ui.resourceUri !== 'string' || !resources.has(ui.resourceUri))\n ) {\n throw new TypeError('MCP tool references an undeclared resource.');\n }\n }\n return allTools\n .filter(\n ({ tool }) =>\n !applyEffects ||\n !allowedEffects ||\n allowedEffects.has(mcpToolEffect(tool)),\n )\n .sort((left, right) =>\n compareMcpToolNames(left.tool.name, right.tool.name),\n );\n }\n\n function runWorkflowAssertions(\n tool: MCPTool,\n identity: MCPToolIdentity | undefined,\n args: Record<string, unknown>,\n principal: McpAppPrincipal | null,\n ): void {\n const keys =\n identity && identity.originalName !== tool.name\n ? [tool.name, identity.originalName]\n : [tool.name];\n for (const key of keys) {\n const assertion = workflowAssertions[key];\n if (assertion) assertion(args, userForGenerator(principal) ?? null);\n }\n }\n\n function passesBasePolicy(\n tool: MCPTool,\n principal: McpAppPrincipal | null,\n publicPatterns?: readonly string[],\n ): boolean {\n if (principal) return true;\n return isPublicMcpTool(tool, publicPatterns ?? []);\n }\n\n async function passesToolPolicy(\n tool: MCPTool,\n principal: McpAppPrincipal | null,\n ): Promise<boolean> {\n if (!toolPolicy) return true;\n try {\n return Boolean(await toolPolicy({ principal, tool }));\n } catch {\n // A policy failure must fail closed and never leak implementation detail.\n return false;\n }\n }\n\n async function listTools(input: ListToolsInput): Promise<MCPTool[]> {\n const principal = principalForList(input);\n const tools = await catalogTools();\n // Keep the lazy thunk per request, not per tool. Besides avoiding repeated\n // work, this gives one consistent public surface when a thunk reads a\n // dynamic source such as an environment-backed configuration.\n const publicPatterns = principal ? undefined : getPublicPatterns();\n const visible = await Promise.all(\n tools.map(async ({ tool }) => {\n if (!passesBasePolicy(tool, principal, publicPatterns)) return false;\n return passesToolPolicy(tool, principal);\n }),\n );\n return tools.filter((_, index) => visible[index]).map(({ tool }) => tool);\n }\n\n async function resourceCatalogSnapshot(principal: McpAppPrincipal | null) {\n return {\n tools: await catalogTools(),\n publicPatterns: principal ? undefined : getPublicPatterns(),\n };\n }\n\n async function authorizedResource(\n uri: string,\n principal: McpAppPrincipal | null,\n snapshot?: Awaited<ReturnType<typeof resourceCatalogSnapshot>>,\n ) {\n const resource = resources.get(uri);\n if (\n !resource ||\n (!resource.public && (!principal?.id || !options.resourcePolicy))\n )\n return undefined;\n const { tools, publicPatterns } =\n snapshot ?? (await resourceCatalogSnapshot(principal));\n const associated = tools.filter(\n ({ tool }) =>\n (tool._meta?.ui as { resourceUri?: string } | undefined)\n ?.resourceUri === uri,\n );\n // A resource shared by several tools requires access to every associated\n // operation. UI visibility never grants authority to otherwise hidden tools.\n for (const { tool } of associated) {\n if (\n !passesBasePolicy(tool, principal, publicPatterns) ||\n !(await passesToolPolicy(tool, principal))\n )\n return undefined;\n }\n if (options.resourcePolicy) {\n try {\n if (\n !(await options.resourcePolicy({\n principal,\n resource: structuredClone(resource.descriptor),\n }))\n )\n return undefined;\n } catch {\n return undefined;\n }\n }\n return resource;\n }\n\n async function listResources(input: {\n principal?: McpAppPrincipal | null;\n }): Promise<McpAppResource[]> {\n const visible: McpAppResource[] = [];\n const principal = input.principal ?? null;\n // Discovery is coherent within this list, while policies still run per resource.\n const snapshot = await resourceCatalogSnapshot(principal);\n for (const uri of [...resources.keys()].sort()) {\n const resource = await authorizedResource(uri, principal, snapshot);\n if (resource) visible.push(structuredClone(resource.descriptor));\n }\n return visible;\n }\n\n async function readResource(input: {\n uri: string;\n principal?: McpAppPrincipal | null;\n }): Promise<McpAppResourceContent> {\n const resource = await authorizedResource(\n input.uri,\n input.principal ?? null,\n );\n // Unknown and denied resources are indistinguishable, including guessed URIs.\n if (!resource)\n throw new McpAccessError(404, 'MCP resource is not available.');\n return { ...structuredClone(resource.descriptor), text: resource.html };\n }\n\n async function getToolsListCacheHint(): Promise<McpToolListCacheHint> {\n if (requestedToolListCacheHint.cacheScope !== 'public') {\n return requestedToolListCacheHint;\n }\n\n // A principal-aware policy can make one caller's catalog differ from\n // another's. Likewise, tenant-scoped reads must never be shared across\n // tenants. The requested public scope is therefore honored only for a\n // complete, unauthenticated, non-tenant read-only catalog.\n const tools = await catalogTools();\n const publicPatterns = getPublicPatterns();\n const isSafePublicCatalog =\n !toolPolicy &&\n tools.every(\n ({ tool, identity }) =>\n isPublicMcpTool(tool, publicPatterns) &&\n identity !== undefined &&\n !isTenantScopedTool(identity),\n );\n\n return isSafePublicCatalog\n ? requestedToolListCacheHint\n : { ...requestedToolListCacheHint, cacheScope: 'private' };\n }\n\n async function authorizeCall(input: CallToolInput): Promise<{\n args: Record<string, unknown>;\n principal: McpAppPrincipal | null;\n tool: MCPTool;\n }> {\n const args = input.arguments ?? {};\n const principal = principalForCall(input);\n const tools = await catalogTools();\n const resolved = tools.find(\n (candidate) => candidate.tool.name === input.name,\n );\n if (!resolved) {\n throw new McpAccessError(404, 'Unknown MCP tool.');\n }\n const { tool, identity } = resolved;\n const publicPatterns = principal ? undefined : getPublicPatterns();\n if (!passesBasePolicy(tool, principal, publicPatterns)) {\n throw new McpAccessError(\n 401,\n `Authentication is required for MCP tool: ${input.name}`,\n );\n }\n if (!(await passesToolPolicy(tool, principal))) {\n throw new McpAccessError(403, 'MCP tool access is not permitted.', {\n code: MCP_TOOL_ACCESS_DENIED_CODE,\n retryable: false,\n });\n }\n runWorkflowAssertions(tool, identity, args, principal);\n return { args, principal, tool };\n }\n\n function snapshotPrincipal(\n principal: McpAppPrincipal | null,\n ): Readonly<McpAppPrincipal> | null {\n if (!principal) return null;\n const copy: McpAppPrincipal = { ...principal };\n if (principal.roles)\n copy.roles = Object.freeze([...principal.roles]) as string[];\n if (principal.scopes)\n copy.scopes = Object.freeze([...principal.scopes]) as string[];\n return Object.freeze(copy);\n }\n\n function identityOf(\n principal: McpAppPrincipal | null,\n ): Readonly<McpPrincipalIdentity> | null {\n const identity = principal?.identity;\n if (\n !identity ||\n typeof identity.issuer !== 'string' ||\n typeof identity.subject !== 'string'\n ) {\n return null;\n }\n return Object.freeze({\n issuer: identity.issuer,\n subject: identity.subject,\n ...(typeof identity.clientId === 'string'\n ? { clientId: identity.clientId }\n : {}),\n });\n }\n\n /** Report one call. Never throws and never alters the call's result. */\n async function audit(\n input: CallToolInput,\n principal: McpAppPrincipal | null,\n outcome: McpToolCallOutcome,\n error?: McpToolErrorInfo,\n ): Promise<void> {\n if (!options.onToolCall) return;\n try {\n await options.onToolCall(\n Object.freeze({\n tool: String(input.name).slice(0, 256),\n principal: snapshotPrincipal(principal),\n identity: identityOf(principal),\n outcome,\n ...(error ? { error: Object.freeze({ ...error }) } : {}),\n }),\n );\n } catch (hookError) {\n try {\n options.onToolCallHookError?.(hookError);\n } catch {\n // The error reporter is best effort too.\n }\n }\n }\n\n /**\n * The audit-only code for a denial. The MCP wire result is unchanged: the\n * 404/401 denials carry no `data.code`, the hook still gets a stable one.\n */\n function deniedInfo(error: McpAccessError): McpToolErrorInfo {\n const code =\n error.metadata.code ??\n (error.status === 404\n ? MCP_TOOL_NOT_FOUND_CODE\n : error.status === 401\n ? MCP_AUTHENTICATION_REQUIRED_CODE\n : 'mcp_access_denied');\n return { code, message: error.message };\n }\n\n /** Authorize, run and audit one call exactly once. */\n async function audited(\n input: CallToolInput,\n run: (authorized: {\n args: Record<string, unknown>;\n principal: McpAppPrincipal | null;\n }) => Promise<{ response: MCPResponse; failure?: McpToolErrorInfo }>,\n ): Promise<MCPResponse> {\n const principal = principalForCall(input);\n let authorized: Awaited<ReturnType<typeof authorizeCall>>;\n try {\n authorized = await authorizeCall(input);\n } catch (error) {\n if (error instanceof McpAccessError) {\n await audit(input, principal, 'denied', deniedInfo(error));\n } else {\n await audit(input, principal, 'error', safeMcpToolError(error));\n }\n throw error;\n }\n let result: { response: MCPResponse; failure?: McpToolErrorInfo };\n try {\n result = await run(authorized);\n } catch (error) {\n if (error instanceof McpAccessError) {\n await audit(input, principal, 'denied', deniedInfo(error));\n } else {\n await audit(input, principal, 'error', safeMcpToolError(error));\n }\n throw error;\n }\n if (result.response.isError) {\n await audit(\n input,\n principal,\n 'error',\n result.failure ?? failureOf(result.response),\n );\n } else {\n await audit(input, principal, 'ok');\n }\n return result.response;\n }\n\n /** The safe code/message of an error result a handler or generator built. */\n function failureOf(response: MCPResponse): McpToolErrorInfo {\n const error = (\n response.structuredContent as { error?: unknown } | undefined\n )?.error as { code?: unknown; message?: unknown } | undefined;\n return safeMcpToolError(undefined, () =>\n typeof error?.code === 'string' && typeof error?.message === 'string'\n ? { code: error.code, message: error.message }\n : undefined,\n );\n }\n\n async function callTool(input: CallToolInput): Promise<MCPResponse> {\n return audited(input, async ({ args, principal }) => {\n const workflowTool = workflowToolsByName.get(input.name);\n if (workflowTool) {\n try {\n return {\n response: await workflowTool.execute({\n arguments: args,\n principal,\n }),\n };\n } catch (error) {\n if (error instanceof McpAccessError) throw error;\n // Handler exceptions may contain credentials or application\n // records: only an authored McpToolError or a mapError result\n // reaches the agent.\n const typed = authoredMcpToolError(error, workflowTool.mapError);\n const message = typed?.message ?? 'Workflow execution failed.';\n return {\n failure: typed ?? safeMcpToolError(error),\n response: {\n isError: true,\n content: [{ type: 'text', text: message }],\n // Unmapped failures keep the original `{ message }` wire shape.\n structuredContent: { error: typed ?? { message } },\n },\n };\n }\n }\n return {\n response: await makeGenerator(principal).handleToolCall({\n method: 'tools/call',\n params: { arguments: args, name: input.name },\n }),\n };\n });\n }\n\n async function hasTaskSupport(): Promise<boolean> {\n const tools = await catalogTools();\n const generator = makeGenerator();\n for (const { tool } of tools) {\n if (workflowToolsByName.has(tool.name)) continue;\n if (await generator.supportsTaskTool(tool.name)) return true;\n }\n return false;\n }\n\n async function isTaskTool(name: string): Promise<boolean> {\n if (workflowToolsByName.has(name)) return false;\n const tools = await catalogTools();\n if (!tools.some(({ tool }) => tool.name === name)) return false;\n return makeGenerator().supportsTaskTool(name);\n }\n\n async function callTask(input: CallToolInput): Promise<MCPResponse> {\n return audited(input, async ({ args, principal }) => {\n if (workflowToolsByName.has(input.name)) {\n throw new McpAccessError(\n 400,\n 'Workflow MCP tools do not support tasks.',\n );\n }\n const taskStore = await taskStoreFor(principal);\n return {\n response: await makeGenerator(principal, taskStore).createTask({\n method: 'tools/call',\n params: { arguments: args, name: input.name },\n }),\n };\n });\n }\n\n /**\n * The generated tool that created a task, recovered from its job row\n * (`object_type` + `method`, persisted by core's `createTask`) under the\n * same owner/tenant scope as the task store. Undefined when not found.\n */\n async function taskOrigin(\n taskId: string,\n principal: McpAppPrincipal & { id: string },\n ): Promise<{ objectType: string; method: string } | undefined> {\n const db = options.smrtOptions().db as DatabaseInterface;\n const jobs = await SmrtJobCollection.create({ db });\n const [job] = await jobs.list({\n where: { taskId, taskOwnerId: taskOwnerIdFor(principal) },\n limit: 1,\n });\n if (!job || (job.tenantId ?? null) !== (principal.tenantId ?? null)) {\n return undefined;\n }\n return { objectType: job.objectType, method: job.method };\n }\n\n /**\n * Mirror core's task resolution: class by simple name; core persists its\n * qualified name, while application workflows that create tasks through a\n * task store may persist the simple name.\n */\n function isTaskOrigin(\n identity: MCPToolIdentity,\n origin: { objectType: string; method: string },\n ): boolean {\n if (identity.action.toLowerCase() !== origin.method.toLowerCase()) {\n return false;\n }\n if (identity.qualifiedName) {\n if (origin.objectType === identity.qualifiedName) return true;\n // A persisted simple name identifies the class only while no other\n // registered class shares it (#3490).\n const info = ObjectRegistry.getAllClasses().get(identity.qualifiedName);\n return (\n !!info?.name &&\n origin.objectType === info.name &&\n sameNamedClasses(info.name).length === 1\n );\n }\n // An identity without its registration resolves only an unambiguous name.\n const matches = sameNamedClasses(identity.objectName);\n if (matches.length !== 1) return false;\n const [[key, info]] = matches;\n const name = info.name || key;\n return (\n origin.objectType === name || origin.objectType === info.qualifiedName\n );\n }\n\n /**\n * Re-apply the current catalog to a task's originating action: the\n * allow-list and `effects` filter, judged on the generated tool for the\n * class and method its job persists. A task whose action is excluded (or\n * maps to no allow-listed generated tool) is indistinguishable from an\n * unknown task.\n *\n * The per-tool `toolPolicy` is not re-applied here: a task created by an\n * application workflow records only the class and method, not the\n * workflow tool that created it, and such workflows routinely front a\n * generated task tool that policy hides. Owner and tenant scoping still\n * apply to every lifecycle call.\n */\n async function assertTaskToolVisible(\n taskId: string,\n principal: McpAppPrincipal & { id: string },\n ): Promise<void> {\n const origin = await taskOrigin(taskId, principal);\n if (origin) {\n for (const { tool, identity } of await catalogTools(false)) {\n if (!identity || workflowToolsByName.has(tool.name)) continue;\n if (!isTaskOrigin(identity, origin)) continue;\n if (!allowedEffects || allowedEffects.has(mcpToolEffect(tool))) return;\n }\n }\n throw new McpAccessError(404, 'Unknown MCP task.');\n }\n\n async function passesTaskPrincipalPolicy(\n principal: McpAppPrincipal,\n ): Promise<boolean> {\n if (!options.taskPrincipalPolicy) return true;\n try {\n return Boolean(await options.taskPrincipalPolicy({ principal }));\n } catch {\n return false;\n }\n }\n\n async function withTaskStore<T>(\n taskId: string,\n principal: McpAppPrincipal | null | undefined,\n operation: (store: McpTaskStore) => Promise<T>,\n ): Promise<T> {\n // Principal-level authority (for example live-revoked scopes) is checked\n // before the task store is touched, independent of the originating tool.\n if (principal?.id && !(await passesTaskPrincipalPolicy(principal))) {\n throw new McpAccessError(404, 'Unknown MCP task.');\n }\n try {\n // taskStoreFor rejects a principal without a stable id first.\n const store = await taskStoreFor(principal);\n await assertTaskToolVisible(\n taskId,\n principal as McpAppPrincipal & { id: string },\n );\n return await operation(store);\n } catch (error) {\n if (error instanceof McpTaskNotFoundError) {\n throw new McpAccessError(404, 'Unknown MCP task.');\n }\n throw error;\n }\n }\n\n async function getTask(input: {\n taskId: string;\n principal?: McpAppPrincipal | null;\n }): Promise<McpTask> {\n return withTaskStore(input.taskId, input.principal, (store) =>\n store.getTask(input.taskId),\n );\n }\n\n async function updateTask(input: {\n taskId: string;\n inputResponses: Record<string, unknown>;\n principal?: McpAppPrincipal | null;\n }): Promise<void> {\n await withTaskStore(input.taskId, input.principal, (store) =>\n store.updateTask(input.taskId, input.inputResponses),\n );\n }\n\n async function cancelTask(input: {\n taskId: string;\n principal?: McpAppPrincipal | null;\n }): Promise<void> {\n await withTaskStore(input.taskId, input.principal, (store) =>\n store.cancelTask(input.taskId),\n );\n }\n\n return {\n listTools,\n listResources,\n readResource,\n callTool,\n hasTaskSupport,\n isTaskTool,\n callTask,\n getTask,\n updateTask,\n cancelTask,\n tasksEnabled,\n getToolsListCacheHint,\n serverInfo: options.serverInfo,\n };\n}\n","/**\n * Defaults for an application MCP server built from the app's own declared\n * models. The defaults can only narrow what `createMcpAppServer` exposes:\n * the allow-list is the explicit model list, and every authenticated caller\n * must be a principal of an accepted kind with a stable id, a tenant, and\n * every required scope. Applications that need a wider policy compose\n * `createMcpAppServer` directly.\n *\n * @packageDocumentation\n */\n\nimport { ObjectRegistry } from '@happyvertical/smrt-core';\nimport type { McpResourcePolicy } from './resources.js';\nimport {\n type CreateMcpAppServerOptions,\n createMcpAppServer,\n type McpAppPrincipal,\n type McpAppServer,\n type McpTaskPrincipalPolicy,\n type McpToolPolicy,\n} from './server.js';\n\n/** A `@smrt()` model constructor whose generated tools the app publishes. */\nexport type McpAppModel = Parameters<\n typeof ObjectRegistry.getClassByConstructor\n>[0];\n\n/** Server identity used when an application does not supply one. */\nexport const DEFAULT_MCP_APP_SERVER_INFO = Object.freeze({\n name: 'smrt-app',\n version: '0.1.0',\n});\n\n/**\n * Resolve the registered class names for an explicit list of model\n * constructors. Every entry must be a registered `@smrt()` class; nothing is\n * inferred from the registry, so an application never publishes framework or\n * dependency models by accident.\n */\nexport function mcpAllowedClassNames(models: readonly McpAppModel[]): string[] {\n if (!Array.isArray(models)) {\n throw new TypeError('MCP models must be an explicit array.');\n }\n const names = new Set<string>();\n for (const model of models) {\n const registered =\n typeof model === 'function'\n ? ObjectRegistry.getClassByConstructor(model)\n : undefined;\n if (!registered?.name) {\n throw new TypeError(\n 'MCP models must be registered @smrt() class constructors.',\n );\n }\n names.add(registered.name);\n }\n return [...names];\n}\n\n/**\n * The registry identity (qualified name, or registry key for a class without\n * a package) of each model constructor, looked up by the constructor itself.\n * The route holds the constructors, so its allow-list names exactly those\n * classes even when another registered class shares a simple name (#3490).\n * An unregistered constructor fails closed.\n */\nfunction mcpAllowedRegistryNames(models: readonly McpAppModel[]): string[] {\n if (!Array.isArray(models)) {\n throw new TypeError('MCP models must be an explicit array.');\n }\n const classes = ObjectRegistry.getAllClasses();\n const names = new Set<string>();\n for (const model of models) {\n const registered =\n typeof model === 'function'\n ? ObjectRegistry.getClassByConstructor(model)\n : undefined;\n const key = registered\n ? registered.qualifiedName && classes.get(registered.qualifiedName)\n ? registered.qualifiedName\n : [...classes].find(([, info]) => info === registered)?.[0]\n : undefined;\n if (!registered || !key || registered.constructor !== model) {\n throw new TypeError(\n 'MCP models must be registered @smrt() class constructors.',\n );\n }\n names.add(key);\n }\n return [...names];\n}\n\n/** Options for {@link mcpPrincipalScopePolicy}. */\nexport interface McpPrincipalScopePolicyOptions {\n /** Every scope an authenticated principal must hold. May be empty. */\n requiredScopes: readonly string[];\n /** Accepted principal kinds. Defaults to `['human']`. */\n principalKinds?: readonly string[];\n}\n\nconst scopePattern = /^[\\x21\\x23-\\x5b\\x5d-\\x7e]+$/u;\n\nfunction snapshotStrings(\n values: readonly string[] | undefined,\n label: string,\n): readonly string[] {\n if (!Array.isArray(values)) {\n throw new TypeError(`MCP ${label} must be an explicit array.`);\n }\n for (const value of values) {\n if (typeof value !== 'string' || !scopePattern.test(value)) {\n throw new TypeError(`Invalid MCP ${label} entry.`);\n }\n }\n return Object.freeze([...new Set(values)]);\n}\n\nfunction nonEmptyString(value: unknown): value is string {\n return typeof value === 'string' && value.length > 0;\n}\n\n/**\n * Build the default principal policy shared by tools and resources.\n *\n * An authenticated principal passes only with an accepted `kind`, a stable\n * `id`, a `tenantId`, and every required scope. An absent principal passes\n * this policy because the server's base rule has already restricted it to\n * tools selected by `publicToolPatterns` that are read-only, and to resources\n * explicitly declared `public: true`; with neither configured an anonymous\n * caller reaches nothing.\n */\nexport function mcpPrincipalScopePolicy(\n options: McpPrincipalScopePolicyOptions,\n): (context: { principal: McpAppPrincipal | null }) => boolean {\n const requiredScopes = snapshotStrings(\n options.requiredScopes,\n 'requiredScopes',\n );\n const kinds = snapshotStrings(\n options.principalKinds ?? ['human'],\n 'principalKinds',\n );\n return ({ principal }) => {\n if (principal === null) return true;\n if (!principal || typeof principal !== 'object') return false;\n if (!nonEmptyString(principal.kind) || !kinds.includes(principal.kind))\n return false;\n if (!nonEmptyString(principal.id) || !nonEmptyString(principal.tenantId))\n return false;\n const held = principal.scopes;\n if (!Array.isArray(held)) return requiredScopes.length === 0;\n return requiredScopes.every((scope) => held.includes(scope));\n };\n}\n\n/** Options for {@link createDefaultMcpAppServer}. */\nexport interface CreateDefaultMcpAppServerOptions\n extends Omit<\n CreateMcpAppServerOptions,\n | 'allowedClassNames'\n | 'serverInfo'\n | 'toolPolicy'\n | 'resourcePolicy'\n | 'taskPrincipalPolicy'\n > {\n /**\n * The app's own `@smrt()` models to publish. Explicit: nothing else that is\n * registered (framework, dependency or fixture models) is exposed.\n */\n models: readonly McpAppModel[];\n /**\n * Scopes every authenticated principal must hold for every tool and\n * resource. With the SvelteKit session default these are the permission\n * slugs from `locals.permissions` (for example `items.read`); with bearer\n * authentication they are the token's granted scopes. Required so the\n * permission gate is always an explicit application decision; pass `[]`\n * only when every authenticated tenant member may use every published tool.\n */\n requiredScopes: readonly string[];\n /** Accepted principal kinds. Defaults to `['human']`. */\n principalKinds?: readonly string[];\n /** Server identity. Defaults to {@link DEFAULT_MCP_APP_SERVER_INFO}. */\n serverInfo?: CreateMcpAppServerOptions['serverInfo'];\n /** Additional tool policy. Composed with the default; it can only narrow. */\n toolPolicy?: McpToolPolicy;\n /** Additional resource policy. Composed with the default; it can only narrow. */\n resourcePolicy?: McpResourcePolicy;\n /**\n * Additional task lifecycle predicate. Composed with the default principal\n * scope policy, which already gates `tasks/get`/`update`/`cancel`; it can\n * only narrow.\n */\n taskPrincipalPolicy?: McpTaskPrincipalPolicy;\n}\n\n/**\n * Create an `McpAppServer` from the app's declared models with the default\n * principal policy. Unauthenticated callers keep the base public read-only\n * rule; mutating tools always require an authenticated principal. Because the\n * default policy is principal-aware, `tools/list` stays privately cacheable\n * even when `toolListCache` requests public caching.\n */\nexport function createDefaultMcpAppServer(\n options: CreateDefaultMcpAppServerOptions,\n): McpAppServer {\n const {\n models,\n requiredScopes,\n principalKinds,\n serverInfo,\n toolPolicy: narrowTool,\n resourcePolicy: narrowResource,\n taskPrincipalPolicy: narrowTask,\n ...rest\n } = options;\n const allowedClassNames = mcpAllowedRegistryNames(models);\n const base = mcpPrincipalScopePolicy({ requiredScopes, principalKinds });\n return createMcpAppServer({\n ...rest,\n serverInfo: serverInfo ?? { ...DEFAULT_MCP_APP_SERVER_INFO },\n allowedClassNames,\n // The server already treats a thrown policy as a denial.\n toolPolicy: async (context) =>\n base(context) && (narrowTool ? Boolean(await narrowTool(context)) : true),\n resourcePolicy: async (context) =>\n base(context) &&\n (narrowResource ? Boolean(await narrowResource(context)) : true),\n // Lifecycle calls carry no tool; the principal-level requirements\n // (kind, id, tenant, every required scope of the effective principal)\n // still apply, so live revocation reaches existing tasks.\n taskPrincipalPolicy: async (context) =>\n base(context) && (narrowTask ? Boolean(await narrowTask(context)) : true),\n });\n}\n","/** MCP SDK v2 protocol adapter for the framework-neutral app server core. */\n\nimport type { MCPTool } from '@happyvertical/smrt-core/generators/mcp';\nimport {\n type CallToolResult,\n type JSONObject,\n ProtocolError,\n ProtocolErrorCode,\n Server,\n type ServerContext,\n type Tool,\n} from '@modelcontextprotocol/server';\nimport { McpAccessError } from './errors.js';\nimport type { McpAppPrincipal, McpAppServer } from './server.js';\nimport { compareMcpToolNames } from './tools.js';\n\nexport const MCP_TASKS_EXTENSION = 'io.modelcontextprotocol/tasks';\n\nconst DEFAULT_TOOL_LIST_CACHE_HINT = {\n ttlMs: 86_400_000,\n cacheScope: 'private' as const,\n};\n\nexport interface McpProtocolServerOptions {\n /** Resolve the authenticated application principal for each MCP request. */\n principal?:\n | McpAppPrincipal\n | null\n | ((\n context: ServerContext,\n ) => McpAppPrincipal | null | Promise<McpAppPrincipal | null>);\n}\n\n/** Request-bound options for asynchronous catalog extension projection. */\nexport interface McpProtocolRequestOptions {\n principal?: McpAppPrincipal | null;\n /** Optional inert extension metadata, recomputed from this request's authorized catalog. */\n extensions?: (context: {\n principal: McpAppPrincipal | null;\n tools: readonly MCPTool[];\n }) =>\n | Record<string, Record<string, unknown>>\n | Promise<Record<string, Record<string, unknown>>>;\n}\n\n/** Prepare native capabilities before the SDK HTTP factory installs discovery handlers. */\nexport async function createMcpProtocolServerForRequest(\n appServer: McpAppServer,\n options: McpProtocolRequestOptions = {},\n): Promise<Server> {\n const principal = options.principal ?? null;\n let extensions: Record<string, JSONObject> = {};\n if (options.extensions) {\n try {\n const tools = await appServer.listTools({ principal });\n const projected = await options.extensions({ principal, tools });\n assertExtensionMetadata(projected);\n if (Object.hasOwn(projected, MCP_TASKS_EXTENSION))\n throw new TypeError('Reserved extension.');\n extensions = structuredClone(projected);\n } catch {\n throw new ProtocolError(\n ProtocolErrorCode.InternalError,\n 'Extension discovery unavailable.',\n );\n }\n }\n return protocolServer(appServer, { principal }, extensions);\n}\n\nasync function resolvePrincipal(\n option: McpProtocolServerOptions['principal'],\n context: ServerContext,\n): Promise<McpAppPrincipal | null> {\n if (typeof option === 'function') return (await option(context)) ?? null;\n return option ?? null;\n}\n\n/**\n * Adapt an app MCP core to the SDK v2 low-level server protocol.\n *\n * Transport ownership remains with the caller. In particular, this does not\n * add a production HTTP endpoint; it is safe to compose with `serveStdio` or\n * `createMcpHandler` in a deployment that supplies its own authentication.\n */\nexport function createMcpProtocolServer(\n appServer: McpAppServer,\n options: McpProtocolServerOptions = {},\n): Server {\n if ('extensions' in options) {\n throw new TypeError(\n 'Extension discovery requires createMcpProtocolServerForRequest.',\n );\n }\n return protocolServer(appServer, options, {});\n}\n\nfunction protocolServer(\n appServer: McpAppServer,\n options: McpProtocolServerOptions,\n extensions: Record<string, JSONObject>,\n): Server {\n // Task lifecycle records are owner-scoped. Unlike ordinary public read-only\n // tools, they cannot be safely exposed without a stable principal id.\n const tasksEnabled =\n appServer.tasksEnabled &&\n typeof options.principal !== 'function' &&\n Boolean(options.principal?.id);\n const server = new Server(appServer.serverInfo, {\n capabilities: {\n tools: {},\n ...(appServer.listResources && appServer.readResource\n ? { resources: {} }\n : {}),\n ...(tasksEnabled || Object.keys(extensions).length\n ? {\n extensions: {\n ...extensions,\n ...(tasksEnabled ? { [MCP_TASKS_EXTENSION]: {} } : {}),\n },\n }\n : {}),\n } as never,\n cacheHints: { 'tools/list': DEFAULT_TOOL_LIST_CACHE_HINT },\n });\n\n server.setRequestHandler('tools/list', async (_request, context) => {\n const principal = await resolvePrincipal(options.principal, context);\n const cacheHint =\n (await appServer.getToolsListCacheHint?.()) ??\n DEFAULT_TOOL_LIST_CACHE_HINT;\n return {\n tools: [...(await appServer.listTools({ principal }))].sort(\n (left, right) => compareMcpToolNames(left.name, right.name),\n ) as Tool[],\n ...cacheHint,\n };\n });\n\n if (appServer.listResources && appServer.readResource) {\n server.setRequestHandler('resources/list', async (_request, context) => ({\n resources: await appServer.listResources!({\n principal: await resolvePrincipal(options.principal, context),\n }),\n ttlMs: 0,\n cacheScope: 'private',\n }));\n server.setRequestHandler('resources/read', async (request, context) => {\n try {\n return {\n contents: [\n await appServer.readResource!({\n uri: request.params.uri,\n principal: await resolvePrincipal(options.principal, context),\n }),\n ],\n ttlMs: 0,\n cacheScope: 'private',\n };\n } catch (error) {\n if (error instanceof McpAccessError)\n throw new ProtocolError(\n ProtocolErrorCode.InvalidParams,\n 'MCP resource is not available.',\n );\n throw error;\n }\n });\n }\n\n server.setRequestHandler('tools/call', async (request, context) => {\n try {\n return (await appServer.callTool({\n name: request.params.name,\n arguments: request.params.arguments,\n principal: await resolvePrincipal(options.principal, context),\n })) as CallToolResult;\n } catch (error) {\n if (error instanceof McpAccessError) {\n const { code, retryable } = error.metadata;\n throw new ProtocolError(\n error.status === 404\n ? ProtocolErrorCode.InvalidParams\n : ProtocolErrorCode.InvalidRequest,\n error.message,\n {\n ...(typeof code === 'string' ? { code } : {}),\n ...(typeof retryable === 'boolean' ? { retryable } : {}),\n },\n );\n }\n throw error;\n }\n });\n\n return server;\n}\n\n/** Bound plugin discovery metadata without allowing executable values or provider-specific types. */\nfunction assertExtensionMetadata(\n value: unknown,\n): asserts value is Record<string, JSONObject> {\n let budget = 65536;\n const visit = (v: unknown, depth: number): void => {\n if (--budget < 0 || depth > 16)\n throw new TypeError('Extension metadata exceeds limits.');\n if (v === null || typeof v === 'boolean') return;\n if (typeof v === 'number' && Number.isFinite(v)) return;\n if (typeof v === 'string') {\n budget -= new TextEncoder().encode(v).length;\n if (budget < 0) throw new TypeError('Extension metadata exceeds limits.');\n return;\n }\n if (Array.isArray(v)) {\n if (v.length > 1024)\n throw new TypeError('Extension array exceeds limits.');\n for (const item of v) visit(item, depth + 1);\n return;\n }\n if (\n !v ||\n typeof v !== 'object' ||\n ![Object.prototype, null].includes(Object.getPrototypeOf(v))\n )\n throw new TypeError('Expected plain extension object.');\n const names = Object.keys(v);\n if (names.length > 256)\n throw new TypeError('Extension object exceeds limits.');\n for (const name of names) {\n if (['__proto__', 'constructor', 'prototype'].includes(name))\n throw new TypeError('Unsafe extension key.');\n const descriptor = Object.getOwnPropertyDescriptor(v, name);\n if (!descriptor || !('value' in descriptor))\n throw new TypeError('Expected inert extension metadata.');\n visit(name, depth + 1);\n visit(descriptor.value, depth + 1);\n }\n };\n visit(value, 0);\n if (!value || typeof value !== 'object' || Array.isArray(value))\n throw new TypeError('Expected extension map.');\n for (const [name, entry] of Object.entries(value)) {\n if (\n !name.trim() ||\n !entry ||\n typeof entry !== 'object' ||\n Array.isArray(entry)\n )\n throw new TypeError('Expected named extension object.');\n }\n}\n"],"x_google_ignoreList":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19],"mappings":"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"}
|