@omniharmonic/openspace-cli 0.1.13 → 0.1.15
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/dist/{agents-md-QBMFXTIQ.js → agents-md-OWDSHBGF.js} +2 -2
- package/dist/bin.js +3 -3
- package/dist/{chunk-IXN2CNGL.js → chunk-GMKHKHUR.js} +206 -39
- package/dist/chunk-GMKHKHUR.js.map +1 -0
- package/dist/{chunk-B5C7S4S5.js → chunk-PBN36VUE.js} +2775 -184
- package/dist/chunk-PBN36VUE.js.map +1 -0
- package/dist/{chunk-EFSGZWAO.js → chunk-YAPLQ4OA.js} +155 -16
- package/dist/chunk-YAPLQ4OA.js.map +1 -0
- package/dist/{crawl-TAADG5BR.js → crawl-WQQDFI7W.js} +2 -2
- package/dist/index.d.ts +1 -1
- package/dist/index.js +3 -3
- package/dist/starter/site/AGENTS.md +4 -4
- package/dist/templates/darkroom/content/pages/about.json +2 -2
- package/dist/templates/encore/content/pages/home.json +1 -1
- package/dist/templates/folio/content/pages/home.json +2 -2
- package/dist/templates/gather/content/pages/home.json +2 -2
- package/dist/templates/harbor/content/pages/home.json +1 -1
- package/dist/templates/hearth/content/pages/home.json +6 -6
- package/dist/templates/inkwell/content/pages/about.json +2 -2
- package/dist/templates/inkwell/content/pages/books.json +1 -1
- package/dist/templates/keystone/content/pages/about.json +2 -2
- package/dist/templates/kiln/content/pages/home.json +7 -5
- package/dist/templates/ledger/content/pages/about.json +4 -4
- package/dist/templates/vow/content/pages/home.json +1 -1
- package/package.json +8 -8
- package/dist/chunk-B5C7S4S5.js.map +0 -1
- package/dist/chunk-EFSGZWAO.js.map +0 -1
- package/dist/chunk-IXN2CNGL.js.map +0 -1
- /package/dist/{agents-md-QBMFXTIQ.js.map → agents-md-OWDSHBGF.js.map} +0 -0
- /package/dist/{crawl-TAADG5BR.js.map → crawl-WQQDFI7W.js.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../import/src/fetch.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.1.0/node_modules/entities/src/decode-codepoint.ts","../../../node_modules/.pnpm/entities@8.1.0/node_modules/entities/src/internal/decode-shared.ts","../../../node_modules/.pnpm/entities@8.1.0/node_modules/entities/src/generated/decode-data-html.ts","../../../node_modules/.pnpm/entities@8.1.0/node_modules/entities/src/generated/decode-data-xml.ts","../../../node_modules/.pnpm/entities@8.1.0/node_modules/entities/src/internal/bin-trie-flags.ts","../../../node_modules/.pnpm/entities@8.1.0/node_modules/entities/src/decode.ts","../../../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/entities@8.1.0/node_modules/entities/src/escape.ts","../../../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","../../import/src/dom.ts","../../import/src/squarespace/blocks.ts","../../import/src/squarespace/theme.ts","../../import/src/html/icons.ts","../../import/src/html/image.ts","../../import/src/html/extract.ts","../../import/src/html/discover.ts","../../import/src/html/theme.ts","../../import/src/platform.ts","../../import/src/squarespace/page.ts","../../import/src/squarespace/wxr.ts","../../import/src/squarespace/crawl.ts","../../import/src/generic/crawl.ts"],"sourcesContent":["/**\n * Polite HTTP for importing a site its owner is moving: one request at a time per host with a\n * pause between requests, Retry-After on 429/503, robots.txt honoured, an identifying\n * User-Agent, and every request logged for the import report.\n */\n\nexport type FetchFn = (url: string, init?: RequestInit) => Promise<Response>;\n\nexport const USER_AGENT =\n \"OpenSpace-Importer/0.1 (+https://github.com/omniharmonic/openspace; site owner migration)\";\n\nexport interface RobotsRules {\n allow: string[];\n disallow: string[];\n}\n\n/** Rules that apply to us: the `*` group (we do not claim any crawler's identity). */\nexport function parseRobots(text: string, agent = \"openspace-importer\"): RobotsRules {\n const groups: { agents: string[]; allow: string[]; disallow: string[] }[] = [];\n let current: (typeof groups)[number] | undefined;\n let lastWasAgent = false;\n for (const raw of text.split(/\\r?\\n/)) {\n const line = raw.replace(/#.*$/, \"\").trim();\n const m = /^([A-Za-z-]+)\\s*:\\s*(.*)$/.exec(line);\n if (!m) continue;\n const key = (m[1] as string).toLowerCase();\n const value = (m[2] as string).trim();\n if (key === \"user-agent\") {\n if (!current || !lastWasAgent) {\n current = { agents: [], allow: [], disallow: [] };\n groups.push(current);\n }\n current.agents.push(value.toLowerCase());\n lastWasAgent = true;\n continue;\n }\n lastWasAgent = false;\n if (!current) continue;\n if (key === \"disallow\" && value) current.disallow.push(value);\n if (key === \"allow\" && value) current.allow.push(value);\n }\n const mine = groups.filter((g) => g.agents.includes(agent));\n const chosen = mine.length ? mine : groups.filter((g) => g.agents.includes(\"*\"));\n return {\n allow: chosen.flatMap((g) => g.allow),\n disallow: chosen.flatMap((g) => g.disallow),\n };\n}\n\nfunction patternMatch(pattern: string, path: string): number {\n const anchored = pattern.endsWith(\"$\");\n const body = anchored ? pattern.slice(0, -1) : pattern;\n const re = new RegExp(\n `^${body\n .split(\"*\")\n .map((s) => s.replace(/[.+?^${}()|[\\]\\\\]/g, \"\\\\$&\"))\n .join(\".*\")}${anchored ? \"$\" : \"\"}`,\n );\n return re.test(path) ? body.length : -1;\n}\n\n/** Longest matching rule wins; Allow wins ties (RFC 9309). */\nexport function robotsAllows(rules: RobotsRules, pathAndQuery: string): boolean {\n let best = -1;\n let allowed = true;\n for (const p of rules.disallow) {\n const n = patternMatch(p, pathAndQuery);\n if (n > best) {\n best = n;\n allowed = false;\n }\n }\n for (const p of rules.allow) {\n const n = patternMatch(p, pathAndQuery);\n if (n >= best && n >= 0) {\n best = n;\n allowed = true;\n }\n }\n return allowed;\n}\n\nexport interface SiteFetcherOptions {\n fetch?: FetchFn;\n /** Pause between requests to the site itself (ms, default 300). */\n delayMs?: number;\n /** Pause between image downloads from the CDN (ms, default 50). */\n cdnDelayMs?: number;\n /** Per-host pause override (e.g. 0 for a repository served from memory). */\n hostDelay?: (host: string) => number | undefined;\n /** Honour robots.txt (default true). */\n robots?: boolean;\n /**\n * Requests robots.txt would refuse but the owner explicitly allowed (e.g. Squarespace's\n * `?format=json` with `--owner`).\n */\n ownerAllows?: (url: URL) => boolean;\n /** Called once per network request (progress). */\n onRequest?: (url: string) => void;\n sleep?: (ms: number) => Promise<void>;\n maxRetries?: number;\n}\n\nexport interface FetchedText {\n url: string;\n status: number;\n text: string;\n contentType: string;\n}\n\nexport class RobotsDisallowed extends Error {\n constructor(readonly url: string) {\n super(`robots.txt asks automated tools not to fetch ${url}`);\n }\n}\n\nexport class SiteFetcher {\n private readonly fetchFn: FetchFn;\n private readonly sleep: (ms: number) => Promise<void>;\n private readonly lastByHost = new Map<string, number>();\n private readonly queueByHost = new Map<string, Promise<unknown>>();\n private readonly robotsByHost = new Map<string, Promise<RobotsRules | undefined>>();\n /** Every URL requested, in order (the report lists counts). */\n readonly requested: string[] = [];\n readonly skippedByRobots: string[] = [];\n\n constructor(private readonly opts: SiteFetcherOptions = {}) {\n this.fetchFn = opts.fetch ?? ((u, i) => fetch(u, i));\n this.sleep = opts.sleep ?? ((ms) => new Promise((r) => setTimeout(r, ms)));\n }\n\n private async robots(u: URL): Promise<RobotsRules | undefined> {\n if (this.opts.robots === false) return undefined;\n let p = this.robotsByHost.get(u.host);\n if (!p) {\n p = this.raw(new URL(\"/robots.txt\", u).toString())\n .then(async (res) => (res.ok ? parseRobots(await res.text()) : undefined))\n .catch(() => undefined);\n this.robotsByHost.set(u.host, p);\n }\n return p;\n }\n\n /** Whether robots.txt (or the owner's explicit permission) lets us fetch `url`. */\n async allowed(url: string): Promise<boolean> {\n const u = new URL(url);\n if (this.opts.ownerAllows?.(u)) return true;\n const rules = await this.robots(u);\n return !rules || robotsAllows(rules, `${u.pathname}${u.search}`);\n }\n\n private isCdn(host: string): boolean {\n return /squarespace-cdn\\.com$|static1\\.squarespace\\.com$|sqspcdn\\.com$/.test(host);\n }\n\n /** One request, serialized per host with a pause, retried on 429/503. */\n private raw(url: string, init: RequestInit = {}): Promise<Response> {\n const u = new URL(url);\n const host = u.host;\n const delay =\n this.opts.hostDelay?.(host) ??\n (this.isCdn(host) ? (this.opts.cdnDelayMs ?? 50) : (this.opts.delayMs ?? 300));\n const run = async (): Promise<Response> => {\n for (let attempt = 0; ; attempt++) {\n const wait = (this.lastByHost.get(host) ?? 0) + delay - Date.now();\n if (wait > 0) await this.sleep(wait);\n this.lastByHost.set(host, Date.now());\n this.requested.push(url);\n this.opts.onRequest?.(url);\n const res = await this.fetchFn(url, {\n ...init,\n headers: { \"user-agent\": USER_AGENT, accept: \"*/*\", ...(init.headers ?? {}) },\n });\n if ((res.status === 429 || res.status === 503) && attempt < (this.opts.maxRetries ?? 3)) {\n const after = Number(res.headers.get(\"retry-after\"));\n await res.body?.cancel().catch(() => undefined);\n await this.sleep(\n Number.isFinite(after) && after > 0 ? Math.min(after, 60) * 1000 : 2000 * (attempt + 1),\n );\n continue;\n }\n return res;\n }\n };\n const prev = this.queueByHost.get(host) ?? Promise.resolve();\n const next = prev.then(run, run);\n this.queueByHost.set(\n host,\n next.catch(() => undefined),\n );\n return next;\n }\n\n /** GET text. Undefined for 404/410; throws RobotsDisallowed when robots.txt refuses. */\n async text(url: string): Promise<FetchedText | undefined> {\n if (!(await this.allowed(url))) {\n this.skippedByRobots.push(url);\n throw new RobotsDisallowed(url);\n }\n const res = await this.raw(url);\n if (res.status === 404 || res.status === 410) {\n await res.body?.cancel().catch(() => undefined);\n return undefined;\n }\n const text = await res.text();\n return {\n url: res.url || url,\n status: res.status,\n text,\n contentType: res.headers.get(\"content-type\") ?? \"\",\n };\n }\n\n async json<T = unknown>(url: string): Promise<T | undefined> {\n const r = await this.text(url);\n if (!r || r.status >= 400) return undefined;\n try {\n return JSON.parse(r.text) as T;\n } catch {\n return undefined;\n }\n }\n\n /** A `fetch` for image downloads that goes through the same politeness queue. */\n readonly fetchForMedia: typeof fetch = ((input: RequestInfo | URL, init?: RequestInit) =>\n this.raw(String(input instanceof Request ? input.url : input), init)) as typeof fetch;\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\n\n/**\n * C1 Unicode control character reference replacements (code points 128–159).\n * Index i gives the replacement for code point 128+i; 0 means \"no replacement\".\n */\nconst c1: number[] = [\n 8364, 0, 8218, 402, 8222, 8230, 8224, 8225, 710, 8240, 352, 8249, 338, 0,\n 381, 0, 0, 8216, 8217, 8220, 8221, 8226, 8211, 8212, 732, 8482, 353, 8250,\n 339, 0, 382, 376,\n];\n\n/**\n * True for NUL, UTF-16 surrogates, and values past U+10FFFF.\n * @param codePoint Unicode code point to check.\n */\nfunction isInvalidCodePoint(codePoint: number): boolean {\n return (\n codePoint === 0 ||\n (codePoint >= 0xd8_00 && codePoint <= 0xdf_ff) ||\n codePoint > 0x10_ff_ff\n );\n}\n\n/**\n * Replace the given code point with U+FFFD if it is NUL (0), a surrogate, or\n * outside the valid Unicode range. Code points in the C1 controls range\n * (128–159) are remapped to their Windows-1252 equivalents, following the\n * HTML spec. All other code points are returned unchanged.\n * @param codePoint Unicode code point to convert.\n */\nexport function replaceCodePoint(codePoint: number): number {\n if (isInvalidCodePoint(codePoint)) {\n return 0xff_fd;\n }\n\n if (codePoint >= 128 && codePoint <= 159) {\n return c1[codePoint - 128] || codePoint;\n }\n\n return codePoint;\n}\n\n/**\n * XML numeric character references are the referenced Unicode code point.\n * Invalid values still become U+FFFD; the HTML Windows-1252 C1 remap is not\n * applied.\n * @see https://www.w3.org/TR/xml/#NT-CharRef\n * @param codePoint Unicode code point to convert.\n */\nexport function replaceCodePointXML(codePoint: number): number {\n return isInvalidCodePoint(codePoint) ? 0xff_fd : codePoint;\n}\n\n/**\n * Convert the code point of a decoded numeric entity to a string, replacing\n * invalid values.\n *\n * Fast path for plain BMP code points: [1..0x7F] and [0xA0..0xD7FF] pass\n * `replaceCodePoint` unchanged (no NUL, C1 remap, surrogate, or out-of-range\n * handling) and fit a single charCode. 0xd760 = 0xD800 (the first surrogate)\n * - 0xA0.\n * @param codePoint Unicode code point to convert.\n */\nexport function codePointToString(codePoint: number): string {\n return (codePoint - 1) >>> 0 < 0x7f || (codePoint - 0xa0) >>> 0 < 0xd7_60\n ? String.fromCharCode(codePoint)\n : String.fromCodePoint(replaceCodePoint(codePoint));\n}\n","/*\n * Inverse of the encoder's SAFE alphabet (0x21..0x7E minus 0x22, 0x24, 0x5C),\n * precomputed once at module load. Entries for excluded chars stay 0 but\n * are never read.\n */\nconst BASE91_INVERSE = /* #__PURE__ */ (() => {\n const table = new Uint8Array(127);\n let code = 0;\n for (let char = 0x21; char <= 0x7e; char++) {\n if (char !== 0x22 && char !== 0x24 && char !== 0x5c) {\n table[char] = code++;\n }\n }\n return table;\n})();\n\n/**\n * Decode a dictionary-encoded trie string back into its Uint16Array.\n *\n * Stream layout (consumed in this order):\n * 1. dict1 atoms — `dict1AtomCount` uint16 values, delta+RLE encoded.\n * 2. dict2 atoms — `atomCount - dict1AtomCount` values, delta+RLE.\n * 3. dict2 ngrams — `ngramCount - (dictSize - dict1AtomCount)` entries,\n * each a pair of slot codes that resolve to earlier slots.\n * 4. dict1 ngrams — `dictSize - dict1AtomCount` entries, same shape.\n * 5. data — slot codes, each expanding to one or more uint16 values.\n *\n * Codes use a 91-char base (printable ASCII minus `\"`, `$`, `\\`):\n * - char1 < dictSize → 1-char code, slot = char1\n * - char1 ≥ dictSize → 2-char code, slot = dictSize + (char1 - dictSize)*91 + char2\n *\n * Slot index → token kind:\n * [0, A) dict1 atoms (1-char codes)\n * [A, dictSize) dict1 ngrams (1-char codes)\n * [dictSize, dictSize+D) dict2 atoms (2-char codes)\n * [dictSize+D, end) dict2 ngrams (2-char codes)\n *\n * Both atom dicts decode before any ngram, and dict2 ngrams decode before\n * dict1 ngrams. So every ngram entry references slots whose contents are\n * already filled — no forward references to handle.\n *\n * This runs on library import. Flat typed arrays store each slot as either\n * a plain value (`single`, covering every atom) or a range in a shared\n * `pool` (ngrams).\n * @param input Packed trie string.\n * @param resultLength Expected number of uint16 values in the output.\n * @param atomCount Total number of distinct uint16 values in the trie.\n * @param dict1AtomCount Atoms in the 1-char range (`A` above).\n * @param ngramCount Total number of ngram entries (dict1 + dict2).\n * @param dictSize Number of 1-char code slots; the rest of `BASE - dictSize`\n * first-byte values are 2-char codes.\n */\nexport function decodeTrieDict(\n input: string,\n resultLength: number,\n atomCount: number,\n dict1AtomCount: number,\n ngramCount: number,\n dictSize: number,\n): Uint16Array {\n const base = 91;\n const inputLength = input.length;\n // For 2-char codes, slot = char1 * base - twoCharBias + char2.\n const twoCharBias = dictSize * (base - 1);\n\n let pos = 0;\n\n /** Read one slot code at `pos` and return its slot index, advancing pos. */\n const readSlotCode = (): number => {\n const c1 = BASE91_INVERSE[input.charCodeAt(pos++)];\n return c1 < dictSize\n ? c1\n : c1 * base - twoCharBias + BASE91_INVERSE[input.charCodeAt(pos++)];\n };\n\n const dict2AtomCount = atomCount - dict1AtomCount;\n const slotCount = atomCount + ngramCount;\n\n /*\n * Per-slot contents: atoms (always a single value) live directly in\n * `single`; ngram slots hold -1 there and expand to\n * `pool[start[slot] .. start[slot] + length[slot])`.\n */\n const single = new Int32Array(slotCount);\n single.fill(-1, dict1AtomCount, dictSize);\n single.fill(-1, dictSize + dict2AtomCount, slotCount);\n const start = new Int32Array(slotCount);\n const length = new Int32Array(slotCount);\n\n /**\n * Decode `count` ascending uint16 values from a delta+RLE stream into\n * `single[off..off+count)`.\n *\n * code < 89 → delta = code\n * code == 89 → run-length: next char encodes runLength-2; emit `runLength` consecutive +1 values\n * code == 90, next < 90 → escape: delta = 89 + next * BASE + after-next\n * code == 90, next == 90 → double-escape: extra char for very large deltas\n * @param count\n * @param off\n */\n function decodeDelta(count: number, off: number): void {\n let previous = 0;\n let slot = off;\n const end = off + count;\n while (slot < end) {\n const code = BASE91_INVERSE[input.charCodeAt(pos++)];\n if (code < 89) {\n previous += code;\n single[slot++] = previous;\n } else if (code === 89) {\n let runLength = BASE91_INVERSE[input.charCodeAt(pos++)] + 2;\n while (runLength--) single[slot++] = ++previous;\n } else {\n const next = BASE91_INVERSE[input.charCodeAt(pos++)];\n previous +=\n 89 +\n // eslint-disable-next-line unicorn/prefer-minimal-ternary -- branches read a different number of side-effecting input bytes\n (next < 90\n ? next * base + BASE91_INVERSE[input.charCodeAt(pos++)]\n : BASE91_INVERSE[input.charCodeAt(pos++)] * 8281 +\n BASE91_INVERSE[input.charCodeAt(pos++)] * base +\n BASE91_INVERSE[input.charCodeAt(pos++)]);\n single[slot++] = previous;\n }\n }\n }\n\n // Streams 1 & 2: atoms decoded into their slot ranges.\n decodeDelta(dict1AtomCount, 0);\n decodeDelta(dict2AtomCount, dictSize);\n\n /*\n * Streams 3 & 4 are read in two passes: first collect every ngram's two\n * references and derive its expanded length (each ref resolves to an earlier\n * slot, so lengths are already known), which sizes the shared pool.\n * Pool ranges are handed out in decode order, so the second pass fills\n * the pool contiguously with a single write cursor.\n */\n const references = new Int32Array(ngramCount * 2);\n let poolSize = 0;\n let ngramIndex = 0;\n\n /**\n * Read `count` ngram entries (each = 2 slot-code references) for the slots\n * starting at `startSlot`, recording references and assigning pool ranges.\n * @param count\n * @param startSlot\n */\n function readNgramReferences(count: number, startSlot: number): void {\n for (let index = 0; index < count; index++) {\n const slot = startSlot + index;\n const a = readSlotCode();\n const b = readSlotCode();\n references[ngramIndex * 2] = a;\n references[ngramIndex * 2 + 1] = b;\n ngramIndex += 1;\n start[slot] = poolSize;\n const entryLength =\n (single[a] < 0 ? length[a] : 1) +\n (single[b] < 0 ? length[b] : 1);\n length[slot] = entryLength;\n poolSize += entryLength;\n }\n }\n readNgramReferences(\n ngramCount - dictSize + dict1AtomCount,\n dictSize + dict2AtomCount,\n );\n readNgramReferences(dictSize - dict1AtomCount, dict1AtomCount);\n\n // Second pass: concatenate each ngram's two halves into the pool.\n const pool = new Uint16Array(poolSize);\n let write = 0;\n for (let index = 0; index < ngramIndex; index++) {\n for (let half = 0; half < 2; half++) {\n const source = references[index * 2 + half];\n const value = single[source];\n if (value < 0) {\n let read = start[source];\n const readEnd = read + length[source];\n while (read < readEnd) pool[write++] = pool[read++];\n } else {\n pool[write++] = value;\n }\n }\n }\n\n // Stream 5: data. Each code expands to its slot's stored values.\n const out = new Uint16Array(resultLength);\n let outIndex = 0;\n while (pos < inputLength) {\n let slot = BASE91_INVERSE[input.charCodeAt(pos++)];\n if (slot >= dictSize) {\n slot =\n slot * base -\n twoCharBias +\n BASE91_INVERSE[input.charCodeAt(pos++)];\n }\n const value = single[slot];\n if (value < 0) {\n let read = start[slot];\n const readEnd = read + length[slot];\n while (read < readEnd) out[outIndex++] = pool[read++];\n } else {\n out[outIndex++] = value;\n }\n }\n return out;\n}\n","// Generated using scripts/write-decode-map.ts\n\nimport { decodeTrieDict } from \"../internal/decode-shared.js\";\n/** Packed HTML decode trie data. */\nexport const htmlDecodeTree: Uint16Array = /* #__PURE__ */ decodeTrieDict(\n \"!}.&u%}'&}*'~!6*)%&,~!J~!J~%L~y<~!R,~~%Lu~~#GD~~#|)1#%}^%}2%+#.##%##%}&%##%'#%##&%#%#'%#&#%#&#'#%%#&#%##%#)%''%&%#%#'%#%%#%%}%%%#%#&(23#%%#&-%0%('1#(##%#'##+%'*.:1}#%#6-+(%'%%#%%%}#L'2351&('%}&/N'(0(/*-%(%%}#'+&T%7.2}#&%&#%#36/5##%&%%#&#%%#))2%%##%&&'0~!#*+&'%1~!%).'3q?&%'1~!.##%6(~!+%%%(Gw'rT~!E#<nA%#jZ~!H%(~!42##~!*31&~!G%U~#)5~#`3~!J~!Z~%]~%Y~%C~!q~!u~#kz~%#~!6'~!D~!U~!?~#T~!c%~!G#'~%7|~!G~!J~!G&~#pb~(Df}#%}*&}#%##%##%##&#-}&'#'&%#.++}%mI,#,@&(}*%}*'%&##&#%##%}&0}#.},U},%}+%}&%}#%##&}B%(}(%}+%)})%##%#&}&%##%&}<%}>%#%&}*%}(%}9%}/%})%}*%}*%}?&}&%}3%}&*#%})%#%#)}#&#-#+*%E%%'%'#%}#*V##&##I}#&&##%&%#&&Qf%%))w/0+&%#(#.%-''''++++7}>%4'',##1,#%#&%##&#'##&#*#9)%&%}#*}%,#+P(%A&%#'&##wSD',9E00#y#@}(+}&%&>~!#~!X}#*}(&&}(&}(,%}%&#+&}#&}I%#%}%)#(},'%#*}4%%#%}(''}#/##(##),%-##%%)#&}(.}&%#&}%%}*&#%},&&}&%}#%*'#%})%}D&}&%}-&}6&#&}-,%}#%})-(~+`~,=?~I9'9%~!,#%})%})%}@%}?%}(~!?~#<~#pP~#BG~#=1#%K+~#?#~%;)~#A~#mF1~#A'~'X%'~#lR~#N~'N~#r~#m#-~#i'?%#'%~#B%##%,%#~#_%#0%~#]732~,w~2+#:&#%&'0%&>%}#>##F+)#%&&#(+_}4&}-%}(&}@&}O7Fdf0@+/v4}&WU##&/0#&'('B#%}.%}'+#%}#%%&#&%#%##+#&#)#6#'#.},%}c%},%#%##%&#&%#&~#>'*-.%##%##%}#%%}%'~#)D1}#%*&~#_%%'(~#S2%'.}#~#=##*'*-%}&'%'##&&~'E%.#&~#M4}%%##&'%#~#O1##%&#'+~#<B%##%%'%+~#;#@%}#&%#&&%#(~#H1}'%'##&&~#?A}&'~#D#%32}'&&&&~#[}'(#%}'~#;C})&}%%#%~#=&%,3}%'(#%%~#^'#&&)#%'~#Y%-~#d-%'~#^%%&#&&&}#~#b~2t*&'~&(~&@~0%~e~3}%*''0})&}+~!9##-}#%-hD*)1fC#%/&/fB#40~!+#)*4~!+~!K'&:~!/*7~!.#~!H~!L':~%x&~!H#~!*~%1~!I#~!+A~#p'~!F~~#-#~,,(~.Z~!V~%;'B'mq-W~!N~%I%#&&#&}#%},%%}'%}+X#%}#&}(%}'%}<%}#%}%%'}'%}:~![)9@~%>~#UA%-%##&~!C%~!-.9:~!1~!-^2/:a~!y,D*J#-5)/4~%23,~#G~!L1~!0X3`~!2+~!!0-~&E~!W~!o,>Y&]~%cZx_&~#O*9#A#'#+I'%#)~!0B*-5A+-((F&*M#)(-7-5+'-3a5Vi~!Y~!?+[)%3),ERHm~!+:D,VG.+)?fB%%*(%)'(#&80%1'8`K8?`+'Z#&O&'H5#*9)A%%5&3))0%39+.*7#()&&*=4@**L)<'_&*+..;(#*+)./&0#3)%')-8(4ixD(&.}%,('aI:,)%,k2231T)I'#/-W7,/'Q#.'Y24+h')37</31&83##&0#),H(?'&?/1##%#&&#%''-%&&&#(&''&#.-'%#%%(,')*'&#&#'##%(%(#%('#&##%%%%('%#%#%%#%#&%##h>w+v<ayvyvcg.uuhKr}g/v|g>u9i[~>g5uI~=RvdwEg;v/g;uk!!TTSx]@RT!U!#!@VBRUU!'UTe-d0c`e&gSdicedFcrdTaqb.kYcAohdYd@a3e+d}dMdtd.aJ#bqcK`dle/e.e'dwdPdodddjbEb}ogd^ofdpduc6j?l%d{drdqc)d7bacOdQ%T#Y)X.sR[yH>6Vyv3[xwLu>vo'!*.[yBacahoj>6Rew3[xqdZa#!a&#^(X-[yG>6Vyu3[xvg3sEr|g.u/Ri9db0T#^(Xa)!-[y;>6Vylg4wKs{JwNZt3@3r=c4Z([xlg;wKt!cpq's@v7A'*a(a+!-a#[y<3Dt?3Dt'>6Vym3[xmg9rxsNJwLZt4~?r?db1T#`-!(Xa,!0[yS>6Vz%NuQs.g4wKtnJwNZtS@3r>c4Z([y%g;wKtrdga8!a(!#&T*Y-Xa#!a0<or[yc3Dtq>6Vz43[y3JwNZtf@3s!Ju}!%Dti:pm3c_%X#tjB5pkd6q!r]u?voC'*-a.a2!0a&a+[yI3DtI3Ds~3DtH>6Vyw3[xx;:s#~<5pKJwNZtE@3r~d`a)!a2T#a.(!+U.X1[yT3Dt`3Dtv>6Vz&3[y&g9rxwzcxstPu.<rAJwLZtT~?r@dZa%!a.&^*Za(/Reu[ya>6Vz23[y1g3sEr}wkg{NuQRg{ci(U#5@b`~,cg#U(2WnH5wugcRh7dX#T(Y,a'Ta!!a,[yZ<]mj>6Vz,3[y+Pv#5ReZKu+=,%!H}7ABwkaS?Rh:BcW(X#<]mrj:ubv/ARekdg%!(!a.*Ta(Y.X1!#sP>Rl*Dt6[y>>6Vyo3Wf*jOvuumvuRgRJuq*!:9<B@bX~3jVv&v@s@5Re[d/rQt{uAvo&a&a*)a2!,0Wf!3Dt0=Bs'>6Re}3[xy~<5s%JwJZt1~Gs)c;&!#2sJkNuXvzq7rxu,Re8dka4!a8(aEZ+a@Y.X1Xa)[yd=Bs(3DtP>6Vz53[y4cX#X&Re:avRe9~<5s&JwJZtQ~Gs*i^rzvdRg+Jv{%!2sbB@bX}kdga,!Za?&^*T1/!a'Dt+[y6>6Vyf3Wf%g/u;s4hGu6?Rh-JvZ,!c%#&RoX54Rivj7uyvf8RgTKvZB%*!2sGh<vu5Rgq<=C::9bb~#dZ#T&Ta6Y.X*Dt>[y93Wf)coZ(T,6VyifluvRgC@95@B@bX~/hFu34cC#T,k/unq8w8Q5RkUklwQuzunq8w8Q5Rk8d/rJu?v8w9)-&!a0a;a&aIWejg3sEr/h1s<DtDJvyZqY5aws3Jvy!&Wei~Hr1:au5@Bag>23E~5c:Z&bX};kKv?w&unuVu5Rjc;>bs)#~@:Rh.=ay<a]C;b`}Vd6s/t{uAvoaxa()!a,a7%-a#a2Dt,[yF2Wo[>6Vyt3[xuNuPRi&NuPwpi#RoWh?vf8Ri%Jv]!%Ri:KvxD!.'2WeAjZu`q9rxu,Re7woeAg-unLq(qA_/*2Wg_g3u5q^9:4E}/jTrxrzv=Wkkd~0UX#^^Xa-a1a5T&a=U1a'*aEa]!a*aPaA-adok[y54Rn>;:p3~Dp5g9rpsFNvZqjg3uJp4~<5p0Pw;5qlJwNZt*@3p1Pw:5p/Ou!5p2JvG'!6Vye=<qnJvh_[xhg3v,Rh3kOwOw-sDuev/Re^dha[a%!%!a+#Ta7)-5TaCaO!aka!a)sf[yb2>Rl!9ARiq5E}Qg=ucRkBE|oJrJ_@Wk~@Wk{JrJ_@Wk|@WkyJrJ_@Wk}@WkzJvO_[y2g-vMRmiKuYC!)&>Ri;>Ri<@3RkNc](X#@9Rk=g5vuRmhKvDB!+'=]meg3u4Rmgd)#Y'Vz3CARmfd`a+!%T'!+#Ta1Ta6TaM-sTDt9[yA9sYd'%Y#s[[xpj:ueunaXRgEjRq,v-vuqdd2'`#6Rev<32@5>:2<E}5xIo9a*X#Y(;5RePJvD_g>vyRgNj8w)v8<wggs:RgXiZt|vjx,hSq3ah!-(~@:Ro/Ou!5RhWj^v(pyw8unRhUdx-UY#^Ua.a3a70!)%UX1TaDa)'omRiRRhE[y:3Dsz=Br,>6Vyj3[xkg6ruwjcqsrPw;5r*Ku]D'Zt-@3r(~?r.i[vwv]dU1a--U#`a4(g/vsRhPOu!5RhLj:rmu9Wo!~@:wdh@g/vsRiTjXuvvNr}:RhBj^v(pyw8unRn]dz1UYa'a+^Y(!aETZalaRY.Ta?a4[yDJw1!#qLsW>6Vyrfzq-pLflpwRe|Js>%!Dt@3Dt&Jvy_[xs~HrnjMuwpsw'RecKu+D#'!t<~Grl~?rjg5u-x,gwp{ah!-(~@:Rg~Ou!5Rh'jXuvvNr}:Rh#cW#X/c;&!#2sLi[v7u7RgpJv)(!iLrxu,Re6j7v@s@5Se[e7d`aW!Za(a`T.a#!a3!&aDa-!9)Dt_=6s+3[x~~DR|h~DS6avhGun5RkZj3w)v-]mkKunB!&*]kb97R|i<ARk<c:Z(6Vy}Juh'!wziMRoS:F|vkLuauJv5vtvQRh1d='T+Y#VyO~DR|jcF#T'7R|g97R|kJv3'!ay<Rj,Jvh&!:ReXcsa6*a+#a#_aIRf9aLRf?c,Z&Rf5Rf7c.Z&Rf;Rf>cQ#%T'p-Rf8Rf=ct#%'(*!,p,Rf4p+Rf6Rf:Rf<d~'Ua%U*^UYa(!a,-!#a4YaTalaEX0a8a<Weo3Dt/3Dsx=Br93Wen~Dr;~<5p<JwNZt2@3p=Pw:5p;Ou!5r3c7&!#:p>3Ds}KvGB)_6Vyk2sM=<r7x'eovA(!hFu1ARf}cV#X&@r5j6rvwQa^Rf3c=Za'wkghJv__g;unRggA53B9=b^}%j6uduo5Jq;!(hIv%2Re`Ou4ARe_e%a#^^^Xa&!a*a2!&a6YaP!*ad!#a:aE/5Rn?[y@>6Vyp;:pE~DrY~<5pBJwNZt8@3pCh=rt3rWPw:5pAJup_[xoNuPpF9c!#'45pD5ARn)d8#X'X*3@rU72s]h>v<<sSjJpqvewOJq/(!hNw'5ReBk0s2u3w/w'5ReE5@Jq.!a+JQ!&WeU23d(#Y&RjG5]jBk!u7w&u0udARjEe#+^^^Ub#!a2/a`Z(agT1!a-a;|@TaG!aS[yV=Re~fow'RguNuPRe?bz#'>RoUWeL>:Cbb|?JwPZtVg6ruRmzJvD'!6Vz(g/vmRh~Jvy_[y(g9voRgyx*cy(#2>Ri2B9b]~9kIw9u7rluJu3Rg]dI#a%UY'@=p%CAx.gQZ&RhwwygtRm{x5g_Z'+ABqR9Woa=Bp&dV#^*Xa'!&@o{g4v]Rk;Jv{!%Rk[wkkiA5RkiwwfUB=x,fUuqC&*!>RfTg8v0RfV~ARfSd;rJsAuAv9wR'ae+/aO!a@aza/a#[yQ@Wg!2Wemg3sEr0JvB_g>uvReWg2v+Re=KupB_+[y!2AbY~-~Hr2AJwD!(h<~El>h<~El?Kun@+_:9b`}Kg-v/Ri3g;vtwyk_9]k_d=&T#*U.6qh@Ab`|K9:H|CJv[!&3Dtex'fDwC%!Rf[9WlMd[(^X,!a%Z06Vz!@WgBg=v~Rgvg,QRe@awd,#Y+jTv|Q~EfWj]uNr|~FRfXdy#Y&^Ua%!aO.!(a)Ua;=!a@aKap!a-,a!Ta]a[rSa]p?[y82sK=Bq~;:p:~<5p8Pw:5p7d'#Y'Wf(;RnRi[u4w&RgJJvG'!6Vyh=<r#ijuuv/sIKuYD'ZtG@3p9~Gr&d2#`(g<vtRgFj`u5w&rqpxRf2CJuY!+:wfnTOu!5Rg}jNs1ucv&RfwJvA!&3@q|BDcC#T,k/unq8w8Q5RkTklwQuzunq8w8Q5Rk9dga#!a'!a=#a0!:+Tb*b@aO.a4!aba8aFJv^}?!VyR~Dr<g;u%Rn.~<5p[x'e`wNZtR@3p]Pw:5pZhNvjBp.woe_g5u-r4JwF!%DtO3:ooc7&!#:p^3DtpLuGw(!+%)Dtk6Vz#2sd=<r8d'#Y([y#<x3gJt`w@!)%}MRiowzikRij=]ilxAf3,U(#B2Rf#g0v-Rm[ck{`U#]giKv3>)!&6Ri154s,KuGB_%@r68r:dJ|t`#X(9<E|u2@H|rx3gJu?w'!+'1Nu7Reg4=H~+9<wxgY95Rm]xLggZ-`(X}U2:Ri4h<uOawRmsJv__5@bb{jbV~3dka#a'a]!,#a+U=a>b6a3b%!/aKa/)!arwve^VyJ;:pR~DpTg3uJpS~<5pOPw;5qmPw:5pNOu!5pQJvG'!6Vyx=<qoJvA!{~Jup!%@qk7Rn/KvyD!}''[xz;>wkh'?Rh,x8gyt`w5D!&),(SgyccRgztJ@3pPB5p#d'(Y#<]mmifubw&RgoJvE&!82s^JvF&!8Rf,ADb]~;x=h'rNu]vK!,%'*0RnORh)4Rh*AqQg-vaRnNg;wHwkh'ba~4cE#Ta*x3gctyw@'!+%RnFRnD<4Rn@hFvK5RnCxWg[#`&a0Ua()`1Rm75Rg[c]%X#qi8Rg^NvdRj>BwzgZauwji7Rm6A4wgg]d1#&(*,.0a#Rm;Rm<Rm=Rm>Rm?Rm@RmARmBe%#^^^Xaea?aC/b+(,!a+a#!a/!>a&Ta<aKbD!2wphBRnk[yPw}hE|.=Br-3Dtm>6Vy~g6urRf.x,hPrNav!%'RnqRo%Ro#Nu;q[Pw;5r+JwNZtM@3r)d'#Y'Weh;xChL#`&RnmRnoKu}>%(!Rne~Bs-;2wjcussJv+'!aYSO}6@B<5?ba~8LrNvj!.%*ROwungw~ng~:9;Ri^>wtnig;wHRnixDh@|(UZ.x1h@|)!#:2<H|*xHn]#-UX'3Ro)z=iT}6ARns=Bwsn_wpnaRncw]aR(#UXa&Ua*a/=]iPd'#Y&Ro'WnXf{QRm2hNvj]nZd`'T~&1`{|`#9b]{}c:'!#Wl{>@=be}]?cl{{U#:5Abb}Jds#^YaF!a*b4a#a3aPa>&Tb!bH!*a_!Eau?/a&RjY<]gj>6Vz*;:pe~DrZg,QRj1JwNZtX@wihspcJvZ&!VyX9WmOJu|!|N2WmHJvh&!]ht~Bpbcn&T(!#RmQ<s7Nu;padH#X'`+WmJ@>RmKCARhnKup=!)&Wf+:RhqNuPpf9c!#'45pd5AwghpARn(Ls@w!%,)!RmP@Wfe<E|IJva!&WmNg8vsRmLd`*.`#Y'Xa!axRn*]hrA8Rhug5s@rXg8u!RmMd8#X'X*3@rV72smdI*#UY&RmICARho~GsgxVgd)Ta'U-Y&Xa!T#RnEWnA@Wffg1uDRi0hFvK5RnBxGnG&#`%owp)@wsf+bX}Ze-*1!a*^^^Ua|!#a.aq&Ya2!a>.a6!a:aO`aJDtL[y`@Wg#>6Vz12@wzoYRoZNuPRi!NuPRhzg=ucRi,@=b`{Yg=ucRi-ACJvB!&Sh[ebSh]ebi`wUuFRm4Jw2_[y0JvB!.<Ju(!&SoG}6Shd}6<Ju(!&SoH}6She}6Kur@._g5vHRieJvx!{L2G{Kx6gd'T#?Rh82Wi5cZ#X(g1w)Rm5dW-Y(Ta#!a)!#aYa=wnfE=su2>>bU{0j9udv:<svj8uQv-7RgHdE%#^'sq9sp=>Bb_{TJv`!&g/r|snj6v(us5d,#Y(56H}[978H}]Jw5!&g1rushJvB!+j;v{u5?zDhd}6}bj;v{u5?zDhe}6}ce*#`(^^^a[aea!=!a6a*aoXb1a.!aAbL!b>,b'aL!aV@Wf|2Wlg3[y/JwNZt^@3piPw:5pgJunZou3@rsJva&!Vy_g<v~Rm#JvG'!6Vz0=<r{Ju{%!:pj@WfsiXuJu3Rm:JvZ&!WfA~Bph@c4Z&Dtwax5rubx(#:awRk1@d,#Y&RfjRfid1#,Y(@Wfp2Wlrg5s@ryKu[@!,'=]ig9wlk?Rk>g5u-rqJvy'!@9RkQcH(T#=>Ri~@<wkj(Wj(KuZB*!&<7rw@9RkRcH(T#=>Ri}@<wkj)Wj)dg(Ta2Xa9X#`-!a*CARhg@@=I}d9x;c~#X%so=<sj>2@@=aybb}XjWv0Q~EfEj3vLv;<d,#Y(56H}`978H}_dgaPaFa'a/!#a3Y0a_a;a|!1(a7-[yE3[xt;:pJNvZrrg3uJrvJwNZt=@3pIh=rt3rxPw:5pGOu!5rpJvG'!6Vys=<rz@c4Z&Dt(ax5rtJvZ!&~BpH@wsfNg-vaRlNci*U#=<wei<F}a5@Jq.!a*JQ!%@qZ23d(#Y&RjH5]jCk!u7w&u0udARjFd/prq=tyvpaEa(a:.!a1aZ(@@=I}:9wpd%=<sX55w_h}@@=I{t=ay<aU@@=I}T=ay<2@@=I})?C9:9au@9Cb]}DP~=x-fAZ(2Wl1=ay<aU@@=I}>5@d##Y+jTv|vV~EfFj]uNpn~FRfGdgaK!Z2&!a8a-Tb({E!acTbM*!a(DtY[yYd'%Y#sl[y*hHvh>Re5x2c{Z}.j4uCvcawRiMd+#X+_x&d!},<5RkX;2Hzw@x,gavfB-!{CcF&T#Roe;RodwWbBg5urRgaKvHC*_6Vz+<4opieuew&Rmq@d]&Y)X,T#X0Rh}<BqP=4qS9:ReMg/ujReNJw0!/<Jui%!bd{kawwnemRelAxUa?a3#*.&UX(Ya+a/RhvRnQ<o}9Wmtd-#Y&RgSRmw9;Rmxay=Rmyg-vaRmuxEhSrNu,v-voC!%(aR.a(a7+1Ro1>Ro5CE{A9b]{@;5x#eO{:g;urRi+KrNA!%(Ro3>Ro79;Ri_Ku@>{;&!x%gX|{KunA_+g5QRj/g3u5Rj#g>uERj%wio/xRhS&!,!#^1U}wba{8>>@=be}qC@:D5ba{7Ku+A&!}x?ba}t>>@=be}se(aA^^^Uat!b0#{pa+awUazbGa#aLb9bgaWac'a5TbS=Br!d1#`%scp_Jvl!#rT>Re0JvX&!VyN=H{Fcm#U&:pY=ReaJv2&!]h0=]nUJvG'!6Vy|=<r%JrM_=]h2@Wlud'#)U'Wf'b]{i=]h/Jvh!&~BpWg=v]RnMx+ny#'Nu;pVwjnu=]nwxJnx,T#`&Reqwjnt=]nvieu9vrRjLLuYwP(#+!th@wih5pX~Gr'g5v/Rh4KunA'!-CARnP@wwiN:Rm_9x'cvw>!|l=<saKvAA!0&3@q}>w^e1bp#&Re2Re3BDx7gH#T|f5H|eKuZ>!%(:qNAH{]Jv6!+3B2B9=b^{X<5<B92:E{ZLvhwA(a;a%!igQuyRmad+#Y}m@3Rh5d8#X'X*:AqUAHzmaxwbh<aXRnVcF}RT#Nw&cj#U(BWnug/vsRntdka)(a3+.Zb7aYYan1!bVa@Xa}[y^@b[{G=H{+hFu73Rj&Pv#5ReQcK%T#sig1v{Rj'Ku+D#'!t]~Grm~?rkKuMB!01d5#`'Vy.ta3Dtu~Hroc8#'{^45s85AwZbP&!#Rn!wghxWn#KvEA!)&2RlA2RlBx:h|#(T,=]j09Wobz>x]z/@awRoTd+#Y(az]hFhCrm4d,#Y+jTv|Q~EfMj]uNr|~FRfOdCa!Xa9_X#@<plJvf!%b`{(9;Rgwc;.!#2x7cw#T|UDb]|T5Ju={(!=@E{&Jv)&!Ab`{'awJvf!~*>>@=be{#KuY>!+&4Ezyi[ugv&RjIdea+T)#UXa&T-T&a!Rh9auRmW=]kLg5vuRn+g3u4Rn-Ow6ARn,hHus5xNk?#UX(U~)/g8v0RkD~AwkkF?Ri.OuNBwkkA?Ri/d|a2`a*^UYa.!aBTZaTa'Xa;!(!2!-a#b2[yC>6Vyq3[xr2Wi?g1rusVh%s?DtF~<5rbJs;%!DtBfswKtCj[uvuSsEu3RgVx3o:u+wN'*Zt;@3rd~Grh~?rfg8w)Lq)qE&-a%!>bI|`jWv0vV~EfCjTv|vV~Ef@j]uNpn~FRfBcK#T']gWNu7x,k7q4ai(0!hHv8<RhmkMu9vrsBuev/RhlCJvB!,g<v{wchh~@:Rhji[vrv{wchi~@:RhkdS&a5UY#Ta!RgPwwiI5BwciI~@:Rh`x'iJvj'!5]iJPu8Bwch]~@:Rhach)U#h3rp]gLh@t|Ax,hTq3ah!-(~@:Ro0Ou!5RhXj^v(pyw8unRhVd|)`,^UYas!a?/a2Z'a^Ta{Tb7Ta(a#!a,Wf&9sZ3DtAadamov=Bqt3[xig8vsRm~>waiL2b`{QJv*_Ouv2qgj<v]v2BqfdR'X*X#Y-@3qr~Gqv~?p6hHv-]glPup5Lq+q?_%*b_{qF{n9b^{rOu4ARhpKvCD!+&~Bqp:5Dbb}nwoiKl&unuTuBv]v+ueunaXRf0=Jvh!0nKufu8v1w&w7q%w&uHrz:Rgnj5w,uxDJq/(!hNw'5ReCk0s2u3w/w'5ReFd>Za&!*UaA=<wkgsRnSJv^!%Refifw3vyRgOKu_B'!,<]gkiiu:w&Rh<=C@a^<B57@2F{[<B5@aW:=3away9A5aW=<B=C@a^<B57@2F{Ie-#`(^^^bCara.b8aza6!/bZ,!adTbnTbOb+aFaS!aAT9@Wf~2Wli3Dtl2@d,#Y&RfnRfmJwJZtN~GqyJva&!VyMg<v~Rm%iXuJu3Rm9Jv[_=]ih9wlkDRkCd1#`(@Wg>2Wls3cH#T(@<Rj*=>Ri|b~'#23s9h<~El.d'#Y&Dtxi^rzvdRl#d*#U%(o|B2s`hJwSaxRmDKv4B&!1:Rmdd5#`'Vx}to~Hq{x'f1v3(!BA5ba|bJv_&!Wfug1v]ReIdO+U/Y#&G}-8wze=Rh{g1v]ReHg/uQRf/by#)ibQwERl/cH#T(@<Rj+=>Ri{cNu+vlax-!(#a0qa9<Rii2;;bU{H;x<i=&X#Rk`<4wwi=C9H~8xAI(Y#<azRi@45wXI<B9;5bb~7dL(X#Xa(+!aL6Vy{g5QqOau:5au2@ay547EzbxOcU(UX-T#Ta#:Cbb|A?wjh/b_|SOw6ARgtihr}u7Rhy<d1#T)X1@@=I|~=ay<2@@=aybb}Sj3vLv;<d,#Y(56H}A978H}@dGpvs@uAu`vcw9*!aFa+ai%(b!aXa8.a?a[ozWey=sU2@G}Nch&U#Rf_WexKu+D#'!t:~Gr`~?r^j]uNr|~FRg*j^psurwJt|RmcKv)@&!)7Rkv~Br[@wxfO:Rl3co#U'6Rezj_q#vIuavjRltwzeyh@vr5JqD0!>aY?C9:9au@9Cb]}9cl#U*5;5<H||jbuus1ucv&Rfvg1v~d/pppzqFr^a--a~!aMat1(hFv;Wiz@@=Izoj5uuv-7Rix~Cw`fk2WlVcZ#X,k)u3vWs@u2]ktg;wEx'fBq(_2Wg/jTv|vV~EfoJv]!15x'hzqG!(P~EfU~CRl_j6v(us5x4i-#T(2WmZ?C2F|d>Kq<aj1!*jTqIsBv=Wl`~Cw`fi2WlWj`v0u*~>RlR=c>Z,k#u3vWs@u2]kr<c1Z+jTqIsBv=Wla~Cw`fm2WlXdmb3!a{(arZa`bkTa%TbQTa-a9+c'!aM!/[yL=Bqug.w'RifhFvyDRj.g>vgwyk^9]k^Jv3_@WfbAARkhJw2_[x|JvB_wkoIRoKwkoJRoLd'(Y#<]gm=<9<H|yd'%_X#skDtb3awwqkgNulRkgdB#^',9:p'hJwSaxRmEBwVb8@4=H|qLu+w50&!)@3qs~?pU>Awwn;;Rn=c:Z'ARn<=<qwKvC@!/&~BqqJv6!&]eVb^z^xRge'/a%+^`#Sge}6<4Rn3=]n0Pw2>Rn8Jw0!&>Rn:>Rn6cY#a7+!a&=<wkaNw~h3z_c5Z{=wjh#=]nLKv^D!&)Vyz=bW|swYb<WetcG#T(2wxa@qVx@gD#Y&b^|V5JwG&!5bb|pg/w&RgD@x=kHs=uAvn!a%%/'+RmSRh694Ro`g-vaRmRhHv-]mlxCcS#`&ba~.5cD#Ta)P~=d,#Y(56H{>978H{Dd_#{2^Y%_+qbbb{6g3sERhsbU{?dfa.,`a(Xa<!aiX#(55RiG54RiHcI#T'WiU3RiVNvdwtfcRlKNvdd,#Y&RlHRlExQgf.1*^T'X#Sgf}6Wn4=]hfPrk>Rn7Jw0!&>Rn5>Rn9Lunw?&a2!,5<oq@@wqfdRlJj5Q~=d,#Y(~ARfcOuN]fdDKw;ay(}i!547E}j?cI#T(@5bV}iCbV}hdv(^^Tb?a40,b##Tbo!a*bR!a<b|a/!aKai!aU[yK=]o^g:v>ReGJwPZtK<7Rh+h<~El,Pv#5ReR@awwxjCg,ulRjDJv6&!]j!z?aQeeg>w=Sh<eeJw;!&axEzOg,Qosc!#*:wkeJ]eJ>x'h-u(!%Ro.w~h.zPdNZ(X,Ya![x{;9ReY;wkgxRiF:x?ap#Y&RmUg<s2Rkod]+UY0TZ'!a&A9sw<=bczLNvuw{gqzNhJwSaxRmCKuLay!#&s_Rf-55b^{uJvZa!!c%#(55Ri654wmiu5RiuawLu,vp!+}^%b_}Y9;wkgxba}o>A9:=b^}zKuh=a''!3awRk3c*'!#aHRk6c+Z&Rk5Rk4Jv)&!awRjSawd9*`#0?C2@EzMj8u<uJ5RmbjQrquJu3x,k>uq@_+=ayb^|W~ARkEOuN]k@7dhzV^X/X&a-#zRzSb`zXcJzTT#2WkVKvDBzW!%FzY9;5bbzWjQrquJu3Jw3%!b`zU=ayb^zQd:#X(T-a!6Vyywxh}=b]{Jg=u1RiAdGp~qHtzv!w(wA+a+a;<!aJaYai'anasb(=azRmV:Cbb{MLq2vb!%')RjuRjrRjtRjqx3jnqCw3!%')Rk(Rk+Rk&Rk)Lq2vb!%')Rj{RjxRjzRjwLq2vb!%')RjsRjpRjfRjex3jcqCw3!%')Rk'Rk*RjkRjl9<CbbzfOu4ARhxLq2vb!%')RjyRjvRjhRjgx=joq*uKvb!%')+-Rk.Rk%Rj~Rk-Rk#Rj}x=jdq*uKvb!%')+-Rk,Rk!Rj|RjmRjjRjidAq&qKs@uAv8Aa.'*-a@a&0!aM@a5[y73Dsy3Ds|3Dt):wxgI2sHJwJZt.~Gqxwsf0ikrzt}Rl0Jvy_[xj~HqzKv_A|D!&WfP8axRoVcf,U#k(v]v+ueunaXRf1Ju}'!g8u#Ri=jQw!sCunLprq>!,')~<5qeGzq9F{W=c##%s5au:5aU3CBE|;d4#X(D!a&6Vygx(b;#(=]ed?C2F{N<capoq2r[a&!aPa9,'Pw;5s:@@=I|,55w_h|@@=IzcP~=x'fCqB_2Wl2>aU@@=I|1OuNBc1Z+jTqIsBv=Wlc~Cw`fl2WlZ~AcTa%!Z+jTqIsBv=Wlb~Cw`fh2WlYk+uNqJsBv=WlSg,u3dca3#UXaMYa)TaB-=cM|7T#<bI}l5@B932:aV2G{BOuNBJq:|M!5Ezt=<B=C@a^<B57@2F{v>cB{/T#=ay<bI{3Jv6!a.6BKq0ah&+!5E}HP~Ef{978BaU@@=Iza<7d#.Y#978BaU@@=IzH~AJq0!(@@=IzG978BaU@@=IzFe,aU*Y&^^^bvJb,b:bFad!a,c2Ta>aL.bo6!a#CbTa'T#Re{2Wlh2@G{yg6t~Ro_NvdRfticuRQRllJv3&!x&c|zs@Jw3!%RflwpfkRlpKuL;%(!Re<@G|C2GzdhIvuBwgjAg-u0RjAKQB%!(GzZ@G|5NuuRl7d='T+Y#Vy[g<v~Rm!==G|>JvA!)@wma=]m1ifuaw&RmnLs@vT'!|/+[y,g:v>ReTJw1!#qX=x!eC{bLu+wT&)ZtZauq_~Graci&U#F|89:r_Lupvq!.)&2RlG8RfaC=x!eF{_h?rpWlmd&'!#X|&]k::xJey#`'T|+<E|&2@H|%dE#(^,g;u.RiEg6vjRiC9xCkA{O|zY#g=ucRmXKs0@!&*@G|m@awRknJuh!,3d(}gY}eJvj!%Rm):Jw3!%Rm+Rm-Ls0w(&!a(a#@b[|6cZ#X'7RkxWgAOu4ARn'dH'U#Y*Vz-Wm'CARm}d]*#a%^a*T'aK!a<9bV{PC=p*Jw4!&SgxcbB5r]idw(wBRmF7xFkt#&`(Rm/Rm8E|!JuY_9:Rl5=wrgr2:bbxd@xXfB(a*#T+!.X0X1Ta/a'T&RlDRfL>RlyARl9b[z[>RfZ:RlL:RfRwlg/ARl;9;RlxKv,A/!%7s69<74=BA5ba{-8Bde#`a<XaKYa1,a'P~=wxfB2bZ}}?C972@@=I}r8@55B9;5bb}G978B2@@=aybb}3j3vLv;<Jw3&!>Rfk=ayb^}4~Ad1#`*@@=aybb{w2@>==<bbz]dx+UY#^UaF!a9!bB'Ya1.!ajXa#%olRhD[y=3Dt#Ov5BrHKuMB%!(Rf^Wep~HrJwkiQjKr|~FRg)Ku+D#'!t5~GrF~?rDdV)UY,Z/_7RkuG{<~BrBg,rlsO:235B@bX}|d?a1!#`(6Vyn5@d##Y+jTv|vV~EfIj]uNpn~FRfH7Lq2vb1!a9-978BaU@@=Iz9978BbU}#~AJq0!(@@=Iz8978BaU@@=Iz7~AJQ|}!978BbU}!JvkaK!AdUa21-U#`a+(g/vsRn~Ou!5RPj:rmu9WhOjXuvvNr}:RhAj^v(pyw8unRn[kPr}p|u7vwv]RiSBd;pppzq@qHQa?(b.!a.a`@.|xa(hFv;Wiyj5uuv-7Riw~Cw`fg2WlU978BbU|wOuNBJqG!(P~EfD~CRlQcZ#X,k)u3vWs@u2]ksg;wEx'f@q1_2Wg.j]uNpn~FRfqJv]!15x'h{qG!(@@=IzK~CRl^j6v(us5x4i,#T(2WmY?C2F{1>Kq<aj1!*jTqIsBv=Wld~Cw`fj2Wl[j`v0u*~>RlT=c>Z,k#u3vWs@u2]kq<c1Z+jTqIsBv=Wle~Cw`fn2Wl]dn1#c(a(b^a2!b/bAT(bj!aDa7bu,a_a{c0!2T0g:v>ReD2@G{42@G{5~DpM~<5rc=Bx6i>{RT#RnI@zCx]y]z:2Jv[!zr5Awyk]9]k]dD(Y+X#6Vz.g=wKtgwhaCwgmTWj2Lu,w%_+/[y-B;b^xeg3u3Rj-2@bX{*KrJ<!+'@Wg(g?QRlC@Jv`!%b[zIwsfII}8JQ_@w|kW|=Jv(%!AqcOuNBJvEzh!bYzjLs@wP#(0!oy@>RkdJwMZtc3Dtd@BcG#T'9bWxg2@2Fznd*#Y+;2x'c}w<zizixNgwa#Z'U+!/!a'!a+w~g~z6wcn{Rn}wcnzRn|5Rh%=]nJg5vuRmvNvdRlvcprJu}w*az*a#!%.a.'Bot9qT]kj@Wg'ay2Gzv@Jv`!%b[zEwsfHI}1;ck#Ux`<Cbbx_Lu+w!a&0*!wko*wwo,So,}6Juqxf!E}PigQuyRm`d3(`#8>Rn%:A5B;bZ~%KvhCa!a2!x>k7#Uxb@b{#xaRk7Jw0!)>wwhlShl}6>wwhmShm}6CJvB!.x'hhvj{!!5Bwkhhbaz}x'hivjz~!5Bwkhibaz|xEhTrNu,v-vpD!a%&/)a3a.,%Ro2t[CE{)@3re9b]{%wjo09:rgc:Z&Ro6=<riifuaw&RmoKrNA!%(Ro4>Ro89;Ri`dSaL'UYzxZb)7Rka3xRhT&!,!#^1U}vbaz{>>@=be}yC@:D5bazzKu+A&!}{?ba}y>>@=be}wxBh[t`u~vJvr!%a!a()a,a0a4RoC=]o;Ju(!%RoGRhdwjh`=]oAg>w#Ro?g5vuRo=NvdRl|Ku]C.!&;RoEJvB!%RoORoMBx'h[v+_?w~h`}~5?w~hd~!xKh]oiptu-utv.vp!#%&a30a@a'a+(a/aOp(o~p!RoDJu(!%RoHRhewjha=]oBNvdRl}g>w#Ro@g5vuRo>c[#X']o<CauRoRAd-#Y':RkpauRoQKu]C.!&;RoFJvB!%RoNRoPBx'h]v+_?w~ha}t5?w~he}ue!/UbhYacXaW^Tc&a;b:a-c/#b&aja1(!cL+!bKbt!bmcRc9aIc?8[yW3Dtt94Rg`Jv}!&SiRMzBhEebShEMNuPRe>x7gL#TzuwjirRipc<Z&>on;>z=h-MSh.Mwqczx'a7vj&!>Re4@=ResJt__NuPRi*NuPRi)j]uNr|~FRfzKrJ>_+@Wfy@Wf]2WocKrJ<!+'@Wg%g/QRl@@Jv`!&awRl<wsfFIzgLu(w*!.*&ShBMwvhIRhI9;RhNx1hK'!#Sn]Mx1hK~0!#:2<H~7cNu+w7D*'1ZtW>Rn1~?rOc:Z&Rn2=<rQ<7wjh&=BSnLMc]#X(6Vz)w[b=a!U#9wzgMc3#&(RgMRitRis<x,gKt`ax!&+SioM=BSilMc3#&(RgKRinRimKurB,!&SiQMzBhDebShDM6BJQ!(P~Efx978B2@@=I}WLrJw!!,a*&@G}O@9wkibRid@@x'fKwC!&SlDMSfLMjUv~Q~EfKKv3@a+!(hFv-]mpx/hYZ(C5RiWz<o/MwkhY?So/M@x,gbvfB*&!SgEM:SoeeehFu3:Rgbda(,^TZa)X/7Sg[eb:2RgI~BrMC@wgkc:wwkcRerx3h(uUvK!&*,SnOM4Sh*MArRg;wHRh(x=h;rJvPwI!a4',a'0@Wg&=BSh/Mg>w=Rh=g3w*wwgGRgGcW(X#;Sg}M2Gzk@Jv`!&awRl=wsfGIz`dKZ*T'Y-:RhR7RhQg5u-p`j6v(us5d,#Y+~Awkia?RicOuNBwkibba}Ld6p~tyu_vbAa'a+!a/'a3aEa8a!>Sh,ebJv{!&Sh@ebSaReb9;SgwebNuPRi(NvdRl)NuPRi'hHu^<Rm^Jvv_@Wl(g;u1Si/ebKu'B&!*Sh?eb@Wl'z@aPeb95Si.ebcpputyvjB)!,&a+0a%ShAMWeK@G}C@WfJ9;RhMwvhH9w{ia}ix,hJvRA1(!zAn[MRhHx1hJ~*!#hFv(BSn[MBJQ!(@@=I~'978B2@@=I}2db.Ua<'X}+T#a0XaG2G}E;wkg|wuh!Rh!x,hZu,@)!&So0MVy)C5RiXACJvB!&5RiY5RiZg8w)cG}*T#2@bU}=KsA>(!a.3wkhZba~(x,h^u(A!&(SoCMRhb5Bz=h[eb?w~hb~6x,h_u(A!&(SoDMRhc5Bz=h]eb?w~hc~6e)aA1T#T,^^^c-bMb&blcPaP(a/!0!bA=b5c@a(!bfbrc#2afwmhARnjwchORnp2Wlf3DtsNvdRl-2@wpa<]m0bx(#:awRk2@Jw3!%RfhwpfgRlnKQB%!(G{V@G|'NuuRl6d='T+Y#VyUg<v~Rl~==G|<Jv+'!aYShC}6@B<5?ba~8@Jw3'!g2QRljhLrpWlOd+#Y'g.w'rIg>w*wgj@g-u0Rj@Lu+wT&)ZtUauq]~GrGci&U#F|39:rELrNvj!.%*RhCwunfw~nf~:9;Ri]>wtnhg;wHRnhx3hDs@v~!/+'@Wfr@9RkSNu&Rlo=@<5GzoKs0@_+@Wl+@awRkmJuh!-3d(}pY#qWJvj!%Rm(:Jw3!%Rm,Rm*de&!1U-U#`)Re;@G|.@9Ri82@wjfvRlq=@<5GzpLvOvr!).&2RlF8Rf`C=x!eE{.Jw3_g2QRlkhLrpWlPde(!#U{s,UXa*Ta'[y'g:v>ReS;x0PZ&RnlRnn~HrKJw1}f!=x!eB|2w]aP(#Xa&a*Ta.Ua2a7=]iOd'#Y&Ro&WnWg;u.RiDg6vjRiBNvdRlzhNvj]nYJuW_2Wm3x)kFze{9d])!a.!,Y01!#&aC!a3RndC=ox~BrC@2b^{pg,rlse7x'ksuq!%Rm.E{xidw(wBRmGx9o+)X#wwo-So-}69:Rl4@xSf@a#XZ'X)X,Ta(/ARl8b[xc>RfY:RlI:RfQwlg.ARl:9;Rlwdn'#^XafaQa1X1TaHTa)@b[{zcZ#X'7RkwWg@Ou4ARn&x)kG#{,g7u/RkGdH'U#Y*Vz'Wm&CARm|bx#(A]gUbUzJj9Q~=d,#Y(56H}l978H{U7d,0#U*2>ABb_xZ978BbU{e~AJQ{g!978BbU{hxMh?ad{oUYZ.x1h?{l!#:2<H{mx3n[t{vl!,&a%3Ro(z=iS}6ARnr=Bwsn^wvn`Rnbd`*T}B0!#^X'BG{c9b]{a>>@=be}F?JvS!&BG{d7BG}(Bde#`a1X,Ya@!a'P~=wxf@2bZ}I56B2@@=aybb}08@55B9;5bb}<j3vLv;<Jw3&!>Rfg=ayb^}&OuNBKuLA!)a!P~=x#fD{f2@>==<bbzl?C972@@=Ix^d6rSu,v7w*C(0a)a6#B+a%!sQ[y?3Dt%3[xn~<5rLOu!5p@Ku+D#'!t7~GrP~?rNKvlaya7'!h+v-5qMg=t|cd,U#5AAaa5Abb{S@52B5@a[@52B5Gx[iXueu;d<#`a(!/549C;ag>23ExY5@Dah89b^~689Jv)!~2b[~1Lv'w(%*!a#bX|aPrmawRe]keu7uhv-q6rxu,q`xTo]/a5aU!bNaDXbi!b-!ao!b<bwA!#5@B932:aV2G|:d-)Y#hJrL>RhG<7@C5<H|_=Cau:5aj5@B932:bJ|ng>vIbs)#?C2F|9jPv0w.vISh-MKvUaz(.!9ABbb|[5;5<H|Eg>unwfh;9:4E|YjQsBt|vjx'hYq3!(?C2F|J:2<BaY?C2F|GOu!5x,g|p{ah!-(?C2F|c9:4E|OjXuvvNr}:Rh&i[w*t|cd+U#jJvsu)vsSn~Mkfrmu9p}u7vwv]So!McW#Xa!ax5@A5aY:5;5<H|>kJv~vYrquJu3x4ib#T)2@SmZM?C2F|Bj:rmu9@xPhI(a*a#U#`a3-5Abb|L~@:RhK9:4E|0@52B5G|#C::aY?C2F|-:2<BaY?C2F|.5Jvk!a)javYrquJu3x4ia#T)2@SmYM?C2F|HAxPhH(!a#U#`a*-5Abb|4~@:RhJ9:4E|R@52B5G|F:2<BaY?C2F|Sc^#Xa2j=Qq5CJvB!-g<v{z;hhM?C2F|Zi[vrv{z;hiM?C2F|XKsA>!a)-g<v{z;h[eb?C2F|]i[vrv{z;h]eb?C2F|^iZu.vix,hZq3ah!.(?C2F|QOu!5ShXM:2<BaY?C2F|P\",\n 13_494,\n 2713,\n 49,\n 25,\n 61,\n);\n","// Generated using scripts/write-decode-map.ts\n\n/** Packed XML decode trie data. */\nexport const xmlDecodeTree: Uint16Array = /* #__PURE__ */ new Uint16Array([\n 512, 26_465, 29_036, 7, 0, 2, 4, 116, 24_638, 116, 24_636, 8693, 29_807,\n 24_610, 621, 1, 0, 0, 3, 112, 24_614, 111, 115, 24_615,\n]);\n","/**\n * Bit flags & masks for the binary trie encoding used for entity decoding.\n *\n * The trie is a flat `Uint16Array`. Every node starts with one header word:\n *\n * 15..14 VALUE_LENGTH Number of words the value occupies, +1.\n * 0 = no value; 1 = value inline in bits 12..0;\n * 2/3 = value in the 1/2 words after the header.\n * 13 FLAG13 If VALUE_LENGTH > 0: semicolon required (\"strict\"\n * entity; `;` is never stored as a branch).\n * If VALUE_LENGTH == 0: this node is a compact run.\n * 12..7 BRANCH_LENGTH Number of branches (or run length for runs).\n * 6..0 JUMP_TABLE Jump-table offset / single-branch char / first\n * run char (see below).\n *\n * Branch data follows the header and any value words. Its shape is selected\n * by (JUMP_TABLE, BRANCH_LENGTH) in the header:\n *\n * Single branch JUMP_TABLE = the only child's char, BRANCH_LENGTH = 0.\n * No branch words; the child node follows immediately.\n * Jump table JUMP_TABLE = first covered char (> 0), BRANCH_LENGTH =\n * table length. One word per covered char: 0 = no branch,\n * otherwise the child's offset from the END of the table,\n * +1 (so 0 stays the no-branch sentinel).\n * Dictionary JUMP_TABLE = 0, BRANCH_LENGTH = number of branches.\n * ceil(n/2) words of sorted keys packed two per word\n * (low byte first), then n pointer words storing the\n * child's offset from the END of the branch data.\n * Compact run VALUE_LENGTH = 0, FLAG13 set. BRANCH_LENGTH = run\n * length (3..63), JUMP_TABLE = first char; remaining run\n * chars packed two per word after the header. The target\n * node follows the packed words immediately.\n *\n * Pointers are end-relative (rather than relative to the pointer's own\n * position) because that makes the common \"child encoded right after the\n * branch data\" case a small constant, which compresses far better. Offsets\n * to already-encoded (shared) nodes wrap via uint16 modulo arithmetic; the\n * decoder masks navigation results with `& 0xff_ff` to match.\n */\nexport const enum BinTrieFlags {\n VALUE_LENGTH = 0b1100_0000_0000_0000,\n FLAG13 = 0b0010_0000_0000_0000,\n BRANCH_LENGTH = 0b0001_1111_1000_0000,\n JUMP_TABLE = 0b0000_0000_0111_1111,\n /** Bits 12..0: the inline value of a VALUE_LENGTH = 1 header word. */\n VALUE_MASK = 0b0001_1111_1111_1111,\n}\n","import {\n codePointToString,\n replaceCodePoint,\n replaceCodePointXML,\n} 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\";\n\nconst enum CharCodes {\n AMP = 38, // \"&\"\n NUM = 35, // \"#\"\n SEMI = 59, // \";\"\n EQUALS = 61, // \"=\"\n ZERO = 48, // \"0\"\n NINE = 57, // \"9\"\n LOWER_A = 97, // \"a\"\n LOWER_X = 120, // \"x\"\n}\n\n/** Bit that needs to be set to convert an upper case ASCII character to lower case */\nconst TO_LOWER_BIT = 0b10_0000;\n\n/*\n * `parseNumericEntity` packs its two results into one 32-bit integer:\n * `(consumed << CONSUMED_SHIFT) | codePoint`. The 21-bit code point field\n * fits any valid Unicode value (max 0x10FFFF, clamped before packing); the\n * consumed count excludes `&` and gets the remaining 11 bits. Extract it\n * with `>>>` so the topmost bit isn't treated as a sign.\n *\n * Plain consts rather than a `const enum`: with `isolatedModules`, enum\n * member reads compile to runtime property loads.\n */\nconst CONSUMED_SHIFT = 21;\nconst CODE_POINT_MASK = 0x1f_ff_ff;\n/**\n * Reserved consumed field for counts of at least 2047 characters after `&`.\n * The true count is in `longNumericConsumed`.\n */\nconst CONSUMED_OVERFLOW = 0x7_ff;\n\n/**\n * Side channel for numeric entities of at least 2048 characters including\n * `&`. Set by `parseNumericEntity` when its consumed count reaches the\n * reserved value `CONSUMED_OVERFLOW`; callers read the true count from here.\n * A module-level slot avoids a tuple allocation on the hot path.\n */\nlet longNumericConsumed = 0;\n\n/**\n * Extract the consumed count from a `parseNumericEntity` packed result,\n * recovering the true length from `longNumericConsumed` when the packed\n * field contains the sentinel. Read it before the next `parseNumericEntity`\n * call, which may overwrite the side channel. This helper owns that protocol.\n * @param packed Packed result of `parseNumericEntity`.\n */\nfunction unpackConsumed(packed: number): number {\n const consumed = packed >>> CONSUMED_SHIFT;\n return consumed === CONSUMED_OVERFLOW ? longNumericConsumed : consumed;\n}\n\n/**\n * Unsigned subtraction trick: (code - lo) >>> 0 wraps negatives to large\n * values, so a single `<=` covers the entire [lo..hi] range check.\n * @param code Code point to check.\n */\nfunction isNumber(code: number): boolean {\n return (code - CharCodes.ZERO) >>> 0 <= 9;\n}\n\nfunction isHexadecimalCharacter(code: number): boolean {\n return ((code | TO_LOWER_BIT) - CharCodes.LOWER_A) >>> 0 <= 5; // F - a\n}\n\nfunction isAlpha(code: number): boolean {\n return ((code | TO_LOWER_BIT) - CharCodes.LOWER_A) >>> 0 <= 25; // Z - a\n}\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 check.\n */\nfunction isEntityInAttributeInvalidEnd(code: number): boolean {\n return code === CharCodes.EQUALS || isAlpha(code) || isNumber(code);\n}\n\nconst enum EntityDecoderState {\n EntityStart,\n NumericStart,\n NumericDecimal,\n NumericHex,\n NamedEntity,\n}\n\n/**\n * Decoding mode for named entities.\n */\nexport enum DecodingMode {\n /** Entities in text nodes that can end with any character. */\n Legacy = 0,\n /** Only allow entities terminated with a semicolon. */\n Strict = 1,\n /** Entities in attributes have limitations on ending characters. */\n Attribute = 2,\n}\n\n/**\n * Producers for character reference errors as defined in the HTML spec.\n */\nexport interface EntityErrorProducer {\n missingSemicolonAfterCharacterReference(): void;\n absenceOfDigitsInNumericCharacterReference(\n consumedCharacters: number,\n ): void;\n /**\n * Validate the accumulated numeric value, before Unicode replacement.\n * Values beyond the JavaScript number range are positive infinity.\n */\n validateNumericCharacterReference(code: number): void;\n}\n\n/**\n * Token decoder with support of writing partial entities.\n */\nexport class EntityDecoder {\n /** The current state of the decoder. */\n private state: number = EntityDecoderState.EntityStart;\n /** Characters that were consumed while parsing an entity. */\n private consumed = 1;\n /**\n * The result of the entity.\n *\n * For named entities: the trie index of the best legacy match so far\n * (0 = none). For numeric entities: the accumulated code point.\n */\n private result = 0;\n\n /** The current index in the decode tree. */\n private treeIndex = 0;\n /**\n * Characters consumed since the last recorded legacy match, plus one.\n * Invariant at the top of the `stateNamedEntity` loop: `excess` equals\n * the number of unrecorded consumed characters + 1.\n */\n // biome-ignore lint/correctness/noUnusedPrivateClassMembers: False positive (read via destructuring)\n private excess = 1;\n /** The mode in which the decoder is operating. */\n private decodeMode = DecodingMode.Strict;\n /** The number of characters that have been consumed in the current run. */\n // biome-ignore lint/correctness/noUnusedPrivateClassMembers: False positive\n private runConsumed = 0;\n\n constructor(\n /** The predefined HTML or XML decode tree. */\n private readonly decodeTree: Uint16Array,\n /**\n * The function that is called when a codepoint is decoded.\n *\n * For named entities that decode to multiple code points, this will\n * be called multiple times, with the second codepoint, and the same\n * `consumed` value.\n * @param codepoint The decoded codepoint.\n * @param consumed The number of characters consumed by the decoder.\n */\n private readonly emitCodePoint: (cp: number, consumed: number) => void,\n /** An object that is used to produce errors. */\n private readonly errors?: EntityErrorProducer | undefined,\n ) {}\n\n /**\n * Resets the instance to make it reusable.\n * @param decodeMode Entity decoding mode to use.\n */\n startEntity(decodeMode: DecodingMode): void {\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 /**\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 non-streaming `decodeWithTrie`, 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: string, offset: number): number {\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\n case EntityDecoderState.NumericStart: {\n return this.stateNumericStart(input, offset);\n }\n\n case EntityDecoderState.NumericDecimal: {\n return this.stateNumericDecimal(input, offset);\n }\n\n case EntityDecoderState.NumericHex: {\n return this.stateNumericHex(input, offset);\n }\n\n default: {\n // NamedEntity — the only remaining state.\n return this.stateNamedEntity(input, offset);\n }\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 // eslint-disable-next-line unicorn/consistent-class-member-order\n private stateNumericStart(input: string, offset: number): number {\n if (offset >= input.length) {\n return -1;\n }\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\n this.state = EntityDecoderState.NumericDecimal;\n return this.stateNumericDecimal(input, offset);\n }\n\n /**\n * Parses a hexadecimal numeric entity.\n *\n * Equivalent to the `Hexademical character reference state` in the HTML\n * spec. Digit parsing matches the hex loop in `parseNumericEntity`.\n * The accumulated value is preserved for numeric validation callbacks.\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 private stateNumericHex(input: string, offset: number): number {\n const inputLength = input.length;\n // Local accumulators; flushed before any exit (see stateNamedEntity).\n let { result } = this;\n let { consumed } = this;\n while (offset < inputLength) {\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 =\n char <= CharCodes.NINE\n ? char - CharCodes.ZERO\n : (char | TO_LOWER_BIT) - CharCodes.LOWER_A + 10;\n result = result * 16 + digit;\n consumed += 1;\n offset += 1;\n } else {\n this.result = result;\n this.consumed = consumed;\n return this.emitNumericEntity(char, 3);\n }\n }\n this.result = result;\n this.consumed = consumed;\n return -1; // Incomplete entity\n }\n\n /**\n * Parses a decimal numeric entity.\n *\n * Equivalent to the `Decimal character reference state` in the HTML\n * spec. Digit parsing matches the decimal loop in `parseNumericEntity`.\n * The accumulated value is preserved for numeric validation callbacks.\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 private stateNumericDecimal(input: string, offset: number): number {\n const inputLength = input.length;\n // Local accumulators; flushed before any exit (see stateNamedEntity).\n let { result } = this;\n let { consumed } = this;\n while (offset < inputLength) {\n const digit = input.charCodeAt(offset) - CharCodes.ZERO;\n if (digit >>> 0 > 9) {\n this.result = result;\n this.consumed = consumed;\n return this.emitNumericEntity(digit + CharCodes.ZERO, 2);\n }\n result = result * 10 + digit;\n consumed += 1;\n offset += 1;\n }\n this.result = result;\n this.consumed = consumed;\n return -1; // Incomplete entity\n }\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 private emitNumericEntity(lastCp: number, expectedLength: number): number {\n // Ensure we consumed at least one digit.\n if (this.consumed <= expectedLength) {\n this.errors?.absenceOfDigitsInNumericCharacterReference(\n this.consumed,\n );\n return 0;\n }\n\n // Figure out if this is a legit end of the entity\n if (lastCp === CharCodes.SEMI) {\n this.consumed += 1;\n } else if (this.decodeMode === DecodingMode.Strict) {\n return 0;\n }\n\n this.emitCodePoint(\n (this.decodeTree === xmlDecodeTree\n ? replaceCodePointXML\n : replaceCodePoint)(this.result),\n this.consumed,\n );\n\n if (this.errors) {\n if (lastCp !== CharCodes.SEMI) {\n this.errors.missingSemicolonAfterCharacterReference();\n }\n\n this.errors.validateNumericCharacterReference(this.result);\n }\n\n return this.consumed;\n }\n\n /**\n * Flush locally-tracked walk state back to the fields, then emit the\n * recorded legacy match or reject (cold path — at most once per\n * entity). Called after failed navigation (leaf node, branch miss, or\n * compact-run mismatch). In attribute mode, reject if no legacy was\n * recorded at the current node, if we descended past it, or if the\n * pending input character is an invalid attribute terminator.\n * @param consumed Locally-tracked consumed count.\n * @param excess Locally-tracked excess count.\n * @param char Pending input character (may be the mismatching char).\n * @param valueLength Value length at the current trie node.\n */\n private flushAndEmitLegacyOrReject(\n consumed: number,\n excess: number,\n char: number,\n valueLength: number,\n ): number {\n this.consumed = consumed;\n this.excess = excess;\n return this.result === 0 ||\n (this.decodeMode === DecodingMode.Attribute &&\n (valueLength === 0 ||\n excess > 1 ||\n isEntityInAttributeInvalidEnd(char)))\n ? 0\n : this.emitNotTerminatedNamedEntity();\n }\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 private stateNamedEntity(input: string, offset: number): number {\n const { decodeTree } = this;\n const inputLength = input.length;\n const isStrict = this.decodeMode === DecodingMode.Strict;\n\n /*\n * Local copies of the resumable walk state avoid per-character\n * field writes. They are flushed back to the fields\n * on every exit (chunk end, and before any emit helper that reads\n * them). `this.result` is only written at the (rare) record points,\n * so it stays a direct field write.\n *\n * Legacy-match recording happens in two idempotent places: at the\n * loop top when sitting on a value node, and in the chunk-end\n * epilogue (so `end()` sees matches that land exactly on a chunk\n * boundary). Recording applies `consumed += excess - 1; excess = 1`,\n * which is a no-op when repeated — the loop-top invariant is\n * `excess` = unrecorded consumed characters + 1.\n */\n let { treeIndex } = this;\n let { excess } = this;\n let { consumed } = this;\n let current = decodeTree[treeIndex];\n\n while (offset < inputLength) {\n /*\n * Descend through value-less jump-table nodes (including the\n * single-branch encoding) inline, mirroring `decodeWithTrie`:\n * this avoids a `determineBranch` call per level for the\n * dominant node shape — including the root on the first write.\n */\n while (\n (current &\n (BinTrieFlags.VALUE_LENGTH | BinTrieFlags.FLAG13)) ===\n 0 &&\n (current & BinTrieFlags.JUMP_TABLE) !== 0\n ) {\n const char = input.charCodeAt(offset);\n const jumpOffset = current & BinTrieFlags.JUMP_TABLE;\n const branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;\n if (branchCount === 0) {\n // Single branch encoded inline in the jump offset bits.\n if (char !== jumpOffset) {\n return this.flushAndEmitLegacyOrReject(\n consumed,\n excess,\n char,\n 0,\n );\n }\n treeIndex += 1;\n } else {\n const slot = char - jumpOffset;\n if (slot >>> 0 >= branchCount) {\n return this.flushAndEmitLegacyOrReject(\n consumed,\n excess,\n char,\n 0,\n );\n }\n const stored = decodeTree[treeIndex + 1 + slot];\n if (stored === 0) {\n return this.flushAndEmitLegacyOrReject(\n consumed,\n excess,\n char,\n 0,\n );\n }\n // End-relative: branch data ends at treeIndex+1+branchCount.\n treeIndex = (treeIndex + branchCount + stored) & 0xff_ff;\n }\n current = decodeTree[treeIndex];\n offset += 1;\n excess += 1;\n /*\n * `charCodeAt` past the end returns NaN, which would alias\n * to slot 0 after `>>> 0` — bail out explicitly.\n */\n // eslint-disable-next-line unicorn/no-break-in-nested-loop\n if (offset >= inputLength) break;\n }\n if (offset >= inputLength) break;\n\n // Handle compact runs (resumable across chunks).\n if (\n (current &\n (BinTrieFlags.VALUE_LENGTH | BinTrieFlags.FLAG13)) ===\n BinTrieFlags.FLAG13\n ) {\n const runLength =\n (current & BinTrieFlags.BRANCH_LENGTH) >> 7; /* 3..63 */\n let { runConsumed } = this;\n\n // If we are starting a run, check the first char.\n if (runConsumed === 0) {\n const char = input.charCodeAt(offset);\n if (char !== (current & BinTrieFlags.JUMP_TABLE)) {\n return this.flushAndEmitLegacyOrReject(\n consumed,\n excess,\n char,\n 0,\n );\n }\n offset += 1;\n excess += 1;\n runConsumed = 1;\n }\n\n // Check remaining characters in the run (packed two per uint16 word).\n while (runConsumed < runLength) {\n if (offset >= inputLength) {\n this.treeIndex = treeIndex;\n this.excess = excess;\n this.consumed = consumed;\n this.runConsumed = runConsumed;\n return -1;\n }\n\n const charIndexInPacked = runConsumed - 1;\n const packedWord =\n decodeTree[treeIndex + 1 + (charIndexInPacked >> 1)];\n const expectedChar =\n (packedWord >> ((charIndexInPacked & 1) << 3)) & 0xff;\n\n const char = input.charCodeAt(offset);\n if (char !== expectedChar) {\n this.runConsumed = 0;\n return this.flushAndEmitLegacyOrReject(\n consumed,\n excess,\n char,\n 0,\n );\n }\n offset += 1;\n excess += 1;\n runConsumed += 1;\n }\n\n this.runConsumed = 0;\n treeIndex += 1 + (runLength >> 1);\n current = decodeTree[treeIndex];\n // Loop top handles the landed-on node (record/emit/branch).\n continue;\n }\n\n // Header plus out-of-line value words; 0 means no value.\n const valueLength = current >>> 14;\n const char = input.charCodeAt(offset);\n\n if (valueLength !== 0) {\n // Record a legacy match (FLAG13 clear = semicolon optional).\n if (!isStrict && (current & BinTrieFlags.FLAG13) === 0) {\n this.result = treeIndex;\n consumed += excess - 1;\n excess = 1;\n }\n\n /*\n * Implicit semicolon handling: emit immediately. Covers both\n * strict (FLAG13 set) and legacy entities — neither stores\n * an explicit `;` branch in the trie.\n */\n if (char === CharCodes.SEMI) {\n return this.emitNamedEntityData(\n treeIndex,\n valueLength,\n consumed + excess,\n );\n }\n\n /*\n * `valueLength === 1` packs the codepoint into the header\n * word's low 13 bits, where branch metadata also lives. Skip\n * the branch lookup on leaves so those value bits aren't\n * reinterpreted as branch offsets.\n */\n if (valueLength === 1) {\n return this.flushAndEmitLegacyOrReject(\n consumed,\n excess,\n char,\n valueLength,\n );\n }\n }\n\n // Value-bearing or dictionary node: dispatch through determineBranch.\n const next = determineBranch(\n decodeTree,\n current,\n treeIndex + (valueLength || 1),\n char,\n );\n\n if (next < 0) {\n return this.flushAndEmitLegacyOrReject(\n consumed,\n excess,\n char,\n valueLength,\n );\n }\n\n treeIndex = next;\n current = decodeTree[treeIndex];\n offset += 1;\n excess += 1;\n }\n\n /*\n * Chunk exhausted. Record a legacy match we may be sitting on, so a\n * subsequent `end()` emits it, then persist the walk state.\n */\n if (\n !isStrict &&\n current >>> 14 !== 0 &&\n (current & BinTrieFlags.FLAG13) === 0\n ) {\n this.result = treeIndex;\n consumed += excess - 1;\n excess = 1;\n }\n this.treeIndex = treeIndex;\n this.excess = excess;\n this.consumed = consumed;\n return -1;\n }\n\n /**\n * Emit a named entity that was not terminated with a semicolon.\n * @returns The number of characters consumed.\n */\n private emitNotTerminatedNamedEntity(): number {\n const { result, decodeTree } = this;\n\n const valueLength = decodeTree[result] >>> 14;\n\n this.emitNamedEntityData(result, valueLength, this.consumed);\n this.errors?.missingSemicolonAfterCharacterReference();\n\n return this.consumed;\n }\n\n /**\n * Emit a named entity.\n * @param result The index of the entity in the decode tree.\n * @param valueLength Encoded value length (header plus any value words).\n * @param consumed The number of characters consumed.\n * @returns The number of characters consumed.\n */\n private emitNamedEntityData(\n result: number,\n valueLength: number,\n consumed: number,\n ): number {\n const { decodeTree } = this;\n\n this.emitCodePoint(\n valueLength === 1\n ? decodeTree[result] & BinTrieFlags.VALUE_MASK\n : decodeTree[result + 1],\n consumed,\n );\n if (valueLength === 3) {\n // Emit the second UTF-16 code unit.\n this.emitCodePoint(decodeTree[result + 2], consumed);\n }\n\n return consumed;\n }\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(): number {\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(\n this.consumed,\n );\n return 0;\n }\n default: {\n // EntityStart or unknown — return 0.\n return 0;\n }\n }\n }\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 *\n * See `BinTrieFlags` for the branch-data layouts handled here.\n * @param decodeTree The trie.\n * @param current The current node's header word.\n * @param nodeIndex Index of the node's first branch-data word (the header\n * plus any value words have been skipped by the caller).\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(\n decodeTree: Uint16Array,\n current: number,\n nodeIndex: number,\n char: number,\n): number {\n const branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;\n const jumpOffset = current & BinTrieFlags.JUMP_TABLE;\n\n // Case 1: Single branch or jump table (jumpOffset encodes the first/only char code).\n if (jumpOffset) {\n if (branchCount === 0) {\n // Single branch encoded inline in the jump offset bits.\n return char === jumpOffset ? nodeIndex : -1;\n }\n\n /*\n * Jump table: branchCount consecutive slots starting at jumpOffset.\n * Unsigned comparison handles both < 0 and >= branchCount in one check.\n */\n const slot = char - jumpOffset;\n if (slot >>> 0 >= branchCount) return -1;\n const stored = decodeTree[nodeIndex + slot];\n /*\n * 0 = empty slot (no branch); otherwise the child's offset from the\n * end of the branch array, +1 (end-relative pointers compress\n * better). `& 0xff_ff` mirrors the encoder's uint16 wrap for\n * backreferences to already-encoded nodes.\n */\n return stored === 0\n ? -1\n : (nodeIndex + branchCount + stored - 1) & 0xff_ff;\n }\n\n /*\n * Case 2: Packed dictionary. Linear scan — over 90% of dict nodes have\n * <= 4 branches in the HTML trie, where the constant-factor savings\n * dominate over binary search's asymptotic edge.\n */\n if (branchCount === 0) return -1;\n const packedKeySlots = (branchCount + 1) >> 1;\n const branchEnd = nodeIndex + packedKeySlots + branchCount;\n for (let index = 0; index < branchCount; index++) {\n const packed = decodeTree[nodeIndex + (index >> 1)];\n const key = (packed >> ((index & 1) << 3)) & 0xff;\n if (key === char) {\n const pointerIndex = nodeIndex + packedKeySlots + index;\n // Pointers are relative to the end of the branch data.\n return (branchEnd + decodeTree[pointerIndex]) & 0xff_ff;\n }\n // Keys are sorted; if we've passed `char`, no match is possible.\n if (key > char) return -1;\n }\n return -1;\n}\n\n/**\n * Read the decoded value from a trie node.\n * @param decodeTree The trie.\n * @param nodeIndex The index of the node.\n * @param valueLength The length of the value (1, 2, or 3).\n * @returns The decoded string.\n */\nfunction readTrieValue(\n decodeTree: Uint16Array,\n nodeIndex: number,\n valueLength: number,\n): string {\n if (valueLength === 1) {\n return String.fromCharCode(\n decodeTree[nodeIndex] & BinTrieFlags.VALUE_MASK,\n );\n }\n if (valueLength === 2) {\n return String.fromCharCode(decodeTree[nodeIndex + 1]);\n }\n return String.fromCharCode(\n decodeTree[nodeIndex + 1],\n decodeTree[nodeIndex + 2],\n );\n}\n\n/**\n * Parse a numeric entity (`&#DDD;` or `&#xHHH;`).\n *\n * Encodes the result as `(consumed << CONSUMED_SHIFT) | codepoint` (see\n * the packing comment at the top of the file; overlong entities spill\n * their length into `longNumericConsumed`). Returns 0 when no digits were\n * found.\n *\n * This is the sync counterpart of the streaming\n * `EntityDecoder#stateNumericDecimal` / `#stateNumericHex`. Digit parsing\n * matches those methods; only this packed result needs a value clamp.\n * @param input The input string.\n * @param numberStart Index of the `#` character.\n * @param inputLength Cached `input.length`.\n */\nfunction parseNumericEntity(\n input: string,\n numberStart: number,\n inputLength: number,\n): number {\n let offset = numberStart + 1; // Skip \"#\"\n let cp = 0;\n let digitStart = offset;\n\n /*\n * Separate decimal and hexadecimal loops: each multiplies by a constant\n * and runs a single digit test, instead of a per-character base check.\n */\n if (\n offset < inputLength &&\n (input.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X\n ) {\n offset += 1;\n digitStart = offset;\n while (offset < inputLength) {\n const char = input.charCodeAt(offset);\n if (isNumber(char)) {\n cp = cp * 16 + (char - CharCodes.ZERO);\n } else if (isHexadecimalCharacter(char)) {\n cp = cp * 16 + ((char | TO_LOWER_BIT) - CharCodes.LOWER_A + 10);\n } else {\n break;\n }\n offset += 1;\n }\n } else {\n while (offset < inputLength) {\n const digit = input.charCodeAt(offset) - CharCodes.ZERO;\n if (digit >>> 0 > 9) break;\n cp = cp * 10 + digit;\n offset += 1;\n }\n }\n\n if (offset === digitStart) return 0;\n\n // Include the semicolon in consumed when present.\n if (offset < inputLength && input.charCodeAt(offset) === CharCodes.SEMI) {\n offset += 1;\n }\n\n /*\n * Clamp out-of-range values to 0x110000 so they fit the 21-bit field\n * and decode to U+FFFD. Lengths at or above CONSUMED_OVERFLOW use the\n * side channel described with the packing constants.\n */\n if (cp > 0x10_ff_ff) cp = 0x11_00_00;\n let consumed = offset - numberStart;\n if (consumed >= CONSUMED_OVERFLOW) {\n // eslint-disable-next-line unicorn/no-top-level-assignment-in-function -- deliberate side channel, see `longNumericConsumed`\n longNumericConsumed = consumed;\n consumed = CONSUMED_OVERFLOW;\n }\n return (consumed << CONSUMED_SHIFT) | cp;\n}\n\n/**\n * Decode all entities in `input` using the HTML trie.\n *\n * Hard-wired to `htmlDecodeTree`: the inline root navigation below assumes\n * the HTML root's jump-table shape, so this must not be generalized to\n * other tries (the XML trie's dictionary root would silently match no\n * entities — `decodeXML` has its own hand-coded fast path instead).\n * @param input The string to decode.\n * @param isStrict Only match semicolon-terminated entities.\n * @param isAttribute Whether to apply attribute-specific parsing rules (disallowing certain non-semicolon terminators).\n * @returns The decoded string.\n */\nfunction decodeWithTrie(\n input: string,\n isStrict: boolean,\n isAttribute: boolean,\n): string {\n const decodeTree = htmlDecodeTree;\n // Fast path: no entities at all — return input without any allocation.\n let offset = input.indexOf(\"&\");\n if (offset < 0) return input;\n\n const inputLength = input.length;\n /*\n * `chunkStart` marks the start of the next pending slice. Rejected\n * entities don't advance it, so consecutive rejections are stitched\n * into a single `slice` once a real match (or end of input) is hit.\n */\n let chunkStart = 0;\n let result = \"\";\n\n /*\n * Root navigation fields, hoisted out of the per-entity loop. The HTML\n * root is a multi-branch jump-table covering [A-Za-z]; see the inline\n * first-iteration comment below.\n */\n const root = decodeTree[0];\n const rootJumpOffset = root & BinTrieFlags.JUMP_TABLE;\n const rootBranchCount = (root & BinTrieFlags.BRANCH_LENGTH) >> 7;\n\n do {\n const entityStart = offset + 1;\n\n // Quick check: entity names must start with [A-Za-z], numeric with #.\n const firstChar = input.charCodeAt(entityStart);\n let consumed: number;\n let value: string;\n if (firstChar === CharCodes.NUM) {\n const packed = parseNumericEntity(input, entityStart, inputLength);\n consumed = unpackConsumed(packed);\n // In strict mode, require semicolon termination.\n if (\n isStrict &&\n consumed > 0 &&\n input.charCodeAt(entityStart + consumed - 1) !== CharCodes.SEMI\n ) {\n consumed = 0;\n }\n value =\n consumed === 0\n ? \"\"\n : codePointToString(packed & CODE_POINT_MASK);\n } else if (isAlpha(firstChar)) {\n consumed = 0;\n value = \"\";\n\n /*\n * The generator guarantees a jump-table root. Consume the first\n * character directly, then walk from its child.\n */\n const rootSlotIndex = firstChar - rootJumpOffset;\n let nodeIndex: number;\n if (rootSlotIndex >>> 0 < rootBranchCount) {\n const stored = decodeTree[1 + rootSlotIndex];\n nodeIndex =\n stored === 0 ? -1 : (rootBranchCount + stored) & 0xff_ff;\n } else {\n nodeIndex = -1;\n }\n\n /*\n * Best legacy (no-semicolon) match so far, as trie coordinates.\n * Deferring `readTrieValue` to the end avoids allocating a\n * string for matches that longer matches supersede.\n */\n let bestNodeIndex = 0;\n let bestValueLength = 0;\n let current = nodeIndex < 0 ? 0 : decodeTree[nodeIndex];\n let index = entityStart + 1;\n\n /*\n * Walk the trie from the root child. The `trie` label lets the\n * inner descent and compact-run loops abandon the entity (and\n * fall through to the legacy/reject handling) directly.\n */\n trie: while (index < inputLength) {\n /*\n * Inline value-less jump tables and single branches. A miss\n * falls through to the recorded legacy match or rejection.\n */\n while (\n // Value-less, non-run node with a nonzero jump offset.\n (current &\n (BinTrieFlags.VALUE_LENGTH | BinTrieFlags.FLAG13)) ===\n 0 &&\n (current & BinTrieFlags.JUMP_TABLE) !== 0\n ) {\n const jumpOffset = current & BinTrieFlags.JUMP_TABLE;\n const branchCount =\n (current & BinTrieFlags.BRANCH_LENGTH) >> 7;\n if (branchCount === 0) {\n // Single branch encoded inline in the jump offset bits.\n if (input.charCodeAt(index) !== jumpOffset) break trie;\n nodeIndex += 1;\n } else {\n const slot = input.charCodeAt(index) - jumpOffset;\n if (slot >>> 0 >= branchCount) break trie;\n const stored = decodeTree[nodeIndex + 1 + slot];\n if (stored === 0) break trie;\n // End-relative: branch data ends at nodeIndex+1+branchCount.\n nodeIndex =\n (nodeIndex + branchCount + stored) & 0xff_ff;\n }\n current = decodeTree[nodeIndex];\n index += 1;\n /*\n * `charCodeAt` past the end returns NaN, which would\n * alias to slot 0 after `>>> 0` — bail out explicitly.\n */\n if (index >= inputLength) break trie;\n }\n\n // FLAG13 without a value marks a compact run.\n if (\n (current &\n (BinTrieFlags.VALUE_LENGTH | BinTrieFlags.FLAG13)) ===\n BinTrieFlags.FLAG13\n ) {\n const runLength =\n (current & BinTrieFlags.BRANCH_LENGTH) >> 7;\n\n // Check first char (stored in JUMP_TABLE bits).\n if (\n input.charCodeAt(index) !==\n (current & BinTrieFlags.JUMP_TABLE)\n ) {\n // eslint-disable-next-line unicorn/no-break-in-nested-loop\n break;\n }\n index += 1;\n\n // Check remaining characters (packed two per uint16 word).\n const remaining = runLength - 1;\n let wordIndex = nodeIndex + 1;\n let charIndexInPacked = 0;\n\n /*\n * Process pairs: read one packed word, compare low byte then high byte.\n * No explicit bounds check needed — charCodeAt returns NaN for OOB,\n * which never equals an integer, so the mismatch break fires naturally.\n */\n for (\n ;\n charIndexInPacked + 1 < remaining;\n charIndexInPacked += 2\n ) {\n const packed = decodeTree[wordIndex];\n if (input.charCodeAt(index) !== (packed & 0xff))\n break trie;\n index += 1;\n if (input.charCodeAt(index) !== ((packed >> 8) & 0xff))\n break trie;\n index += 1;\n wordIndex += 1;\n }\n // Handle odd trailing char.\n if (charIndexInPacked < remaining) {\n if (\n input.charCodeAt(index) !==\n (decodeTree[wordIndex] & 0xff)\n )\n // eslint-disable-next-line unicorn/no-break-in-nested-loop\n break;\n index += 1;\n }\n\n nodeIndex += 1 + (runLength >> 1);\n current = decodeTree[nodeIndex];\n // eslint-disable-next-line unicorn/no-break-in-nested-loop\n continue;\n }\n\n // Header plus out-of-line value words; 0 means no value.\n const valueLength = current >>> 14;\n const char = input.charCodeAt(index);\n\n /*\n * Check current node for a value before navigating.\n * This handles both: (a) values reached via compact runs on the\n * previous iteration, and (b) values at regular branch targets.\n */\n if (valueLength !== 0) {\n // If char is `;`, emit immediately.\n if (char === CharCodes.SEMI) {\n consumed = index - entityStart + 1;\n // Inline leaves carry the value in the low 13 bits.\n value =\n valueLength === 1\n ? String.fromCharCode(\n current & BinTrieFlags.VALUE_MASK,\n )\n : readTrieValue(\n decodeTree,\n nodeIndex,\n valueLength,\n );\n // eslint-disable-next-line unicorn/no-break-in-nested-loop\n break;\n }\n\n // Record non-terminated (legacy) match (FLAG13 clear = semicolon optional).\n if (!isStrict && (current & BinTrieFlags.FLAG13) === 0) {\n consumed = index - entityStart;\n bestNodeIndex = nodeIndex;\n bestValueLength = valueLength;\n }\n\n /*\n * A valueLength of 1 means the value is packed inline in the header\n * word — these are always leaf nodes with no branches, so we can\n * stop walking the trie.\n */\n // eslint-disable-next-line unicorn/no-break-in-nested-loop\n if (valueLength === 1) break;\n }\n\n // Navigate to the next node (valueLength || 1: skip past value words, minimum 1 for header).\n const next = determineBranch(\n decodeTree,\n current,\n nodeIndex + (valueLength || 1),\n char,\n );\n // eslint-disable-next-line unicorn/no-break-in-nested-loop\n if (next < 0) break;\n\n nodeIndex = next;\n current = decodeTree[nodeIndex];\n index += 1;\n }\n\n /*\n * Post-loop: if the semicolon path didn't set value,\n * check for a final legacy match. The last navigation may\n * have landed on a legacy node whose value hasn't been\n * recorded yet (loop exited before the top-of-loop check\n * could run).\n */\n if (value === \"\") {\n const finalVL = current >>> 14;\n if (\n finalVL !== 0 &&\n !isStrict &&\n (current & BinTrieFlags.FLAG13) === 0\n ) {\n consumed = index - entityStart;\n bestNodeIndex = nodeIndex;\n bestValueLength = finalVL;\n }\n if (consumed > 0) {\n value = readTrieValue(\n decodeTree,\n bestNodeIndex,\n bestValueLength,\n );\n }\n }\n } else {\n consumed = 0;\n value = \"\";\n }\n\n /*\n * The attribute end-char rule (HTML spec §13.2.5.73) only applies to\n * unterminated *named* references. Semicolon-terminated entities and\n * numeric entities are always accepted, matching EntityDecoder behavior.\n *\n * When `attribute` is false (the common case), short-circuit skips all\n * the unterminated-named checks entirely.\n */\n if (\n consumed === 0 ||\n (isAttribute &&\n firstChar !== CharCodes.NUM &&\n input.charCodeAt(entityStart + consumed - 1) !==\n CharCodes.SEMI &&\n entityStart + consumed < inputLength &&\n isEntityInAttributeInvalidEnd(\n input.charCodeAt(entityStart + consumed),\n ))\n ) {\n // Rejected: leave `&` in the pending chunk, scan past it.\n offset = entityStart;\n } else {\n if (chunkStart < offset) {\n result += input.slice(chunkStart, offset);\n }\n result += value;\n offset = chunkStart = entityStart + consumed;\n }\n\n /*\n * Adjacent entities (`&x;&y;`) are common in entity-dense input;\n * checking the single character at `offset` first skips the\n * `indexOf` call (and its per-call overhead) for that case.\n */\n if (input.charCodeAt(offset) !== CharCodes.AMP) {\n offset = input.indexOf(\"&\", offset);\n }\n } while (offset >= 0);\n\n return result + input.slice(chunkStart);\n}\n\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(\n htmlString: string,\n mode: DecodingMode = DecodingMode.Legacy,\n): string {\n return decodeWithTrie(\n htmlString,\n mode === DecodingMode.Strict,\n mode === DecodingMode.Attribute,\n );\n}\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: string): string {\n return decodeWithTrie(htmlAttribute, false, true);\n}\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: string): string {\n return decodeWithTrie(htmlString, true, false);\n}\n\n/**\n * Decodes an XML string, requiring all entities to be terminated by a semicolon.\n *\n * Uses a hand-coded fast path for the 5 XML named entities (amp, lt, gt,\n * quot, apos) plus numeric entities, bypassing the trie entirely.\n * @param xmlString The string to decode.\n * @returns The decoded string.\n */\nexport function decodeXML(xmlString: string): string {\n let offset = xmlString.indexOf(\"&\");\n if (offset < 0) return xmlString;\n\n let lastIndex = 0;\n let result = \"\";\n\n do {\n const start = offset + 1;\n let consumed = 0;\n let value = \"\";\n\n const c1 = xmlString.charCodeAt(start);\n\n if (c1 === CharCodes.NUM) {\n const packed = parseNumericEntity(\n xmlString,\n start,\n xmlString.length,\n );\n consumed = unpackConsumed(packed);\n // XML is always strict — require semicolon.\n if (\n consumed === 0 ||\n xmlString.charCodeAt(start + consumed - 1) !== CharCodes.SEMI\n ) {\n consumed = 0;\n } else {\n const codePoint = packed & CODE_POINT_MASK;\n // Nonzero BMP values below the surrogate range need no replacement.\n value =\n (codePoint - 1) >>> 0 < 0xd7_ff\n ? String.fromCharCode(codePoint)\n : String.fromCodePoint(replaceCodePointXML(codePoint));\n }\n } else {\n /* eslint-disable unicorn/no-break-in-nested-loop -- Keep XML name dispatch inline with the decode loop. */\n switch (c1) {\n // < / >\n case 0x6c:\n case 0x67: {\n if (\n xmlString.charCodeAt(start + 1) === 0x74 &&\n xmlString.charCodeAt(start + 2) === CharCodes.SEMI\n ) {\n consumed = 3;\n value = c1 === 0x6c ? \"<\" : \">\";\n }\n break;\n }\n // & / '\n case 0x61: {\n const c2 = xmlString.charCodeAt(start + 1);\n if (\n c2 === 0x6d &&\n xmlString.charCodeAt(start + 2) === 0x70 &&\n xmlString.charCodeAt(start + 3) === CharCodes.SEMI\n ) {\n consumed = 4;\n value = \"&\";\n } else if (\n c2 === 0x70 &&\n xmlString.charCodeAt(start + 2) === 0x6f &&\n xmlString.charCodeAt(start + 3) === 0x73 &&\n xmlString.charCodeAt(start + 4) === CharCodes.SEMI\n ) {\n consumed = 5;\n value = \"'\";\n }\n break;\n }\n // "\n case 0x71: {\n if (\n xmlString.charCodeAt(start + 1) === 0x75 &&\n xmlString.charCodeAt(start + 2) === 0x6f &&\n xmlString.charCodeAt(start + 3) === 0x74 &&\n xmlString.charCodeAt(start + 4) === CharCodes.SEMI\n ) {\n consumed = 5;\n value = '\"';\n }\n break;\n }\n }\n /* eslint-enable unicorn/no-break-in-nested-loop */\n }\n\n if (consumed > 0) {\n if (lastIndex < offset)\n result += xmlString.slice(lastIndex, offset);\n result += value;\n offset = lastIndex = start + consumed;\n } else {\n offset = start;\n }\n /*\n * Adjacent entities (`&x;&y;`) are common in entity-dense input;\n * checking the single character at `lastIndex` first skips the\n * `indexOf` call (and its per-call overhead) for that case.\n */\n offset =\n xmlString.charCodeAt(offset) === CharCodes.AMP\n ? offset\n : xmlString.indexOf(\"&\", offset);\n } while (offset >= 0);\n\n return result + xmlString.slice(lastIndex);\n}\n\nexport {\n replaceCodePoint,\n replaceCodePointXML,\n} 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","/** 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","/**\n * Get the named reference for an XML special character or U+00A0.\n * @param char Code unit matched by one of the escape regexes.\n */\nfunction getEscape(char: number): string {\n return char === 34\n ? \""\"\n : char === 38\n ? \"&\"\n : char === 39\n ? \"'\"\n : char === 60\n ? \"<\"\n : char === 62\n ? \">\"\n : \" \";\n}\n\n/**\n * Read a code point at a given index.\n * @param input String to read the code point from.\n * @param index Current read position in the input string.\n * @returns The code point at `index`, or `undefined` if `index` is out of range.\n * @deprecated Use `String.prototype.codePointAt` directly instead; this export\n * will be removed in the next major.\n */\nexport const getCodePoint: (input: string, index: number) => number = (\n input: string,\n index: number,\n): number => input.codePointAt(index)!;\n\n/**\n * Bitset for ASCII characters that need to be escaped in XML.\n */\nexport const XML_BITSET_VALUE = 0x50_00_00_c4; // 32..63 -> 34 (\"),38 (&),39 ('),60 (<),62 (>)\n\n/**\n * Matches exactly the characters `encodeXML` escapes: the five XML special\n * characters plus every non-ASCII code unit (lone surrogates included — no\n * `u` flag). Kept in sync with `XML_BITSET_VALUE`.\n *\n * Shared with `encodeNonAsciiHTML` in `encode.ts`. Because the regex is\n * stateful (`g` flag), every call site must set `lastIndex` before use.\n */\n// eslint-disable-next-line unicorn/prefer-unicode-code-point-escapes -- the `\\u{...}` form requires the `u` flag, which we deliberately omit so lone surrogates match by code unit\nexport const xmlEncodeRegex: RegExp = /[\"&'<>\\u0080-\\uFFFF]/g;\n\n/**\n * Whether `code` (a UTF-16 code unit) is escaped by {@link encodeXML}: a\n * non-ASCII unit, or one of the five XML specials flagged in\n * `XML_BITSET_VALUE` (which is only meaningful for code units 32-63).\n * @param code Code unit to test.\n */\nfunction isXmlEscapable(code: number): boolean {\n return (\n code >= 0x80 ||\n (code >= 32 && code < 64 && ((XML_BITSET_VALUE >>> code) & 1) === 1)\n );\n}\n\n/**\n * Encodes all non-ASCII characters, as well as characters not valid in XML\n * documents using XML entities.\n *\n * If a character has no equivalent entity, a numeric hexadecimal reference\n * (eg. `ü`) will be used.\n * @param input Input string to encode.\n */\nexport function encodeXML(input: string): string {\n const { length } = input;\n let out: string | undefined;\n let last = 0;\n let index = 0;\n\n while (index < length) {\n const char = input.charCodeAt(index);\n\n /*\n * Find the next character to escape: scan a short window inline\n * (escapable characters cluster in markup-heavy input), then fall\n * back to the regex, which skips clean spans in native code.\n */\n if (!isXmlEscapable(char)) {\n const bound = Math.min(index + 32, length);\n let next = index + 1;\n while (next < bound && !isXmlEscapable(input.charCodeAt(next))) {\n next++;\n }\n if (next < bound) {\n index = next;\n continue;\n }\n if (next >= length) break;\n xmlEncodeRegex.lastIndex = next;\n if (!xmlEncodeRegex.test(input)) break;\n index = xmlEncodeRegex.lastIndex - 1;\n continue;\n }\n\n if (out === undefined) out = input.substring(0, index);\n else if (last !== index) out += input.substring(last, index);\n\n if (char < 64) {\n // Known replacement\n out += getEscape(char);\n last = index += 1;\n continue;\n }\n\n // Non-ASCII: encode as numeric entity (handle surrogate pair)\n const cp = input.codePointAt(index)!;\n out += `&#x${cp.toString(16)};`;\n if (cp !== char) index++; // Skip trailing surrogate\n last = index += 1;\n }\n\n if (out === undefined) return input;\n if (last < length) out += input.substr(last);\n return out;\n}\n\n/**\n * Encodes all non-ASCII characters, as well as characters not valid in XML\n * documents using numeric hexadecimal reference (eg. `ü`).\n *\n * Have a look at `escapeUTF8` if you want a more concise output at the expense\n * of reduced transportability.\n * @param data String to escape.\n */\nexport const escape: typeof encodeXML = encodeXML;\n\n/**\n * Escape `data` using `re`, mapping each matched character to its entity.\n * Every match is one UTF-16 code unit, so its index is `lastIndex - 1`.\n * @param re Global regex matching exactly the characters to escape\n * (`\"`, `&`, `'`, `<`, `>`, `\\u00A0` at most).\n * @param data String to escape.\n */\nfunction escapeWithRegex(re: RegExp, data: string): string {\n re.lastIndex = 0;\n if (!re.test(data)) return data;\n\n let out = \"\";\n let last = 0;\n do {\n const index = re.lastIndex - 1;\n if (last !== index) out += data.substring(last, index);\n const char = data.charCodeAt(index);\n out += getEscape(char);\n last = index + 1;\n } while (re.test(data));\n\n return out + data.substring(last);\n}\n\nconst xmlEscapeRegex = /[\"&'<>]/g;\n/**\n * Encodes all characters not valid in XML documents using XML entities.\n *\n * Note that the output will be character-set dependent.\n * @param data String to escape.\n */\nexport function escapeUTF8(data: string): string {\n return escapeWithRegex(xmlEscapeRegex, data);\n}\n\nconst attributeEscapeRegex = /[\"&\\u{A0}]/gu;\n\n/**\n * Encodes all characters that have to be escaped in HTML attributes,\n * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.\n * @param data String to escape.\n */\nexport function escapeAttribute(data: string): string {\n return escapeWithRegex(attributeEscapeRegex, data);\n}\n\nconst textEscapeRegex = /[&<>\\u{A0}]/gu;\n\n/**\n * Encodes all characters that have to be escaped in HTML text,\n * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.\n * @param data String to escape.\n */\nexport function escapeText(data: string): string {\n return escapeWithRegex(textEscapeRegex, data);\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","/**\n * A small, read-only DOM over parse5 (spec-compliant HTML parsing, no browser): just enough\n * querying to read a Squarespace page — class/attribute matching, text, descendants.\n */\nimport { type DefaultTreeAdapterTypes, parse, parseFragment, serializeOuter } from \"parse5\";\n\nexport type Node = DefaultTreeAdapterTypes.Node;\nexport type Element = DefaultTreeAdapterTypes.Element;\ntype ParentNode = DefaultTreeAdapterTypes.ParentNode;\n\nexport const isElement = (n: Node | undefined): n is Element =>\n !!n && typeof (n as Element).tagName === \"string\";\n\nconst hasChildren = (n: Node): n is ParentNode & Node =>\n Array.isArray((n as ParentNode).childNodes);\n\n/** Parse a whole document. */\nexport function parseDocument(html: string): Element {\n const doc = parse(html);\n const root = doc.childNodes.find(isElement);\n if (!root) throw new Error(\"Empty HTML document\");\n return root;\n}\n\n/** Parse an HTML fragment into a synthetic `<div>` wrapper. */\nexport function parseHtmlFragment(html: string): Element {\n const frag = parseFragment(html);\n const wrapper = {\n nodeName: \"div\",\n tagName: \"div\",\n attrs: [],\n namespaceURI: \"http://www.w3.org/1999/xhtml\",\n childNodes: frag.childNodes,\n parentNode: null,\n sourceCodeLocation: undefined,\n } as unknown as Element;\n for (const c of frag.childNodes) (c as { parentNode: unknown }).parentNode = wrapper;\n return wrapper;\n}\n\nexport function attr(el: Element | undefined, name: string): string | undefined {\n return el?.attrs.find((a) => a.name === name)?.value;\n}\n\nexport function classes(el: Element): string[] {\n return (attr(el, \"class\") ?? \"\").split(/\\s+/).filter(Boolean);\n}\n\nexport function hasClass(el: Element, name: string): boolean {\n return classes(el).includes(name);\n}\n\n/** Any class starting with `prefix` (e.g. `section-height--`), returning the rest. */\nexport function classValue(el: Element, prefix: string): string | undefined {\n const c = classes(el).find((x) => x.startsWith(prefix));\n return c ? c.slice(prefix.length) : undefined;\n}\n\nexport function children(el: Node): Element[] {\n return hasChildren(el) ? el.childNodes.filter(isElement) : [];\n}\n\n/** Depth-first descendants matching `pred` (not including `el`). */\nexport function findAll(el: Node, pred: (e: Element) => boolean, opts: { deep?: boolean } = {}) {\n const out: Element[] = [];\n const visit = (n: Node) => {\n if (!hasChildren(n)) return;\n for (const c of n.childNodes) {\n if (!isElement(c)) continue;\n // <template> content lives in a separate fragment; parse5 keeps it in `content`.\n const tpl = (c as unknown as { content?: Node }).content;\n if (pred(c)) {\n out.push(c);\n if (opts.deep === false) continue;\n }\n visit(c);\n if (tpl) visit(tpl);\n }\n };\n visit(el);\n return out;\n}\n\nexport function find(el: Node, pred: (e: Element) => boolean): Element | undefined {\n let hit: Element | undefined;\n const visit = (n: Node): boolean => {\n if (!hasChildren(n)) return false;\n for (const c of n.childNodes) {\n if (!isElement(c)) continue;\n if (pred(c)) {\n hit = c;\n return true;\n }\n if (visit(c)) return true;\n }\n return false;\n };\n visit(el);\n return hit;\n}\n\nexport const byClass = (name: string) => (e: Element) => hasClass(e, name);\nexport const byTag =\n (...tags: string[]) =>\n (e: Element) =>\n tags.includes(e.tagName);\nexport const byAttr = (name: string, value?: string) => (e: Element) => {\n const v = attr(e, name);\n return value === undefined ? v !== undefined : v === value;\n};\n\n/** Closest ancestor (including `el`) matching `pred`. */\nexport function closest(el: Element, pred: (e: Element) => boolean): Element | undefined {\n let n: Node | null = el;\n while (n && isElement(n)) {\n if (pred(n)) return n;\n n = (n as Element).parentNode as Node | null;\n }\n return undefined;\n}\n\nconst BLOCK_TAGS = new Set([\"p\", \"div\", \"li\", \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\", \"br\", \"tr\"]);\n\n/** Text content with whitespace collapsed (block elements become spaces). */\nexport function text(el: Node | undefined): string {\n if (!el) return \"\";\n const parts: string[] = [];\n const visit = (n: Node) => {\n if ((n as DefaultTreeAdapterTypes.TextNode).nodeName === \"#text\") {\n parts.push((n as DefaultTreeAdapterTypes.TextNode).value);\n return;\n }\n if (isElement(n)) {\n if (n.tagName === \"script\" || n.tagName === \"style\" || n.tagName === \"noscript\") return;\n if (BLOCK_TAGS.has(n.tagName)) parts.push(\" \");\n }\n if (hasChildren(n)) for (const c of n.childNodes) visit(c);\n };\n visit(el);\n return parts.join(\"\").replace(/\\s+/g, \" \").trim();\n}\n\nexport function outerHtml(el: Element): string {\n return serializeOuter(el);\n}\n\nexport function innerHtml(el: Element): string {\n return el.childNodes.map((c) => serializeOuter(c as Element)).join(\"\");\n}\n\n/** JSON in an attribute (Squarespace's `data-current-styles`, `data-block-json`), or undefined. */\nexport function jsonAttr<T = Record<string, unknown>>(el: Element, name: string): T | undefined {\n const raw = attr(el, name);\n if (!raw) return undefined;\n try {\n return JSON.parse(raw) as T;\n } catch {\n return undefined;\n }\n}\n\n/** Text of a `<script>` element. */\nexport function scriptText(el: Element): string {\n return el.childNodes\n .map((c) => (c as DefaultTreeAdapterTypes.TextNode).value ?? \"\")\n .join(\"\")\n .trim();\n}\n","/**\n * Squarespace blocks (`.sqs-block`) → `SqBlock`. Works on both generations of markup: classic\n * `sqs-block-<type>` blocks with `data-block-json` (7.0 and early 7.1) and \"website component\"\n * blocks with `data-definition-name=\"website.components.<type>\"` / `data-sqsp-block`.\n */\nimport {\n attr,\n byClass,\n byTag,\n classes,\n closest,\n type Element,\n find,\n findAll,\n hasClass,\n innerHtml,\n jsonAttr,\n scriptText,\n text,\n} from \"../dom\";\nimport type { SqBlock, SqForm, SqFormField, SqFormFieldType, SqImage, SqImageCard } from \"./types\";\n\n/** Strip Squarespace's `?format=…` resize suffix and protocol-relative prefixes. */\nexport function cleanImageUrl(raw: string): string {\n let url = raw.trim();\n if (url.startsWith(\"//\")) url = `https:${url}`;\n if (url.startsWith(\"http://\")) url = `https://${url.slice(7)}`;\n try {\n const u = new URL(url);\n u.searchParams.delete(\"format\");\n u.searchParams.delete(\"content-type\");\n return u.toString().replace(/\\?$/, \"\");\n } catch {\n return url;\n }\n}\n\nconst dims = (s: string | undefined): { width?: number; height?: number } => {\n const m = /^(\\d+)x(\\d+)$/.exec(s ?? \"\");\n return m ? { width: Number(m[1]), height: Number(m[2]) } : {};\n};\n\n/** An `<img>` (with Squarespace's lazy-loading attributes) → `SqImage`. */\nexport function imageFrom(img: Element): SqImage | undefined {\n const src =\n attr(img, \"data-src\") ??\n attr(img, \"data-image\") ??\n attr(img, \"src\") ??\n attr(img, \"data-image-src\");\n if (!src || src.startsWith(\"data:\")) return undefined;\n const size = dims(attr(img, \"data-image-dimensions\"));\n const w = Number(attr(img, \"width\"));\n const h = Number(attr(img, \"height\"));\n if (!size.width && w > 0 && h > 0) {\n size.width = w;\n size.height = h;\n }\n // Squarespace sometimes double-escapes alt text (`&amp;`); parse5 undoes one level.\n const alt = (attr(img, \"alt\") ?? \"\")\n .replace(/&/g, \"&\")\n .replace(/"/g, '\"')\n .replace(/'/g, \"'\")\n .trim();\n const out: SqImage = { url: cleanImageUrl(src), alt };\n if (size.width && size.height) {\n out.width = size.width;\n out.height = size.height;\n }\n const fp = /^([\\d.]+),([\\d.]+)$/.exec(attr(img, \"data-image-focal-point\") ?? \"\");\n if (fp) {\n const x = Number(fp[1]);\n const y = Number(fp[2]);\n if (x >= 0 && x <= 1 && y >= 0 && y <= 1 && (x !== 0.5 || y !== 0.5)) out.focal = [x, y];\n }\n // Squarespace fills alt with the file name when the owner left it empty.\n if (/\\.(?:jpe?g|png|gif|webp|avif|heic)$/i.test(out.alt) || /^image-asset/i.test(out.alt))\n out.alt = \"\";\n return out;\n}\n\n/** The block's kind tokens, most specific first. */\nexport function blockKind(el: Element): string {\n const tokens: string[] = [];\n const sqsp = attr(el, \"data-sqsp-block\");\n if (sqsp) tokens.push(sqsp);\n const def = attr(el, \"data-definition-name\");\n if (def?.startsWith(\"website.components.\")) tokens.push(def.slice(\"website.components.\".length));\n for (const c of classes(el))\n if (\n c.startsWith(\"sqs-block-\") &&\n c !== \"sqs-block-website-component\" &&\n c !== \"sqs-block-content\"\n )\n tokens.push(c.slice(\"sqs-block-\".length));\n for (const t of tokens) {\n const k = KIND_ALIASES[t.toLowerCase()];\n if (k) return k;\n }\n return tokens[0] ?? \"unknown\";\n}\n\nconst KIND_ALIASES: Record<string, string> = {\n text: \"text\",\n html: \"text\",\n markdown: \"text\",\n image: \"image\",\n \"image-classic\": \"image\",\n imagelayout: \"image\",\n imagefluid: \"image\",\n gallery: \"gallery\",\n \"gallery-block\": \"gallery\",\n button: \"button\",\n form: \"form\",\n newsletter: \"newsletter\",\n video: \"video\",\n map: \"map\",\n code: \"code\",\n embed: \"embed\",\n quote: \"quote\",\n accordion: \"accordion\",\n summary: \"summary\",\n \"summary-v2\": \"summary\",\n spacer: \"spacer\",\n horizontalrule: \"line\",\n divider: \"line\",\n \"social-links\": \"social\",\n sociallinks: \"social\",\n socialaccountlinks: \"social\",\n \"socialaccountlinks-v2\": \"social\",\n audio: \"audio\",\n product: \"product\",\n shape: \"shape\",\n};\n\n/** Unescaped HTML of the block (for regex fallbacks over escaped JSON attributes). */\nconst flat = (el: Element) =>\n innerHtml(el)\n .replace(/"/g, '\"')\n .replace(/&/g, \"&\");\n\nconst VIDEO_URL_RE =\n /https?:\\/\\/(?:www\\.)?(?:youtube\\.com\\/(?:watch\\?v=|embed\\/|shorts\\/)[\\w-]+|youtu\\.be\\/[\\w-]+|(?:player\\.)?vimeo\\.com\\/(?:video\\/)?\\d+)[^\\s\"'<>\\\\]*/;\n\nexport function videoUrl(raw: string): string | undefined {\n const m = VIDEO_URL_RE.exec(raw);\n if (!m) return undefined;\n const u = m[0].replace(/&/g, \"&\");\n const yt = /(?:youtube\\.com\\/(?:watch\\?v=|embed\\/|shorts\\/)|youtu\\.be\\/)([\\w-]+)/.exec(u);\n if (yt) return `https://www.youtube.com/watch?v=${yt[1]}`;\n const vm = /vimeo\\.com\\/(?:video\\/)?(\\d+)/.exec(u);\n if (vm) return `https://vimeo.com/${vm[1]}`;\n return u;\n}\n\nconst FIELD_TYPES: Record<string, SqFormFieldType> = {\n text: \"text\",\n textarea: \"textarea\",\n email: \"email\",\n phone: \"phone\",\n name: \"name\",\n address: \"address\",\n checkbox: \"checkbox\",\n radio: \"radio\",\n select: \"select\",\n date: \"date\",\n time: \"time\",\n website: \"website\",\n number: \"number\",\n file: \"file\",\n hidden: \"hidden\",\n likert: \"likert\",\n consent: \"checkbox\",\n};\n\nfunction optionList(raw: unknown): string[] | undefined {\n if (!Array.isArray(raw)) return undefined;\n const out = raw\n .map((o) =>\n typeof o === \"string\"\n ? o\n : o && typeof o === \"object\"\n ? String(\n (o as { value?: unknown; title?: unknown }).value ??\n (o as { title?: unknown }).title ??\n \"\",\n )\n : \"\",\n )\n .map((s) => s.trim())\n .filter(Boolean);\n return out.length ? out : undefined;\n}\n\n/** Form definition from the form block's JSON context (7.1) or its rendered fields (7.0). */\nexport function formFrom(el: Element): SqForm | undefined {\n const ctxScript = find(\n el,\n (e) => e.tagName === \"script\" && (attr(e, \"class\") ?? \"\").includes(\"sqs-form-block-context\"),\n );\n let ctx: Record<string, unknown> | undefined;\n if (ctxScript) {\n try {\n ctx = JSON.parse(scriptText(ctxScript)) as Record<string, unknown>;\n } catch {\n ctx = undefined;\n }\n }\n ctx ??= jsonAttr(el, \"data-block-json\");\n if (ctx && Array.isArray(ctx.formFields ?? (ctx as { fields?: unknown }).fields)) {\n const raw = (ctx.formFields ?? (ctx as { fields?: unknown }).fields) as Record<\n string,\n unknown\n >[];\n const fields: SqFormField[] = raw.map((f) => {\n const rawType = String(f.type ?? \"text\");\n return {\n type: FIELD_TYPES[rawType] ?? \"other\",\n label: String(f.title ?? f.label ?? rawType).trim() || rawType,\n required: f.required === true,\n ...(typeof f.description === \"string\" && f.description.trim()\n ? { description: stripTags(f.description) }\n : {}),\n ...(typeof f.placeholder === \"string\" && f.placeholder.trim()\n ? { placeholder: f.placeholder.trim() }\n : {}),\n ...(optionList(f.options) ? { options: optionList(f.options) } : {}),\n ...(FIELD_TYPES[rawType] ? {} : { rawType }),\n };\n });\n const msg = ctx.formSubmissionMessage as { html?: string } | string | undefined;\n return {\n name: String(ctx.formName ?? \"Form\").trim() || \"Form\",\n fields,\n ...(typeof ctx.formSubmitButtonText === \"string\" && ctx.formSubmitButtonText.trim()\n ? { submitLabel: ctx.formSubmitButtonText.trim() }\n : {}),\n ...(msg\n ? { successMessage: stripTags(typeof msg === \"string\" ? msg : (msg.html ?? \"\")) }\n : {}),\n ...(typeof ctx.successRedirect === \"string\" && ctx.successRedirect.trim()\n ? { successRedirect: ctx.successRedirect.trim() }\n : {}),\n };\n }\n // 7.0 markup: <div class=\"form-item field email required\"><label class=\"title\">…\n const items = findAll(el, (e) => classes(e).includes(\"form-item\"));\n if (!items.length) return undefined;\n const fields: SqFormField[] = [];\n for (const item of items) {\n const cls = classes(item);\n const type =\n (Object.keys(FIELD_TYPES).find((t) => cls.includes(t)) as string | undefined) ??\n (find(item, byTag(\"textarea\"))\n ? \"textarea\"\n : find(item, byTag(\"select\"))\n ? \"select\"\n : \"text\");\n const label = text(find(item, (e) => classes(e).includes(\"title\") || e.tagName === \"legend\"))\n .replace(/\\*\\s*$/, \"\")\n .replace(/\\(required\\)/i, \"\")\n .trim();\n const options = findAll(item, byTag(\"option\"))\n .map((o) => text(o))\n .filter(Boolean);\n const choice = findAll(item, (e) => e.tagName === \"label\" && !classes(e).includes(\"title\"))\n .map((l) => text(l))\n .filter(Boolean);\n fields.push({\n type: FIELD_TYPES[type] ?? \"text\",\n label: label || type,\n required: cls.includes(\"required\"),\n ...(options.length\n ? { options }\n : choice.length && (type === \"checkbox\" || type === \"radio\")\n ? { options: choice }\n : {}),\n });\n }\n const button = find(el, (e) => e.tagName === \"input\" && attr(e, \"type\") === \"submit\");\n return {\n name: text(find(el, byClass(\"form-title\"))) || \"Form\",\n fields,\n ...(button && attr(button, \"value\") ? { submitLabel: attr(button, \"value\") } : {}),\n successMessage: text(find(el, byClass(\"form-submission-text\"))) || undefined,\n };\n}\n\nexport const stripTags = (html: string) =>\n html\n .replace(/<br\\s*\\/?>/gi, \" \")\n // Block boundaries are word boundaries (\"DESCRIPTION</p><p>Lorem\" → \"DESCRIPTION Lorem\").\n .replace(/<\\/(?:p|pre|h[1-6]|li|div|blockquote|dd|dt|tr|td|th)>/gi, \" \")\n .replace(/<[^>]+>/g, \"\")\n .replace(/ /g, \" \")\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/"/g, '\"')\n .replace(/'/g, \"'\")\n // Numeric references, also when a CMS escaped them twice (`&#8217;` → `’`).\n .replace(/&#x([0-9a-f]{1,6});/gi, (_, h: string) => safeChar(Number.parseInt(h, 16)))\n .replace(/&#(\\d{1,7});/g, (_, n: string) => safeChar(Number(n)))\n .replace(/\\s+/g, \" \")\n .trim();\n\nconst safeChar = (code: number) =>\n code > 0 && code <= 0x10ffff && !(code >= 0xd800 && code <= 0xdfff)\n ? String.fromCodePoint(code)\n : \"\";\n\nfunction firstHref(el: Element): string | undefined {\n const a = find(el, (e) => e.tagName === \"a\" && !!attr(e, \"href\"));\n return a ? attr(a, \"href\") : undefined;\n}\n\n/**\n * Image blocks laid out with text (7.0/7.1 \"card\", \"overlap\", \"collage\", \"stack\", \"poster\"):\n * the title, subtitle and button, and where they sit.\n */\nfunction imageCard(el: Element): SqImageCard | undefined {\n const wrapper = find(el, (e) => hasClass(e, \"image-card-wrapper\") || hasClass(e, \"image-card\"));\n if (!wrapper) return undefined;\n const title = text(find(wrapper, (e) => hasClass(e, \"image-title\")));\n const sub = find(wrapper, (e) => hasClass(e, \"image-subtitle\"));\n const a = find(\n wrapper,\n (e) =>\n e.tagName === \"a\" && !!attr(e, \"href\") && !!closest(e, (p) => hasClass(p, \"image-button\")),\n );\n const label = a ? text(a) : \"\";\n if (!title && !text(sub) && !label) return undefined;\n const fig = find(el, (e) => e.tagName === \"figure\") ?? el;\n const cls = classes(fig).join(\" \");\n const layout = /design-layout-([a-z]+)/.exec(cls)?.[1] ?? \"card\";\n const position: SqImageCard[\"position\"] =\n layout === \"poster\"\n ? \"over\"\n : layout === \"stack\"\n ? \"below\"\n : /image-position-right/.test(cls)\n ? \"left\"\n : \"right\";\n return {\n ...(title ? { title } : {}),\n ...(sub && text(sub) ? { html: innerHtml(sub) } : {}),\n ...(a && label ? { button: { label, href: attr(a, \"href\") as string } } : {}),\n position,\n };\n}\n\n/** Parse one `.sqs-block` element. Returns undefined for purely decorative blocks. */\nexport function parseBlock(el: Element): SqBlock | undefined {\n const kind = blockKind(el);\n const json = jsonAttr(el, \"data-block-json\") ?? {};\n switch (kind) {\n case \"text\": {\n const content =\n find(el, (e) => classes(e).includes(\"sqs-html-content\")) ??\n find(el, byClass(\"sqs-block-content\")) ??\n el;\n const html = innerHtml(content).replace(/<style[\\s\\S]*?<\\/style>/gi, \"\");\n if (!text(content)) return undefined;\n return classes(el).includes(\"sqs-background-enabled\")\n ? { kind: \"text\", html, panel: true }\n : { kind: \"text\", html };\n }\n case \"image\": {\n const img = find(el, byTag(\"img\"));\n const image = img ? imageFrom(img) : undefined;\n if (!image) return undefined;\n const card = imageCard(el);\n if (card) return { kind: \"image\", image, card };\n const caption = text(\n find(\n el,\n (e) =>\n classes(e).some((c) => c === \"image-caption\" || c === \"image-card\") ||\n e.tagName === \"figcaption\",\n ),\n );\n const a = find(\n el,\n (e) =>\n e.tagName === \"a\" && !!attr(e, \"href\") && attr(e, \"data-lightbox-theme\") === undefined,\n );\n const href = a ? attr(a, \"href\") : undefined;\n return {\n kind: \"image\",\n image,\n ...(caption ? { caption } : {}),\n ...(href && !href.startsWith(\"#\") ? { href } : {}),\n };\n }\n case \"gallery\": {\n const seen = new Set<string>();\n const images = findAll(el, byTag(\"img\"))\n .map((img) => {\n const im = imageFrom(img);\n if (!im || seen.has(im.url)) return undefined;\n seen.add(im.url);\n return im;\n })\n .filter((x): x is SqImage => !!x);\n if (!images.length) return undefined;\n const cls = classes(el).join(\" \") + flat(el).slice(0, 2000);\n const layout = /slideshow/.test(cls)\n ? \"slideshow\"\n : /carousel/.test(cls)\n ? \"carousel\"\n : /strip/.test(cls)\n ? \"strips\"\n : /masonry/.test(cls)\n ? \"masonry\"\n : \"grid\";\n return { kind: \"gallery\", images, layout };\n }\n case \"button\": {\n const a = find(el, (e) => e.tagName === \"a\");\n if (!a) return undefined;\n const label = text(a);\n if (!label) return undefined;\n const cls = classes(a).join(\" \");\n const container = find(el, (e) =>\n classes(e).some((c) => c.startsWith(\"sqs-block-button-container--\")),\n );\n const where = container\n ? classes(container)\n .find((c) => c.startsWith(\"sqs-block-button-container--\"))\n ?.slice(\"sqs-block-button-container--\".length)\n : (jsonAttr(el, \"data-block-json\") as { buttonAlignment?: string } | undefined)\n ?.buttonAlignment;\n return {\n kind: \"button\",\n label,\n href: attr(a, \"href\") ?? \"/\",\n ...(where === \"center\"\n ? { align: \"center\" as const }\n : where === \"right\"\n ? { align: \"end\" as const }\n : {}),\n style: /--secondary|secondary/.test(cls)\n ? \"secondary\"\n : /--tertiary|tertiary/.test(cls)\n ? \"tertiary\"\n : \"primary\",\n };\n }\n case \"form\": {\n const form = formFrom(el);\n return form?.fields.length ? { kind: \"form\", form } : undefined;\n }\n case \"newsletter\": {\n const heading = text(\n find(el, (e) => classes(e).some((c) => /newsletter-form-header-title/.test(c))),\n );\n const description = text(\n find(el, (e) => classes(e).some((c) => /newsletter-form-header-description/.test(c))),\n );\n const button = text(\n find(\n el,\n (e) =>\n (e.tagName === \"button\" || classes(e).some((c) => /newsletter-form-button/.test(c))) &&\n !!text(e),\n ),\n );\n const input = find(\n el,\n (e) =>\n e.tagName === \"input\" &&\n (attr(e, \"type\") === \"email\" || /email/i.test(attr(e, \"name\") ?? \"\")),\n );\n const success = text(find(el, (e) => classes(e).some((c) => /form-submission-text/.test(c))));\n return {\n kind: \"newsletter\",\n ...(heading ? { heading } : {}),\n ...(description ? { description } : {}),\n ...(button ? { buttonLabel: button } : {}),\n ...(input && attr(input, \"placeholder\") ? { placeholder: attr(input, \"placeholder\") } : {}),\n ...(success ? { success } : {}),\n };\n }\n case \"video\": {\n const src =\n (typeof json.url === \"string\" ? json.url : undefined) ??\n attr(el, \"data-url\") ??\n videoUrl(flat(el));\n const url = src ? (videoUrl(src) ?? src) : undefined;\n if (!url || !/^https?:\\/\\//.test(url)) return undefined;\n const title = typeof json.title === \"string\" ? json.title : undefined;\n const caption = text(find(el, byClass(\"video-caption\"))) || undefined;\n return { kind: \"video\", url, ...(title ? { title } : {}), ...(caption ? { caption } : {}) };\n }\n case \"map\": {\n const loc = (json.location ?? {}) as Record<string, unknown>;\n let lat = Number(loc.markerLat ?? loc.mapLat);\n let lng = Number(loc.markerLng ?? loc.mapLng);\n const raw = flat(el);\n if (!Number.isFinite(lat) || !lat)\n lat = Number(/\"(?:markerLat|mapLat)\"\\s*:\\s*(-?[\\d.]+)/.exec(raw)?.[1]);\n if (!Number.isFinite(lng) || !lng)\n lng = Number(/\"(?:markerLng|mapLng)\"\\s*:\\s*(-?[\\d.]+)/.exec(raw)?.[1]);\n if (!Number.isFinite(lat) || !Number.isFinite(lng) || (lat === 0 && lng === 0))\n return undefined;\n const field = (k: string): string =>\n (typeof loc[k] === \"string\"\n ? (loc[k] as string)\n : (new RegExp(`\"${k}\"\\\\s*:\\\\s*\"([^\"]*)\"`).exec(raw)?.[1] ?? \"\")\n ).trim();\n const name = field(\"addressTitle\");\n const address = [field(\"addressLine1\"), field(\"addressLine2\"), field(\"addressCountry\")]\n .filter(Boolean)\n .join(\", \");\n const zoom = Number(loc.mapZoom ?? /\"mapZoom\"\\s*:\\s*([\\d.]+)/.exec(raw)?.[1]);\n return {\n kind: \"map\",\n lat,\n lng,\n ...(Number.isFinite(zoom) && zoom > 0 ? { zoom: Math.round(zoom) } : {}),\n ...(name ? { name } : {}),\n ...(address ? { address } : {}),\n };\n }\n case \"code\": {\n const content = find(el, byClass(\"sqs-block-content\")) ?? el;\n const html = innerHtml(content).trim();\n return html ? { kind: \"code\", html } : undefined;\n }\n case \"embed\": {\n const url = typeof json.url === \"string\" ? json.url : undefined;\n const html = typeof json.html === \"string\" ? json.html : undefined;\n const iframe = find(el, byTag(\"iframe\"));\n const src = url ?? (iframe ? (attr(iframe, \"src\") ?? attr(iframe, \"data-src\")) : undefined);\n const content = find(el, byClass(\"sqs-block-content\"));\n if (!src && !html && !(content && innerHtml(content).trim())) return undefined;\n return {\n kind: \"embed\",\n ...(src ? { url: src } : {}),\n ...(html ? { html } : !src && content ? { html: innerHtml(content).trim() } : {}),\n };\n }\n case \"quote\": {\n const bq = find(el, byTag(\"blockquote\")) ?? el;\n const source = text(\n find(el, (e) => e.tagName === \"figcaption\" || classes(e).includes(\"source\")),\n )\n .replace(/^[—–-]\\s*/, \"\")\n .trim();\n const quote = text(bq)\n .replace(/^[“\"]|[”\"]$/g, \"\")\n .trim();\n return quote ? { kind: \"quote\", text: quote, ...(source ? { source } : {}) } : undefined;\n }\n case \"accordion\": {\n const items = findAll(el, (e) => classes(e).some((c) => c === \"accordion-item\"), {\n deep: false,\n })\n .map((item) => ({\n title: text(find(item, (e) => classes(e).some((c) => c === \"accordion-item__title\"))),\n html: innerHtml(\n find(item, (e) => classes(e).some((c) => c === \"accordion-item__description\")) ?? item,\n ),\n }))\n .filter((i) => i.title);\n return items.length ? { kind: \"accordion\", items } : undefined;\n }\n case \"summary\": {\n const links = findAll(el, (e) => e.tagName === \"a\" && !!attr(e, \"href\"))\n .map((a) => attr(a, \"href\") as string)\n .filter((h) => h.startsWith(\"/\") && h.length > 1);\n const first = links.find((h) => h.split(\"/\").filter(Boolean).length >= 2);\n const collectionPath = first ? `/${first.split(\"/\").filter(Boolean)[0]}` : undefined;\n const heading = text(\n find(el, (e) => classes(e).some((c) => /summary-(?:heading|header-text)/.test(c))),\n );\n return {\n kind: \"summary\",\n ...(collectionPath ? { collectionPath } : {}),\n ...(heading ? { heading } : {}),\n };\n }\n case \"spacer\": {\n const ratio = Number(attr(el, \"data-aspect-ratio\"));\n return { kind: \"spacer\", ...(Number.isFinite(ratio) && ratio > 0 ? { ratio } : {}) };\n }\n case \"line\":\n return { kind: \"line\" };\n case \"social\":\n return { kind: \"social\" };\n case \"audio\": {\n const audioEl = find(\n el,\n (e) => !!attr(e, \"data-url\") || e.tagName === \"audio\" || e.tagName === \"source\",\n );\n const url =\n attr(el, \"data-url\") ??\n (audioEl ? (attr(audioEl, \"data-url\") ?? attr(audioEl, \"src\")) : undefined) ??\n (typeof json.audioAssetUrl === \"string\" ? json.audioAssetUrl : undefined);\n if (!url) return undefined;\n const title =\n (audioEl ? attr(audioEl, \"data-title\") : undefined) ??\n (typeof json.title === \"string\" ? json.title : undefined);\n return { kind: \"audio\", url, ...(title ? { title } : {}) };\n }\n case \"product\": {\n const href = findAll(el, (e) => e.tagName === \"a\")\n .map((a) => attr(a, \"href\") ?? \"\")\n .find((h) => /\\/p\\//.test(h) || h.split(\"/\").filter(Boolean).length >= 2);\n // Product blocks set to show only the picture (title and price hidden) are a linked image.\n const styles = findAll(el, byTag(\"style\")).map(scriptText).join(\" \");\n if (\n /--product-block-display-title\\s*:\\s*none/.test(styles) &&\n /--product-block-display-price\\s*:\\s*none/.test(styles)\n ) {\n const img = find(el, byTag(\"img\"));\n const image = img ? imageFrom(img) : undefined;\n if (image) return { kind: \"image\", image, ...(href ? { href } : {}) };\n }\n return { kind: \"product\", ...(href ? { path: href } : {}) };\n }\n case \"shape\":\n return undefined;\n default:\n return { kind: \"unknown\", type: kind, text: text(el).slice(0, 200) };\n }\n}\n\nexport { firstHref };\n","/**\n * Read the look of a Squarespace site from its CSS and body classes: the five-color site\n * palette (7.1 `--white-hsl`, `--accent-hsl`…), heading/body fonts, type sizes, button shape and\n * header behaviour. 7.0 sites get a best-effort read of `body`/`h1` rules.\n */\nimport type { SqTheme } from \"./types\";\n\nconst toHex = (n: number) =>\n Math.round(Math.max(0, Math.min(255, n)))\n .toString(16)\n .padStart(2, \"0\");\n\n/** `0,0%,27.8%` (Squarespace HSL triplet) → `#474747`. */\nexport function hslTripletToHex(triplet: string): string | undefined {\n const m = /^\\s*([\\d.]+)\\s*,\\s*([\\d.]+)%\\s*,\\s*([\\d.]+)%\\s*$/.exec(triplet);\n if (!m) return undefined;\n const h = Number(m[1]) / 360;\n const s = Number(m[2]) / 100;\n const l = Number(m[3]) / 100;\n const hue = (p: number, q: number, t0: number) => {\n let t = t0;\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n let r = l;\n let g = l;\n let b = l;\n if (s !== 0) {\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n r = hue(p, q, h + 1 / 3);\n g = hue(p, q, h);\n b = hue(p, q, h - 1 / 3);\n }\n return `#${toHex(r * 255)}${toHex(g * 255)}${toHex(b * 255)}`;\n}\n\n/** A CSS color literal (hex, rgb[a]) → hex, or undefined. */\nexport function cssColorToHex(value: string): string | undefined {\n const v = value.trim().toLowerCase();\n const hex = /^#([0-9a-f]{3}|[0-9a-f]{6})\\b/.exec(v);\n if (hex) {\n const h = hex[1] as string;\n return h.length === 3 ? `#${[...h].map((c) => c + c).join(\"\")}` : `#${h}`;\n }\n const rgb = /^rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)/.exec(v);\n if (rgb) return `#${toHex(Number(rgb[1]))}${toHex(Number(rgb[2]))}${toHex(Number(rgb[3]))}`;\n const hsl = /^hsla?\\(\\s*([\\d.]+)\\s*,\\s*([\\d.]+)%\\s*,\\s*([\\d.]+)%/.exec(v);\n if (hsl) return hslTripletToHex(`${hsl[1]},${hsl[2]}%,${hsl[3]}%`);\n return undefined;\n}\n\nconst PALETTE_KEYS = [\"white\", \"black\", \"accent\", \"lightAccent\", \"darkAccent\"] as const;\n\nconst firstVar = (css: string, name: string): string | undefined => {\n const m = new RegExp(`--${name}\\\\s*:\\\\s*([^;}]+)`).exec(css);\n return m ? (m[1] as string).trim() : undefined;\n};\n\nconst unquote = (s: string) =>\n s\n .replace(/^[\"']|[\"']$/g, \"\")\n .split(\",\")[0]\n ?.replace(/^[\"']|[\"']$/g, \"\")\n .trim() ?? \"\";\n\n/** Parse a Squarespace site.css (plus inline styles) and the page's body classes. */\nexport function parseTheme(css: string, bodyClasses: readonly string[] = []): SqTheme {\n const theme: SqTheme = { colors: {}, fonts: {}, sizes: {}, buttons: {} };\n for (const key of PALETTE_KEYS) {\n const v = firstVar(css, `${key}-hsl`);\n const hex = v ? hslTripletToHex(v) : undefined;\n if (hex) theme.colors[key] = hex;\n }\n const bg = firstVar(css, \"siteBackgroundColor\");\n if (bg) {\n const ref = /var\\(--(\\w+)-hsl\\)/.exec(bg)?.[1] as (typeof PALETTE_KEYS)[number] | undefined;\n const hex = ref ? theme.colors[ref] : cssColorToHex(bg);\n if (hex) theme.siteBackground = hex;\n }\n for (const [slot, name] of [\n [\"heading\", \"heading-font\"],\n [\"body\", \"body-font\"],\n ] as const) {\n const fam = firstVar(css, `${name}-font-family`);\n if (fam && !fam.startsWith(\"var(\")) {\n const weight = Number(firstVar(css, `${name}-font-weight`));\n theme.fonts[slot] = {\n family: unquote(fam),\n ...(Number.isFinite(weight) && weight > 0 ? { weight } : {}),\n };\n }\n }\n const sizeVars = {\n h1: \"heading-1-size-value\",\n h2: \"heading-2-size-value\",\n h3: \"heading-3-size-value\",\n h4: \"heading-4-size-value\",\n large: \"large-text-size-value\",\n normal: \"normal-text-size-value\",\n small: \"small-text-size-value\",\n } as const;\n for (const [k, v] of Object.entries(sizeVars)) {\n const n = Number(firstVar(css, v));\n if (Number.isFinite(n) && n > 0) theme.sizes[k as keyof typeof sizeVars] = n;\n }\n\n // 7.0: plain rules.\n if (!theme.fonts.body) {\n const body = /(?:^|[}\\s,])body\\s*\\{([^}]*)\\}/.exec(css)?.[1];\n const fam = body ? /font-family\\s*:\\s*([^;}]+)/.exec(body)?.[1] : undefined;\n if (fam) theme.fonts.body = { family: unquote(fam) };\n const bgc = body ? /background(?:-color)?\\s*:\\s*([^;}]+)/.exec(body)?.[1] : undefined;\n const hex = bgc ? cssColorToHex(bgc) : undefined;\n if (hex && !theme.siteBackground) theme.siteBackground = hex;\n }\n if (!theme.fonts.heading) {\n const h1 = /(?:^|[}\\s,])h1\\s*\\{([^}]*)\\}/.exec(css)?.[1];\n const fam = h1 ? /font-family\\s*:\\s*([^;}]+)/.exec(h1)?.[1] : undefined;\n if (fam) theme.fonts.heading = { family: unquote(fam) };\n }\n // 7.0 templates set fonts per element (`.title`, `h2`, nav…): take the most used families.\n if (\n !theme.fonts.heading ||\n !theme.fonts.body ||\n /^(?:inherit|initial)$/i.test(theme.fonts.body.family)\n ) {\n const ranked = (filter: (sel: string) => boolean) => {\n const counts = new Map<string, number>();\n for (const m of css.matchAll(/([^{}]+)\\{([^{}]*font-family\\s*:\\s*([^;}]+)[^{}]*)\\}/g)) {\n if (!filter(m[1] as string)) continue;\n const fam = unquote(m[3] as string);\n if (\n !fam ||\n /squarespace-ui|^(?:inherit|initial|sans-serif|serif|monospace)$|helvetica|arial|icon|font ?awesome/i.test(\n fam,\n )\n )\n continue;\n counts.set(fam, (counts.get(fam) ?? 0) + 1);\n }\n return [...counts.entries()].sort((a, b) => b[1] - a[1]).map(([f]) => f);\n };\n const all = ranked(() => true);\n const headings = ranked((sel) => /(?:^|[\\s,>])h[1-3]\\b|title|heading/i.test(sel));\n if (!theme.fonts.heading && (headings[0] ?? all[0]))\n theme.fonts.heading = { family: (headings[0] ?? all[0]) as string };\n const bodyFam = all.find((f) => f !== theme.fonts.heading?.family) ?? all[0];\n if ((!theme.fonts.body || /^(?:inherit|initial)$/i.test(theme.fonts.body.family)) && bodyFam)\n theme.fonts.body = { family: bodyFam };\n }\n // 7.0: the primary button color is the clearest brand signal.\n if (!theme.colors.accent) {\n const counts = new Map<string, number>();\n for (const m of css.matchAll(/([^{}]+)\\{([^{}]*)\\}/g)) {\n if (\n !/sqs-block-button-element|sqs-button-element--primary|sqs-system-button|sqs-editable-button/.test(\n m[1] as string,\n ) ||\n /:hover|:focus|:active/.test(m[1] as string)\n )\n continue;\n const bg = /background(?:-color)?\\s*:\\s*(#[0-9a-f]{3,6}|rgba?\\([^)]*\\)|hsla?\\([^)]*\\))/i.exec(\n m[2] as string,\n )?.[1];\n const hex = bg ? cssColorToHex(bg) : undefined;\n if (!hex) continue;\n const [r, g, b] = [1, 3, 5].map((i) => Number.parseInt(hex.slice(i, i + 2), 16));\n if (\n Math.max(r as number, g as number, b as number) -\n Math.min(r as number, g as number, b as number) <\n 40\n )\n continue;\n counts.set(hex, (counts.get(hex) ?? 0) + 1);\n }\n const top = [...counts.entries()].sort((a, b) => b[1] - a[1])[0]?.[0];\n if (top) theme.colors.accent = top;\n }\n if (!theme.colors.accent) {\n const link = /(?:^|[}\\s,])a\\s*\\{([^}]*)\\}/.exec(css)?.[1];\n const c = link ? /(?:^|;)\\s*color\\s*:\\s*([^;}]+)/.exec(link)?.[1] : undefined;\n const hex = c ? cssColorToHex(c) : undefined;\n if (hex) theme.colors.accent = hex;\n }\n\n const has = (c: string) => bodyClasses.includes(c);\n const shape = bodyClasses\n .find((c) => c.startsWith(\"primary-button-shape-\"))\n ?.slice(\"primary-button-shape-\".length);\n if (shape === \"square\" || shape === \"rounded\" || shape === \"pill\") theme.buttons.shape = shape;\n else {\n // 7.0: `button-corner-style-pill`, `medium-button-shape-pill`.\n const c7 = bodyClasses\n .map(\n (c) => /^(?:button-corner-style|medium-button-shape)-(square|rounded|pill)$/.exec(c)?.[1],\n )\n .find(Boolean);\n if (c7 === \"square\" || c7 === \"rounded\" || c7 === \"pill\") theme.buttons.shape = c7;\n }\n const style = bodyClasses\n .find((c) => c.startsWith(\"primary-button-style-\"))\n ?.slice(\"primary-button-style-\".length);\n if (style === \"solid\" || style === \"outline\" || style === \"raised\") theme.buttons.style = style;\n if (\n has(\"tweak-fixed-header\") ||\n has(\"tweak-fixed-header-style-basic\") ||\n has(\"tweak-fixed-header-style-scroll-back\")\n )\n theme.headerFixed = true;\n if (has(\"tweak-transparent-header\")) theme.headerTransparent = true;\n return theme;\n}\n","/**\n * The site's icon (favicon / home-screen icon) from `<link rel=…>` tags: an SVG icon first (it\n * stays vector), then the largest PNG (`apple-touch-icon`, `sizes=\"192x192\"`), then any other\n * raster. `.ico` files are skipped (the media pipeline stores JPEG/PNG/GIF/WebP/AVIF/SVG), as are\n * platform default icons.\n */\nimport { attr, type Element, findAll } from \"../dom\";\n\nconst DEFAULTS =\n /\\/universal\\/default-favicon|\\/wp-includes\\/images\\/w-logo|favicon\\.ico(?:[?#]|$)/i;\n\nexport function bestIcon(head: Element | undefined, base: string): string | undefined {\n if (!head) return undefined;\n const links = findAll(\n head,\n (e) =>\n e.tagName === \"link\" &&\n /(?:^|\\s)(?:icon|apple-touch-icon(?:-precomposed)?|mask-icon)(?:\\s|$)/i.test(\n attr(e, \"rel\") ?? \"\",\n ) &&\n !!attr(e, \"href\"),\n );\n const scored = links\n .map((e) => {\n let url: string;\n try {\n url = new URL(attr(e, \"href\") as string, base).toString().replace(/^http:/, \"https:\");\n } catch {\n return undefined;\n }\n if (!/^https:/.test(url) || DEFAULTS.test(url)) return undefined;\n const rel = (attr(e, \"rel\") ?? \"\").toLowerCase();\n const type = (attr(e, \"type\") ?? \"\").toLowerCase();\n // Safari's pinned-tab mask is monochrome: a last resort.\n if (rel.includes(\"mask-icon\")) return { url, score: 1 };\n const svg = type.includes(\"svg\") || /\\.svg(?:[?#]|$)/i.test(url);\n if (/\\.ico(?:[?#]|$)/i.test(url) || type.includes(\"x-icon\")) return undefined;\n const size = Math.max(\n 0,\n ...(attr(e, \"sizes\") ?? \"\")\n .split(/\\s+/)\n .map((s) => Number(/^(\\d+)x\\d+$/i.exec(s)?.[1] ?? 0)),\n );\n const px = size || (rel.includes(\"apple-touch\") ? 180 : 32);\n return { url, score: svg ? 10_000 : px };\n })\n .filter((x): x is { url: string; score: number } => !!x);\n scored.sort((a, b) => b.score - a.score);\n return scored[0]?.url;\n}\n","/**\n * Images on any site: the best rendition of an `<img>`/`<picture>` (lazy-loading attributes,\n * `srcset` widths, platform CDNs that resize by URL — Wix, Webflow, WordPress, Framer, Shopify),\n * kept at or under the 2400 px long edge where the URL says how big it is, with smaller\n * renditions as fallbacks for the media importer.\n */\nimport { attr, children, type Element, find, isElement } from \"../dom\";\nimport type { SqImage } from \"../types\";\n\nconst MAX = 2400;\n\nexport interface SrcsetEntry {\n url: string;\n /** Width descriptor (`800w`), when given. */\n w?: number;\n /** Density descriptor (`2x`), when given. */\n x?: number;\n}\n\nexport function parseSrcset(srcset: string | undefined): SrcsetEntry[] {\n if (!srcset) return [];\n const out: SrcsetEntry[] = [];\n // URLs may contain commas (Wix `w_980,h_600`): split on \", \" followed by a URL start.\n for (const part of srcset.split(/,\\s+(?=(?:https?:)?\\/\\/|\\/|[a-z0-9])/i)) {\n const [url, desc] = part.trim().split(/\\s+/);\n if (!url) continue;\n const w = /^(\\d+)w$/.exec(desc ?? \"\")?.[1];\n const x = /^([\\d.]+)x$/.exec(desc ?? \"\")?.[1];\n out.push({ url, ...(w ? { w: Number(w) } : {}), ...(x ? { x: Number(x) } : {}) });\n }\n return out;\n}\n\nconst abs = (u: string, base: string): string | undefined => {\n try {\n const url = new URL(u.trim(), base);\n if (!/^https?:$/.test(url.protocol)) return undefined;\n if (url.protocol === \"http:\") url.protocol = \"https:\";\n return url.toString();\n } catch {\n return undefined;\n }\n};\n\n/** Wix: any `…/media/<id>~mv2.jpg/v1/fill/w_980,…/name.jpg` → resized renditions of the original. */\nfunction wixRenditions(url: string): { url: string; alternates: string[] } | undefined {\n const m = /^(https:\\/\\/static\\.wixstatic\\.com\\/media\\/([^/]+?\\.(?:jpe?g|png|webp|gif)))/i.exec(\n url,\n );\n if (!m) return undefined;\n const base = m[1] as string;\n const name = m[2] as string;\n const fit = (w: number) => `${base}/v1/fit/w_${w},h_${w},q_90/${name}`;\n return { url: fit(MAX), alternates: [fit(1600), fit(1000)] };\n}\n\n/** WordPress: `photo-1024x683.jpg` → `photo.jpg` (the original upload). */\nexport function wpOriginal(url: string): string | undefined {\n const m = /^(.*\\/wp-content\\/uploads\\/.+?)-\\d{2,5}x\\d{2,5}(\\.(?:jpe?g|png|webp|gif|avif))$/i.exec(\n url.split(\"?\")[0] ?? \"\",\n );\n return m ? `${m[1]}${m[2]}` : undefined;\n}\n\n/** Shopify: `…/files/x_800x.jpg?v=1` → `…/files/x.jpg?width=2400`. */\nfunction shopifyRenditions(url: string): { url: string; alternates: string[] } | undefined {\n if (!/cdn\\.shopify\\.com|\\/cdn\\/shop\\//.test(url)) return undefined;\n const clean = url.replace(/_(\\d+x\\d*|\\d*x\\d+)(?=\\.[a-z]+(?:\\?|$))/i, \"\");\n const u = new URL(clean);\n const at = (w: number) => {\n const c = new URL(u);\n c.searchParams.set(\"width\", String(w));\n return c.toString();\n };\n return { url: at(MAX), alternates: [at(1600), at(1000)] };\n}\n\n/** Framer: `?scale-down-to=512` → 2400 (and smaller) renditions. */\nfunction framerRenditions(url: string): { url: string; alternates: string[] } | undefined {\n if (!/framerusercontent\\.com\\/images\\//.test(url)) return undefined;\n const u = new URL(url);\n u.search = \"\";\n const at = (w: number) => `${u.toString()}?scale-down-to=${w}`;\n return { url: at(2048), alternates: [at(1024), u.toString()] };\n}\n\n/**\n * Pick the best URL for an image from its candidates: the largest `srcset` width at or under the\n * limit (renditions above it are fallbacks of last resort), then the plain `src`.\n */\nexport function bestRendition(\n src: string | undefined,\n srcset: SrcsetEntry[],\n base: string,\n): { url: string; alternates: string[] } | undefined {\n const all = srcset\n .map((e) => ({ ...e, url: abs(e.url, base) }))\n .filter((e): e is SrcsetEntry & { url: string } => !!e.url);\n const plain = src ? abs(src, base) : undefined;\n const special = (u: string) => wixRenditions(u) ?? shopifyRenditions(u) ?? framerRenditions(u);\n const first = plain ?? all[0]?.url;\n if (first) {\n const s = special(first);\n if (s) return s;\n }\n if (!all.length) {\n if (!plain) return undefined;\n const orig = wpOriginal(plain);\n return orig ? { url: orig, alternates: [plain] } : { url: plain, alternates: [] };\n }\n // The best rendition to store: the smallest one at least as large as the stored size (as sharp\n // as the original once resized), else the largest there is; the WordPress original upload\n // when the renditions stop short of it; smaller ones as fallbacks.\n const sized = all.filter((e) => e.w).sort((a, b) => (b.w ?? 0) - (a.w ?? 0));\n const big = sized.filter((e) => (e.w ?? 0) >= MAX);\n const rest = sized.filter((e) => (e.w ?? 0) < MAX);\n const byDensity = all.filter((e) => e.x).sort((a, b) => (b.x ?? 0) - (a.x ?? 0));\n const wpOrig =\n [...sized, ...byDensity].map((e) => wpOriginal(e.url)).find(Boolean) ??\n (plain ? wpOriginal(plain) : undefined);\n const ordered = [\n ...(big.length ? [(big[big.length - 1] as SrcsetEntry).url] : []),\n ...(!big.length && wpOrig ? [wpOrig] : []),\n ...rest.map((e) => e.url),\n ...byDensity.map((e) => e.url),\n ...(plain ? [plain] : []),\n ...big\n .slice(0, -1)\n .reverse()\n .map((e) => e.url),\n ];\n const unique = [...new Set(ordered)];\n if (!unique.length) return undefined;\n return { url: unique[0] as string, alternates: unique.slice(1, 5) };\n}\n\n/** `object-position: 30% 20%` (or keywords) → a focal point, when it isn't the centre. */\nexport function focalFromObjectPosition(style: string | undefined): [number, number] | undefined {\n const m = /object-position\\s*:\\s*([^;]+)/i.exec(style ?? \"\");\n if (!m) return undefined;\n const KEY: Record<string, number> = { left: 0, top: 0, center: 0.5, right: 1, bottom: 1 };\n const parts = (m[1] as string).trim().split(/\\s+/).slice(0, 2);\n const val = (p: string | undefined) => {\n if (p === undefined) return 0.5;\n if (p in KEY) return KEY[p] as number;\n const pc = /^(-?[\\d.]+)%$/.exec(p);\n return pc ? Math.min(1, Math.max(0, Number(pc[1]) / 100)) : undefined;\n };\n let [a, b] = parts;\n // `top left` → x from the horizontal keyword.\n if ((a === \"top\" || a === \"bottom\") && (b === \"left\" || b === \"right\" || b === \"center\"))\n [a, b] = [b, a];\n const x = val(a);\n const y = val(b);\n if (x === undefined || y === undefined) return undefined;\n if (Math.abs(x - 0.5) < 0.01 && Math.abs(y - 0.5) < 0.01) return undefined;\n return [Math.round(x * 1000) / 1000, Math.round(y * 1000) / 1000];\n}\n\nconst LAZY_SRC = [\n \"data-src\",\n \"data-lazy-src\",\n \"data-original\",\n \"data-orig-src\",\n \"data-image\",\n \"src\",\n];\nconst LAZY_SRCSET = [\"data-srcset\", \"data-lazy-srcset\", \"srcset\"];\n\nconst isPlaceholder = (u: string | undefined) =>\n !u ||\n u.startsWith(\"data:\") ||\n /(?:^|\\/)(?:blank|spacer|pixel|transparent|placeholder|lazy)\\.(?:gif|png|svg)/i.test(u) ||\n /\\.svg(?:\\?|#|$)/i.test(u);\n\n/** Is this an icon / tracking pixel rather than content? */\nexport function isDecorative(img: Element): boolean {\n const w = Number(attr(img, \"width\"));\n const h = Number(attr(img, \"height\"));\n if ((w && w < 48) || (h && h < 48)) return true;\n if (attr(img, \"role\") === \"presentation\" && !attr(img, \"alt\")) return true;\n if (attr(img, \"aria-hidden\") === \"true\") return true;\n const src = attr(img, \"src\") ?? \"\";\n return /facebook\\.com\\/tr|google-analytics|doubleclick|pixel\\.|\\/emoji\\//i.test(src);\n}\n\n/** The image an `<img>` (or a `<picture>`/`<figure>` holding one) shows. */\nexport function imageFromImg(el: Element, base: string): SqImage | undefined {\n const img = el.tagName === \"img\" ? el : find(el, (e) => e.tagName === \"img\");\n if (!img) return undefined;\n let src: string | undefined;\n for (const a of LAZY_SRC) {\n const v = attr(img, a);\n if (v && !isPlaceholder(v)) {\n src = v;\n break;\n }\n }\n let srcset: SrcsetEntry[] = [];\n for (const a of LAZY_SRCSET) {\n const v = parseSrcset(attr(img, a)).filter((e) => !isPlaceholder(e.url));\n if (v.length) {\n srcset = v;\n break;\n }\n }\n // <picture><source srcset> renditions.\n const up = img.parentNode as Element | null;\n const picture =\n el.tagName === \"picture\"\n ? el\n : up && isElement(up) && up.tagName === \"picture\"\n ? up\n : undefined;\n if (picture) {\n // Every <source> (art-directed or per format): the largest candidates win.\n const sources = children(picture).filter((e) => e.tagName === \"source\");\n for (const source of sources) {\n if (/svg/i.test(attr(source, \"type\") ?? \"\")) continue;\n srcset.push(\n ...parseSrcset(attr(source, \"srcset\") ?? attr(source, \"data-srcset\")).filter(\n (e) => !isPlaceholder(e.url),\n ),\n );\n }\n }\n if (!src && !srcset.length) return undefined;\n const best = bestRendition(src, srcset, base);\n if (!best) return undefined;\n const w = Number(attr(img, \"width\"));\n const h = Number(attr(img, \"height\"));\n const focal = focalFromObjectPosition(attr(img, \"style\"));\n return {\n url: best.url,\n alt: (attr(img, \"alt\") ?? \"\").replace(/\\s+/g, \" \").trim(),\n ...(w > 0 && h > 0 ? { width: w, height: h } : {}),\n ...(best.alternates.length ? { alternates: best.alternates } : {}),\n ...(focal ? { focal } : {}),\n };\n}\n\n/** `background-image: url(...)` in an inline style. */\nexport function backgroundImageOf(el: Element, base: string): SqImage | undefined {\n const style = attr(el, \"style\") ?? \"\";\n const m = /background(?:-image)?\\s*:[^;]*url\\(\\s*['\"]?([^'\")]+)['\"]?\\s*\\)/i.exec(style);\n const bgset = parseSrcset(attr(el, \"data-bgset\")).sort((a, b) => (b.w ?? 0) - (a.w ?? 0))[0]?.url;\n const raw =\n m?.[1] ??\n attr(el, \"data-bg\") ??\n attr(el, \"data-background-image\") ??\n attr(el, \"data-bg-src\") ??\n attr(el, \"data-background\") ??\n bgset;\n if (!raw || isPlaceholder(raw)) return undefined;\n const best = bestRendition(raw, [], base);\n const pos = /background-position\\s*:\\s*([^;]+)/i.exec(style)?.[1];\n const focal = pos ? focalFromObjectPosition(`object-position:${pos}`) : undefined;\n return best\n ? {\n url: best.url,\n alt: \"\",\n ...(best.alternates.length ? { alternates: best.alternates } : {}),\n ...(focal ? { focal } : {}),\n }\n : undefined;\n}\n","/**\n * Read any web page into the source model, without a browser: the head (title, description,\n * Open Graph, JSON-LD, robots, generator), the site chrome (header navigation with folders, logo,\n * call-to-action button, footer, social links) and the main content, readability-style — the\n * boilerplate (cookie banners, menus, sidebars, hidden elements) is dropped, the rest is split into\n * sections, rows and columns, and every element becomes the closest source block: text (headings,\n * paragraphs, lists), images, galleries, cards, buttons, forms, quotes and testimonials, tables,\n * videos, maps and embeds. Sections get a role (hero, features, gallery, testimonials, CTA,\n * contact) so the mapper can recreate them with the nearest OpenSpace section preset.\n *\n * Platform hints (Wix's `#SITE_HEADER`, Webflow's `w-` classes, WordPress's `wp-block-*`) only\n * help find things; nothing here depends on them.\n */\nimport {\n attr,\n children,\n classes,\n type Element,\n find,\n findAll,\n innerHtml,\n isElement,\n type Node,\n outerHtml,\n parseDocument,\n parseHtmlFragment,\n scriptText,\n text,\n} from \"../dom\";\nimport { stripTags, videoUrl } from \"../squarespace/blocks\";\nimport { cssColorToHex } from \"../squarespace/theme\";\nimport type {\n SectionRole,\n SqBlock,\n SqCard,\n SqForm,\n SqFormField,\n SqFormFieldType,\n SqImage,\n SqNavItem,\n SqRow,\n SqSection,\n SqSeo,\n} from \"../types\";\nimport { bestIcon } from \"./icons\";\nimport { backgroundImageOf, imageFromImg, isDecorative } from \"./image\";\n\nexport interface HtmlArticle {\n date?: string;\n modified?: string;\n author?: string;\n image?: SqImage;\n tags: string[];\n categories: string[];\n excerpt?: string;\n}\n\nexport interface HtmlPage {\n url: string;\n /** Site path (`/about`, `/`). */\n path: string;\n /** The page's own title (its Heading 1, else the document title without the site name). */\n title: string;\n /** `<title>`. */\n docTitle: string;\n seo: SqSeo;\n lang?: string;\n generator?: string;\n favicon?: string;\n /** `og:site_name` or the JSON-LD WebSite/Organization name. */\n siteName?: string;\n header: {\n nav: SqNavItem[];\n logo?: SqImage;\n siteTitle?: string;\n action?: { label: string; href: string };\n /** The header sits on top of the first section (transparent over a hero). */\n overlay?: boolean;\n sticky?: boolean;\n };\n footer: SqSection[];\n social: string[];\n sections: SqSection[];\n inlineCss: string;\n stylesheets: string[];\n /** Third-party scripts (analytics, chat widgets…): reported, never copied. */\n scripts: string[];\n /** Same-site links on the page (for crawling). */\n links: string[];\n article?: HtmlArticle;\n bodyClasses: string[];\n /** JSON-LD objects on the page. */\n jsonLd: Record<string, unknown>[];\n /** Approximate amount of readable text in the main content (detects script-built pages). */\n textLength: number;\n}\n\nexport interface ExtractOptions {\n /** Classes the site's CSS hides on desktop (see `hiddenClassesFromCss`). */\n hiddenClasses?: ReadonlySet<string>;\n /** A known content root (WordPress `entry-content`, a REST body) instead of detection. */\n contentRoot?: Element;\n /** Skip the page's first Heading 1 (it becomes the item title). */\n dropTitle?: boolean;\n}\n\n// --- small helpers ---------------------------------------------------------------------------------\n\nconst clean = (s: string) => s.replace(/\\s+/g, \" \").trim();\nconst idClass = (el: Element) => `${attr(el, \"id\") ?? \"\"} ${classes(el).join(\" \")}`;\nconst has = (el: Element, re: RegExp) => re.test(idClass(el));\n\nconst HEADINGS = new Set([\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"]);\nconst TEXT_TAGS = new Set([\n \"p\",\n \"h1\",\n \"h2\",\n \"h3\",\n \"h4\",\n \"h5\",\n \"h6\",\n \"ul\",\n \"ol\",\n \"pre\",\n \"dl\",\n \"address\",\n]);\nconst SKIP_TAGS = new Set([\n \"script\",\n \"style\",\n \"noscript\",\n \"template\",\n \"svg\",\n \"link\",\n \"meta\",\n \"head\",\n \"button\",\n \"input\",\n \"select\",\n \"textarea\",\n \"label\",\n \"dialog\",\n \"canvas\",\n \"object\",\n]);\nconst INLINE_TAGS = new Set([\n \"a\",\n \"span\",\n \"strong\",\n \"b\",\n \"em\",\n \"i\",\n \"u\",\n \"small\",\n \"sup\",\n \"sub\",\n \"br\",\n \"mark\",\n \"code\",\n \"abbr\",\n \"time\",\n \"s\",\n \"del\",\n \"ins\",\n \"cite\",\n \"q\",\n \"font\",\n \"wbr\",\n]);\nconst BOILERPLATE =\n /(?:^|[\\s_-])(?:cookie|consent|gdpr|cc-window|popup|modal|skip-link|skip-to|screen-reader|sr-only|visually-hidden|visuallyhidden|w-nav-overlay|mobile-menu|menu-overlay|offcanvas|breadcrumbs?|pagination|nav-links|post-navigation|comments?-area|comment-respond|share-buttons|sharedaddy|jp-relatedposts|wp-block-navigation|search-form|searchform|announcement-bar|back-to-top|wixui-anchor-menu|elementor-hidden|w-form-done|w-form-fail|w-webflow-badge)(?:$|[\\s_-])/i;\n\n/** Classes the site's CSS hides on desktop (responsive duplicates such as `hide-desktop`). */\nlet hiddenClasses: ReadonlySet<string> = new Set();\n\n/**\n * Classes hidden at desktop widths: `display:none` in rules outside media queries or inside\n * `min-width` ones (mobile-only copies of headings and menus).\n */\nexport function hiddenClassesFromCss(css: string): Set<string> {\n const out = new Set<string>();\n const shown = new Set<string>();\n const scan = (chunk: string, desktop: boolean) => {\n for (const m of chunk.matchAll(/([^{}@]+)\\{([^{}]*)\\}/g)) {\n const body = (m[2] as string).replace(/\\s+/g, \"\");\n const display = /display:([a-z-]+)/i.exec(body)?.[1];\n if (!display) continue;\n for (const sel of (m[1] as string).split(\",\")) {\n const cls = /^\\s*\\.([A-Za-z_][\\w-]*)\\s*$/.exec(sel)?.[1];\n if (!cls) continue;\n if (display === \"none\" && desktop) out.add(cls);\n else if (display !== \"none\" && desktop) shown.add(cls);\n }\n }\n };\n const stripped = css.replace(/\\/\\*[\\s\\S]*?\\*\\//g, \"\");\n // Top level (outside at-rules) and @media blocks, brace-aware.\n let depth = 0;\n let top = \"\";\n let i = 0;\n while (i < stripped.length) {\n if (stripped.startsWith(\"@media\", i) && depth === 0) {\n const open = stripped.indexOf(\"{\", i);\n if (open < 0) break;\n const cond = stripped.slice(i, open);\n let d = 1;\n let j = open + 1;\n while (j < stripped.length && d > 0) {\n if (stripped[j] === \"{\") d++;\n else if (stripped[j] === \"}\") d--;\n j++;\n }\n const desktop =\n /min-width\\s*:\\s*(\\d+)/.test(cond) &&\n Number(/min-width\\s*:\\s*(\\d+)/.exec(cond)?.[1]) <= 1280 &&\n !/max-width/.test(cond);\n if (desktop) scan(stripped.slice(open + 1, j - 1), true);\n i = j;\n continue;\n }\n const ch = stripped[i] as string;\n if (ch === \"{\") depth++;\n if (ch === \"}\") depth = Math.max(0, depth - 1);\n top += ch;\n i++;\n }\n scan(top, true);\n for (const c of shown) if (!out.has(c)) shown.delete(c);\n // Toggled states (menus, dropdowns) are not \"hidden copies\".\n for (const c of out)\n if (\n /open|active|current|show|visible|w--|dropdown|nav|menu|modal|tab-pane|faq|accordion|answer|collapse/i.test(\n c,\n )\n )\n out.delete(c);\n return out;\n}\n\n/** Not shown (hidden attribute, `display:none`, aria-hidden decoration). */\nfunction invisible(el: Element): boolean {\n if (attr(el, \"hidden\") !== undefined) return true;\n if (attr(el, \"aria-hidden\") === \"true\" && !find(el, (e) => e.tagName === \"img\")) return true;\n const style = (attr(el, \"style\") ?? \"\").replace(/\\s+/g, \"\");\n if (/display:none|visibility:hidden/i.test(style)) return true;\n if (hiddenClasses.size && classes(el).some((c) => hiddenClasses.has(c))) return true;\n return false;\n}\n\n/** Not content: invisible, or boilerplate (cookie banners, menus, sharing, comments…). */\nfunction hidden(el: Element): boolean {\n return invisible(el) || BOILERPLATE.test(idClass(el));\n}\n\nconst LATEST_POSTS = /(?:^|\\s)wp-block-latest-posts(?:\\s|$)/;\n\n/** Children that carry content (text, media or a form). */\nfunction contentChildren(el: Element): Element[] {\n return children(el).filter((c) => !SKIP_TAGS.has(c.tagName) && !hidden(c) && hasContent(c));\n}\n\nfunction hasContent(el: Element): boolean {\n if (LATEST_POSTS.test(classes(el).join(\" \"))) return true;\n if (\n el.tagName === \"img\" ||\n el.tagName === \"iframe\" ||\n el.tagName === \"video\" ||\n el.tagName === \"hr\"\n )\n return true;\n if (el.tagName === \"form\") return true;\n if (text(el)) return true;\n return (\n !!find(\n el,\n (e) =>\n (e.tagName === \"img\" && !isDecorative(e)) ||\n e.tagName === \"iframe\" ||\n e.tagName === \"video\" ||\n e.tagName === \"form\" ||\n !!backgroundImageOf(e, \"https://x.invalid/\"),\n ) || !!backgroundImageOf(el, \"https://x.invalid/\")\n );\n}\n\n/** Direct text (not inside child elements). */\nfunction ownText(el: Element): string {\n return clean(\n el.childNodes\n .filter((n) => n.nodeName === \"#text\")\n .map((n) => (n as { value?: string }).value ?? \"\")\n .join(\" \"),\n );\n}\n\nfunction hasBlockChild(el: Element): boolean {\n return children(el).some(\n (c) => !INLINE_TAGS.has(c.tagName) && !SKIP_TAGS.has(c.tagName) && !hidden(c),\n );\n}\n\n/** Media or interactive content inside (not plain text). */\nconst hasMedia = (el: Element) =>\n !!find(el, (e) =>\n [\"img\", \"picture\", \"iframe\", \"video\", \"form\", \"table\", \"audio\"].includes(e.tagName),\n );\n\n/** Same-site test. */\nexport function sameSite(u: URL, base: string): boolean {\n const b = new URL(base);\n return u.host.replace(/^www\\./, \"\") === b.host.replace(/^www\\./, \"\");\n}\n\n/** Normalize an href to a site path, or undefined when it leaves the site. */\nexport function sitePath(href: string, base: string): string | undefined {\n try {\n const u = new URL(href, base);\n if (!/^https?:$/.test(u.protocol) || !sameSite(u, base)) return undefined;\n let p = u.pathname;\n try {\n p = decodeURI(p);\n } catch {\n // keep encoded\n }\n return p.replace(/\\/index\\.html?$/i, \"/\").replace(/\\/+$/, \"\") || \"/\";\n } catch {\n return undefined;\n }\n}\n\n// --- buttons, forms, embeds -------------------------------------------------------------------------\n\nconst BUTTON_CLASS =\n /(?:^|[\\s_-])(?:btn|button|cta|w-button|wp-block-button__link|wp-element-button|elementor-button|wixui-button|framer-button|sqs-block-button-element)(?:$|[\\s_-])/i;\n\nexport function isButtonLink(a: Element): boolean {\n if (a.tagName !== \"a\" || !attr(a, \"href\")) return false;\n const label = text(a);\n if (!label || label.length > 40) return false;\n return (\n BUTTON_CLASS.test(classes(a).join(\" \")) ||\n attr(a, \"role\") === \"button\" ||\n (a.parentNode && isElement(a.parentNode as Node)\n ? BUTTON_CLASS.test(classes(a.parentNode as Element).join(\" \")) &&\n text(a.parentNode as Element) === label\n : false)\n );\n}\n\nconst SEARCHY = /search|\\bs\\b|\\bq\\b/i;\n\nfunction fieldLabel(form: Element, input: Element): string {\n const id = attr(input, \"id\");\n if (id) {\n const lab = find(form, (e) => e.tagName === \"label\" && attr(e, \"for\") === id);\n if (lab && text(lab)) return text(lab).replace(/\\s*\\*$/, \"\");\n }\n let p = input.parentNode as Node | null;\n for (let i = 0; p && isElement(p) && i < 3; i++, p = p.parentNode as Node | null)\n if ((p as Element).tagName === \"label\") {\n const t = text(p as Element);\n if (t) return t.replace(/\\s*\\*$/, \"\");\n }\n return (\n attr(input, \"aria-label\") ??\n attr(input, \"placeholder\") ??\n attr(input, \"title\") ??\n (attr(input, \"name\") ?? \"\").replace(/[_\\-[\\]]+/g, \" \").trim()\n );\n}\n\nconst INPUT_TYPES: Record<string, SqFormFieldType> = {\n text: \"text\",\n email: \"email\",\n tel: \"phone\",\n url: \"website\",\n number: \"number\",\n date: \"date\",\n \"datetime-local\": \"date\",\n time: \"time\",\n file: \"file\",\n checkbox: \"checkbox\",\n radio: \"radio\",\n};\n\n/** A form's fields, or undefined for search/login forms. */\nexport function formFromHtml(form: Element): SqForm | \"newsletter\" | undefined {\n if (attr(form, \"role\") === \"search\" || /search/i.test(attr(form, \"action\") ?? \"\"))\n return undefined;\n const inputs = findAll(form, (e) => [\"input\", \"select\", \"textarea\"].includes(e.tagName)).filter(\n (e) => {\n const t = (attr(e, \"type\") ?? \"text\").toLowerCase();\n if ([\"hidden\", \"submit\", \"button\", \"image\", \"reset\"].includes(t)) return false;\n if (attr(e, \"tabindex\") === \"-1\" || /honeypot|hp_|_hp|ak_hp/i.test(idClass(e))) return false;\n let p = e.parentNode as Node | null;\n for (let i = 0; p && isElement(p) && i < 4; i++, p = p.parentNode as Node | null)\n if (hidden(p as Element)) return false;\n return true;\n },\n );\n if (!inputs.length) return undefined;\n if (inputs.some((e) => (attr(e, \"type\") ?? \"\").toLowerCase() === \"password\")) return undefined;\n const only = inputs.length === 1 ? (inputs[0] as Element) : undefined;\n if (\n only &&\n (attr(only, \"type\") === \"search\" ||\n (SEARCHY.test(attr(only, \"name\") ?? \"\") && !/mail/i.test(attr(only, \"name\") ?? \"\")))\n )\n return undefined;\n if (\n inputs.length <= 2 &&\n inputs.some((e) => attr(e, \"type\") === \"email\" || /mail/i.test(attr(e, \"name\") ?? \"\")) &&\n inputs.every((e) => attr(e, \"type\") === \"email\" || /mail|name/i.test(attr(e, \"name\") ?? \"\"))\n )\n return \"newsletter\";\n const fields: SqFormField[] = [];\n const groups = new Map<string, SqFormField>();\n for (const e of inputs) {\n const t = e.tagName === \"input\" ? (attr(e, \"type\") ?? \"text\").toLowerCase() : e.tagName;\n const required = attr(e, \"required\") !== undefined || attr(e, \"aria-required\") === \"true\";\n if (t === \"radio\" || t === \"checkbox\") {\n const name = attr(e, \"name\") ?? fieldLabel(form, e);\n const option = fieldLabel(form, e) || attr(e, \"value\") || \"Yes\";\n const g = groups.get(name);\n if (g) {\n g.options = [...(g.options ?? []), option];\n if (t === \"radio\") g.type = \"radio\";\n continue;\n }\n // Group label: the fieldset legend, else the option itself (a single checkbox).\n let legend: string | undefined;\n let p = e.parentNode as Node | null;\n for (let i = 0; p && isElement(p) && i < 5; i++, p = p.parentNode as Node | null)\n if ((p as Element).tagName === \"fieldset\") {\n legend = text(find(p as Element, (x) => x.tagName === \"legend\"));\n break;\n }\n const f: SqFormField = {\n type: t === \"radio\" ? \"radio\" : \"checkbox\",\n label: legend || option,\n required,\n ...(legend ? { options: [option] } : {}),\n };\n groups.set(name, f);\n fields.push(f);\n continue;\n }\n const label = fieldLabel(form, e) || \"Field\";\n let type: SqFormFieldType =\n e.tagName === \"textarea\"\n ? \"textarea\"\n : e.tagName === \"select\"\n ? \"select\"\n : (INPUT_TYPES[t] ?? \"text\");\n if (type === \"text\" && /\\bname\\b/i.test(label) && !/company|business/i.test(label))\n type = \"name\";\n if (type === \"text\" && /e-?mail/i.test(label)) type = \"email\";\n if (type === \"text\" && /phone|tel/i.test(label)) type = \"phone\";\n const options =\n e.tagName === \"select\"\n ? findAll(e, (o) => o.tagName === \"option\")\n .filter((o) => attr(o, \"value\") !== \"\" && !attr(o, \"disabled\"))\n .map((o) => text(o))\n .filter(Boolean)\n : undefined;\n fields.push({\n type,\n label,\n required,\n ...(attr(e, \"placeholder\") && attr(e, \"placeholder\") !== label\n ? { placeholder: attr(e, \"placeholder\") }\n : {}),\n ...(options?.length ? { options } : {}),\n ...(type === \"text\" && t !== \"text\" && !INPUT_TYPES[t] ? { rawType: t } : {}),\n });\n }\n const submit =\n find(form, (e) => e.tagName === \"button\" && (attr(e, \"type\") ?? \"submit\") === \"submit\") ??\n find(form, (e) => e.tagName === \"input\" && attr(e, \"type\") === \"submit\");\n const submitLabel = submit ? text(submit) || attr(submit, \"value\") : undefined;\n const name =\n attr(form, \"aria-label\") ??\n attr(form, \"name\") ??\n (attr(form, \"id\") && !/^\\w+-\\d+$/.test(attr(form, \"id\") ?? \"\")\n ? attr(form, \"id\")\n : undefined) ??\n \"Contact form\";\n return {\n name: clean(name.replace(/[-_]+/g, \" \")) || \"Contact form\",\n fields,\n ...(submitLabel ? { submitLabel: clean(submitLabel) } : {}),\n };\n}\n\n/** Google Maps embed → coordinates. */\nfunction mapFromIframe(src: string): SqBlock | undefined {\n if (!/google\\.[a-z.]+\\/maps|maps\\.google\\./.test(src)) return undefined;\n const pb = /!2d(-?[\\d.]+)!3d(-?[\\d.]+)/.exec(src);\n const q = /[?&](?:q|ll|center)=(-?[\\d.]+),\\s*(-?[\\d.]+)/.exec(decodeURIComponent(src));\n const lat = pb ? Number(pb[2]) : q ? Number(q[1]) : Number.NaN;\n const lng = pb ? Number(pb[1]) : q ? Number(q[2]) : Number.NaN;\n const place = /[?&]q=([^&]+)/.exec(src)?.[1];\n let name: string | undefined;\n try {\n name = place ? decodeURIComponent(place.replace(/\\+/g, \" \")) : undefined;\n } catch {\n name = undefined;\n }\n if (Number.isFinite(lat) && Number.isFinite(lng) && Math.abs(lat) <= 90 && Math.abs(lng) <= 180)\n return {\n kind: \"map\",\n lat,\n lng,\n ...(name && !/^-?[\\d.]+,/.test(name) ? { address: name } : {}),\n };\n return undefined;\n}\n\nfunction iframeBlock(iframe: Element, base: string): SqBlock | undefined {\n const src =\n attr(iframe, \"src\") ?? attr(iframe, \"data-src\") ?? attr(iframe, \"data-lazy-src\") ?? \"\";\n if (!src || src === \"about:blank\") return undefined;\n const v = videoUrl(src);\n if (v)\n return {\n kind: \"video\",\n url: v,\n ...(attr(iframe, \"title\") ? { title: attr(iframe, \"title\") } : {}),\n };\n const map = mapFromIframe(src);\n if (map) return map;\n try {\n const u = new URL(src, base);\n if (u.protocol !== \"https:\") return undefined;\n return { kind: \"embed\", url: u.toString() };\n } catch {\n return undefined;\n }\n}\n\n// --- testimonials, cards, galleries ---------------------------------------------------------------\n\nconst TESTIMONIAL = /testimonial|review|kundenstimme|t[ée]moignage|quote-card|client-quote/i;\n\nfunction testimonialFrom(el: Element, base: string): SqBlock | undefined {\n const t = text(el);\n if (!t || t.length > 900) return undefined;\n const bq = el.tagName === \"blockquote\" ? el : find(el, (e) => e.tagName === \"blockquote\");\n const cite =\n find(el, (e) => e.tagName === \"cite\" || e.tagName === \"figcaption\") ??\n find(\n el,\n (e) =>\n /author|name|cite|attribution|client/i.test(idClass(e)) && !!text(e) && text(e).length < 80,\n );\n const paras = findAll(bq ?? el, (e) => e.tagName === \"p\" && !!text(e)).filter(\n (p) =>\n !cite || (p !== cite && !findAll(cite, () => true).includes(p) && text(p) !== text(cite)),\n );\n const quoteHtml = paras.length\n ? paras.map((p) => outerHtml(p)).join(\"\")\n : `<p>${escapeHtml(\n text(bq ?? el)\n .replace(cite ? text(cite) : \"\", \"\")\n .trim(),\n )}</p>`;\n if (!stripTags(quoteHtml)) return undefined;\n let name = cite ? text(cite).replace(/^[—–-]\\s*/, \"\") : undefined;\n let role: string | undefined;\n if (name?.includes(\",\")) {\n const [n, ...r] = name.split(\",\");\n name = n?.trim();\n role = r.join(\",\").trim() || undefined;\n }\n const photoEl = find(el, (e) => e.tagName === \"img\" && !isDecorative(e));\n const photo = photoEl ? imageFromImg(photoEl, base) : undefined;\n return {\n kind: \"testimonial\",\n html: quoteHtml,\n ...(name ? { name: name.slice(0, 80) } : {}),\n ...(role ? { role } : {}),\n ...(photo ? { photo } : {}),\n };\n}\n\nconst signature = (el: Element) => `${el.tagName}.${classes(el)[0] ?? \"\"}`;\n\nfunction similarChildren(el: Element, min: number): Element[] | undefined {\n const kids = contentChildren(el);\n if (kids.length < min) return undefined;\n const counts = new Map<string, number>();\n for (const k of kids) counts.set(signature(k), (counts.get(signature(k)) ?? 0) + 1);\n const top = Math.max(...counts.values());\n return top / kids.length >= 0.7 ? kids : undefined;\n}\n\nfunction cardFrom(el: Element, base: string): SqCard | undefined {\n const h =\n find(el, (e) => HEADINGS.has(e.tagName) && !!text(e)) ??\n find(el, (e) => (e.tagName === \"strong\" || e.tagName === \"b\") && !!text(e));\n if (!h) return undefined;\n const title = text(h);\n if (title.length > 120) return undefined;\n const imgEl = find(el, (e) => e.tagName === \"img\" && !isDecorative(e));\n const image = imgEl ? imageFromImg(imgEl, base) : backgroundImageOf(el, base);\n const paras = findAll(\n el,\n (e) =>\n (e.tagName === \"p\" || e.tagName === \"ul\" || e.tagName === \"ol\") &&\n !!text(e) &&\n !find(e, (x) => x === h),\n ).filter((p) => !findAll(p, () => true).includes(h));\n const linkEl =\n el.tagName === \"a\"\n ? el\n : (find(el, (e) => e.tagName === \"a\" && !!attr(e, \"href\") && isButtonLink(e)) ??\n find(h, (e) => e.tagName === \"a\"));\n const href = linkEl ? attr(linkEl, \"href\") : undefined;\n const label = linkEl && linkEl !== el && isButtonLink(linkEl) ? text(linkEl) : undefined;\n const html = paras\n .filter((p) => !(label && text(p) === label))\n .map((p) => outerHtml(p))\n .join(\"\");\n return {\n title,\n ...(html ? { html } : {}),\n ...(image ? { image } : {}),\n ...(href && !href.startsWith(\"#\") ? { href } : {}),\n ...(label ? { linkLabel: label } : {}),\n };\n}\n\n/** A grid of 3+ similar cards (heading + short text, often an image or link each). */\nfunction cardGrid(el: Element, base: string): SqBlock | undefined {\n const kids = similarChildren(el, 3);\n if (!kids || kids.length > 48) return undefined;\n if (\n kids.some(\n (k) => HEADINGS.has(k.tagName) || k.tagName === \"p\" || find(k, (e) => e.tagName === \"form\"),\n )\n )\n return undefined;\n const cards: SqCard[] = [];\n for (const k of kids) {\n if (text(k).length > 700) return undefined;\n const c = cardFrom(k, base);\n if (!c) return undefined;\n cards.push(c);\n }\n return { kind: \"cards\", items: cards };\n}\n\n/** 3+ children that are each essentially a picture. */\nfunction galleryGrid(el: Element, base: string): SqBlock | undefined {\n const kids = contentChildren(el);\n const isWpGallery = classes(el).includes(\"wp-block-gallery\") || has(el, /\\bgallery\\b/);\n if (kids.length < (isWpGallery ? 2 : 3)) return undefined;\n const images: (SqImage & { caption?: string; href?: string })[] = [];\n for (const k of kids) {\n const imgs = findAll(k, (e) => e.tagName === \"img\" && !isDecorative(e));\n const selfImg = k.tagName === \"img\" ? [k] : imgs;\n if (selfImg.length !== 1) return undefined;\n const cap = text(find(k, (e) => e.tagName === \"figcaption\"));\n if (text(k).length - cap.length > 60) return undefined;\n const im = imageFromImg(selfImg[0] as Element, base);\n if (!im) return undefined;\n const a = k.tagName === \"a\" ? k : find(k, (e) => e.tagName === \"a\");\n const href = a ? attr(a, \"href\") : undefined;\n images.push({\n ...im,\n ...(cap ? { caption: cap } : {}),\n ...(href && !/\\.(?:jpe?g|png|webp|gif|avif)(?:\\?|$)/i.test(href) ? { href } : {}),\n });\n }\n return {\n kind: \"gallery\",\n images,\n layout: has(el, /masonry/)\n ? \"masonry\"\n : has(el, /slider|slideshow|carousel|swiper|slick/)\n ? \"slideshow\"\n : \"grid\",\n };\n}\n\n/** FAQ-style lists: `<details>`, or similar items with a short question and an answer. */\nfunction accordionFrom(el: Element): SqBlock | undefined {\n const meaningful = children(el).filter((c) => !SKIP_TAGS.has(c.tagName) && text(c));\n const details = meaningful.filter((c) => c.tagName === \"details\");\n const kids =\n details.length >= 2 && details.length === meaningful.length\n ? details\n : /faq|accordion|question|toggle|collapsible/i.test(idClass(el))\n ? children(el).filter((c) => !SKIP_TAGS.has(c.tagName) && text(c))\n : [];\n if (kids.length < 2) return undefined;\n const items: { title: string; html: string }[] = [];\n for (const k of kids) {\n const q =\n find(k, (e) => e.tagName === \"summary\") ??\n find(\n k,\n (e) => HEADINGS.has(e.tagName) || /question|title|heading|toggle|trigger/i.test(idClass(e)),\n );\n if (!q || !text(q) || text(q).length > 200) return undefined;\n const answerText = text(k).replace(text(q), \"\").trim();\n if (!answerText) return undefined;\n const paras = findAll(\n k,\n (e) =>\n (e.tagName === \"p\" || e.tagName === \"ul\" || e.tagName === \"ol\") &&\n !findAll(q, () => true).includes(e) &&\n e !== q,\n );\n items.push({\n title: text(q),\n html: paras.length\n ? paras.map((p) => outerHtml(p)).join(\"\")\n : `<p>${escapeHtml(answerText)}</p>`,\n });\n }\n return items.length >= 2 ? { kind: \"accordion\", items } : undefined;\n}\n\n// --- columns ------------------------------------------------------------------------------------------\n\nconst ROW_HINT =\n /(?:^|[\\s_-])(?:row|columns?|cols?|grid|split|two-up|halves|w-row|w-layout-grid|w-layout-hflex|wp-block-columns|wp-block-media-text|is-layout-flex|is-layout-grid|flex|container-split|stripColumnsContainer|wixui-column-strip|elementor-row|elementor-container|et_pb_row|vc_row)(?:$|[\\s_-])/i;\n\nfunction spanHint(el: Element, n: number): number {\n const c = classes(el).join(\" \");\n const m =\n /(?:w-col|col)-(?:(?:xs|sm|md|lg|xl|medium|small|large)-)?(\\d{1,2})\\b/.exec(c) ??\n /(?:large|medium)-(\\d{1,2})\\b/.exec(c);\n if (m && Number(m[1]) >= 1 && Number(m[1]) <= 12) return Number(m[1]);\n const basis = /flex-basis\\s*:\\s*([\\d.]+)%|width\\s*:\\s*([\\d.]+)%/.exec(attr(el, \"style\") ?? \"\");\n const pct = basis ? Number(basis[1] ?? basis[2]) : Number.NaN;\n if (pct > 5 && pct <= 100) return Math.max(1, Math.round((pct / 100) * 12));\n return Math.round(12 / n);\n}\n\n/** 2–4 side-by-side children with real content each. */\nfunction isColumnRow(el: Element): boolean {\n const kids = contentChildren(el);\n if (kids.length < 2 || kids.length > 4) return false;\n if (\n kids.some((k) => TEXT_TAGS.has(k.tagName) || INLINE_TAGS.has(k.tagName) || k.tagName === \"img\")\n )\n return false;\n if (kids.every((k) => TESTIMONIAL.test(idClass(k)))) return false;\n const substantial = kids.filter((k) => text(k).length >= 30 || hasMedia(k));\n if (substantial.length !== kids.length) return false;\n const style = (attr(el, \"style\") ?? \"\").replace(/\\s+/g, \"\");\n return (\n ROW_HINT.test(idClass(el)) ||\n /display:(?:flex|grid)/.test(style) ||\n attr(el, \"data-testid\") === \"columns\" ||\n kids.every((k) => /(?:^|[\\s_-])(?:col|column|w-col|wp-block-column|cell)/i.test(idClass(k)))\n );\n}\n\n// --- the walker ----------------------------------------------------------------------------------------\n\ninterface WalkCtx {\n base: string;\n /** Old path of the posts collection (WordPress \"latest posts\" blocks list it). */\n postsPath?: string;\n /** Drop this element (the item's Heading 1). */\n drop?: Element;\n}\n\nconst escapeHtml = (s: string) =>\n s.replace(/&/g, \"&\").replace(/</g, \"<\").replace(/>/g, \">\");\n\n/** Blocks for a leaf-ish element. `out` collects; consecutive text merges. */\nfunction leafBlocks(el: Element, ctx: WalkCtx, out: SqBlock[]) {\n const pushText = (html: string) => {\n const last = out[out.length - 1];\n if (last?.kind === \"text\") last.html += html;\n else out.push({ kind: \"text\", html });\n };\n const tag = el.tagName;\n if (el === ctx.drop) return;\n if (\n /^icon[-_][\\w-]+$/i.test(text(el)) ||\n /material-icons|material-symbols/.test(classes(el).join(\" \"))\n )\n return;\n const acc = accordionFrom(el);\n if (acc) {\n out.push(acc);\n return;\n }\n if (LATEST_POSTS.test(classes(el).join(\" \"))) {\n out.push({ kind: \"summary\", ...(ctx.postsPath ? { collectionPath: ctx.postsPath } : {}) });\n return;\n }\n if (tag === \"hr\") {\n out.push({ kind: \"line\" });\n return;\n }\n if (tag === \"form\") {\n const f = formFromHtml(el);\n if (f === \"newsletter\") {\n const btn = find(\n el,\n (e) => e.tagName === \"button\" || (e.tagName === \"input\" && attr(e, \"type\") === \"submit\"),\n );\n const input = find(\n el,\n (e) =>\n e.tagName === \"input\" &&\n (attr(e, \"type\") === \"email\" || /mail/i.test(attr(e, \"name\") ?? \"\")),\n );\n out.push({\n kind: \"newsletter\",\n ...(btn && (text(btn) || attr(btn, \"value\"))\n ? { buttonLabel: text(btn) || attr(btn, \"value\") }\n : {}),\n ...(input && attr(input, \"placeholder\") ? { placeholder: attr(input, \"placeholder\") } : {}),\n });\n } else if (f) out.push({ kind: \"form\", form: f });\n return;\n }\n if (tag === \"iframe\") {\n const b = iframeBlock(el, ctx.base);\n if (b) out.push(b);\n return;\n }\n if (tag === \"video\") {\n const src =\n attr(el, \"src\") ??\n attr(\n find(el, (e) => e.tagName === \"source\"),\n \"src\",\n );\n const v = src ? videoUrl(src) : undefined;\n if (v) out.push({ kind: \"video\", url: v });\n else if (src) out.push({ kind: \"unknown\", type: \"video file\", text: \"\" });\n return;\n }\n if (tag === \"audio\") {\n const src =\n attr(el, \"src\") ??\n attr(\n find(el, (e) => e.tagName === \"source\"),\n \"src\",\n );\n if (src) {\n try {\n out.push({ kind: \"audio\", url: new URL(src, ctx.base).toString() });\n } catch {\n // ignore\n }\n }\n return;\n }\n if (tag === \"table\") {\n const rows = findAll(el, (e) => e.tagName === \"tr\").map((tr) =>\n findAll(tr, (e) => e.tagName === \"td\" || e.tagName === \"th\", { deep: false }).map((c) =>\n text(c),\n ),\n );\n const thead = find(el, (e) => e.tagName === \"thead\");\n const firstIsHead =\n !!thead ||\n (rows.length > 1 &&\n !!find(findAll(el, (e) => e.tagName === \"tr\")[0] as Element, (e) => e.tagName === \"th\"));\n const caption = text(find(el, (e) => e.tagName === \"caption\"));\n const body = rows.filter((r) => r.some(Boolean));\n if (!body.length) return;\n out.push({\n kind: \"table\",\n ...(firstIsHead ? { head: body[0] } : {}),\n rows: firstIsHead ? body.slice(1) : body,\n ...(caption ? { caption } : {}),\n });\n return;\n }\n if (tag === \"img\" || tag === \"picture\") {\n if (tag === \"img\" && isDecorative(el)) return;\n const im = imageFromImg(el, ctx.base);\n if (im) out.push({ kind: \"image\", image: im });\n return;\n }\n if (tag === \"blockquote\" || (tag === \"figure\" && find(el, (e) => e.tagName === \"blockquote\"))) {\n const t = testimonialFrom(el, ctx.base);\n if (t && t.kind === \"testimonial\" && !t.name) {\n out.push({ kind: \"quote\", text: stripTags(t.html) });\n return;\n }\n if (t) {\n out.push(t);\n return;\n }\n }\n if (tag === \"figure\" || (tag === \"a\" && find(el, (e) => e.tagName === \"img\") && !text(el))) {\n const imgEl = find(el, (e) => e.tagName === \"img\" && !isDecorative(e));\n const iframe = find(el, (e) => e.tagName === \"iframe\");\n if (iframe) {\n const b = iframeBlock(iframe, ctx.base);\n if (b) out.push(b);\n return;\n }\n if (classes(el).some((c) => c.startsWith(\"wp-block-embed\"))) {\n const url = text(el)\n .split(/\\s+/)\n .find((w) => /^https?:\\/\\//.test(w));\n const v = url ? videoUrl(url) : undefined;\n if (v) out.push({ kind: \"video\", url: v });\n else if (url) out.push({ kind: \"embed\", url });\n return;\n }\n const table = find(el, (e) => e.tagName === \"table\");\n if (table) {\n leafBlocks(table, ctx, out);\n const last = out[out.length - 1];\n const cap = text(find(el, (e) => e.tagName === \"figcaption\"));\n if (last?.kind === \"table\" && !last.caption && cap) last.caption = cap;\n return;\n }\n if (imgEl) {\n const im = imageFromImg(imgEl, ctx.base);\n const cap = text(find(el, (e) => e.tagName === \"figcaption\"));\n const a =\n tag === \"a\" ? el : find(el, (e) => e.tagName === \"a\" && !!find(e, (x) => x === imgEl));\n const href = a ? attr(a, \"href\") : undefined;\n if (im)\n out.push({\n kind: \"image\",\n image: im,\n ...(cap ? { caption: cap } : {}),\n ...(href && !/\\.(?:jpe?g|png|webp|gif|avif)(?:\\?|$)/i.test(href) && !href.startsWith(\"#\")\n ? { href }\n : {}),\n });\n return;\n }\n }\n if (tag === \"a\" && isButtonLink(el)) {\n const prevButtons = out.filter((b) => b.kind === \"button\").length;\n out.push({\n kind: \"button\",\n label: text(el),\n href: attr(el, \"href\") as string,\n style:\n /outline|secondary|ghost|alt\\b/i.test(classes(el).join(\" \")) || prevButtons > 0\n ? \"secondary\"\n : \"primary\",\n });\n return;\n }\n if (TEXT_TAGS.has(tag)) {\n // A paragraph that is only a button (or buttons) is a button.\n const links = findAll(el, (e) => e.tagName === \"a\");\n if (\n links.length &&\n links.every(isButtonLink) &&\n links.map(text).join(\"\").replace(/\\s+/g, \"\") === text(el).replace(/\\s+/g, \"\")\n ) {\n for (const a of links) leafBlocks(a, ctx, out);\n return;\n }\n const imgs = findAll(el, (e) => e.tagName === \"img\" && !isDecorative(e));\n if (imgs.length && !text(el)) {\n for (const i of imgs) leafBlocks(i, ctx, out);\n return;\n }\n if (!text(el)) return;\n if (HEADINGS.has(tag)) pushText(`<${tag}>${innerHtml(el)}</${tag}>`);\n else pushText(outerHtml(el));\n return;\n }\n // Containers holding only button-styled links are buttons.\n {\n const links = findAll(el, (e) => e.tagName === \"a\");\n if (\n links.length &&\n links.every(isButtonLink) &&\n links\n .map((a) => text(a))\n .join(\"\")\n .replace(/\\s+/g, \"\") === text(el).replace(/\\s+/g, \"\") &&\n !hasMedia(el)\n ) {\n for (const a of links) leafBlocks(a, ctx, out);\n return;\n }\n }\n // Inline-only containers (a div holding text) read as a paragraph.\n if (!hasBlockChild(el) && text(el)) {\n if (tag === \"a\" && attr(el, \"href\")) {\n pushText(`<p>${outerHtml(el)}</p>`);\n return;\n }\n const big = /(?:^|[\\s_-])(?:heading|title|headline|display|h[1-3])(?:$|[\\s_-])/i.test(\n idClass(el),\n );\n pushText(\n big && text(el).length < 120 ? `<h2>${innerHtml(el)}</h2>` : `<p>${innerHtml(el)}</p>`,\n );\n return;\n }\n walk(el, ctx, out, 0);\n}\n\n/** Walk a container: rows of columns flatten into `out` (inside a column) via leafBlocks. */\nfunction walk(el: Element, ctx: WalkCtx, out: SqBlock[], depth: number) {\n if (ownText(el)) {\n // Mixed text and elements: read the whole thing as rich text.\n const imgs = findAll(el, (e) => e.tagName === \"img\" && !isDecorative(e));\n const last = out[out.length - 1];\n const html = `<p>${innerHtml(el)}</p>`;\n if (last?.kind === \"text\") last.html += html;\n else out.push({ kind: \"text\", html });\n for (const i of imgs) leafBlocks(i, ctx, out);\n return;\n }\n for (const c of contentChildren(el)) {\n if (c === ctx.drop) continue;\n if (\n TESTIMONIAL.test(idClass(c)) &&\n !TEXT_TAGS.has(c.tagName) &&\n !INLINE_TAGS.has(c.tagName) &&\n !similarChildren(c, 2)\n ) {\n const t = testimonialFrom(c, ctx.base);\n if (t) {\n out.push(t);\n continue;\n }\n }\n const acc = accordionFrom(c);\n if (acc) {\n out.push(acc);\n continue;\n }\n const grid = depth < 8 ? (galleryGrid(c, ctx.base) ?? cardGrid(c, ctx.base)) : undefined;\n if (grid) {\n out.push(grid);\n continue;\n }\n const bg = backgroundImageOf(c, ctx.base);\n if (bg && !text(c) && !find(c, (e) => e.tagName === \"img\")) {\n out.push({ kind: \"image\", image: bg });\n continue;\n }\n if (\n LATEST_POSTS.test(classes(c).join(\" \")) ||\n accordionFrom(c) ||\n TEXT_TAGS.has(c.tagName) ||\n [\n \"img\",\n \"picture\",\n \"figure\",\n \"blockquote\",\n \"table\",\n \"iframe\",\n \"video\",\n \"audio\",\n \"form\",\n \"hr\",\n ].includes(c.tagName) ||\n (c.tagName === \"a\" && (isButtonLink(c) || !hasBlockChild(c))) ||\n !hasBlockChild(c) ||\n depth > 12\n )\n leafBlocks(c, ctx, out);\n else walk(c, ctx, out, depth + 1);\n }\n}\n\n/** A container's content as rows (side-by-side columns kept, everything else full width). */\nfunction rowsOf(el: Element, ctx: WalkCtx): SqRow[] {\n const rows: SqRow[] = [];\n let flat: SqBlock[] = [];\n const pushFlat = () => {\n if (flat.length) rows.push({ columns: [{ span: 12, blocks: flat }] });\n flat = [];\n };\n const visit = (node: Element, depth: number) => {\n if (ownText(node)) {\n walk(node, ctx, flat, depth);\n return;\n }\n for (const c of contentChildren(node)) {\n if (c === ctx.drop) continue;\n if (depth < 6 && isColumnRow(c) && !galleryGrid(c, ctx.base) && !cardGrid(c, ctx.base)) {\n pushFlat();\n const kids = contentChildren(c);\n rows.push({\n columns: kids.map((k) => {\n const blocks: SqBlock[] = [];\n if (hasBlockChild(k) || ownText(k)) walk(k, ctx, blocks, 0);\n else leafBlocks(k, ctx, blocks);\n return { span: spanHint(k, kids.length), blocks };\n }),\n });\n continue;\n }\n const isLeaf =\n LATEST_POSTS.test(classes(c).join(\" \")) ||\n !!accordionFrom(c) ||\n TEXT_TAGS.has(c.tagName) ||\n [\n \"img\",\n \"picture\",\n \"figure\",\n \"blockquote\",\n \"table\",\n \"iframe\",\n \"video\",\n \"audio\",\n \"form\",\n \"hr\",\n \"a\",\n ].includes(c.tagName) ||\n !hasBlockChild(c) ||\n !!galleryGrid(c, ctx.base) ||\n !!cardGrid(c, ctx.base) ||\n (TESTIMONIAL.test(idClass(c)) && !TEXT_TAGS.has(c.tagName) && !similarChildren(c, 2));\n if (isLeaf || depth >= 6) {\n const before = flat.length;\n walk({ ...c, childNodes: [c] } as unknown as Element, ctx, flat, depth);\n if (flat.length === before && !isLeaf) walk(c, ctx, flat, depth + 1);\n } else visit(c, depth + 1);\n }\n };\n visit(el, 0);\n pushFlat();\n return rows;\n}\n\n// --- sections --------------------------------------------------------------------------------------\n\n/** Elements that start their own section inside flat content (WordPress covers, full-width groups). */\nconst SECTION_LIKE =\n /(?:^|\\s)(?:wp-block-cover|alignfull|has-background|wp-block-group|elementor-section|et_pb_section|vc_row|section)(?:$|\\s)/i;\n\nfunction sectionTheme(el: Element): string {\n const style = attr(el, \"style\") ?? \"\";\n const bg = /background(?:-color)?\\s*:\\s*(#[0-9a-f]{3,6}|rgba?\\([^)]*\\)|hsla?\\([^)]*\\))/i.exec(\n style,\n )?.[1];\n const hex = bg ? cssColorToHex(bg) : undefined;\n if (hex) {\n const r = Number.parseInt(hex.slice(1, 3), 16);\n const g = Number.parseInt(hex.slice(3, 5), 16);\n const b = Number.parseInt(hex.slice(5, 7), 16);\n const l = (0.2126 * r + 0.7152 * g + 0.0722 * b) / 255;\n const chroma = (Math.max(r, g, b) - Math.min(r, g, b)) / 255;\n if (l < 0.2) return \"black\";\n if (l < 0.45) return chroma > 0.2 ? \"bright\" : \"dark\";\n if (chroma > 0.3) return \"bright\";\n if (l < 0.97) return \"light\";\n return \"white\";\n }\n const c = idClass(el);\n if (\n /(?:^|[\\s_-])(?:dark|inverse|inverted|bg-black|bg-dark|is-style-dark|has-black-background-color|has-contrast-background-color)(?:$|[\\s_-])/i.test(\n c,\n )\n )\n return \"dark\";\n if (/has-primary-background-color|has-accent-background-color|bg-primary|bg-brand/i.test(c))\n return \"bright\";\n if (/has-(?:[a-z-]+)-background-color|bg-light|bg-gray|bg-grey|alt-bg|tinted/i.test(c))\n return \"light\";\n return \"\";\n}\n\nfunction sectionBackground(el: Element, base: string): SqImage | undefined {\n const own = backgroundImageOf(el, base);\n if (own) return own;\n // Cover-style: an absolutely positioned / background-classed <img> as the first child.\n for (const c of children(el).slice(0, 3)) {\n const bg = backgroundImageOf(c, base);\n if (bg && !text(c)) return bg;\n const img =\n c.tagName === \"img\"\n ? c\n : c.tagName === \"picture\" ||\n c.tagName === \"div\" ||\n c.tagName === \"span\" ||\n c.tagName === \"figure\"\n ? find(c, (e) => e.tagName === \"img\")\n : undefined;\n if (\n img &&\n !text(c) &&\n (/(?:^|[\\s_-])(?:bg|background|cover|hero-image|backdrop|wp-block-cover__image-background|bgImage|bgMedia)(?:$|[\\s_-])/i.test(\n `${idClass(c)} ${idClass(img)}`,\n ) ||\n /object-fit\\s*:\\s*cover|position\\s*:\\s*absolute/i.test(\n `${attr(c, \"style\") ?? \"\"}${attr(img, \"style\") ?? \"\"}`,\n ) ||\n attr(c, \"data-testid\") === \"bgMedia\")\n ) {\n const im = imageFromImg(img, base);\n if (im) return { ...im, alt: \"\" };\n }\n }\n return undefined;\n}\n\n/** Remove a background element from what the walker sees. */\nfunction withoutBackground(el: Element, bgImg: SqImage | undefined, base: string): Element {\n if (!bgImg) return el;\n const kids = el.childNodes.filter((c) => {\n if (!isElement(c)) return true;\n if (text(c)) return true;\n const img = c.tagName === \"img\" ? c : find(c, (e) => e.tagName === \"img\");\n const bg = backgroundImageOf(c, base);\n if (bg?.url === bgImg.url) return false;\n if (img && imageFromImg(img, base)?.url === bgImg.url) return false;\n return true;\n });\n return { ...el, attrs: el.attrs.filter((a) => a.name !== \"style\"), childNodes: kids } as Element;\n}\n\nconst ROLE_HINTS: [RegExp, SectionRole][] = [\n [\n /(?:^|[\\s_-])(?:hero|banner|masthead|jumbotron|intro-header|page-header|splash|wp-block-cover)(?:$|[\\s_-])/i,\n \"hero\",\n ],\n [/testimonial|reviews?\\b/i, \"testimonials\"],\n [/(?:^|[\\s_-])(?:cta|call-to-action|signup-band)(?:$|[\\s_-])/i, \"cta\"],\n [/(?:^|[\\s_-])contact(?:$|[\\s_-])/i, \"contact\"],\n [/(?:^|[\\s_-])(?:features?|services?|benefits|offerings|what-we-do)(?:$|[\\s_-])/i, \"features\"],\n [/(?:^|[\\s_-])(?:gallery|portfolio|work-grid)(?:$|[\\s_-])/i, \"gallery\"],\n];\n\nfunction textLen(blocks: SqBlock[]): number {\n let n = 0;\n for (const b of blocks)\n if (b.kind === \"text\") n += stripTags(b.html).length;\n else if (b.kind === \"heading\") n += b.text.length + (b.subheading?.length ?? 0);\n return n;\n}\n\nfunction classify(sec: SqSection, index: number, el: Element | undefined): SectionRole | undefined {\n const blocks =\n sec.layout.mode === \"classic\"\n ? sec.layout.rows.flatMap((r) => r.columns.flatMap((c) => c.blocks))\n : [];\n if (!blocks.length) return undefined;\n const kinds = blocks.map((b) => b.kind);\n const len = textLen(blocks);\n const firstHeading = (() => {\n for (const b of blocks) if (b.kind === \"text\") return /<h([1-6])/i.exec(b.html)?.[1];\n return undefined;\n })();\n if (kinds.includes(\"form\")) return \"contact\";\n const hint = el ? ROLE_HINTS.find(([re]) => re.test(idClass(el)))?.[1] : undefined;\n if (\n index === 0 &&\n (firstHeading === \"1\" || hint === \"hero\") &&\n len < 900 &&\n (sec.background?.image || kinds.includes(\"image\") || kinds.includes(\"button\"))\n )\n return \"hero\";\n const quotes = kinds.filter((k) => k === \"testimonial\" || k === \"quote\").length;\n if (quotes && quotes >= (blocks.length - 1) / 2) return \"testimonials\";\n if (kinds.includes(\"gallery\") && kinds.every((k) => k === \"gallery\" || k === \"text\") && len < 400)\n return \"gallery\";\n if (kinds.includes(\"cards\")) return \"features\";\n if (\n index > 0 &&\n kinds.includes(\"button\") &&\n len < 400 &&\n !kinds.some((k) => k === \"image\" || k === \"gallery\" || k === \"cards\") &&\n blocks.length <= 5\n )\n return \"cta\";\n if (hint && hint !== \"hero\" && hint !== \"contact\") return hint;\n return undefined;\n}\n\n/**\n * In a role section, the opening heading (with a short eyebrow before it and a short line after\n * it) becomes a heading block — the shape OpenSpace's section presets use.\n */\nfunction liftHeading(sec: SqSection) {\n if (sec.layout.mode !== \"classic\") return;\n for (const row of sec.layout.rows)\n for (const col of row.columns) {\n const i = col.blocks.findIndex((b) => b.kind === \"text\");\n if (i < 0) continue;\n const tb = col.blocks[i] as Extract<SqBlock, { kind: \"text\" }>;\n const frag = parseHtmlFragment(tb.html);\n const kids = children(frag);\n let hi = kids.findIndex((k) => HEADINGS.has(k.tagName));\n // A small heading right above a bigger one is an eyebrow.\n const k0 = kids[0];\n const k1 = kids[1];\n if (\n hi === 0 &&\n k0 &&\n k1 &&\n /^h[4-6]$/.test(k0.tagName) &&\n /^h[1-3]$/.test(k1.tagName) &&\n text(k0).length <= 60\n )\n hi = 1;\n if (hi < 0 || hi > 1) return;\n const h = kids[hi] as Element;\n const eyebrowEl = hi === 1 ? kids[0] : undefined;\n if (\n eyebrowEl &&\n ((eyebrowEl.tagName !== \"p\" && !HEADINGS.has(eyebrowEl.tagName)) ||\n text(eyebrowEl).length > 60)\n )\n return;\n const after = kids[hi + 1];\n const sub =\n after &&\n after.tagName === \"p\" &&\n text(after).length <= 280 &&\n !find(after, (e) => e.tagName === \"a\")\n ? after\n : undefined;\n const rest = kids.slice(hi + 1 + (sub ? 1 : 0));\n const level = Math.min(4, Math.max(1, Number(h.tagName.slice(1)))) as 1 | 2 | 3 | 4;\n const heading: SqBlock = {\n kind: \"heading\",\n text: text(h),\n level,\n ...(eyebrowEl ? { eyebrow: text(eyebrowEl) } : {}),\n ...(sub ? { subheading: text(sub) } : {}),\n };\n const replacement: SqBlock[] = [heading];\n if (rest.length)\n replacement.push({ kind: \"text\", html: rest.map((r) => outerHtml(r)).join(\"\") });\n col.blocks.splice(i, 1, ...replacement);\n return;\n }\n}\n\nfunction toSection(el: Element, ctx: WalkCtx): SqSection | undefined {\n const bg = sectionBackground(el, ctx.base);\n const inner = withoutBackground(el, bg, ctx.base);\n const rows = rowsOf(inner, ctx).filter((r) => r.columns.some((c) => c.blocks.length));\n if (!rows.length && !bg) return undefined;\n const style = attr(el, \"style\") ?? \"\";\n const tall = /min-height\\s*:\\s*(\\d+)(vh|px)/i.exec(style);\n return {\n theme: bg ? \"\" : sectionTheme(el),\n ...(bg ? { background: { image: bg, overlay: 0 } } : {}),\n ...(tall && (tall[2] === \"vh\" ? Number(tall[1]) >= 60 : Number(tall[1]) >= 600)\n ? { height: \"large\" as const }\n : {}),\n layout: { mode: \"classic\", rows },\n ...(attr(el, \"id\") && /^[a-z][\\w-]{1,40}$/i.test(attr(el, \"id\") ?? \"\")\n ? { id: attr(el, \"id\") }\n : {}),\n };\n}\n\nconst isLeafy = (el: Element) =>\n TEXT_TAGS.has(el.tagName) ||\n [\"img\", \"picture\", \"figure\", \"blockquote\", \"table\", \"iframe\", \"hr\", \"a\", \"video\"].includes(\n el.tagName,\n ) ||\n !hasBlockChild(el);\n\n/** Split the main content into section elements (`flat`: a post body, blocks in a row). */\nfunction sectionElements(main: Element, flat = false): Element[] {\n let el = main;\n for (let i = 0; i < 12; i++) {\n const kids = contentChildren(el);\n if (\n kids.length === 1 &&\n !isLeafy(kids[0] as Element) &&\n !isColumnRow(kids[0] as Element) &&\n !backgroundImageOf(kids[0] as Element, \"https://x.invalid/\") &&\n !SECTION_LIKE.test(` ${classes(kids[0] as Element).join(\" \")} `)\n )\n el = kids[0] as Element;\n else break;\n }\n const kids = contentChildren(el);\n if (!kids.length) return [el];\n const leafy = kids.filter(isLeafy).length;\n if (flat || leafy / kids.length >= 0.5) {\n // Flat content (an article, a WordPress page): runs of plain blocks, with full-width\n // covers and groups as their own sections.\n const out: Element[] = [];\n let run: Node[] = [];\n const flush = () => {\n if (run.length) out.push({ ...el, attrs: [], childNodes: run } as unknown as Element);\n run = [];\n };\n for (const k of kids) {\n if (\n !isLeafy(k) &&\n SECTION_LIKE.test(` ${classes(k).join(\" \")} ${k.tagName === \"section\" ? \"section\" : \"\"} `)\n ) {\n flush();\n out.push(k);\n } else run.push(k);\n }\n flush();\n return out;\n }\n // Each child is a section; a child that only wraps several <section>s is expanded.\n const out: Element[] = [];\n for (const k of kids) {\n const inner = contentChildren(k);\n if (inner.length >= 2 && inner.every((x) => x.tagName === \"section\")) out.push(...inner);\n else out.push(k);\n }\n return out;\n}\n\n/** Sections of a content element (used for page bodies, WordPress content, item bodies). */\nexport function sectionsFrom(\n main: Element,\n base: string,\n opts: { drop?: Element; roles?: boolean; postsPath?: string; flat?: boolean } = {},\n): SqSection[] {\n const ctx: WalkCtx = {\n base,\n ...(opts.drop ? { drop: opts.drop } : {}),\n ...(opts.postsPath ? { postsPath: opts.postsPath } : {}),\n };\n const out: SqSection[] = [];\n const els = sectionElements(opts.flat ? prune(main, new Set()) : main, opts.flat);\n for (const el of els) {\n const s = toSection(el, ctx);\n if (!s) continue;\n if (opts.roles !== false && els.length > 1) {\n const role = classify(s, out.length, el);\n if (role) {\n s.role = role;\n liftHeading(s);\n }\n }\n out.push(s);\n }\n return out;\n}\n\n// --- chrome ------------------------------------------------------------------------------------------\n\nconst SOCIAL_HOSTS =\n /(?:^|\\.)(?:instagram\\.com|facebook\\.com|fb\\.com|twitter\\.com|x\\.com|threads\\.net|bsky\\.app|linkedin\\.com|youtube\\.com|youtu\\.be|tiktok\\.com|pinterest\\.[a-z.]+|github\\.com|spotify\\.com|soundcloud\\.com|bandcamp\\.com|vimeo\\.com|behance\\.net|dribbble\\.com|substack\\.com|patreon\\.com|yelp\\.[a-z.]+|tripadvisor\\.[a-z.]+|mastodon\\.social|tumblr\\.com|medium\\.com|whatsapp\\.com|wa\\.me|t\\.me|discord\\.gg)$/i;\n\nexport function isSocialUrl(href: string): boolean {\n try {\n return SOCIAL_HOSTS.test(new URL(href).host.replace(/^www\\./, \"\"));\n } catch {\n return false;\n }\n}\n\nfunction headerEl(body: Element): Element | undefined {\n const inMain = (e: Element) => {\n let p = e.parentNode as Node | null;\n while (p && isElement(p)) {\n if ([\"main\", \"article\"].includes((p as Element).tagName)) return true;\n p = p.parentNode as Node | null;\n }\n return false;\n };\n return (\n find(body, (e) => attr(e, \"id\") === \"SITE_HEADER\") ??\n find(\n body,\n (e) =>\n (e.tagName === \"header\" || attr(e, \"role\") === \"banner\") && !inMain(e) && !invisible(e),\n ) ??\n find(\n body,\n (e) =>\n /(?:^|\\s)(?:w-nav|navbar|site-header|masthead|header)(?:$|\\s)/i.test(\n classes(e).join(\" \"),\n ) && !inMain(e),\n ) ??\n find(body, (e) => e.tagName === \"nav\" && !inMain(e))\n );\n}\n\nfunction footerEl(body: Element): Element | undefined {\n const wix = find(body, (e) => attr(e, \"id\") === \"SITE_FOOTER\");\n if (wix) return wix;\n const all = findAll(body, (e) => e.tagName === \"footer\" || attr(e, \"role\") === \"contentinfo\", {\n deep: false,\n });\n const outer = all.filter((e) => {\n let p = e.parentNode as Node | null;\n while (p && isElement(p)) {\n if ([\"main\", \"article\", \"blockquote\", \"figure\"].includes((p as Element).tagName))\n return false;\n p = p.parentNode as Node | null;\n }\n return true;\n });\n return (\n outer[outer.length - 1] ??\n find(body, (e) => /(?:^|\\s)(?:site-footer|footer)(?:$|\\s)/i.test(classes(e).join(\" \")))\n );\n}\n\n/** \"H O M E\" (letter-spaced with real spaces) → \"HOME\". */\nexport function unspace(s: string): string {\n return /^(?:\\S ){2,}\\S$/.test(s)\n ? s.replace(/ (?=\\S)/g, (m, i: number) => (s[i - 1] === \" \" ? m : \"\")).replace(/\\s{2,}/g, \" \")\n : s;\n}\n\nfunction linkItem(a: Element): { label: string; href: string; newTab?: boolean } | undefined {\n const href = attr(a, \"href\");\n const label = unspace(clean(text(a) || attr(a, \"aria-label\") || attr(a, \"title\") || \"\"));\n if (!href || !label || href.startsWith(\"javascript:\") || label.length > 60) return undefined;\n if (href === \"#\" || (href.startsWith(\"#\") && href.length < 2)) return undefined;\n return { label, href, ...(attr(a, \"target\") === \"_blank\" ? { newTab: true } : {}) };\n}\n\nfunction navFromHeader(header: Element, base: string): HtmlPage[\"header\"] {\n const anchors = findAll(header, (e) => e.tagName === \"a\" && !!attr(e, \"href\"));\n // Logo: an image in a link home, or anything called logo.\n const homeLink = anchors.find((a) => sitePath(attr(a, \"href\") as string, base) === \"/\");\n const logoImg =\n (homeLink ? find(homeLink, (e) => e.tagName === \"img\") : undefined) ??\n find(\n header,\n (e) =>\n e.tagName === \"img\" &&\n /logo|brand/i.test(`${idClass(e)} ${attr(e, \"alt\") ?? \"\"} ${attr(e, \"src\") ?? \"\"}`),\n );\n const logo = logoImg ? imageFromImg(logoImg, base) : undefined;\n const siteTitle =\n homeLink && text(homeLink) && text(homeLink).length <= 60 ? text(homeLink) : undefined;\n // Navigation: the list with most links (desktop menu), with sub-lists as folders.\n const lists = findAll(header, (e) => (e.tagName === \"ul\" || e.tagName === \"ol\") && !invisible(e));\n const topLists = lists.filter((l) => {\n let p = l.parentNode as Node | null;\n while (p && isElement(p) && p !== header) {\n if ((p as Element).tagName === \"li\") return false;\n p = p.parentNode as Node | null;\n }\n return true;\n });\n const best = topLists\n .map((l) => ({ l, n: findAll(l, (e) => e.tagName === \"a\").length }))\n .sort((a, b) => b.n - a.n)[0];\n const nav: SqNavItem[] = [];\n const seen = new Set<string>();\n const key = (l: { label: string; href: string }) =>\n `${l.label.toLowerCase()}|${sitePath(l.href, base) ?? l.href}`;\n let action: HtmlPage[\"header\"][\"action\"];\n const consider = (a: Element) => {\n if (a === homeLink && !text(a)) return undefined;\n const item = linkItem(a);\n if (!item || isSocialUrl(new URL(item.href, base).toString())) return undefined;\n if (a === homeLink && siteTitle && item.label === siteTitle) return undefined;\n if (\n /^(?:cart|bag|basket|log ?in|sign ?in|account|search|menu|close|open menu|skip to content)$/i.test(\n item.label,\n )\n )\n return undefined;\n return item;\n };\n if (best && best.n >= 2) {\n for (const li of children(best.l).filter((c) => c.tagName === \"li\")) {\n const sub = find(li, (e) => e.tagName === \"ul\" || e.tagName === \"ol\");\n const own = find(\n li,\n (e) => e.tagName === \"a\" && (!sub || !findAll(sub, () => true).includes(e)),\n );\n if (sub) {\n const items = findAll(sub, (e) => e.tagName === \"a\")\n .map(consider)\n .filter((x): x is NonNullable<typeof x> => !!x);\n const label = clean(own ? text(own) : text(li).replace(text(sub), \"\") || \"\");\n if (items.length && label) {\n if (own && attr(own, \"href\") && !attr(own, \"href\")?.startsWith(\"#\")) {\n const self = consider(own);\n const samePath = (x: { href: string }) => sitePath(x.href, base) ?? x.href;\n if (self && !items.some((i) => samePath(i) === samePath(self))) items.unshift(self);\n }\n nav.push({ type: \"folder\", label: unspace(label).slice(0, 60), items });\n continue;\n }\n }\n if (!own) continue;\n const item = consider(own);\n if (!item || seen.has(key(item))) continue;\n seen.add(key(item));\n if (isButtonLink(own)) action = { label: item.label, href: item.href };\n else nav.push({ type: \"link\", ...item });\n }\n } else {\n // Webflow dropdowns and plain link rows.\n const dropdowns = findAll(header, (e) =>\n /(?:^|\\s)w-dropdown(?:\\s|$)/.test(classes(e).join(\" \")),\n );\n const inDropdown = new Set(dropdowns.flatMap((d) => findAll(d, (e) => e.tagName === \"a\")));\n for (const d of dropdowns) {\n const label = text(find(d, (e) => /w-dropdown-toggle/.test(classes(e).join(\" \"))));\n const items = findAll(d, (e) => e.tagName === \"a\")\n .map(consider)\n .filter((x): x is NonNullable<typeof x> => !!x);\n if (label && items.length) nav.push({ type: \"folder\", label, items });\n }\n for (const a of anchors) {\n if (inDropdown.has(a) || invisible(a)) continue;\n const item = consider(a);\n if (!item || seen.has(key(item))) continue;\n seen.add(key(item));\n if (isButtonLink(a)) action = { label: item.label, href: item.href };\n else nav.push({ type: \"link\", ...item });\n }\n }\n // A trailing button-styled link in the header is its call to action.\n if (!action) {\n const btn = [...anchors]\n .reverse()\n .find((a) => isButtonLink(a) && !isSocialUrl(attr(a, \"href\") ?? \"\"));\n const item = btn ? consider(btn) : undefined;\n if (item) {\n action = { label: item.label, href: item.href };\n const i = nav.findIndex((n) => n.type === \"link\" && key(n) === key(item));\n if (i >= 0) nav.splice(i, 1);\n }\n }\n const style = `${attr(header, \"style\") ?? \"\"} ${idClass(header)}`;\n return {\n nav: nav.slice(0, 40),\n ...(logo ? { logo } : {}),\n ...(siteTitle ? { siteTitle } : {}),\n ...(action ? { action } : {}),\n ...(/position\\s*:\\s*(?:fixed|sticky)|sticky|fixed/i.test(style) ? { sticky: true } : {}),\n ...(/transparent|absolute|overlay/i.test(style) ? { overlay: true } : {}),\n };\n}\n\n// --- head ----------------------------------------------------------------------------------------\n\nfunction metaContent(head: Element, key: string): string | undefined {\n const m = find(\n head,\n (e) =>\n e.tagName === \"meta\" &&\n (attr(e, \"name\") === key || attr(e, \"property\") === key || attr(e, \"itemprop\") === key),\n );\n const v = m ? attr(m, \"content\") : undefined;\n return v ? clean(v) : undefined;\n}\n\nfunction metaAll(head: Element, key: string): string[] {\n return findAll(\n head,\n (e) => e.tagName === \"meta\" && (attr(e, \"property\") === key || attr(e, \"name\") === key),\n )\n .map((e) => clean(attr(e, \"content\") ?? \"\"))\n .filter(Boolean);\n}\n\nfunction jsonLdOf(root: Element): Record<string, unknown>[] {\n const out: Record<string, unknown>[] = [];\n for (const s of findAll(\n root,\n (e) => e.tagName === \"script\" && attr(e, \"type\") === \"application/ld+json\",\n )) {\n try {\n const v = JSON.parse(scriptText(s)) as unknown;\n const push = (x: unknown) => {\n if (x && typeof x === \"object\") {\n const o = x as Record<string, unknown>;\n if (Array.isArray(o[\"@graph\"])) for (const g of o[\"@graph\"]) push(g);\n else out.push(o);\n }\n };\n if (Array.isArray(v)) for (const x of v) push(x);\n else push(v);\n } catch {\n // ignore broken JSON-LD\n }\n }\n return out;\n}\n\nconst typeIs = (o: Record<string, unknown>, re: RegExp) =>\n [o[\"@type\"]].flat().some((t) => typeof t === \"string\" && re.test(t));\n\nconst PLATFORM_SCRIPT_HOSTS =\n /squarespace|wix|parastorage|webflow|website-files|framer|jquery|cloudflare|jsdelivr|unpkg|googleapis\\.com\\/ajax|wp-includes|wp-content|shopify|gstatic\\.com\\/recaptcha|google\\.com\\/recaptcha|polyfill|carrd/i;\n\n/** Header chrome; when the header has no menu, the site's main navigation wherever it is. */\nfunction chromeHeader(\n body: Element,\n header: Element | undefined,\n base: string,\n): HtmlPage[\"header\"] {\n const h = header ? navFromHeader(header, base) : { nav: [] };\n // A header whose only link is the site's own name (sidebar themes keep the menu elsewhere).\n const home = (href: string) => {\n try {\n const u = new URL(href, base);\n return u.origin === new URL(base).origin && /^\\/?$/.test(u.pathname);\n } catch {\n return false;\n }\n };\n if (h.nav.length && h.nav.every((i) => i.type === \"link\" && home(i.href))) h.nav = [];\n if (!h.nav.length) {\n const nav = find(\n body,\n (e) =>\n (e.tagName === \"nav\" || attr(e, \"role\") === \"navigation\") &&\n /main-navigation|site-navigation|primary-menu|main-menu|primary-nav|main-nav|menu-primary|nav-primary/i.test(\n idClass(e),\n ),\n );\n const anyNav =\n nav ??\n findAll(body, (e) => e.tagName === \"nav\" || attr(e, \"role\") === \"navigation\").find((e) => {\n let p = e.parentNode as Node | null;\n while (p && isElement(p)) {\n const t = (p as Element).tagName;\n if (\n t === \"main\" ||\n t === \"footer\" ||\n t === \"article\" ||\n attr(p as Element, \"id\") === \"SITE_FOOTER\"\n )\n return false;\n p = p.parentNode as Node | null;\n }\n return findAll(e, (a) => a.tagName === \"a\" && !!attr(a, \"href\")).length >= 2;\n });\n if (anyNav) {\n const n = navFromHeader(anyNav, base);\n h.nav = n.nav;\n if (!h.action && n.action) h.action = n.action;\n }\n }\n const titleEl = header\n ? find(header, (e) =>\n /(?:^|\\s)(?:site-title|wp-block-site-title|logo-text|brand-name)(?:\\s|$)/.test(\n classes(e).join(\" \"),\n ),\n )\n : undefined;\n if (titleEl && text(titleEl)) h.siteTitle = text(titleEl);\n return h;\n}\n\n/** Parse a whole page. */\nexport function parseHtmlPage(html: string, url: string, opts: ExtractOptions = {}): HtmlPage {\n hiddenClasses = opts.hiddenClasses ?? new Set();\n try {\n return parseHtmlPageInner(html, url, opts);\n } finally {\n hiddenClasses = new Set();\n }\n}\n\nfunction parseHtmlPageInner(html: string, url: string, opts: ExtractOptions): HtmlPage {\n const root = parseDocument(html);\n const base = new URL(url).origin;\n const head = find(root, (e) => e.tagName === \"head\") ?? root;\n const body = find(root, (e) => e.tagName === \"body\") ?? root;\n const docTitle = clean(text(find(head, (e) => e.tagName === \"title\")));\n const jsonLd = jsonLdOf(root);\n const site = jsonLd.find((o) => typeIs(o, /^(?:WebSite|Organization|LocalBusiness)$/));\n const siteName =\n metaContent(head, \"og:site_name\") ??\n (typeof site?.name === \"string\" ? clean(site.name) : undefined);\n const header = headerEl(body);\n const footer = footerEl(body);\n // Main content.\n const main =\n opts.contentRoot ??\n find(body, (e) => attr(e, \"id\") === \"PAGES_CONTAINER\") ??\n find(body, (e) => e.tagName === \"main\" || attr(e, \"role\") === \"main\") ??\n find(body, (e) =>\n /(?:^|\\s)(?:entry-content|post-content|page-content|site-content|content-area)(?:\\s|$)/.test(\n classes(e).join(\" \"),\n ),\n ) ??\n body;\n const exclude = new Set([header, footer].filter((x): x is Element => !!x));\n const content: Element =\n main === body\n ? ({\n ...body,\n childNodes: body.childNodes.filter((c) => !exclude.has(c as Element)),\n } as Element)\n : main;\n // Strip header/footer nested in main (some builders put everything in one wrapper).\n const pruned = prune(content, exclude);\n const h1 = find(pruned, (e) => e.tagName === \"h1\" && !!text(e));\n const ld = jsonLd.find((o) => typeIs(o, /Article|BlogPosting|NewsArticle|Report/));\n const ogImage = metaContent(head, \"og:image\") ?? metaContent(head, \"twitter:image\");\n const description = metaContent(head, \"description\") ?? metaContent(head, \"og:description\");\n const robots = metaContent(head, \"robots\") ?? \"\";\n const sitePathOfUrl = sitePath(url, base) ?? \"/\";\n const title =\n (h1 ? text(h1) : undefined) ??\n metaContent(head, \"og:title\") ??\n stripSuffix(docTitle, siteName) ??\n sitePathOfUrl;\n const sections = sectionsFrom(pruned, base, {\n ...(opts.dropTitle && h1 ? { drop: h1 } : {}),\n });\n // Article metadata.\n const published =\n metaContent(head, \"article:published_time\") ??\n (typeof ld?.datePublished === \"string\" ? ld.datePublished : undefined) ??\n attr(\n find(pruned, (e) => e.tagName === \"time\" && !!attr(e, \"datetime\")),\n \"datetime\",\n );\n const author =\n metaContent(head, \"author\") ??\n metaContent(head, \"article:author\") ??\n (() => {\n const a = ld?.author;\n const first = Array.isArray(a) ? a[0] : a;\n return first &&\n typeof first === \"object\" &&\n typeof (first as { name?: unknown }).name === \"string\"\n ? ((first as { name: string }).name as string)\n : typeof first === \"string\"\n ? first\n : undefined;\n })();\n const article: HtmlArticle | undefined =\n ld || metaContent(head, \"og:type\") === \"article\" || metaContent(head, \"article:published_time\")\n ? {\n ...(published ? { date: published } : {}),\n ...(metaContent(head, \"article:modified_time\")\n ? { modified: metaContent(head, \"article:modified_time\") }\n : {}),\n ...(author && !/^https?:/.test(author) ? { author } : {}),\n ...(ogImage ? { image: { url: new URL(ogImage, base).toString(), alt: \"\" } } : {}),\n tags: metaAll(head, \"article:tag\"),\n categories: metaAll(head, \"article:section\"),\n ...(description ? { excerpt: description } : {}),\n }\n : undefined;\n // Links.\n const links: string[] = [];\n for (const a of findAll(root, (e) => e.tagName === \"a\" && !!attr(e, \"href\"))) {\n const p = sitePath(attr(a, \"href\") as string, base);\n if (p) links.push(p);\n }\n // Social links anywhere outside the main content.\n const social = new Set<string>();\n for (const zone of [header, footer, body].filter((x): x is Element => !!x))\n for (const a of findAll(zone, (e) => e.tagName === \"a\" && !!attr(e, \"href\"))) {\n const h = attr(a, \"href\") as string;\n if (/^https?:/.test(h) && isSocialUrl(h)) social.add(h);\n }\n // Styles and scripts.\n let inlineCss = \"\";\n for (const s of findAll(root, (e) => e.tagName === \"style\")) inlineCss += `\\n${scriptText(s)}`;\n const styleAttrs = findAll(body, (e) => !!attr(e, \"style\")).slice(0, 400);\n inlineCss += `\\n${styleAttrs.map((e) => `[inline]{${attr(e, \"style\")}}`).join(\"\\n\")}`;\n const stylesheets = findAll(\n root,\n (e) => e.tagName === \"link\" && /stylesheet/i.test(attr(e, \"rel\") ?? \"\") && !!attr(e, \"href\"),\n )\n .map((e) => attr(e, \"href\") as string)\n .filter((h) => !/fonts\\.googleapis\\.com/.test(h));\n const fontLinks = findAll(\n root,\n (e) => e.tagName === \"link\" && /fonts\\.googleapis\\.com\\/css/.test(attr(e, \"href\") ?? \"\"),\n ).map((e) => attr(e, \"href\") as string);\n for (const f of fontLinks) inlineCss += `\\n/* google-fonts: ${f} */`;\n const scripts = new Set<string>();\n for (const s of findAll(root, (e) => e.tagName === \"script\")) {\n const src = attr(s, \"src\");\n if (src) {\n try {\n const u = new URL(src, base);\n if (!sameSite(u, base) && !PLATFORM_SCRIPT_HOSTS.test(u.host + u.pathname))\n scripts.add(u.host.replace(/^www\\./, \"\"));\n } catch {\n // ignore\n }\n } else {\n const t = scriptText(s);\n if (\n /gtag\\(|googletagmanager|fbq\\(|_paq|plausible|hotjar|clarity|intercom|crisp|tawk|hubspot|klaviyo|mailchimp/i.test(\n t,\n )\n )\n scripts.add(\n /gtag|googletagmanager/.test(t)\n ? \"Google Analytics / Tag Manager\"\n : /fbq/.test(t)\n ? \"Meta Pixel\"\n : \"inline tracking or chat script\",\n );\n }\n }\n const favicon = bestIcon(head, base);\n const htmlEl = root;\n const textLength = text(pruned).length;\n const seo: SqSeo = {\n ...(docTitle ? { title: docTitle } : {}),\n ...(description ? { description } : {}),\n ...(ogImage ? { image: { url: safeAbs(ogImage, base), alt: \"\" } } : {}),\n ...(/noindex/i.test(robots) ? { noindex: true } : {}),\n };\n if (seo.image && !seo.image.url) delete seo.image;\n return {\n url,\n path: sitePathOfUrl,\n title: clean(title).slice(0, 200) || \"Page\",\n docTitle,\n seo,\n ...(attr(htmlEl, \"lang\") ? { lang: attr(htmlEl, \"lang\") } : {}),\n ...(metaContent(head, \"generator\") ? { generator: metaContent(head, \"generator\") } : {}),\n ...(favicon ? { favicon } : {}),\n ...(siteName ? { siteName } : {}),\n header: chromeHeader(body, header, base),\n footer: footer ? footerSections(footer, base) : [],\n social: [...social],\n sections,\n inlineCss,\n stylesheets,\n scripts: [...scripts],\n links: [...new Set(links)],\n ...(article ? { article } : {}),\n bodyClasses: classes(body),\n jsonLd,\n textLength,\n };\n}\n\nconst safeAbs = (u: string, base: string) => {\n try {\n return new URL(u, base).toString();\n } catch {\n return \"\";\n }\n};\n\n/** \"About — Maya Yoga\" → \"About\" (when the site name is known or the separator is clear). */\nexport function stripSuffix(title: string, siteName?: string): string | undefined {\n if (!title) return undefined;\n if (siteName) {\n const esc = siteName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const t = title\n .replace(new RegExp(`\\\\s*[—–|·:-]\\\\s*${esc}\\\\s*$`, \"i\"), \"\")\n .replace(new RegExp(`^${esc}\\\\s*[—–|·:-]\\\\s*`, \"i\"), \"\");\n if (t && t !== title) return t.trim();\n }\n const m = /^(.+?)\\s+[—–|·]\\s+[^—–|·]+$/.exec(title);\n return (m?.[1] ?? title).trim();\n}\n\n/** A copy of `el` without the excluded subtrees and boilerplate. */\nfunction prune(el: Element, exclude: Set<Element>): Element {\n const visit = (n: Element): Element =>\n ({\n ...n,\n childNodes: n.childNodes\n .filter(\n (c) =>\n !isElement(c) ||\n (!exclude.has(c) &&\n !hidden(c) &&\n ![\"nav\", \"aside\", \"script\", \"style\", \"noscript\", \"template\", \"svg\"].includes(\n c.tagName,\n )),\n )\n .map((c) => (isElement(c) ? visit(c) : c)),\n }) as Element;\n // Keep parent links so `closest`-style lookups keep working inside the copy.\n const copy = groupDetails(visit(el));\n const relink = (n: Element) => {\n for (const c of n.childNodes) {\n (c as { parentNode: unknown }).parentNode = n;\n if (isElement(c)) relink(c);\n }\n };\n relink(copy);\n return copy;\n}\n\n/** Consecutive `<details>` elements become one accordion group. */\nfunction groupDetails(el: Element): Element {\n const out: Node[] = [];\n let run: Element[] = [];\n const flush = () => {\n if (run.length >= 2)\n out.push({\n ...el,\n tagName: \"div\",\n nodeName: \"div\",\n attrs: [{ name: \"class\", value: \"os-details-group\" }],\n childNodes: run,\n } as unknown as Element);\n else out.push(...run);\n run = [];\n };\n for (const c of el.childNodes) {\n if (isElement(c) && c.tagName === \"details\") {\n run.push(c);\n continue;\n }\n if (isElement(c) || (c as { value?: string }).value?.trim()) flush();\n if (isElement(c)) out.push(groupDetails(c));\n else out.push(c);\n }\n flush();\n return { ...el, childNodes: out } as Element;\n}\n\n/** The footer as sections (columns kept; menus and social icons become text and social links). */\nfunction footerSections(footer: Element, base: string): SqSection[] {\n const ctx: WalkCtx = { base };\n const pruned = prune(footer, new Set());\n const rows = rowsOf(pruned, ctx)\n .map((r) => ({\n columns: r.columns\n .map((c) => ({\n ...c,\n blocks: c.blocks.filter((b) => b.kind !== \"image\" || !isSocialImage(b)),\n }))\n .filter((c) => c.blocks.length),\n }))\n .filter((r) => r.columns.length);\n const hasSocial =\n findAll(footer, (e) => e.tagName === \"a\" && isSocialUrl(attr(e, \"href\") ?? \"\")).length > 0;\n if (hasSocial) {\n const last = rows[rows.length - 1];\n if (last) last.columns[last.columns.length - 1]?.blocks.push({ kind: \"social\" });\n else rows.push({ columns: [{ span: 12, blocks: [{ kind: \"social\" }] }] });\n }\n if (!rows.length) return [];\n return [{ theme: sectionTheme(footer), layout: { mode: \"classic\", rows } }];\n}\n\nconst isSocialImage = (b: SqBlock) =>\n b.kind === \"image\" && (b.image.width ?? 100) <= 64 && (b.image.height ?? 100) <= 64;\n","/**\n * Which addresses a site has: the sitemaps robots.txt announces (and the usual `/sitemap.xml`,\n * `/sitemap_index.xml`), following sitemap indexes, filtered to same-site HTML pages; plus, when\n * there is no sitemap, a breadth-first walk of the site's own links.\n */\nimport { RobotsDisallowed, type SiteFetcher } from \"../fetch\";\nimport type { SqNotice } from \"../types\";\nimport { sitePath } from \"./extract\";\n\n/** Paths that are never content pages. */\nconst NOT_PAGES =\n /^\\/(?:cart|checkout|basket|account|my-account|login|log-in|signin|sign-in|signup|sign-up|register|logout|search|wp-admin|wp-login\\.php|wp-json|xmlrpc\\.php|feed|rss|cdn-cgi|_next|static|assets|api|graphql|admin|members-area|profile|amp|lightbox|_api|_partials|\\.well-known)(?:\\/|$)/i;\nconst FILE_EXT =\n /\\.(?:jpe?g|png|gif|webp|avif|svg|ico|pdf|docx?|xlsx?|pptx?|zip|mp3|mp4|m4a|wav|ogg|mov|css|js|json|xml|txt|rss|atom|woff2?|ttf|eot)$/i;\n\nexport function isPagePath(p: string): boolean {\n return !NOT_PAGES.test(p) && !FILE_EXT.test(p) && !/\\/(?:feed|amp|page\\/\\d+)$/.test(p);\n}\n\nexport async function sitemapUrls(\n fetcher: SiteFetcher,\n base: string,\n notices: SqNotice[],\n limit = 2000,\n): Promise<{ paths: string[]; lastmod: Map<string, string> }> {\n const queue: string[] = [];\n try {\n const robots = await fetcher.text(new URL(\"/robots.txt\", base).toString());\n if (robots && robots.status < 400)\n for (const m of robots.text.matchAll(/^\\s*sitemap\\s*:\\s*(\\S+)/gim))\n queue.push(m[1] as string);\n } catch {\n // no robots.txt\n }\n if (!queue.length)\n queue.push(\n new URL(\"/sitemap.xml\", base).toString(),\n new URL(\"/sitemap_index.xml\", base).toString(),\n );\n const seen = new Set<string>();\n const paths: string[] = [];\n const lastmod = new Map<string, string>();\n for (let i = 0; i < queue.length && seen.size < 30; i++) {\n const url = queue[i] as string;\n if (seen.has(url)) continue;\n seen.add(url);\n let xml: string | undefined;\n try {\n const r = await fetcher.text(url);\n if (r && r.status < 400 && /<(?:urlset|sitemapindex)\\b/.test(r.text)) xml = r.text;\n } catch (e) {\n if (e instanceof RobotsDisallowed)\n notices.push({\n kind: \"robots\",\n where: url,\n message: \"robots.txt asks tools not to read this sitemap; skipped.\",\n });\n continue;\n }\n if (!xml) continue;\n if (/<sitemapindex\\b/.test(xml)) {\n for (const m of xml.matchAll(\n /<sitemap>[\\s\\S]*?<loc>\\s*([^<\\s]+)\\s*<\\/loc>[\\s\\S]*?<\\/sitemap>/g,\n )) {\n const loc = (m[1] as string).replace(/&/g, \"&\");\n // Images/videos/products sitemaps aren't pages.\n if (/image|video|product|attachment|author|tag/i.test(loc)) continue;\n queue.push(loc);\n }\n continue;\n }\n for (const m of xml.matchAll(/<url>([\\s\\S]*?)<\\/url>/g)) {\n const loc = /<loc>\\s*([^<\\s]+)\\s*<\\/loc>/.exec(m[1] as string)?.[1];\n if (!loc) continue;\n const p = sitePath(loc.replace(/&/g, \"&\"), base);\n if (!p || !isPagePath(p) || paths.includes(p)) continue;\n paths.push(p);\n const lm = /<lastmod>\\s*([^<\\s]+)\\s*<\\/lastmod>/.exec(m[1] as string)?.[1];\n if (lm) lastmod.set(p, lm);\n if (paths.length >= limit) break;\n }\n }\n return { paths, lastmod };\n}\n","/**\n * The look of any site from its CSS (or, with `--render`, from computed styles in a real browser):\n * page background and text colors, the brand color (buttons, links, `--primary`-style custom\n * properties, else the most used chromatic color), heading and body fonts (CSS rules, Google\n * Fonts links, WordPress `--wp--preset--*` tokens), button shape and type sizes. The result feeds\n * the shared theme mapper, which snaps it to OpenSpace palettes and pairings and lets the contrast\n * solver make every theme accessible. Nothing of the original CSS is kept.\n */\nimport { cssColorToHex } from \"../squarespace/theme\";\nimport type { SqTheme } from \"../types\";\n\n/** Styles read from a rendered page (Playwright), when available. */\nexport interface ComputedLook {\n background?: string;\n text?: string;\n bodyFont?: string;\n headingFont?: string;\n headingWeight?: number;\n h1Size?: number;\n bodySize?: number;\n buttonBg?: string;\n buttonBorder?: string;\n buttonRadius?: string;\n link?: string;\n}\n\ninterface Rule {\n selectors: string[];\n decls: Map<string, string>;\n}\n\nfunction parseRules(css: string): Rule[] {\n const rules: Rule[] = [];\n const stripped = css.replace(/\\/\\*[\\s\\S]*?\\*\\//g, \"\");\n for (const m of stripped.matchAll(/([^{}]+)\\{([^{}]*)\\}/g)) {\n const sel = (m[1] as string).trim();\n if (!sel || sel.startsWith(\"@\")) continue;\n const decls = new Map<string, string>();\n for (const d of (m[2] as string).split(\";\")) {\n const i = d.indexOf(\":\");\n if (i < 0) continue;\n const k = d.slice(0, i).trim().toLowerCase();\n const v = d\n .slice(i + 1)\n .replace(/!important/i, \"\")\n .trim();\n if (k && v && !decls.has(k)) decls.set(k, v);\n }\n rules.push({ selectors: sel.split(\",\").map((s) => s.trim()), decls });\n }\n return rules;\n}\n\nconst GENERIC_FONTS =\n /^(?:inherit|initial|unset|serif|sans-serif|monospace|cursive|fantasy|system-ui|ui-sans-serif|ui-serif|-apple-system|blinkmacsystemfont|segoe ui|roboto|helvetica neue|arial|helvetica|apple color emoji|segoe ui emoji|var\\(.*)$/i;\n\nfunction firstFamily(v: string | undefined): string | undefined {\n if (!v) return undefined;\n for (const raw of v.split(\",\")) {\n const f = raw\n .trim()\n .replace(/^[\"']|[\"']$/g, \"\")\n .trim();\n if (f && !GENERIC_FONTS.test(f)) return f;\n }\n // Only generic families: keep a recognizable one (Helvetica / Arial read as sans).\n const f = v\n .split(\",\")[0]\n ?.trim()\n .replace(/^[\"']|[\"']$/g, \"\");\n return f && !/^var\\(|inherit|initial/.test(f) ? f : undefined;\n}\n\nconst lum = (hex: string) => {\n const r = Number.parseInt(hex.slice(1, 3), 16) / 255;\n const g = Number.parseInt(hex.slice(3, 5), 16) / 255;\n const b = Number.parseInt(hex.slice(5, 7), 16) / 255;\n return 0.2126 * r + 0.7152 * g + 0.0722 * b;\n};\nconst chroma = (hex: string) => {\n const c = [1, 3, 5].map((i) => Number.parseInt(hex.slice(i, i + 2), 16) / 255);\n return Math.max(...c) - Math.min(...c);\n};\nconst chromatic = (hex: string | undefined): hex is string =>\n !!hex && chroma(hex) >= 0.12 && lum(hex) > 0.04 && lum(hex) < 0.92;\n\n/** Resolve `var(--x, fallback)` against custom properties (a few levels deep). */\nfunction resolver(vars: Map<string, string>) {\n const resolve = (v: string | undefined, depth = 0): string | undefined => {\n if (!v) return undefined;\n if (depth > 6) return v;\n return v.replace(\n /var\\(\\s*(--[\\w-]+)\\s*(?:,\\s*([^()]*(?:\\([^()]*\\))?[^()]*))?\\)/g,\n (_, name: string, fb?: string) => {\n const got = vars.get(name);\n return resolve(got ?? fb ?? \"\", depth + 1) ?? \"\";\n },\n );\n };\n return resolve;\n}\n\nconst colorOf = (v: string | undefined): string | undefined => {\n if (!v) return undefined;\n const m = /(#[0-9a-f]{3,8}\\b|rgba?\\([^)]*\\)|hsla?\\([^)]*\\))/i.exec(v);\n if (!m) return undefined;\n if (/rgba?\\([^)]*,\\s*0(?:\\.0+)?\\s*\\)|transparent/i.test(m[1] as string)) return undefined;\n return cssColorToHex(m[1] as string);\n};\n\nconst sizeRem = (v: string | undefined): number | undefined => {\n if (!v) return undefined;\n const m = /([\\d.]+)(rem|em|px)\\b/.exec(v);\n if (!m) return undefined;\n const n = Number(m[1]);\n return m[2] === \"px\" ? n / 16 : n;\n};\n\nconst isBodySel = (s: string) =>\n /^(?:html|body|:root|\\.site|#site|\\.page-wrapper|\\.wp-site-blocks|#SITE_CONTAINER)$/i.test(s);\nconst isHeadingSel = (s: string) =>\n /^(?:h1|h2|\\.h1|\\.h2|h1\\s*\\.[\\w-]+|\\.heading-1|\\.wp-block-heading|\\.elementor-heading-title|\\.font_0|\\.font_2)$/i.test(\n s,\n );\nconst isButtonSel = (s: string) =>\n /(?:^|\\s|\\.)(?:btn|button|w-button|wp-block-button__link|wp-element-button|elementor-button|wixui-button|cta)\\b/i.test(\n s,\n ) && !/:(?:hover|focus|active|disabled)/.test(s);\n\n/** Google Fonts `family=Playfair+Display:wght@400;700&family=Inter` → names. */\nexport function googleFontFamilies(css: string): string[] {\n const out: string[] = [];\n for (const m of css.matchAll(/google-fonts: ([^\\s*]+)/g)) {\n let u: URL;\n try {\n u = new URL((m[1] as string).replace(/&/g, \"&\"), \"https://fonts.googleapis.com\");\n } catch {\n continue;\n }\n for (const fam of u.searchParams.getAll(\"family\"))\n for (const f of fam.split(\"|\")) {\n const name = f.split(\":\")[0]?.replace(/\\+/g, \" \").trim();\n if (name && !out.includes(name)) out.push(name);\n }\n }\n return out;\n}\n\nexport function themeFromCss(css: string, computed: ComputedLook = {}): SqTheme {\n const rules = parseRules(css);\n const vars = new Map<string, string>();\n // :root custom properties first, then any others.\n for (const pass of [true, false])\n for (const r of rules) {\n if (pass !== r.selectors.some((s) => s === \":root\" || s === \"html\" || s === \"body\")) continue;\n for (const [k, v] of r.decls) if (k.startsWith(\"--\") && !vars.has(k)) vars.set(k, v);\n }\n const resolve = resolver(vars);\n const pick = (sel: (s: string) => boolean, prop: string[]): string | undefined => {\n for (const r of rules)\n if (r.selectors.some(sel))\n for (const p of prop) {\n const v = resolve(r.decls.get(p));\n if (v) return v;\n }\n return undefined;\n };\n const background =\n colorOf(computed.background) ??\n colorOf(pick(isBodySel, [\"background-color\", \"background\"])) ??\n colorOf(\n vars.get(\"--wp--preset--color--base\")\n ? resolve(vars.get(\"--wp--preset--color--base\"))\n : undefined,\n );\n const textColor =\n colorOf(computed.text) ??\n colorOf(pick(isBodySel, [\"color\"])) ??\n colorOf(resolve(vars.get(\"--wp--preset--color--contrast\")));\n const buttonBgRaw = computed.buttonBg ?? pick(isButtonSel, [\"background-color\", \"background\"]);\n const buttonBg = colorOf(buttonBgRaw);\n const link =\n colorOf(computed.link) ?? colorOf(pick((s) => s === \"a\" || s === \"a:link\", [\"color\"]));\n const named = [...vars.entries()]\n .filter(([k]) =>\n /primary|accent|brand|secondary|highlight|theme-color|main-color|vivid/i.test(k),\n )\n .map(([, v]) => colorOf(resolve(v)))\n .find(chromatic);\n // Most used chromatic color, as a last resort.\n const counts = new Map<string, number>();\n for (const m of css.matchAll(/#[0-9a-f]{6}\\b|#[0-9a-f]{3}\\b|rgba?\\([^)]*\\)/gi)) {\n const hex = colorOf(m[0]);\n if (chromatic(hex)) counts.set(hex, (counts.get(hex) ?? 0) + 1);\n }\n const frequent = [...counts.entries()].sort((a, b) => b[1] - a[1])[0]?.[0];\n const accent = [buttonBg, named, link, frequent].find(chromatic);\n // Fonts.\n const google = googleFontFamilies(css);\n const wpHeading = firstFamily(resolve(vars.get(\"--wp--preset--font-family--heading\")));\n const wpBody = firstFamily(\n resolve(\n vars.get(\"--wp--preset--font-family--body\") ??\n vars.get(\"--wp--preset--font-family--system-font\"),\n ),\n );\n const headingFamily =\n firstFamily(computed.headingFont) ??\n firstFamily(pick(isHeadingSel, [\"font-family\"])) ??\n wpHeading ??\n google[0];\n const bodyFamily =\n firstFamily(computed.bodyFont) ??\n firstFamily(pick(isBodySel, [\"font-family\"])) ??\n wpBody ??\n google[1] ??\n google[0];\n const headingWeight =\n computed.headingWeight ?? (Number(pick(isHeadingSel, [\"font-weight\"])) || undefined);\n // Buttons.\n const radiusRaw = computed.buttonRadius ?? pick(isButtonSel, [\"border-radius\"]);\n const radius = radiusRaw ? Number.parseFloat(radiusRaw) : Number.NaN;\n const shape: SqTheme[\"buttons\"][\"shape\"] = Number.isNaN(radius)\n ? undefined\n : /%/.test(radiusRaw ?? \"\") && radius >= 30\n ? \"pill\"\n : radius >= 20\n ? \"pill\"\n : radius <= 1\n ? \"square\"\n : \"rounded\";\n const outline =\n !buttonBg &&\n /transparent|none/i.test(buttonBgRaw ?? \"\") &&\n /solid/.test(computed.buttonBorder ?? pick(isButtonSel, [\"border\"]) ?? \"\");\n const h1 = computed.h1Size ?? sizeRem(pick((s) => s === \"h1\" || s === \".h1\", [\"font-size\"]));\n const normal = computed.bodySize ?? sizeRem(pick(isBodySel, [\"font-size\"]));\n const theme: SqTheme = {\n colors: {\n ...(background && lum(background) >= 0.5 ? { white: background } : {}),\n ...(textColor ? { black: textColor } : {}),\n ...(accent ? { accent } : {}),\n },\n ...(background ? { siteBackground: background } : {}),\n fonts: {\n ...(headingFamily\n ? {\n heading: { family: headingFamily, ...(headingWeight ? { weight: headingWeight } : {}) },\n }\n : {}),\n ...(bodyFamily ? { body: { family: bodyFamily } } : {}),\n },\n sizes: {\n ...(h1 && h1 > 1 && h1 < 10 ? { h1 } : {}),\n ...(normal && normal > 0.6 && normal < 2 ? { normal } : {}),\n },\n buttons: { ...(shape ? { shape } : {}), ...(outline ? { style: \"outline\" as const } : {}) },\n };\n if (h1 && !normal) theme.sizes.normal = 1;\n return theme;\n}\n","/**\n * Which platform built a site, from what its home page says about itself: the generator meta tag,\n * asset hosts, platform-specific markup and response headers. Used by `openspace import <url>` to\n * route to a specialised importer (Squarespace, WordPress) or the generic HTML importer, and by the\n * report to describe what each platform keeps behind (commerce, apps, plugins).\n */\nimport type { Platform } from \"./types\";\n\nexport interface PlatformInfo {\n id: Platform;\n label: string;\n /** The specialised importer, when there is one (otherwise the generic `url` importer). */\n importer: \"squarespace\" | \"wordpress\" | \"github\" | \"url\";\n /** What the importer can't move from this platform (the report's \"Not moved\" list). */\n notMoved: string[];\n}\n\nconst COMMON_NOT_MOVED = [\n \"Form submissions, newsletter subscribers, member accounts and comments.\",\n \"Analytics and SEO history (search engines follow the redirects).\",\n];\n\nexport const PLATFORMS: Record<Platform, PlatformInfo> = {\n squarespace: {\n id: \"squarespace\",\n label: \"Squarespace\",\n importer: \"squarespace\",\n notMoved: [\n \"Orders, customers, inventory, discounts, gift cards, shipping and tax settings (commerce stays in Squarespace until you switch).\",\n \"Newsletter subscribers, form submissions, member accounts and blog comments.\",\n \"Scheduling (Acuity), donations, digital-download files and anything behind a login.\",\n \"Squarespace analytics and SEO history (search engines follow the redirects).\",\n ],\n },\n wordpress: {\n id: \"wordpress\",\n label: \"WordPress\",\n importer: \"wordpress\",\n notMoved: [\n \"Plugins and what they do: WooCommerce orders and customers, booking, membership, LMS and form plugins (their pages are imported as content; the functionality needs an OpenSpace block or a service).\",\n \"Comments, users and their roles, and custom post types other than pages and posts.\",\n \"Shortcodes and page-builder widgets without an OpenSpace equivalent (listed above).\",\n \"Draft and private content unless you pass the WordPress export (WXR) with `--export`.\",\n ...COMMON_NOT_MOVED,\n ],\n },\n wix: {\n id: \"wix\",\n label: \"Wix\",\n importer: \"url\",\n notMoved: [\n \"Wix apps: Stores, Bookings, Events, Members, Forum, Pricing Plans and Velo code (pages that show them are imported as content).\",\n \"Animations, scroll effects and strips' video backgrounds.\",\n ...COMMON_NOT_MOVED,\n ],\n },\n webflow: {\n id: \"webflow\",\n label: \"Webflow\",\n importer: \"url\",\n notMoved: [\n \"Interactions and animations, custom code embeds, and Webflow Ecommerce and Memberships.\",\n \"CMS collections other than blog-like posts are imported as pages (one per item).\",\n ...COMMON_NOT_MOVED,\n ],\n },\n framer: {\n id: \"framer\",\n label: \"Framer\",\n importer: \"url\",\n notMoved: [\n \"Animations, effects and code components (their text and images are imported where present in the HTML).\",\n ...COMMON_NOT_MOVED,\n ],\n },\n carrd: {\n id: \"carrd\",\n label: \"Carrd\",\n importer: \"url\",\n notMoved: [\"Carrd widgets and embeds (payments, forms' integrations).\", ...COMMON_NOT_MOVED],\n },\n shopify: {\n id: \"shopify\",\n label: \"Shopify\",\n importer: \"url\",\n notMoved: [\n \"Products, orders, customers and checkout (only the content pages and blog are imported).\",\n ...COMMON_NOT_MOVED,\n ],\n },\n ghost: {\n id: \"ghost\",\n label: \"Ghost\",\n importer: \"url\",\n notMoved: [\"Members, paid subscriptions and newsletters.\", ...COMMON_NOT_MOVED],\n },\n weebly: {\n id: \"weebly\",\n label: \"Weebly / Square Online\",\n importer: \"url\",\n notMoved: [\"Store, orders and apps.\", ...COMMON_NOT_MOVED],\n },\n godaddy: {\n id: \"godaddy\",\n label: \"GoDaddy Website Builder\",\n importer: \"url\",\n notMoved: [\"Online store, appointments and marketing tools.\", ...COMMON_NOT_MOVED],\n },\n jimdo: {\n id: \"jimdo\",\n label: \"Jimdo\",\n importer: \"url\",\n notMoved: [\"Store and apps.\", ...COMMON_NOT_MOVED],\n },\n hostinger: {\n id: \"hostinger\",\n label: \"Hostinger Website Builder\",\n importer: \"url\",\n notMoved: [\"Store, bookings and apps.\", ...COMMON_NOT_MOVED],\n },\n jekyll: {\n id: \"jekyll\",\n label: \"Jekyll (GitHub Pages)\",\n importer: \"github\",\n notMoved: [\n \"Jekyll plugins' build-time behaviour and theme code (what they put on your pages was imported).\",\n \"Comments (Disqus, giscus, utterances) and analytics settings.\",\n \"Files outside the site's pages, posts and the media they use.\",\n ],\n },\n hugo: {\n id: \"hugo\",\n label: \"Hugo\",\n importer: \"github\",\n notMoved: [\n \"Hugo shortcodes, taxonomies' extra pages and theme code (pages were read as they are published).\",\n ...COMMON_NOT_MOVED,\n ],\n },\n eleventy: {\n id: \"eleventy\",\n label: \"Eleventy\",\n importer: \"github\",\n notMoved: [\n \"Eleventy templates, filters and data files (pages were read as they are published).\",\n ...COMMON_NOT_MOVED,\n ],\n },\n github: {\n id: \"github\",\n label: \"GitHub Pages\",\n importer: \"github\",\n notMoved: [\"Scripts and anything built by JavaScript in the browser.\", ...COMMON_NOT_MOVED],\n },\n generic: {\n id: \"generic\",\n label: \"the original site\",\n importer: \"url\",\n notMoved: [\n \"Scripts, animations and anything rendered only by JavaScript (try `--render` for script-built pages).\",\n \"Server-side features: shops, logins, search, comments.\",\n ...COMMON_NOT_MOVED,\n ],\n },\n};\n\nexport function platformInfo(p: Platform | undefined): PlatformInfo {\n return PLATFORMS[p ?? \"squarespace\"];\n}\n\n/** \"Squarespace\", \"WordPress\", \"the original site\". */\nexport const platformLabel = (p: Platform | undefined) => platformInfo(p).label;\n\nexport interface Detection {\n platform: Platform;\n /** The generator meta tag, when there is one. */\n generator?: string;\n /** Why we think so (for the report and the CLI). */\n evidence: string[];\n /** WordPress: the REST API root advertised by the page (`<link rel=\"https://api.w.org/\">`). */\n wpApi?: string;\n}\n\nconst RULES: { platform: Platform; tests: [RegExp, string][] }[] = [\n {\n platform: \"squarespace\",\n tests: [\n [/<!-- This is Squarespace\\. -->/i, \"Squarespace comment\"],\n [/static1\\.squarespace\\.com|images\\.squarespace-cdn\\.com/i, \"Squarespace CDN\"],\n [/Static\\.SQUARESPACE_CONTEXT/, \"Squarespace context script\"],\n ],\n },\n {\n platform: \"wordpress\",\n tests: [\n [/\\/wp-content\\/(?:themes|plugins|uploads)\\//i, \"wp-content assets\"],\n [/\\/wp-includes\\//i, \"wp-includes assets\"],\n [/rel=[\"']https:\\/\\/api\\.w\\.org\\/[\"']/i, \"WordPress REST API link\"],\n [/class=[\"'][^\"']*\\bwp-block-/i, \"block editor markup\"],\n ],\n },\n {\n platform: \"wix\",\n tests: [\n [/static\\.wixstatic\\.com|static\\.parastorage\\.com/i, \"Wix static hosts\"],\n [/<meta[^>]+name=[\"']generator[\"'][^>]+Wix\\.com/i, \"Wix generator\"],\n [/id=[\"']SITE_CONTAINER[\"']|wix-thunderbolt|wixui-/i, \"Wix page markup\"],\n ],\n },\n {\n platform: \"webflow\",\n tests: [\n [/data-wf-(?:page|site)=/i, \"Webflow page attributes\"],\n [\n /(?:assets|uploads-ssl|cdn\\.prod)\\.website-files\\.com|assets-global\\.website-files\\.com/i,\n \"Webflow asset host\",\n ],\n [\n /<meta[^>]+content=[\"']Webflow[\"'][^>]*name=[\"']generator|name=[\"']generator[\"'][^>]+content=[\"']Webflow/i,\n \"Webflow generator\",\n ],\n ],\n },\n {\n platform: \"framer\",\n tests: [\n [/framerusercontent\\.com|framer\\.com\\/m\\//i, \"Framer asset host\"],\n [/<meta[^>]+name=[\"']generator[\"'][^>]+Framer/i, \"Framer generator\"],\n [/data-framer-(?:name|component-type|hydrate)/i, \"Framer markup\"],\n ],\n },\n {\n platform: \"carrd\",\n tests: [\n [/<meta[^>]+name=[\"']generator[\"'][^>]+Carrd/i, \"Carrd generator\"],\n [/carrd\\.co\\b/i, \"Carrd markup\"],\n ],\n },\n {\n platform: \"shopify\",\n tests: [\n [/cdn\\.shopify\\.com/i, \"Shopify CDN\"],\n [/Shopify\\.theme|shopify-section/i, \"Shopify theme markup\"],\n ],\n },\n {\n platform: \"ghost\",\n tests: [[/<meta[^>]+name=[\"']generator[\"'][^>]+Ghost/i, \"Ghost generator\"]],\n },\n {\n platform: \"weebly\",\n tests: [[/editmysite\\.com|weebly\\.com\\/(?:weebly|uploads)/i, \"Weebly asset host\"]],\n },\n {\n platform: \"godaddy\",\n tests: [\n [/img1\\.wsimg\\.com|<meta[^>]+Go Daddy Website Builder/i, \"GoDaddy Website Builder assets\"],\n ],\n },\n {\n platform: \"jimdo\",\n tests: [[/jimstatic\\.com|jimdo(?:free|site)?\\.com/i, \"Jimdo assets\"]],\n },\n {\n platform: \"hostinger\",\n tests: [\n [/zyrosite\\.com|<meta[^>]+generator[^>]+Hostinger|zyro\\.com/i, \"Hostinger/Zyro assets\"],\n ],\n },\n];\n\n/** The generator meta tag (`<meta name=\"generator\" content=\"WordPress 6.6.2\">`). */\nexport function generatorOf(html: string): string | undefined {\n const m =\n /<meta[^>]+name=[\"']generator[\"'][^>]*content=[\"']([^\"']+)[\"']/i.exec(html) ??\n /<meta[^>]+content=[\"']([^\"']+)[\"'][^>]*name=[\"']generator[\"']/i.exec(html);\n return m?.[1]?.trim();\n}\n\n/** Detect the platform from a home page's HTML (and optionally its response headers). */\nexport function detectPlatform(html: string, headers: Record<string, string> = {}): Detection {\n const generator = generatorOf(html);\n const h = Object.fromEntries(Object.entries(headers).map(([k, v]) => [k.toLowerCase(), v]));\n const wpApi =\n /<link[^>]+rel=[\"']https:\\/\\/api\\.w\\.org\\/[\"'][^>]*href=[\"']([^\"']+)[\"']/i.exec(html)?.[1] ??\n /<link[^>]+href=[\"']([^\"']+)[\"'][^>]*rel=[\"']https:\\/\\/api\\.w\\.org\\/[\"']/i.exec(html)?.[1] ??\n /<([^>]+)>;\\s*rel=\"https:\\/\\/api\\.w\\.org\\/\"/.exec(h.link ?? \"\")?.[1];\n const scores = new Map<Platform, string[]>();\n const add = (p: Platform, why: string) => scores.set(p, [...(scores.get(p) ?? []), why]);\n if (generator) {\n const g = generator.toLowerCase();\n const byGen: [string, Platform][] = [\n [\"wordpress\", \"wordpress\"],\n [\"wix\", \"wix\"],\n [\"webflow\", \"webflow\"],\n [\"framer\", \"framer\"],\n [\"carrd\", \"carrd\"],\n [\"ghost\", \"ghost\"],\n [\"squarespace\", \"squarespace\"],\n [\"shopify\", \"shopify\"],\n [\"go daddy\", \"godaddy\"],\n [\"jimdo\", \"jimdo\"],\n [\"hostinger\", \"hostinger\"],\n [\"zyro\", \"hostinger\"],\n [\"weebly\", \"weebly\"],\n [\"jekyll\", \"jekyll\"],\n [\"hugo\", \"hugo\"],\n [\"eleventy\", \"eleventy\"],\n ];\n for (const [needle, p] of byGen)\n if (g.includes(needle)) {\n add(p, `generator \"${generator}\"`);\n add(p, `generator \"${generator}\"`);\n }\n }\n if (wpApi) add(\"wordpress\", \"WordPress REST API link\");\n if (h[\"x-wix-request-id\"] || /wix/i.test(h.server ?? \"\")) add(\"wix\", \"Wix response headers\");\n if (h[\"x-powered-by\"]?.toLowerCase().includes(\"wordpress\") || h[\"x-pingback\"])\n add(\"wordpress\", \"WordPress response headers\");\n if (/squarespace/i.test(h.server ?? \"\")) add(\"squarespace\", \"Squarespace server header\");\n if (h[\"x-shopid\"] || h[\"x-shopify-stage\"]) add(\"shopify\", \"Shopify response headers\");\n for (const rule of RULES)\n for (const [re, why] of rule.tests) if (re.test(html)) add(rule.platform, why);\n let best: Platform = \"generic\";\n let bestN = 0;\n for (const [p, why] of scores) {\n // Squarespace sites can embed WordPress-looking markup (and vice versa): most evidence wins.\n if (why.length > bestN) {\n best = p;\n bestN = why.length;\n }\n }\n return {\n platform: best,\n ...(generator ? { generator } : {}),\n evidence: [...new Set(scores.get(best) ?? [])],\n ...(wpApi ? { wpApi } : {}),\n };\n}\n\n/** Accept the user's spelling of a platform (`--platform wix`). */\nexport function parsePlatform(s: string): Platform | undefined {\n const k = s\n .trim()\n .toLowerCase()\n .replace(/[^a-z]/g, \"\");\n if (k === \"url\" || k === \"html\" || k === \"other\" || k === \"any\") return \"generic\";\n return (Object.keys(PLATFORMS) as Platform[]).find((p) => p === k);\n}\n","/**\n * A Squarespace page's HTML → sections, blocks, header, navigation, footer and SEO metadata.\n * Handles 7.1 page sections (classic-editor rows and Fluid Engine grids, gallery and list\n * sections) and 7.0 layouts (one `.sqs-layout` per page, or index-page sections).\n */\nimport {\n attr,\n byClass,\n byTag,\n children,\n classes,\n classValue,\n closest,\n type Element,\n find,\n findAll,\n hasClass,\n innerHtml,\n isElement,\n jsonAttr,\n type Node,\n outerHtml,\n parseDocument,\n parseHtmlFragment,\n scriptText,\n text,\n} from \"../dom\";\nimport { bestIcon } from \"../html/icons\";\nimport { cleanImageUrl, imageFrom, parseBlock, stripTags, videoUrl } from \"./blocks\";\nimport type {\n SqBlock,\n SqCard,\n SqFluidItem,\n SqImage,\n SqNavItem,\n SqPlacement,\n SqRow,\n SqSection,\n SqSeo,\n} from \"./types\";\n\nexport interface ParsedPage {\n title: string;\n /** `og:title` / headline without the site-name suffix, when it can be told. */\n pageTitle?: string;\n seo: SqSeo;\n canonical?: string;\n lang?: string;\n bodyClasses: string[];\n sections: SqSection[];\n /**\n * A collection page (shop, blog): how many of `sections` come before the collection's own\n * list, so sections placed below it stay below it.\n */\n collectionAt?: number;\n footer: SqSection[];\n header: {\n siteTitle?: string;\n logo?: SqImage;\n nav: SqNavItem[];\n layout?: string;\n action?: { label: string; href: string };\n theme?: string;\n showSocial?: boolean;\n };\n social: string[];\n stylesheets: string[];\n inlineCss: string;\n customHeadCode?: string;\n /** Item pages: `<article>` metadata. */\n item?: {\n title?: string;\n date?: string;\n author?: string;\n bodyLayout?: Element;\n image?: SqImage;\n jsonLd: Record<string, unknown>[];\n };\n favicon?: string;\n /** Password screen or member sign-in instead of content. */\n locked?: \"password\" | \"members\";\n /** The squarespace version, when it can be told. */\n version?: \"7.0\" | \"7.1\";\n}\n\n// --- sections -----------------------------------------------------------------------------------\n\n/** Rows of a classic `.sqs-layout`; nested rows are flattened into their column. */\nexport function parseLayout(layout: Element): SqRow[] {\n const rows: SqRow[] = [];\n for (const row of children(layout).filter((e) => hasClass(e, \"sqs-row\")))\n rows.push(parseRow(row));\n // Some layouts (blog bodies from the JSON API) put blocks straight in the layout.\n const loose = children(layout).filter((e) => hasClass(e, \"sqs-block\"));\n if (loose.length) {\n const blocks = loose.map(parseBlock).filter((b): b is SqBlock => !!b);\n if (blocks.length) rows.push({ columns: [{ span: 12, blocks }] });\n }\n return expandImageCards(rows.filter((r) => r.columns.some((c) => c.blocks.length)));\n}\n\nfunction columnBlocks(col: Element): SqBlock[] {\n const out: SqBlock[] = [];\n for (const c of children(col)) {\n if (hasClass(c, \"sqs-block\")) {\n const b = parseBlock(c);\n if (b) out.push(b);\n } else if (hasClass(c, \"sqs-row\")) {\n for (const nested of parseRow(c).columns) out.push(...nested.blocks);\n } else out.push(...columnBlocks(c));\n }\n return out;\n}\n\n/** Image blocks with text beside them become their own two-column row (image | text). */\nexport function expandImageCards(rows: SqRow[]): SqRow[] {\n const out: SqRow[] = [];\n for (const row of rows) {\n const wide = row.columns.length === 1;\n let rest: SqBlock[] = [];\n const flush = () => {\n if (rest.length) out.push({ columns: [{ span: row.columns[0]?.span ?? 12, blocks: rest }] });\n rest = [];\n };\n if (!wide) {\n // In narrow columns the text goes under the image.\n out.push({\n columns: row.columns.map((c) => ({\n ...c,\n blocks: c.blocks.flatMap((b) =>\n b.kind === \"image\" && b.card ? [{ ...b, card: undefined }, ...cardBlocks(b.card)] : [b],\n ),\n })),\n });\n continue;\n }\n for (const b of row.columns[0]?.blocks ?? []) {\n if (b.kind !== \"image\" || !b.card) {\n rest.push(b);\n continue;\n }\n const image: SqBlock = { kind: \"image\", image: b.image, ...(b.href ? { href: b.href } : {}) };\n const words = cardBlocks(b.card);\n if (b.card.position === \"below\" || b.card.position === \"over\" || !words.length) {\n rest.push(image, ...words);\n continue;\n }\n flush();\n const img = { span: 6, blocks: [image] };\n const txt = { span: 6, blocks: words };\n out.push({ columns: b.card.position === \"left\" ? [txt, img] : [img, txt] });\n }\n flush();\n }\n return out;\n}\n\nfunction cardBlocks(card: NonNullable<Extract<SqBlock, { kind: \"image\" }>[\"card\"]>): SqBlock[] {\n const out: SqBlock[] = [];\n const sub = card.html ? stripTags(card.html) : \"\";\n // A short title above a sentence (Squarespace's usual card): the title is an eyebrow; a\n // subtitle written as a sentence reads at text size (as the card shows it), a short phrase\n // is a heading.\n const sentence = /[.!?…][\"”’)]?$/.test(sub) || sub.split(/\\s+/).length > 12;\n if (card.title && card.title.length <= 40 && sub && sub.length <= 160 && sentence)\n out.push({\n kind: \"text\",\n html: `<p class=\"os-eyebrow\">${escapeText(card.title)}</p>${card.html ?? \"\"}`,\n });\n else if (card.title && card.title.length <= 40 && sub && sub.length <= 160)\n out.push({ kind: \"heading\", text: sub, level: 2, eyebrow: card.title });\n else if (card.title || card.html)\n out.push({\n kind: \"text\",\n html: `${card.title ? `<h2>${escapeText(card.title)}</h2>` : \"\"}${card.html ?? \"\"}`,\n });\n if (card.button)\n out.push({\n kind: \"button\",\n label: card.button.label,\n href: card.button.href,\n style: \"primary\",\n });\n return out;\n}\n\nfunction parseRow(row: Element): SqRow {\n const columns = children(row)\n .filter((e) => classes(e).some((c) => /^sqs-col-\\d+$/.test(c)))\n .map((col) => {\n const span = Number(classValue(col, \"span-\") ?? classValue(col, \"sqs-col-\") ?? 12);\n return {\n span: Number.isFinite(span) && span > 0 ? Math.min(12, span) : 12,\n blocks: columnBlocks(col),\n };\n });\n if (!columns.length) return { columns: [{ span: 12, blocks: columnBlocks(row) }] };\n return { columns };\n}\n\n/** `.fe-block-<id> { grid-area: r1/c1/r2/c2; z-index: n }`, mobile first then desktop. */\nexport function parseFluidCss(css: string): {\n placements: Map<string, { d?: SqPlacement; m?: SqPlacement }>;\n rows: { d?: number; m?: number };\n} {\n const placements = new Map<string, { d?: SqPlacement; m?: SqPlacement }>();\n const rows: { d?: number; m?: number } = {};\n const desktopAt = css.search(/@media\\s*\\(\\s*min-width:\\s*768px\\s*\\)/);\n const ruleRe = /\\.fe-block-([A-Za-z0-9_-]+)\\s*\\{([^{}]*?grid-area\\s*:\\s*([^;]+);[^{}]*)/g;\n for (const m of css.matchAll(ruleRe)) {\n const id = m[1] as string;\n const area = (m[3] as string).split(\"/\").map((s) => Number(s.trim()));\n if (area.length !== 4 || area.some((n) => !Number.isFinite(n))) continue;\n const [r1, c1, r2, c2] = area as [number, number, number, number];\n const z = Number(/z-index\\s*:\\s*(\\d+)/.exec(m[2] as string)?.[1]);\n // Columns include a gutter track on each side: line 2 is the first content column.\n const p: SqPlacement = {\n x: Math.max(1, c1 - 1),\n y: Math.max(1, r1),\n w: Math.max(1, c2 - c1),\n h: Math.max(1, r2 - r1),\n ...(Number.isFinite(z) && z > 0 ? { z } : {}),\n };\n const bp = desktopAt >= 0 && (m.index ?? 0) > desktopAt ? \"d\" : \"m\";\n const entry = placements.get(id) ?? {};\n entry[bp] = p;\n placements.set(id, entry);\n }\n for (const m of css.matchAll(/grid-template-rows\\s*:\\s*repeat\\(\\s*(\\d+)\\s*,/g)) {\n const bp = desktopAt >= 0 && (m.index ?? 0) > desktopAt ? \"d\" : \"m\";\n rows[bp] = Number(m[1]);\n }\n return { placements, rows };\n}\n\nfunction styleText(el: Element): string {\n return findAll(el, byTag(\"style\"))\n .map((s) => scriptText(s))\n .join(\"\\n\");\n}\n\nfunction fluidSection(fluid: Element, css: string): SqSection[\"layout\"] {\n const { placements, rows } = parseFluidCss(css);\n const items: SqFluidItem[] = [];\n for (const fe of children(fluid).filter((e) => hasClass(e, \"fe-block\"))) {\n const id = classes(fe)\n .find((c) => c.startsWith(\"fe-block-\"))\n ?.slice(\"fe-block-\".length);\n const blockEl = find(fe, (e) => hasClass(e, \"sqs-block\"));\n const block = blockEl ? parseBlock(blockEl) : undefined;\n if (!block) continue;\n const p = id ? placements.get(id) : undefined;\n items.push({ block, ...(p?.d ? { d: p.d } : {}), ...(p?.m ? { m: p.m } : {}) });\n }\n return {\n mode: \"fluid\",\n items,\n ...(rows.d ? { rows: rows.d } : {}),\n ...(rows.m ? { mobileRows: rows.m } : {}),\n };\n}\n\nfunction gallerySectionBlock(section: Element): SqBlock | undefined {\n const cls = findAll(section, (e) =>\n classes(e).some((c) => /^gallery-(?:grid|masonry|slideshow|reel|strips|fullscreen)/.test(c)),\n )\n .flatMap(classes)\n .join(\" \");\n const seen = new Set<string>();\n const images: (SqImage & { caption?: string })[] = [];\n for (const img of findAll(section, byTag(\"img\"))) {\n if (closest(img, byClass(\"section-background\"))) continue;\n const im = imageFrom(img);\n if (!im || seen.has(im.url)) continue;\n seen.add(im.url);\n const fig = closest(img, (e) => e.tagName === \"figure\");\n const caption = fig ? text(find(fig, byTag(\"figcaption\"))) : \"\";\n images.push({ ...im, ...(caption ? { caption } : {}) });\n }\n if (!images.length) return undefined;\n const layout = /slideshow|fullscreen/.test(cls)\n ? \"slideshow\"\n : /reel/.test(cls)\n ? \"carousel\"\n : /strips/.test(cls)\n ? \"strips\"\n : /masonry/.test(cls)\n ? \"masonry\"\n : \"grid\";\n return { kind: \"gallery\", images, layout };\n}\n\nfunction listSectionBlocks(section: Element): SqBlock[] {\n const out: SqBlock[] = [];\n const title = find(section, (e) => classes(e).some((c) => c === \"list-section-title\"));\n if (title && text(title)) out.push({ kind: \"text\", html: innerHtml(title) });\n const items: SqCard[] = [];\n for (const li of findAll(section, (e) => classes(e).includes(\"list-item\"), { deep: false })) {\n const t = text(find(li, (e) => classes(e).some((c) => c === \"list-item-content__title\")));\n const desc = find(li, (e) => classes(e).some((c) => c === \"list-item-content__description\"));\n const img = find(li, byTag(\"img\"));\n const btn = find(\n li,\n (e) => e.tagName === \"a\" && classes(e).some((c) => c.startsWith(\"list-item-content__button\")),\n );\n const image = img ? imageFrom(img) : undefined;\n if (!t && !image) continue;\n items.push({\n title: t || \"Untitled\",\n ...(desc && text(desc) ? { html: innerHtml(desc) } : {}),\n ...(image ? { image } : {}),\n ...(btn && attr(btn, \"href\")\n ? { href: attr(btn, \"href\"), linkLabel: text(btn) || undefined }\n : {}),\n });\n }\n if (items.length) out.push({ kind: \"cards\", items });\n return out;\n}\n\n/** A 7.1 `<section class=\"page-section\">` (or 7.0 index section) → `SqSection`. */\nexport function parseSection(section: Element): SqSection | undefined {\n const styles = jsonAttr<Record<string, unknown>>(section, \"data-current-styles\") ?? {};\n const theme = attr(section, \"data-section-theme\") ?? String(styles.sectionTheme ?? \"\");\n const out: SqSection = { theme, layout: { mode: \"classic\", rows: [] } };\n const id = attr(section, \"data-section-id\") ?? attr(section, \"id\");\n if (id) out.id = id;\n const height = (classValue(section, \"section-height--\") ??\n String(styles.sectionHeight ?? \"\").replace(\"section-height--\", \"\")) as SqSection[\"height\"] | \"\";\n if (height === \"small\" || height === \"medium\" || height === \"large\" || height === \"custom\")\n out.height = height;\n const custom = Number(styles.customSectionHeight);\n if (out.height === \"custom\" && Number.isFinite(custom) && custom > 0)\n out.customHeight = Math.min(100, Math.round(custom));\n const width =\n classValue(section, \"content-width--\") ??\n String(styles.contentWidth ?? \"\").replace(\"content-width--\", \"\");\n if (width === \"narrow\" || width === \"medium\" || width === \"wide\" || width === \"full\")\n out.contentWidth = width;\n const align = classValue(section, \"horizontal-alignment--\");\n if (align === \"left\" || align === \"center\" || align === \"right\") out.align = align;\n\n // Background: image from the styles JSON or the section-background <img>; overlay opacity.\n const bgEl = find(\n section,\n (e) => hasClass(e, \"section-background\") || hasClass(e, \"index-section-image\"),\n );\n const bgImg = bgEl ? find(bgEl, byTag(\"img\")) : undefined;\n const bgJson = styles.backgroundImage as Record<string, unknown> | undefined;\n let bg: SqImage | undefined = bgImg ? imageFrom(bgImg) : undefined;\n if (!bg && bgJson && typeof bgJson.assetUrl === \"string\") {\n const size = /^(\\d+)x(\\d+)$/.exec(String(bgJson.originalSize ?? \"\"));\n bg = {\n url: cleanImageUrl(bgJson.assetUrl),\n alt: \"\",\n ...(size ? { width: Number(size[1]), height: Number(size[2]) } : {}),\n };\n }\n if (!bg && attr(section, \"data-image\"))\n bg = { url: cleanImageUrl(attr(section, \"data-image\") as string), alt: \"\" };\n const overlay = Number(styles.imageOverlayOpacity);\n const video = find(\n section,\n (e) => hasClass(e, \"section-background-video\") || !!attr(e, \"data-config-video\"),\n );\n if (bg || video) {\n out.background = {\n ...(bg ? { image: { ...bg, alt: \"\" } } : {}),\n ...(Number.isFinite(overlay) && overlay > 0 ? { overlay } : {}),\n ...(video ? { video: attr(video, \"data-config-url\") ?? \"video\" } : {}),\n };\n }\n\n const content =\n find(section, (e) => hasClass(e, \"content-wrapper\") || hasClass(e, \"index-section-wrapper\")) ??\n section;\n const fluid = find(content, (e) => hasClass(e, \"fluid-engine\"));\n if (fluid) {\n const layout = fluidSection(fluid, styleText(section));\n out.layout = layout;\n return layout.mode === \"fluid\" && (layout.items.length || out.background) ? out : undefined;\n }\n const sectionCls = classes(section).join(\" \");\n if (\n /gallery-section/.test(sectionCls) ||\n find(section, (e) =>\n classes(e).some((c) =>\n /^gallery-(?:grid|masonry|slideshow|reel|strips)-wrapper$|^gallery-(?:grid|masonry|slideshow|reel|strips)$/.test(\n c,\n ),\n ),\n )\n ) {\n const block = gallerySectionBlock(section);\n if (block)\n out.layout = { mode: \"classic\", rows: [{ columns: [{ span: 12, blocks: [block] }] }] };\n return block ? out : undefined;\n }\n if (\n find(section, (e) =>\n classes(e).some((c) => c === \"user-items-list\" || c === \"user-items-list-section\"),\n )\n ) {\n const blocks = listSectionBlocks(section);\n out.layout = {\n mode: \"classic\",\n rows: blocks.length ? [{ columns: [{ span: 12, blocks }] }] : [],\n };\n return blocks.length ? out : undefined;\n }\n const layouts = findAll(content, (e) => hasClass(e, \"sqs-layout\"), { deep: false });\n const rows = layouts.flatMap(parseLayout);\n out.layout = { mode: \"classic\", rows };\n return rows.length || out.background ? out : undefined;\n}\n\n// --- header, nav, footer --------------------------------------------------------------------------\n\nfunction navFrom(root: Element): SqNavItem[] {\n // 7.1: the first (desktop) header-nav-list.\n const list = find(root, (e) => hasClass(e, \"header-nav-list\"));\n if (list) {\n const out: SqNavItem[] = [];\n for (const item of children(list).filter((e) => hasClass(e, \"header-nav-item\"))) {\n if (hasClass(item, \"header-nav-item--folder\")) {\n const label = text(find(item, (e) => hasClass(e, \"header-nav-folder-title\"))) || \"Menu\";\n const items = findAll(item, (e) => hasClass(e, \"header-nav-folder-item\"))\n .map((fi) => find(fi, byTag(\"a\")))\n .filter((a): a is Element => !!a && !!attr(a, \"href\"))\n .map((a) => ({\n label: text(a),\n href: attr(a, \"href\") as string,\n ...(attr(a, \"target\") === \"_blank\" ? { newTab: true } : {}),\n }))\n .filter((x) => x.label);\n out.push({ type: \"folder\", label, items });\n continue;\n }\n const a = find(item, byTag(\"a\"));\n if (!a || !attr(a, \"href\") || !text(a)) continue;\n out.push({\n type: \"link\",\n label: text(a),\n href: attr(a, \"href\") as string,\n ...(attr(a, \"target\") === \"_blank\" ? { newTab: true } : {}),\n });\n }\n return out;\n }\n // 7.0: #mainNavigation / .main-nav / the first <nav>.\n const nav =\n find(\n root,\n (e) =>\n attr(e, \"id\") === \"mainNavigation\" || hasClass(e, \"main-nav\") || attr(e, \"id\") === \"topNav\",\n ) ?? find(root, byTag(\"nav\"));\n if (!nav) return [];\n const out: SqNavItem[] = [];\n const top = findAll(nav, (e) => e.tagName === \"a\" || hasClass(e, \"folder\"), { deep: false });\n for (const el of top) {\n if (hasClass(el, \"folder\")) {\n const label =\n text(find(el, (e) => hasClass(e, \"folder-toggle-label\") || hasClass(e, \"folder-toggle\"))) ||\n \"Menu\";\n const items = findAll(el, byTag(\"a\"))\n .filter((a) => attr(a, \"href\") && text(a) && text(a) !== label)\n .map((a) => ({ label: text(a), href: attr(a, \"href\") as string }));\n out.push({ type: \"folder\", label, items });\n } else if (attr(el, \"href\") && text(el))\n out.push({ type: \"link\", label: text(el), href: attr(el, \"href\") as string });\n }\n return out;\n}\n\nconst SOCIAL_HOSTS =\n /(instagram|facebook|twitter|x\\.com|threads|bsky|bluesky|mastodon|linkedin|youtube|tiktok|pinterest|github|spotify|soundcloud|bandcamp|vimeo|behance|dribbble|substack|patreon|yelp|tripadvisor)/i;\n\nfunction socialLinks(root: Element): string[] {\n const out = new Set<string>();\n for (const a of findAll(root, (e) => e.tagName === \"a\" && !!attr(e, \"href\"))) {\n const href = attr(a, \"href\") as string;\n const inSocial = closest(a, (e) => classes(e).some((c) => /social/.test(c)));\n if (\n inSocial &&\n (/^https?:\\/\\//.test(href) || href.startsWith(\"mailto:\")) &&\n (SOCIAL_HOSTS.test(href) || href.startsWith(\"mailto:\"))\n )\n out.add(href);\n }\n return [...out];\n}\n\nfunction meta(head: Element, key: string): string | undefined {\n const m = find(\n head,\n (e) =>\n e.tagName === \"meta\" &&\n (attr(e, \"property\") === key || attr(e, \"name\") === key || attr(e, \"itemprop\") === key),\n );\n const v = m ? attr(m, \"content\")?.trim() : undefined;\n return v || undefined;\n}\n\n/** Parse a full Squarespace page. */\nexport function parsePage(html: string): ParsedPage {\n const root = parseDocument(html);\n const head = find(root, byTag(\"head\")) ?? root;\n const body = find(root, byTag(\"body\")) ?? root;\n const bodyClasses = classes(body);\n const title = text(find(head, byTag(\"title\")));\n const ogImage = meta(head, \"og:image\");\n const description = meta(head, \"description\") ?? meta(head, \"og:description\");\n const robots = meta(head, \"robots\");\n const canonicalEl = find(head, (e) => e.tagName === \"link\" && attr(e, \"rel\") === \"canonical\");\n const seo: SqSeo = {\n ...(title ? { title } : {}),\n ...(description ? { description } : {}),\n ...(ogImage ? { image: { url: cleanImageUrl(ogImage), alt: \"\" } } : {}),\n ...(robots && /noindex/i.test(robots) ? { noindex: true } : {}),\n };\n\n // Header.\n const headerEl =\n find(\n body,\n (e) => e.tagName === \"header\" && (attr(e, \"id\") === \"header\" || hasClass(e, \"header\")),\n ) ??\n find(body, (e) => e.tagName === \"header\") ??\n find(body, (e) => attr(e, \"id\") === \"header\");\n const headerStyles = headerEl\n ? (jsonAttr<Record<string, unknown>>(headerEl, \"data-current-styles\") ?? {})\n : {};\n const logoImg = headerEl\n ? find(\n headerEl,\n (e) =>\n e.tagName === \"img\" &&\n !!closest(e, (p) =>\n classes(p).some(\n (c) =>\n c === \"header-title-logo\" ||\n c === \"logo-image\" ||\n c === \"site-logo\" ||\n c === \"logo\",\n ),\n ),\n )\n : undefined;\n const action = headerStyles.action as { href?: string; buttonText?: string } | undefined;\n const headerActionLink = headerEl\n ? find(\n headerEl,\n (e) =>\n e.tagName === \"a\" &&\n classes(e).some((c) => c.startsWith(\"header-actions-action--cta\") || c === \"btn\"),\n )\n : undefined;\n const actionHref =\n action?.href ?? (headerActionLink ? attr(headerActionLink, \"href\") : undefined);\n const actionLabel = action?.buttonText ?? (headerActionLink ? text(headerActionLink) : undefined);\n const siteTitle = headerEl\n ? text(\n find(\n headerEl,\n (e) =>\n attr(e, \"id\") === \"site-title\" ||\n hasClass(e, \"header-title-text\") ||\n hasClass(e, \"site-title\"),\n ),\n ) || undefined\n : undefined;\n\n // Sections (7.1) or layouts (7.0).\n const footerEl = find(\n body,\n (e) =>\n e.tagName === \"footer\" || attr(e, \"id\") === \"footer-sections\" || attr(e, \"id\") === \"footer\",\n );\n const inFooter = (e: Element) => !!footerEl && !!closest(e, (p) => p === footerEl);\n const inHeader = (e: Element) => !!headerEl && !!closest(e, (p) => p === headerEl);\n const pageSections = findAll(\n body,\n (e) => e.tagName === \"section\" && hasClass(e, \"page-section\"),\n { deep: false },\n ).filter((e) => !inFooter(e));\n const indexSections = findAll(body, (e) => hasClass(e, \"index-section\"), { deep: false }).filter(\n (e) => !inFooter(e),\n );\n let sections: SqSection[] = [];\n let version: ParsedPage[\"version\"];\n let collectionAt: number | undefined;\n if (pageSections.length) {\n version = \"7.1\";\n for (const el of pageSections) {\n // The collection's own list (a store grid, a blog list) sits in a section of its own.\n if (\n collectionAt === undefined &&\n find(el, (e) =>\n /(?:^|\\s)(?:product-list|ProductList|blog-list|blog-basic-grid|blog-side-by-side|blog-alternating|blog-single-column|blog-masonry|events-list|eventlist|collection-content-wrapper)(?:\\s|$|-)/.test(\n attr(e, \"class\") ?? \"\",\n ),\n )\n )\n collectionAt = sections.length;\n const sec = parseSection(el);\n if (sec) sections.push(sec);\n }\n } else if (indexSections.length) {\n version = \"7.0\";\n sections = indexSections.map(parseSection).filter((s): s is SqSection => !!s);\n }\n // Item pages and 7.0 pages: the main layout.\n const article = find(\n body,\n (e) =>\n e.tagName === \"article\" || hasClass(e, \"blog-item-wrapper\") || hasClass(e, \"ProductItem\"),\n );\n const isItem = bodyClasses.includes(\"view-item\");\n if (!sections.length || isItem) {\n const main =\n find(body, (e) => attr(e, \"data-content-field\") === \"main-content\" && !inHeader(e)) ??\n find(body, (e) => attr(e, \"id\") === \"content\" || hasClass(e, \"main-content\")) ??\n body;\n const layouts = findAll(\n main,\n (e) => hasClass(e, \"sqs-layout\") && !inFooter(e) && !inHeader(e),\n { deep: false },\n );\n if (!isItem && layouts.length) {\n version ??= \"7.0\";\n const rows = layouts.flatMap(parseLayout);\n if (rows.length) sections = [{ theme: \"\", layout: { mode: \"classic\", rows } }];\n }\n }\n // 7.0 page banners (the page's main image with its description) open the page as a hero.\n if (!isItem && !pageSections.length) {\n const banner = bannerSection(body, (e) => inHeader(e) || inFooter(e));\n if (banner) sections = [banner, ...sections];\n }\n\n // Footer sections.\n let footer: SqSection[] = [];\n if (footerEl) {\n const fs = findAll(footerEl, (e) => e.tagName === \"section\" && hasClass(e, \"page-section\"), {\n deep: false,\n });\n if (fs.length) footer = fs.map(parseSection).filter((s): s is SqSection => !!s);\n else {\n // 7.0: the pre-footer blocks (often the newsletter), the site info line, footer blocks.\n const pre = find(\n body,\n (e) => (attr(e, \"id\") === \"preFooter\" || hasClass(e, \"pre-footer\")) && !inFooter(e),\n );\n const rows = [\n ...(pre\n ? findAll(pre, (e) => hasClass(e, \"sqs-layout\"), { deep: false }).flatMap(parseLayout)\n : []),\n ...siteInfoRows(footerEl),\n ...findAll(footerEl, (e) => hasClass(e, \"sqs-layout\"), { deep: false }).flatMap(\n parseLayout,\n ),\n ];\n if (rows.length) footer = [{ theme: \"\", layout: { mode: \"classic\", rows } }];\n }\n footer = footer.map(withoutSquarespaceCredit).filter((s) => sectionHasBlocks(s));\n }\n\n // Item metadata.\n let item: ParsedPage[\"item\"];\n const jsonLd = findAll(\n root,\n (e) => e.tagName === \"script\" && attr(e, \"type\") === \"application/ld+json\",\n )\n .map((s) => {\n try {\n return JSON.parse(scriptText(s)) as Record<string, unknown>;\n } catch {\n return undefined;\n }\n })\n .filter((x): x is Record<string, unknown> => !!x);\n if (isItem) {\n const scope = article ?? body;\n const time = find(scope, (e) => e.tagName === \"time\" && !!attr(e, \"datetime\"));\n const bodyLayout =\n find(\n scope,\n (e) =>\n hasClass(e, \"e-content\") ||\n attr(e, \"itemprop\") === \"articleBody\" ||\n hasClass(e, \"blog-item-content\"),\n ) ?? find(scope, (e) => hasClass(e, \"sqs-layout\"));\n const headline = text(\n find(\n scope,\n (e) =>\n attr(e, \"itemprop\") === \"headline\" ||\n hasClass(e, \"entry-title\") ||\n hasClass(e, \"ProductItem-details-title\") ||\n hasClass(e, \"eventitem-title\") ||\n e.tagName === \"h1\",\n ),\n );\n const author =\n meta(head, \"author\") ??\n meta(head, \"article:author\") ??\n (text(find(scope, (e) => hasClass(e, \"blog-author-name\") || hasClass(e, \"author-name\"))) ||\n undefined);\n const datePublished =\n meta(head, \"datePublished\") ?? (time ? attr(time, \"datetime\") : undefined);\n item = {\n ...(headline ? { title: headline } : {}),\n ...(datePublished ? { date: datePublished } : {}),\n ...(author ? { author } : {}),\n ...(bodyLayout ? { bodyLayout } : {}),\n ...(ogImage ? { image: { url: cleanImageUrl(ogImage), alt: \"\" } } : {}),\n jsonLd,\n };\n }\n\n const stylesheets = findAll(head, (e) => e.tagName === \"link\" && attr(e, \"rel\") === \"stylesheet\")\n .map((l) => attr(l, \"href\") ?? \"\")\n .filter((h) => /site\\.css|static\\.css/.test(h));\n const inlineCss = findAll(head, byTag(\"style\"))\n .map(scriptText)\n .filter((s) => /--[a-zA-Z]+-hsl|font-font-family|siteBackgroundColor/.test(s))\n .join(\"\\n\");\n\n // Code injection: anything after Squarespace's own headers.\n let customHeadCode: string | undefined;\n const marker = html.indexOf(\"<!-- End of Squarespace Headers -->\");\n const headEnd = html.indexOf(\"</head>\");\n if (marker >= 0 && headEnd > marker) {\n const code = html.slice(marker + \"<!-- End of Squarespace Headers -->\".length, headEnd).trim();\n if (/<(?:script|style|link|meta|noscript|iframe)/i.test(code)) customHeadCode = code;\n }\n const passwordForm = find(\n body,\n (e) =>\n hasClass(e, \"sqs-password-page\") ||\n attr(e, \"id\") === \"password-page\" ||\n hasClass(e, \"lock-screen\"),\n );\n const membersGate = find(body, (e) =>\n classes(e).some((c) => /member-area|members-only|sqs-member/.test(c)),\n );\n const favicon = bestIcon(\n head,\n attr(canonicalEl, \"href\") ?? meta(head, \"og:url\") ?? \"https://images.squarespace-cdn.com/\",\n );\n const lang = attr(root, \"lang\");\n const ogTitle = meta(head, \"og:title\");\n\n return {\n title,\n ...(ogTitle ? { pageTitle: ogTitle.replace(/\\s+[—–|-]\\s+[^—–|]+$/, \"\").trim() } : {}),\n seo,\n ...(canonicalEl && attr(canonicalEl, \"href\") ? { canonical: attr(canonicalEl, \"href\") } : {}),\n ...(lang ? { lang } : {}),\n bodyClasses,\n sections,\n ...(collectionAt !== undefined ? { collectionAt } : {}),\n footer,\n header: {\n ...(siteTitle ? { siteTitle } : {}),\n ...(logoImg && imageFrom(logoImg) ? { logo: imageFrom(logoImg) } : {}),\n nav: headerEl ? navFrom(headerEl) : navFrom(body),\n ...(typeof headerStyles.layout === \"string\" ? { layout: headerStyles.layout } : {}),\n ...(actionHref && actionLabel\n ? { action: { label: actionLabel.trim(), href: actionHref } }\n : {}),\n ...(headerEl && attr(headerEl, \"data-section-theme\")\n ? { theme: attr(headerEl, \"data-section-theme\") }\n : {}),\n ...(typeof headerStyles.showSocial === \"boolean\"\n ? { showSocial: headerStyles.showSocial }\n : {}),\n },\n social: socialLinks(body),\n stylesheets,\n inlineCss,\n ...(customHeadCode ? { customHeadCode } : {}),\n ...(item ? { item } : {}),\n ...(favicon ? { favicon } : {}),\n ...(passwordForm\n ? { locked: \"password\" as const }\n : membersGate\n ? { locked: \"members\" as const }\n : {}),\n ...(version ? { version } : {}),\n };\n}\n\n/** The 7.0 banner: the page's main image with its description, as a hero section. */\nfunction bannerSection(body: Element, skip: (e: Element) => boolean): SqSection | undefined {\n const el = find(\n body,\n (e) =>\n !skip(e) &&\n (hasClass(e, \"banner-thumbnail-wrapper\") ||\n attr(e, \"id\") === \"bannerImage\" ||\n hasClass(e, \"banner-image\") ||\n (attr(e, \"data-content-field\") === \"main-image\" && e.tagName !== \"img\")),\n );\n if (!el) return undefined;\n const img = find(el, byTag(\"img\"));\n const image = img ? imageFrom(img) : undefined;\n const desc =\n find(el, (e) => hasClass(e, \"desc-wrapper\") || hasClass(e, \"page-desc\")) ??\n find(body, (e) => attr(e, \"data-content-field\") === \"description\" && !skip(e));\n const blocks: SqBlock[] = [];\n if (desc) {\n const paras = children(desc).filter((p) => text(p));\n const links = paras.filter(\n (p) => (find(p, byTag(\"a\")) && text(find(p, byTag(\"a\"))) === text(p)) || p.tagName === \"a\",\n );\n const words = paras.filter((p) => !links.includes(p));\n const strong =\n words.find((p) => /^h[1-4]$/.test(p.tagName)) ??\n words.find((p) => !!find(p, (x) => x.tagName === \"strong\" || x.tagName === \"b\")) ??\n words[words.length - 1];\n const before = strong ? words.slice(0, words.indexOf(strong)) : [];\n const after = strong ? words.slice(words.indexOf(strong) + 1) : [];\n if (strong)\n blocks.push({\n kind: \"heading\",\n text: text(strong),\n level: 2,\n ...(before.length === 1 && text(before[0] as Element).length <= 60\n ? { eyebrow: text(before[0] as Element) }\n : {}),\n ...(after.length && after.map((p) => text(p)).join(\" \").length <= 280\n ? { subheading: after.map((p) => text(p)).join(\" \") }\n : {}),\n align: \"center\",\n });\n links.forEach((p, i) => {\n const a = p.tagName === \"a\" ? p : (find(p, byTag(\"a\")) as Element);\n const href = attr(a, \"href\");\n if (href)\n blocks.push({\n kind: \"button\",\n label: text(a),\n href,\n style: i === 0 ? \"primary\" : \"secondary\",\n });\n });\n }\n if (!image && !blocks.length) return undefined;\n return {\n theme: \"\",\n ...(image ? { background: { image: { ...image, alt: \"\" }, overlay: 0.3 } } : {}),\n height: \"large\",\n align: \"center\",\n role: \"hero\",\n layout: { mode: \"classic\", rows: blocks.length ? [{ columns: [{ span: 12, blocks }] }] : [] },\n };\n}\n\n/** 7.0 footers show the business address, phone and email from site settings. */\nfunction siteInfoRows(footer: Element): SqRow[] {\n const parts = [\"site-address\", \"site-phone\", \"site-email\"]\n .map((c) => find(footer, (e) => hasClass(e, c)))\n .filter((e): e is Element => !!e && !!text(e));\n if (!parts.length) return [];\n const html = parts\n .map((e) => {\n const t = escapeText(text(e));\n if (hasClass(e, \"site-email\")) return `<a href=\"mailto:${t}\">${t}</a>`;\n if (hasClass(e, \"site-phone\")) return `<a href=\"tel:${t.replace(/[^\\d+]/g, \"\")}\">${t}</a>`;\n return t;\n })\n .join(\" · \");\n return [{ columns: [{ span: 12, blocks: [{ kind: \"text\", html: `<p>${html}</p>` }] }] }];\n}\n\nconst CREDIT = /^\\s*(?:Powered by|Built with|Made with)\\s+Squarespace\\.?\\s*$/i;\n\nfunction withoutSquarespaceCredit(s: SqSection): SqSection {\n const strip = (b: SqBlock): SqBlock =>\n b.kind === \"text\"\n ? {\n ...b,\n html: b.html\n .replace(\n /(?:<br\\s*\\/?>\\s*)*(?:Made|Powered|Built) with\\s*(?:<a\\b[^>]*>\\s*)?Squarespace\\.?(?:\\s*<\\/a>)?/gi,\n \"\",\n )\n .replace(/<p\\b[^>]*>([\\s\\S]*?)<\\/p>/gi, (p, inner: string) =>\n CREDIT.test(stripTags(inner)) || !stripTags(inner) ? \"\" : p,\n ),\n }\n : b;\n const keep = (b: SqBlock) =>\n !(b.kind === \"text\" && (CREDIT.test(stripTags(b.html)) || !stripTags(b.html)));\n if (s.layout.mode === \"fluid\")\n return {\n ...s,\n layout: {\n ...s.layout,\n items: s.layout.items\n .map((i) => ({ ...i, block: strip(i.block) }))\n .filter((i) => keep(i.block)),\n },\n };\n return {\n ...s,\n layout: {\n mode: \"classic\",\n rows: s.layout.rows.map((r) => ({\n columns: r.columns.map((c) => ({ ...c, blocks: c.blocks.map(strip).filter(keep) })),\n })),\n },\n };\n}\n\nfunction sectionHasBlocks(s: SqSection): boolean {\n return s.layout.mode === \"fluid\"\n ? s.layout.items.length > 0\n : s.layout.rows.some((r) => r.columns.some((c) => c.blocks.length));\n}\n\n/** Sections of an HTML fragment that is a Squarespace layout (item bodies from JSON or WXR). */\nexport function sectionsFromLayoutHtml(html: string): SqSection[] {\n const root = parseHtmlFragment(html);\n const layouts = findAll(root, (e) => hasClass(e, \"sqs-layout\"), { deep: false });\n const rows = layouts.length ? layouts.flatMap(parseLayout) : [];\n if (rows.length) return [{ theme: \"\", layout: { mode: \"classic\", rows } }];\n // Plain HTML (WordPress export, simple bodies): one text block, images pulled out.\n return plainHtmlSections(root);\n}\n\n/** Plain HTML → text blocks split around images, iframes (video) and blockquotes. */\nexport function plainHtmlSections(root: Element): SqSection[] {\n const blocks: SqBlock[] = [];\n let buffer: string[] = [];\n const flush = () => {\n const html = buffer.join(\"\").trim();\n buffer = [];\n if (html && text(parseHtmlFragment(html))) blocks.push({ kind: \"text\", html });\n };\n const visit = (nodes: readonly Node[]) => {\n for (const node of nodes) {\n if (!isElement(node)) {\n const v = (node as { value?: string }).value;\n if (node.nodeName === \"#text\" && v?.trim()) buffer.push(escapeText(v));\n continue;\n }\n const el = node;\n const img = el.tagName === \"img\" ? el : undefined;\n const onlyImg =\n !img && [\"p\", \"figure\", \"div\", \"a\"].includes(el.tagName) && !text(el)\n ? find(el, byTag(\"img\"))\n : undefined;\n const iframe =\n el.tagName === \"iframe\" ? el : !text(el) ? find(el, byTag(\"iframe\")) : undefined;\n if (img || onlyImg) {\n flush();\n const im = imageFrom((img ?? onlyImg) as Element);\n const caption = text(find(el, byTag(\"figcaption\")));\n const link = el.tagName === \"a\" ? attr(el, \"href\") : undefined;\n if (im)\n blocks.push({\n kind: \"image\",\n image: im,\n ...(caption ? { caption } : {}),\n ...(link && !/\\.(?:jpe?g|png|gif|webp)(?:\\?|$)/i.test(link) ? { href: link } : {}),\n });\n } else if (iframe) {\n flush();\n const src = attr(iframe, \"src\") ?? attr(iframe, \"data-src\") ?? \"\";\n const v = videoUrl(src);\n if (v) blocks.push({ kind: \"video\", url: v });\n else if (src) blocks.push({ kind: \"embed\", url: src });\n } else if (el.tagName === \"div\" && !hasClass(el, \"sqs-html-content\")) {\n visit(el.childNodes);\n } else buffer.push(outerHtml(el));\n }\n };\n visit(root.childNodes);\n flush();\n return blocks.length\n ? [{ theme: \"\", layout: { mode: \"classic\", rows: [{ columns: [{ span: 12, blocks }] }] } }]\n : [];\n}\n\nconst escapeText = (s: string) =>\n s.replace(/&/g, \"&\").replace(/</g, \"<\").replace(/>/g, \">\");\n","/**\n * A WordPress export (WXR) — WordPress's own Tools → Export, or Squarespace's blog export\n * (Settings → Import & Export → Export → WordPress): RSS 2.0 +\n * `wp:`, `content:`, `dc:` and `excerpt:` namespaces) file. It is the most faithful source for\n * blog posts — it includes drafts, full bodies, authors, categories and tags.\n */\n\nexport interface WxrItem {\n title: string;\n link?: string;\n /** Path of the post on the old site (`/blog/opening-day`). */\n path?: string;\n postType: string;\n status: string;\n slug?: string;\n date?: string;\n author?: string;\n contentHtml: string;\n excerptHtml?: string;\n categories: string[];\n tags: string[];\n /** Featured image URL (resolved from `_thumbnail_id`). */\n image?: string;\n id?: string;\n attachmentUrl?: string;\n /** `wp:postmeta` key → value (Yoast/Rank Math SEO, menu item targets, alt text…). */\n meta: Record<string, string>;\n parent?: string;\n menuOrder?: number;\n /** Navigation menus (slugs) this `nav_menu_item` belongs to. */\n menus: string[];\n}\n\nexport interface WxrFile {\n title?: string;\n link?: string;\n description?: string;\n language?: string;\n items: WxrItem[];\n}\n\nconst decode = (s: string) =>\n s\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/"/g, '\"')\n .replace(/�?39;|'/g, \"'\")\n .replace(/&#(\\d+);/g, (_, n: string) => String.fromCodePoint(Number(n)))\n .replace(/&/g, \"&\");\n\n/** Text of the first `<tag>` (CDATA unwrapped, entities decoded). */\nfunction tag(xml: string, name: string): string | undefined {\n const re = new RegExp(\n `<${name.replace(\":\", \"\\\\:\")}(?:\\\\s[^>]*)?>([\\\\s\\\\S]*?)</${name.replace(\":\", \"\\\\:\")}>`,\n );\n const m = re.exec(xml);\n if (!m) return undefined;\n const inner = (m[1] as string).trim();\n const cdata = /^<!\\[CDATA\\[([\\s\\S]*?)\\]\\]>$/.exec(inner);\n return cdata ? (cdata[1] as string) : decode(inner);\n}\n\nfunction allTags(xml: string, name: string): { attrs: string; value: string }[] {\n const re = new RegExp(\n `<${name.replace(\":\", \"\\\\:\")}(\\\\s[^>]*)?>([\\\\s\\\\S]*?)</${name.replace(\":\", \"\\\\:\")}>`,\n \"g\",\n );\n return [...xml.matchAll(re)].map((m) => {\n const inner = (m[2] as string).trim();\n const cdata = /^<!\\[CDATA\\[([\\s\\S]*?)\\]\\]>$/.exec(inner);\n return { attrs: m[1] ?? \"\", value: cdata ? (cdata[1] as string) : decode(inner) };\n });\n}\n\n/** Parse a WXR export. Throws when the file is not one. */\nexport function parseWxr(xml: string): WxrFile {\n if (!/<rss[\\s>]/.test(xml) || !/xmlns:wp=/.test(xml))\n throw new Error(\"This is not a WordPress (WXR) export file.\");\n const channel = /<channel>([\\s\\S]*?)<item>/.exec(xml)?.[1] ?? \"\";\n const items: WxrItem[] = [];\n for (const m of xml.matchAll(/<item>([\\s\\S]*?)<\\/item>/g)) {\n const x = m[1] as string;\n const link = tag(x, \"link\");\n let path: string | undefined;\n try {\n path = link ? new URL(link).pathname.replace(/\\/+$/, \"\") || \"/\" : undefined;\n } catch {\n path = link?.startsWith(\"/\") ? link : undefined;\n }\n const cats = allTags(x, \"category\");\n const meta = allTags(x, \"wp:postmeta\").map((pm) => ({\n key: tag(pm.value, \"wp:meta_key\"),\n value: tag(pm.value, \"wp:meta_value\"),\n }));\n const thumb = meta.find((pm) => pm.key === \"_thumbnail_id\")?.value;\n const gmt = tag(x, \"wp:post_date_gmt\");\n const date = gmt && !gmt.startsWith(\"0000\") ? gmt : (tag(x, \"wp:post_date\") ?? gmt);\n const pubDate = tag(x, \"pubDate\");\n let iso: string | undefined;\n if (date && /^\\d{4}-\\d{2}-\\d{2}/.test(date) && !date.startsWith(\"0000\"))\n iso = `${date.replace(\" \", \"T\")}${/Z|[+-]\\d\\d:?\\d\\d$/.test(date) ? \"\" : \"Z\"}`;\n else if (pubDate && !Number.isNaN(Date.parse(pubDate))) iso = new Date(pubDate).toISOString();\n items.push({\n title: tag(x, \"title\") ?? \"\",\n ...(link ? { link } : {}),\n ...(path ? { path } : {}),\n postType: tag(x, \"wp:post_type\") ?? \"post\",\n status: tag(x, \"wp:status\") ?? \"publish\",\n ...(tag(x, \"wp:post_name\") ? { slug: tag(x, \"wp:post_name\") } : {}),\n ...(iso ? { date: iso } : {}),\n ...(tag(x, \"dc:creator\") ? { author: tag(x, \"dc:creator\") } : {}),\n contentHtml: tag(x, \"content:encoded\") ?? \"\",\n ...(tag(x, \"excerpt:encoded\") ? { excerptHtml: tag(x, \"excerpt:encoded\") } : {}),\n categories: cats\n .filter((c) => /domain=\"category\"/.test(c.attrs))\n .map((c) => c.value.trim())\n .filter(Boolean),\n tags: cats\n .filter((c) => /domain=\"post_tag\"/.test(c.attrs))\n .map((c) => c.value.trim())\n .filter(Boolean),\n ...(thumb ? { image: `#attachment:${thumb}` } : {}),\n ...(tag(x, \"wp:post_id\") ? { id: tag(x, \"wp:post_id\") } : {}),\n ...(tag(x, \"wp:attachment_url\") ? { attachmentUrl: tag(x, \"wp:attachment_url\") } : {}),\n meta: Object.fromEntries(\n meta.filter((pm) => pm.key).map((pm) => [pm.key as string, pm.value ?? \"\"]),\n ),\n ...(tag(x, \"wp:post_parent\") && tag(x, \"wp:post_parent\") !== \"0\"\n ? { parent: tag(x, \"wp:post_parent\") }\n : {}),\n ...(tag(x, \"wp:menu_order\") ? { menuOrder: Number(tag(x, \"wp:menu_order\")) || 0 } : {}),\n menus: cats\n .filter((c) => /domain=\"nav_menu\"/.test(c.attrs))\n .map((c) => /nicename=\"([^\"]+)\"/.exec(c.attrs)?.[1] ?? c.value),\n });\n }\n // Resolve featured images.\n const byId = new Map(items.filter((i) => i.id).map((i) => [i.id as string, i]));\n for (const i of items) {\n if (i.image?.startsWith(\"#attachment:\")) {\n const att = byId.get(i.image.slice(\"#attachment:\".length));\n if (att?.attachmentUrl) i.image = att.attachmentUrl;\n else delete i.image;\n }\n }\n return {\n ...(tag(channel, \"title\") ? { title: tag(channel, \"title\") } : {}),\n ...(tag(channel, \"link\") ? { link: tag(channel, \"link\") } : {}),\n ...(tag(channel, \"description\") ? { description: tag(channel, \"description\") } : {}),\n ...(tag(channel, \"language\") ? { language: tag(channel, \"language\") } : {}),\n items,\n };\n}\n","/**\n * Read a Squarespace site into `SqSite`: the home page (header, navigation, footer, theme),\n * the sitemap, every page's HTML, and collections (blog, events, products, portfolio) — from\n * item pages, or from Squarespace's `?format=json` data when the owner allows it (`owner`),\n * plus a WordPress export for blog posts.\n */\nimport { outerHtml } from \"../dom\";\nimport { RobotsDisallowed, type SiteFetcher } from \"../fetch\";\nimport { cleanImageUrl, stripTags } from \"./blocks\";\nimport { type ParsedPage, parsePage, sectionsFromLayoutHtml } from \"./page\";\nimport { parseTheme } from \"./theme\";\nimport type {\n SqCollection,\n SqCollectionKind,\n SqImage,\n SqItem,\n SqNavItem,\n SqNotice,\n SqPage,\n SqProduct,\n SqSection,\n SqSeo,\n SqSite,\n} from \"./types\";\nimport { parseWxr, type WxrItem } from \"./wxr\";\n\nexport interface CrawlOptions {\n url: string;\n fetcher: SiteFetcher;\n /**\n * The site's owner confirmed they own it: also read Squarespace's `?format=json` data (richer\n * collections, SEO fields, product variants). robots.txt asks crawlers not to read it.\n */\n owner?: boolean;\n /** Contents of a WordPress (WXR) export, for blog posts. */\n wxr?: string;\n /** Most pages + items to read (default 400). */\n maxPages?: number;\n onProgress?: (message: string) => void;\n}\n\nexport class NotSquarespaceError extends Error {}\n\n/** `https://example.com/about/` → `https://example.com` origin + normalized `/about`. */\nexport function normalizePath(href: string, base: string): string | undefined {\n try {\n const u = new URL(href, base);\n const b = new URL(base);\n const sameSite =\n u.host === b.host || u.host.replace(/^www\\./, \"\") === b.host.replace(/^www\\./, \"\");\n if (!sameSite || !/^https?:$/.test(u.protocol)) return undefined;\n const p = decodeURI(u.pathname).replace(/\\/+$/, \"\") || \"/\";\n return p;\n } catch {\n return undefined;\n }\n}\n\nfunction collectionKind(\n bodyClasses: readonly string[],\n typeName?: string,\n): SqCollectionKind | \"page\" | \"gallery\" | \"index\" | \"other\" {\n const t =\n typeName ??\n bodyClasses.find((c) => c.startsWith(\"collection-type-\"))?.slice(\"collection-type-\".length) ??\n \"page\";\n if (t.startsWith(\"blog\")) return \"blog\";\n if (t.startsWith(\"events\") || t.startsWith(\"calendar\")) return \"events\";\n if (t.startsWith(\"products\") || t === \"store\" || t.startsWith(\"commerce\")) return \"products\";\n if (t.startsWith(\"portfolio\") || t === \"project\") return \"portfolio\";\n if (t.startsWith(\"gallery\")) return \"gallery\";\n if (t === \"index\") return \"index\";\n if (t === \"page\" || t === \"layout\") return \"page\";\n return \"other\";\n}\n\nconst SITE_SUFFIX = /\\s+[—–|·-]\\s+[^—–|·]+$/;\n\nfunction msToIso(ms: unknown): string | undefined {\n const n = Number(ms);\n return Number.isFinite(n) && n > 0 ? new Date(n).toISOString() : undefined;\n}\n\nfunction seoFromJson(collection: Record<string, unknown>, fallback: SqSeo): SqSeo {\n const seo = (collection.seoData ?? {}) as Record<string, unknown>;\n const title =\n typeof seo.seoTitle === \"string\" && seo.seoTitle.trim() ? seo.seoTitle.trim() : fallback.title;\n const description =\n typeof seo.seoDescription === \"string\" && seo.seoDescription.trim()\n ? stripTags(seo.seoDescription)\n : fallback.description;\n return {\n ...fallback,\n ...(title ? { title } : {}),\n ...(description ? { description } : {}),\n ...(seo.seoHidden === true ? { noindex: true } : {}),\n };\n}\n\nfunction imageFromAsset(o: Record<string, unknown> | undefined, alt = \"\"): SqImage | undefined {\n if (!o || typeof o.assetUrl !== \"string\" || !/^https?:|^\\/\\//.test(o.assetUrl)) return undefined;\n if (typeof o.contentType === \"string\" && !o.contentType.startsWith(\"image/\")) return undefined;\n const size = /^(\\d+)x(\\d+)$/.exec(String(o.originalSize ?? \"\"));\n const fp = o.mediaFocalPoint as { x?: number; y?: number } | undefined;\n return {\n url: cleanImageUrl(o.assetUrl),\n alt: (typeof o.title === \"string\" && o.title.trim()) || alt,\n ...(size ? { width: Number(size[1]), height: Number(size[2]) } : {}),\n ...(fp && typeof fp.x === \"number\" && typeof fp.y === \"number\" && (fp.x !== 0.5 || fp.y !== 0.5)\n ? { focal: [fp.x, fp.y] as [number, number] }\n : {}),\n };\n}\n\nfunction productFromJson(item: Record<string, unknown>): SqProduct {\n const sc = (item.structuredContent ?? item) as Record<string, unknown>;\n const variants = (Array.isArray(sc.variants) ? sc.variants : []) as Record<string, unknown>[];\n const money = (m: unknown, cents: unknown): { amount?: number; currency?: string } => {\n const mm = m as { value?: string; currency?: string } | undefined;\n if (mm?.value !== undefined)\n return { amount: Math.round(Number(mm.value) * 100), currency: mm.currency };\n const c = Number(cents);\n return Number.isFinite(c) ? { amount: c } : {};\n };\n const first = variants[0] ?? {};\n const base = money(first.priceMoney ?? sc.priceMoney, first.price ?? sc.priceCents);\n const sale = money(first.salePriceMoney, first.salePrice);\n const optionNames: string[] = Array.isArray(sc.variantOptionOrdering)\n ? (sc.variantOptionOrdering as string[])\n : [...new Set(variants.flatMap((v) => Object.keys((v.attributes ?? {}) as object)))];\n const options = optionNames\n .map((name) => ({\n name,\n values: [\n ...new Set(\n variants\n .map((v) => ((v.attributes ?? {}) as Record<string, string>)[name])\n .filter(Boolean),\n ),\n ] as string[],\n }))\n .filter((o) => o.values.length);\n const images = ((Array.isArray(item.items) ? item.items : []) as Record<string, unknown>[])\n .map((i) => imageFromAsset(i, String(item.title ?? \"\")))\n .filter((x): x is SqImage => !!x);\n const productType =\n { 1: \"physical\", 2: \"digital\", 3: \"service\", 4: \"gift-card\" }[Number(sc.productType)] ??\n undefined;\n return {\n price: base.amount ?? 0,\n currency: base.currency ?? \"USD\",\n ...(first.onSale === true && sale.amount ? { salePrice: sale.amount } : {}),\n ...(typeof first.sku === \"string\" ? { sku: first.sku } : {}),\n images,\n options,\n variants:\n variants.length > 1 || options.length\n ? variants.map((v) => {\n const m = money(v.priceMoney, v.price);\n return {\n ...(typeof v.sku === \"string\" ? { sku: v.sku } : {}),\n options: (v.attributes ?? {}) as Record<string, string>,\n ...(m.amount !== undefined && m.amount !== base.amount ? { price: m.amount } : {}),\n available: v.unlimited === true || Number(v.qtyInStock) > 0,\n };\n })\n : [],\n available: variants.length\n ? variants.some((v) => v.unlimited === true || Number(v.qtyInStock) > 0)\n : true,\n ...(productType === \"digital\" ? { digital: true } : {}),\n ...(productType ? { productType } : {}),\n };\n}\n\nfunction itemFromJson(raw: Record<string, unknown>, kind: SqCollectionKind): SqItem {\n const author = raw.author as { displayName?: string } | undefined;\n const loc = raw.location as Record<string, unknown> | undefined;\n const item: SqItem = {\n path: String(raw.fullUrl ?? \"\"),\n title: String(raw.title ?? \"Untitled\").trim() || \"Untitled\",\n tags: Array.isArray(raw.tags) ? (raw.tags as string[]) : [],\n categories: Array.isArray(raw.categories) ? (raw.categories as string[]) : [],\n seo: seoFromJson(raw, {}),\n source: \"json\",\n };\n const date = msToIso(raw.publishOn ?? raw.addedOn);\n if (date) item.date = date;\n if (author?.displayName) item.author = author.displayName;\n if (typeof raw.excerpt === \"string\" && stripTags(raw.excerpt)) item.excerptHtml = raw.excerpt;\n if (typeof raw.body === \"string\" && raw.body.trim()) item.bodyHtml = raw.body;\n const img = imageFromAsset(raw, String(raw.title ?? \"\"));\n if (img) item.image = { ...img, alt: \"\" };\n if (raw.workflowState === 2 || raw.draft === true) item.draft = true;\n if (kind === \"events\") {\n const start = msToIso(raw.startDate);\n if (start) {\n const address = loc\n ? [loc.addressLine1, loc.addressLine2, loc.addressCountry]\n .filter((s) => typeof s === \"string\" && s.trim())\n .join(\", \")\n : \"\";\n item.event = {\n start,\n ...(msToIso(raw.endDate) ? { end: msToIso(raw.endDate) } : {}),\n ...(loc && (loc.addressTitle || address)\n ? {\n location: {\n ...(typeof loc.addressTitle === \"string\" && loc.addressTitle.trim()\n ? { name: loc.addressTitle.trim() }\n : {}),\n ...(address ? { address } : {}),\n ...(Number(loc.markerLat)\n ? { lat: Number(loc.markerLat), lng: Number(loc.markerLng) }\n : {}),\n },\n }\n : {}),\n };\n }\n }\n if (kind === \"products\") item.product = productFromJson(raw);\n return item;\n}\n\nfunction ldOf(page: ParsedPage, type: string): Record<string, unknown> | undefined {\n return page.item?.jsonLd.find(\n (j) =>\n j[\"@type\"] === type || (Array.isArray(j[\"@type\"]) && (j[\"@type\"] as string[]).includes(type)),\n );\n}\n\nfunction itemFromHtml(path: string, page: ParsedPage, kind: SqCollectionKind): SqItem {\n const titleRaw = page.item?.title ?? page.pageTitle ?? page.title.replace(SITE_SUFFIX, \"\");\n const item: SqItem = {\n path,\n title: titleRaw.trim() || \"Untitled\",\n tags: [],\n categories: [],\n seo: { ...page.seo, ...(page.seo.title ? { title: page.seo.title } : {}) },\n source: \"html\",\n };\n if (page.item?.date) item.date = page.item.date;\n if (page.item?.author) item.author = page.item.author.replace(/^Written by\\s+/i, \"\");\n if (page.item?.image) item.image = page.item.image;\n if (page.seo.description) item.excerptHtml = `<p>${page.seo.description}</p>`;\n if (kind === \"portfolio\") item.sections = page.sections;\n else if (page.item?.bodyLayout) {\n // Re-serialize is not needed: the layout element is parsed directly.\n item.sections = sectionsFromLayoutElement(page);\n }\n if (kind === \"events\") {\n const ev = ldOf(page, \"Event\");\n const start = typeof ev?.startDate === \"string\" ? ev.startDate : page.item?.date;\n if (start) {\n const loc = ev?.location as Record<string, unknown> | undefined;\n const address = loc?.address;\n item.event = {\n start: normalizeIso(start),\n ...(typeof ev?.endDate === \"string\" ? { end: normalizeIso(ev.endDate) } : {}),\n ...(loc\n ? {\n location: {\n ...(typeof loc.name === \"string\" && loc.name.trim()\n ? { name: loc.name.trim() }\n : {}),\n ...(typeof address === \"string\" && address.trim()\n ? { address: address.trim() }\n : address && typeof address === \"object\"\n ? {\n address: Object.values(address as Record<string, unknown>)\n .filter(\n (v) =>\n typeof v === \"string\" &&\n v &&\n !String(v).startsWith(\"http\") &&\n v !== \"PostalAddress\",\n )\n .join(\", \"),\n }\n : {}),\n },\n }\n : {}),\n };\n }\n }\n if (kind === \"products\") {\n const p = ldOf(page, \"Product\");\n const rawOffers = p?.offers;\n const offers = (Array.isArray(rawOffers) ? rawOffers[0] : rawOffers) as\n | Record<string, unknown>\n | undefined;\n const price = Number(offers?.price);\n item.product = {\n price: Number.isFinite(price) ? Math.round(price * 100) : 0,\n currency: typeof offers?.priceCurrency === \"string\" ? offers.priceCurrency : \"USD\",\n ...(typeof offers?.sku === \"string\" ? { sku: offers.sku } : {}),\n images: item.image ? [item.image] : [],\n options: [],\n variants: [],\n available: !/OutOfStock|SoldOut/i.test(String(offers?.availability ?? \"\")),\n };\n if (typeof p?.description === \"string\") item.excerptHtml = `<p>${p.description}</p>`;\n }\n return item;\n}\n\n/** Squarespace writes offsets without a colon (`-0400`); OpenSpace wants `-04:00`. */\nexport function normalizeIso(s: string): string {\n const m = /^(\\d{4}-\\d{2}-\\d{2})(?:T(\\d{2}:\\d{2})(:\\d{2}(?:\\.\\d+)?)?)?(Z|[+-]\\d{2}:?\\d{2})?$/.exec(\n s.trim(),\n );\n if (!m) {\n const d = Date.parse(s);\n return Number.isNaN(d) ? s : new Date(d).toISOString();\n }\n if (!m[2]) return m[1] as string;\n const off = m[4] ? (m[4] === \"Z\" ? \"Z\" : m[4].replace(/^([+-]\\d{2}):?(\\d{2})$/, \"$1:$2\")) : \"Z\";\n return `${m[1]}T${m[2]}${m[3] ?? \":00\"}${off}`;\n}\n\nfunction sectionsFromLayoutElement(page: ParsedPage): SqSection[] {\n const el = page.item?.bodyLayout;\n if (!el) return [];\n // parse5 elements → serialize → reuse the fragment parser (one code path for item bodies).\n return sectionsFromLayoutHtml(outerHtml(el));\n}\n\nconst NETWORKS: [RegExp, string][] = [\n [/instagram\\.com/, \"instagram\"],\n [/facebook\\.com|fb\\.com/, \"facebook\"],\n [/twitter\\.com|(^|\\.)x\\.com/, \"x\"],\n [/threads\\.net/, \"threads\"],\n [/bsky\\.app/, \"bluesky\"],\n [/linkedin\\.com/, \"linkedin\"],\n [/youtube\\.com|youtu\\.be/, \"youtube\"],\n [/tiktok\\.com/, \"tiktok\"],\n [/pinterest\\./, \"pinterest\"],\n [/github\\.com/, \"github\"],\n [/spotify\\.com/, \"spotify\"],\n [/soundcloud\\.com/, \"soundcloud\"],\n [/bandcamp\\.com/, \"bandcamp\"],\n [/vimeo\\.com/, \"vimeo\"],\n [/behance\\.net/, \"behance\"],\n [/dribbble\\.com/, \"dribbble\"],\n [/substack\\.com/, \"substack\"],\n [/patreon\\.com/, \"patreon\"],\n [/yelp\\./, \"yelp\"],\n [/tripadvisor\\./, \"tripadvisor\"],\n];\n\nexport function socialNetwork(url: string): string | undefined {\n if (url.startsWith(\"mailto:\")) return \"email\";\n try {\n const host = new URL(url).host.replace(/^www\\./, \"\");\n return NETWORKS.find(([re]) => re.test(host))?.[1];\n } catch {\n return undefined;\n }\n}\n\nfunction sitemapPaths(xml: string, base: string): string[] {\n return [...xml.matchAll(/<loc>\\s*([^<\\s]+)\\s*<\\/loc>/g)]\n .map((m) => normalizePath((m[1] as string).replace(/&/g, \"&\"), base))\n .filter((p): p is string => !!p);\n}\n\n/** Crawl a Squarespace site. */\nexport async function crawlSquarespace(opts: CrawlOptions): Promise<SqSite> {\n const progress = opts.onProgress ?? (() => undefined);\n const notices: SqNotice[] = [];\n const f = opts.fetcher;\n let base: string;\n try {\n base = new URL(opts.url.includes(\"://\") ? opts.url : `https://${opts.url}`).origin;\n } catch {\n throw new Error(`\"${opts.url}\" is not a web address.`);\n }\n const abs = (p: string) => new URL(p, base).toString();\n const getHtml = async (path: string): Promise<{ page: ParsedPage; html: string } | undefined> => {\n try {\n const r = await f.text(abs(path));\n if (!r || r.status >= 400) {\n if (r) notices.push({ kind: \"fetch\", where: path, message: `HTTP ${r.status}` });\n return undefined;\n }\n return { page: parsePage(r.text), html: r.text };\n } catch (e) {\n if (e instanceof RobotsDisallowed) {\n notices.push({\n kind: \"robots\",\n where: path,\n message: \"robots.txt asks tools not to read this page; skipped.\",\n });\n return undefined;\n }\n notices.push({ kind: \"fetch\", where: path, message: (e as Error).message });\n return undefined;\n }\n };\n const getJson = async (\n path: string,\n extra = \"\",\n ): Promise<Record<string, unknown> | undefined> => {\n if (!opts.owner) return undefined;\n const sep = path.includes(\"?\") ? \"&\" : \"?\";\n try {\n return await f.json<Record<string, unknown>>(abs(`${path}${sep}format=json${extra}`));\n } catch {\n return undefined;\n }\n };\n\n progress(`Reading ${base}`);\n const home = await getHtml(\"/\");\n if (!home)\n throw new Error(\n `Couldn't read ${base}. Check the address and that the site is public (not password-protected).`,\n );\n if (!/squarespace/i.test(home.html))\n throw new NotSquarespaceError(\n `${base} doesn't look like a Squarespace site (no Squarespace markup on the home page).`,\n );\n const homeJson = await getJson(\"/\");\n const website = (homeJson?.website ?? {}) as Record<string, unknown>;\n\n // Theme: site.css (+ inline variables).\n let css = home.page.inlineCss;\n for (const href of home.page.stylesheets.slice(0, 2)) {\n try {\n const r = await f.text(new URL(href, base).toString());\n if (r && r.status < 400) css += `\\n${r.text}`;\n } catch {\n notices.push({\n kind: \"theme\",\n where: href,\n message: \"Couldn't read the site stylesheet; colors and fonts are approximate.\",\n });\n }\n }\n const theme = parseTheme(css, home.page.bodyClasses);\n if (home.page.header.layout) theme.headerLayout = home.page.header.layout;\n if (home.page.header.theme) theme.headerTheme = home.page.header.theme;\n\n // Discover paths: sitemap + navigation.\n let paths: string[] = [];\n try {\n const sm = await f.text(abs(\"/sitemap.xml\"));\n if (sm && sm.status < 400) paths = sitemapPaths(sm.text, base);\n } catch {\n notices.push({\n kind: \"fetch\",\n where: \"/sitemap.xml\",\n message: \"No sitemap; only pages linked from the navigation were imported.\",\n });\n }\n const navHrefs: string[] = [];\n const nav: SqNavItem[] = home.page.header.nav;\n for (const n of nav) {\n if (n.type === \"link\") navHrefs.push(n.href);\n else for (const i of n.items) navHrefs.push(i.href);\n }\n const navPaths = navHrefs.map((h) => normalizePath(h, base)).filter((p): p is string => !!p);\n const all = [...new Set([\"/\", ...navPaths, ...paths])].filter(\n (p) =>\n !/^\\/(?:config|search|account|cart|checkout|commerce|api|static|s|universal)(?:\\/|$)/.test(p),\n );\n\n // Top-level pages first; deeper paths are items of collections (or nested pages).\n const prefixes = new Set(all.filter((p) => all.some((q) => q !== p && q.startsWith(`${p}/`))));\n const pages: SqPage[] = [];\n const collections: SqCollection[] = [];\n const handled = new Set<string>();\n const budget = { left: opts.maxPages ?? 400 };\n const customCode = new Set<string>();\n const aliases: { from: string; to: string }[] = [];\n /** Other addresses of the home page (`/shop` when the shop is the home page). */\n const homeAliases = new Set<string>();\n if (home.page.customHeadCode) customCode.add(home.page.customHeadCode);\n\n const visitTop = async (path: string, pre?: { page: ParsedPage; html: string }) => {\n if (handled.has(path) || budget.left <= 0) return;\n handled.add(path);\n budget.left--;\n const got = pre ?? (await getHtml(path));\n if (!got) return;\n // The home page is also served at its own slug (`/home`): one page, plus a redirect.\n if (path !== \"/\" && got.page.bodyClasses.includes(\"homepage\")) {\n aliases.push({ from: path, to: \"/\" });\n homeAliases.add(path);\n return;\n }\n const json = await getJson(path);\n const coll = (json?.collection ?? {}) as Record<string, unknown>;\n const kind = collectionKind(\n got.page.bodyClasses,\n typeof coll.typeName === \"string\" ? coll.typeName : undefined,\n );\n const title =\n (typeof coll.title === \"string\" && coll.title.trim()) ||\n got.page.pageTitle ||\n got.page.title.replace(SITE_SUFFIX, \"\").trim() ||\n (path === \"/\" ? \"Home\" : (path.split(\"/\").pop() ?? \"Page\"));\n const seo = json ? seoFromJson(coll, got.page.seo) : got.page.seo;\n progress(`${path} (${kind})`);\n if (kind === \"blog\" || kind === \"events\" || kind === \"products\" || kind === \"portfolio\") {\n const c: SqCollection = {\n path,\n title,\n kind,\n seo,\n items: [],\n ...(typeof coll.typeName === \"string\" ? { typeName: coll.typeName } : {}),\n ...(typeof coll.description === \"string\" && stripTags(coll.description)\n ? { description: stripTags(coll.description) }\n : {}),\n };\n if (json && Array.isArray(json.items) && kind !== \"portfolio\") {\n let page = json;\n for (let guard = 0; guard < 50; guard++) {\n for (const it of (page.items ?? []) as Record<string, unknown>[]) {\n const item = itemFromJson(it, kind);\n if (item.path) {\n c.items.push(item);\n handled.add(item.path);\n }\n }\n const pg = page.pagination as { nextPage?: boolean; nextPageOffset?: number } | undefined;\n if (!pg?.nextPage || pg.nextPageOffset === undefined) break;\n const next = await getJson(path, `&offset=${pg.nextPageOffset}`);\n if (!next) break;\n page = next;\n }\n // Events: past events come from a separate view.\n if (kind === \"events\" && Array.isArray(json.past))\n for (const it of json.past as Record<string, unknown>[]) {\n const item = itemFromJson(it, kind);\n if (item.path && !handled.has(item.path)) {\n c.items.push(item);\n handled.add(item.path);\n }\n }\n }\n // Items from the sitemap (all kinds when there's no JSON, portfolio always).\n const itemPaths = all.filter(\n (p) =>\n (path === \"/\"\n ? // A shop as the home page lists items under its own address too (`/shop/p/x`).\n (kind === \"products\"\n ? /^\\/(?:[^/]+\\/)?p\\/[^/]+$/\n : /^\\/(?:p\\/[^/]+|\\d{4}\\/\\d{1,2}\\/\\d{1,2}\\/[^/]+)$/\n ).test(p)\n : p.startsWith(`${path}/`)) &&\n !handled.has(p) &&\n !/\\/(?:category|tag|tags|categories)\\//.test(p.slice(path.length)),\n );\n for (const ip of itemPaths) {\n if (budget.left <= 0) break;\n handled.add(ip);\n budget.left--;\n const ig = await getHtml(ip);\n if (!ig) continue;\n if (ig.page.customHeadCode) customCode.add(ig.page.customHeadCode);\n c.items.push(itemFromHtml(ip, ig.page, kind));\n }\n collections.push(c);\n // A collection as the home page: keep a home page (its sections, if any) that lists it.\n if (path === \"/\")\n pages.push({\n path: \"/\",\n title: \"Home\",\n seo,\n sections: got.page.sections,\n homeOf: c.path,\n ...(got.page.collectionAt !== undefined ? { homeAt: got.page.collectionAt } : {}),\n });\n if (kind === \"products\")\n notices.push({\n kind: \"commerce\",\n where: path,\n message: `${c.items.length} product(s) imported as catalog content. Selling needs the Cloudflare target and Stripe connected in the Hub; orders, customers, inventory, discounts, shipping and tax settings stay in Squarespace.`,\n });\n return;\n }\n if (kind === \"other\")\n notices.push({\n kind: \"collection\",\n where: path,\n message: `Squarespace page type \"${got.page.bodyClasses.find((c) => c.startsWith(\"collection-type-\")) ?? \"unknown\"}\" imported as a plain page.`,\n });\n const navLabel = (() => {\n for (const n of nav) {\n if (n.type === \"link\" && normalizePath(n.href, base) === path) return n.label;\n if (n.type === \"folder\")\n for (const i of n.items) if (normalizePath(i.href, base) === path) return i.label;\n }\n return undefined;\n })();\n const locked = got.page.locked ?? (coll.passwordProtected === true ? \"password\" : undefined);\n if (locked)\n notices.push({\n kind: locked === \"members\" ? \"members\" : \"locked-page\",\n where: path,\n message:\n locked === \"members\"\n ? \"Member area: its content isn't public, so it was not imported. Recreate it as a members-only page (Cloudflare target).\"\n : \"Password-protected: its content isn't readable, so it was not imported. Recreate it as a password page (Cloudflare target).\",\n });\n if (got.page.customHeadCode) customCode.add(got.page.customHeadCode);\n pages.push({\n path,\n title: navLabel && path !== \"/\" ? navLabel : title,\n ...(navLabel ? { navTitle: navLabel } : {}),\n seo,\n sections: locked ? [] : got.page.sections,\n ...(locked ? { locked } : {}),\n ...(!navLabel && path !== \"/\" ? { hidden: !paths.includes(path) } : {}),\n });\n };\n\n await visitTop(\"/\", home);\n const ordered = [...navPaths, ...all];\n for (const p of ordered) {\n // A deeper path whose parent is a collection is an item, handled with the collection.\n const parent = p.split(\"/\").slice(0, -1).join(\"/\");\n if (parent && prefixes.has(parent) && !handled.has(parent)) await visitTop(parent);\n if (handled.has(p)) continue;\n if (parent && collections.some((c) => c.path === parent)) continue;\n // A category view of a collection that is the home page (`/shop/tops`): the home page.\n if (parent && homeAliases.has(parent) && collections.some((c) => c.path === \"/\")) {\n handled.add(p);\n aliases.push({ from: p, to: \"/\" });\n continue;\n }\n await visitTop(p);\n }\n if (budget.left <= 0)\n notices.push({\n kind: \"other\",\n where: \"site\",\n message: `Stopped after ${opts.maxPages ?? 400} pages; raise --max-pages to import the rest.`,\n });\n\n // WordPress export: blog posts (authoritative bodies, drafts included).\n if (opts.wxr) mergeWxr(parseWxr(opts.wxr), collections, notices);\n\n // Site identity.\n const social: SqSite[\"social\"] = [];\n const accounts = (Array.isArray(website.socialAccounts) ? website.socialAccounts : []) as Record<\n string,\n unknown\n >[];\n const socialUrls = [\n ...accounts.map((a) => String(a.profileUrl ?? \"\")).filter(Boolean),\n ...home.page.social,\n ];\n for (const url of [...new Set(socialUrls)]) {\n const network = socialNetwork(url);\n if (network && !social.some((s) => s.network === network)) social.push({ network, url });\n }\n const logo =\n home.page.header.logo ??\n (typeof website.logoImageUrl === \"string\"\n ? { url: cleanImageUrl(website.logoImageUrl), alt: String(website.siteTitle ?? \"\") }\n : undefined);\n const title =\n (typeof website.siteTitle === \"string\" && website.siteTitle.trim()) ||\n home.page.header.siteTitle ||\n home.page.title.replace(SITE_SUFFIX, \"\").trim() ||\n new URL(base).host;\n const version = home.page.version ?? (home.html.includes(\"sqs-row\") ? \"7.0\" : undefined);\n return {\n baseUrl: base,\n title,\n ...(typeof website.siteDescription === \"string\" && stripTags(website.siteDescription)\n ? { description: stripTags(website.siteDescription) }\n : home.page.seo.description\n ? { description: home.page.seo.description }\n : {}),\n ...(logo ? { logo: { ...logo, alt: logo.alt || title } } : {}),\n ...(home.page.favicon ? { favicon: home.page.favicon } : {}),\n ...(typeof website.language === \"string\"\n ? { locale: website.language }\n : home.page.lang\n ? { locale: home.page.lang }\n : {}),\n ...(typeof website.timeZone === \"string\" ? { timeZone: website.timeZone } : {}),\n social,\n nav,\n ...(home.page.header.action ? { headerAction: home.page.header.action } : {}),\n footer: home.page.footer,\n theme,\n pages,\n collections,\n customCode: [...customCode],\n aliases,\n ...(version ? { version } : {}),\n notices,\n };\n}\n\n/** Fold WXR posts into the blog collection(s) the crawl found (or a new one). */\nexport function mergeWxr(\n wxr: ReturnType<typeof parseWxr>,\n collections: SqCollection[],\n notices: SqNotice[],\n) {\n const posts = wxr.items.filter((i) => i.postType === \"post\");\n let added = 0;\n for (const post of posts) {\n const path = post.path ?? (post.slug ? `/blog/${post.slug}` : undefined);\n if (!path) continue;\n const parent = path.split(\"/\").slice(0, -1).join(\"/\") || \"/blog\";\n let coll = collections.find((c) => c.kind === \"blog\" && path.startsWith(`${c.path}/`));\n if (!coll) {\n coll = collections.find((c) => c.path === parent);\n if (!coll) {\n coll = {\n path: parent,\n title: wxr.title && collections.length === 0 ? \"Blog\" : titleCase(parent.slice(1)),\n kind: \"blog\",\n seo: {},\n items: [],\n };\n collections.push(coll);\n }\n }\n const existing = coll.items.find((i) => i.path === path);\n const fromWxr = wxrItem(post, path);\n if (existing) {\n // WXR bodies are complete; keep anything the crawl knew that the export lacks.\n existing.bodyHtml = fromWxr.bodyHtml;\n delete existing.sections;\n existing.tags = fromWxr.tags.length ? fromWxr.tags : existing.tags;\n existing.categories = fromWxr.categories.length ? fromWxr.categories : existing.categories;\n existing.date ??= fromWxr.date;\n existing.author ??= fromWxr.author;\n existing.excerptHtml ??= fromWxr.excerptHtml;\n existing.image ??= fromWxr.image;\n existing.source = \"wxr\";\n } else {\n coll.items.push(fromWxr);\n added++;\n }\n }\n const others = wxr.items.filter(\n (i) => i.postType !== \"post\" && i.postType !== \"attachment\",\n ).length;\n notices.push({\n kind: \"collection\",\n where: \"WordPress export\",\n message: `${posts.length} post(s) read from the export (${added} not found on the live site, e.g. drafts).${others ? ` ${others} non-post entries (pages) were ignored: pages come from the live site.` : \"\"}`,\n });\n}\n\nconst titleCase = (s: string) =>\n s.replace(/[-_]+/g, \" \").replace(/\\b\\w/g, (c) => c.toUpperCase()) || \"Blog\";\n\nfunction wxrItem(post: WxrItem, path: string): SqItem {\n return {\n path,\n title: post.title.trim() || \"Untitled\",\n ...(post.date ? { date: post.date } : {}),\n ...(post.author ? { author: post.author } : {}),\n tags: post.tags,\n categories: post.categories,\n ...(post.excerptHtml && stripTags(post.excerptHtml) ? { excerptHtml: post.excerptHtml } : {}),\n bodyHtml: post.contentHtml,\n ...(post.image ? { image: { url: cleanImageUrl(post.image), alt: \"\" } } : {}),\n seo: {},\n ...(post.status !== \"publish\" ? { draft: true } : {}),\n source: \"wxr\",\n };\n}\n","/**\n * Read any site — Wix, Webflow, Carrd, Framer, hand-made HTML — into the source model: the home\n * page (header navigation, logo, footer, look), every page the sitemap lists (or that the site\n * links to), blog-like posts grouped into a collection, SEO and the site's scripts (reported, not\n * copied). Optional browser rendering (`render`) reads pages that JavaScript builds.\n */\nimport { RobotsDisallowed, type SiteFetcher } from \"../fetch\";\nimport { isPagePath, sitemapUrls } from \"../html/discover\";\nimport {\n type HtmlPage,\n hiddenClassesFromCss,\n parseHtmlPage,\n sitePath,\n stripSuffix,\n} from \"../html/extract\";\nimport { type ComputedLook, themeFromCss } from \"../html/theme\";\nimport { platformLabel } from \"../platform\";\nimport { socialNetwork } from \"../squarespace/crawl\";\nimport type { Platform, SqCollection, SqItem, SqNavItem, SqNotice, SqPage, SqSite } from \"../types\";\n\n/** Renders a page in a real browser (Playwright) for sites built by JavaScript. */\nexport interface PageRenderer {\n render(url: string): Promise<{ html: string; url: string; look?: ComputedLook }>;\n close(): Promise<void>;\n}\n\nexport interface GenericCrawlOptions {\n url: string;\n fetcher: SiteFetcher;\n /** What built the site (from detection), for platform hints and the report. */\n platform?: Platform;\n generator?: string;\n maxPages?: number;\n onProgress?: (message: string) => void;\n render?: PageRenderer;\n}\n\nconst BLOG_NAMES =\n /^\\/(?:blog|news|journal|articles|posts|stories|updates|insights|writing|notes|press)$/i;\n\nexport async function crawlGeneric(opts: GenericCrawlOptions): Promise<SqSite> {\n const progress = opts.onProgress ?? (() => undefined);\n const notices: SqNotice[] = [];\n const f = opts.fetcher;\n const platform = opts.platform ?? \"generic\";\n const label = platformLabel(platform);\n let base: string;\n try {\n base = new URL(opts.url.includes(\"://\") ? opts.url : `https://${opts.url}`).origin;\n } catch {\n throw new Error(`\"${opts.url}\" is not a web address.`);\n }\n let look: ComputedLook | undefined;\n let hiddenClasses = new Set<string>();\n const sources = new Set<string>([\"page HTML\"]);\n\n const getPage = async (\n path: string,\n o: { dropTitle?: boolean } = {},\n ): Promise<{ page: HtmlPage; html: string } | undefined> => {\n const url = new URL(path, base).toString();\n try {\n if (opts.render) {\n if (!(await f.allowed(url))) throw new RobotsDisallowed(url);\n const r = await opts.render.render(url);\n sources.add(\"pages rendered in a browser\");\n if (path === \"/\" && r.look) look = r.look;\n return { page: parseHtmlPage(r.html, r.url || url, { ...o, hiddenClasses }), html: r.html };\n }\n const r = await f.text(url);\n if (!r || r.status >= 400) {\n if (r) notices.push({ kind: \"fetch\", where: path, message: `HTTP ${r.status}` });\n return undefined;\n }\n if (!/html/i.test(r.contentType) && r.contentType) return undefined;\n return { page: parseHtmlPage(r.text, r.url || url, { ...o, hiddenClasses }), html: r.text };\n } catch (e) {\n if (e instanceof RobotsDisallowed) {\n notices.push({\n kind: \"robots\",\n where: path,\n message: \"robots.txt asks tools not to read this page; skipped.\",\n });\n return undefined;\n }\n notices.push({ kind: \"fetch\", where: path, message: (e as Error).message });\n return undefined;\n }\n };\n\n progress(`Reading ${base}`);\n let home = await getPage(\"/\");\n if (!home)\n throw new Error(\n `Couldn't read ${base}. Check the address and that the site is public (not password-protected).`,\n );\n // Follow a redirect to the canonical host (http → https, apex → www).\n base = new URL(home.page.url).origin;\n\n // Theme: inline styles + the first few stylesheets.\n let css = home.page.inlineCss;\n for (const href of home.page.stylesheets.slice(0, 6)) {\n try {\n const u = new URL(href, base);\n if (/fonts\\.googleapis|font-awesome|fontawesome|bootstrap-icons/.test(u.href)) continue;\n const r = await f.text(u.toString());\n if (r && r.status < 400) css += `\\n${r.text.slice(0, 800_000)}`;\n } catch {\n notices.push({\n kind: \"theme\",\n where: href,\n message: \"Couldn't read a stylesheet; colors and fonts are approximate.\",\n });\n }\n }\n const theme = themeFromCss(css, look);\n // Responsive duplicates the CSS hides on desktop: read the home page again without them.\n hiddenClasses = opts.render ? new Set() : hiddenClassesFromCss(css);\n if (hiddenClasses.size)\n home = { html: home.html, page: parseHtmlPage(home.html, home.page.url, { hiddenClasses }) };\n if (home.page.header.sticky) theme.headerFixed = true;\n if (home.page.header.overlay) theme.headerTransparent = true;\n\n // Addresses: sitemap, navigation, then links.\n progress(\"Reading the sitemap\");\n const sm = await sitemapUrls(f, base, notices);\n if (sm.paths.length) sources.add(\"the sitemap\");\n else\n notices.push({\n kind: \"fetch\",\n where: \"/sitemap.xml\",\n message: \"No sitemap; pages were found by following the site's own links.\",\n });\n const nav = home.page.header.nav;\n const navPaths: string[] = [];\n for (const n of nav)\n for (const h of n.type === \"link\" ? [n.href] : n.items.map((i) => i.href)) {\n const p = sitePath(h, base);\n if (p && isPagePath(p)) navPaths.push(p);\n }\n const budget = opts.maxPages ?? 400;\n // Navigation first, then the sitemap's shallow pages before deep ones (posts, items).\n const depth = (p: string) => p.split(\"/\").filter(Boolean).length;\n const sitemapOrder = sm.paths\n .map((p, i) => ({ p, i }))\n .sort((a, b) => depth(a.p) - depth(b.p) || a.i - b.i)\n .map((x) => x.p);\n const queue: string[] = [...new Set([\"/\", ...navPaths, ...sitemapOrder])];\n const seen = new Set<string>(queue);\n const crawlLinks = !sm.paths.length;\n const fetched = new Map<string, HtmlPage>([[\"/\", home.page]]);\n const canonicalOf = new Map<string, string>();\n const canon = (html: string) =>\n /<link[^>]+rel=[\"']canonical[\"'][^>]*href=[\"']([^\"']+)[\"']/i.exec(html)?.[1];\n const homeCanon = canon(home.html);\n if (homeCanon) canonicalOf.set(\"/\", sitePath(homeCanon, base) ?? \"/\");\n const enqueueLinks = (p: HtmlPage) => {\n if (!crawlLinks) return;\n for (const l of p.links)\n if (!seen.has(l) && isPagePath(l)) {\n seen.add(l);\n queue.push(l);\n }\n };\n enqueueLinks(home.page);\n for (let i = 1; i < queue.length && fetched.size < budget; i++) {\n const path = queue[i] as string;\n progress(path);\n const got = await getPage(path);\n if (!got) continue;\n const c = canon(got.html);\n const cp = c ? sitePath(c, base) : undefined;\n if (cp && cp !== path) canonicalOf.set(path, cp);\n fetched.set(path, got.page);\n enqueueLinks(got.page);\n }\n if (fetched.size >= budget && queue.length > budget)\n notices.push({\n kind: \"other\",\n where: \"site\",\n message: `Stopped after ${budget} pages; raise --max-pages to import the rest.`,\n });\n\n // Duplicates: pages whose canonical address is another page become aliases of it.\n const aliases: { from: string; to: string }[] = [];\n for (const [from, to] of canonicalOf)\n if (from !== to && fetched.has(to)) {\n aliases.push({ from, to });\n fetched.delete(from);\n }\n\n // Posts: pages with article metadata, grouped by their parent path.\n const isPost = (p: HtmlPage) =>\n p.path !== \"/\" &&\n !!p.article?.date &&\n (p.jsonLd.some((o) => /BlogPosting|Article|NewsArticle/.test(String(o[\"@type\"]))) ||\n p.article !== undefined);\n const byParent = new Map<string, HtmlPage[]>();\n for (const p of fetched.values()) {\n if (!isPost(p)) continue;\n const parent = p.path.split(\"/\").slice(0, -1).join(\"/\") || \"/\";\n byParent.set(parent, [...(byParent.get(parent) ?? []), p]);\n }\n const collections: SqCollection[] = [];\n const asItem = new Set<string>();\n for (const [parent, posts] of byParent) {\n if (parent === \"/\" ? posts.length < 3 : posts.length < 2 && !BLOG_NAMES.test(parent)) continue;\n let path = parent;\n if (!fetched.has(parent) || parent === \"/\") {\n const listing = [...fetched.keys()].find(\n (k) => BLOG_NAMES.test(k) && !collections.some((c) => c.path === k),\n );\n path =\n listing ??\n (/^\\/(?:post|posts|article|p)$/.test(parent) || parent === \"/\" ? \"/journal\" : parent);\n }\n const listPage = fetched.get(path);\n const c: SqCollection = {\n path,\n title: listPage?.title && listPage.title.length < 60 ? listPage.title : \"Journal\",\n kind: \"blog\",\n seo: listPage?.seo ?? {},\n items: [],\n ...(listPage?.seo.description ? { description: listPage.seo.description } : {}),\n };\n for (const p of posts) {\n // Re-read the body without its title heading (the title is the item's).\n const again = await getPage(p.path, { dropTitle: true });\n const page = again?.page ?? p;\n const a = page.article ?? { tags: [], categories: [] };\n const item: SqItem = {\n path: p.path,\n title: page.title,\n ...(a.date ? { date: a.date } : {}),\n ...(a.author ? { author: a.author } : {}),\n tags: a.tags,\n categories: a.categories,\n ...(a.excerpt ? { excerptHtml: `<p>${escapeHtml(a.excerpt)}</p>` } : {}),\n sections: page.sections.map((s) => ({ ...s, role: undefined })),\n ...(a.image ? { image: a.image } : {}),\n seo: page.seo,\n source: \"html\",\n };\n c.items.push(item);\n asItem.add(p.path);\n }\n if (listPage) asItem.add(path);\n collections.push(c);\n notices.push({\n kind: \"collection\",\n where: path,\n message: `${c.items.length} post(s) found under ${parent === \"/\" ? \"the site root\" : parent} became the \"${c.title}\" collection.`,\n });\n }\n\n // Pages.\n const navLabelOf = (path: string): string | undefined => {\n const match = (href: string) => sitePath(href, base) === path;\n for (const n of nav) {\n if (n.type === \"link\" && match(n.href)) return n.label;\n if (n.type === \"folder\") for (const i of n.items) if (match(i.href)) return i.label;\n }\n return undefined;\n };\n const pages: SqPage[] = [];\n let thin = 0;\n for (const p of fetched.values()) {\n if (asItem.has(p.path)) continue;\n const navTitle = navLabelOf(p.path);\n const sections = p.sections;\n const textual = sections.length > 0 && p.textLength >= 40;\n if (!textual) thin++;\n pages.push({\n path: p.path,\n title:\n p.path === \"/\" ? \"Home\" : (navTitle ?? stripSuffix(p.title, home.page.siteName) ?? p.title),\n ...(navTitle ? { navTitle } : {}),\n seo: p.seo,\n sections,\n ...(!navTitle && p.path !== \"/\" && nav.length ? { hidden: true } : {}),\n });\n }\n if (\n thin &&\n !opts.render &&\n (platform === \"wix\" || platform === \"framer\" || thin >= Math.max(2, pages.length / 3))\n )\n notices.push({\n kind: \"fetch\",\n where: \"site\",\n message: `${thin} page(s) had little or no readable content in their HTML — ${label} builds them with JavaScript. Re-run with \\`--render\\` (needs Playwright: \\`npx playwright install chromium\\`) to read them as a browser sees them.`,\n });\n if (platform === \"wix\")\n notices.push({\n kind: \"other\",\n where: \"site\",\n message:\n \"Wix strips and absolute-positioned layouts were turned into OpenSpace sections and columns; check spacing and alignment in the visual parity pass.\",\n });\n if (platform === \"webflow\")\n notices.push({\n kind: \"other\",\n where: \"site\",\n message:\n \"Webflow interactions and animations were not copied; OpenSpace's own motion setting (Site Styles) is used instead.\",\n });\n\n // Site identity.\n const social: SqSite[\"social\"] = [];\n for (const url of home.page.social) {\n const network = socialNetwork(url);\n if (network && !social.some((s) => s.network === network)) social.push({ network, url });\n }\n const title =\n home.page.siteName ??\n home.page.header.siteTitle ??\n (home.page.docTitle.split(/\\s+[—–|·-]\\s+/).pop() || undefined) ??\n new URL(base).host.replace(/^www\\./, \"\");\n const scripts = new Set<string>();\n for (const p of fetched.values()) for (const s of p.scripts) scripts.add(s);\n const lang = home.page.lang?.replace(\"_\", \"-\");\n return {\n baseUrl: base,\n title: title.trim(),\n ...(home.page.seo.description ? { description: home.page.seo.description } : {}),\n ...(home.page.header.logo\n ? { logo: { ...home.page.header.logo, alt: home.page.header.logo.alt || title } }\n : {}),\n ...(home.page.favicon ? { favicon: home.page.favicon } : {}),\n ...(lang ? { locale: lang } : {}),\n social,\n nav: nav as SqNavItem[],\n ...(home.page.header.action ? { headerAction: home.page.header.action } : {}),\n footer: home.page.footer,\n theme,\n pages,\n collections,\n customCode: [...scripts],\n aliases,\n notices,\n platform,\n ...(opts.generator ? { generator: opts.generator } : {}),\n sources: [...sources],\n };\n}\n\nconst escapeHtml = (s: string) =>\n s.replace(/&/g, \"&\").replace(/</g, \"<\").replace(/>/g, \">\");\n"],"mappings":";;;AAQO,IAAM,aACX;AAQK,SAAS,YAAYA,OAAc,QAAQ,sBAAmC;AACnF,QAAM,SAAsE,CAAC;AAC7E,MAAI;AACJ,MAAI,eAAe;AACnB,aAAW,OAAOA,MAAK,MAAM,OAAO,GAAG;AACrC,UAAM,OAAO,IAAI,QAAQ,QAAQ,EAAE,EAAE,KAAK;AAC1C,UAAM,IAAI,4BAA4B,KAAK,IAAI;AAC/C,QAAI,CAAC,EAAG;AACR,UAAM,MAAO,EAAE,CAAC,EAAa,YAAY;AACzC,UAAM,QAAS,EAAE,CAAC,EAAa,KAAK;AACpC,QAAI,QAAQ,cAAc;AACxB,UAAI,CAAC,WAAW,CAAC,cAAc;AAC7B,kBAAU,EAAE,QAAQ,CAAC,GAAG,OAAO,CAAC,GAAG,UAAU,CAAC,EAAE;AAChD,eAAO,KAAK,OAAO;AAAA,MACrB;AACA,cAAQ,OAAO,KAAK,MAAM,YAAY,CAAC;AACvC,qBAAe;AACf;AAAA,IACF;AACA,mBAAe;AACf,QAAI,CAAC,QAAS;AACd,QAAI,QAAQ,cAAc,MAAO,SAAQ,SAAS,KAAK,KAAK;AAC5D,QAAI,QAAQ,WAAW,MAAO,SAAQ,MAAM,KAAK,KAAK;AAAA,EACxD;AACA,QAAM,OAAO,OAAO,OAAO,CAAC,MAAM,EAAE,OAAO,SAAS,KAAK,CAAC;AAC1D,QAAM,SAAS,KAAK,SAAS,OAAO,OAAO,OAAO,CAAC,MAAM,EAAE,OAAO,SAAS,GAAG,CAAC;AAC/E,SAAO;AAAA,IACL,OAAO,OAAO,QAAQ,CAAC,MAAM,EAAE,KAAK;AAAA,IACpC,UAAU,OAAO,QAAQ,CAAC,MAAM,EAAE,QAAQ;AAAA,EAC5C;AACF;AAEA,SAAS,aAAa,SAAiB,MAAsB;AAC3D,QAAM,WAAW,QAAQ,SAAS,GAAG;AACrC,QAAM,OAAO,WAAW,QAAQ,MAAM,GAAG,EAAE,IAAI;AAC/C,QAAM,KAAK,IAAI;AAAA,IACb,IAAI,KACD,MAAM,GAAG,EACT,IAAI,CAAC,MAAM,EAAE,QAAQ,sBAAsB,MAAM,CAAC,EAClD,KAAK,IAAI,CAAC,GAAG,WAAW,MAAM,EAAE;AAAA,EACrC;AACA,SAAO,GAAG,KAAK,IAAI,IAAI,KAAK,SAAS;AACvC;AAGO,SAAS,aAAa,OAAoB,cAA+B;AAC9E,MAAI,OAAO;AACX,MAAI,UAAU;AACd,aAAW,KAAK,MAAM,UAAU;AAC9B,UAAM,IAAI,aAAa,GAAG,YAAY;AACtC,QAAI,IAAI,MAAM;AACZ,aAAO;AACP,gBAAU;AAAA,IACZ;AAAA,EACF;AACA,aAAW,KAAK,MAAM,OAAO;AAC3B,UAAM,IAAI,aAAa,GAAG,YAAY;AACtC,QAAI,KAAK,QAAQ,KAAK,GAAG;AACvB,aAAO;AACP,gBAAU;AAAA,IACZ;AAAA,EACF;AACA,SAAO;AACT;AA8BO,IAAM,mBAAN,cAA+B,MAAM;AAAA,EAC1C,YAAqB,KAAa;AAChC,UAAM,gDAAgD,GAAG,EAAE;AADxC;AAAA,EAErB;AAAA,EAFqB;AAGvB;AAEO,IAAM,cAAN,MAAkB;AAAA,EAUvB,YAA6B,OAA2B,CAAC,GAAG;AAA/B;AAC3B,SAAK,UAAU,KAAK,UAAU,CAAC,GAAG,MAAM,MAAM,GAAG,CAAC;AAClD,SAAK,QAAQ,KAAK,UAAU,CAAC,OAAO,IAAI,QAAQ,CAAC,MAAM,WAAW,GAAG,EAAE,CAAC;AAAA,EAC1E;AAAA,EAH6B;AAAA,EATZ;AAAA,EACA;AAAA,EACA,aAAa,oBAAI,IAAoB;AAAA,EACrC,cAAc,oBAAI,IAA8B;AAAA,EAChD,eAAe,oBAAI,IAA8C;AAAA;AAAA,EAEzE,YAAsB,CAAC;AAAA,EACvB,kBAA4B,CAAC;AAAA,EAOtC,MAAc,OAAO,GAA0C;AAC7D,QAAI,KAAK,KAAK,WAAW,MAAO,QAAO;AACvC,QAAI,IAAI,KAAK,aAAa,IAAI,EAAE,IAAI;AACpC,QAAI,CAAC,GAAG;AACN,UAAI,KAAK,IAAI,IAAI,IAAI,eAAe,CAAC,EAAE,SAAS,CAAC,EAC9C,KAAK,OAAO,QAAS,IAAI,KAAK,YAAY,MAAM,IAAI,KAAK,CAAC,IAAI,MAAU,EACxE,MAAM,MAAM,MAAS;AACxB,WAAK,aAAa,IAAI,EAAE,MAAM,CAAC;AAAA,IACjC;AACA,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,MAAM,QAAQ,KAA+B;AAC3C,UAAM,IAAI,IAAI,IAAI,GAAG;AACrB,QAAI,KAAK,KAAK,cAAc,CAAC,EAAG,QAAO;AACvC,UAAM,QAAQ,MAAM,KAAK,OAAO,CAAC;AACjC,WAAO,CAAC,SAAS,aAAa,OAAO,GAAG,EAAE,QAAQ,GAAG,EAAE,MAAM,EAAE;AAAA,EACjE;AAAA,EAEQ,MAAM,MAAuB;AACnC,WAAO,iEAAiE,KAAK,IAAI;AAAA,EACnF;AAAA;AAAA,EAGQ,IAAI,KAAa,OAAoB,CAAC,GAAsB;AAClE,UAAM,IAAI,IAAI,IAAI,GAAG;AACrB,UAAM,OAAO,EAAE;AACf,UAAM,QACJ,KAAK,KAAK,YAAY,IAAI,MACzB,KAAK,MAAM,IAAI,IAAK,KAAK,KAAK,cAAc,KAAO,KAAK,KAAK,WAAW;AAC3E,UAAM,MAAM,YAA+B;AACzC,eAAS,UAAU,KAAK,WAAW;AACjC,cAAM,QAAQ,KAAK,WAAW,IAAI,IAAI,KAAK,KAAK,QAAQ,KAAK,IAAI;AACjE,YAAI,OAAO,EAAG,OAAM,KAAK,MAAM,IAAI;AACnC,aAAK,WAAW,IAAI,MAAM,KAAK,IAAI,CAAC;AACpC,aAAK,UAAU,KAAK,GAAG;AACvB,aAAK,KAAK,YAAY,GAAG;AACzB,cAAM,MAAM,MAAM,KAAK,QAAQ,KAAK;AAAA,UAClC,GAAG;AAAA,UACH,SAAS,EAAE,cAAc,YAAY,QAAQ,OAAO,GAAI,KAAK,WAAW,CAAC,EAAG;AAAA,QAC9E,CAAC;AACD,aAAK,IAAI,WAAW,OAAO,IAAI,WAAW,QAAQ,WAAW,KAAK,KAAK,cAAc,IAAI;AACvF,gBAAM,QAAQ,OAAO,IAAI,QAAQ,IAAI,aAAa,CAAC;AACnD,gBAAM,IAAI,MAAM,OAAO,EAAE,MAAM,MAAM,MAAS;AAC9C,gBAAM,KAAK;AAAA,YACT,OAAO,SAAS,KAAK,KAAK,QAAQ,IAAI,KAAK,IAAI,OAAO,EAAE,IAAI,MAAO,OAAQ,UAAU;AAAA,UACvF;AACA;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAAA,IACF;AACA,UAAM,OAAO,KAAK,YAAY,IAAI,IAAI,KAAK,QAAQ,QAAQ;AAC3D,UAAM,OAAO,KAAK,KAAK,KAAK,GAAG;AAC/B,SAAK,YAAY;AAAA,MACf;AAAA,MACA,KAAK,MAAM,MAAM,MAAS;AAAA,IAC5B;AACA,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,MAAM,KAAK,KAA+C;AACxD,QAAI,CAAE,MAAM,KAAK,QAAQ,GAAG,GAAI;AAC9B,WAAK,gBAAgB,KAAK,GAAG;AAC7B,YAAM,IAAI,iBAAiB,GAAG;AAAA,IAChC;AACA,UAAM,MAAM,MAAM,KAAK,IAAI,GAAG;AAC9B,QAAI,IAAI,WAAW,OAAO,IAAI,WAAW,KAAK;AAC5C,YAAM,IAAI,MAAM,OAAO,EAAE,MAAM,MAAM,MAAS;AAC9C,aAAO;AAAA,IACT;AACA,UAAMA,QAAO,MAAM,IAAI,KAAK;AAC5B,WAAO;AAAA,MACL,KAAK,IAAI,OAAO;AAAA,MAChB,QAAQ,IAAI;AAAA,MACZ,MAAAA;AAAA,MACA,aAAa,IAAI,QAAQ,IAAI,cAAc,KAAK;AAAA,IAClD;AAAA,EACF;AAAA,EAEA,MAAM,KAAkB,KAAqC;AAC3D,UAAM,IAAI,MAAM,KAAK,KAAK,GAAG;AAC7B,QAAI,CAAC,KAAK,EAAE,UAAU,IAAK,QAAO;AAClC,QAAI;AACF,aAAO,KAAK,MAAM,EAAE,IAAI;AAAA,IAC1B,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAAA;AAAA,EAGS,iBAA+B,CAAC,OAA0B,SACjE,KAAK,IAAI,OAAO,iBAAiB,UAAU,MAAM,MAAM,KAAK,GAAG,IAAI;AACvE;;;AClOA,IAAM,wBAAwB,oBAAI,IAAI;AAAA,EAClC;AAAA,EAAO;AAAA,EAAO;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAC9E;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EACxE;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EACxE;AAAA,EAAS;AAAA,EAAS;AACtB,CAAC;AACM,IAAM,wBAAwB;AAC9B,IAAI;AAAA,CACV,SAAUC,cAAa;AACpB,EAAAA,aAAYA,aAAY,KAAK,IAAI,EAAE,IAAI;AACvC,EAAAA,aAAYA,aAAY,MAAM,IAAI,CAAC,IAAI;AACvC,EAAAA,aAAYA,aAAY,YAAY,IAAI,CAAC,IAAI;AAC7C,EAAAA,aAAYA,aAAY,iBAAiB,IAAI,EAAE,IAAI;AACnD,EAAAA,aAAYA,aAAY,WAAW,IAAI,EAAE,IAAI;AAC7C,EAAAA,aAAYA,aAAY,WAAW,IAAI,EAAE,IAAI;AAC7C,EAAAA,aAAYA,aAAY,OAAO,IAAI,EAAE,IAAI;AACzC,EAAAA,aAAYA,aAAY,kBAAkB,IAAI,EAAE,IAAI;AACpD,EAAAA,aAAYA,aAAY,gBAAgB,IAAI,EAAE,IAAI;AAClD,EAAAA,aAAYA,aAAY,WAAW,IAAI,EAAE,IAAI;AAC7C,EAAAA,aAAYA,aAAY,YAAY,IAAI,EAAE,IAAI;AAC9C,EAAAA,aAAYA,aAAY,cAAc,IAAI,EAAE,IAAI;AAChD,EAAAA,aAAYA,aAAY,SAAS,IAAI,EAAE,IAAI;AAC3C,EAAAA,aAAYA,aAAY,SAAS,IAAI,EAAE,IAAI;AAC3C,EAAAA,aAAYA,aAAY,SAAS,IAAI,EAAE,IAAI;AAC3C,EAAAA,aAAYA,aAAY,WAAW,IAAI,EAAE,IAAI;AAC7C,EAAAA,aAAYA,aAAY,gBAAgB,IAAI,EAAE,IAAI;AAClD,EAAAA,aAAYA,aAAY,aAAa,IAAI,EAAE,IAAI;AAC/C,EAAAA,aAAYA,aAAY,mBAAmB,IAAI,EAAE,IAAI;AACrD,EAAAA,aAAYA,aAAY,eAAe,IAAI,EAAE,IAAI;AACjD,EAAAA,aAAYA,aAAY,iBAAiB,IAAI,EAAE,IAAI;AACnD,EAAAA,aAAYA,aAAY,iBAAiB,IAAI,EAAE,IAAI;AACnD,EAAAA,aAAYA,aAAY,sBAAsB,IAAI,EAAE,IAAI;AACxD,EAAAA,aAAYA,aAAY,cAAc,IAAI,EAAE,IAAI;AAChD,EAAAA,aAAYA,aAAY,eAAe,IAAI,EAAE,IAAI;AACjD,EAAAA,aAAYA,aAAY,eAAe,IAAI,GAAG,IAAI;AACtD,GAAG,gBAAgB,cAAc,CAAC,EAAE;AAC7B,IAAM,YAAY;AAAA,EACrB,WAAW;AAAA,EACX,aAAa;AAAA,EACb,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AACZ;AAEO,SAAS,YAAY,IAAI;AAC5B,SAAO,MAAM,SAAS,MAAM;AAChC;AACO,SAAS,gBAAgB,IAAI;AAChC,SAAO,MAAM,SAAS,MAAM;AAChC;AACO,SAAS,0BAA0B,KAAK,KAAK;AAChD,UAAQ,MAAM,SAAS,OAAO,OAAO;AACzC;AAEO,SAAS,mBAAmB,IAAI;AACnC,SAAS,OAAO,MAAQ,OAAO,MAAQ,OAAO,MAAQ,OAAO,KAAQ,OAAO,MAAQ,MAAM,KAAQ,MAAM,MACnG,MAAM,OAAQ,MAAM;AAC7B;AACO,SAAS,qBAAqB,IAAI;AACrC,SAAQ,MAAM,SAAS,MAAM,SAAU,sBAAsB,IAAI,EAAE;AACvE;;;AC7DO,IAAI;AAAA,CACV,SAAUC,MAAK;AACZ,EAAAA,KAAI,+BAA+B,IAAI;AACvC,EAAAA,KAAI,2BAA2B,IAAI;AACnC,EAAAA,KAAI,wBAAwB,IAAI;AAChC,EAAAA,KAAI,+CAA+C,IAAI;AACvD,EAAAA,KAAI,sBAAsB,IAAI;AAC9B,EAAAA,KAAI,2BAA2B,IAAI;AACnC,EAAAA,KAAI,wBAAwB,IAAI;AAChC,EAAAA,KAAI,yBAAyB,IAAI;AACjC,EAAAA,KAAI,wCAAwC,IAAI;AAChD,EAAAA,KAAI,gCAAgC,IAAI;AACxC,EAAAA,KAAI,yCAAyC,IAAI;AACjD,EAAAA,KAAI,mBAAmB,IAAI;AAC3B,EAAAA,KAAI,oCAAoC,IAAI;AAC5C,EAAAA,KAAI,gCAAgC,IAAI;AACxC,EAAAA,KAAI,yCAAyC,IAAI;AACjD,EAAAA,KAAI,iDAAiD,IAAI;AACzD,EAAAA,KAAI,6CAA6C,IAAI;AACrD,EAAAA,KAAI,kBAAkB,IAAI;AAC1B,EAAAA,KAAI,UAAU,IAAI;AAClB,EAAAA,KAAI,uBAAuB,IAAI;AAC/B,EAAAA,KAAI,oCAAoC,IAAI;AAC5C,EAAAA,KAAI,4CAA4C,IAAI;AACpD,EAAAA,KAAI,2DAA2D,IAAI;AACnE,EAAAA,KAAI,4CAA4C,IAAI;AACpD,EAAAA,KAAI,2CAA2C,IAAI;AACnD,EAAAA,KAAI,2CAA2C,IAAI;AACnD,EAAAA,KAAI,gCAAgC,IAAI;AACxC,EAAAA,KAAI,gCAAgC,IAAI;AACxC,EAAAA,KAAI,+BAA+B,IAAI;AACvC,EAAAA,KAAI,+BAA+B,IAAI;AACvC,EAAAA,KAAI,oBAAoB,IAAI;AAC5B,EAAAA,KAAI,0BAA0B,IAAI;AAClC,EAAAA,KAAI,gCAAgC,IAAI;AACxC,EAAAA,KAAI,cAAc,IAAI;AACtB,EAAAA,KAAI,eAAe,IAAI;AACvB,EAAAA,KAAI,6BAA6B,IAAI;AACrC,EAAAA,KAAI,cAAc,IAAI;AACtB,EAAAA,KAAI,0BAA0B,IAAI;AAClC,EAAAA,KAAI,YAAY,IAAI;AACpB,EAAAA,KAAI,4CAA4C,IAAI;AACpD,EAAAA,KAAI,wBAAwB,IAAI;AAChC,EAAAA,KAAI,6BAA6B,IAAI;AACrC,EAAAA,KAAI,uCAAuC,IAAI;AAC/C,EAAAA,KAAI,2BAA2B,IAAI;AACnC,EAAAA,KAAI,gCAAgC,IAAI;AACxC,EAAAA,KAAI,oCAAoC,IAAI;AAC5C,EAAAA,KAAI,oBAAoB,IAAI;AAC5B,EAAAA,KAAI,0CAA0C,IAAI;AAClD,EAAAA,KAAI,oBAAoB,IAAI;AAC5B,EAAAA,KAAI,sBAAsB,IAAI;AAC9B,EAAAA,KAAI,gBAAgB,IAAI;AACxB,EAAAA,KAAI,kBAAkB,IAAI;AAC1B,EAAAA,KAAI,kCAAkC,IAAI;AAC1C,EAAAA,KAAI,uCAAuC,IAAI;AAC/C,EAAAA,KAAI,mCAAmC,IAAI;AAC3C,EAAAA,KAAI,0BAA0B,IAAI;AAClC,EAAAA,KAAI,2BAA2B,IAAI;AACnC,EAAAA,KAAI,iCAAiC,IAAI;AACzC,EAAAA,KAAI,sBAAsB,IAAI;AAC9B,EAAAA,KAAI,oCAAoC,IAAI;AAChD,GAAG,QAAQ,MAAM,CAAC,EAAE;;;AC3DpB,IAAM,2BAA2B,KAAK;AAI/B,IAAM,eAAN,MAAmB;AAAA,EACtB,YAAY,SAAS;AACjB,SAAK,UAAU;AACf,SAAK,OAAO;AACZ,SAAK,MAAM;AAEX,SAAK,aAAa;AAClB,SAAK,WAAW,CAAC;AACjB,SAAK,kBAAkB;AACvB,SAAK,mBAAmB;AACxB,SAAK,gBAAgB;AACrB,SAAK,kBAAkB;AACvB,SAAK,QAAQ;AACb,SAAK,eAAe;AACpB,SAAK,oBAAoB;AACzB,SAAK,OAAO;AAEZ,SAAK,gBAAgB;AAAA,EACzB;AAAA;AAAA,EAEA,IAAI,MAAM;AACN,WAAO,KAAK,MAAM,KAAK,eAAe,OAAO,KAAK,eAAe,KAAK,GAAG;AAAA,EAC7E;AAAA,EACA,IAAI,SAAS;AACT,WAAO,KAAK,oBAAoB,KAAK;AAAA,EACzC;AAAA,EACA,SAAS,MAAM,UAAU;AACrB,UAAM,EAAE,MAAM,KAAK,OAAO,IAAI;AAC9B,UAAM,WAAW,MAAM;AACvB,UAAM,cAAc,SAAS;AAC7B,WAAO;AAAA,MACH;AAAA,MACA,WAAW;AAAA,MACX,SAAS;AAAA,MACT;AAAA,MACA,QAAQ;AAAA,MACR;AAAA,MACA,WAAW;AAAA,IACf;AAAA,EACJ;AAAA,EACA,KAAK,MAAM;AACP,QAAI,KAAK,QAAQ,gBAAgB,KAAK,kBAAkB,KAAK,QAAQ;AACjE,WAAK,gBAAgB,KAAK;AAC1B,WAAK,QAAQ,aAAa,KAAK,SAAS,MAAM,CAAC,CAAC;AAAA,IACpD;AAAA,EACJ;AAAA,EACA,UAAU;AACN,SAAK,SAAS,KAAK,KAAK,UAAU;AAClC,SAAK,aAAa,KAAK;AAAA,EAC3B;AAAA,EACA,kBAAkB,IAAI;AAElB,QAAI,KAAK,QAAQ,KAAK,KAAK,SAAS,GAAG;AACnC,YAAM,SAAS,KAAK,KAAK,WAAW,KAAK,MAAM,CAAC;AAChD,UAAI,gBAAgB,MAAM,GAAG;AAEzB,aAAK;AAEL,aAAK,QAAQ;AACb,eAAO,0BAA0B,IAAI,MAAM;AAAA,MAC/C;AAAA,IACJ,WAES,CAAC,KAAK,kBAAkB;AAC7B,WAAK,gBAAgB;AACrB,aAAO,YAAE;AAAA,IACb;AAEA,SAAK,KAAK,IAAI,sBAAsB;AACpC,WAAO;AAAA,EACX;AAAA,EACA,sBAAsB;AAClB,WAAO,KAAK,MAAM,KAAK;AAAA,EAC3B;AAAA,EACA,kBAAkB;AACd,QAAI,KAAK,oBAAoB,GAAG;AAC5B,WAAK,OAAO,KAAK,KAAK,UAAU,KAAK,GAAG;AACxC,WAAK,gBAAgB,KAAK;AAC1B,WAAK,qBAAqB,KAAK;AAC/B,WAAK,MAAM;AACX,WAAK,aAAa;AAClB,WAAK,SAAS,SAAS;AAAA,IAC3B;AAAA,EACJ;AAAA,EACA,MAAM,OAAO,aAAa;AACtB,QAAI,KAAK,KAAK,SAAS,GAAG;AACtB,WAAK,QAAQ;AAAA,IACjB,OACK;AACD,WAAK,OAAO;AAAA,IAChB;AACA,SAAK,gBAAgB;AACrB,SAAK,mBAAmB;AAAA,EAC5B;AAAA,EACA,uBAAuB,OAAO;AAC1B,SAAK,OAAO,KAAK,KAAK,UAAU,GAAG,KAAK,MAAM,CAAC,IAAI,QAAQ,KAAK,KAAK,UAAU,KAAK,MAAM,CAAC;AAC3F,SAAK,gBAAgB;AAAA,EACzB;AAAA,EACA,WAAW,SAAS,eAAe;AAE/B,QAAI,KAAK,MAAM,QAAQ,SAAS,KAAK,KAAK,QAAQ;AAC9C,WAAK,gBAAgB,CAAC,KAAK;AAC3B,aAAO;AAAA,IACX;AACA,QAAI,eAAe;AACf,aAAO,KAAK,KAAK,WAAW,SAAS,KAAK,GAAG;AAAA,IACjD;AACA,aAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACrC,YAAM,KAAK,KAAK,KAAK,WAAW,KAAK,MAAM,CAAC,IAAI;AAChD,UAAI,OAAO,QAAQ,WAAW,CAAC,GAAG;AAC9B,eAAO;AAAA,MACX;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA,EACA,KAAK,QAAQ;AACT,UAAM,MAAM,KAAK,MAAM;AACvB,QAAI,OAAO,KAAK,KAAK,QAAQ;AACzB,WAAK,gBAAgB,CAAC,KAAK;AAC3B,aAAO,YAAE;AAAA,IACb;AACA,UAAM,OAAO,KAAK,KAAK,WAAW,GAAG;AACrC,WAAO,SAAS,YAAE,kBAAkB,YAAE,YAAY;AAAA,EACtD;AAAA,EACA,UAAU;AACN,SAAK;AAEL,QAAI,KAAK,OAAO;AACZ,WAAK,QAAQ;AACb,WAAK;AACL,WAAK,eAAe,KAAK;AAAA,IAC7B;AACA,QAAI,KAAK,OAAO,KAAK,KAAK,QAAQ;AAC9B,WAAK,gBAAgB,CAAC,KAAK;AAC3B,aAAO,YAAE;AAAA,IACb;AACA,QAAI,KAAK,KAAK,KAAK,WAAW,KAAK,GAAG;AAEtC,QAAI,OAAO,YAAE,iBAAiB;AAC1B,WAAK,QAAQ;AACb,WAAK,kBAAkB;AACvB,aAAO,YAAE;AAAA,IACb;AAGA,QAAI,OAAO,YAAE,WAAW;AACpB,WAAK,QAAQ;AACb,UAAI,KAAK,iBAAiB;AAEtB,aAAK;AACL,aAAK,kBAAkB;AACvB,aAAK,QAAQ;AACb,eAAO,KAAK,QAAQ;AAAA,MACxB;AAAA,IACJ;AACA,SAAK,kBAAkB;AACvB,QAAI,YAAY,EAAE,GAAG;AACjB,WAAK,KAAK,kBAAkB,EAAE;AAAA,IAClC;AAIA,UAAM,qBAAqB,KAAK,QAAQ,iBAAiB,QACpD,KAAK,MAAQ,KAAK,OACnB,OAAO,YAAE,aACT,OAAO,YAAE,mBACR,KAAK,OAAQ,KAAK;AACvB,QAAI,CAAC,oBAAoB;AACrB,WAAK,+BAA+B,EAAE;AAAA,IAC1C;AACA,WAAO;AAAA,EACX;AAAA,EACA,+BAA+B,IAAI;AAC/B,QAAI,mBAAmB,EAAE,GAAG;AACxB,WAAK,KAAK,IAAI,6BAA6B;AAAA,IAC/C,WACS,qBAAqB,EAAE,GAAG;AAC/B,WAAK,KAAK,IAAI,yBAAyB;AAAA,IAC3C;AAAA,EACJ;AAAA,EACA,QAAQ,OAAO;AACX,SAAK,OAAO;AACZ,WAAO,KAAK,MAAM,KAAK,YAAY;AAC/B,WAAK,aAAa,KAAK,SAAS,IAAI;AACpC,WAAK;AAAA,IACT;AACA,SAAK,QAAQ;AAAA,EACjB;AACJ;;;ACnMO,IAAI;AAAA,CACV,SAAUC,YAAW;AAClB,EAAAA,WAAUA,WAAU,WAAW,IAAI,CAAC,IAAI;AACxC,EAAAA,WAAUA,WAAU,gBAAgB,IAAI,CAAC,IAAI;AAC7C,EAAAA,WAAUA,WAAU,sBAAsB,IAAI,CAAC,IAAI;AACnD,EAAAA,WAAUA,WAAU,WAAW,IAAI,CAAC,IAAI;AACxC,EAAAA,WAAUA,WAAU,SAAS,IAAI,CAAC,IAAI;AACtC,EAAAA,WAAUA,WAAU,SAAS,IAAI,CAAC,IAAI;AACtC,EAAAA,WAAUA,WAAU,SAAS,IAAI,CAAC,IAAI;AACtC,EAAAA,WAAUA,WAAU,KAAK,IAAI,CAAC,IAAI;AAClC,EAAAA,WAAUA,WAAU,aAAa,IAAI,CAAC,IAAI;AAC9C,GAAG,cAAc,YAAY,CAAC,EAAE;AACzB,SAAS,aAAa,OAAO,UAAU;AAC1C,WAAS,IAAI,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK;AAC9C,QAAI,MAAM,MAAM,CAAC,EAAE,SAAS,UAAU;AAClC,aAAO,MAAM,MAAM,CAAC,EAAE;AAAA,IAC1B;AAAA,EACJ;AACA,SAAO;AACX;;;ACbA,IAAM,KAAe;EACjB;EAAM;EAAG;EAAM;EAAK;EAAM;EAAM;EAAM;EAAM;EAAK;EAAM;EAAK;EAAM;EAAK;EACvE;EAAK;EAAG;EAAG;EAAM;EAAM;EAAM;EAAM;EAAM;EAAM;EAAM;EAAK;EAAM;EAAK;EACrE;EAAK;EAAG;EAAK;;AAOjB,SAAS,mBAAmB,WAAiB;AACzC,SACI,cAAc,KACb,aAAa,SAAW,aAAa,SACtC,YAAY;AAEpB;AASM,SAAU,iBAAiB,WAAiB;AAC9C,MAAI,mBAAmB,SAAS,GAAG;AAC/B,WAAO;EACX;AAEA,MAAI,aAAa,OAAO,aAAa,KAAK;AACtC,WAAO,GAAG,YAAY,GAAG,KAAK;EAClC;AAEA,SAAO;AACX;AASM,SAAU,oBAAoB,WAAiB;AACjD,SAAO,mBAAmB,SAAS,IAAI,QAAU;AACrD;;;AC/CA,IAAM,iBAAkC,uBAAK;AACzC,QAAM,QAAQ,IAAI,WAAW,GAAG;AAChC,MAAI,OAAO;AACX,WAAS,OAAO,IAAM,QAAQ,KAAM,QAAQ;AACxC,QAAI,SAAS,MAAQ,SAAS,MAAQ,SAAS,IAAM;AACjD,YAAM,IAAI,IAAI;IAClB;EACJ;AACA,SAAO;AACX,GAAE;AAsCI,SAAU,eACZ,OACA,cACA,WACA,gBACA,YACA,UAAgB;AAEhB,QAAM,OAAO;AACb,QAAM,cAAc,MAAM;AAE1B,QAAM,cAAc,YAAY,OAAO;AAEvC,MAAI,MAAM;AAGV,QAAM,eAAe,MAAa;AAC9B,UAAMC,MAAK,eAAe,MAAM,WAAW,KAAK,CAAC;AACjD,WAAOA,MAAK,WACNA,MACAA,MAAK,OAAO,cAAc,eAAe,MAAM,WAAW,KAAK,CAAC;EAC1E;AAEA,QAAM,iBAAiB,YAAY;AACnC,QAAM,YAAY,YAAY;AAO9B,QAAM,SAAS,IAAI,WAAW,SAAS;AACvC,SAAO,KAAK,IAAI,gBAAgB,QAAQ;AACxC,SAAO,KAAK,IAAI,WAAW,gBAAgB,SAAS;AACpD,QAAM,QAAQ,IAAI,WAAW,SAAS;AACtC,QAAM,SAAS,IAAI,WAAW,SAAS;AAavC,WAAS,YAAY,OAAe,KAAW;AAC3C,QAAI,WAAW;AACf,QAAI,OAAO;AACX,UAAM,MAAM,MAAM;AAClB,WAAO,OAAO,KAAK;AACf,YAAM,OAAO,eAAe,MAAM,WAAW,KAAK,CAAC;AACnD,UAAI,OAAO,IAAI;AACX,oBAAY;AACZ,eAAO,MAAM,IAAI;MACrB,WAAW,SAAS,IAAI;AACpB,YAAI,YAAY,eAAe,MAAM,WAAW,KAAK,CAAC,IAAI;AAC1D,eAAO;AAAa,iBAAO,MAAM,IAAI,EAAE;MAC3C,OAAO;AACH,cAAM,OAAO,eAAe,MAAM,WAAW,KAAK,CAAC;AACnD,oBACI;SAEC,OAAO,KACF,OAAO,OAAO,eAAe,MAAM,WAAW,KAAK,CAAC,IACpD,eAAe,MAAM,WAAW,KAAK,CAAC,IAAI,OAC1C,eAAe,MAAM,WAAW,KAAK,CAAC,IAAI,OAC1C,eAAe,MAAM,WAAW,KAAK,CAAC;AAChD,eAAO,MAAM,IAAI;MACrB;IACJ;EACJ;AAGA,cAAY,gBAAgB,CAAC;AAC7B,cAAY,gBAAgB,QAAQ;AASpC,QAAM,aAAa,IAAI,WAAW,aAAa,CAAC;AAChD,MAAI,WAAW;AACf,MAAI,aAAa;AAQjB,WAAS,oBAAoB,OAAe,WAAiB;AACzD,aAAS,QAAQ,GAAG,QAAQ,OAAO,SAAS;AACxC,YAAM,OAAO,YAAY;AACzB,YAAM,IAAI,aAAY;AACtB,YAAM,IAAI,aAAY;AACtB,iBAAW,aAAa,CAAC,IAAI;AAC7B,iBAAW,aAAa,IAAI,CAAC,IAAI;AACjC,oBAAc;AACd,YAAM,IAAI,IAAI;AACd,YAAM,eACD,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,MAC5B,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI;AACjC,aAAO,IAAI,IAAI;AACf,kBAAY;IAChB;EACJ;AACA,sBACI,aAAa,WAAW,gBACxB,WAAW,cAAc;AAE7B,sBAAoB,WAAW,gBAAgB,cAAc;AAG7D,QAAM,OAAO,IAAI,YAAY,QAAQ;AACrC,MAAI,QAAQ;AACZ,WAAS,QAAQ,GAAG,QAAQ,YAAY,SAAS;AAC7C,aAAS,OAAO,GAAG,OAAO,GAAG,QAAQ;AACjC,YAAM,SAAS,WAAW,QAAQ,IAAI,IAAI;AAC1C,YAAM,QAAQ,OAAO,MAAM;AAC3B,UAAI,QAAQ,GAAG;AACX,YAAI,OAAO,MAAM,MAAM;AACvB,cAAM,UAAU,OAAO,OAAO,MAAM;AACpC,eAAO,OAAO;AAAS,eAAK,OAAO,IAAI,KAAK,MAAM;MACtD,OAAO;AACH,aAAK,OAAO,IAAI;MACpB;IACJ;EACJ;AAGA,QAAM,MAAM,IAAI,YAAY,YAAY;AACxC,MAAI,WAAW;AACf,SAAO,MAAM,aAAa;AACtB,QAAI,OAAO,eAAe,MAAM,WAAW,KAAK,CAAC;AACjD,QAAI,QAAQ,UAAU;AAClB,aACI,OAAO,OACP,cACA,eAAe,MAAM,WAAW,KAAK,CAAC;IAC9C;AACA,UAAM,QAAQ,OAAO,IAAI;AACzB,QAAI,QAAQ,GAAG;AACX,UAAI,OAAO,MAAM,IAAI;AACrB,YAAM,UAAU,OAAO,OAAO,IAAI;AAClC,aAAO,OAAO;AAAS,YAAI,UAAU,IAAI,KAAK,MAAM;IACxD,OAAO;AACH,UAAI,UAAU,IAAI;IACtB;EACJ;AACA,SAAO;AACX;;;AC5MO,IAAM,iBAA8C,+BACvD,omkBACA,OACA,MACA,IACA,IACA,EAAE;;;ACPC,IAAM,gBAA6C,oBAAI,YAAY;EACtE;EAAK;EAAQ;EAAQ;EAAG;EAAG;EAAG;EAAG;EAAK;EAAQ;EAAK;EAAQ;EAAM;EACjE;EAAQ;EAAK;EAAG;EAAG;EAAG;EAAG;EAAK;EAAQ;EAAK;EAAK;CACnD;;;ACiCD,IAAkB;CAAlB,SAAkBC,eAAY;AAC1B,EAAAA,cAAAA,cAAA,cAAA,IAAA,KAAA,IAAA;AACA,EAAAA,cAAAA,cAAA,QAAA,IAAA,IAAA,IAAA;AACA,EAAAA,cAAAA,cAAA,eAAA,IAAA,IAAA,IAAA;AACA,EAAAA,cAAAA,cAAA,YAAA,IAAA,GAAA,IAAA;AAEA,EAAAA,cAAAA,cAAA,YAAA,IAAA,IAAA,IAAA;AACJ,GAPkB,iBAAA,eAAY,CAAA,EAAA;;;AC9B9B,IAAW;CAAX,SAAWC,YAAS;AAChB,EAAAA,WAAAA,WAAA,KAAA,IAAA,EAAA,IAAA;AACA,EAAAA,WAAAA,WAAA,KAAA,IAAA,EAAA,IAAA;AACA,EAAAA,WAAAA,WAAA,MAAA,IAAA,EAAA,IAAA;AACA,EAAAA,WAAAA,WAAA,QAAA,IAAA,EAAA,IAAA;AACA,EAAAA,WAAAA,WAAA,MAAA,IAAA,EAAA,IAAA;AACA,EAAAA,WAAAA,WAAA,MAAA,IAAA,EAAA,IAAA;AACA,EAAAA,WAAAA,WAAA,SAAA,IAAA,EAAA,IAAA;AACA,EAAAA,WAAAA,WAAA,SAAA,IAAA,GAAA,IAAA;AACJ,GATW,cAAA,YAAS,CAAA,EAAA;AAYpB,IAAM,eAAe;AA6CrB,SAAS,SAAS,MAAY;AAC1B,SAAQ,OAAO,UAAU,SAAU,KAAK;AAC5C;AAEA,SAAS,uBAAuB,MAAY;AACxC,UAAS,OAAO,gBAAgB,UAAU,YAAa,KAAK;AAChE;AAEA,SAAS,QAAQ,MAAY;AACzB,UAAS,OAAO,gBAAgB,UAAU,YAAa,KAAK;AAChE;AASA,SAAS,8BAA8B,MAAY;AAC/C,SAAO,SAAS,UAAU,UAAU,QAAQ,IAAI,KAAK,SAAS,IAAI;AACtE;AAEA,IAAW;CAAX,SAAWC,qBAAkB;AACzB,EAAAA,oBAAAA,oBAAA,aAAA,IAAA,CAAA,IAAA;AACA,EAAAA,oBAAAA,oBAAA,cAAA,IAAA,CAAA,IAAA;AACA,EAAAA,oBAAAA,oBAAA,gBAAA,IAAA,CAAA,IAAA;AACA,EAAAA,oBAAAA,oBAAA,YAAA,IAAA,CAAA,IAAA;AACA,EAAAA,oBAAAA,oBAAA,aAAA,IAAA,CAAA,IAAA;AACJ,GANW,uBAAA,qBAAkB,CAAA,EAAA;AAW7B,IAAY;CAAZ,SAAYC,eAAY;AAEpB,EAAAA,cAAAA,cAAA,QAAA,IAAA,CAAA,IAAA;AAEA,EAAAA,cAAAA,cAAA,QAAA,IAAA,CAAA,IAAA;AAEA,EAAAA,cAAAA,cAAA,WAAA,IAAA,CAAA,IAAA;AACJ,GAPY,iBAAA,eAAY,CAAA,EAAA;AA2BlB,IAAO,gBAAP,MAAoB;EA8BD;EAUA;EAEA;;EAxCb,QAAgB,mBAAmB;;EAEnC,WAAW;;;;;;;EAOX,SAAS;;EAGT,YAAY;;;;;;;EAOZ,SAAS;;EAET,aAAa,aAAa;;;EAG1B,cAAc;EAEtB,YAEqB,YAUA,eAEA,QAAwC;AAZxC,SAAA,aAAA;AAUA,SAAA,gBAAA;AAEA,SAAA,SAAA;EAClB;;;;;EAMH,YAAY,YAAwB;AAChC,SAAK,aAAa;AAClB,SAAK,QAAQ,mBAAmB;AAChC,SAAK,SAAS;AACd,SAAK,YAAY;AACjB,SAAK,SAAS;AACd,SAAK,WAAW;AAChB,SAAK,cAAc;EACvB;;;;;;;;;;;EAYA,MAAM,OAAe,QAAc;AAC/B,YAAQ,KAAK,OAAO;MAChB,KAAK,mBAAmB,aAAa;AACjC,YAAI,MAAM,WAAW,MAAM,MAAM,UAAU,KAAK;AAC5C,eAAK,QAAQ,mBAAmB;AAChC,eAAK,YAAY;AACjB,iBAAO,KAAK,kBAAkB,OAAO,SAAS,CAAC;QACnD;AACA,aAAK,QAAQ,mBAAmB;AAChC,eAAO,KAAK,iBAAiB,OAAO,MAAM;MAC9C;MAEA,KAAK,mBAAmB,cAAc;AAClC,eAAO,KAAK,kBAAkB,OAAO,MAAM;MAC/C;MAEA,KAAK,mBAAmB,gBAAgB;AACpC,eAAO,KAAK,oBAAoB,OAAO,MAAM;MACjD;MAEA,KAAK,mBAAmB,YAAY;AAChC,eAAO,KAAK,gBAAgB,OAAO,MAAM;MAC7C;MAEA,SAAS;AAEL,eAAO,KAAK,iBAAiB,OAAO,MAAM;MAC9C;IACJ;EACJ;;;;;;;;;;EAWQ,kBAAkB,OAAe,QAAc;AACnD,QAAI,UAAU,MAAM,QAAQ;AACxB,aAAO;IACX;AAEA,SAAK,MAAM,WAAW,MAAM,IAAI,kBAAkB,UAAU,SAAS;AACjE,WAAK,QAAQ,mBAAmB;AAChC,WAAK,YAAY;AACjB,aAAO,KAAK,gBAAgB,OAAO,SAAS,CAAC;IACjD;AAEA,SAAK,QAAQ,mBAAmB;AAChC,WAAO,KAAK,oBAAoB,OAAO,MAAM;EACjD;;;;;;;;;;;EAYQ,gBAAgB,OAAe,QAAc;AACjD,UAAM,cAAc,MAAM;AAE1B,QAAI,EAAE,OAAM,IAAK;AACjB,QAAI,EAAE,SAAQ,IAAK;AACnB,WAAO,SAAS,aAAa;AACzB,YAAM,OAAO,MAAM,WAAW,MAAM;AACpC,UAAI,SAAS,IAAI,KAAK,uBAAuB,IAAI,GAAG;AAEhD,cAAM,QACF,QAAQ,UAAU,OACZ,OAAO,UAAU,QAChB,OAAO,gBAAgB,UAAU,UAAU;AACtD,iBAAS,SAAS,KAAK;AACvB,oBAAY;AACZ,kBAAU;MACd,OAAO;AACH,aAAK,SAAS;AACd,aAAK,WAAW;AAChB,eAAO,KAAK,kBAAkB,MAAM,CAAC;MACzC;IACJ;AACA,SAAK,SAAS;AACd,SAAK,WAAW;AAChB,WAAO;EACX;;;;;;;;;;;EAYQ,oBAAoB,OAAe,QAAc;AACrD,UAAM,cAAc,MAAM;AAE1B,QAAI,EAAE,OAAM,IAAK;AACjB,QAAI,EAAE,SAAQ,IAAK;AACnB,WAAO,SAAS,aAAa;AACzB,YAAM,QAAQ,MAAM,WAAW,MAAM,IAAI,UAAU;AACnD,UAAI,UAAU,IAAI,GAAG;AACjB,aAAK,SAAS;AACd,aAAK,WAAW;AAChB,eAAO,KAAK,kBAAkB,QAAQ,UAAU,MAAM,CAAC;MAC3D;AACA,eAAS,SAAS,KAAK;AACvB,kBAAY;AACZ,gBAAU;IACd;AACA,SAAK,SAAS;AACd,SAAK,WAAW;AAChB,WAAO;EACX;;;;;;;;;;;;;EAcQ,kBAAkB,QAAgB,gBAAsB;AAE5D,QAAI,KAAK,YAAY,gBAAgB;AACjC,WAAK,QAAQ,2CACT,KAAK,QAAQ;AAEjB,aAAO;IACX;AAGA,QAAI,WAAW,UAAU,MAAM;AAC3B,WAAK,YAAY;IACrB,WAAW,KAAK,eAAe,aAAa,QAAQ;AAChD,aAAO;IACX;AAEA,SAAK,eACA,KAAK,eAAe,gBACf,sBACA,kBAAkB,KAAK,MAAM,GACnC,KAAK,QAAQ;AAGjB,QAAI,KAAK,QAAQ;AACb,UAAI,WAAW,UAAU,MAAM;AAC3B,aAAK,OAAO,wCAAuC;MACvD;AAEA,WAAK,OAAO,kCAAkC,KAAK,MAAM;IAC7D;AAEA,WAAO,KAAK;EAChB;;;;;;;;;;;;;EAcQ,2BACJ,UACA,QACA,MACA,aAAmB;AAEnB,SAAK,WAAW;AAChB,SAAK,SAAS;AACd,WAAO,KAAK,WAAW,KAClB,KAAK,eAAe,aAAa,cAC7B,gBAAgB,KACb,SAAS,KACT,8BAA8B,IAAI,KACxC,IACA,KAAK,6BAA4B;EAC3C;;;;;;;;;EAUQ,iBAAiB,OAAe,QAAc;AAClD,UAAM,EAAE,WAAU,IAAK;AACvB,UAAM,cAAc,MAAM;AAC1B,UAAM,WAAW,KAAK,eAAe,aAAa;AAgBlD,QAAI,EAAE,UAAS,IAAK;AACpB,QAAI,EAAE,OAAM,IAAK;AACjB,QAAI,EAAE,SAAQ,IAAK;AACnB,QAAI,UAAU,WAAW,SAAS;AAElC,WAAO,SAAS,aAAa;AAOzB,cACK,WACI,aAAa,eAAe,aAAa,aAC1C,MACH,UAAU,aAAa,gBAAgB,GAC1C;AACE,cAAMC,QAAO,MAAM,WAAW,MAAM;AACpC,cAAM,aAAa,UAAU,aAAa;AAC1C,cAAM,eAAe,UAAU,aAAa,kBAAkB;AAC9D,YAAI,gBAAgB,GAAG;AAEnB,cAAIA,UAAS,YAAY;AACrB,mBAAO,KAAK,2BACR,UACA,QACAA,OACA,CAAC;UAET;AACA,uBAAa;QACjB,OAAO;AACH,gBAAM,OAAOA,QAAO;AACpB,cAAI,SAAS,KAAK,aAAa;AAC3B,mBAAO,KAAK,2BACR,UACA,QACAA,OACA,CAAC;UAET;AACA,gBAAM,SAAS,WAAW,YAAY,IAAI,IAAI;AAC9C,cAAI,WAAW,GAAG;AACd,mBAAO,KAAK,2BACR,UACA,QACAA,OACA,CAAC;UAET;AAEA,sBAAa,YAAY,cAAc,SAAU;QACrD;AACA,kBAAU,WAAW,SAAS;AAC9B,kBAAU;AACV,kBAAU;AAMV,YAAI,UAAU;AAAa;MAC/B;AACA,UAAI,UAAU;AAAa;AAG3B,WACK,WACI,aAAa,eAAe,aAAa,aAC9C,aAAa,QACf;AACE,cAAM,aACD,UAAU,aAAa,kBAAkB;AAC9C,YAAI,EAAE,YAAW,IAAK;AAGtB,YAAI,gBAAgB,GAAG;AACnB,gBAAMA,QAAO,MAAM,WAAW,MAAM;AACpC,cAAIA,WAAU,UAAU,aAAa,aAAa;AAC9C,mBAAO,KAAK,2BACR,UACA,QACAA,OACA,CAAC;UAET;AACA,oBAAU;AACV,oBAAU;AACV,wBAAc;QAClB;AAGA,eAAO,cAAc,WAAW;AAC5B,cAAI,UAAU,aAAa;AACvB,iBAAK,YAAY;AACjB,iBAAK,SAAS;AACd,iBAAK,WAAW;AAChB,iBAAK,cAAc;AACnB,mBAAO;UACX;AAEA,gBAAM,oBAAoB,cAAc;AACxC,gBAAM,aACF,WAAW,YAAY,KAAK,qBAAqB,EAAE;AACvD,gBAAM,eACD,gBAAgB,oBAAoB,MAAM,KAAM;AAErD,gBAAMA,QAAO,MAAM,WAAW,MAAM;AACpC,cAAIA,UAAS,cAAc;AACvB,iBAAK,cAAc;AACnB,mBAAO,KAAK,2BACR,UACA,QACAA,OACA,CAAC;UAET;AACA,oBAAU;AACV,oBAAU;AACV,yBAAe;QACnB;AAEA,aAAK,cAAc;AACnB,qBAAa,KAAK,aAAa;AAC/B,kBAAU,WAAW,SAAS;AAE9B;MACJ;AAGA,YAAM,cAAc,YAAY;AAChC,YAAM,OAAO,MAAM,WAAW,MAAM;AAEpC,UAAI,gBAAgB,GAAG;AAEnB,YAAI,CAAC,aAAa,UAAU,aAAa,YAAY,GAAG;AACpD,eAAK,SAAS;AACd,sBAAY,SAAS;AACrB,mBAAS;QACb;AAOA,YAAI,SAAS,UAAU,MAAM;AACzB,iBAAO,KAAK,oBACR,WACA,aACA,WAAW,MAAM;QAEzB;AAQA,YAAI,gBAAgB,GAAG;AACnB,iBAAO,KAAK,2BACR,UACA,QACA,MACA,WAAW;QAEnB;MACJ;AAGA,YAAM,OAAO,gBACT,YACA,SACA,aAAa,eAAe,IAC5B,IAAI;AAGR,UAAI,OAAO,GAAG;AACV,eAAO,KAAK,2BACR,UACA,QACA,MACA,WAAW;MAEnB;AAEA,kBAAY;AACZ,gBAAU,WAAW,SAAS;AAC9B,gBAAU;AACV,gBAAU;IACd;AAMA,QACI,CAAC,YACD,YAAY,OAAO,MAClB,UAAU,aAAa,YAAY,GACtC;AACE,WAAK,SAAS;AACd,kBAAY,SAAS;AACrB,eAAS;IACb;AACA,SAAK,YAAY;AACjB,SAAK,SAAS;AACd,SAAK,WAAW;AAChB,WAAO;EACX;;;;;EAMQ,+BAA4B;AAChC,UAAM,EAAE,QAAQ,WAAU,IAAK;AAE/B,UAAM,cAAc,WAAW,MAAM,MAAM;AAE3C,SAAK,oBAAoB,QAAQ,aAAa,KAAK,QAAQ;AAC3D,SAAK,QAAQ,wCAAuC;AAEpD,WAAO,KAAK;EAChB;;;;;;;;EASQ,oBACJ,QACA,aACA,UAAgB;AAEhB,UAAM,EAAE,WAAU,IAAK;AAEvB,SAAK,cACD,gBAAgB,IACV,WAAW,MAAM,IAAI,aAAa,aAClC,WAAW,SAAS,CAAC,GAC3B,QAAQ;AAEZ,QAAI,gBAAgB,GAAG;AAEnB,WAAK,cAAc,WAAW,SAAS,CAAC,GAAG,QAAQ;IACvD;AAEA,WAAO;EACX;;;;;;;EAQA,MAAG;AACC,YAAQ,KAAK,OAAO;MAChB,KAAK,mBAAmB,aAAa;AAEjC,eAAO,KAAK,WAAW,MAClB,KAAK,eAAe,aAAa,aAC9B,KAAK,WAAW,KAAK,aACvB,KAAK,6BAA4B,IACjC;MACV;;MAEA,KAAK,mBAAmB,gBAAgB;AACpC,eAAO,KAAK,kBAAkB,GAAG,CAAC;MACtC;MACA,KAAK,mBAAmB,YAAY;AAChC,eAAO,KAAK,kBAAkB,GAAG,CAAC;MACtC;MACA,KAAK,mBAAmB,cAAc;AAClC,aAAK,QAAQ,2CACT,KAAK,QAAQ;AAEjB,eAAO;MACX;MACA,SAAS;AAEL,eAAO;MACX;IACJ;EACJ;;AAeE,SAAU,gBACZ,YACA,SACA,WACA,MAAY;AAEZ,QAAM,eAAe,UAAU,aAAa,kBAAkB;AAC9D,QAAM,aAAa,UAAU,aAAa;AAG1C,MAAI,YAAY;AACZ,QAAI,gBAAgB,GAAG;AAEnB,aAAO,SAAS,aAAa,YAAY;IAC7C;AAMA,UAAM,OAAO,OAAO;AACpB,QAAI,SAAS,KAAK;AAAa,aAAO;AACtC,UAAM,SAAS,WAAW,YAAY,IAAI;AAO1C,WAAO,WAAW,IACZ,KACC,YAAY,cAAc,SAAS,IAAK;EACnD;AAOA,MAAI,gBAAgB;AAAG,WAAO;AAC9B,QAAM,iBAAkB,cAAc,KAAM;AAC5C,QAAM,YAAY,YAAY,iBAAiB;AAC/C,WAAS,QAAQ,GAAG,QAAQ,aAAa,SAAS;AAC9C,UAAM,SAAS,WAAW,aAAa,SAAS,EAAE;AAClD,UAAM,MAAO,YAAY,QAAQ,MAAM,KAAM;AAC7C,QAAI,QAAQ,MAAM;AACd,YAAM,eAAe,YAAY,iBAAiB;AAElD,aAAQ,YAAY,WAAW,YAAY,IAAK;IACpD;AAEA,QAAI,MAAM;AAAM,aAAO;EAC3B;AACA,SAAO;AACX;;;AC3wBO,IAAI;AAAA,CACV,SAAUC,KAAI;AACX,EAAAA,IAAG,MAAM,IAAI;AACb,EAAAA,IAAG,QAAQ,IAAI;AACf,EAAAA,IAAG,KAAK,IAAI;AACZ,EAAAA,IAAG,OAAO,IAAI;AACd,EAAAA,IAAG,KAAK,IAAI;AACZ,EAAAA,IAAG,OAAO,IAAI;AAClB,GAAG,OAAO,KAAK,CAAC,EAAE;AACX,IAAI;AAAA,CACV,SAAUC,QAAO;AACd,EAAAA,OAAM,MAAM,IAAI;AAChB,EAAAA,OAAM,QAAQ,IAAI;AAClB,EAAAA,OAAM,UAAU,IAAI;AACpB,EAAAA,OAAM,QAAQ,IAAI;AAClB,EAAAA,OAAM,MAAM,IAAI;AAChB,EAAAA,OAAM,OAAO,IAAI;AACjB,EAAAA,OAAM,MAAM,IAAI;AAChB,EAAAA,OAAM,MAAM,IAAI;AACpB,GAAG,UAAU,QAAQ,CAAC,EAAE;AAMjB,IAAI;AAAA,CACV,SAAUC,gBAAe;AACtB,EAAAA,eAAc,WAAW,IAAI;AAC7B,EAAAA,eAAc,QAAQ,IAAI;AAC1B,EAAAA,eAAc,gBAAgB,IAAI;AACtC,GAAG,kBAAkB,gBAAgB,CAAC,EAAE;AACjC,IAAI;AAAA,CACV,SAAUC,YAAW;AAClB,EAAAA,WAAU,GAAG,IAAI;AACjB,EAAAA,WAAU,SAAS,IAAI;AACvB,EAAAA,WAAU,gBAAgB,IAAI;AAC9B,EAAAA,WAAU,QAAQ,IAAI;AACtB,EAAAA,WAAU,MAAM,IAAI;AACpB,EAAAA,WAAU,SAAS,IAAI;AACvB,EAAAA,WAAU,OAAO,IAAI;AACrB,EAAAA,WAAU,GAAG,IAAI;AACjB,EAAAA,WAAU,MAAM,IAAI;AACpB,EAAAA,WAAU,UAAU,IAAI;AACxB,EAAAA,WAAU,SAAS,IAAI;AACvB,EAAAA,WAAU,KAAK,IAAI;AACnB,EAAAA,WAAU,YAAY,IAAI;AAC1B,EAAAA,WAAU,MAAM,IAAI;AACpB,EAAAA,WAAU,IAAI,IAAI;AAClB,EAAAA,WAAU,QAAQ,IAAI;AACtB,EAAAA,WAAU,SAAS,IAAI;AACvB,EAAAA,WAAU,QAAQ,IAAI;AACtB,EAAAA,WAAU,MAAM,IAAI;AACpB,EAAAA,WAAU,KAAK,IAAI;AACnB,EAAAA,WAAU,UAAU,IAAI;AACxB,EAAAA,WAAU,IAAI,IAAI;AAClB,EAAAA,WAAU,MAAM,IAAI;AACpB,EAAAA,WAAU,SAAS,IAAI;AACvB,EAAAA,WAAU,QAAQ,IAAI;AACtB,EAAAA,WAAU,KAAK,IAAI;AACnB,EAAAA,WAAU,KAAK,IAAI;AACnB,EAAAA,WAAU,IAAI,IAAI;AAClB,EAAAA,WAAU,IAAI,IAAI;AAClB,EAAAA,WAAU,IAAI,IAAI;AAClB,EAAAA,WAAU,OAAO,IAAI;AACrB,EAAAA,WAAU,UAAU,IAAI;AACxB,EAAAA,WAAU,YAAY,IAAI;AAC1B,EAAAA,WAAU,QAAQ,IAAI;AACtB,EAAAA,WAAU,MAAM,IAAI;AACpB,EAAAA,WAAU,QAAQ,IAAI;AACtB,EAAAA,WAAU,gBAAgB,IAAI;AAC9B,EAAAA,WAAU,MAAM,IAAI;AACpB,EAAAA,WAAU,OAAO,IAAI;AACrB,EAAAA,WAAU,UAAU,IAAI;AACxB,EAAAA,WAAU,IAAI,IAAI;AAClB,EAAAA,WAAU,IAAI,IAAI;AAClB,EAAAA,WAAU,IAAI,IAAI;AAClB,EAAAA,WAAU,IAAI,IAAI;AAClB,EAAAA,WAAU,IAAI,IAAI;AAClB,EAAAA,WAAU,IAAI,IAAI;AAClB,EAAAA,WAAU,MAAM,IAAI;AACpB,EAAAA,WAAU,QAAQ,IAAI;AACtB,EAAAA,WAAU,QAAQ,IAAI;AACtB,EAAAA,WAAU,IAAI,IAAI;AAClB,EAAAA,WAAU,MAAM,IAAI;AACpB,EAAAA,WAAU,GAAG,IAAI;AACjB,EAAAA,WAAU,KAAK,IAAI;AACnB,EAAAA,WAAU,OAAO,IAAI;AACrB,EAAAA,WAAU,OAAO,IAAI;AACrB,EAAAA,WAAU,QAAQ,IAAI;AACtB,EAAAA,WAAU,QAAQ,IAAI;AACtB,EAAAA,WAAU,OAAO,IAAI;AACrB,EAAAA,WAAU,IAAI,IAAI;AAClB,EAAAA,WAAU,MAAM,IAAI;AACpB,EAAAA,WAAU,SAAS,IAAI;AACvB,EAAAA,WAAU,MAAM,IAAI;AACpB,EAAAA,WAAU,YAAY,IAAI;AAC1B,EAAAA,WAAU,SAAS,IAAI;AACvB,EAAAA,WAAU,MAAM,IAAI;AACpB,EAAAA,WAAU,MAAM,IAAI;AACpB,EAAAA,WAAU,MAAM,IAAI;AACpB,EAAAA,WAAU,QAAQ,IAAI;AACtB,EAAAA,WAAU,IAAI,IAAI;AAClB,EAAAA,WAAU,IAAI,IAAI;AAClB,EAAAA,WAAU,IAAI,IAAI;AAClB,EAAAA,WAAU,IAAI,IAAI;AAClB,EAAAA,WAAU,OAAO,IAAI;AACrB,EAAAA,WAAU,KAAK,IAAI;AACnB,EAAAA,WAAU,MAAM,IAAI;AACpB,EAAAA,WAAU,UAAU,IAAI;AACxB,EAAAA,WAAU,SAAS,IAAI;AACvB,EAAAA,WAAU,UAAU,IAAI;AACxB,EAAAA,WAAU,QAAQ,IAAI;AACtB,EAAAA,WAAU,IAAI,IAAI;AAClB,EAAAA,WAAU,UAAU,IAAI;AACxB,EAAAA,WAAU,QAAQ,IAAI;AACtB,EAAAA,WAAU,GAAG,IAAI;AACjB,EAAAA,WAAU,OAAO,IAAI;AACrB,EAAAA,WAAU,WAAW,IAAI;AACzB,EAAAA,WAAU,KAAK,IAAI;AACnB,EAAAA,WAAU,IAAI,IAAI;AAClB,EAAAA,WAAU,IAAI,IAAI;AAClB,EAAAA,WAAU,IAAI,IAAI;AAClB,EAAAA,WAAU,KAAK,IAAI;AACnB,EAAAA,WAAU,MAAM,IAAI;AACpB,EAAAA,WAAU,GAAG,IAAI;AACjB,EAAAA,WAAU,QAAQ,IAAI;AACtB,EAAAA,WAAU,QAAQ,IAAI;AACtB,EAAAA,WAAU,SAAS,IAAI;AACvB,EAAAA,WAAU,QAAQ,IAAI;AACtB,EAAAA,WAAU,QAAQ,IAAI;AACtB,EAAAA,WAAU,OAAO,IAAI;AACrB,EAAAA,WAAU,MAAM,IAAI;AACpB,EAAAA,WAAU,QAAQ,IAAI;AACtB,EAAAA,WAAU,QAAQ,IAAI;AACtB,EAAAA,WAAU,OAAO,IAAI;AACrB,EAAAA,WAAU,KAAK,IAAI;AACnB,EAAAA,WAAU,SAAS,IAAI;AACvB,EAAAA,WAAU,KAAK,IAAI;AACnB,EAAAA,WAAU,OAAO,IAAI;AACrB,EAAAA,WAAU,OAAO,IAAI;AACrB,EAAAA,WAAU,UAAU,IAAI;AACxB,EAAAA,WAAU,UAAU,IAAI;AACxB,EAAAA,WAAU,OAAO,IAAI;AACrB,EAAAA,WAAU,IAAI,IAAI;AAClB,EAAAA,WAAU,IAAI,IAAI;AAClB,EAAAA,WAAU,OAAO,IAAI;AACrB,EAAAA,WAAU,OAAO,IAAI;AACrB,EAAAA,WAAU,IAAI,IAAI;AAClB,EAAAA,WAAU,OAAO,IAAI;AACrB,EAAAA,WAAU,IAAI,IAAI;AAClB,EAAAA,WAAU,GAAG,IAAI;AACjB,EAAAA,WAAU,IAAI,IAAI;AAClB,EAAAA,WAAU,KAAK,IAAI;AACnB,EAAAA,WAAU,KAAK,IAAI;AACnB,EAAAA,WAAU,KAAK,IAAI;AACnB,EAAAA,WAAU,KAAK,IAAI;AACvB,GAAG,cAAc,YAAY,CAAC,EAAE;AAMzB,IAAI;AAAA,CACV,SAAUC,SAAQ;AACf,EAAAA,QAAOA,QAAO,SAAS,IAAI,CAAC,IAAI;AAChC,EAAAA,QAAOA,QAAO,GAAG,IAAI,CAAC,IAAI;AAC1B,EAAAA,QAAOA,QAAO,SAAS,IAAI,CAAC,IAAI;AAChC,EAAAA,QAAOA,QAAO,gBAAgB,IAAI,CAAC,IAAI;AACvC,EAAAA,QAAOA,QAAO,QAAQ,IAAI,CAAC,IAAI;AAC/B,EAAAA,QAAOA,QAAO,MAAM,IAAI,CAAC,IAAI;AAC7B,EAAAA,QAAOA,QAAO,SAAS,IAAI,CAAC,IAAI;AAChC,EAAAA,QAAOA,QAAO,OAAO,IAAI,CAAC,IAAI;AAC9B,EAAAA,QAAOA,QAAO,GAAG,IAAI,CAAC,IAAI;AAC1B,EAAAA,QAAOA,QAAO,MAAM,IAAI,CAAC,IAAI;AAC7B,EAAAA,QAAOA,QAAO,UAAU,IAAI,EAAE,IAAI;AAClC,EAAAA,QAAOA,QAAO,SAAS,IAAI,EAAE,IAAI;AACjC,EAAAA,QAAOA,QAAO,KAAK,IAAI,EAAE,IAAI;AAC7B,EAAAA,QAAOA,QAAO,YAAY,IAAI,EAAE,IAAI;AACpC,EAAAA,QAAOA,QAAO,MAAM,IAAI,EAAE,IAAI;AAC9B,EAAAA,QAAOA,QAAO,IAAI,IAAI,EAAE,IAAI;AAC5B,EAAAA,QAAOA,QAAO,QAAQ,IAAI,EAAE,IAAI;AAChC,EAAAA,QAAOA,QAAO,SAAS,IAAI,EAAE,IAAI;AACjC,EAAAA,QAAOA,QAAO,QAAQ,IAAI,EAAE,IAAI;AAChC,EAAAA,QAAOA,QAAO,MAAM,IAAI,EAAE,IAAI;AAC9B,EAAAA,QAAOA,QAAO,KAAK,IAAI,EAAE,IAAI;AAC7B,EAAAA,QAAOA,QAAO,UAAU,IAAI,EAAE,IAAI;AAClC,EAAAA,QAAOA,QAAO,IAAI,IAAI,EAAE,IAAI;AAC5B,EAAAA,QAAOA,QAAO,MAAM,IAAI,EAAE,IAAI;AAC9B,EAAAA,QAAOA,QAAO,SAAS,IAAI,EAAE,IAAI;AACjC,EAAAA,QAAOA,QAAO,QAAQ,IAAI,EAAE,IAAI;AAChC,EAAAA,QAAOA,QAAO,KAAK,IAAI,EAAE,IAAI;AAC7B,EAAAA,QAAOA,QAAO,KAAK,IAAI,EAAE,IAAI;AAC7B,EAAAA,QAAOA,QAAO,IAAI,IAAI,EAAE,IAAI;AAC5B,EAAAA,QAAOA,QAAO,IAAI,IAAI,EAAE,IAAI;AAC5B,EAAAA,QAAOA,QAAO,IAAI,IAAI,EAAE,IAAI;AAC5B,EAAAA,QAAOA,QAAO,OAAO,IAAI,EAAE,IAAI;AAC/B,EAAAA,QAAOA,QAAO,UAAU,IAAI,EAAE,IAAI;AAClC,EAAAA,QAAOA,QAAO,YAAY,IAAI,EAAE,IAAI;AACpC,EAAAA,QAAOA,QAAO,QAAQ,IAAI,EAAE,IAAI;AAChC,EAAAA,QAAOA,QAAO,MAAM,IAAI,EAAE,IAAI;AAC9B,EAAAA,QAAOA,QAAO,QAAQ,IAAI,EAAE,IAAI;AAChC,EAAAA,QAAOA,QAAO,gBAAgB,IAAI,EAAE,IAAI;AACxC,EAAAA,QAAOA,QAAO,MAAM,IAAI,EAAE,IAAI;AAC9B,EAAAA,QAAOA,QAAO,OAAO,IAAI,EAAE,IAAI;AAC/B,EAAAA,QAAOA,QAAO,UAAU,IAAI,EAAE,IAAI;AAClC,EAAAA,QAAOA,QAAO,IAAI,IAAI,EAAE,IAAI;AAC5B,EAAAA,QAAOA,QAAO,IAAI,IAAI,EAAE,IAAI;AAC5B,EAAAA,QAAOA,QAAO,IAAI,IAAI,EAAE,IAAI;AAC5B,EAAAA,QAAOA,QAAO,IAAI,IAAI,EAAE,IAAI;AAC5B,EAAAA,QAAOA,QAAO,IAAI,IAAI,EAAE,IAAI;AAC5B,EAAAA,QAAOA,QAAO,IAAI,IAAI,EAAE,IAAI;AAC5B,EAAAA,QAAOA,QAAO,MAAM,IAAI,EAAE,IAAI;AAC9B,EAAAA,QAAOA,QAAO,QAAQ,IAAI,EAAE,IAAI;AAChC,EAAAA,QAAOA,QAAO,QAAQ,IAAI,EAAE,IAAI;AAChC,EAAAA,QAAOA,QAAO,IAAI,IAAI,EAAE,IAAI;AAC5B,EAAAA,QAAOA,QAAO,MAAM,IAAI,EAAE,IAAI;AAC9B,EAAAA,QAAOA,QAAO,GAAG,IAAI,EAAE,IAAI;AAC3B,EAAAA,QAAOA,QAAO,KAAK,IAAI,EAAE,IAAI;AAC7B,EAAAA,QAAOA,QAAO,OAAO,IAAI,EAAE,IAAI;AAC/B,EAAAA,QAAOA,QAAO,OAAO,IAAI,EAAE,IAAI;AAC/B,EAAAA,QAAOA,QAAO,QAAQ,IAAI,EAAE,IAAI;AAChC,EAAAA,QAAOA,QAAO,QAAQ,IAAI,EAAE,IAAI;AAChC,EAAAA,QAAOA,QAAO,OAAO,IAAI,EAAE,IAAI;AAC/B,EAAAA,QAAOA,QAAO,IAAI,IAAI,EAAE,IAAI;AAC5B,EAAAA,QAAOA,QAAO,MAAM,IAAI,EAAE,IAAI;AAC9B,EAAAA,QAAOA,QAAO,SAAS,IAAI,EAAE,IAAI;AACjC,EAAAA,QAAOA,QAAO,MAAM,IAAI,EAAE,IAAI;AAC9B,EAAAA,QAAOA,QAAO,YAAY,IAAI,EAAE,IAAI;AACpC,EAAAA,QAAOA,QAAO,SAAS,IAAI,EAAE,IAAI;AACjC,EAAAA,QAAOA,QAAO,MAAM,IAAI,EAAE,IAAI;AAC9B,EAAAA,QAAOA,QAAO,MAAM,IAAI,EAAE,IAAI;AAC9B,EAAAA,QAAOA,QAAO,MAAM,IAAI,EAAE,IAAI;AAC9B,EAAAA,QAAOA,QAAO,QAAQ,IAAI,EAAE,IAAI;AAChC,EAAAA,QAAOA,QAAO,IAAI,IAAI,EAAE,IAAI;AAC5B,EAAAA,QAAOA,QAAO,IAAI,IAAI,EAAE,IAAI;AAC5B,EAAAA,QAAOA,QAAO,IAAI,IAAI,EAAE,IAAI;AAC5B,EAAAA,QAAOA,QAAO,IAAI,IAAI,EAAE,IAAI;AAC5B,EAAAA,QAAOA,QAAO,OAAO,IAAI,EAAE,IAAI;AAC/B,EAAAA,QAAOA,QAAO,KAAK,IAAI,EAAE,IAAI;AAC7B,EAAAA,QAAOA,QAAO,MAAM,IAAI,EAAE,IAAI;AAC9B,EAAAA,QAAOA,QAAO,UAAU,IAAI,EAAE,IAAI;AAClC,EAAAA,QAAOA,QAAO,SAAS,IAAI,EAAE,IAAI;AACjC,EAAAA,QAAOA,QAAO,UAAU,IAAI,EAAE,IAAI;AAClC,EAAAA,QAAOA,QAAO,QAAQ,IAAI,EAAE,IAAI;AAChC,EAAAA,QAAOA,QAAO,IAAI,IAAI,EAAE,IAAI;AAC5B,EAAAA,QAAOA,QAAO,UAAU,IAAI,EAAE,IAAI;AAClC,EAAAA,QAAOA,QAAO,QAAQ,IAAI,EAAE,IAAI;AAChC,EAAAA,QAAOA,QAAO,GAAG,IAAI,EAAE,IAAI;AAC3B,EAAAA,QAAOA,QAAO,OAAO,IAAI,EAAE,IAAI;AAC/B,EAAAA,QAAOA,QAAO,WAAW,IAAI,EAAE,IAAI;AACnC,EAAAA,QAAOA,QAAO,KAAK,IAAI,EAAE,IAAI;AAC7B,EAAAA,QAAOA,QAAO,IAAI,IAAI,EAAE,IAAI;AAC5B,EAAAA,QAAOA,QAAO,IAAI,IAAI,EAAE,IAAI;AAC5B,EAAAA,QAAOA,QAAO,IAAI,IAAI,EAAE,IAAI;AAC5B,EAAAA,QAAOA,QAAO,KAAK,IAAI,EAAE,IAAI;AAC7B,EAAAA,QAAOA,QAAO,MAAM,IAAI,EAAE,IAAI;AAC9B,EAAAA,QAAOA,QAAO,GAAG,IAAI,EAAE,IAAI;AAC3B,EAAAA,QAAOA,QAAO,QAAQ,IAAI,EAAE,IAAI;AAChC,EAAAA,QAAOA,QAAO,QAAQ,IAAI,EAAE,IAAI;AAChC,EAAAA,QAAOA,QAAO,SAAS,IAAI,EAAE,IAAI;AACjC,EAAAA,QAAOA,QAAO,QAAQ,IAAI,EAAE,IAAI;AAChC,EAAAA,QAAOA,QAAO,QAAQ,IAAI,EAAE,IAAI;AAChC,EAAAA,QAAOA,QAAO,OAAO,IAAI,EAAE,IAAI;AAC/B,EAAAA,QAAOA,QAAO,MAAM,IAAI,EAAE,IAAI;AAC9B,EAAAA,QAAOA,QAAO,QAAQ,IAAI,GAAG,IAAI;AACjC,EAAAA,QAAOA,QAAO,QAAQ,IAAI,GAAG,IAAI;AACjC,EAAAA,QAAOA,QAAO,OAAO,IAAI,GAAG,IAAI;AAChC,EAAAA,QAAOA,QAAO,KAAK,IAAI,GAAG,IAAI;AAC9B,EAAAA,QAAOA,QAAO,SAAS,IAAI,GAAG,IAAI;AAClC,EAAAA,QAAOA,QAAO,KAAK,IAAI,GAAG,IAAI;AAC9B,EAAAA,QAAOA,QAAO,OAAO,IAAI,GAAG,IAAI;AAChC,EAAAA,QAAOA,QAAO,OAAO,IAAI,GAAG,IAAI;AAChC,EAAAA,QAAOA,QAAO,UAAU,IAAI,GAAG,IAAI;AACnC,EAAAA,QAAOA,QAAO,UAAU,IAAI,GAAG,IAAI;AACnC,EAAAA,QAAOA,QAAO,OAAO,IAAI,GAAG,IAAI;AAChC,EAAAA,QAAOA,QAAO,IAAI,IAAI,GAAG,IAAI;AAC7B,EAAAA,QAAOA,QAAO,IAAI,IAAI,GAAG,IAAI;AAC7B,EAAAA,QAAOA,QAAO,OAAO,IAAI,GAAG,IAAI;AAChC,EAAAA,QAAOA,QAAO,OAAO,IAAI,GAAG,IAAI;AAChC,EAAAA,QAAOA,QAAO,IAAI,IAAI,GAAG,IAAI;AAC7B,EAAAA,QAAOA,QAAO,OAAO,IAAI,GAAG,IAAI;AAChC,EAAAA,QAAOA,QAAO,IAAI,IAAI,GAAG,IAAI;AAC7B,EAAAA,QAAOA,QAAO,GAAG,IAAI,GAAG,IAAI;AAC5B,EAAAA,QAAOA,QAAO,IAAI,IAAI,GAAG,IAAI;AAC7B,EAAAA,QAAOA,QAAO,KAAK,IAAI,GAAG,IAAI;AAC9B,EAAAA,QAAOA,QAAO,KAAK,IAAI,GAAG,IAAI;AAC9B,EAAAA,QAAOA,QAAO,KAAK,IAAI,GAAG,IAAI;AAC9B,EAAAA,QAAOA,QAAO,KAAK,IAAI,GAAG,IAAI;AAClC,GAAG,WAAW,SAAS,CAAC,EAAE;AAC1B,IAAM,iBAAiB,oBAAI,IAAI;AAAA,EAC3B,CAAC,UAAU,GAAG,OAAO,CAAC;AAAA,EACtB,CAAC,UAAU,SAAS,OAAO,OAAO;AAAA,EAClC,CAAC,UAAU,gBAAgB,OAAO,cAAc;AAAA,EAChD,CAAC,UAAU,QAAQ,OAAO,MAAM;AAAA,EAChC,CAAC,UAAU,MAAM,OAAO,IAAI;AAAA,EAC5B,CAAC,UAAU,SAAS,OAAO,OAAO;AAAA,EAClC,CAAC,UAAU,OAAO,OAAO,KAAK;AAAA,EAC9B,CAAC,UAAU,GAAG,OAAO,CAAC;AAAA,EACtB,CAAC,UAAU,MAAM,OAAO,IAAI;AAAA,EAC5B,CAAC,UAAU,UAAU,OAAO,QAAQ;AAAA,EACpC,CAAC,UAAU,SAAS,OAAO,OAAO;AAAA,EAClC,CAAC,UAAU,KAAK,OAAO,GAAG;AAAA,EAC1B,CAAC,UAAU,YAAY,OAAO,UAAU;AAAA,EACxC,CAAC,UAAU,MAAM,OAAO,IAAI;AAAA,EAC5B,CAAC,UAAU,IAAI,OAAO,EAAE;AAAA,EACxB,CAAC,UAAU,QAAQ,OAAO,MAAM;AAAA,EAChC,CAAC,UAAU,SAAS,OAAO,OAAO;AAAA,EAClC,CAAC,UAAU,QAAQ,OAAO,MAAM;AAAA,EAChC,CAAC,UAAU,MAAM,OAAO,IAAI;AAAA,EAC5B,CAAC,UAAU,KAAK,OAAO,GAAG;AAAA,EAC1B,CAAC,UAAU,UAAU,OAAO,QAAQ;AAAA,EACpC,CAAC,UAAU,IAAI,OAAO,EAAE;AAAA,EACxB,CAAC,UAAU,MAAM,OAAO,IAAI;AAAA,EAC5B,CAAC,UAAU,SAAS,OAAO,OAAO;AAAA,EAClC,CAAC,UAAU,QAAQ,OAAO,MAAM;AAAA,EAChC,CAAC,UAAU,KAAK,OAAO,GAAG;AAAA,EAC1B,CAAC,UAAU,KAAK,OAAO,GAAG;AAAA,EAC1B,CAAC,UAAU,IAAI,OAAO,EAAE;AAAA,EACxB,CAAC,UAAU,IAAI,OAAO,EAAE;AAAA,EACxB,CAAC,UAAU,IAAI,OAAO,EAAE;AAAA,EACxB,CAAC,UAAU,OAAO,OAAO,KAAK;AAAA,EAC9B,CAAC,UAAU,UAAU,OAAO,QAAQ;AAAA,EACpC,CAAC,UAAU,YAAY,OAAO,UAAU;AAAA,EACxC,CAAC,UAAU,QAAQ,OAAO,MAAM;AAAA,EAChC,CAAC,UAAU,MAAM,OAAO,IAAI;AAAA,EAC5B,CAAC,UAAU,QAAQ,OAAO,MAAM;AAAA,EAChC,CAAC,UAAU,gBAAgB,OAAO,cAAc;AAAA,EAChD,CAAC,UAAU,MAAM,OAAO,IAAI;AAAA,EAC5B,CAAC,UAAU,OAAO,OAAO,KAAK;AAAA,EAC9B,CAAC,UAAU,UAAU,OAAO,QAAQ;AAAA,EACpC,CAAC,UAAU,IAAI,OAAO,EAAE;AAAA,EACxB,CAAC,UAAU,IAAI,OAAO,EAAE;AAAA,EACxB,CAAC,UAAU,IAAI,OAAO,EAAE;AAAA,EACxB,CAAC,UAAU,IAAI,OAAO,EAAE;AAAA,EACxB,CAAC,UAAU,IAAI,OAAO,EAAE;AAAA,EACxB,CAAC,UAAU,IAAI,OAAO,EAAE;AAAA,EACxB,CAAC,UAAU,MAAM,OAAO,IAAI;AAAA,EAC5B,CAAC,UAAU,QAAQ,OAAO,MAAM;AAAA,EAChC,CAAC,UAAU,QAAQ,OAAO,MAAM;AAAA,EAChC,CAAC,UAAU,IAAI,OAAO,EAAE;AAAA,EACxB,CAAC,UAAU,MAAM,OAAO,IAAI;AAAA,EAC5B,CAAC,UAAU,GAAG,OAAO,CAAC;AAAA,EACtB,CAAC,UAAU,KAAK,OAAO,GAAG;AAAA,EAC1B,CAAC,UAAU,OAAO,OAAO,KAAK;AAAA,EAC9B,CAAC,UAAU,OAAO,OAAO,KAAK;AAAA,EAC9B,CAAC,UAAU,QAAQ,OAAO,MAAM;AAAA,EAChC,CAAC,UAAU,QAAQ,OAAO,MAAM;AAAA,EAChC,CAAC,UAAU,OAAO,OAAO,KAAK;AAAA,EAC9B,CAAC,UAAU,IAAI,OAAO,EAAE;AAAA,EACxB,CAAC,UAAU,MAAM,OAAO,IAAI;AAAA,EAC5B,CAAC,UAAU,SAAS,OAAO,OAAO;AAAA,EAClC,CAAC,UAAU,MAAM,OAAO,IAAI;AAAA,EAC5B,CAAC,UAAU,YAAY,OAAO,UAAU;AAAA,EACxC,CAAC,UAAU,SAAS,OAAO,OAAO;AAAA,EAClC,CAAC,UAAU,MAAM,OAAO,IAAI;AAAA,EAC5B,CAAC,UAAU,MAAM,OAAO,IAAI;AAAA,EAC5B,CAAC,UAAU,MAAM,OAAO,IAAI;AAAA,EAC5B,CAAC,UAAU,QAAQ,OAAO,MAAM;AAAA,EAChC,CAAC,UAAU,IAAI,OAAO,EAAE;AAAA,EACxB,CAAC,UAAU,IAAI,OAAO,EAAE;AAAA,EACxB,CAAC,UAAU,IAAI,OAAO,EAAE;AAAA,EACxB,CAAC,UAAU,IAAI,OAAO,EAAE;AAAA,EACxB,CAAC,UAAU,OAAO,OAAO,KAAK;AAAA,EAC9B,CAAC,UAAU,KAAK,OAAO,GAAG;AAAA,EAC1B,CAAC,UAAU,MAAM,OAAO,IAAI;AAAA,EAC5B,CAAC,UAAU,UAAU,OAAO,QAAQ;AAAA,EACpC,CAAC,UAAU,SAAS,OAAO,OAAO;AAAA,EAClC,CAAC,UAAU,UAAU,OAAO,QAAQ;AAAA,EACpC,CAAC,UAAU,QAAQ,OAAO,MAAM;AAAA,EAChC,CAAC,UAAU,IAAI,OAAO,EAAE;AAAA,EACxB,CAAC,UAAU,UAAU,OAAO,QAAQ;AAAA,EACpC,CAAC,UAAU,QAAQ,OAAO,MAAM;AAAA,EAChC,CAAC,UAAU,GAAG,OAAO,CAAC;AAAA,EACtB,CAAC,UAAU,OAAO,OAAO,KAAK;AAAA,EAC9B,CAAC,UAAU,WAAW,OAAO,SAAS;AAAA,EACtC,CAAC,UAAU,KAAK,OAAO,GAAG;AAAA,EAC1B,CAAC,UAAU,IAAI,OAAO,EAAE;AAAA,EACxB,CAAC,UAAU,IAAI,OAAO,EAAE;AAAA,EACxB,CAAC,UAAU,IAAI,OAAO,EAAE;AAAA,EACxB,CAAC,UAAU,KAAK,OAAO,GAAG;AAAA,EAC1B,CAAC,UAAU,MAAM,OAAO,IAAI;AAAA,EAC5B,CAAC,UAAU,GAAG,OAAO,CAAC;AAAA,EACtB,CAAC,UAAU,QAAQ,OAAO,MAAM;AAAA,EAChC,CAAC,UAAU,QAAQ,OAAO,MAAM;AAAA,EAChC,CAAC,UAAU,SAAS,OAAO,OAAO;AAAA,EAClC,CAAC,UAAU,QAAQ,OAAO,MAAM;AAAA,EAChC,CAAC,UAAU,QAAQ,OAAO,MAAM;AAAA,EAChC,CAAC,UAAU,OAAO,OAAO,KAAK;AAAA,EAC9B,CAAC,UAAU,MAAM,OAAO,IAAI;AAAA,EAC5B,CAAC,UAAU,QAAQ,OAAO,MAAM;AAAA,EAChC,CAAC,UAAU,QAAQ,OAAO,MAAM;AAAA,EAChC,CAAC,UAAU,OAAO,OAAO,KAAK;AAAA,EAC9B,CAAC,UAAU,KAAK,OAAO,GAAG;AAAA,EAC1B,CAAC,UAAU,SAAS,OAAO,OAAO;AAAA,EAClC,CAAC,UAAU,KAAK,OAAO,GAAG;AAAA,EAC1B,CAAC,UAAU,OAAO,OAAO,KAAK;AAAA,EAC9B,CAAC,UAAU,OAAO,OAAO,KAAK;AAAA,EAC9B,CAAC,UAAU,UAAU,OAAO,QAAQ;AAAA,EACpC,CAAC,UAAU,UAAU,OAAO,QAAQ;AAAA,EACpC,CAAC,UAAU,OAAO,OAAO,KAAK;AAAA,EAC9B,CAAC,UAAU,IAAI,OAAO,EAAE;AAAA,EACxB,CAAC,UAAU,IAAI,OAAO,EAAE;AAAA,EACxB,CAAC,UAAU,OAAO,OAAO,KAAK;AAAA,EAC9B,CAAC,UAAU,OAAO,OAAO,KAAK;AAAA,EAC9B,CAAC,UAAU,IAAI,OAAO,EAAE;AAAA,EACxB,CAAC,UAAU,OAAO,OAAO,KAAK;AAAA,EAC9B,CAAC,UAAU,IAAI,OAAO,EAAE;AAAA,EACxB,CAAC,UAAU,GAAG,OAAO,CAAC;AAAA,EACtB,CAAC,UAAU,IAAI,OAAO,EAAE;AAAA,EACxB,CAAC,UAAU,KAAK,OAAO,GAAG;AAAA,EAC1B,CAAC,UAAU,KAAK,OAAO,GAAG;AAAA,EAC1B,CAAC,UAAU,KAAK,OAAO,GAAG;AAAA,EAC1B,CAAC,UAAU,KAAK,OAAO,GAAG;AAC9B,CAAC;AACM,SAAS,SAAS,SAAS;AAC9B,MAAI;AACJ,UAAQ,KAAK,eAAe,IAAI,OAAO,OAAO,QAAQ,OAAO,SAAS,KAAK,OAAO;AACtF;AACA,IAAM,IAAI;AACH,IAAM,mBAAmB;AAAA,EAC5B,CAAC,GAAG,IAAI,GAAG,oBAAI,IAAI;AAAA,IACf,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA,IACF,EAAE;AAAA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","names":["text","CODE_POINTS","ERR","TokenType","c1","BinTrieFlags","CharCodes","EntityDecoderState","DecodingMode","char","NS","ATTRS","DOCUMENT_MODE","TAG_NAMES","TAG_ID","State","EntryType","entry","text","attr","attr","InsertionMode","attr","fields","bg","has","clean","name","tag","flat","chroma","kids","out","f","escapeText","c1","out","a","SOCIAL_HOSTS","headerEl","footerEl","meta","sameSite","abs","title","hiddenClasses","r","c","escapeHtml"]}
|