rusteerio 1.0.0 → 1.1.0

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.
Files changed (65) hide show
  1. package/Cargo.lock +42 -1
  2. package/Cargo.toml +8 -1
  3. package/README.md +90 -51
  4. package/THIRD_PARTY_NOTICES.md +138 -2
  5. package/dist/{chunk-DMRD3FGC.mjs → chunk-FPRP6UIX.mjs} +2233 -751
  6. package/dist/chunk-FPRP6UIX.mjs.map +1 -0
  7. package/dist/index.cjs +2232 -750
  8. package/dist/index.cjs.map +1 -1
  9. package/dist/index.d.mts +2 -2
  10. package/dist/index.d.ts +2 -2
  11. package/dist/index.mjs +1 -1
  12. package/dist/slim.cjs +2226 -745
  13. package/dist/slim.cjs.map +1 -1
  14. package/dist/slim.d.mts +2 -2
  15. package/dist/slim.d.ts +2 -2
  16. package/dist/slim.mjs +1 -1
  17. package/dist/{types-BP6TpxE5.d.mts → types-Cs9UP1Vv.d.mts} +3 -3
  18. package/dist/{types-BP6TpxE5.d.ts → types-Cs9UP1Vv.d.ts} +3 -3
  19. package/dist/utils.d.mts +1 -1
  20. package/dist/utils.d.ts +1 -1
  21. package/native/src/arena.rs +231 -602
  22. package/native/src/attributes.rs +11 -5
  23. package/native/src/codec.rs +62 -18
  24. package/native/src/document_order.rs +711 -0
  25. package/native/src/extraction.rs +15 -3
  26. package/native/src/gc.rs +12 -3
  27. package/native/src/hook_sink.rs +77 -3
  28. package/native/src/id_hash.rs +42 -0
  29. package/native/src/immutable.rs +256 -0
  30. package/native/src/lib.rs +1097 -172
  31. package/native/src/markup_tokenizer.rs +668 -0
  32. package/native/src/runtime.rs +189 -33
  33. package/native/src/selector.rs +346 -44
  34. package/native/src/sink.rs +14 -1
  35. package/native/src/snapshot.rs +509 -0
  36. package/native/src/stream.rs +2 -2
  37. package/native/src/tokenizer.rs +377 -204
  38. package/native/vendor/README.md +3 -2
  39. package/native/vendor/html5ever-0.35.0/src/tokenizer/char_ref/mod.rs +79 -0
  40. package/native/vendor/html5ever-0.35.0/src/tokenizer/mod.rs +23 -13
  41. package/package.json +3 -1
  42. package/rusteerio.darwin-arm64.node +0 -0
  43. package/rusteerio.darwin-x64.node +0 -0
  44. package/rusteerio.linux-arm64-gnu.node +0 -0
  45. package/rusteerio.linux-arm64-musl.node +0 -0
  46. package/rusteerio.linux-x64-gnu.node +0 -0
  47. package/rusteerio.linux-x64-musl.node +0 -0
  48. package/rusteerio.win32-arm64-msvc.node +0 -0
  49. package/rusteerio.win32-x64-msvc.node +0 -0
  50. package/scripts/generate-notices.mjs +11 -0
  51. package/scripts/notices/htmlparser2-MIT.txt +18 -0
  52. package/scripts/notices/sources.json +6 -0
  53. package/src/attributes.ts +78 -44
  54. package/src/codec.ts +22 -3
  55. package/src/extract.ts +86 -2
  56. package/src/hooks.ts +148 -2
  57. package/src/index.ts +51 -40
  58. package/src/match.ts +207 -0
  59. package/src/native.ts +9 -1
  60. package/src/nodes.ts +531 -183
  61. package/src/router.ts +792 -229
  62. package/src/selection.ts +239 -125
  63. package/src/snapshot.ts +255 -0
  64. package/src/transport.ts +51 -42
  65. package/dist/chunk-DMRD3FGC.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/native.ts","../src/codec.ts","../src/transport.ts","../src/hooks.ts","../src/snapshot.ts","../src/router.ts","../src/nodes.ts","../src/dom.ts","../src/extract-plan.ts","../src/attributes.ts","../src/parse.ts","../src/match.ts","../src/selection.ts","../src/extract.ts","../src/index.ts","../src/workers.ts","../src/io.ts"],"sourcesContent":["import { createRequire } from 'node:module';\nimport { existsSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { wrapNativeBinding } from './transport.js';\n\nexport interface NativeNodeRecord {\n id: number;\n type: 'root' | 'tag' | 'script' | 'style' | 'text' | 'comment' | 'directive' | 'cdata';\n name?: string;\n data?: string;\n attribs?: Record<string, string>;\n children: number[];\n parent?: number;\n namespace?: string;\n prefix?: string;\n attribsNamespace?: Record<string, string>;\n attribsPrefix?: Record<string, string>;\n doctypeName?: string;\n publicId?: string;\n systemId?: string;\n 'x-name'?: string;\n 'x-publicId'?: string;\n 'x-systemId'?: string;\n 'x-mode'?: 'quirks' | 'limited-quirks' | 'no-quirks';\n [key: string]: any;\n}\n\nexport interface NativeDocument {\n readonly nodeSpace?: object;\n retainNode?(id: number): void;\n retainNodeData?(id: number, data: object): void;\n adopt?(source: NativeDocument, ids: number[], detach?: boolean): string;\n op(command: string, argsJson: string): string;\n create?(html: string, contextId?: number, optionsJson?: string): number[];\n select(selector: string, contexts?: number[]): number[];\n text(ids: number[]): string;\n innerHtml(id: number): string;\n outerHtml(ids: number[]): string;\n attr(id: number, name: string): string | undefined | null;\n tagName(id: number): string | undefined | null;\n exportTree(): string;\n rootId(): number;\n parserDiagnostics?(): string;\n}\n\nexport interface NativeStream {\n write(chunk: string): Promise<void>;\n finish(): Promise<NativeDocument>;\n abort(): void;\n}\n\nexport interface NativeWorkerPoolInfo {\n threads: number;\n activeBatches: number;\n activeWorkers: number;\n peakActiveWorkers: number;\n}\n\nexport interface NativeQuery {\n key: string;\n selector: string;\n attr?: string;\n all?: boolean;\n}\n\nexport interface NativeBinding {\n NativeDocument: new (html: string, isDocument?: boolean, optionsJson?: string) => NativeDocument;\n NativeStream?: new (optionsJson: string, isDocument?: boolean, errorBridge?: (request: string) => string) => NativeStream;\n configureWorkerPool?: (threads: number) => void;\n workerPoolInfo?: () => NativeWorkerPoolInfo;\n extractPlanManyAsync?: (html: string[], planJson: string, threads: number, optionsJson?: string) => Promise<string>;\n parseAsync?: (html: string, isDocument?: boolean, optionsJson?: string) => Promise<NativeDocument>;\n parseManyAsync?: (\n html: string[],\n isDocument: boolean,\n threads: number,\n optionsJson?: string,\n ) => Promise<NativeDocument[]>;\n extractManyAsync?: (\n html: string[],\n queries: NativeQuery[],\n threads: number,\n isDocument?: boolean,\n optionsJson?: string,\n ) => Promise<string>;\n}\n\nlet cached: NativeBinding | undefined;\nlet attempted = false;\nlet bindingError: unknown;\n\n/**\n * The directory of this bundle, shared by the package's CommonJS and ESM\n * entry points and distinct for every installed copy of the package.\n */\nexport function packageDirectory(): string {\n return typeof __dirname === 'string' ? __dirname : dirname(fileURLToPath(import.meta.url));\n}\n\n/** Resolve the native addon bundled with the npm package. */\nexport function nativeBinding(): NativeBinding | undefined {\n if (attempted) return cached;\n attempted = true;\n\n // This module is bundled into both CommonJS and ESM entry points. A synthetic\n // absolute filename lets createRequire work in both module formats.\n const moduleDirectory = packageDirectory();\n const require = createRequire(join(moduleDirectory, 'rusteerio-loader.cjs'));\n const directories = [moduleDirectory, dirname(moduleDirectory)];\n const libc = process.platform === 'linux'\n ? ((process.report?.getReport() as { header?: { glibcVersionRuntime?: string } })?.header?.glibcVersionRuntime ? 'gnu' : 'musl')\n : undefined;\n const platform = `${process.platform}-${process.arch}${libc ? `-${libc}` : process.platform === 'win32' ? '-msvc' : ''}`;\n const names = [`rusteerio.${platform}.node`, 'rusteerio.node'];\n const candidates = [...new Set(directories.flatMap((directory) => names.map((name) => join(directory, name))))];\n\n for (const candidate of candidates) {\n if (!existsSync(candidate)) continue;\n try {\n const loaded: NativeBinding = require(candidate);\n if (typeof loaded.NativeDocument === 'function') {\n cached = wrapNativeBinding(loaded);\n return cached;\n }\n } catch (error) {\n bindingError ??= error;\n }\n }\n return undefined;\n}\n\nexport function requireNative(): NativeBinding {\n const binding = nativeBinding();\n if (binding) return binding;\n throw new Error('Rusteerio could not load its Rust native binding. Reinstall rusteerio for this platform or run \"npm run build:native\" from a source checkout.', { cause: bindingError });\n}\n\n/** Useful for installation diagnostics and benchmarks that require native code. */\nexport function nativeStatus(): { available: boolean; error?: string } {\n const available = !!nativeBinding();\n return available ? { available } : { available, error: String(bindingError ?? 'Native binding not found') };\n}\n","/**\n * Node strings use UTF-16, including unpaired surrogates. Rust strings use\n * Unicode scalar values. Reserve a small private-use alphabet on this private\n * boundary so neither representation loses a code unit.\n */\nconst reserved = /[\\ud800-\\ue800]/;\nconst encoded = /[\\ue000-\\ue800]/;\nconst escapeUnit = 0xe800;\nconst isWellFormed = (String.prototype as String & { isWellFormed?(): boolean }).isWellFormed;\n\nexport function encodeString(value: string): string {\n if (!encoded.test(value) && (isWellFormed ? isWellFormed.call(value) : !reserved.test(value))) return value;\n const parts: string[] = [];\n let start = 0;\n for (let index = 0; index < value.length; index++) {\n const unit = value.charCodeAt(index);\n if (unit >= 0xd800 && unit <= 0xdbff) {\n const next = value.charCodeAt(index + 1);\n if (next >= 0xdc00 && next <= 0xdfff) { index++; continue; }\n }\n let replacement: string | undefined;\n if (unit >= 0xd800 && unit <= 0xdfff) replacement = String.fromCharCode(0xe000 + unit - 0xd800);\n else if (unit >= 0xe000 && unit <= escapeUnit) replacement = '\\ue800' + value[index];\n if (replacement !== undefined) {\n parts.push(value.slice(start, index), replacement);\n start = index + 1;\n }\n }\n return start === 0 ? value : parts.join('') + value.slice(start);\n}\n\nexport function decodeString(value: string): string {\n if (!encoded.test(value)) return value;\n const parts: string[] = [];\n let start = 0;\n for (let index = 0; index < value.length; index++) {\n const unit = value.charCodeAt(index);\n if (unit < 0xe000 || unit > escapeUnit) continue;\n const next = value.charCodeAt(index + 1);\n if (unit === escapeUnit) {\n if (next < 0xe000 || next > escapeUnit || Number.isNaN(next)) continue;\n parts.push(value.slice(start, index), value[++index]);\n } else parts.push(value.slice(start, index), String.fromCharCode(0xd800 + unit - 0xe000));\n start = index + 1;\n }\n return start === 0 ? value : parts.join('') + value.slice(start);\n}\n\n// Transform JSON string tokens rather than the whole JSON text: JSON.stringify\n// escapes lone surrogates, while a literal backslash-u sequence is plain data.\nconst encodeJsonCandidate = /[\\ud800-\\ue800]|\\\\u(?:d[89a-f][\\da-f]{2}|e[0-8][\\da-f]{2})/i;\nconst escapedJsonCandidate = /\\\\u(?:d[89a-f][\\da-f]{2}|e[0-8][\\da-f]{2})/i;\nconst decodeJsonCandidate = /[\\ue000-\\ue800]|\\\\ue[0-8][\\da-f]{2}/i;\n\nexport function encodeJson(value: string): string {\n if (!encodeJsonCandidate.test(value)) return value;\n if (isWellFormed?.call(value) && !encoded.test(value) && !escapedJsonCandidate.test(value)) return value;\n return mapJsonStrings(value, encodeString);\n}\n\nexport function decodeJson(value: string): string {\n return decodeJsonCandidate.test(value) ? mapJsonStrings(value, decodeString) : value;\n}\n\n/**\n * Replaces every string token of the JSON text `json` with `transform` of its\n * value, in one left-to-right pass. A regular expression scanning for tokens\n * retries from every quote of an unterminated token, which is quadratic.\n */\nfunction mapJsonStrings(json: string, transform: (value: string) => string): string {\n const parts: string[] = [];\n let copied = 0;\n let quote = json.indexOf('\"');\n while (quote !== -1) {\n let end = quote + 1;\n while (end < json.length && json.charCodeAt(end) !== 0x22) end += json.charCodeAt(end) === 0x5c ? 2 : 1;\n if (end >= json.length) break;\n parts.push(json.slice(copied, quote), JSON.stringify(transform(JSON.parse(json.slice(quote, end + 1)))));\n copied = end + 1;\n quote = json.indexOf('\"', copied);\n }\n return copied === 0 ? json : parts.join('') + json.slice(copied);\n}\n\n/** Private parser protocol flag, appended without deserializing large options. */\nexport function encodeOptions(value?: string): string {\n if (value === undefined) return '{\"__utf16Codec\":true}';\n const json = encodeJson(value);\n if (!json.trimStart().startsWith('{')) return '{\"__utf16Codec\":true}';\n const end = json.lastIndexOf('}');\n const prefix = json.slice(0, end);\n return prefix + (prefix.trimEnd().endsWith('{') ? '' : ',') + '\"__utf16Codec\":true' + json.slice(end);\n}\n","import { decodeJson, decodeString, encodeJson, encodeOptions, encodeString } from './codec.js';\nimport type { NativeBinding, NativeDocument } from './native.js';\n\ninterface TransportRegistry {\n userErrors: WeakSet<object>;\n}\nconst registryKey = Symbol.for('rusteerio.native-transport.v2');\nconst globals = globalThis as typeof globalThis & { [key: symbol]: TransportRegistry | undefined };\nconst registry = globals[registryKey] ??= { userErrors: new WeakSet() };\nconst transportedKey = Symbol.for('rusteerio.native-transport.prototype');\n\nconst jsonMethods = new Set(['op', 'node', 'exportTree', 'parserDiagnostics', 'adopt']);\n/** String arguments each document method takes, by position, and how to encode them. */\nconst argumentEncoders: Record<string, (args: any[]) => void> = {\n op: (args) => { args[1] = encodeJson(args[1]); },\n create: (args) => { args[0] = encodeString(args[0]); if (typeof args[2] === 'string') args[2] = encodeOptions(args[2]); },\n select: (args) => { args[0] = encodeString(args[0]); },\n matches: (args) => { args[0] = encodeString(args[0]); },\n attr: (args) => { args[1] = encodeString(args[1]); },\n setAttribute: (args) => { args[1] = encodeString(args[1]); if (typeof args[2] === 'string') args[2] = encodeString(args[2]); },\n render: (args) => { if (typeof args[1] === 'string') args[1] = encodeJson(args[1]); },\n};\n\n/** Keep the codec at the private addon boundary, including callback RPC. */\nexport function wrapNativeBinding(binding: NativeBinding): NativeBinding {\n const raw = binding as NativeBinding & Record<string, any>;\n const { userErrors } = registry;\n const restoreError = (error: unknown): never => {\n if (error instanceof Error && !userErrors.has(error)) {\n const message = decodeString(error.message);\n if (message !== error.message) {\n const stack = error.stack;\n error.message = message;\n if (stack) error.stack = decodeString(stack);\n }\n }\n throw error;\n };\n const invoke = <T>(call: () => T): T => {\n try {\n const result = call();\n return result instanceof Promise ? result.catch(restoreError) as T : result;\n } catch (error) { return restoreError(error); }\n };\n const wrapBridge = (bridge: (request: string) => string) => (request: string): string => {\n try { return encodeJson(bridge(decodeJson(request))); }\n catch (error) {\n if (error !== null && (typeof error === 'object' || typeof error === 'function')) userErrors.add(error);\n throw error;\n }\n };\n // Wrapping the class's methods once, rather than each document in a proxy,\n // keeps native calls free of per-document and per-call allocations.\n const transportMethod = (name: string, method: (...args: any[]) => unknown) => {\n const encodeArguments = argumentEncoders[name];\n const decode = jsonMethods.has(name) ? decodeJson : decodeString;\n const isOperation = name === 'op';\n return function transported(this: NativeDocument, ...args: any[]): unknown {\n try {\n if (encodeArguments) encodeArguments(args);\n const result = method.apply(this, args);\n if (typeof result !== 'string') return result;\n if (isOperation && args[0] === 'serialize' && result.startsWith('{')) {\n const error = JSON.parse(result).__nativeError;\n if (error?.name === 'URIError') throw new URIError(error.message);\n }\n return decode(result);\n } catch (error) { return restoreError(error); }\n };\n };\n const prototype = raw.NativeDocument.prototype as Record<PropertyKey, unknown>;\n if (!Object.hasOwn(prototype, transportedKey)) {\n for (const name of Object.getOwnPropertyNames(prototype)) {\n const method = prototype[name];\n if (name !== 'constructor' && typeof method === 'function') prototype[name] = transportMethod(name, method as (...args: any[]) => unknown);\n }\n Object.defineProperty(prototype, transportedKey, { value: true });\n }\n const wrapStream = (stream: any) => {\n let carry = '';\n return {\n async write(chunk: string) {\n let source = carry + chunk;\n carry = '';\n const last = source.charCodeAt(source.length - 1);\n if (last >= 0xd800 && last <= 0xdbff) { carry = source.slice(-1); source = source.slice(0, -1); }\n if (source) await invoke(() => stream.write(encodeString(source)));\n },\n async finish() {\n if (carry) { const final = carry; carry = ''; await invoke(() => stream.write(encodeString(final))); }\n return invoke(() => stream.finish());\n },\n abort() { carry = ''; return invoke(() => stream.abort()); },\n };\n };\n const wrapConstructor = (Constructor: any, argumentsFor: (args: any[]) => any[], wrap: (value: any) => any) => new Proxy(Constructor, {\n construct(target, args) { return wrap(invoke(() => Reflect.construct(target, argumentsFor(args)))); },\n });\n const wrapped: NativeBinding & Record<string, any> = { ...raw };\n const Document = raw.NativeDocument;\n wrapped.NativeDocument = function NativeDocument(html: string, isDocument?: boolean, options?: string) {\n try { return new Document(encodeString(html), isDocument, encodeOptions(options)); }\n catch (error) { return restoreError(error); }\n } as unknown as NativeBinding['NativeDocument'];\n if (raw.NativeStream) wrapped.NativeStream = wrapConstructor(raw.NativeStream, ([options, isDocument, bridge]) => [encodeOptions(options), isDocument, bridge && wrapBridge(bridge)], wrapStream);\n if (raw.NativeHookStream) wrapped.NativeHookStream = wrapConstructor(raw.NativeHookStream, ([isDocument, options, bridge]) => [isDocument, encodeOptions(options), wrapBridge(bridge)], wrapStream);\n if (raw.parseWithTreeAdapter) wrapped.parseWithTreeAdapter = (source: string, isDocument: boolean, options: string, bridge: (request: string) => string) => invoke(() => raw.parseWithTreeAdapter(encodeString(source), isDocument, encodeOptions(options), wrapBridge(bridge)));\n if (raw.parseAsync) wrapped.parseAsync = (source, isDocument, options) => invoke(() => raw.parseAsync!(encodeString(source), isDocument, encodeOptions(options)));\n if (raw.parseManyAsync) wrapped.parseManyAsync = (sources, isDocument, threads, options) => invoke(() => raw.parseManyAsync!(sources.map(encodeString), isDocument, threads, encodeOptions(options)));\n if (raw.extractPlanManyAsync) wrapped.extractPlanManyAsync = async (sources, plan, threads, options) => decodeJson(await invoke(() => raw.extractPlanManyAsync!(sources.map(encodeString), encodeJson(plan), threads, encodeOptions(options))));\n if (raw.extractManyAsync) wrapped.extractManyAsync = async (sources, queries, threads, isDocument, options) => decodeJson(await invoke(() => raw.extractManyAsync!(sources.map(encodeString), queries.map((query) => ({ ...query, key: encodeString(query.key), selector: encodeString(query.selector), ...(query.attr === undefined ? {} : { attr: encodeString(query.attr) }) })), threads, isDocument, encodeOptions(options))));\n return wrapped;\n}\n","import { requireNative, type NativeDocument } from './native.js';\nimport { attachParsedNodes, getNode, hydrateLocation, operation } from './nodes.js';\nimport { plainSnapshot, recordAt, routeDocument, type DocumentState, type RoutedDocument } from './router.js';\nimport type { CheerioOptions } from './types.js';\nimport type { TokenizerCallbacks } from './parser-types.js';\n\nconst tokenCallbacks = ['onattribdata', 'onattribentity', 'onattribend', 'onattribname', 'oncdata', 'onclosetag', 'oncomment', 'ondeclaration', 'onend', 'onopentagend', 'onopentagname', 'onprocessinginstruction', 'onselfclosingtag', 'ontext', 'ontextentity'] as const;\n\nexport function createTokenizerSession(options: CheerioOptions): { write(chunk: string): void; end(): CheerioOptions } {\n const events: unknown[][] = [];\n const callbacks = Object.fromEntries(tokenCallbacks.map((name) => [name, (...args: number[]) => {\n if (name === 'ontextentity' || name === 'onattribentity') {\n const codePoint = +args[0];\n String.fromCodePoint(codePoint);\n args[0] = codePoint;\n }\n events.push([name, ...args]);\n }]));\n const Constructor = options.Tokenizer!;\n const tokenizer = new Constructor(options, callbacks as unknown as TokenizerCallbacks);\n return {\n write(chunk) { if (tokenizer.running) tokenizer.write(chunk); },\n end() { tokenizer.end(); const result = cleanParserOptions(options); result.__tokenEvents = events; return result; },\n };\n}\n\nexport function cleanParserOptions(options: CheerioOptions): CheerioOptions {\n const result = { ...options };\n delete result.Tokenizer; delete result.treeAdapter; delete result.onParseError;\n delete result.__tokenEvents;\n if (!options._useHtmlParser2 && options.onParseError) { result.__collectParseErrors = true; result.sourceCodeLocationInfo = true; }\n return result;\n}\n\n/** User tokenizers run on JavaScript; their actual events are consumed by Rust. */\nexport function parserOptions(source: string, options: CheerioOptions): CheerioOptions {\n if (options._useHtmlParser2 && options.Tokenizer) {\n const session = createTokenizerSession(options);\n session.write(source);\n return session.end();\n }\n return cleanParserOptions(options);\n}\n\nexport function deliverParseErrors(document: NativeDocument, options: CheerioOptions): void {\n if (options._useHtmlParser2 || !options.onParseError) return;\n const diagnostics = (document as NativeDocument & { parserDiagnostics?(): string | unknown[] }).parserDiagnostics?.();\n const errors = typeof diagnostics === 'string' ? JSON.parse(diagnostics) : diagnostics ?? [];\n for (const error of errors) options.onParseError(error);\n}\n\nexport function hasParserHooks(options: CheerioOptions): boolean {\n return !!(options._useHtmlParser2 ? options.Tokenizer : options.treeAdapter || options.onParseError);\n}\n\n/** A live tree adapter bridge. Every tree-builder decision consults the user's adapter. */\nfunction treeAdapterBridge(adapter: any, options: CheerioOptions) {\n const deliveredErrors = new Set<string>();\n const nodes: any[] = [];\n const ids = new WeakMap<object, number>();\n const identify = (node: any): number | null => {\n if (node == null) return null;\n if (typeof node !== 'object') throw new TypeError('treeAdapter methods must return DOM node objects');\n let id = ids.get(node);\n if (id === undefined) { id = nodes.length; ids.set(node, id); nodes.push(node); }\n return id;\n };\n const nodeArgs: Record<string, number[]> = {\n appendChild: [0, 1], insertBefore: [0, 1, 2], setTemplateContent: [0, 1], getTemplateContent: [0],\n setDocumentType: [0], setDocumentMode: [0], getDocumentMode: [0], detachNode: [0], insertText: [0],\n insertTextBefore: [0, 2], adoptAttributes: [0], getFirstChild: [0], getChildNodes: [0], getParentNode: [0],\n getAttrList: [0], getTagName: [0], getNamespaceURI: [0], getTextNodeContent: [0], getCommentNodeContent: [0],\n getDocumentTypeNodeName: [0], getDocumentTypeNodePublicId: [0], getDocumentTypeNodeSystemId: [0],\n isTextNode: [0], isCommentNode: [0], isElementNode: [0], isDocumentTypeNode: [0],\n setNodeSourceCodeLocation: [0], getNodeSourceCodeLocation: [0], updateNodeSourceCodeLocation: [0],\n onItemPop: [0, 1], onItemPush: [0],\n };\n const nodeReturns = new Set(['createDocument', 'createDocumentFragment', 'createElement', 'createCommentNode', 'createTextNode', 'getTemplateContent', 'getFirstChild', 'getParentNode']);\n const invoke = (method: string, args: any[]): any => {\n const fn = adapter[method];\n if (typeof fn !== 'function') {\n if (method === 'onItemPop' || method === 'onItemPush') return undefined;\n throw new TypeError(`treeAdapter.${method} must be a function`);\n }\n return Reflect.apply(fn, adapter, args);\n };\n const snapshot = () => {\n const records: any[] = [];\n for (let id = 0; id < nodes.length; id++) {\n const node = nodes[id];\n const element = invoke('isElementNode', [node]);\n const text = invoke('isTextNode', [node]);\n const comment = invoke('isCommentNode', [node]);\n const doctype = invoke('isDocumentTypeNode', [node]);\n const name = element ? invoke('getTagName', [node]) : doctype ? '!doctype' : node.name;\n const type = element ? name === 'script' || name === 'style' ? name : 'tag' : text ? 'text' : comment ? 'comment' : doctype ? 'directive' : node.type ?? 'root';\n const children = element || type === 'root' || type === 'cdata' ? invoke('getChildNodes', [node]) ?? [] : [];\n const record: any = { id, type, children: Array.from(children, identify), parent: identify(invoke('getParentNode', [node])) };\n if (name !== undefined) record.name = name;\n if (element) {\n record.namespace = invoke('getNamespaceURI', [node]);\n record.attribs = Object.create(null); record.attribsNamespace = Object.create(null); record.attribsPrefix = Object.create(null);\n for (const attr of invoke('getAttrList', [node])) {\n Object.defineProperty(record.attribs, attr.name, { value: attr.value, enumerable: true, configurable: true, writable: true });\n record.attribsNamespace[attr.name] = attr.namespace; record.attribsPrefix[attr.name] = attr.prefix;\n }\n } else if (text || comment) record.data = invoke(text ? 'getTextNodeContent' : 'getCommentNodeContent', [node]);\n else if (doctype) {\n record.data = node.data;\n for (const [field, method] of [['x-name', 'getDocumentTypeNodeName'], ['x-publicId', 'getDocumentTypeNodePublicId'], ['x-systemId', 'getDocumentTypeNodeSystemId']]) record[field] = invoke(method, [node]);\n }\n if (type === 'root' && node['x-mode'] !== undefined) record['x-mode'] = invoke('getDocumentMode', [node]);\n for (const field of ['startIndex', 'endIndex', 'sourceCodeLocation']) if (node[field] !== undefined) record[field] = node[field];\n records.push(record);\n }\n return records;\n };\n const bridge = (request: string): string => {\n const { method, args = [] } = JSON.parse(request);\n if (method === '__parseError') {\n deliveredErrors.add(JSON.stringify(args[0]));\n options.onParseError?.(args[0]);\n return 'null';\n }\n if (method === '__snapshot') return JSON.stringify(snapshot());\n if (method === '__locations') {\n for (const entry of args[0]) invoke('setNodeSourceCodeLocation', [nodes[entry.id], hydrateLocation(entry.location)]);\n return 'null';\n }\n const values = args.slice();\n if (method === 'setNodeSourceCodeLocation' || method === 'updateNodeSourceCodeLocation') hydrateLocation(values[1]);\n for (const index of nodeArgs[method] ?? []) values[index] = values[index] == null ? null : nodes[values[index]];\n const result = invoke(method, values);\n return JSON.stringify(method === 'getChildNodes' ? Array.from(result ?? [], identify) : nodeReturns.has(method) ? identify(result) : result ?? null);\n };\n return { bridge, nodes, deliveredErrors };\n}\n\nfunction bindAdapterDocument(document: NativeDocument, options: CheerioOptions, adapter: ReturnType<typeof treeAdapterBridge>): NativeDocument {\n if (options.onParseError) {\n const errors = (document as NativeDocument & { parserDiagnostics?(): string }).parserDiagnostics?.();\n for (const error of errors ? JSON.parse(errors) : []) if (!adapter.deliveredErrors.has(JSON.stringify(error))) options.onParseError(error);\n }\n const routed = routeDocument(document, options);\n const globalId = (routed as NativeDocument & { localNodeId(id: number): number }).localNodeId.bind(routed);\n for (let id = 0; id < adapter.nodes.length; id++) getNode(routed, globalId(id), adapter.nodes[id]);\n return routed;\n}\n\nexport function createTreeAdapterSession(options: CheerioOptions, isDocument: boolean): { write(chunk: string): Promise<void>; end(): Promise<NativeDocument>; abort(): void } {\n const binding = requireNative() as ReturnType<typeof requireNative> & {\n NativeHookStream?: new (isDocument: boolean, options: string, bridge: (request: string) => string) => { write(chunk: string): Promise<void> | void; finish(): Promise<NativeDocument> | NativeDocument; abort(): void };\n };\n if (!binding.NativeHookStream) throw new Error('This native addon does not support streaming treeAdapter hooks; rebuild the Rust addon.');\n const adapter = treeAdapterBridge(options.treeAdapter, options);\n let hasFailure = false;\n let failure: unknown;\n let aborted = false;\n const bridge = (request: string): string => {\n if (hasFailure || aborted) return '{\"__rusteerioHookError\":true}';\n try { return adapter.bridge(request); }\n catch (error) { hasFailure = true; failure = error; return '{\"__rusteerioHookError\":true}'; }\n };\n const parser = new binding.NativeHookStream(isDocument, JSON.stringify(cleanParserOptions(options)), bridge);\n const restoreFailure = (error: unknown): never => { if (hasFailure) throw failure; throw error; };\n return {\n async write(chunk) {\n try { await parser.write(chunk); if (hasFailure) throw failure; }\n catch (error) { restoreFailure(error); }\n },\n async end() {\n try {\n const document = await parser.finish();\n if (hasFailure) throw failure;\n return bindAdapterDocument(document, options, adapter);\n } catch (error) { return restoreFailure(error); }\n },\n abort() { aborted = true; parser.abort(); },\n };\n}\n\nexport function parseNativeDocument(source: string, options: CheerioOptions, isDocument: boolean): NativeDocument {\n const binding = requireNative();\n const nativeOptions = parserOptions(source, options);\n if (!options._useHtmlParser2 && options.treeAdapter && canReplay(options)) {\n const document = routeDocument(new binding.NativeDocument(source, isDocument, JSON.stringify(nativeOptions)), options) as RoutedDocument;\n const nodes = replayIntoAdapter(document, options.treeAdapter, isDocument);\n if (nodes) { attachParsedNodes(document.state, nodes); return document; }\n }\n if (!options._useHtmlParser2 && options.treeAdapter) {\n const parse = (binding as typeof binding & { parseWithTreeAdapter?(source: string, isDocument: boolean, options: string, bridge: (request: string) => string): NativeDocument }).parseWithTreeAdapter;\n if (!parse) throw new Error('This native addon does not support treeAdapter hooks; rebuild the Rust addon.');\n const adapter = treeAdapterBridge(options.treeAdapter, options);\n return bindAdapterDocument(parse(source, isDocument, JSON.stringify(nativeOptions), adapter.bridge), options, adapter);\n }\n const document = new binding.NativeDocument(source, isDocument, JSON.stringify(nativeOptions));\n deliverParseErrors(document, options);\n return routeDocument(document, options);\n}\n\n/** Error-only streams keep the Rust DOM and deliver diagnostics during writes. */\nexport function createDiagnosticSession(options: CheerioOptions, isDocument = true): { write(chunk: string): Promise<void>; end(): Promise<NativeDocument>; abort(): void } {\n const binding = requireNative() as ReturnType<typeof requireNative> & {\n NativeStream?: new (options: string, isDocument: boolean, bridge: (request: string) => string) => { write(chunk: string): Promise<void>; finish(): Promise<NativeDocument>; abort(): void };\n };\n if (!binding.NativeStream) throw new Error('This native addon does not support incremental parser diagnostics; rebuild the Rust addon.');\n let hasFailure = false;\n let failure: unknown;\n let aborted = false;\n const bridge = (request: string): string => {\n if (hasFailure || aborted) return '{\"__rusteerioHookError\":true}';\n try {\n const { method, args } = JSON.parse(request);\n if (method === '__parseError') options.onParseError?.(args[0]);\n return 'null';\n } catch (error) { hasFailure = true; failure = error; return '{\"__rusteerioHookError\":true}'; }\n };\n const parser = new binding.NativeStream(JSON.stringify(cleanParserOptions(options)), isDocument, bridge);\n const restoreFailure = (error: unknown): never => { if (hasFailure) throw failure; throw error; };\n return {\n async write(chunk) { try { await parser.write(chunk); if (hasFailure) throw failure; } catch (error) { restoreFailure(error); } },\n async end() { try { const document = await parser.finish(); if (hasFailure) throw failure; return routeDocument(document, options); } catch (error) { return restoreFailure(error); } },\n abort() { aborted = true; parser.abort(); },\n };\n}\n\n/**\n * Whether an adapter can be given the finished tree instead of every parser\n * step: it observes neither the open-element stack nor source locations, and\n * no parse-error callback can change it while parsing.\n */\nfunction canReplay(options: CheerioOptions): boolean {\n const adapter = options.treeAdapter as unknown as Record<string, unknown>;\n return !options.onParseError && !options.sourceCodeLocationInfo && adapter.onItemPush === undefined && adapter.onItemPop === undefined;\n}\n\n/**\n * Builds the adapter's tree from a native parse by calling its construction\n * methods in document order, then checks every node against the parse. An\n * adapter whose nodes differ from what it was given (renamed elements,\n * rewritten text, filtered children) could have steered parsing differently,\n * so it returns `undefined` and the caller runs the parser with the adapter\n * live instead.\n */\nfunction replayIntoAdapter(document: RoutedDocument, adapter: any, isDocument: boolean): (object | undefined)[] | undefined {\n const state = document.state;\n const root = document.rootId() - state.base;\n const size = state.baseline;\n const nodes: any[] = new Array(size);\n // Reading every record once builds the snapshot; plain nodes are then read from its arrays.\n for (let local = 0; local < Math.min(size, 65); local++) recordAt(state, local);\n for (let local = 0; local < size; local++) {\n const snapshot = plainSnapshot(state, local);\n const record = snapshot ? undefined : recordAt(state, local);\n if (!snapshot && !record) continue;\n const type = snapshot ? snapshot.typeOf(local) : record!.type;\n if (local === root) {\n nodes[local] = isDocument ? adapter.createDocument() : adapter.createDocumentFragment();\n const mode = record?.['x-mode'];\n if (isDocument && mode !== undefined) adapter.setDocumentMode(nodes[local], mode);\n continue;\n }\n const parentLocal = snapshot ? snapshot.linkOf(local, 1) : record!.parent;\n const parent = parentLocal == null ? undefined : nodes[parentLocal];\n if (parent === undefined) return undefined;\n switch (type) {\n case 'tag': case 'script': case 'style': {\n const element = snapshot\n ? adapter.createElement(snapshot.nameOf(local), snapshot.namespaceOf(local), snapshot.attributeObjects(local))\n : adapter.createElement(record!.name, record!.namespace, attributeList(record));\n adapter.appendChild(parent, element);\n nodes[local] = element;\n break;\n }\n case 'root': {\n const content = adapter.createDocumentFragment();\n adapter.setTemplateContent(parent, content);\n nodes[local] = content;\n break;\n }\n case 'text': {\n adapter.insertText(parent, (snapshot ? snapshot.dataOf(local) : record!.data) ?? '');\n const children = adapter.getChildNodes(parent);\n nodes[local] = children[children.length - 1];\n break;\n }\n case 'comment': {\n const comment = adapter.createCommentNode((snapshot ? snapshot.dataOf(local) : record!.data) ?? '');\n adapter.appendChild(parent, comment);\n nodes[local] = comment;\n break;\n }\n case 'directive': {\n if (!record || record.name !== '!doctype' || !isDocument) return undefined;\n adapter.setDocumentType(parent, record['x-name'] ?? '', record['x-publicId'] ?? '', record['x-systemId'] ?? '');\n nodes[local] = Array.from(adapter.getChildNodes(parent) ?? []).find((child) => adapter.isDocumentTypeNode(child));\n break;\n }\n default: return undefined;\n }\n }\n const changes = differencesFromParse(adapter, nodes, state, root);\n if (!changes) return undefined;\n // Attribute and text rewrites do not steer parsing; the document takes the adapter's values.\n for (const change of changes) operation(document, 'setNode', { id: state.base + change.local, field: change.field, value: change.value });\n return nodes;\n}\n\nfunction attributeList(record: any): { name: string; value: string; namespace?: string; prefix?: string }[] {\n const attributes = record.attribs ?? {};\n return Object.keys(attributes).map((name) => {\n const namespace = record.attribsNamespace?.[name];\n const prefix = record.attribsPrefix?.[name];\n return { name, value: attributes[name], ...(namespace === undefined ? {} : { namespace }), ...(prefix === undefined ? {} : { prefix }) };\n });\n}\n\ninterface DataChange { local: number; field: 'attribs' | 'attribsNamespace' | 'attribsPrefix' | 'data'; value: unknown }\n\n/**\n * The attribute and text values in which the adapter's nodes differ from the\n * parse, or `undefined` when a name, namespace or link differs, since those\n * could have steered parsing.\n */\nfunction differencesFromParse(adapter: any, nodes: any[], state: DocumentState, root: number): DataChange[] | undefined {\n const changes: DataChange[] = [];\n for (let local = 0; local < nodes.length; local++) {\n const node = nodes[local];\n const snapshot = plainSnapshot(state, local);\n const record = snapshot ? undefined : recordAt(state, local);\n if (!snapshot && !record) continue;\n if (!node) return undefined;\n const type = snapshot ? snapshot.typeOf(local) : record!.type;\n if (local !== root && adapter.getParentNode(node) !== nodes[(snapshot ? snapshot.linkOf(local, 1) : record!.parent)!]) return undefined;\n if (type !== 'text' && type !== 'comment' && type !== 'directive') {\n const children = adapter.getChildNodes(node) ?? [];\n const count = snapshot ? snapshot.childCount(local) : record!.children.length;\n if (children.length !== count) return undefined;\n for (let index = 0; index < count; index++) if (children[index] !== nodes[snapshot ? snapshot.childAt(local, index) : record!.children[index]]) return undefined;\n }\n if (type === 'tag' || type === 'script' || type === 'style') {\n const name = snapshot ? snapshot.nameOf(local) : record!.name;\n const namespace = snapshot ? snapshot.namespaceOf(local) : record!.namespace;\n if (!adapter.isElementNode(node) || adapter.getTagName(node) !== name || adapter.getNamespaceURI(node) !== namespace) return undefined;\n const attributes: { name: string; value: string; namespace?: string; prefix?: string }[] = adapter.getAttrList(node) ?? [];\n const expected = snapshot ? snapshot.attributeObjects(local) : attributeList(record);\n const isSame = attributes.length === expected.length && attributes.every((attribute, index) => attribute.name === expected[index].name && attribute.value === expected[index].value);\n if (!isSame) {\n const values: Record<string, string> = Object.create(null);\n const namespaces: Record<string, string> = Object.create(null);\n const prefixes: Record<string, string> = Object.create(null);\n for (const attribute of attributes) {\n values[attribute.name] = attribute.value;\n if (attribute.namespace !== undefined) namespaces[attribute.name] = attribute.namespace;\n if (attribute.prefix !== undefined) prefixes[attribute.name] = attribute.prefix;\n }\n changes.push({ local, field: 'attribs', value: values }, { local, field: 'attribsNamespace', value: namespaces }, { local, field: 'attribsPrefix', value: prefixes });\n }\n } else if (type === 'text' || type === 'comment') {\n if (type === 'text' ? !adapter.isTextNode(node) : !adapter.isCommentNode(node)) return undefined;\n const data = type === 'text' ? adapter.getTextNodeContent(node) : adapter.getCommentNodeContent(node);\n if (data !== (snapshot ? snapshot.dataOf(local) : record!.data)) changes.push({ local, field: 'data', value: data });\n }\n }\n return changes;\n}\n","import { decodeString } from './codec.js';\nimport type { NativeNodeRecord } from './native.js';\n\n/**\n * The compact record copy returned by `NativeDocument.snapshot()`: the\n * lengths of the node, child, attribute and string lists, whether any string\n * holds codec escapes, then the lists.\n */\nexport interface NativeSnapshot {\n data: Uint32Array;\n text: string;\n}\nconst HEADER = 5;\n\nconst STRIDE = 15;\nconst ABSENT = 0xffffffff;\nconst HAS_START_INDEX = 1;\nconst HAS_END_INDEX = 2;\nconst HAS_NAMESPACE = 4;\nconst EMPTY_ATTRIBUTE_MAPS = 8;\nconst OPAQUE = 16;\nconst RELEASED = 32;\nconst noChildren: number[] = Object.freeze([]) as unknown as number[];\nconst noAttributes: Record<string, string> = Object.freeze({}) as Record<string, string>;\n\n/**\n * A record read from a snapshot. It stores only its position; fields decode\n * on read, and strings and lists are kept once decoded. Every instance has\n * the same fields, so reads stay monomorphic. Absent fields read `undefined`.\n */\nclass SnapshotRecord {\n private decodedData: string | undefined;\n private decodedAttributes: Record<string, string> | undefined;\n private decodedChildren: number[] | undefined;\n\n constructor(private readonly snapshot: NodeSnapshot, readonly id: number, private readonly base: number) {\n this.decodedData = undefined;\n this.decodedAttributes = undefined;\n this.decodedChildren = undefined;\n }\n\n get type(): string { return this.snapshot.name(this.snapshot.nodes[this.base]); }\n get name(): string | undefined { const name = this.snapshot.nodes[this.base + 6]; return name ? this.snapshot.name(name - 1) : undefined; }\n get data(): string | undefined {\n if (this.decodedData !== undefined) return this.decodedData;\n const data = this.snapshot.nodes[this.base + 7];\n return data ? this.decodedData = this.snapshot.string(data - 1) : undefined;\n }\n get parent(): number | null { const parent = this.snapshot.nodes[this.base + 1]; return parent ? parent - 1 : null; }\n get prev(): number | null { const prev = this.snapshot.nodes[this.base + 2]; return prev ? prev - 1 : null; }\n get next(): number | null { const next = this.snapshot.nodes[this.base + 3]; return next ? next - 1 : null; }\n get startIndex(): number | null | undefined { return this.index(HAS_START_INDEX, 11); }\n get endIndex(): number | null | undefined { return this.index(HAS_END_INDEX, 12); }\n get namespace(): string | undefined { const nodes = this.snapshot.nodes; return nodes[this.base + 10] & HAS_NAMESPACE ? this.snapshot.name(nodes[this.base + 13]) : undefined; }\n get attribsNamespace(): Record<string, string> | undefined { return this.snapshot.nodes[this.base + 10] & EMPTY_ATTRIBUTE_MAPS ? {} : undefined; }\n get attribsPrefix(): Record<string, string> | undefined { return this.snapshot.nodes[this.base + 10] & EMPTY_ATTRIBUTE_MAPS ? {} : undefined; }\n get attribs(): Record<string, string> { return this.decodedAttributes ??= this.snapshot.attributesOf(this.id); }\n get children(): number[] { return this.decodedChildren ??= this.snapshot.childrenOf(this.id); }\n\n private index(flag: number, offset: number): number | null | undefined {\n const nodes = this.snapshot.nodes;\n if (!(nodes[this.base + 10] & flag)) return undefined;\n const value = nodes[this.base + offset];\n return value === ABSENT ? null : value;\n }\n}\n\n/** Snapshot records extended with fields stored as JSON, which are rare. */\nconst recordFields = ['type', 'name', 'data', 'parent', 'prev', 'next', 'startIndex', 'endIndex', 'namespace', 'attribsNamespace', 'attribsPrefix', 'attribs', 'children'] as const;\n\n/** A plain copy of a record, for callers that spread or serialize it. */\nexport function plainRecord(record: NativeNodeRecord): NativeNodeRecord {\n if (!(record instanceof SnapshotRecord)) return record;\n const copy: Record<string, unknown> = { id: record.id };\n for (const field of recordFields) { const value = (record as any)[field]; if (value !== undefined) copy[field] = value; }\n for (const key of Object.keys(record)) if (!key.startsWith('decoded') && key !== 'snapshot' && key !== 'base' && key !== 'id') copy[key] = (record as any)[key];\n return copy as NativeNodeRecord;\n}\n\n/** Decodes node records from a snapshot on demand, exactly as `node()` returns them. */\nexport class NodeSnapshot {\n readonly size: number;\n readonly nodes: Uint32Array;\n private readonly children: Uint32Array;\n private readonly attributes: Uint32Array;\n private readonly strings: Uint32Array;\n private readonly text: string;\n private readonly isEncoded: boolean;\n private readonly names: (string | undefined)[] = [];\n /** Node object constructors by interned type, resolved once per snapshot. */\n viewConstructors: unknown = undefined;\n\n constructor(raw: NativeSnapshot) {\n const { data } = raw;\n const childrenStart = HEADER + data[0];\n const attributesStart = childrenStart + data[1];\n const stringsStart = attributesStart + data[2];\n this.text = raw.text;\n this.isEncoded = data[4] === 1;\n this.nodes = data.subarray(HEADER, childrenStart);\n this.children = data.subarray(childrenStart, attributesStart);\n this.attributes = data.subarray(attributesStart, stringsStart);\n this.strings = data.subarray(stringsStart, stringsStart + data[3]);\n this.size = this.nodes.length / STRIDE;\n }\n\n /** The record, `null` for a released node, or `undefined` when it must be read individually. */\n record(local: number): NativeNodeRecord | null | undefined {\n if (local >= this.size) return undefined;\n const base = local * STRIDE;\n const flags = this.nodes[base + 10];\n if (flags & RELEASED) return null;\n if (flags & OPAQUE) return undefined;\n const record = new SnapshotRecord(this, local, base);\n const extras = this.nodes[base + 14];\n if (extras) {\n // Fields stored as JSON, such as foreign attribute namespaces, shadow the decoded getters.\n const fields = JSON.parse(this.string(extras - 1));\n for (const key of Object.keys(fields)) Object.defineProperty(record, key, { value: fields[key], writable: true, enumerable: true, configurable: true });\n }\n return record as unknown as NativeNodeRecord;\n }\n\n /** Whether a node's fields all live in the arrays, so callers may read them without a record. */\n isPlain(local: number): boolean {\n if (local >= this.size) return false;\n const base = local * STRIDE;\n return (this.nodes[base + 10] & (OPAQUE | RELEASED)) === 0 && this.nodes[base + 14] === 0;\n }\n\n typeOf(local: number): string {\n return this.name(this.nodes[local * STRIDE]);\n }\n\n nameOf(local: number): string | undefined {\n const name = this.nodes[local * STRIDE + 6];\n return name ? this.name(name - 1) : undefined;\n }\n\n dataOf(local: number): string | undefined {\n const data = this.nodes[local * STRIDE + 7];\n return data ? this.string(data - 1) : undefined;\n }\n\n /** The parent, previous or next sibling (`offset` 1, 2 or 3), or `null`. */\n linkOf(local: number, offset: number): number | null {\n const link = this.nodes[local * STRIDE + offset];\n return link ? link - 1 : null;\n }\n\n namespaceOf(local: number): string | undefined {\n const base = local * STRIDE;\n return this.nodes[base + 10] & HAS_NAMESPACE ? this.name(this.nodes[base + 13]) : undefined;\n }\n\n /** A node's attributes as parse5 attribute objects; plain nodes have no namespaced ones. */\n attributeObjects(local: number): { name: string; value: string }[] {\n const base = local * STRIDE;\n const count = this.nodes[base + 9];\n const first = this.nodes[base + 8];\n const attributes = this.attributes;\n const result: { name: string; value: string }[] = new Array(count);\n for (let index = 0; index < count; index++) {\n const pair = (first + index) * 2;\n result[index] = { name: this.name(attributes[pair]), value: this.string(attributes[pair + 1]) };\n }\n return result;\n }\n\n /** Copies a node's attributes onto `target`, in order. */\n copyAttributes(local: number, target: Record<string, string>): void {\n const base = local * STRIDE;\n const count = this.nodes[base + 9];\n const first = this.nodes[base + 8];\n const attributes = this.attributes;\n for (let index = 0; index < count; index++) {\n const pair = (first + index) * 2;\n const name = this.name(attributes[pair]);\n const value = this.string(attributes[pair + 1]);\n if (name === '__proto__') Object.defineProperty(target, name, { value, writable: true, enumerable: true, configurable: true });\n else target[name] = value;\n }\n }\n\n /** The flat child id list; a node's children start at `childStart(local)`. */\n get childIds(): Uint32Array { return this.children; }\n\n childStart(local: number): number {\n return this.nodes[local * STRIDE + 4];\n }\n\n /** The interned reference of a node's type, comparable across nodes of this snapshot. */\n typeReference(local: number): number {\n return this.nodes[local * STRIDE];\n }\n\n /** Child ids without materializing the record. */\n childCount(local: number): number {\n return this.nodes[local * STRIDE + 5];\n }\n\n childAt(local: number, index: number): number {\n return this.children[this.nodes[local * STRIDE + 4] + index];\n }\n\n childrenOf(local: number): number[] {\n const base = local * STRIDE;\n const count = this.nodes[base + 5];\n if (count === 0) return noChildren;\n const first = this.nodes[base + 4];\n return Array.from(this.children.subarray(first, first + count));\n }\n\n attributesOf(local: number): Record<string, string> {\n const base = local * STRIDE;\n const count = this.nodes[base + 9];\n if (count === 0) return noAttributes;\n const first = this.nodes[base + 8];\n const attributes = this.attributes;\n const result: Record<string, string> = {};\n for (let index = 0; index < count; index++) {\n const pair = (first + index) * 2;\n const name = this.name(attributes[pair]);\n const value = this.string(attributes[pair + 1]);\n if (name === '__proto__') Object.defineProperty(result, name, { value, writable: true, enumerable: true, configurable: true });\n else result[name] = value;\n }\n return result;\n }\n\n /** One attribute's value, without decoding the rest. */\n attributeValue(local: number, name: string): string | undefined {\n const base = local * STRIDE;\n const count = this.nodes[base + 9];\n const first = this.nodes[base + 8];\n const attributes = this.attributes;\n // A repeated name keeps its last value, as decoded attribute maps do.\n for (let index = count - 1; index >= 0; index--) {\n const pair = (first + index) * 2;\n if (this.name(attributes[pair]) === name) return this.string(attributes[pair + 1]);\n }\n return undefined;\n }\n\n string(reference: number): string {\n const strings = this.strings;\n const value = this.text.slice(strings[reference * 2], strings[reference * 2 + 1]);\n return this.isEncoded ? decodeString(value) : value;\n }\n\n /** Names repeat across nodes, so each decodes once. */\n name(reference: number): string {\n return this.names[reference] ??= this.string(reference);\n }\n}\n","import { packageDirectory, requireNative, type NativeDocument, type NativeNodeRecord } from './native.js';\nimport { hasParserHooks, parseNativeDocument } from './hooks.js';\nimport type { CheerioOptions } from './types.js';\nimport { NodeSnapshot, plainRecord, type NativeSnapshot } from './snapshot.js';\n\ninterface NativeMemoryStats { live: number; slots: number; retained: number; reclaimed: number; immutableNodes: number; externalBytes: number }\ninterface PinnedCollection extends NativeMemoryStats { free: Uint32Array }\ninterface ManagedNativeDocument extends NativeDocument {\n setAttribute?(ids: number[], name: string, value: string | null): void;\n slotCount?(): number;\n routingIndex?(): number;\n detachedSlots?(root: number): Uint32Array;\n render?(ids: number[], optionsJson?: string): string;\n snapshot?(): NativeSnapshot;\n takeTouched?(): Uint32Array | null;\n collectPinned?(pins: Uint32Array, keepBelow?: number): PinnedCollection;\n collectGarbage?(): NativeMemoryStats;\n isCollectionDue?(): boolean;\n}\n\n/**\n * A node id is `state.base + local`, where `local` indexes the node in its\n * native arena. Ids from different documents never collide, so every routed\n * document shares one id space without a lookup table per node.\n */\nconst STRIDE = 2 ** 32;\n/** Ids must stay exact doubles, which bounds how many documents may be alive at once. */\nconst maximumDocuments = 2 ** 21;\n/** A document's root is its first slot; collections keep it and everything attached to it. */\nconst rootSlots = 1;\n\n/**\n * Ids held by a JavaScript owner. Collection keeps them; moves rewrite them in\n * place. The finalization registry holds only the token, which references\n * nothing: its cleanup runs only once the event loop turns, and anything it\n * held would keep documents of a synchronous loop alive until then.\n */\nexport interface Lease { ids: number[]; token: LeaseToken; states: DocumentState[] }\ninterface LeaseToken { isReleased: boolean }\n\n/**\n * JavaScript `.data()` storage for one node; moves carry it to the node's new\n * arena. A collection that frees the node releases it, so data objects still\n * held no longer write to whatever node reuses the slot.\n */\nexport interface DataEntry { state: DocumentState; local: number; data?: object; isReleased?: boolean }\n\n/** Bookkeeping for one native document. */\nexport interface DocumentState {\n readonly raw: ManagedNativeDocument;\n readonly base: number;\n /** The id space the state's base belongs to: another copy of the package numbers its documents separately. */\n readonly space: object;\n readonly options: CheerioOptions;\n rootLocal: number | undefined;\n routed: RoutedDocument | undefined;\n generation: number;\n records: (NativeNodeRecord | null | undefined)[];\n bulk: NodeSnapshot | number;\n snapshotSize: number;\n /** Nodes whose snapshot entry is outdated by a targeted write. */\n stale: Set<number>;\n /**\n * Node objects for slots that existed at parse time, until a collection\n * finds their nodes detached; an array read is far cheaper than a map\n * lookup.\n */\n views: (object | undefined)[];\n /** Node objects for slots created later, until a collection finds their nodes detached. */\n looseViews: Map<number, object>;\n /** Size of `looseViews` at which a collection is scheduled. */\n looseViewLimit: number;\n /** Node objects for detached nodes, kept only while something else holds them. */\n weakViews: Map<number, WeakRef<object>>;\n /** Slots that existed when the document was parsed. */\n baseline: number;\n /** Later collections to run while weakened node objects may still become unreachable. */\n collectionRetries: number;\n /** Whether a collection was due but the document left the pending list; its next use schedules it again. */\n isCollectionEvicted: boolean;\n leases: Set<Lease>;\n /** Lease count at which released leases are swept. */\n leaseSweepSize: number;\n data: Map<number, DataEntry>;\n /**\n * Whether the id table resolves this document. Only ids that reach another\n * document need it, and the `WeakRef` it takes keeps the document alive\n * until the current job ends.\n */\n isExposed: boolean;\n /**\n * Documents whose ids this document's selections or leases may hold. A\n * document's index is reused once it is collected, so holders keep it.\n */\n /** Some node object holds a child array that must follow structural writes. */\n hasChildLists: boolean;\n /** A tree adapter's nodes not yet returned to the caller, by slot. */\n adapterNodes?: (object | undefined)[];\n}\n\n/** Fields on node objects; registered symbols so ESM and CJS copies share nodes. */\nexport const VIEW_STATE = Symbol.for('rusteerio.node.state');\nexport const VIEW_LOCAL = Symbol.for('rusteerio.node.local');\nexport const VIEW_ATTRIBUTES = Symbol.for('rusteerio.node.attributes');\n/** Points at the node itself, so a spread copy of a node is not mistaken for it. */\nexport const VIEW_SELF = Symbol.for('rusteerio.node.self');\n// Internals are own properties under symbols: reads stay plain property\n// loads, which prototype accessors are not on selections of many documents'\n// classes, and selections enumerate like Cheerio's. Registered symbols let\n// the ESM and CommonJS builds read each other's selections.\nexport const DOCUMENT: unique symbol = Symbol.for('rusteerio.selection.document');\nexport const API: unique symbol = Symbol.for('rusteerio.selection.api');\nexport const IDS: unique symbol = Symbol.for('rusteerio.selection.ids');\nexport const VALUES: unique symbol = Symbol.for('rusteerio.selection.values');\nexport const LEASE: unique symbol = Symbol.for('rusteerio.selection.lease');\nexport const IS_PLAIN: unique symbol = Symbol.for('rusteerio.selection.is-plain');\n/** A node object's materialized `children` array, refilled when the node's children change. */\nexport const VIEW_CHILD_TARGET = Symbol.for('rusteerio.node.child-target');\n\ninterface Registry {\n space: object;\n /** Writes to any document, so callers can tell whether values they read earlier may be stale. */\n writes: number;\n states: (WeakRef<DocumentState> | undefined)[];\n pending: Set<DocumentState>;\n isScheduled: boolean;\n leaseFinalizer: FinalizationRegistry<LeaseToken>;\n}\n// Each installed copy of the package loads its own addon, which numbers its\n// documents independently, so only entry points of one copy share ids.\nconst registryKey = Symbol.for(`rusteerio.native-documents.v5:${packageDirectory()}`);\n/** A native document's state lives on the document itself, so they share one lifetime. */\nconst stateKey = Symbol.for('rusteerio.native-documents.state');\nconst globals = globalThis as typeof globalThis & { [key: symbol]: Registry | undefined };\nconst registry: Registry = globals[registryKey] ??= (() => {\n const created: Registry = {\n space: {},\n writes: 0,\n states: [],\n pending: new Set(),\n isScheduled: false,\n leaseFinalizer: new FinalizationRegistry((token) => { token.isReleased = true; }),\n };\n return created;\n})();\n\n/** The states owning `ids`, resolved through `document`. */\nfunction statesOf(document: NativeDocument, ids: readonly number[]): DocumentState[] {\n const states: DocumentState[] = [];\n let previous: DocumentState | undefined;\n for (const id of ids) {\n // Selections may hold holes after direct index writes.\n if (id === undefined) continue;\n if (previous && id >= previous.base && id < previous.base + STRIDE) continue;\n const state = stateIn(document, id);\n if (!states.includes(state)) states.push(state);\n previous = state;\n }\n return states;\n}\n\n/**\n * Collects once a structural write leaves the arena grown by half with nodes\n * removed; collecting sooner costs more than the garbage it would free.\n */\nfunction scheduleCollectionIfDue(state: DocumentState): void {\n if (state.raw.isCollectionDue?.()) scheduleCollection(state);\n}\n\n/**\n * Collections run on a later turn of the event loop: no library call is then\n * between native writes holding ids of nodes it has just detached, and node\n * objects weakened on an earlier turn may have been reclaimed.\n */\nfunction scheduleCollection(state: DocumentState): void {\n registry.pending.add(state);\n // Pending documents are held strongly until the event loop turns; in a\n // synchronous loop only the latest few stay pinned. Holding the others\n // weakly would pin them too: a WeakRef keeps its target until the\n // synchronous job ends. An evicted document is scheduled again on its next\n // use; one never used again is either collected whole or idle.\n if (registry.pending.size > maximumPendingCollections) {\n const evicted = registry.pending.values().next().value!;\n registry.pending.delete(evicted);\n evicted.isCollectionEvicted = true;\n }\n if (registry.isScheduled) return;\n registry.isScheduled = true;\n setImmediate(() => {\n registry.isScheduled = false;\n const states = [...registry.pending];\n registry.pending.clear();\n for (const pending of states) collectState(pending);\n }).unref();\n}\n\nconst maximumPendingCollections = 4;\n\n/** Increases with every write to any document. */\nexport function writeCount(): number {\n return registry.writes;\n}\n\n/**\n * The state of a native document, created on first use. The addon hands out\n * routing indexes and takes one back when its document is finalized, which\n * happens during garbage collection, so indexes recycle even within a\n * synchronous loop.\n */\nexport function stateFor(raw: NativeDocument, options: CheerioOptions = {}): DocumentState {\n const holder = raw as unknown as { [stateKey]?: DocumentState };\n const existing = holder[stateKey];\n if (existing) return existing;\n const index = (raw as ManagedNativeDocument).routingIndex!();\n if (index >= maximumDocuments) throw new RangeError('Too many documents are alive at once.');\n const baseline = (raw as ManagedNativeDocument).slotCount?.() ?? 0;\n const state: DocumentState = {\n raw: raw as ManagedNativeDocument, base: index * STRIDE, space: registry.space, options, rootLocal: undefined, routed: undefined,\n // Sized up front: node objects are cached out of order, and regrowing a holey array is costly.\n generation: 0, records: [], bulk: 0, snapshotSize: 0, stale: new Set(), views: new Array(baseline), looseViews: new Map(), looseViewLimit: minimumLooseViewLimit, weakViews: new Map(), baseline,\n leases: new Set(), leaseSweepSize: 64, data: new Map(), isExposed: false, hasChildLists: false, collectionRetries: 0, isCollectionEvicted: false,\n };\n holder[stateKey] = state;\n return state;\n}\n\n/** Lets ids of `state` be resolved from documents other than its own. */\nfunction exposeState(state: DocumentState): void {\n if (state.isExposed) return;\n state.isExposed = true;\n registry.states[state.base / STRIDE] = new WeakRef(state);\n}\n\n/**\n * Called before ids of `state` enter operations or selections of `document`.\n * Leases keep the documents of the ids a selection holds; node objects keep\n * their own.\n */\nexport function exposeTo(document: NativeDocument, state: DocumentState): void {\n if ((document as Partial<RoutedDocument>).state === state) return;\n exposeState(state);\n}\n\n/** Called before a selection's ids enter operations of `document`. */\nexport function exposeDocumentTo(document: NativeDocument, source: NativeDocument | undefined): void {\n const state = (source as Partial<RoutedDocument> | undefined)?.state;\n if (state) exposeTo(document, state);\n}\n\n/** The node object cached for a slot, if any. */\nexport function cachedView(state: DocumentState, local: number): object | undefined {\n const view = local < state.baseline ? state.views[local] : state.looseViews.get(local);\n return view ?? (state.weakViews.size ? state.weakViews.get(local)?.deref() : undefined);\n}\n\n/** Created nodes held as objects only become collectable through a collection. */\nconst minimumLooseViewLimit = 1024;\n\nexport function cacheView(state: DocumentState, local: number, view: object): void {\n if (local < state.baseline) { state.views[local] = view; return; }\n state.looseViews.set(local, view);\n if (state.looseViews.size >= state.looseViewLimit) {\n state.looseViewLimit = state.looseViews.size * 2;\n scheduleCollection(state);\n }\n}\n\nfunction uncacheView(state: DocumentState, local: number): object | undefined {\n const view = cachedView(state, local);\n if (local < state.baseline) state.views[local] = undefined;\n state.looseViews.delete(local);\n state.weakViews.delete(local);\n return view;\n}\n\n/** A collection drops released slots at the arena's end; later nodes reuse their indexes. */\nfunction releaseSlotsFrom(state: DocumentState, end: number): void {\n for (const local of state.data.keys()) if (local >= end) releaseSlot(state, local);\n for (const local of state.weakViews.keys()) if (local >= end) state.weakViews.delete(local);\n if (state.adapterNodes && state.adapterNodes.length > end) {\n for (let local = end; local < state.adapterNodes.length; local++) releaseAdapterNode(state, local);\n state.adapterNodes.length = end;\n }\n}\n\n/** Forgets everything bound to a slot a collection freed. */\nfunction releaseSlot(state: DocumentState, local: number): void {\n uncacheView(state, local);\n const entry = state.data.get(local);\n if (entry) { entry.isReleased = true; state.data.delete(local); }\n releaseAdapterNode(state, local);\n}\n\n/** Hands a freed slot's tree adapter object back to the caller: passed in again, it is imported like any other node. */\nfunction releaseAdapterNode(state: DocumentState, local: number): void {\n const adapterNode = state.adapterNodes?.[local] as Record<symbol, unknown> | undefined;\n if (!adapterNode) return;\n adapterNode[VIEW_SELF] = undefined;\n state.adapterNodes![local] = undefined;\n}\n\nfunction hasViews(state: DocumentState): boolean {\n return state.views.length > 0 || state.looseViews.size > 0 || state.weakViews.size > 0;\n}\n\nfunction forEachView(state: DocumentState, visit: (view: object, local: number) => void): void {\n state.views.forEach((view, local) => { if (view) visit(view, local); });\n for (const [local, view] of state.looseViews) visit(view, local);\n for (const [local, reference] of state.weakViews) { const view = reference.deref(); if (view) visit(view, local); }\n}\n\n/**\n * Node objects of detached nodes stay cached only while something else holds\n * them, so a later collection can reclaim their nodes. The `WeakRef`s are\n * taken during a collection rather than on removal: taking one keeps its\n * target, and so its document, alive until the current job ends. Returns\n * whether any node object was weakened.\n */\nfunction weakenDetachedViews(state: DocumentState): boolean {\n if (!state.raw.detachedSlots) return false;\n let isWeakened = false;\n for (const local of state.raw.detachedSlots(state.rootLocal ??= state.raw.rootId())) {\n const view = local < state.baseline ? state.views[local] : state.looseViews.get(local);\n if (!view) continue;\n if (local < state.baseline) state.views[local] = undefined;\n else state.looseViews.delete(local);\n state.weakViews.set(local, new WeakRef(view));\n isWeakened = true;\n }\n return isWeakened;\n}\n\n/** The state owning `id` of a document whose ids have reached other documents. */\nfunction exposedStateOf(id: number): DocumentState {\n const state = registry.states[Math.floor(id / STRIDE)]?.deref();\n if (!state || !(id >= 0)) throw new RangeError(`Unknown native node handle ${id}`);\n return state;\n}\n\n/** The state owning `id`, resolved without the weak table when `document` owns it. */\nexport function stateIn(document: NativeDocument, id: number): DocumentState {\n const own = (document as Partial<RoutedDocument>).state;\n if (own === undefined || id < own.base || id >= own.base + STRIDE) return exposedStateOf(id);\n if (own.isCollectionEvicted) resumeCollection(document);\n return own;\n}\n\n/** Schedules again a collection that left the pending list before it ran. */\nexport function resumeCollection(document: NativeDocument): void {\n const state = (document as Partial<RoutedDocument>).state;\n if (!state?.isCollectionEvicted) return;\n state.isCollectionEvicted = false;\n scheduleCollection(state);\n}\n\n/** The node's record for the current generation, with ids local to `state`. */\nexport function recordAt(state: DocumentState, local: number): NativeNodeRecord | null {\n const cached = state.records[local];\n if (cached !== undefined) return cached;\n const record = readRecord(state, local);\n state.records[local] = record;\n return record;\n}\n\nconst minimumReadsBeforeSnapshot = 64;\n\n/**\n * Once individual reads in a generation cost about as much as copying every\n * record, take one snapshot and decode the rest locally. A snapshot costs\n * about two reads plus one read per hundred nodes, and a document read once\n * is usually read again, so an unchanged document of under a hundred nodes\n * takes one on its first read. Mutations start a new generation.\n */\nfunction readRecord(state: DocumentState, local: number): NativeNodeRecord | null {\n const bulk = state.bulk;\n if (bulk instanceof NodeSnapshot) {\n const record = state.stale.size && state.stale.has(local) ? undefined : bulk.record(local);\n if (record !== undefined) return record;\n } else if (state.raw.snapshot) {\n const reads = bulk + 1;\n const size = Math.max(state.snapshotSize, state.baseline);\n // An unchanged small document is read throughout; after a write, often only a few nodes are.\n const firstSnapshotRead = state.generation === 0 ? size / 100 : 1 + size / 100;\n if (reads >= Math.min(minimumReadsBeforeSnapshot, firstSnapshotRead)) {\n const snapshot = new NodeSnapshot(state.raw.snapshot());\n state.snapshotSize = snapshot.size;\n state.bulk = snapshot;\n const record = snapshot.record(local);\n if (record !== undefined) return record;\n } else state.bulk = reads;\n }\n return rawOperation(state.raw, 'node', { id: local });\n}\n\n/** The current snapshot when it holds `local` exactly, so its fields can be read without a record. */\nexport function plainSnapshot(state: DocumentState, local: number): NodeSnapshot | undefined {\n const bulk = state.bulk;\n return bulk instanceof NodeSnapshot && !(state.stale.size && state.stale.has(local)) && bulk.isPlain(local) ? bulk : undefined;\n}\n\n/** A string attribute of an element, read like the native `attr` lookup. */\nexport function attributeAt(state: DocumentState, local: number, name: string): string | undefined {\n const snapshot = plainSnapshot(state, local);\n if (snapshot) return snapshot.attributeValue(local, name);\n const attributes = recordAt(state, local)?.attribs as Record<string, unknown> | undefined;\n const value = attributes && Object.hasOwn(attributes, name) ? attributes[name] : undefined;\n return typeof value === 'string' ? value : undefined;\n}\n\n/** Starts a new generation: cached records may no longer match the arena. */\nexport function invalidate(state: DocumentState): void {\n state.generation++;\n state.records = [];\n state.bulk = 0;\n state.stale.clear();\n}\n\n/** Discards the records of nodes a write changed without touching the tree's shape. */\nfunction invalidateNodes(state: DocumentState, locals: number[]): void {\n const isSnapshot = state.bulk instanceof NodeSnapshot;\n for (const local of locals) {\n state.records[local] = undefined;\n if (isSnapshot) state.stale.add(local);\n }\n}\n\n/** Keeps the ids of `document` that `owner` holds alive, and rewrites them when their nodes move. */\nexport function leaseNodes(document: NativeDocument, owner: object, ids: number[]): Lease {\n const token: LeaseToken = { isReleased: false };\n const states = statesOf(document, ids);\n const lease: Lease = { ids, token, states };\n for (const state of states) addLease(state, lease);\n registry.leaseFinalizer.register(owner, token);\n return lease;\n}\n\n/** Points a lease at a replacement id list. */\nexport function updateLease(document: NativeDocument, lease: Lease, ids: number[]): void {\n lease.ids = ids;\n lease.states = statesOf(document, ids);\n for (const state of lease.states) addLease(state, lease);\n}\n\nfunction addLease(state: DocumentState, lease: Lease): void {\n state.leases.add(lease);\n if (state.leases.size < state.leaseSweepSize) return;\n for (const held of state.leases) if (held.token.isReleased) state.leases.delete(held);\n state.leaseSweepSize = state.leases.size * 2 + 64;\n}\n\n/** Weakened node objects become unreachable only after a later garbage collection. */\nconst collectionRetries = 3;\n\n/** Reclaims removed nodes that no JavaScript owner references. */\nexport function collectState(state: DocumentState): NativeMemoryStats | undefined {\n registry.pending.delete(state);\n state.isCollectionEvicted = false;\n if (!state.raw.collectPinned) return state.raw.collectGarbage?.();\n if (weakenDetachedViews(state)) state.collectionRetries = collectionRetries;\n const pins: number[] = [];\n const { base } = state;\n const end = base + STRIDE;\n for (const lease of state.leases) {\n if (lease.token.isReleased) { state.leases.delete(lease); continue; }\n for (const id of lease.ids) if (id >= base && id < end) pins.push(id - base);\n }\n state.views.forEach((view, local) => { if (view) pins.push(local); });\n for (const local of state.looseViews.keys()) pins.push(local);\n for (const [local, reference] of state.weakViews) {\n if (reference.deref()) pins.push(local);\n else state.weakViews.delete(local);\n }\n const { free, ...stats } = state.raw.collectPinned(Uint32Array.from(pins), rootSlots);\n invalidate(state);\n for (const local of free) releaseSlot(state, local);\n releaseSlotsFrom(state, stats.slots);\n state.looseViewLimit = Math.max(minimumLooseViewLimit, state.looseViews.size * 2);\n if (state.collectionRetries > 0 && state.weakViews.size > 0) {\n state.collectionRetries--;\n scheduleCollection(state);\n }\n return stats;\n}\n\nfunction rawOperation<T = any>(document: NativeDocument, command: string, args: any): T {\n const result = document.op(command, JSON.stringify(args));\n return result === '' || result === undefined ? undefined as T : JSON.parse(result);\n}\n\n/** Converts a record's local links to ids. */\nfunction globalRecord(state: DocumentState, record: NativeNodeRecord | null): NativeNodeRecord | null {\n if (!record) return null;\n const { base } = state;\n const link = (local: number | null | undefined): number | null => local == null ? null : base + local;\n return { ...plainRecord(record), id: base + record.id, children: (record.children ?? []).map((child) => base + child), parent: link(record.parent), prev: link(record.prev), next: link(record.next) } as NativeNodeRecord;\n}\n\nconst parentTypes = new Set(['root', 'tag', 'script', 'style', 'cdata']);\nconst pointerFields = new Set(['parent', 'parentNode', 'prev', 'previousSibling', 'next', 'nextSibling']);\nconst idResultCommands = new Set(['select', 'matches', 'uniqueSort', 'traverse', 'clone']);\nconst scratchCommands = new Set(['select', 'matches', 'uniqueSort', 'serializeArray', 'serialize', 'extractPlan']);\nconst writeCommands = new Set(['create', 'createNode', 'setNode', 'import', 'insert', 'clone', 'remove', 'removeAttr', 'removeData', 'addClass', 'removeClass', 'toggleClass']);\nconst attributeFields = new Set(['attribs', 'x-attribsNamespace', 'x-attribsPrefix']);\nconst targetedAttributeWrites = new Set(['attr', 'removeAttr', 'addClass', 'removeClass', 'toggleClass', 'css']);\n/** Writes that only change the records of their own ids. */\nconst recordOnlyWrites = new Set([...targetedAttributeWrites, 'data', 'removeData']);\nconst structuralWrites = new Set(['create', 'createNode', 'import', 'insert', 'clone', 'remove', 'html', 'text', 'data', 'removeData']);\n\n/**\n * Routes commands for ids from any document to the arena that owns them.\n * Native adoption moves nodes between arenas; `moveInto` rewrites the ids that\n * live owners hold so node identities survive the move.\n */\nexport class RoutedDocument implements NativeDocument {\n readonly nodeSpace = registry.space;\n readonly options: CheerioOptions;\n readonly state: DocumentState;\n get raw(): ManagedNativeDocument { return this.state.raw; }\n\n constructor(document: NativeDocument, options: CheerioOptions = {}) {\n this.options = options;\n this.state = stateFor(document, options);\n }\n\n /**\n * Sets (or with `null` removes) an attribute, as the `attr` command does,\n * through a typed native call. Attribute objects already handed out are\n * updated in place instead of being read back.\n */\n setAttribute(ids: number[], name: string, value: string | null): void {\n registry.writes++;\n for (const { state, locals } of this.groups(ids)) {\n if (!state.raw.setAttribute) { this.call(state, 'attr', { ids: locals, name, value }); continue; }\n invalidateNodes(state, locals);\n state.raw.setAttribute(locals, name, value);\n for (const local of locals) {\n const target = ((cachedView(state, local) as Record<symbol, { target?: Record<string, string> } | undefined> | undefined)?.[VIEW_ATTRIBUTES])?.target;\n if (!target) continue;\n if (value === null) delete target[name];\n else if (name === '__proto__') Object.defineProperty(target, name, { value, writable: true, enumerable: true, configurable: true });\n else target[name] = value;\n }\n }\n }\n\n retainNode(id: number): void { this.owner(id); }\n collectGarbage(): NativeMemoryStats | undefined { return collectState(this.state); }\n retainNodeData(id: number, data: object): void { dataEntry(this.owner(id), id).data = data; }\n nodeData(id: number): object | undefined { const state = this.owner(id); return state.data.get(id - state.base)?.data; }\n nodeDataOperation(id: number): (command: string, args: any) => any {\n const entry = dataEntry(this.owner(id), id);\n const options = this.options;\n // Resolve the entry's current arena on each call: the node may have moved.\n return (command, args) => entry.isReleased ? undefined : routedFor(entry.state).operate(command, { ...args, ids: [entry.state.base + entry.local], options });\n }\n localNodeId(local: number): number { return this.state.base + local; }\n rootId(): number { return this.state.base + (this.state.rootLocal ??= this.raw.rootId()); }\n isOwnNode(id: number): boolean { return id >= this.state.base && id < this.state.base + STRIDE; }\n private owner(id: number): DocumentState { return stateIn(this, id); }\n\n private globals(state: DocumentState, locals: number[]): number[] {\n const { base } = state;\n return locals.map((local) => base + local);\n }\n\n private groups(ids: number[]): { state: DocumentState; locals: number[] }[] {\n const groups: { state: DocumentState; locals: number[] }[] = [];\n const own = this.state;\n let last: { state: DocumentState; locals: number[] } | undefined;\n for (const id of ids) {\n const state = id >= own.base && id < own.base + STRIDE ? own : exposedStateOf(id);\n if (last?.state === state) last.locals.push(id - state.base);\n else groups.push(last = { state, locals: [id - state.base] });\n }\n return groups;\n }\n\n private call<T = any>(state: DocumentState, command: string, args: any): T {\n if (command === 'extractPlan' && JSON.stringify(args.plan).includes('innerHTML')) invalidate(state);\n const isWrite = Object.hasOwn(args, 'value') || writeCommands.has(command);\n if (isWrite) {\n registry.writes++;\n const changed = recordOnlyWrites.has(command) ? args.ids ?? [] : command === 'setNode' && attributeFields.has(args.field) ? [args.id] : undefined;\n if (changed) invalidateNodes(state, changed);\n else invalidate(state);\n }\n const result = rawOperation(state.raw, command, { ...args, options: args.options ?? this.options });\n if (isWrite) { refreshWrittenAttributes(state, command, args); refreshChildLists(state); scheduleCollectionIfDue(state); }\n return result;\n }\n\n /** Moves or copies nodes into `target`; returns their local ids there. */\n private moveInto(target: DocumentState, ids: number[], isCopy = false): number[] {\n if (!isCopy) {\n for (const group of this.groups(ids)) {\n if (group.state === target) continue;\n if (!target.raw.adopt) throw new Error('The native addon does not support cross-document adoption. Rebuild the Rust addon.');\n const adopted: { mapping: [number, number][] } = JSON.parse(target.raw.adopt(group.state.raw, group.locals, true));\n rehome(group.state, target, adopted.mapping, ids);\n refreshChildLists(group.state);\n refreshChildLists(target);\n scheduleCollectionIfDue(group.state);\n }\n return ids.map((id) => id - target.base);\n }\n const result: number[] = [];\n for (const group of this.groups(ids)) {\n if (group.state === target) {\n result.push(...this.call<number[]>(target, 'clone', { ids: group.locals, deep: true }));\n continue;\n }\n if (!target.raw.adopt) throw new Error('The native addon does not support cross-document adoption. Rebuild the Rust addon.');\n invalidate(target);\n const adopted: { roots: number[] } = JSON.parse(target.raw.adopt(group.state.raw, group.locals, false));\n result.push(...adopted.roots);\n }\n return result;\n }\n\n private scratch(command: string, args: any, ids: number[]): any {\n const states = [...new Set(ids.map((id) => this.owner(id)))];\n const scratch = new (requireNative().NativeDocument)('', false, JSON.stringify(args.options ?? this.options));\n const toScratch = new Map<number, number>();\n const fromScratch = new Map<number, number>();\n for (const state of states) {\n const records: NativeNodeRecord[] = JSON.parse(state.raw.exportTree());\n const roots = records.filter((record) => record.parent == null).map((record) => record.id);\n if (!scratch.adopt) throw new Error('The native addon does not support native document copies.');\n const copied: { mapping: [number, number][] } = JSON.parse(scratch.adopt(state.raw, roots, false));\n for (const [local, copy] of copied.mapping) {\n const global = state.base + local;\n toScratch.set(global, copy); fromScratch.set(copy, global);\n }\n }\n const translated = { ...args };\n for (const key of ['ids', 'contexts']) if (Array.isArray(args[key])) translated[key] = args[key].map((id: number) => toScratch.get(id)).filter((id: number | undefined) => id !== undefined);\n if (args.pseudoMatches) translated.pseudoMatches = Object.fromEntries(Object.entries(args.pseudoMatches).map(([key, values]) => [key, (values as number[]).map((id) => toScratch.get(id)).filter((id) => id !== undefined)]));\n const result = rawOperation(scratch, command, { ...translated, options: translated.options ?? this.options });\n return ['select', 'matches', 'uniqueSort'].includes(command) ? (result as number[]).map((id) => fromScratch.get(id)!).filter((id) => id !== undefined) : result;\n }\n\n private isMixed(groups: { state: DocumentState }[]): boolean {\n return groups.length > 1 && groups.some((group) => group.state !== groups[0].state);\n }\n\n select(selector: string, contexts?: number[]): number[] {\n const ids = contexts ?? [this.rootId()];\n if (!ids.length) return this.call(this.state, 'select', { selector, contexts: [] });\n const groups = this.groups(ids);\n if (this.isMixed(groups)) return this.scratch('select', { selector, contexts: ids }, ids);\n const group = groups[0];\n const found = group.state === this.state ? group.state.raw.select(selector, group.locals) : this.call<number[]>(group.state, 'select', { selector, contexts: group.locals });\n return this.globals(group.state, found);\n }\n text(ids: number[]): string { return this.groups(ids).map((group) => group.state.raw.text(group.locals)).join(''); }\n innerHtml(id: number): string {\n const state = this.owner(id);\n const local = id - state.base;\n // Serializing template content splices its fragment into the element.\n const isSplicing = recordAt(state, local)?.children?.some((child) => recordAt(state, child)?.type === 'root') ?? false;\n if (isSplicing) invalidate(state);\n const html = state === this.state ? state.raw.innerHtml(local) : this.call<string>(state, 'html', { ids: [local] });\n if (isSplicing && state.hasChildLists && childRefresher) forEachView(state, childRefresher);\n return html;\n }\n outerHtml(ids: number[]): string { return this.groups(ids).map((group) => group.state === this.state ? group.state.raw.outerHtml(group.locals) : this.call<string>(group.state, 'render', { ids: group.locals })).join(''); }\n attr(id: number, name: string): string | undefined { const state = this.owner(id); return this.call(state, 'attr', { ids: [id - state.base], name }) ?? undefined; }\n tagName(id: number): string | undefined { const state = this.owner(id); return recordAt(state, id - state.base)?.name; }\n exportTree(): string { return JSON.stringify((JSON.parse(this.raw.exportTree()) as NativeNodeRecord[]).map((record) => globalRecord(this.state, record))); }\n create(html: string, contextId?: number): number[] { return this.operate('create', { html, contextId }); }\n\n op(command: string, json: string): string { return JSON.stringify(this.operate(command, JSON.parse(json)) ?? null); }\n\n operate(command: string, args: any): any {\n const options = args.options ?? this.options;\n const hasValue = Object.hasOwn(args, 'value');\n if (command === 'node') { const state = this.owner(args.id); return globalRecord(state, recordAt(state, args.id - state.base)); }\n if (command === 'createNode') return this.state.base + this.call<number>(this.state, command, args);\n if (command === 'import') return this.globals(this.state, this.call(this.state, command, args));\n if (command === 'create') {\n const context = args.contextId == null ? undefined : this.owner(args.contextId);\n const state = context ?? this.state;\n const contextLocal = context ? args.contextId - context.base : undefined;\n if (hasParserHooks(options)) {\n const contextRecord = context ? recordAt(context, contextLocal!) : undefined;\n const children = parsedChildren(args.html, { ...options, ...(contextRecord ? { __contextName: contextRecord.name, __contextNamespace: contextRecord.namespace } : {}) });\n return this.globals(state, this.moveInto(state, children));\n }\n return this.globals(state, this.call(state, command, { ...args, contextId: contextLocal }));\n }\n if (command === 'setNode' || command === 'prop' && hasValue && (args.name === 'children' || args.name === 'childNodes' || pointerFields.has(args.name))) {\n const field = command === 'setNode' ? args.field : args.name;\n let result = null;\n for (const id of command === 'setNode' ? [args.id] : args.ids ?? []) {\n let state = this.owner(id);\n let nodeId = id;\n let value = args.value;\n if (field === 'children' || field === 'childNodes') value = this.moveInto(state, value ?? []);\n else if (pointerFields.has(field) && value != null) {\n const pointer = this.owner(value);\n if (pointer !== state) { const moved = [id]; this.moveInto(pointer, moved); nodeId = moved[0]; state = pointer; }\n value = args.value - pointer.base;\n }\n const local = nodeId - state.base;\n result = this.call(state, command, command === 'setNode' ? { ...args, id: local, value } : { ...args, ids: [local], value });\n }\n return result;\n }\n if (command === 'insert') {\n const targets: number[] = args.targetIds ?? [];\n const nodes: number[] = args.nodeIds ?? [];\n const sameDocument = targets.length > 0 && this.groups([...targets, ...nodes]);\n if (sameDocument && sameDocument.length === 1) {\n // One native call clones for every target but the last, as the loop below does per target.\n const { state } = sameDocument[0];\n const inserted = this.call<number[]>(state, command, { ...args, targetIds: targets.map((id) => id - state.base), nodeIds: nodes.map((id) => id - state.base) });\n return this.globals(state, inserted);\n }\n const result: number[] = [];\n for (let index = 0; index < targets.length; index++) {\n const target = this.owner(targets[index]);\n const targetLocal = targets[index] - target.base;\n const local = this.moveInto(target, nodes, index + 1 < targets.length);\n const inserted = this.call<number[]>(target, command, { ...args, targetIds: [targetLocal], nodeIds: local });\n result.push(...this.globals(target, inserted));\n }\n return result;\n }\n if (command === 'html' && hasValue && hasParserHooks(options)) {\n let result = null;\n for (const id of args.ids ?? []) {\n const state = this.owner(id);\n const local = id - state.base;\n const record = recordAt(state, local);\n if (!record || !parentTypes.has(record.type)) continue;\n const children = parsedChildren(String(args.value), { ...options, __contextName: record.name, __contextNamespace: record.namespace });\n result = this.call(state, 'setNode', { id: local, field: 'children', value: this.moveInto(state, children), options });\n }\n return result;\n }\n if (command === 'contains') {\n const container = args.container ?? args.parent;\n const contained = args.contained ?? args.child;\n const parent = this.owner(container);\n const isSameDocument = contained >= parent.base && contained < parent.base + STRIDE;\n return isSameDocument && this.call(parent, command, { container: container - parent.base, contained: contained - parent.base });\n }\n const ids: number[] = command === 'select' ? args.contexts ?? [this.rootId()] : args.ids ?? [];\n const groups = this.groups(ids);\n if (this.isMixed(groups) && scratchCommands.has(command)) return this.scratch(command, { ...args, options }, ids) ?? null;\n if (command === 'extractPlan') { const group = groups[0]; return this.call(group?.state ?? this.state, command, { ...args, options, ids: group?.locals ?? [] }) ?? null; }\n if (idResultCommands.has(command)) {\n const isSelect = command === 'select';\n if (!groups.length && (isSelect || command === 'matches')) return this.call(this.state, command, { ...args, options, ids: [], ...(isSelect ? { contexts: [] } : {}) });\n const result: number[] = [];\n for (const group of groups) {\n const pseudoMatches = args.pseudoMatches ? Object.fromEntries(Object.entries(args.pseudoMatches as Record<string, number[]>).map(([key, values]) => [key, values.filter((id) => id >= group.state.base && id < group.state.base + STRIDE).map((id) => id - group.state.base)])) : undefined;\n const values = this.call<number[]>(group.state, command, { ...args, options, ids: group.locals, ...(isSelect ? { contexts: group.locals } : {}), ...(pseudoMatches ? { pseudoMatches } : {}) });\n result.push(...this.globals(group.state, values));\n }\n return result;\n }\n if (command === 'render' && !hasValue) {\n const optionsJson = JSON.stringify(options);\n return groups.map((group) => group.state.raw.render ? group.state.raw.render(group.locals, optionsJson) : this.call<string>(group.state, command, { ...args, options, ids: group.locals })).join('');\n }\n if ((command === 'outerHtml' || command === 'text') && !hasValue) return groups.map((group) => this.call<string>(group.state, command, { ...args, options, ids: group.locals })).join('');\n if (command === 'hasClass') return groups.some((group) => this.call<boolean>(group.state, command, { ...args, options, ids: group.locals }));\n if (command === 'serializeArray' || command === 'serialize') return groups.length ? this.call(groups[0].state, command, { ...args, options, ids: groups[0].locals }) : command === 'serializeArray' ? [] : '';\n if (command === 'html') for (const group of groups) invalidate(group.state);\n const isWrite = hasValue || writeCommands.has(command);\n let result = null;\n for (const group of isWrite ? groups : groups.slice(0, 1)) result = this.call(group.state, command, { ...args, options, ids: group.locals });\n return result ?? null;\n }\n}\n\n/** Parses `html` into a document of its own, whose children the caller then moves. */\nfunction parsedChildren(html: string, options: CheerioOptions): number[] {\n const parsed = parseNativeDocument(html, options, false) as RoutedDocument;\n exposeState(parsed.state);\n return (parsed.operate('node', { id: parsed.rootId() }) as NativeNodeRecord).children;\n}\n\nfunction dataEntry(state: DocumentState, id: number): DataEntry {\n const local = id - state.base;\n let entry = state.data.get(local);\n if (!entry) state.data.set(local, entry = { state, local });\n return entry;\n}\n\n/**\n * Moves the bookkeeping of adopted nodes to their new arena. Live owners'\n * id lists, node objects and data follow the nodes; `ids` is updated too.\n */\nfunction rehome(source: DocumentState, target: DocumentState, mapping: [number, number][], ids: number[]): void {\n registry.writes++;\n invalidate(source); invalidate(target);\n // Owners of the moved ids, including selections of the source's API, now hold ids of the target.\n exposeState(target);\n const moved = new Map<number, number>();\n for (const [oldLocal, newLocal] of mapping) {\n moved.set(source.base + oldLocal, target.base + newLocal);\n const node = uncacheView(source, oldLocal) as Record<symbol, unknown> | undefined;\n if (node) {\n node[VIEW_STATE] = target; node[VIEW_LOCAL] = newLocal; cacheView(target, newLocal, node);\n if (node[VIEW_CHILD_TARGET]) target.hasChildLists = true;\n }\n const entry = source.data.get(oldLocal);\n if (entry) { source.data.delete(oldLocal); entry.state = target; entry.local = newLocal; target.data.set(newLocal, entry); }\n const adapterNode = source.adapterNodes?.[oldLocal] as Record<symbol, unknown> | undefined;\n if (adapterNode) {\n source.adapterNodes![oldLocal] = undefined;\n (target.adapterNodes ??= [])[newLocal] = adapterNode;\n adapterNode[VIEW_STATE] = target; adapterNode[VIEW_LOCAL] = newLocal;\n }\n }\n const rewrite = (list: number[]): boolean => {\n let isTouched = false;\n for (let index = 0; index < list.length; index++) {\n const next = moved.get(list[index]);\n if (next !== undefined) { list[index] = next; isTouched = true; }\n }\n return isTouched;\n };\n // Leases first: `ids` may be a lease's own list, which must still hold the\n // moved ids for the lease to be found.\n for (const lease of [...source.leases]) {\n if (!rewrite(lease.ids)) continue;\n target.leases.add(lease);\n if (!lease.states.includes(target)) lease.states.push(target);\n if (!lease.ids.some((id) => id >= source.base && id < source.base + STRIDE)) {\n source.leases.delete(lease);\n lease.states = lease.states.filter((state) => state !== source);\n }\n }\n rewrite(ids);\n}\n\n/** Keeps attribute objects that callers hold in step with native writes. */\nfunction refreshWrittenAttributes(state: DocumentState, command: string, args: any): void {\n if (!hasViews(state)) return;\n let locals: number[] | undefined;\n if (targetedAttributeWrites.has(command)) locals = args.ids ?? [];\n else if (command === 'setNode') { if (!attributeFields.has(args.field)) return; locals = [args.id]; }\n else if (structuralWrites.has(command)) return;\n const refresh = (view: object | undefined): void => { if (view && (view as Record<symbol, unknown>)[VIEW_ATTRIBUTES]) attributeRefresher?.(view); };\n if (locals) for (const local of locals) refresh(cachedView(state, local));\n else forEachView(state, refresh);\n}\n\nlet attributeRefresher: ((view: object) => void) | undefined;\nlet childRefresher: ((view: object) => void) | undefined;\n\n/** Registers how node objects re-read their attributes and children after a native write. */\nexport function onViewRefresh(attributes: (view: object) => void, children: (view: object) => void): void {\n attributeRefresher = attributes;\n childRefresher = children;\n}\n\n/** Refills the child arrays of parents whose children a native write changed. */\nfunction refreshChildLists(state: DocumentState): void {\n if (!state.hasChildLists || !childRefresher) return;\n const touched = state.raw.takeTouched?.();\n if (touched === undefined) return;\n if (touched === null) { forEachView(state, childRefresher); return; }\n for (const local of touched) { const view = cachedView(state, local); if (view) childRefresher(view); }\n}\n\nexport function routeDocument(document: NativeDocument, options: CheerioOptions = {}): NativeDocument {\n return document.nodeSpace === registry.space ? document : new RoutedDocument(document, options);\n}\n\n/** The unanchored routed document node objects of `state` use. */\nexport function routedFor(state: DocumentState): RoutedDocument {\n return state.routed ??= new RoutedDocument(state.raw, state.options);\n}\n\nexport function sameNodeSpace(first: NativeDocument, second: NativeDocument): boolean {\n return first === second || !!first.nodeSpace && first.nodeSpace === second.nodeSpace;\n}\n\n/** Whether ids of `state` belong to this copy of the package; nodes of another copy are foreign objects here. */\nexport function isLocalState(state: DocumentState): boolean {\n return state.space === registry.space;\n}\n\n/** Whether `document` routes ids through this registry. */\nexport function isRouted(document: NativeDocument): boolean {\n return document.nodeSpace === registry.space;\n}\n","import type { NativeDocument, NativeNodeRecord } from './native.js';\nimport type { NodeSnapshot } from './snapshot.js';\nimport type { AnyNode } from './types.js';\nimport { nodePrototype } from './dom.js';\nimport { cachedView, cacheView, exposeTo, isLocalState, isRouted, onViewRefresh, plainSnapshot, recordAt, routedFor, stateIn, VIEW_ATTRIBUTES, VIEW_CHILD_TARGET, VIEW_LOCAL, VIEW_SELF, VIEW_STATE, type DocumentState } from './router.js';\n\nexport interface NodeBinding { document: NativeDocument; id: number }\n\n/** A node object: its fields read the native record for the node's current location. */\ninterface View { [VIEW_STATE]: DocumentState; [VIEW_LOCAL]: number; [VIEW_SELF]: View; [VIEW_ATTRIBUTES]: AttributeView | undefined; [VIEW_CHILDREN]: AnyNode[] | undefined; [VIEW_CHILD_TARGET]: AnyNode[] | undefined; [key: string]: any }\n/** A plain attribute object that mirrors the record; its proxy only intercepts writes. */\n/**\n * The handler of a node's attribute proxy, which also keeps the proxy's plain\n * target and the generation it was copied in, so each attribute object costs\n * one target, one handler and one proxy.\n */\ninterface AttributeView extends ProxyHandler<Record<string, string>> { view: View; proxy: Record<string, string>; target: Record<string, string>; generation: number; state: DocumentState }\n\nconst VIEW_CHILDREN = Symbol.for('rusteerio.node.children');\nconst arrayIndex = /^(?:0|[1-9]\\d*)$/;\nconst emptyRecord = Object.freeze({ id: -1, type: 'released', children: [] }) as unknown as NativeNodeRecord;\n\nexport function operation<T = any>(document: NativeDocument, command: string, args: unknown = {}): T {\n const direct = (document as NativeDocument & { operate?(command: string, args: unknown): T }).operate;\n if (direct) return direct.call(document, command, args);\n const value = document.op(command, JSON.stringify(args));\n return (value === undefined || value === '' ? undefined : JSON.parse(value)) as T;\n}\n\n/** The id of a native node object, without allocating a binding. */\nexport function viewId(node: unknown): number | undefined {\n const view = node as View | null | undefined;\n const state = view?.[VIEW_STATE];\n return state !== undefined && view![VIEW_SELF] === view && isLocalState(state) ? state.base + view![VIEW_LOCAL] : undefined;\n}\n\n/** Whether `node` is a node object of a native document, of this or another copy of the package. */\nfunction isNativeNode(node: unknown): boolean {\n const view = node as View | null | undefined;\n return view?.[VIEW_STATE] !== undefined && view[VIEW_SELF] === view;\n}\n\n/** The id of a native node object, made resolvable by `document`'s operations. */\nexport function viewIdIn(document: NativeDocument, node: unknown): number | undefined {\n const id = viewId(node);\n if (id !== undefined) exposeTo(document, (node as View)[VIEW_STATE]);\n return id;\n}\n\nexport function nodeBinding(node: unknown): NodeBinding | undefined {\n const id = node && typeof node === 'object' ? viewId(node) : undefined;\n return id === undefined ? undefined : { document: routedFor((node as View)[VIEW_STATE]), id };\n}\n\nexport function nodeId(node: unknown, document?: NativeDocument): number | undefined {\n const id = node && typeof node === 'object' ? viewId(node) : undefined;\n return id !== undefined && (!document || isRouted(document)) ? id : undefined;\n}\n\n/** Recreate parse5's null-prototype attribute maps and shared start-tag map. */\nexport function hydrateLocation<T>(location: T): T {\n if (!location || typeof location !== 'object') return location;\n const value = location as Record<string, any>;\n if (value.attrs && typeof value.attrs === 'object') Object.setPrototypeOf(value.attrs, null);\n if (value.startTag?.attrs && typeof value.startTag.attrs === 'object') {\n Object.setPrototypeOf(value.startTag.attrs, null);\n if (value.attrs && JSON.stringify(value.attrs) === JSON.stringify(value.startTag.attrs)) value.startTag.attrs = value.attrs;\n }\n return location;\n}\n\n/** The node's record; its links are ids local to the node's document. */\nexport function nodeRecord(document: NativeDocument, id: number): NativeNodeRecord {\n if (!isRouted(document)) return operation(document, 'node', { id });\n const state = stateIn(document, id);\n return recordAt(state, id - state.base) as NativeNodeRecord;\n}\n\nconst isElementType = (type: string | undefined): boolean => type === 'tag' || type === 'script' || type === 'style';\n\n/** Mirrors the native `traverse` operation over cached records; `undefined` defers to it. */\nexport function traverseRecords(document: NativeDocument, ids: number[], kind: string): number[] | undefined {\n if (!isRouted(document)) return undefined;\n const result: number[] = [];\n for (const id of ids) {\n const state = stateIn(document, id);\n const { base } = state;\n const node = recordAt(state, id - base);\n if (!node) continue;\n const isElement = (local: number): boolean => isElementType(recordAt(state, local)?.type);\n if (kind === 'children') {\n for (const child of node.children ?? []) if (isElement(child)) result.push(base + child);\n } else if (kind === 'contents') {\n for (const child of node.children ?? []) result.push(base + child);\n } else if (kind === 'parent') {\n if (node.parent != null && isElement(node.parent)) result.push(base + node.parent);\n } else if (kind === 'parents' || kind === 'ancestors') {\n const seen = new Set<number>();\n for (let parent = node.parent; parent != null && !seen.has(parent);) {\n seen.add(parent);\n const ancestor = recordAt(state, parent);\n if (!ancestor || ancestor.type === 'root') break;\n if (isElementType(ancestor.type)) result.push(base + parent);\n parent = ancestor.parent;\n }\n } else if (kind === 'next' || kind === 'prev' || kind === 'nextAll' || kind === 'prevAll') {\n const isForward = kind === 'next' || kind === 'nextAll';\n const isSingle = kind === 'next' || kind === 'prev';\n const seen = new Set<number>();\n for (let sibling = isForward ? node.next : node.prev; sibling != null && !seen.has(sibling);) {\n seen.add(sibling);\n const record = recordAt(state, sibling);\n if (!record) break;\n if (isElementType(record.type)) {\n result.push(base + sibling);\n if (isSingle) break;\n }\n sibling = isForward ? record.next : record.prev;\n }\n } else if (kind === 'siblings') {\n const parent = node.parent == null ? null : recordAt(state, node.parent);\n const local = id - base;\n for (const other of parent?.children ?? []) if (other !== local && isElement(other)) result.push(base + other);\n } else return undefined;\n }\n return result;\n}\n\n/** The node object for an arena slot, created on first use and then shared. */\nexport function viewAt(state: DocumentState, local: number): AnyNode | undefined {\n const existing = state.views[local] ?? cachedView(state, local);\n if (existing) return existing as AnyNode;\n const parsed = state.adapterNodes?.[local];\n if (parsed) { state.adapterNodes![local] = undefined; return adoptObject(state, local, parsed); }\n const snapshot = plainSnapshot(state, local);\n let constructor: ViewConstructor;\n if (snapshot) constructor = viewConstructor(snapshot.typeOf(local), false);\n else {\n const record = recordAt(state, local);\n if (!record) return undefined;\n constructor = viewConstructor(record.type, record.sourceCodeLocation !== undefined);\n }\n const view = new constructor(state, local);\n cacheView(state, local, view);\n return view as unknown as AnyNode;\n}\n\n/** A document root's node object, built without reading its record: its type is known. */\nexport function rootNode(document: NativeDocument, id: number): AnyNode {\n if (!isRouted(document)) throw new TypeError('Native nodes require a routed document');\n const state = stateIn(document, id);\n const local = id - state.base;\n const existing = cachedView(state, local);\n if (existing) return existing as AnyNode;\n if (state.adapterNodes?.[local] || state.options.sourceCodeLocationInfo) return viewAt(state, local) as AnyNode;\n const view = new (viewConstructor('root', false))(state, local);\n cacheView(state, local, view);\n return view as unknown as AnyNode;\n}\n\n/** Stable DOM node identities; each property reads or updates the Rust arena. */\nexport function getNode(document: NativeDocument, id: number, original?: any): AnyNode {\n if (!isRouted(document)) throw new TypeError('Native nodes require a routed document');\n const state = stateIn(document, id);\n const local = id - state.base;\n if (original === undefined) return viewAt(state, local) as AnyNode;\n return adoptObject(state, local, original);\n}\n\nfunction viewRecord(view: View): NativeNodeRecord {\n const state = view[VIEW_STATE];\n const local = view[VIEW_LOCAL];\n return state.records[local] ?? recordAt(state, local) ?? emptyRecord;\n}\n\nfunction linkedView(view: View, local: number | null | undefined): AnyNode | null {\n return local == null ? null : viewAt(view[VIEW_STATE], local) ?? null;\n}\n\nfunction setField(view: View, field: string, value: unknown): void {\n const state = view[VIEW_STATE];\n operation(routedFor(state), 'setNode', { id: state.base + view[VIEW_LOCAL], field, value });\n}\n\nfunction setPointer(view: View, field: string, value: unknown): void {\n setField(view, field, value == null ? null : importNodes(routedFor(view[VIEW_STATE]), [value])[0]);\n}\n\nfunction attributesOf(view: View): Record<string, string> {\n const state = view[VIEW_STATE];\n let attributes = view[VIEW_ATTRIBUTES];\n if (!attributes) view[VIEW_ATTRIBUTES] = attributes = createAttributes(view, state.options._useHtmlParser2 === false ? null : Object.prototype);\n if (attributes.generation !== state.generation || attributes.state !== state) syncAttributes(view, attributes);\n return attributes.proxy;\n}\n\nfunction createAttributes(view: View, prototype: object | null): AttributeView {\n const target: Record<string, string> = Object.create(prototype);\n // The node lives on the proxy's own handler, so the attribute object stays plain to reflection.\n const handler: AttributeView = Object.create(attributeWrites);\n handler.view = view;\n handler.target = target;\n handler.generation = -1;\n handler.state = view[VIEW_STATE];\n handler.proxy = new Proxy(target, handler);\n return handler;\n}\n\n/** Copies the record's attributes into the plain target, preserving key order. */\nfunction syncAttributes(view: View, attributes: AttributeView): void {\n const { target } = attributes;\n const state = view[VIEW_STATE];\n const local = view[VIEW_LOCAL];\n if (attributes.generation === -1) {\n const snapshot = plainSnapshot(state, local);\n if (snapshot) {\n snapshot.copyAttributes(local, target);\n attributes.generation = state.generation;\n return;\n }\n }\n const values = viewRecord(view).attribs ?? {};\n const keys = Object.keys(target);\n const nextKeys = Object.keys(values);\n let isSameOrder = keys.length === nextKeys.length;\n for (let index = 0; isSameOrder && index < keys.length; index++) isSameOrder = keys[index] === nextKeys[index];\n if (!isSameOrder) for (const key of keys) delete target[key];\n for (const key of nextKeys) {\n if (isSameOrder && target[key] === values[key]) continue;\n if (key === '__proto__') Object.defineProperty(target, key, { value: values[key], writable: true, enumerable: true, configurable: true });\n else target[key] = values[key];\n }\n attributes.generation = view[VIEW_STATE].generation;\n attributes.state = view[VIEW_STATE];\n}\n\n/** Re-reads attributes for a node whose attributes a native command changed. */\nfunction refreshAttributes(view: object): void {\n const attributes = (view as View)[VIEW_ATTRIBUTES];\n if (attributes) syncAttributes(view as View, attributes);\n}\nonViewRefresh(refreshAttributes, fillChildren);\n\n/** Reads go straight to the plain target; writes go to Rust, which then refreshes the target. */\nconst attributeWrites: ProxyHandler<Record<string, string>> = {\n set(this: AttributeView, target, key, value) {\n if (typeof key === 'symbol') return Reflect.set(target, key, value);\n const view = this.view;\n setField(view, 'attribs', { ...viewRecord(view).attribs, [key]: String(value) });\n syncAttributes(view, view[VIEW_ATTRIBUTES]!);\n return true;\n },\n deleteProperty(this: AttributeView, target, key) {\n if (typeof key === 'symbol') return Reflect.deleteProperty(target, key);\n const view = this.view;\n const values = { ...viewRecord(view).attribs };\n delete values[key];\n setField(view, 'attribs', values);\n syncAttributes(view, view[VIEW_ATTRIBUTES]!);\n return true;\n },\n defineProperty(this: AttributeView, target, key, descriptor) {\n if (typeof key === 'symbol') return Reflect.defineProperty(target, key, descriptor);\n const view = this.view;\n setField(view, 'attribs', { ...viewRecord(view).attribs, [key]: String(descriptor.value) });\n syncAttributes(view, view[VIEW_ATTRIBUTES]!);\n return true;\n },\n};\n\n/** Namespace and prefix maps are rare; they read the record on every access. */\nfunction attributeMap(view: View, field: 'attribsNamespace' | 'attribsPrefix'): Record<string, string> {\n const read = (): Record<string, string> => (viewRecord(view) as any)[field] ?? {};\n const target = Object.create(view[VIEW_STATE].options._useHtmlParser2 === false ? null : Object.prototype);\n const viewField = `x-${field}`;\n return new Proxy(target, {\n get(_target, key) {\n if (typeof key === 'symbol') return Reflect.get(target, key);\n const values = read();\n return Object.hasOwn(values, key) ? values[key] : Reflect.get(target, key);\n },\n set(_target, key, value) { setField(view, viewField, { ...read(), [key]: String(value) }); return true; },\n deleteProperty(_target, key) { const values = { ...read() }; delete values[key as string]; setField(view, viewField, values); return true; },\n ownKeys() { return Reflect.ownKeys(read()); },\n has(_target, key) { return Object.hasOwn(read(), key) || key in target; },\n getOwnPropertyDescriptor(_target, key) { const values = read(); return Object.hasOwn(values, key) ? { value: values[key as string], writable: true, enumerable: true, configurable: true } : undefined; },\n defineProperty(_target, key, descriptor) { setField(view, viewField, { ...read(), [key]: String(descriptor.value) }); return true; },\n });\n}\n\n/**\n * A node's children: a real array of node objects, so reads cost what\n * Cheerio's do. Its mutating methods write the whole list to Rust once, and\n * the router refills the array in place whenever Rust reports the parent\n * changed. Assigning an index or `length` directly changes only this array.\n * `constructor` is `Array`, so arrays derived from it are plain.\n */\nclass ChildArray extends Array<AnyNode> {\n readonly #view: View;\n constructor(view: View) {\n super();\n this.#view = view;\n }\n static viewOf(list: unknown): View | undefined {\n return list instanceof ChildArray ? list.#view : undefined;\n }\n}\nObject.defineProperty(ChildArray.prototype, 'constructor', { configurable: true, writable: true, value: Array });\nfor (const method of ['push', 'pop', 'shift', 'unshift', 'splice', 'sort', 'reverse', 'copyWithin', 'fill'] as const) {\n Object.defineProperty(ChildArray.prototype, method, {\n configurable: true, writable: true,\n value(this: ChildArray, ...args: unknown[]) {\n const view = ChildArray.viewOf(this);\n if (!view) return Reflect.apply((Array.prototype as any)[method], this, args);\n const values = Array.from(this);\n const result = Reflect.apply((Array.prototype as any)[method], values, args);\n saveChildren(view, values);\n return result === values ? this : result;\n },\n });\n}\n\nfunction saveChildren(view: View, values: unknown[]): void {\n setField(view, 'children', importNodes(routedFor(view[VIEW_STATE]), values));\n}\n\nfunction childList(view: View): AnyNode[] {\n const existing = view[VIEW_CHILDREN];\n if (existing) return existing;\n const state = view[VIEW_STATE];\n if (!state.hasChildLists) { state.hasChildLists = true; state.raw.takeTouched?.(); }\n const list = new ChildArray(view);\n view[VIEW_CHILD_TARGET] = list;\n view[VIEW_CHILDREN] = list;\n fillChildren(view);\n return list;\n}\n\n/** Rebuilds a materialized child array from the node's current record. */\nfunction fillChildren(view: object): void {\n const target = (view as View)[VIEW_CHILD_TARGET];\n if (!target) return;\n const state = (view as View)[VIEW_STATE];\n const local = (view as View)[VIEW_LOCAL];\n const snapshot = plainSnapshot(state, local);\n if (snapshot && state.stale.size === 0) {\n fillFromSnapshot(state, snapshot, local, target);\n return;\n }\n const locals = viewRecord(view as View).children ?? [];\n target.length = locals.length;\n for (let index = 0; index < locals.length; index++) target[index] = viewAt(state, locals[index])!;\n}\n\n/**\n * The common case of a walk: a node's children read straight from the\n * snapshot arrays and cached strongly, with each type's constructor resolved\n * once per snapshot instead of once per node.\n */\nfunction fillFromSnapshot(state: DocumentState, snapshot: NodeSnapshot, local: number, target: AnyNode[]): void {\n const count = snapshot.childCount(local);\n const first = snapshot.childStart(local);\n const childIds = snapshot.childIds;\n const views = state.views;\n const isStrong = !state.adapterNodes;\n const constructors = snapshotConstructors(snapshot);\n target.length = count;\n for (let index = 0; index < count; index++) {\n const child = childIds[first + index];\n let node = (views[child] ?? (state.weakViews.size ? cachedView(state, child) : undefined)) as AnyNode | undefined;\n if (node === undefined) {\n const constructor = isStrong && child < state.baseline && snapshot.isPlain(child) ? constructors(snapshot.typeReference(child)) : undefined;\n if (constructor) views[child] = node = new constructor(state, child) as unknown as AnyNode;\n else node = viewAt(state, child)!;\n }\n target[index] = node;\n }\n}\n\nfunction snapshotConstructors(snapshot: NodeSnapshot): (reference: number) => ViewConstructor {\n let lookup = snapshot.viewConstructors as ((reference: number) => ViewConstructor) | undefined;\n if (!lookup) {\n const byReference: ViewConstructor[] = [];\n lookup = (reference) => byReference[reference] ??= viewConstructor(snapshot.name(reference), false);\n snapshot.viewConstructors = lookup;\n }\n return lookup;\n}\n\ntype Accessor = { get(this: View): unknown; set(this: View, value: any): void };\nconst recordField = (field: string, fallback?: null): Accessor => ({\n get() { return (viewRecord(this) as any)[field] ?? fallback; },\n set(value) { setField(this, field, value); },\n});\n/** Fields read straight from the snapshot when it holds the node, without building a record. */\nconst snapshotField = (field: 'type' | 'name' | 'data'): Accessor => ({\n get() {\n const state = this[VIEW_STATE];\n const local = this[VIEW_LOCAL];\n const snapshot = plainSnapshot(state, local);\n if (snapshot) return field === 'type' ? snapshot.typeOf(local) : field === 'name' ? snapshot.nameOf(local) : snapshot.dataOf(local);\n return (viewRecord(this) as any)[field];\n },\n set(value) { setField(this, field, value); },\n});\nconst linkOffsets = { parent: 1, prev: 2, next: 3 } as const;\nconst pointerField = (field: 'parent' | 'prev' | 'next'): Accessor => ({\n get() {\n const state = this[VIEW_STATE];\n const local = this[VIEW_LOCAL];\n const snapshot = plainSnapshot(state, local);\n return linkedView(this, snapshot ? snapshot.linkOf(local, linkOffsets[field]) : viewRecord(this)[field]);\n },\n set(value) { setPointer(this, field, value); },\n});\nconst nodeAccessors: Record<string, Accessor> = {\n type: snapshotField('type'),\n parent: pointerField('parent'),\n prev: pointerField('prev'),\n next: pointerField('next'),\n startIndex: recordField('startIndex', null),\n endIndex: recordField('endIndex', null),\n};\n/** Present only on nodes parsed with location info, as in Cheerio. */\nconst locationAccessor: Accessor = { get() { return hydrateLocation(viewRecord(this).sourceCodeLocation); }, set(value) { setField(this, 'sourceCodeLocation', value); } };\nconst childAccessors: Record<string, Accessor> = {\n children: { get() { return childList(this); }, set(value) { setField(this, 'children', importNodes(routedFor(this[VIEW_STATE]), value)); } },\n};\nconst elementAccessors: Record<string, Accessor> = {\n name: snapshotField('name'),\n attribs: { get() { return attributesOf(this); }, set(value) { setField(this, 'attribs', value); } },\n namespace: recordField('namespace'),\n prefix: recordField('prefix'),\n 'x-attribsNamespace': { get() { return viewRecord(this).attribsNamespace !== undefined ? attributeMap(this, 'attribsNamespace') : undefined; }, set(value) { setField(this, 'x-attribsNamespace', value); } },\n 'x-attribsPrefix': { get() { return viewRecord(this).attribsPrefix !== undefined ? attributeMap(this, 'attribsPrefix') : undefined; }, set(value) { setField(this, 'x-attribsPrefix', value); } },\n};\nconst dataAccessors: Record<string, Accessor> = { data: snapshotField('data') };\nconst directiveAccessors: Record<string, Accessor> = { name: recordField('name'), 'x-name': recordField('x-name'), 'x-publicId': recordField('x-publicId'), 'x-systemId': recordField('x-systemId') };\nconst documentAccessors: Record<string, Accessor> = { 'x-mode': recordField('x-mode') };\n\nfunction accessorsFor(type: string): Record<string, Accessor> {\n switch (type) {\n case 'tag': case 'script': case 'style': return { ...nodeAccessors, ...childAccessors, ...elementAccessors };\n case 'root': return { ...nodeAccessors, ...childAccessors, ...documentAccessors };\n case 'cdata': return { ...nodeAccessors, ...childAccessors };\n case 'directive': return { ...nodeAccessors, ...dataAccessors, ...directiveAccessors };\n case 'text': case 'comment': return { ...nodeAccessors, ...dataAccessors };\n default: return { ...nodeAccessors, ...childAccessors, ...dataAccessors, name: recordField('name') };\n }\n}\n\ntype ViewConstructor = new (state: DocumentState, local: number) => View;\nconst viewConstructors = new Map<string, ViewConstructor>();\nconst plainConstructors: Record<string, ViewConstructor | undefined> = Object.create(null);\n\n/** One constructor per node shape so node objects share a hidden class and prototype. */\nfunction viewConstructor(type: string, hasLocation: boolean): ViewConstructor {\n if (!hasLocation) { const plain = plainConstructors[type]; if (plain) return plain; }\n const key = hasLocation ? `${type}:location` : type;\n let constructor = viewConstructors.get(key);\n if (constructor) return constructor;\n const prototype = Object.create(nodePrototype(type));\n const accessors = hasLocation ? { ...accessorsFor(type), sourceCodeLocation: locationAccessor } : accessorsFor(type);\n for (const [field, accessor] of Object.entries(accessors)) Object.defineProperty(prototype, field, { ...accessor, configurable: true, enumerable: false });\n constructor = function (this: View, state: DocumentState, local: number) {\n this[VIEW_STATE] = state;\n this[VIEW_LOCAL] = local;\n this[VIEW_SELF] = this;\n this[VIEW_ATTRIBUTES] = undefined;\n this[VIEW_CHILDREN] = undefined;\n this[VIEW_CHILD_TARGET] = undefined;\n } as unknown as ViewConstructor;\n Object.defineProperty(prototype, inspectSymbol, { configurable: true, writable: true, value: inspectNode });\n constructor.prototype = prototype;\n viewConstructors.set(key, constructor);\n if (!hasLocation) plainConstructors[type] = constructor;\n return constructor;\n}\n\nconst inspectSymbol = Symbol.for('nodejs.util.inspect.custom');\nconst inspectedFields = ['type', 'name', 'data', 'attribs', 'namespace', 'startIndex', 'endIndex'];\n\n/** Console output shows the node's fields instead of its native bookkeeping. */\nfunction inspectNode(this: View, depth: number, options: object, inspect: (value: unknown, options: object) => string): string {\n const fields: Record<string, unknown> = {};\n for (const field of inspectedFields) if (field in this && this[field] != null) fields[field] = field === 'attribs' ? { ...this.attribs } : this[field];\n if ('children' in this) fields.children = `[${this.children.length} nodes]`;\n const name = Object.getPrototypeOf(Object.getPrototypeOf(this))?.constructor?.name ?? 'Node';\n return depth < 0 ? `[${name}]` : `${name} ${inspect(fields, { ...options, depth: 1 })}`;\n}\n\nconst adoptedAliases: PropertyDescriptorMap = {\n parentNode: { configurable: true, enumerable: false, get(this: View) { return this.parent; }, set(this: View, value) { this.parent = value; } },\n previousSibling: { configurable: true, enumerable: false, get(this: View) { return this.prev; }, set(this: View, value) { this.prev = value; } },\n nextSibling: { configurable: true, enumerable: false, get(this: View) { return this.next; }, set(this: View, value) { this.next = value; } },\n nodeType: { configurable: true, enumerable: false, get(this: View) { return ({ root: 9, text: 3, comment: 8, cdata: 4 } as Record<string, number>)[viewRecord(this).type] ?? 1; } },\n cloneNode: { configurable: true, enumerable: false, writable: true, value: cloneNode },\n};\nconst adoptedChildAliases: PropertyDescriptorMap = {\n childNodes: { configurable: true, enumerable: false, get(this: View) { return this.children; }, set(this: View, value) { this.children = value; } },\n firstChild: { configurable: true, enumerable: false, get(this: View) { return this.children[0] ?? null; } },\n lastChild: { configurable: true, enumerable: false, get(this: View) { return this.children[this.children.length - 1] ?? null; } },\n};\nconst adoptedElementAliases: PropertyDescriptorMap = {\n tagName: { configurable: true, enumerable: false, get(this: View) { return this.name; }, set(this: View, value) { this.name = value; } },\n attributes: { configurable: true, enumerable: false, get(this: View) { const attributes = this.attribs; const record = viewRecord(this); return Object.keys(attributes).map((name) => ({ name, value: attributes[name], namespace: record.attribsNamespace?.[name], prefix: record.attribsPrefix?.[name] })); } },\n};\nconst adoptedDataAliases: PropertyDescriptorMap = {\n nodeValue: { configurable: true, enumerable: false, get(this: View) { return this.data; }, set(this: View, value) { this.data = value; } },\n};\nconst adoptedFields = new Map<string, PropertyDescriptorMap>();\nconst optionalAdoptedKeys = ['name', 'data', 'namespace', 'prefix', 'sourceCodeLocation', 'x-name', 'x-publicId', 'x-systemId', 'x-mode', 'x-attribsNamespace', 'x-attribsPrefix'];\nconst optionalAdoptedFields = new Set(optionalAdoptedKeys);\nconst adoptedShapes = new Map<string, PropertyDescriptorMap>();\n\n/**\n * Binds an object created outside the arena (a DOM constructor or a parser\n * hook's node) to its native node, keeping the caller's object identity.\n */\nfunction adoptObject(state: DocumentState, local: number, original: any): AnyNode {\n const record = recordAt(state, local);\n if (!record) return undefined as unknown as AnyNode;\n const view = original as View;\n const attributesPrototype = original.attribs && typeof original.attribs === 'object' ? Object.getPrototypeOf(original.attribs) : undefined;\n view[VIEW_STATE] = state;\n view[VIEW_LOCAL] = local;\n view[VIEW_SELF] = view;\n view[VIEW_ATTRIBUTES] = undefined;\n view[VIEW_CHILDREN] = undefined;\n view[VIEW_CHILD_TARGET] = undefined;\n let fields = adoptedFields.get(record.type);\n if (!fields) {\n fields = {};\n for (const [key, accessor] of Object.entries({ ...accessorsFor(record.type), sourceCodeLocation: locationAccessor })) fields[key] = { ...accessor, configurable: true, enumerable: true };\n adoptedFields.set(record.type, fields);\n }\n // Which optional fields a node has varies; each combination's full descriptor map is built once.\n let shape = record.type;\n for (const key of optionalAdoptedKeys) {\n if (!(key in fields)) continue;\n const field = key === 'x-attribsNamespace' ? 'attribsNamespace' : key === 'x-attribsPrefix' ? 'attribsPrefix' : key;\n shape += (record as any)[field] !== undefined || Object.hasOwn(original, key) ? '1' : '0';\n }\n let descriptors = adoptedShapes.get(shape);\n if (!descriptors) {\n const present: PropertyDescriptorMap = {};\n for (const key in fields) {\n const field = key === 'x-attribsNamespace' ? 'attribsNamespace' : key === 'x-attribsPrefix' ? 'attribsPrefix' : key;\n if (optionalAdoptedFields.has(key) && (record as any)[field] === undefined && !Object.hasOwn(original, key)) continue;\n present[key] = fields[key];\n }\n const isParent = 'children' in present;\n const isData = record.type === 'text' || record.type === 'comment' || record.type === 'directive';\n descriptors = { ...present, ...adoptedAliases, ...(isParent ? adoptedChildAliases : {}), ...(isElementType(record.type) ? adoptedElementAliases : {}), ...(isData ? adoptedDataAliases : {}) };\n adoptedShapes.set(shape, descriptors);\n }\n const isElement = isElementType(record.type);\n try {\n Object.defineProperties(view, descriptors);\n } catch {\n // Foreign user properties may be non-configurable; those keep their values.\n }\n if (isElement && attributesPrototype !== undefined) view[VIEW_ATTRIBUTES] = createAttributes(view, attributesPrototype);\n cacheView(state, local, view);\n return view as unknown as AnyNode;\n}\n\n/**\n * Registers a tree adapter's nodes for the document's slots. Each node can be\n * passed back to the API at once; its fields become live when first returned.\n */\nexport function attachParsedNodes(state: DocumentState, nodes: (object | undefined)[]): void {\n state.adapterNodes = nodes;\n for (let local = 0; local < nodes.length; local++) {\n const node = nodes[local] as View | undefined;\n if (!node) continue;\n node[VIEW_STATE] = state;\n node[VIEW_LOCAL] = local;\n node[VIEW_SELF] = node;\n }\n}\n\n/** Clone through the receiver's current native owner, including borrowed calls. */\nexport function cloneNode<T extends AnyNode>(this: T, recursive = false): T {\n const binding = nodeBinding(this);\n if (!binding) throw new TypeError('cloneNode requires a native DOM node receiver');\n return getNode(binding.document, operation<number[]>(binding.document, 'clone', { ids: [binding.id], deep: recursive })[0]) as T;\n}\n\nfunction childIds(document: NativeDocument, id: number): number[] {\n const state = stateIn(document, id);\n return (recordAt(state, id - state.base)?.children ?? []).map((child) => state.base + child);\n}\n\n/** Import external DOM nodes once and keep their object identities as handles. */\nexport function importNodes(document: NativeDocument, input: unknown): number[] {\n if (input == null || input === false) return [];\n const values: any[] = Array.isArray(input) || (typeof input === 'object' && 'length' in input && !('type' in input)) ? Array.from(input as ArrayLike<any>) : [input];\n const result: number[] = [];\n for (const node of values) {\n if (node == null) continue;\n const existing = node && typeof node === 'object' ? viewIdIn(document, node) : undefined;\n if (existing !== undefined) { result.push(existing); continue; }\n if (typeof node !== 'object' || typeof node.type !== 'string') continue;\n const records: any[] = [];\n const originals = new Map<number, any>();\n const visit = (value: any, parent?: number): number => {\n const id = records.length;\n const record: any = { id, type: value.type, children: [], ...(parent === undefined ? {} : { parent }) };\n records.push(record); originals.set(id, value);\n for (const field of ['name', 'data', 'namespace', 'prefix', 'startIndex', 'endIndex', 'sourceCodeLocation', 'x-name', 'x-publicId', 'x-systemId', 'x-mode']) if (value[field] !== undefined) record[field] = value[field];\n if (value.attribs) record.attribs = { ...value.attribs };\n if (value['x-attribsNamespace']) record.attribsNamespace = { ...value['x-attribsNamespace'] };\n if (value['x-attribsPrefix']) record.attribsPrefix = { ...value['x-attribsPrefix'] };\n record.children = (value.children ?? []).map((child: any) => visit(child, id));\n return id;\n };\n const root = visit(node);\n const imported = operation<number[]>(document, 'import', { nodes: records, roots: [root] });\n if (!imported.length) continue;\n const adopt = (oldId: number, newId: number): void => {\n const source = originals.get(oldId);\n const oldChildren = records[oldId].children;\n const newChildren = childIds(document, newId);\n // A node already belonging to another Rust document must retain its\n // original document handle. Imported clones receive their own handles.\n getNode(document, newId, isNativeNode(source) ? undefined : source);\n for (let i = 0; i < oldChildren.length; i++) if (newChildren[i] !== undefined) adopt(oldChildren[i], newChildren[i]);\n };\n adopt(root, imported[0]);\n result.push(imported[0]);\n }\n return result;\n}\n\nexport const isTag = (node: any): boolean => !!node && isElementType(node.type);\nexport const isDocument = (node: any): boolean => node?.type === 'root';\nexport const hasChildren = (node: any): boolean => !!node && 'children' in node;\n","import { requireNative } from './native.js';\nimport { getNode, importNodes, nodeBinding, operation, cloneNode } from './nodes.js';\nimport { routeDocument } from './router.js';\nimport type * as Shape from './types.js';\n\nexport const ElementType = Object.freeze({ Root: 'root', Text: 'text', Directive: 'directive', Comment: 'comment', Script: 'script', Style: 'style', Tag: 'tag', CDATA: 'cdata', Doctype: 'doctype' } as typeof Shape.ElementType);\n\nfunction initialize<T extends Node>(node: T, type: string, fields: Record<string, unknown>, children: readonly Shape.AnyNode[] = []): T {\n const document = routeDocument(new (requireNative().NativeDocument)('', false));\n const id = operation<number>(document, 'createNode', { type, ...fields });\n if (children.length) operation(document, 'setNode', { id, field: 'children', value: importNodes(document, children) });\n return getNode(document, id, node) as unknown as T;\n}\n\n/** DOM constructors backed by native storage, also shared across ESM/CJS views. */\nexport abstract class Node {\n static [Symbol.hasInstance](value: unknown): boolean {\n const binding = nodeBinding(value);\n if (!binding) return Function.prototype[Symbol.hasInstance].call(this, value);\n const type = (value as Shape.AnyNode).type;\n switch (this.name) {\n case 'Node': return true;\n case 'DataNode': return ['text', 'comment', 'directive'].includes(type);\n case 'NodeWithChildren': return ['root', 'tag', 'script', 'style', 'cdata'].includes(type);\n case 'Element': return ['tag', 'script', 'style'].includes(type);\n case 'Document': return type === 'root';\n case 'CDATA': return type === 'cdata';\n case 'Text': return type === 'text';\n case 'Comment': return type === 'comment';\n case 'ProcessingInstruction': return type === 'directive';\n default: return Function.prototype[Symbol.hasInstance].call(this, value);\n }\n }\n}\nexport interface Node extends Shape.Node {}\nexport abstract class DataNode extends Node {}\nexport interface DataNode extends Shape.DataNode {}\nexport abstract class NodeWithChildren extends Node {}\nexport interface NodeWithChildren extends Shape.NodeWithChildren {}\nexport class Text extends DataNode { declare readonly nodeType: 3; declare type: Shape.Text['type']; constructor(data: string) { super(); return initialize(this, 'text', { data }); } }\nexport interface Text extends Shape.Text {}\nexport class Comment extends DataNode { declare readonly nodeType: 8; declare type: Shape.Comment['type']; constructor(data: string) { super(); return initialize(this, 'comment', { data }); } }\nexport interface Comment extends Shape.Comment {}\nexport class ProcessingInstruction extends DataNode { declare readonly nodeType: 1; declare type: Shape.ProcessingInstruction['type']; constructor(name: string, data: string) { super(); return initialize(this, 'directive', { name, data }); } }\nexport interface ProcessingInstruction extends Shape.ProcessingInstruction {}\nexport class Document extends NodeWithChildren { declare readonly nodeType: 9; declare type: Shape.Document['type']; constructor(children: Shape.ChildNode[]) { super(); return initialize(this, 'root', {}, children); } }\nexport interface Document extends Shape.Document {}\nexport class CDATA extends NodeWithChildren { declare readonly nodeType: 4; declare type: Shape.CDATA['type']; constructor(children: Shape.ChildNode[]) { super(); return initialize(this, 'cdata', {}, children); } }\nexport interface CDATA extends Shape.CDATA {}\nexport class Element extends NodeWithChildren { declare readonly nodeType: 1; declare type: Shape.Element['type']; declare sourceCodeLocation?: Shape.TagSourceCodeLocation | null;\n constructor(name: string, attribs: Record<string, string>, children: Shape.ChildNode[] = [], type?: Shape.Element['type']) {\n super(); return initialize(this, type ?? (name === 'script' || name === 'style' ? name : 'tag'), { name, attribs }, children);\n }\n}\nexport interface Element extends Shape.Element {}\n\n/** @internal */\nexport function nodePrototype(type: string): object {\n return ({ root: Document, text: Text, comment: Comment, directive: ProcessingInstruction, cdata: CDATA, tag: Element, script: Element, style: Element }[type] ?? Node).prototype;\n}\nexport const isTag = (node: Shape.Node): node is Shape.Element => ['tag', 'script', 'style'].includes(node.type);\nexport const isText = (node: Shape.Node): node is Shape.Text => node.type === 'text';\nexport const isComment = (node: Shape.Node): node is Shape.Comment => node.type === 'comment';\nexport const isDirective = (node: Shape.Node): node is Shape.ProcessingInstruction => node.type === 'directive';\nexport const isDocument = (node: Shape.Node): node is Shape.Document => node.type === 'root';\nexport const isCDATA = (node: Shape.Node): node is Shape.CDATA => node.type === 'cdata';\nexport const hasChildren = (node: Shape.Node): node is Shape.NodeWithChildren => 'children' in node;\n\n// DOM aliases live on their class prototypes, as they do in domhandler. Native\n// views intercept the underlying fields; external supplied nodes keep theirs.\nObject.defineProperties(Node.prototype, {\n cloneNode: { configurable: true, writable: true, value: cloneNode },\n parentNode: { configurable: true, get(this: Shape.Node) { return this.parent; }, set(this: Shape.Node, value: Shape.ParentNode | null) { this.parent = value; } },\n previousSibling: { configurable: true, get(this: Shape.Node) { return this.prev; }, set(this: Shape.Node, value: Shape.ChildNode | null) { this.prev = value; } },\n nextSibling: { configurable: true, get(this: Shape.Node) { return this.next; }, set(this: Shape.Node, value: Shape.ChildNode | null) { this.next = value; } },\n nodeType: { configurable: true, get(this: Shape.Node) { return ({ root: 9, text: 3, comment: 8, cdata: 4 } as Record<string, number>)[this.type] ?? 1; } },\n});\nObject.defineProperty(DataNode.prototype, 'nodeValue', { configurable: true, get(this: Shape.DataNode) { return this.data; }, set(this: Shape.DataNode, value: string) { this.data = value; } });\nObject.defineProperties(NodeWithChildren.prototype, {\n childNodes: { configurable: true, get(this: Shape.NodeWithChildren) { return this.children; }, set(this: Shape.NodeWithChildren, value: Shape.ChildNode[]) { this.children = value; } },\n firstChild: { configurable: true, get(this: Shape.NodeWithChildren) { return this.children[0] ?? null; } },\n lastChild: { configurable: true, get(this: Shape.NodeWithChildren) { return this.children[this.children.length - 1] ?? null; } },\n});\nObject.defineProperties(Element.prototype, {\n tagName: { configurable: true, get(this: Shape.Element) { return this.name; }, set(this: Shape.Element, value: string) { this.name = value; } },\n attributes: { configurable: true, get(this: Shape.Element) { return Object.keys(this.attribs).map((name) => ({ name, value: this.attribs[name], namespace: this['x-attribsNamespace']?.[name], prefix: this['x-attribsPrefix']?.[name] })); } },\n});\n","import type { CheerioOptions, ExtractMap } from './types.js';\nimport { types } from 'node:util';\n\nexport interface ExtractPlanEntry {\n key: string;\n selector: string;\n all: boolean;\n value: { kind: 'property'; name: string } | { kind: 'map'; entries: ExtractPlanEntry[] };\n}\n\nexport interface ExtractPlan { version: 1; entries: ExtractPlanEntry[] }\n\n// Properties that can be returned as ordinary values. Properties returning DOM\n// views stay on the regular API so their identities and document leases survive.\nconst scalarProperties = new Set([\n 'textContent', 'innerText', 'innerHTML', 'outerHTML', 'tagName', 'nodeName',\n 'nodeType', 'id', 'class', 'className', 'title', 'href', 'src', 'alt', 'name',\n 'value', 'type', 'checked', 'selected', 'disabled', 'multiple', 'readOnly',\n 'required', 'hidden', 'open', 'autofocus', 'controls', 'loop', 'muted',\n]);\n\nfunction dataValue(object: object, key: string): { value: unknown } | undefined {\n for (let current: object | null = object; current; current = Object.getPrototypeOf(current)) {\n if (types.isProxy(current)) return undefined;\n const descriptor = Object.getOwnPropertyDescriptor(current, key);\n if (descriptor) return 'value' in descriptor ? { value: descriptor.value } : undefined;\n }\n return { value: undefined };\n}\n\n/** Compile pure extraction maps. User callbacks and accessors keep JS semantics. */\nexport function compileExtractPlan(map: ExtractMap, options: CheerioOptions): ExtractPlan | undefined {\n if (options.pseudos || options.treeAdapter || options.Tokenizer || options.xml && typeof options.xml === 'object' && options.xml.Tokenizer) return undefined;\n const ancestors = new Set<object>();\n const compile = (input: unknown): ExtractPlanEntry[] | undefined => {\n if (!input || typeof input !== 'object' || types.isProxy(input) || ancestors.has(input) || ancestors.size >= 64) return undefined;\n for (let current = Object.getPrototypeOf(input); current; current = Object.getPrototypeOf(current)) {\n if (types.isProxy(current)) return undefined;\n }\n ancestors.add(input);\n try {\n const entries: ExtractPlanEntry[] = [];\n for (const key in input) {\n // Cheerio uses an ordinary result object. Its legacy __proto__ setter\n // semantics must execute through the JavaScript path.\n if (key === '__proto__') return undefined;\n const inherited = Object.getOwnPropertyDescriptor(Object.prototype, key);\n if (inherited && (!('value' in inherited) || !inherited.writable)) return undefined;\n const slot = dataValue(input, key);\n if (!slot) return undefined;\n const all = Array.isArray(slot.value);\n if (slot.value && typeof slot.value === 'object' && types.isProxy(slot.value)) return undefined;\n const first = all ? dataValue(slot.value as object, '0') : slot;\n if (!first) return undefined;\n const descriptor = first.value;\n let selector: unknown;\n let value: unknown;\n if (typeof descriptor === 'string') { selector = descriptor; value = 'textContent'; }\n else if (descriptor && typeof descriptor === 'object') {\n if (types.isProxy(descriptor)) return undefined;\n const selectorSlot = dataValue(descriptor, 'selector');\n const valueSlot = dataValue(descriptor, 'value');\n if (!selectorSlot || !valueSlot) return undefined;\n selector = selectorSlot.value;\n value = valueSlot.value ?? 'textContent';\n } else return undefined;\n if (typeof selector !== 'string') return undefined;\n if (typeof value === 'string') {\n if (!scalarProperties.has(value) && !/^(?:data-|aria-).+/.test(value)) return undefined;\n entries.push({ key, selector, all, value: { kind: 'property', name: value } });\n } else {\n const nested = compile(value);\n if (!nested) return undefined;\n entries.push({ key, selector, all, value: { kind: 'map', entries: nested } });\n }\n }\n return entries;\n } finally { ancestors.delete(input); }\n };\n const entries = compile(map);\n return entries && { version: 1, entries };\n}\n\n/** JSON omits undefined fields; restore them recursively without changing order. */\nexport function hydrateExtractResult(result: Record<string, unknown>, entries: ExtractPlanEntry[]): void {\n const values = entries.map((entry) => Object.hasOwn(result, entry.key) ? result[entry.key] : entry.all ? [] : undefined);\n for (const entry of entries) delete result[entry.key];\n for (let index = 0; index < entries.length; index += 1) {\n const entry = entries[index];\n Object.defineProperty(result, entry.key, { value: values[index], enumerable: true, configurable: true, writable: true });\n if (entry.value.kind !== 'map') continue;\n const nested = result[entry.key];\n for (const value of entry.all && Array.isArray(nested) ? nested : [nested]) {\n if (value && typeof value === 'object' && !Array.isArray(value)) hydrateExtractResult(value as Record<string, unknown>, entry.value.entries);\n }\n }\n}\n","import type { AnyNode, CheerioOptions, Element, SerializedField } from './types.js';\nimport type { Cheerio } from './selection.js';\nimport type { NativeDocument } from './native.js';\nimport { getNode, hydrateLocation, importNodes, nodeRecord } from './nodes.js';\nimport { attributeAt, DOCUMENT, plainSnapshot, recordAt, VIEW_LOCAL, VIEW_SELF, VIEW_STATE, type DocumentState } from './router.js';\n\nexport interface StyleProp {\n length: number;\n [key: string]: string | number;\n [index: number]: string;\n}\n\nexport interface AttributeMethods<T = AnyNode> {\n attr<U extends AnyNode>(this: Cheerio<U>, name: string): string | undefined;\n attr<U extends AnyNode>(this: Cheerio<U>): Record<string, string> | undefined;\n attr<U extends AnyNode>(this: Cheerio<U>, name: string, value?: string | null | ((this: Element, index: number, value: string) => string | null)): Cheerio<U>;\n attr<U extends AnyNode>(this: Cheerio<U>, values: Record<string, string | null>): Cheerio<U>;\n prop<U extends AnyNode>(this: Cheerio<U>, name: 'tagName' | 'nodeName'): string | undefined;\n prop<U extends AnyNode>(this: Cheerio<U>, name: 'innerHTML' | 'outerHTML' | 'innerText' | 'textContent'): string | null;\n prop<U extends AnyNode>(this: Cheerio<U>, name: 'style'): StyleProp | undefined;\n prop<U extends AnyNode>(this: Cheerio<U>, name: 'href' | 'src'): string | undefined;\n prop<U extends AnyNode, K extends keyof Element>(this: Cheerio<U>, name: K): Element[K];\n prop<U extends AnyNode, K extends keyof Element>(this: Cheerio<U>, name: K, value: Element[K] | ((this: Element, index: number, property: K) => Element[keyof Element])): Cheerio<U>;\n prop<U extends AnyNode>(this: Cheerio<U>, values: Record<string, string | Element[keyof Element] | boolean>): Cheerio<U>;\n prop<U extends AnyNode>(this: Cheerio<U>, name: string, value: string | boolean | null | ((this: Element, index: number, property: string) => string | boolean)): Cheerio<U>;\n prop<U extends AnyNode>(this: Cheerio<U>, name: string): string;\n data<U extends AnyNode>(this: Cheerio<U>, name: string): unknown;\n data<U extends AnyNode>(this: Cheerio<U>): Record<string, unknown>;\n data<U extends AnyNode>(this: Cheerio<U>, name: string, value: unknown): Cheerio<U>;\n data<U extends AnyNode>(this: Cheerio<U>, values: Record<string, unknown>): Cheerio<U>;\n val<U extends AnyNode>(this: Cheerio<U>): string | string[] | undefined;\n val<U extends AnyNode>(this: Cheerio<U>, value: string | string[]): Cheerio<U>;\n removeAttr<U extends AnyNode>(this: Cheerio<U>, name: string): Cheerio<U>;\n hasClass<U extends AnyNode>(this: Cheerio<U>, name: string): boolean;\n addClass<U extends AnyNode, R extends ArrayLike<U>>(this: R, name?: string | ((this: Element, index: number, current: string) => string | undefined)): R;\n removeClass<U extends AnyNode, R extends ArrayLike<U>>(this: R, name?: string | ((this: Element, index: number, current: string) => string | undefined)): R;\n toggleClass<U extends AnyNode, R extends ArrayLike<U>>(this: R, name?: string | ((this: Element, index: number, current: string, state?: boolean) => string), state?: boolean): R;\n css<U extends AnyNode>(this: Cheerio<U>, names?: string[]): Record<string, string> | undefined;\n css<U extends AnyNode>(this: Cheerio<U>, name: string): string | undefined;\n css<U extends AnyNode>(this: Cheerio<U>, name: string, value: string | ((this: Element, index: number, current: string) => string | undefined)): Cheerio<U>;\n css<U extends AnyNode>(this: Cheerio<U>, values: Record<string, string>): Cheerio<U>;\n serializeArray<U extends AnyNode>(this: Cheerio<U>): SerializedField[];\n serialize<U extends AnyNode>(this: Cheerio<U>): string;\n}\n\ntype Selection = Cheerio<AnyNode>;\ntype DataRecord = Record<string, unknown>;\ntype DataDocument = NativeDocument & {\n retainNodeData?: (id: number, data: DataRecord) => void;\n nodeData?: (id: number) => DataRecord | undefined;\n nodeDataOperation?: (id: number) => (command: string, args: unknown) => unknown;\n};\n\nconst elementTypes = new Set(['tag', 'script', 'style']);\n/** Boolean attributes read as their name in HTML, matched case-insensitively as Cheerio does. */\nconst booleanAttribute = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i;\n\nconst absent = Symbol('absent');\nconst deferred = Symbol('deferred');\n\n/**\n * Reads an attribute of the selection's first node, as Cheerio reads it from\n * `this[0]`, from cached records; `deferred` leaves the read to the native\n * `attr` operation and `absent` means there is no such attribute.\n */\nfunction readAttribute(selection: Selection, name: string): string | typeof absent | typeof deferred {\n const node = selection[0] as unknown as Record<string | symbol, unknown> | null | undefined;\n if (typeof node !== 'object' || node === null) return absent;\n const state = node[VIEW_STATE] as DocumentState | undefined;\n if (state === undefined || node[VIEW_SELF] !== node) return typeof node.type === 'string' ? deferred : absent;\n const local = node[VIEW_LOCAL] as number;\n const snapshot = plainSnapshot(state, local);\n const record = snapshot ? undefined : recordAt(state, local);\n const type = snapshot ? snapshot.typeOf(local) : record?.type;\n if (type === undefined || !elementTypes.has(type)) return absent;\n const value = attributeAt(state, local, name);\n if (value === undefined) {\n // Snapshot attributes are all strings; a record may hold another value, which the native read interprets.\n const attributes = record?.attribs as Record<string, unknown> | undefined;\n if (attributes && Object.hasOwn(attributes, name)) return deferred;\n return name === 'value' ? deferred : absent;\n }\n const options = selection.options ?? {};\n const isXml = options.xmlMode ?? (options.xml === true || (typeof options.xml === 'object' && options.xml !== null));\n return !isXml && booleanAttribute.test(name) ? name : value;\n}\n\n/** Writes one attribute through the routed document's typed path when it has one. */\nfunction setAttribute(selection: Selection, ids: number[], name: string, value: string | null): void {\n const document = selection[DOCUMENT] as NativeDocument & { setAttribute?(ids: number[], name: string, value: string | null): void };\n if (document.setAttribute) document.setAttribute(ids, name, value);\n else selection.op('attr', { ids, name, value });\n}\n\nfunction isElement(selection: Selection, id: number): boolean {\n return ['tag', 'script', 'style'].includes(nodeRecord(selection[DOCUMENT], id)?.type);\n}\n\nfunction nativeValue(value: unknown): unknown {\n const seen = new WeakSet<object>();\n const json = JSON.stringify(value, (_key, value: unknown) => {\n if (typeof value === 'function' || typeof value === 'symbol' || typeof value === 'bigint' || value === undefined) return { __opaqueJavaScriptValue: true };\n if (typeof value === 'number' && !Number.isFinite(value)) return { __nativeNumber: String(value) };\n if (value && typeof value === 'object') {\n if (seen.has(value)) return { __opaqueJavaScriptValue: true };\n seen.add(value);\n }\n return value;\n });\n return json === undefined ? { __opaqueJavaScriptValue: true } : JSON.parse(json);\n}\n\nfunction hydrateValue(value: any): any {\n if (value && typeof value === 'object') {\n if (Object.keys(value).length === 1 && typeof value.__nativeNumber === 'string') return Number(value.__nativeNumber);\n for (const key of Object.keys(value)) value[key] = hydrateValue(value[key]);\n }\n return value;\n}\n\nfunction dataObject(selection: Selection, id: number): Record<string, unknown> {\n // The router stores data per node and carries it along when a node moves\n // between documents, preserving data identities and callback references.\n const document = selection[DOCUMENT] as DataDocument;\n let data = document.nodeData?.(id);\n if (!data) {\n const dispatch = document.nodeDataOperation?.(id) ?? ((command: string, args: unknown) => JSON.parse(document.op(command, JSON.stringify(args))));\n const target: Record<string, unknown> = {};\n data = new Proxy(target, {\n set(object, name, value) {\n Reflect.set(object, name, value);\n if (typeof name === 'string') dispatch('data', { ids: [id], name, value: nativeValue(value) });\n return true;\n },\n defineProperty(object, name, descriptor) {\n Reflect.defineProperty(object, name, descriptor);\n if (typeof name === 'string' && 'value' in descriptor) dispatch('data', { ids: [id], name, value: nativeValue(descriptor.value) });\n return true;\n },\n deleteProperty(object, name) {\n Reflect.deleteProperty(object, name);\n if (typeof name === 'string') dispatch('removeData', { ids: [id], name });\n return true;\n },\n });\n document.retainNodeData?.(id, data);\n }\n const node = getNode(selection[DOCUMENT], id);\n // JS data can contain callbacks, cycles, and object identities. The DOM and\n // parsed data values live in Rust; the node exposes the JS values.\n if (!Object.hasOwn(node, 'data')) {\n const values = data;\n Object.defineProperty(node, 'data', { configurable: true, enumerable: true, get: () => values, set: (value: Record<string, unknown>) => { for (const key of Object.keys(values)) delete values[key]; for (const key of Object.keys(value ?? {})) values[key] = value[key]; } });\n }\n return data;\n}\n\nfunction property(selection: Selection, id: number, name: string, raw = false): any {\n const result = selection.op('prop', { ids: [id], name, ...(raw ? { raw: true } : {}) });\n if (name === 'sourceCodeLocation') return hydrateLocation(result);\n return result?.__nativeNodeProperty ? (getNode(selection[DOCUMENT], id) as any)[result.__nativeNodeProperty] : result === null ? undefined : result;\n}\n\nfunction propertyValue(selection: Selection, name: string, value: any): any {\n if (name === 'children' || name === 'childNodes') return importNodes(selection[DOCUMENT], value);\n if (['parent', 'parentNode', 'prev', 'previousSibling', 'next', 'nextSibling'].includes(name)) return value == null ? null : importNodes(selection[DOCUMENT], [value])[0] ?? null;\n return value;\n}\n\nfunction attr(this: Selection, name?: any, value?: any): any {\n if (typeof name === 'object' || value !== undefined) {\n if (typeof value === 'function') {\n if (typeof name !== 'string') throw new Error('Bad combination of arguments.');\n this.ids.forEach((id, index) => {\n if (!isElement(this, id)) return;\n const node = getNode(this[DOCUMENT], id) as Element;\n const current = node.attribs[name];\n const next = value.call(node, index, current);\n setAttribute(this, [id], name, next === null ? null : String(next));\n });\n } else if (typeof name === 'object') {\n for (const key of Object.keys(name)) setAttribute(this, this.ids, key, name[key] === null ? null : String(name[key]));\n } else {\n setAttribute(this, this.ids, name, value === null ? null : String(value));\n }\n return this;\n }\n if (arguments.length > 1) return this;\n if (typeof name === 'string') {\n const cached = readAttribute(this, name);\n if (cached === absent) return undefined;\n if (cached !== deferred) return cached;\n }\n const result = this.op('attr', { ids: this.ids, ...(typeof name === 'string' ? { name } : {}) });\n if (result === null) return undefined;\n return !name && this.ids.length ? (getNode(this[DOCUMENT], this.ids[0]) as Element).attribs : result;\n}\n\nfunction prop(this: Selection, name: any, value?: any): any {\n if (typeof name === 'string' && value === undefined) return this.ids.length ? property(this, this.ids[0], name) : undefined;\n if (typeof name === 'object' || value !== undefined) {\n if (typeof value === 'function') {\n if (typeof name === 'object') throw new TypeError('Bad combination of arguments.');\n this.ids.forEach((id, index) => {\n if (!isElement(this, id)) return;\n const next = value.call(getNode(this[DOCUMENT], id), index, property(this, id, name, true));\n this.op('prop', { ids: [id], name, value: propertyValue(this, name, next) });\n });\n } else if (typeof name === 'object') {\n for (const key of Object.keys(name)) this.op('prop', { ids: this.ids, name: key, value: propertyValue(this, key, name[key]) });\n } else {\n this.op('prop', { ids: this.ids, name, value: propertyValue(this, name, value) });\n }\n return this;\n }\n return undefined;\n}\n\nfunction data(this: Selection, name?: any, value?: unknown): any {\n const first = this.ids[0];\n if (first === undefined || !isElement(this, first)) return undefined;\n if (name != null && (typeof name === 'object' || value !== undefined)) {\n for (const id of this.ids) {\n if (!isElement(this, id)) continue;\n const record = dataObject(this, id);\n if (typeof name === 'object') for (const key of Object.keys(name)) record[key] = name[key];\n else if (typeof name === 'string') record[name] = value;\n }\n return this;\n }\n const record = dataObject(this, first);\n if (typeof name === 'string' && Object.hasOwn(record, name)) return record[name];\n const found = this.op<{ found: boolean; value?: any }>('data', { ids: [first], ...(name == null ? {} : { name }) });\n if (!found.found) return undefined;\n if (name == null) {\n for (const key of Object.keys(found.value)) if (!Object.hasOwn(record, key)) record[key] = hydrateValue(found.value[key]);\n return record;\n }\n record[name] = hydrateValue(found.value);\n return record[name];\n}\n\nfunction css(this: Selection, name?: any, value?: any): any {\n if (name != null && value != null || typeof name === 'object' && !Array.isArray(name)) {\n if (typeof name === 'object') {\n for (const [propertyIndex, key] of Object.keys(name).entries()) {\n if (typeof name[key] === 'function') {\n for (const id of this.ids) {\n if (!isElement(this, id)) continue;\n const current = this.op('css', { ids: [id], name: key }) ?? undefined;\n const next = name[key].call(getNode(this[DOCUMENT], id), propertyIndex, current);\n this.op('css', { ids: [id], name: key, value: next == null ? null : String(next) });\n }\n } else this.op('css', { ids: this.ids, name: key, value: name[key] == null ? null : String(name[key]) });\n }\n } else if (typeof name === 'string' && typeof value === 'function') {\n this.ids.forEach((id, index) => {\n if (!isElement(this, id)) return;\n const current = this.op('css', { ids: [id], name }) ?? undefined;\n const next = value.call(getNode(this[DOCUMENT], id), index, current);\n this.op('css', { ids: [id], name, value: next == null ? null : String(next) });\n });\n } else if (typeof name === 'string') this.op('css', { ids: this.ids, name, value: value == null ? null : String(value) });\n return this;\n }\n return this.op('css', { ids: this.ids, ...(name === undefined ? {} : { name }) }) ?? undefined;\n}\n\nfunction classMethod(command: 'addClass' | 'removeClass' | 'toggleClass') {\n return function(this: Selection, name?: any, state?: boolean): Selection {\n if (typeof name === 'function') {\n this.ids.forEach((id, index) => {\n if (!isElement(this, id)) return;\n const node = getNode(this[DOCUMENT], id) as Element;\n const next = command === 'toggleClass'\n ? name.call(node, index, node.attribs.class ?? '', state)\n : name.call(node, index, node.attribs.class ?? '');\n if (typeof next === 'string') this.op(command, { ids: [id], name: next, ...(typeof state === 'boolean' ? { state } : {}) });\n });\n } else if (typeof name === 'string' || command === 'removeClass' && arguments.length === 0) {\n this.op(command, { ids: this.ids, ...(typeof name === 'string' ? { name } : { all: true }), ...(typeof state === 'boolean' ? { state } : {}) });\n }\n return this;\n };\n}\n\nexport function installAttributes(CheerioClass: { prototype: object }): void {\n Object.assign(CheerioClass.prototype, {\n attr, prop, data, css,\n removeAttr(this: Selection, name: string) {\n const ids = this.ids;\n for (const single of String(name).split(/\\s+/)) if (single) setAttribute(this, ids, single, null);\n return this;\n },\n hasClass(this: Selection, name: string) { return this.op<boolean>('hasClass', { ids: this.ids, name }); },\n addClass: classMethod('addClass'), removeClass: classMethod('removeClass'), toggleClass: classMethod('toggleClass'),\n val(this: Selection, value?: unknown) {\n if (arguments.length === 0) return this.op('val', { ids: this.ids }) ?? undefined;\n const result = this.op('val', { ids: this.ids, value: value === undefined ? { __undefinedJavaScriptValue: true } : value });\n return result?.chain === false ? result.returnValue : result === false ? undefined : this;\n },\n serializeArray(this: Selection) { return this.op<SerializedField[]>('serializeArray', { ids: this.ids }); },\n serialize(this: Selection) { return this.op<string>('serialize', { ids: this.ids }); },\n });\n}\n","import { requireNative } from './native.js';\nimport { getNode, importNodes, nodeBinding, operation } from './nodes.js';\nimport { routeDocument } from './router.js';\nimport { parseNativeDocument, cleanParserOptions } from './hooks.js';\nimport type { AnyNode, Document, InternalOptions, ParentNode } from './types.js';\n\ntype ParseContent = string | Buffer | Document | AnyNode | AnyNode[];\ntype Parser = (content: string, options: InternalOptions, isDocument: boolean, context: ParentNode | null) => Document;\n\n/** Parse with the Rust HTML5 or HTML/XML engine, preserving fragment context. */\nfunction parseWithNative(content: string, options: InternalOptions, isDocument: boolean, context: ParentNode | null): Document {\n if (!isDocument && context) {\n const document = nodeBinding(context)?.document\n ?? routeDocument(new (requireNative().NativeDocument)('', false, JSON.stringify(cleanParserOptions(options))), options);\n const contextId = importNodes(document, [context])[0];\n const children = operation<number[]>(document, 'create', { html: content, contextId, options });\n const root = operation<number>(document, 'createNode', { type: 'root', options });\n operation(document, 'setNode', { id: root, field: 'children', value: children, options });\n return getNode(document, root) as Document;\n }\n const document = parseNativeDocument(content, options, isDocument);\n return getNode(document, document.rootId()) as Document;\n}\n\n/** The HTML5 adapter uses Rust's HTML5 tree builder. */\nexport function parseWithParse5(content: string, options: InternalOptions, isDocument: boolean, context: ParentNode | null): Document {\n return parseWithNative(content, { ...options, _useHtmlParser2: false, xml: false, xmlMode: false }, isDocument, context);\n}\n\n/** The htmlparser2-compatible adapter uses the Rust HTML/XML tokenizer. */\nexport function parseWithHtmlparser2(content: string, options: InternalOptions): Document {\n return parseWithNative(content, { ...options, _useHtmlParser2: true }, false, null);\n}\n\nexport { parseWithHtmlparser2 as parseDocument };\n\n/** Normalize parser inputs while keeping every DOM operation in the native arena. */\nexport function getParse(parser: Parser) {\n return function parse(content: ParseContent, options: InternalOptions, isDocument: boolean, context: ParentNode | null): Document {\n if (Buffer.isBuffer(content)) content = content.toString();\n if (typeof content === 'string') return parser(content, options, isDocument, context);\n if (!Array.isArray(content) && content.type === 'root' && nodeBinding(content)) return content;\n const document = routeDocument(new (requireNative().NativeDocument)('', false, JSON.stringify(cleanParserOptions(options))), options);\n const ids = importNodes(document, content);\n if (!Array.isArray(content) && content.type === 'root') return getNode(document, ids[0]) as Document;\n operation(document, 'setNode', { id: document.rootId(), field: 'children', value: ids, options });\n return getNode(document, document.rootId()) as Document;\n };\n}\n\nexport const parse = getParse((content, options, isDocument, context) => options._useHtmlParser2\n ? parseWithHtmlparser2(content, options)\n : parseWithParse5(content, options, isDocument, context));\n","import type { NativeDocument } from './native.js';\nimport type { CheerioOptions } from './types.js';\nimport { attributeAt, isRouted, plainSnapshot, recordAt, stateIn, type DocumentState } from './router.js';\nimport { NodeSnapshot } from './snapshot.js';\n\n/**\n * One compound selector: an optional type plus id, class and attribute-presence\n * tests. Lowercased names are kept for documents that lowercase names.\n */\ninterface Compound { tag: string | undefined; lowerTag: string | undefined; ids: string[]; classes: string[]; attributes: string[]; lowerAttributes: string[] }\n\nconst compiled = new Map<string, Compound[] | null>();\nconst compiledLimit = 512;\n\n/**\n * Matches `ids` against selectors simple enough to evaluate on cached records,\n * with the native engine's semantics; `undefined` means the caller must ask\n * the native engine (any other syntax, foreign documents or parser options).\n */\nexport function matchSimpleSelector(document: NativeDocument, ids: readonly number[], selector: string, options: CheerioOptions): number[] | undefined {\n if (!isRouted(document)) return undefined;\n const compounds = compile(selector);\n if (!compounds) return undefined;\n const isXml = isXmlMode(options);\n const isLowerCaseTags = options.lowerCaseTags ?? !isXml;\n const isLowerCaseAttributes = options.lowerCaseAttributeNames ?? !isXml;\n const result: number[] = [];\n for (const id of ids) {\n const state = stateIn(document, id);\n if (!sameMatchOptions(state.options, isXml, isLowerCaseTags, isLowerCaseAttributes)) return undefined;\n const local = id - state.base;\n for (const compound of compounds) {\n if (matchesCompound(state, local, compound, isLowerCaseTags, isLowerCaseAttributes)) { result.push(id); break; }\n }\n }\n return result;\n}\n\n/** Nodes a single `find()` walks in JavaScript before leaving larger subtrees to the native engine. */\nconst walkBudget = 4096;\n/** Documents small enough that walking all of them in JavaScript beats a native call. */\nconst smallDocumentNodes = 512;\n/** Documents small enough that taking a snapshot to walk them still beats a native call. */\nconst tinyDocumentNodes = 64;\n\n/**\n * Selects the descendants of one element, or of the root of a small\n * document, that match a simple selector, in document order, as the native\n * `select` does; `undefined` defers to it.\n */\nexport function selectSimpleWithin(document: NativeDocument, contexts: readonly number[], selector: string, options: CheerioOptions): number[] | undefined {\n if (contexts.length !== 1 || !isRouted(document)) return undefined;\n const compounds = compile(selector);\n if (!compounds) return undefined;\n const isXml = isXmlMode(options);\n const isLowerCaseTags = options.lowerCaseTags ?? !isXml;\n const isLowerCaseAttributes = options.lowerCaseAttributeNames ?? !isXml;\n const state = stateIn(document, contexts[0]);\n if (!sameMatchOptions(state.options, isXml, isLowerCaseTags, isLowerCaseAttributes)) return undefined;\n const context = contexts[0] - state.base;\n const size = Math.max(state.baseline, state.snapshotSize);\n const isDocumentRoot = context === (state.rootLocal ??= state.raw.rootId());\n const contextType = isDocumentRoot ? 'root' : typeAt(state, context);\n // After a write, walking would cost a fresh snapshot; the native engine reads the arena directly.\n // A walk reads every node: worthwhile with a current snapshot, or when a tiny unchanged document needs one.\n const isReadable = state.bulk instanceof NodeSnapshot ? size <= smallDocumentNodes : state.generation === 0 && size <= tinyDocumentNodes;\n const isSmallRoot = contextType === 'root' && isReadable;\n if (!isElementType(contextType) && !isSmallRoot) return undefined;\n const result: number[] = [];\n const stack: number[] = [];\n pushChildren(state, context, stack);\n for (let visited = 0; stack.length; visited++) {\n if (visited === walkBudget) return undefined;\n const local = stack.pop()!;\n const type = typeAt(state, local);\n // Template contents: outside an element's descendants, but selected from the document root.\n if (type === 'root') { if (isSmallRoot) return undefined; continue; }\n if (isElementType(type)) {\n for (const compound of compounds) {\n if (matchesCompound(state, local, compound, isLowerCaseTags, isLowerCaseAttributes)) { result.push(state.base + local); break; }\n }\n }\n pushChildren(state, local, stack);\n }\n return result;\n}\n\nconst isElementType = (type: string | undefined): boolean => type === 'tag' || type === 'script' || type === 'style';\n\nfunction typeAt(state: DocumentState, local: number): string | undefined {\n const snapshot = plainSnapshot(state, local);\n return snapshot ? snapshot.typeOf(local) : recordAt(state, local)?.type;\n}\n\n/** Pushes children last to first, so they pop in document order. */\nfunction pushChildren(state: DocumentState, local: number, stack: number[]): void {\n const snapshot = plainSnapshot(state, local);\n if (snapshot) {\n for (let index = snapshot.childCount(local) - 1; index >= 0; index--) stack.push(snapshot.childAt(local, index));\n return;\n }\n const children = recordAt(state, local)?.children ?? [];\n for (let index = children.length - 1; index >= 0; index--) stack.push(children[index]);\n}\n\nfunction isXmlMode(options: CheerioOptions): boolean {\n return options.xmlMode ?? (options.xml === true || typeof options.xml === 'object' && options.xml !== null);\n}\n\n/** Records were parsed with the document's options; matching must use the same name casing. */\nfunction sameMatchOptions(documentOptions: CheerioOptions, isXml: boolean, isLowerCaseTags: boolean, isLowerCaseAttributes: boolean): boolean {\n const isDocumentXml = isXmlMode(documentOptions);\n return isDocumentXml === isXml\n && (documentOptions.lowerCaseTags ?? !isDocumentXml) === isLowerCaseTags\n && (documentOptions.lowerCaseAttributeNames ?? !isDocumentXml) === isLowerCaseAttributes;\n}\n\nfunction matchesCompound(state: DocumentState, local: number, compound: Compound, isLowerCaseTags: boolean, isLowerCaseAttributes: boolean): boolean {\n const snapshot = plainSnapshot(state, local);\n const record = snapshot ? undefined : recordAt(state, local);\n if (!snapshot && !record) return false;\n if (!isElementType(snapshot ? snapshot.typeOf(local) : record!.type)) return false;\n if (compound.tag !== undefined && (snapshot ? snapshot.nameOf(local) : record!.name) !== (isLowerCaseTags ? compound.lowerTag : compound.tag)) return false;\n for (const id of compound.ids) if (attributeAt(state, local, 'id') !== id) return false;\n if (compound.classes.length) {\n const classes = attributeAt(state, local, 'class');\n if (classes === undefined) return false;\n for (const name of compound.classes) if (!hasClass(classes, name)) return false;\n }\n for (const name of isLowerCaseAttributes ? compound.lowerAttributes : compound.attributes) if (attributeAt(state, local, name) === undefined) return false;\n return true;\n}\n\nconst isAsciiWhitespace = (code: number): boolean => code === 32 || code === 9 || code === 10 || code === 12 || code === 13;\n\n/** Whether `name` is one of the ASCII-whitespace-separated tokens of `classes`. */\nfunction hasClass(classes: string, name: string): boolean {\n for (let start = classes.indexOf(name); start !== -1; start = classes.indexOf(name, start + 1)) {\n const end = start + name.length;\n if ((start === 0 || isAsciiWhitespace(classes.charCodeAt(start - 1))) && (end === classes.length || isAsciiWhitespace(classes.charCodeAt(end)))) return true;\n }\n return false;\n}\n\nfunction asciiLowerCase(value: string): string {\n return /[A-Z]/.test(value) ? value.replace(/[A-Z]/g, (letter) => letter.toLowerCase()) : value;\n}\n\nfunction compile(selector: string): Compound[] | null {\n const cached = compiled.get(selector);\n if (cached !== undefined) return cached;\n const result = parse(selector);\n if (compiled.size >= compiledLimit) compiled.clear();\n compiled.set(selector, result);\n return result;\n}\n\nconst identifierStart = /[A-Za-z_]/;\nconst identifierPart = /[A-Za-z0-9_-]/;\n\n/** Parses the supported subset; anything else (escapes, combinators, pseudos, values) yields `null`. */\nfunction parse(selector: string): Compound[] | null {\n const compounds: Compound[] = [];\n let index = 0;\n const skipSpace = (): void => { while (index < selector.length && isAsciiWhitespace(selector.charCodeAt(index))) index++; };\n const identifier = (): string | null => {\n const start = index;\n if (selector[index] === '-') index++;\n if (!identifierStart.test(selector[index] ?? '')) return null;\n while (index < selector.length && identifierPart.test(selector[index])) index++;\n return selector.slice(start, index);\n };\n for (;;) {\n skipSpace();\n const compound: Compound = { tag: undefined, lowerTag: undefined, ids: [], classes: [], attributes: [], lowerAttributes: [] };\n let hasPart = false;\n if (selector[index] === '*') { index++; hasPart = true; }\n else if (/[A-Za-z]/.test(selector[index] ?? '')) { compound.tag = identifier()!; hasPart = true; }\n for (;;) {\n const character = selector[index];\n if (character === '#' || character === '.') {\n index++;\n const name = identifier();\n if (name === null) return null;\n (character === '#' ? compound.ids : compound.classes).push(name);\n } else if (character === '[') {\n index++;\n skipSpace();\n const name = identifier();\n if (name === null) return null;\n skipSpace();\n if (selector[index] !== ']') return null;\n index++;\n compound.attributes.push(name);\n } else break;\n hasPart = true;\n }\n if (!hasPart) return null;\n compound.lowerTag = compound.tag === undefined ? undefined : asciiLowerCase(compound.tag);\n compound.lowerAttributes = compound.attributes.map(asciiLowerCase);\n compounds.push(compound);\n skipSpace();\n if (index === selector.length) return compounds;\n if (selector[index] !== ',') return null;\n index++;\n }\n}\n","import type { AnyNode, Document, Element, ParentNode, CheerioAPI, CheerioOptions, AcceptedFilters, BasicAcceptedElems, AcceptedElems, ExtractMap, ExtractedMap } from './types.js';\nimport { requireNative, type NativeDocument } from './native.js';\nimport { getNode, importNodes, nodeBinding, nodeId, nodeRecord, operation, isTag, traverseRecords, viewId } from './nodes.js';\nimport { installAttributes, type AttributeMethods } from './attributes.js';\nimport { extract } from './extract.js';\nimport { API, DOCUMENT, exposeDocumentTo, IDS, IS_PLAIN, LEASE, leaseNodes, routeDocument, sameNodeSpace, updateLease, VALUES, type Lease } from './router.js';\nimport { parse } from './parse.js';\nimport { matchSimpleSelector, selectSimpleWithin } from './match.js';\nconst numeric = /^(?:0|[1-9]\\d*)$/;\nconst isMarkup = (value: string) => /<[a-zA-Z!/?]/.test(value);\nfunction* customPseudoArguments(selector: string, name: string): Generator<string | undefined> {\n let attributeDepth = 0;\n let quote = '';\n for (let index = 0; index < selector.length; index++) {\n const character = selector[index];\n if (character === '\\\\') {\n index++;\n continue;\n }\n if (quote) {\n if (character === quote)\n quote = '';\n continue;\n }\n if (character === '\"' || character === \"'\") {\n quote = character;\n continue;\n }\n if (character === '[') {\n attributeDepth++;\n continue;\n }\n if (character === ']') {\n attributeDepth--;\n continue;\n }\n if (attributeDepth || character !== ':' || selector[index - 1] === ':')\n continue;\n const start = index + 1;\n let end = start;\n while (/[\\w-]/.test(selector[end] ?? '') && end < selector.length)\n end++;\n if (selector.slice(start, end).toLowerCase() !== name.toLowerCase())\n continue;\n index = end - 1;\n if (selector[end] !== '(') {\n yield undefined;\n continue;\n }\n const argumentStart = end + 1;\n let depth = 1;\n let argumentQuote = '';\n for (end++; end < selector.length; end++) {\n const next = selector[end];\n if (next === '\\\\') {\n end++;\n continue;\n }\n if (argumentQuote) {\n if (next === argumentQuote)\n argumentQuote = '';\n continue;\n }\n if (next === '\"' || next === \"'\") {\n argumentQuote = next;\n continue;\n }\n if (next === '(')\n depth++;\n else if (next === ')' && --depth === 0)\n break;\n }\n if (depth)\n continue; // The native selector parser reports malformed syntax.\n yield selector.slice(argumentStart, end);\n index = end;\n }\n}\nconst isIndex = (property: string | symbol): boolean => {\n if (typeof property !== 'string') return false;\n const first = property.charCodeAt(0);\n return first >= 48 && first <= 57 && numeric.test(property);\n};\n/** Results up to this size are plain objects holding their nodes, like Cheerio's own selections. */\nconst plainSelectionLimit = 16;\nconst lengthOf = (target: Cheerio<any>): number => target[VALUES]?.length ?? target[IDS].length;\nfunction nodeAt(target: Cheerio<any>, index: number): any {\n if (target[VALUES]) return target[VALUES][index];\n const id = target[IDS][index];\n return id === undefined ? undefined : getNode(target[DOCUMENT], id);\n}\nfunction releaseIds(target: Cheerio<any>): void {\n if (target[LEASE]) updateLease(target[DOCUMENT], target[LEASE], target[VALUES] ? [] : target[IDS]);\n}\nfunction writeIndex(target: Cheerio<any>, index: number, value: any): void {\n if (target[VALUES]) target[VALUES][index] = value;\n else {\n const id = importNodes(target[DOCUMENT], [value])[0];\n if (id === undefined) {\n target[VALUES] = target[IDS].map((existing) => getNode(target[DOCUMENT], existing));\n target[VALUES][index] = value;\n }\n else target[IDS][index] = id;\n }\n releaseIds(target);\n}\n/** Large selections resolve nodes only when an index is read. */\nconst selectionHandler: ProxyHandler<Cheerio<any>> = {\n get: (target, property) => isIndex(property) ? nodeAt(target, Number(property)) : property === 'length' ? lengthOf(target) : Reflect.get(target, property),\n set: (target, property, value) => {\n if (isIndex(property)) { writeIndex(target, Number(property), value); return true; }\n if (property === 'length') {\n if (target[VALUES]) target[VALUES].length = value;\n else target[IDS].length = value;\n releaseIds(target);\n return true;\n }\n return Reflect.set(target, property, value);\n },\n has: (target, property) => isIndex(property) ? Number(property) < lengthOf(target) : property === 'length' || Reflect.has(target, property),\n ownKeys: (target) => [...Array.from({ length: lengthOf(target) }, (_, i) => String(i)), 'length', ...Reflect.ownKeys(target)],\n getOwnPropertyDescriptor: (target, property) => {\n if (isIndex(property) && Number(property) < lengthOf(target))\n return { value: nodeAt(target, Number(property)), writable: true, configurable: true, enumerable: true };\n if (property === 'length') return { value: lengthOf(target), writable: true, configurable: true, enumerable: true };\n return Reflect.getOwnPropertyDescriptor(target, property);\n },\n deleteProperty: (target, property) => {\n if (isIndex(property)) {\n if (target[VALUES])\n delete target[VALUES][Number(property)];\n else\n delete target[IDS][Number(property)];\n releaseIds(target);\n return true;\n }\n return Reflect.deleteProperty(target, property);\n },\n};\n/** An array-like selection of native nodes. */\nexport class Cheerio<T = AnyNode> implements ArrayLike<T>, Iterable<T> {\n [index: number]: T;\n /** @internal */ declare [DOCUMENT]: NativeDocument;\n /** @internal */ declare [API]: CheerioAPI;\n /** @internal */ declare [IDS]: number[];\n /** @internal */ declare [VALUES]: T[] | undefined;\n /** @internal */ declare [LEASE]: Lease | undefined;\n /** @internal Whether the selection holds its items as own index properties, as Cheerio's selections do. */ declare [IS_PLAIN]: boolean;\n /** @internal */ get _document(): NativeDocument { return this[DOCUMENT]; }\n /** @internal */ get _api(): CheerioAPI { return this[API]; }\n /** @internal */ get _ids(): number[] { return this[IDS]; }\n declare length: number;\n declare options: CheerioOptions;\n declare _root: Cheerio<Document> | null;\n declare prevObject: Cheerio<any> | undefined;\n declare cheerio: '[cheerio object]';\n constructor(api: CheerioAPI, document: NativeDocument, ids: number[] = [], root: Cheerio<Document> | null = null, options: CheerioOptions = {}, values?: T[]) {\n this[DOCUMENT] = document;\n this[API] = api;\n this[IDS] = ids;\n this[VALUES] = values;\n this[LEASE] = undefined;\n const count = values ? values.length : ids.length;\n const isPlain = count <= plainSelectionLimit;\n this[IS_PLAIN] = isPlain;\n // Own keys enumerate in Cheerio's order: length, options, _root.\n if (isPlain) this.length = count;\n this.options = options;\n this._root = root;\n if (isPlain) {\n // Each node object keeps its own node alive, so a plain selection needs no lease.\n if (values) for (let index = 0; index < count; index++) this[index] = values[index];\n else for (let index = 0; index < count; index++) this[index] = getNode(document, ids[index]) as T;\n return;\n }\n if (!values) this[LEASE] = leaseNodes(document, this, ids);\n return new Proxy(this, selectionHandler);\n }\n /** @internal Re-reads a plain selection after direct index writes or after its nodes moved documents. */\n _syncIndices(): void {\n const length = this.length;\n const values = this[VALUES];\n const ids = this[IDS];\n let isChanged = (values ?? ids).length !== length;\n for (let index = 0; !isChanged && index < length; index++) isChanged = values ? this[index] !== values[index] : viewId(this[index]) !== ids[index];\n if (!isChanged) return;\n const items: T[] = Array.from({ length }, (_unused, index) => this[index]);\n const isAllNodes = items.every((value: any) => value && typeof value === 'object' && typeof value.type === 'string');\n this[VALUES] = isAllNodes ? undefined : items;\n this[IDS] = isAllNodes ? importNodes(this[DOCUMENT], items) : [];\n }\n /** @internal */ get ids(): number[] {\n if (this[IS_PLAIN]) this._syncIndices();\n return this[VALUES] ? importNodes(this[DOCUMENT], this[VALUES]) : this[IDS];\n }\n /** @internal */ op<R = any>(command: string, args: unknown = {}): R { const values = args as Record<string, unknown>; return operation<R>(this[DOCUMENT], command, { ...values, options: values.options ?? this.options }); }\n /** @internal */ _query(command: 'select' | 'matches', args: {\n selector: string;\n ids?: number[];\n contexts?: number[];\n options?: CheerioOptions;\n }): number[] {\n const pseudos = this.options.pseudos;\n const callbacks = pseudos ? Object.entries(pseudos).filter((entry): entry is [\n string,\n (element: Element, argument?: string | null) => boolean\n ] => typeof entry[1] === 'function') : [];\n if (!callbacks.length) {\n if (command === 'matches' && args.ids) {\n const matched = matchSimpleSelector(this[DOCUMENT], args.ids, args.selector, args.options ?? this.options);\n if (matched) return matched;\n }\n if (command === 'select' && args.contexts) {\n const found = selectSimpleWithin(this[DOCUMENT], args.contexts, args.selector, args.options ?? this.options);\n if (found) return found;\n }\n return command === 'select' && !args.options ? this[DOCUMENT].select(args.selector, args.contexts) : this.op(command, args);\n }\n const pseudoMatches: Record<string, number[]> = {};\n const candidates = [...new Set([...this[DOCUMENT].select('*'), ...(args.ids ?? []), ...(args.contexts ? this[DOCUMENT].select('*', args.contexts) : [])])];\n for (const [name, callback] of callbacks) {\n for (const argument of customPseudoArguments(args.selector, name)) {\n if (argument !== undefined && callback.length < 2)\n throw new Error(`Pseudo-class :${name} doesn't have any arguments`);\n if (argument === undefined && callback.length >= 2)\n throw new Error(`Pseudo-class :${name} requires an argument`);\n pseudoMatches[`${name}(${argument ?? ''})`] = candidates.filter((id) => callback(getNode(this[DOCUMENT], id) as Element, argument ?? null));\n }\n }\n return this.op(command, { ...args, pseudoMatches });\n }\n /** @internal */ _fromIds<R = AnyNode>(ids: number[]): Cheerio<R> {\n const result = new (this[API].fn.constructor as typeof Cheerio)<R>(this[API], this[DOCUMENT], ids, this._root, this.options);\n result.prevObject = this;\n return result;\n }\n /** @internal */ _fromValues<R>(values: R[]): Cheerio<R> {\n const allNodes = values.every((value: any) => value && typeof value === 'object' && typeof value.type === 'string');\n const result = new (this[API].fn.constructor as typeof Cheerio)<R>(this[API], this[DOCUMENT], allNodes ? importNodes(this[DOCUMENT], values) : [], this._root, this.options, allNodes ? undefined : values);\n result.prevObject = this;\n return result;\n }\n _make<R>(value: ArrayLike<R> | R | string, context?: BasicAcceptedElems<AnyNode>): Cheerio<R>;\n _make<R>(value: any, context?: any): Cheerio<R> {\n const result = typeof value === 'string' || value?.cheerio ? this[API](value, context) : this._fromValues<R>(value == null ? [] : typeof value === 'object' && 'length' in value && !value.type ? Array.from(value) : [value]);\n result.prevObject = this;\n return result as Cheerio<R>;\n }\n _parse(content: any, options: CheerioOptions, isDocument: boolean, context: ParentNode | null): Document {\n return parse(content, options, isDocument, context);\n }\n _render(content: any): string { return this[DOCUMENT].outerHtml(importNodes(this[DOCUMENT], content)); }\n /** @internal */ _domIds(content: any, contextId?: number): number[] {\n if (content == null || content === false)\n return [];\n if (typeof content === 'string')\n return this.op('create', { html: content, contextId, options: this.options });\n if (content?.cheerio) {\n if (!content[DOCUMENT] || !sameNodeSpace(this[DOCUMENT], content[DOCUMENT]))\n return importNodes(this[DOCUMENT], content.toArray());\n exposeDocumentTo(this[DOCUMENT], content[DOCUMENT]);\n return content.ids;\n }\n if (typeof content === 'object' && 'length' in content && !content.type)\n return Array.from(content as ArrayLike<any>).flatMap((item) => this._domIds(item, contextId));\n return importNodes(this[DOCUMENT], [content]);\n }\n _makeDomArray<T extends AnyNode>(this: Cheerio<T>, elem?: BasicAcceptedElems<AnyNode> | BasicAcceptedElems<AnyNode>[], clone?: boolean): AnyNode[];\n _makeDomArray(this: Cheerio<any>, content: any, clone: any = false): any {\n const ids = this._domIds(content);\n return (clone ? this.op<number[]>('clone', { ids, deep: true }) : ids).map((id) => getNode(this[DOCUMENT], id));\n }\n find<T extends AnyNode>(this: Cheerio<T>, selectorOrHaystack?: string | Cheerio<Element> | Element): Cheerio<Element>;\n find(this: Cheerio<any>, selector?: any): any {\n if (!selector)\n return this._fromIds([]);\n if (typeof selector === 'string')\n return this._findBySelector(selector, Infinity);\n const ids = importNodes(this[DOCUMENT], selector);\n return this._fromIds(ids.filter((id) => this.ids.some((container) => this.op<boolean>('contains', { container, contained: id }))));\n }\n _findBySelector<T extends AnyNode>(this: Cheerio<T>, selector: string, limit: number): Cheerio<Element>;\n _findBySelector(this: Cheerio<any>, selector: any, limit: any): any {\n const ids = this._query('select', { selector, contexts: this.ids });\n return this._fromIds(Number.isFinite(limit) ? ids.slice(0, limit) : ids);\n }\n /** @internal */ _filterIds(ids: number[], selector?: any): number[] {\n if (!selector)\n return ids;\n if (typeof selector === 'string')\n return this._query('matches', { ids, selector, options: this.options });\n return ids.filter((id, index) => this._predicate(selector, getNode(this[DOCUMENT], id), index));\n }\n /** @internal */ _predicate(selector: any, node: any, index: number): boolean {\n if (typeof selector === 'function')\n return !!selector.call(node, index, node);\n if (typeof selector === 'string')\n return this._query('matches', { ids: importNodes(this[DOCUMENT], [node]), selector, options: this.options }).length > 0;\n if (selector?.cheerio)\n return selector.toArray().includes(node);\n return node === selector;\n }\n /** @internal */ _traverse(kind: string, selector?: any): Cheerio<Element> {\n let ids = traverseRecords(this[DOCUMENT], this.ids, kind) ?? this.op<number[]>('traverse', { ids: this.ids, kind });\n ids = this._filterIds(ids, selector);\n if (this.length > 1 && ids.length > 1) {\n if (kind === 'parents' || kind === 'siblings')\n ids = this.op('uniqueSort', { ids });\n else if (!['next', 'prev', 'contents'].includes(kind))\n ids = [...new Set(ids)];\n if (kind === 'parents')\n ids.reverse();\n }\n return this._fromIds(ids);\n }\n parent<T extends AnyNode>(this: Cheerio<T>, selector?: AcceptedFilters<Element>): Cheerio<Element>;\n parent(this: Cheerio<any>, selector?: any): any { return this._traverse('parent', selector); }\n parents<T extends AnyNode>(this: Cheerio<T>, selector?: AcceptedFilters<Element>): Cheerio<Element>;\n parents(this: Cheerio<any>, selector?: any): any { return this._traverse('parents', selector); }\n next<T extends AnyNode>(this: Cheerio<T>, selector?: AcceptedFilters<Element>): Cheerio<Element>;\n next(this: Cheerio<any>, selector?: any): any { return this._traverse('next', selector); }\n prev<T extends AnyNode>(this: Cheerio<T>, selector?: AcceptedFilters<Element>): Cheerio<Element>;\n prev(this: Cheerio<any>, selector?: any): any { return this._traverse('prev', selector); }\n nextAll<T extends AnyNode>(this: Cheerio<T>, selector?: AcceptedFilters<Element>): Cheerio<Element>;\n nextAll(this: Cheerio<any>, selector?: any): any { return this._traverse('nextAll', selector); }\n prevAll<T extends AnyNode>(this: Cheerio<T>, selector?: AcceptedFilters<Element>): Cheerio<Element>;\n prevAll(this: Cheerio<any>, selector?: any): any { return this._traverse('prevAll', selector); }\n siblings<T extends AnyNode>(this: Cheerio<T>, selector?: AcceptedFilters<Element>): Cheerio<Element>;\n siblings(this: Cheerio<any>, selector?: any): any { return this._traverse('siblings', selector); }\n children<T extends AnyNode>(this: Cheerio<T>, selector?: AcceptedFilters<Element>): Cheerio<Element>;\n children(this: Cheerio<any>, selector?: any): any { return this._traverse('children', selector); }\n contents<T extends AnyNode>(this: Cheerio<T>): Cheerio<AnyNode>;\n contents(this: Cheerio<any>): any { return this._traverse('contents') as any; }\n /** @internal */ _until(kind: string, until?: any, filter?: any): Cheerio<Element> {\n let ids: number[] = [];\n for (const id of this.ids)\n for (const candidate of traverseRecords(this[DOCUMENT], [id], kind) ?? this.op<number[]>('traverse', { ids: [id], kind })) {\n if (until && this._predicate(until, getNode(this[DOCUMENT], candidate), ids.length))\n break;\n ids.push(candidate);\n }\n ids = this._filterIds(ids, filter);\n if (this.length > 1 && ids.length > 1)\n ids = kind === 'parents' ? this.op<number[]>('uniqueSort', { ids }).reverse() : [...new Set(ids)];\n return this._fromIds(ids);\n }\n parentsUntil<T extends AnyNode>(this: Cheerio<T>, selector?: AcceptedFilters<Element> | null, filterSelector?: AcceptedFilters<Element>): Cheerio<Element>;\n parentsUntil(this: Cheerio<any>, until?: any, filter?: any): any { return this._until('parents', until, filter); }\n nextUntil<T extends AnyNode>(this: Cheerio<T>, selector?: AcceptedFilters<Element> | null, filterSelector?: AcceptedFilters<Element>): Cheerio<Element>;\n nextUntil(this: Cheerio<any>, until?: any, filter?: any): any { return this._until('nextAll', until, filter); }\n prevUntil<T extends AnyNode>(this: Cheerio<T>, selector?: AcceptedFilters<Element> | null, filterSelector?: AcceptedFilters<Element>): Cheerio<Element>;\n prevUntil(this: Cheerio<any>, until?: any, filter?: any): any { return this._until('prevAll', until, filter); }\n closest<T extends AnyNode>(this: Cheerio<T>, selector?: AcceptedFilters<Element>): Cheerio<AnyNode>;\n closest(this: Cheerio<any>, selector?: any): any {\n if (!selector)\n return this._fromIds([]);\n const result: number[] = [];\n for (const id of this.ids) {\n const record = nodeRecord(this[DOCUMENT], id);\n const candidates = [...(['tag', 'script', 'style'].includes(record.type) ? [id] : []), ...(traverseRecords(this[DOCUMENT], [id], 'parents') ?? this.op<number[]>('traverse', { ids: [id], kind: 'parents' }))];\n // One native match for all candidates replaces a round trip per ancestor.\n const matched = typeof selector === 'string' ? new Set(this._filterIds(candidates, selector)) : undefined;\n const match = matched ? candidates.find((candidate) => matched.has(candidate)) : candidates.find((candidate) => this._predicate(selector, getNode(this[DOCUMENT], candidate), 0));\n if (match !== undefined && !result.includes(match))\n result.push(match);\n }\n return this._fromIds(result);\n }\n each<T>(this: Cheerio<T>, fn: (this: T, i: number, el: T) => void | boolean): Cheerio<T>;\n each(this: Cheerio<any>, callback: any): any {\n if (this[IS_PLAIN]) {\n const length = this.length;\n for (let i = 0; i < length; i++)\n if (callback.call(this[i], i, this[i]) === false)\n break;\n return this;\n }\n // Reading ids directly avoids a string-keyed proxy trap per index.\n const values = this[VALUES], ids = this[IDS], document = this[DOCUMENT];\n const length = values ? values.length : ids.length;\n for (let i = 0; i < length; i++) {\n const node = values ? values[i] : getNode(document, ids[i]);\n if (callback.call(node, i, node) === false)\n break;\n }\n return this;\n }\n map<T, M>(this: Cheerio<T>, fn: (this: T, i: number, el: T) => M[] | M | null | undefined): Cheerio<M>;\n map<R>(this: Cheerio<any>, callback: any): any {\n const result: R[] = [];\n const items = this._items();\n for (let i = 0; i < items.length; i++) {\n const value = callback.call(items[i], i, items[i]);\n if (value != null)\n result.push(...(Array.isArray(value) ? value : [value]));\n }\n return this._fromValues(result);\n }\n filter<T, S extends T>(this: Cheerio<T>, match: (this: T, index: number, value: T) => value is S): Cheerio<S>;\n filter<T, S extends AcceptedFilters<T>>(this: Cheerio<T>, match: S): Cheerio<S extends string ? Element : T>;\n filter<S extends AcceptedFilters<T>>(this: Cheerio<any>, selector: any): any {\n return (typeof selector === 'string' ? this._fromIds(this._query('matches', { ids: this.ids, selector, options: this.options })) : this._fromValues(this.toArray().filter((node, i) => this._predicate(selector, node, i)))) as any;\n }\n filterArray<T>(nodes: T[], match: AcceptedFilters<T>, xmlMode?: boolean, root?: Document): Element[] | T[];\n filterArray<R>(this: Cheerio<any>, nodes: any, match: any, xmlMode?: any, root?: any): any {\n const matcher: any = match;\n if (typeof match !== 'string')\n return nodes.filter((node: any, index: number) => typeof matcher === 'function' ? matcher.call(node, index, node) : matcher?.cheerio ? matcher.toArray().includes(node) : matcher === node);\n const document = this?.[DOCUMENT] ?? nodeBinding(root)?.document ?? nodeBinding(nodes[0])?.document ?? routeDocument(new (requireNative().NativeDocument)('', false));\n const ids = importNodes(document, nodes);\n const selected = new Set(operation<number[]>(document, 'matches', { ids, selector: match, options: { xmlMode } }));\n return nodes.filter((node: any) => { const id = nodeId(node, document); return id !== undefined && selected.has(id); });\n }\n not<T extends AnyNode>(this: Cheerio<T>, match: AcceptedFilters<T>): Cheerio<T>;\n not(this: Cheerio<any>, selector: any): any {\n if (typeof selector === 'string') {\n const matched = new Set(this._query('matches', { ids: this.ids, selector, options: this.options }));\n return this._fromIds(this.ids.filter((id) => !matched.has(id)));\n }\n return this._fromValues(this.toArray().filter((node, i) => !this._predicate(selector, node, i)));\n }\n is<T>(this: Cheerio<T>, selector?: AcceptedFilters<T>): boolean;\n is(this: Cheerio<any>, selector?: any): any {\n return typeof selector === 'string' ? this._query('matches', { ids: this.ids, selector, options: this.options }).length > 0 : !!selector && this.toArray().some((node, i) => this._predicate(selector, node, i));\n }\n has(this: Cheerio<AnyNode | Element>, selectorOrHaystack: string | Cheerio<Element> | Element): Cheerio<AnyNode | Element>;\n has(this: Cheerio<any>, selector: any): any { return this.filter(((_i: number, node: any) => this._make(node).find(selector).length > 0) as any) as Cheerio<T>; }\n first<T extends AnyNode>(this: Cheerio<T>): Cheerio<T>;\n first(this: Cheerio<any>): any { return this.length > 1 ? this.slice(0, 1) : this; }\n last<T>(this: Cheerio<T>): Cheerio<T>;\n last(this: Cheerio<any>): any { return this.length > 0 ? this.slice(-1) : this; }\n eq<T>(this: Cheerio<T>, i: number): Cheerio<T>;\n eq(this: Cheerio<any>, index: any): any {\n index = +index;\n if (index === 0 && this.length <= 1)\n return this;\n if (index < 0)\n index += this.length;\n const item = this._itemAt(index);\n return this._fromValues(item === undefined ? [] : [item]);\n }\n get<T>(this: Cheerio<T>, i: number): T | undefined;\n get<T>(this: Cheerio<T>): T[];\n get(this: Cheerio<any>, index?: any): any { return index == null ? this.toArray() : this._itemAt(index < 0 ? this.length + index : index); }\n toArray<T>(this: Cheerio<T>): T[];\n toArray(this: Cheerio<any>): any { return this._items(); }\n /** @internal Every item, read without a proxy trap per index. */\n _items(): T[] {\n if (this[IS_PLAIN]) {\n const length = this.length;\n const items: T[] = new Array(length);\n for (let i = 0; i < length; i++) items[i] = this[i];\n return items;\n }\n const values = this[VALUES], ids = this[IDS], document = this[DOCUMENT];\n return values ? values.slice() : ids.map((id) => getNode(document, id) as T);\n }\n /** @internal */ _itemAt(index: number): T | undefined {\n if (this[IS_PLAIN]) return this[index];\n const values = this[VALUES];\n if (values) return values[index];\n const id = this[IDS][index];\n return id === undefined ? undefined : getNode(this[DOCUMENT], id) as T;\n }\n slice<T>(this: Cheerio<T>, start?: number, end?: number): Cheerio<T>;\n slice(this: Cheerio<any>, start?: any, end?: any): any { const ids = this.ids; return this[VALUES] ? this._fromValues(this[VALUES].slice(start, end)) : this._fromIds(ids.slice(start, end)); }\n end<T>(this: Cheerio<T>): Cheerio<AnyNode>;\n end(this: Cheerio<any>): any { return this.prevObject ?? this._make([]); }\n add<S extends AnyNode, T extends AnyNode>(this: Cheerio<T>, other: string | Cheerio<S> | S | S[], context?: Cheerio<S> | string): Cheerio<S | T>;\n add<R extends AnyNode>(this: Cheerio<any>, other: any, context?: any): any {\n const added = this[API](other, context);\n // Ids of another copy of the package belong to its own id space.\n const addedIds = added[DOCUMENT] && sameNodeSpace(this[DOCUMENT], added[DOCUMENT]) ? added.ids : importNodes(this[DOCUMENT], added.toArray());\n return this._fromIds(this.op('uniqueSort', { ids: [...this.ids, ...addedIds] }));\n }\n addBack<T extends AnyNode>(this: Cheerio<T>, selector?: string): Cheerio<AnyNode>;\n addBack(this: Cheerio<any>, selector?: any): any { return this.prevObject ? this.add(selector ? this.prevObject.filter(selector) : this.prevObject) as any : this as any; }\n index<T extends AnyNode>(this: Cheerio<T>, selectorOrNeedle?: string | Cheerio<AnyNode> | AnyNode): number;\n index(this: Cheerio<any>, selector?: any): any { const haystack = selector == null ? this.parent().children() : typeof selector === 'string' ? this[API](selector) : this; const needle = selector == null || typeof selector === 'string' ? this[0] : selector?.cheerio ? selector[0] : selector; return haystack.toArray().indexOf(needle); }\n splice(start: number, deleteCount?: number): any[];\n splice(start: number, deleteCount: number, ...items: any[]): any[];\n splice(...args: any[]): any[] { return Reflect.apply(Array.prototype.splice, this, args); }\n [Symbol.iterator](): Iterator<T>;\n [Symbol.iterator](): IterableIterator<T> { return this._items()[Symbol.iterator](); }\n /** @internal */ _insert(position: string, content: any[]): this {\n const targets = this.ids.filter((id) => ['root', 'tag', 'script', 'style', 'cdata'].includes(nodeRecord(this[DOCUMENT], id).type));\n if (!targets.length)\n return this;\n if (typeof content[0] === 'function')\n return (this as Cheerio<any>).each((index, node: any) => {\n if (!targets.includes(this.ids[index]))\n return;\n if ((position === 'before' || position === 'after') && nodeRecord(this[DOCUMENT], this.ids[index]).parent == null)\n return;\n const value = content[0].call(node, index, this[DOCUMENT].innerHtml(this.ids[index]));\n let nodes = this._domIds(value);\n if (index < this.length - 1)\n nodes = this.op('clone', { ids: nodes, deep: true });\n this.op('insert', { targetIds: [this.ids[index]], nodeIds: nodes, position });\n }) as this;\n let nodes = this._domIds(content);\n if (targets[targets.length - 1] !== this.ids[this.ids.length - 1])\n nodes = this.op('clone', { ids: nodes, deep: true });\n this.op('insert', { targetIds: targets, nodeIds: nodes, position });\n return this;\n }\n append<T extends AnyNode>(this: Cheerio<T>, ...elems: [\n (this: AnyNode, i: number, html: string) => BasicAcceptedElems<AnyNode>\n ] | BasicAcceptedElems<AnyNode>[]): Cheerio<T>;\n append(this: Cheerio<any>, ...content: any[]): any { return this._insert('append', content); }\n prepend<T extends AnyNode>(this: Cheerio<T>, ...elems: [\n (this: AnyNode, i: number, html: string) => BasicAcceptedElems<AnyNode>\n ] | BasicAcceptedElems<AnyNode>[]): Cheerio<T>;\n prepend(this: Cheerio<any>, ...content: any[]): any { return this._insert('prepend', content); }\n before<T extends AnyNode>(this: Cheerio<T>, ...elems: [\n (this: AnyNode, i: number, html: string) => BasicAcceptedElems<AnyNode>\n ] | BasicAcceptedElems<AnyNode>[]): Cheerio<T>;\n before(this: Cheerio<any>, ...content: any[]): any { return this._insert('before', content); }\n after<T extends AnyNode>(this: Cheerio<T>, ...elems: [\n (this: AnyNode, i: number, html: string) => BasicAcceptedElems<AnyNode>\n ] | BasicAcceptedElems<AnyNode>[]): Cheerio<T>;\n after(this: Cheerio<any>, ...content: any[]): any { return this._insert('after', content); }\n appendTo<T extends AnyNode>(this: Cheerio<T>, target: BasicAcceptedElems<AnyNode>): Cheerio<T>;\n appendTo(this: Cheerio<any>, target: any): any { this[API](target).append(this); return this; }\n prependTo<T extends AnyNode>(this: Cheerio<T>, target: BasicAcceptedElems<AnyNode>): Cheerio<T>;\n prependTo(this: Cheerio<any>, target: any): any { this[API](target).prepend(this); return this; }\n /** @internal */ _insertRelative(target: any, position: string): Cheerio<T> {\n const targets = this[API](target).ids;\n (this as Cheerio<any>).remove();\n const inserted: number[] = [];\n for (const id of targets) {\n if (nodeRecord(this[DOCUMENT], id).parent == null)\n continue;\n const clones = this.op<number[]>('clone', { ids: this.ids, deep: true });\n this.op('insert', { targetIds: [id], nodeIds: clones, position });\n inserted.push(...clones);\n }\n return this._fromIds(inserted);\n }\n insertBefore<T extends AnyNode>(this: Cheerio<T>, target: BasicAcceptedElems<AnyNode>): Cheerio<T>;\n insertBefore(this: Cheerio<any>, target: any): any { return this._insertRelative(target, 'before'); }\n insertAfter<T extends AnyNode>(this: Cheerio<T>, target: BasicAcceptedElems<AnyNode>): Cheerio<T>;\n insertAfter(this: Cheerio<any>, target: any): any { return this._insertRelative(target, 'after'); }\n remove<T extends AnyNode>(this: Cheerio<T>, selector?: string): Cheerio<T>;\n remove(this: Cheerio<any>, selector?: any): any { this.op('remove', { ids: selector ? this.filter(selector).ids : this.ids }); return this; }\n replaceWith<T extends AnyNode>(this: Cheerio<T>, content: AcceptedElems<AnyNode>): Cheerio<T>;\n replaceWith(this: Cheerio<any>, content: any): any {\n return this.each((index, node: any) => {\n if (nodeRecord(this[DOCUMENT], this.ids[index]).parent == null)\n return;\n const value = typeof content === 'function' ? content.call(node, index, node) : content;\n this.op('insert', { targetIds: [this.ids[index]], nodeIds: this._domIds(value), position: 'replace' });\n });\n }\n empty<T extends AnyNode>(this: Cheerio<T>): Cheerio<T>;\n empty(this: Cheerio<any>): any {\n for (const id of this.ids)\n this.op('setNode', { id, field: 'children', value: [] });\n return this;\n }\n html<T extends AnyNode>(this: Cheerio<T>): string | null;\n html<T extends AnyNode>(this: Cheerio<T>, str: string | Cheerio<T>): Cheerio<T>;\n html(this: Cheerio<any>, content?: any): any {\n if (content === undefined)\n return this.length && ['root', 'tag', 'script', 'style', 'cdata'].includes(nodeRecord(this[DOCUMENT], this.ids[0]).type) ? this[DOCUMENT].innerHtml(this.ids[0]) : null;\n if (!content?.cheerio) {\n this.op('html', { ids: this.ids, value: String(content) });\n return this;\n }\n for (const id of this.ids) {\n const nodes = content?.cheerio ? importNodes(this[DOCUMENT], content.toArray()) : this._domIds(String(content), id);\n this.op('setNode', { id, field: 'children', value: nodes });\n }\n return this;\n }\n text<T extends AnyNode>(this: Cheerio<T>): string;\n text<T extends AnyNode>(this: Cheerio<T>, str: string | ((this: AnyNode, i: number, text: string) => string)): Cheerio<T>;\n text(this: Cheerio<any>, content?: any): any {\n if (content === undefined)\n return this[DOCUMENT].text(this.ids);\n if (typeof content !== 'function') {\n this.op('text', { ids: this.ids, value: String(content) });\n return this;\n }\n for (let i = 0; i < this.ids.length; i++) {\n const id = this.ids[i];\n const value = typeof content === 'function' ? content.call(getNode(this[DOCUMENT], id), i, this[DOCUMENT].text([id])) : content;\n this.op('text', { ids: [id], value: String(value) });\n }\n return this;\n }\n toString<T extends AnyNode>(this: Cheerio<T>): string;\n toString(this: Cheerio<any>): any { return this[DOCUMENT].outerHtml(this.ids); }\n clone<T extends AnyNode>(this: Cheerio<T>): Cheerio<T>;\n clone(this: Cheerio<any>): any { return this._fromIds(this.op('clone', { ids: this.ids, deep: true })); }\n /** @internal */ _deepest(id: number, tagsOnly = false): number {\n for (;;) {\n const children = this.op<number[]>('traverse', { ids: [id], kind: 'children' });\n const child = tagsOnly ? children.find((candidate) => nodeRecord(this[DOCUMENT], candidate).type === 'tag') : children[0];\n if (child === undefined)\n return id;\n id = child;\n }\n }\n /** @internal */ _wrap(content: any, inner: boolean): this {\n const lastParent = (this as Cheerio<any>).parents().last();\n for (let i = 0; i < this.length; i++) {\n const id = this.ids[i];\n const node = getNode(this[DOCUMENT], id);\n const value = typeof content === 'function' ? content.call(node, i, node) : typeof content === 'string' && !isMarkup(content) ? lastParent.find(content).clone() : content;\n let wrappers = this._domIds(value);\n if (i < this.length - 1)\n wrappers = this.op('clone', { ids: wrappers, deep: true });\n const wrapper = wrappers[0];\n if (wrapper === undefined || !['root', 'tag', 'script', 'style'].includes(nodeRecord(this[DOCUMENT], wrapper).type))\n continue;\n if (inner) {\n if (!['root', 'tag', 'script', 'style', 'cdata'].includes(nodeRecord(this[DOCUMENT], id).type))\n continue;\n const contents = this.op<number[]>('traverse', { ids: [id], kind: 'contents' });\n this.op('setNode', { id: this._deepest(wrapper), field: 'children', value: contents });\n this.op('setNode', { id, field: 'children', value: [wrapper] });\n }\n else if (nodeRecord(this[DOCUMENT], id).parent != null) {\n // A wrapper from another document gets new ids when the insertion moves it here.\n const [inserted = wrapper] = this.op<number[]>('insert', { targetIds: [id], nodeIds: [wrapper], position: 'before' });\n this.op('setNode', { id: this._deepest(inserted), field: 'children', value: [id] });\n }\n }\n return this;\n }\n wrap<T extends AnyNode>(this: Cheerio<T>, wrapper: AcceptedElems<AnyNode>): Cheerio<T>;\n wrap(this: Cheerio<any>, content: any): any { return this._wrap(content, false); }\n wrapInner<T extends AnyNode>(this: Cheerio<T>, wrapper: AcceptedElems<AnyNode>): Cheerio<T>;\n wrapInner(this: Cheerio<any>, content: any): any { return this._wrap(content, true); }\n unwrap<T extends AnyNode>(this: Cheerio<T>, selector?: string): Cheerio<T>;\n unwrap(this: Cheerio<any>, selector?: any): any { this.op('remove', { ids: this.parent(selector).not('body').ids, keepChildren: true }); return this; }\n wrapAll<T extends AnyNode>(this: Cheerio<T>, wrapper: AcceptedElems<T>): Cheerio<T>;\n wrapAll(this: Cheerio<any>, content: any): any {\n if (!this.length)\n return this;\n const first = this[0];\n const wrappers = this._make(typeof content === 'function' ? content.call(first, 0, first) : content).insertBefore(first);\n const root = [...wrappers.ids].reverse().find((id) => nodeRecord(this[DOCUMENT], id).type === 'tag');\n if (root !== undefined)\n this.op('insert', { targetIds: [this._deepest(root, true)], nodeIds: this.ids, position: 'append' });\n return this;\n }\n extract<M extends ExtractMap, T extends AnyNode>(this: Cheerio<T>, map: M): ExtractedMap<M>;\n // A structurally shared object signature breaks recursive enum comparisons\n // across independent DOM declarations; calls retain the precise overload.\n extract<M extends ExtractMap, T extends AnyNode>(this: Cheerio<T>, map: M): Record<string, unknown>;\n extract<M extends ExtractMap>(this: Cheerio<any>, map: any): any { return extract.call(this as any, map) as ExtractedMap<M>; }\n}\nObject.defineProperty(Cheerio.prototype, 'cheerio', { value: '[cheerio object]', writable: true, configurable: true });\nconst inspectCustom = Symbol.for('nodejs.util.inspect.custom');\n// Inspection shows the selection's own string keys, as Cheerio's selections\n// have, without the internals stored under symbols.\nObject.defineProperty(Cheerio.prototype, inspectCustom, {\n configurable: true, writable: true,\n value(this: Cheerio<any>, depth: number, options: { stylize(text: string, style: string): string }, inspect: (value: unknown, options: object) => string): string {\n const prototype = Object.getPrototypeOf(this);\n if (depth < 0) return options.stylize(`[${prototype.constructor.name}]`, 'special');\n const shown: Record<string | symbol, unknown> = Object.create(prototype);\n Object.defineProperty(shown, inspectCustom, { value: undefined });\n for (const key of Object.keys(this)) shown[key] = (this as any)[key];\n return inspect(shown, { ...options, depth });\n },\n});\nexport interface Cheerio<T = AnyNode> extends AttributeMethods<T> {\n}\ninstallAttributes(Cheerio);\n\n/** @internal */\nexport const nativeExtractionMethods = Object.freeze({\n make: Cheerio.prototype._make,\n find: Cheerio.prototype._findBySelector,\n prop: Cheerio.prototype.prop,\n extract: Cheerio.prototype.extract,\n});\n","import { Cheerio, nativeExtractionMethods } from './selection.js';\nimport { types } from 'node:util';\nimport { compileExtractPlan, hydrateExtractResult } from './extract-plan.js';\nimport { writeCount } from './router.js';\nimport type { AnyNode, Element, ExtractMap, ExtractedMap, ExtractDescriptor } from './types.js';\n\nexport interface ExtractMethods<T = AnyNode> {\n extract<M extends ExtractMap>(map: M): ExtractedMap<M>;\n}\n\nfunction plainKeys(map: ExtractMap): string[] | undefined {\n return !types.isProxy(map) && (Object.getPrototypeOf(map) === Object.prototype || Object.getPrototypeOf(map) === null) ? Object.keys(map) : undefined;\n}\nfunction nativePrefix(scope: Cheerio<AnyNode>, map: ExtractMap, keys: string[] | undefined, key: string): { keys: string[]; values: Record<string, unknown> } | undefined {\n if (!keys || scope._make !== nativeExtractionMethods.make || scope._findBySelector !== nativeExtractionMethods.find || scope.prop !== nativeExtractionMethods.prop || scope.extract !== nativeExtractionMethods.extract) return undefined;\n const prefix: ExtractMap = Object.create(null);\n let count = 0;\n let plan: ReturnType<typeof compileExtractPlan>;\n const index = keys.indexOf(key);\n for (let position = index; position < keys.length; position++) {\n const name = keys[position];\n const slot = Object.getOwnPropertyDescriptor(map, name);\n if (!slot || !slot.enumerable || !('value' in slot)) break;\n Object.defineProperty(prefix, name, { value: slot.value, enumerable: true, configurable: true });\n const compiled = compileExtractPlan(prefix, scope.options);\n if (!compiled) { delete prefix[name]; break; }\n plan = compiled; count++;\n }\n // A single scalar entry costs one selector call and one property call; the\n // native plan also avoids constructing an intermediate selection for each.\n if (!plan || !count) return undefined;\n const values = scope.op<Record<string, unknown>>('extractPlan', { ids: scope.ids, plan });\n hydrateExtractResult(values, plan.entries);\n return { keys: Object.keys(prefix), values };\n}\n\n/** Descriptor callbacks stay in JavaScript; matching and properties use Rust. */\nexport function extract<M extends ExtractMap>(this: Cheerio<AnyNode>, map: M): ExtractedMap<M> {\n const result: Record<string, unknown> = {};\n const keys = plainKeys(map);\n const processed = new Set<string>();\n for (const key in map) {\n if (processed.has(key)) continue;\n const prefix = Object.getPrototypeOf(result) === Object.prototype ? nativePrefix(this, map, keys, key) : undefined;\n if (prefix) {\n for (const name of prefix.keys) { Object.defineProperty(result, name, { value: prefix.values[name], enumerable: true, configurable: true, writable: true }); processed.add(name); }\n continue;\n }\n const entry = map[key];\n const all = Array.isArray(entry);\n const descriptor = (all ? entry[0] : entry) as string | ExtractDescriptor;\n const selector = typeof descriptor === 'string' ? descriptor : descriptor.selector;\n const value = typeof descriptor === 'string' ? 'textContent' : descriptor.value ?? 'textContent';\n const selection = this._findBySelector(selector, all ? Infinity : 1);\n const rows = typeof value === 'object' ? nativeRows(this, key, all, selector, value) : undefined;\n const read = (index: number) => {\n if (typeof value === 'function') return value(selection[index] as Element, key, result);\n const scope = this._make === nativeExtractionMethods.make\n ? this._fromIds([selection.ids[index]])\n : this._make(selection[index]);\n if (typeof value === 'string') return scope.prop(value);\n return rows ? completeRow(scope, value, rows, index) : scope.extract(value);\n };\n let extracted: unknown;\n if (all) {\n const values: unknown[] = [];\n for (let index = 0; index < selection.length; index += 1) {\n const value = read(index);\n if (value != null) values.push(...(Array.isArray(value) ? value : [value]));\n }\n extracted = values;\n } else {\n extracted = selection.length ? read(0) : undefined;\n }\n result[key] = extracted;\n }\n return result as ExtractedMap<M>;\n}\n\n/** Fields of each row that the native engine extracts, for every row in one call. */\ninterface NativeRows { keys: Set<string>; rows: Record<string, unknown>[]; writes: number }\n\n/**\n * For a nested map with callbacks, extracts the fields the native engine can\n * for every matched element in one call, instead of one call per element;\n * the remaining fields are then filled in map order, so each callback sees\n * exactly the fields before it, as in Cheerio.\n */\nfunction nativeRows(scope: Cheerio<AnyNode>, key: string, all: boolean, selector: string, map: ExtractMap): NativeRows | undefined {\n const keys = plainKeys(map);\n if (!keys || scope._make !== nativeExtractionMethods.make || scope._findBySelector !== nativeExtractionMethods.find || scope.prop !== nativeExtractionMethods.prop || scope.extract !== nativeExtractionMethods.extract) return undefined;\n const subset: ExtractMap = Object.create(null);\n const nativeKeys = new Set<string>();\n for (const name of keys) {\n const slot = Object.getOwnPropertyDescriptor(map, name);\n if (!slot || !slot.enumerable || !('value' in slot)) continue;\n const single: ExtractMap = Object.create(null);\n Object.defineProperty(single, name, { value: slot.value, enumerable: true, configurable: true });\n if (!compileExtractPlan(single, scope.options)) continue;\n Object.defineProperty(subset, name, { value: slot.value, enumerable: true, configurable: true });\n nativeKeys.add(name);\n }\n if (!nativeKeys.size || nativeKeys.size === keys.length) return undefined;\n const outer: ExtractMap = Object.create(null);\n Object.defineProperty(outer, key, { value: all ? [{ selector, value: subset }] : { selector, value: subset }, enumerable: true, configurable: true });\n const plan = compileExtractPlan(outer, scope.options);\n if (!plan) return undefined;\n const writes = writeCount();\n const values = scope.op<Record<string, unknown>>('extractPlan', { ids: scope.ids, plan });\n hydrateExtractResult(values, plan.entries);\n const extracted = values[key];\n const rows = (all ? extracted : extracted === undefined ? [] : [extracted]) as Record<string, unknown>[];\n return Array.isArray(rows) ? { keys: nativeKeys, rows, writes } : undefined;\n}\n\n/**\n * Builds row `index` of a nested map from its native fields and the scope's\n * JavaScript fields. Native fields extracted before a callback changed any\n * document are extracted again, as extracting row by row would see them.\n */\nfunction completeRow(scope: Cheerio<AnyNode>, map: ExtractMap, rows: NativeRows, index: number): Record<string, unknown> {\n const row: Record<string, unknown> = {};\n const native = rows.rows[index] ?? {};\n for (const name in map) {\n if (rows.keys.has(name) && writeCount() === rows.writes) { row[name] = native[name]; continue; }\n const entry: ExtractMap = Object.create(null);\n Object.defineProperty(entry, name, { value: map[name], enumerable: true, configurable: true });\n fillEntries(scope, entry, row);\n }\n return row;\n}\n\n/** Extracts `map`'s entries into `result`, which callbacks receive as built so far. */\nfunction fillEntries(scope: Cheerio<AnyNode>, map: ExtractMap, result: Record<string, unknown>): void {\n for (const key in map) {\n const entry = map[key];\n const all = Array.isArray(entry);\n const descriptor = (all ? entry[0] : entry) as string | ExtractDescriptor;\n const selector = typeof descriptor === 'string' ? descriptor : descriptor.selector;\n const value = typeof descriptor === 'string' ? 'textContent' : descriptor.value ?? 'textContent';\n const selection = scope._findBySelector(selector, all ? Infinity : 1);\n const read = (index: number) => {\n if (typeof value === 'function') return value(selection[index] as Element, key, result);\n const child = scope._make === nativeExtractionMethods.make ? scope._fromIds([selection.ids[index]]) : scope._make(selection[index]);\n return typeof value === 'string' ? child.prop(value) : child.extract(value);\n };\n if (all) {\n const values: unknown[] = [];\n for (let index = 0; index < selection.length; index += 1) {\n const extracted = read(index);\n if (extracted != null) values.push(...(Array.isArray(extracted) ? extracted : [extracted]));\n }\n result[key] = values;\n } else result[key] = selection.length ? read(0) : undefined;\n }\n}\n\nexport function installExtract(CheerioClass: { prototype: object }): void {\n Object.assign(CheerioClass.prototype, { extract });\n}\n\n/** Async batch fallback preserves callback values/order while yielding between visits. */\nexport async function extractCooperatively<M extends ExtractMap>(selection: Cheerio<AnyNode>, map: M): Promise<{ value: ExtractedMap<M> }> {\n let deadline = performance.now() + 4;\n let visits = 0;\n const checkpoint = async () => {\n if (++visits % 32 || performance.now() < deadline) return;\n await new Promise<void>((resolve) => setImmediate(resolve));\n deadline = performance.now() + 4;\n };\n const walk = async (scope: Cheerio<AnyNode>, descriptors: ExtractMap): Promise<{ value: Record<string, unknown> }> => {\n const result: Record<string, unknown> = {};\n const keys = plainKeys(descriptors);\n const processed = new Set<string>();\n for (const key in descriptors) {\n if (processed.has(key)) continue;\n const prefix = Object.getPrototypeOf(result) === Object.prototype ? nativePrefix(scope, descriptors, keys, key) : undefined;\n if (prefix) {\n for (const name of prefix.keys) { Object.defineProperty(result, name, { value: prefix.values[name], enumerable: true, configurable: true, writable: true }); processed.add(name); }\n continue;\n }\n const entry = descriptors[key];\n const all = Array.isArray(entry);\n const descriptor = (all ? entry[0] : entry) as string | ExtractDescriptor;\n const selector = typeof descriptor === 'string' ? descriptor : descriptor.selector;\n const value = typeof descriptor === 'string' ? 'textContent' : descriptor.value ?? 'textContent';\n const found = scope._findBySelector(selector, all ? Infinity : 1);\n const rows = typeof value === 'object' ? nativeRows(scope, key, all, selector, value) : undefined;\n const output: unknown[] = [];\n let single: unknown;\n const count = all ? found.length : Math.min(found.length, 1);\n for (let index = 0; index < count; index++) {\n await checkpoint();\n // Callback return values, including Promise objects, remain ordinary\n // values just as in synchronous Cheerio.extract().\n let extracted: unknown;\n if (typeof value === 'function') extracted = value(found[index] as Element, key, result);\n else {\n const child = scope._make === nativeExtractionMethods.make\n ? scope._fromIds([found.ids[index]])\n : scope._make(found[index]);\n extracted = typeof value === 'string' ? child.prop(value)\n : rows ? completeRow(child, value, rows, index)\n : child.extract === nativeExtractionMethods.extract ? (await walk(child, value)).value : child.extract(value);\n }\n if (all) { if (extracted != null) output.push(...(Array.isArray(extracted) ? extracted : [extracted])); }\n else single = extracted;\n }\n result[key] = all ? output : single;\n }\n return { value: result };\n };\n return await walk(selection, map) as { value: ExtractedMap<M> };\n}\n","import * as nativeDOM from './dom.js';\nimport { parseNativeDocument, parserOptions, deliverParseErrors, hasParserHooks, cleanParserOptions, createTreeAdapterSession } from './hooks.js';\nimport { compileExtractPlan, hydrateExtractResult } from './extract-plan.js';\nimport { extractCooperatively } from './extract.js';\nimport { setImmediate as yieldToEventLoop } from 'node:timers/promises';\nimport { availableParallelism } from 'node:os';\nimport { requireNative, nativeStatus, type NativeDocument, type NativeQuery } from './native.js';\nimport { Cheerio } from './selection.js';\nimport { getNode, importNodes, nodeBinding, operation, rootNode, viewIdIn } from './nodes.js';\nimport { isHtml } from './utils.js';\nimport { DOCUMENT, exposeDocumentTo, resumeCollection, routeDocument, sameNodeSpace } from './router.js';\nimport type { AnyNode, Document, CheerioAPI, CheerioOptions, LoadContent, ParallelOptions, ExtractMap, ExtractedMap } from './types.js';\n\nexport type * from './types.js';\nexport type { Cheerio } from './selection.js';\nexport { nativeStatus };\nexport const dom = {\n Node: nativeDOM.Node, DataNode: nativeDOM.DataNode, NodeWithChildren: nativeDOM.NodeWithChildren,\n Document: nativeDOM.Document, Element: nativeDOM.Element, Text: nativeDOM.Text,\n Comment: nativeDOM.Comment, ProcessingInstruction: nativeDOM.ProcessingInstruction, CDATA: nativeDOM.CDATA,\n ElementType: nativeDOM.ElementType, isTag: nativeDOM.isTag, isText: nativeDOM.isText,\n isComment: nativeDOM.isComment, isDirective: nativeDOM.isDirective, isDocument: nativeDOM.isDocument,\n isCDATA: nativeDOM.isCDATA, hasChildren: nativeDOM.hasChildren,\n} as const;\nexport { configureWorkers, workerPoolInfo } from './workers.js';\nexport type { WorkerOptions, WorkerPoolInfo } from './workers.js';\nexport { loadBuffer, stringStream, decodeStream, fromURL } from './io.js';\n\nexport function flattenOptions(options?: CheerioOptions | null, base?: CheerioOptions): CheerioOptions {\n const result: CheerioOptions = { _useHtmlParser2: false, ...base, ...options };\n if (options?.xml) { result._useHtmlParser2 = true; result.xmlMode = true; if (options.xml !== true) Object.assign(result, options.xml); }\n else if (options?.xmlMode) result._useHtmlParser2 = true;\n return result;\n}\n\n/** A synchronous, constructable Cheerio factory backed by a mutable Rust DOM. */\nexport function createAPI(document: NativeDocument, options?: CheerioOptions | null, initialRoot = document.rootId()): CheerioAPI {\n const internal = flattenOptions(options);\n class LoadedCheerio<T = AnyNode> extends Cheerio<T> {}\n let api: CheerioAPI;\n const createRoot = (rootIds: number[], opts: CheerioOptions): Cheerio<Document> => {\n const rootInstance = new LoadedCheerio<Document>(api, document, rootIds, null, opts);\n rootInstance._root = rootInstance;\n return rootInstance;\n };\n const initialize = function<T = AnyNode>(selector?: any, context?: any, root?: any, override?: CheerioOptions): Cheerio<T> {\n resumeCollection(document);\n if (selector?.cheerio) { exposeDocumentTo(document, selector[DOCUMENT]); return selector; }\n const opts = flattenOptions(override, internal);\n // Each call gets its own root selection, as in Cheerio: callers may change the one `end()` returns.\n const rootInstance = createRoot(root === undefined ? [initialRoot]\n : typeof root === 'string' ? [makeRoot(document, operation(document, 'create', { html: root, options: opts }))]\n : root?.cheerio ? importNodes(document, root.toArray()) : importNodes(document, root), opts);\n if (!selector) return new LoadedCheerio<T>(api, document, [], rootInstance, opts);\n const id = viewIdIn(document, selector);\n if (id !== undefined) return new LoadedCheerio<T>(api, document, [id], rootInstance, opts);\n if (typeof selector === 'string' && isHtml(selector)) return new LoadedCheerio<T>(api, document, operation(document, 'create', { html: selector, options: opts }), rootInstance, opts);\n if (typeof selector === 'object') {\n const values = 'length' in selector && !selector.type ? Array.from(selector as ArrayLike<T>) : [selector];\n const allNodes = values.every((value: any) => value && typeof value === 'object' && typeof value.type === 'string');\n return new LoadedCheerio<T>(api, document, allNodes ? importNodes(document, values) : [], rootInstance, opts, allNodes ? undefined : values);\n }\n if (typeof selector !== 'string') throw new TypeError('Unexpected type of selector');\n let search = selector;\n let searchContext: Cheerio<any> = rootInstance;\n if (context) {\n if (typeof context === 'string') {\n if (isHtml(context)) searchContext = new LoadedCheerio<Document>(api, document, [makeRoot(document, operation(document, 'create', { html: context, options: opts }))], rootInstance, opts);\n else search = `${context} ${search}`;\n } else if (context.cheerio) searchContext = context;\n else searchContext = new LoadedCheerio(api, document, importNodes(document, context), rootInstance, opts);\n }\n return searchContext.find(search) as unknown as Cheerio<T>;\n };\n // As in Cheerio, static methods are shared by every loaded API and read the document through `this`.\n api = Object.assign(initialize, staticMethods, {\n load,\n _root: rootNode(document, initialRoot),\n _options: internal,\n fn: LoadedCheerio.prototype,\n prototype: LoadedCheerio.prototype,\n }) as unknown as CheerioAPI;\n return api;\n}\n\nconst staticMethods = {\n root(this: CheerioAPI): Cheerio<Document> { return this(this._root) as Cheerio<Document>; },\n html(this: CheerioAPI | undefined, dom?: any, renderOptions?: CheerioOptions): string {\n if (!this) return '';\n if (dom && typeof dom === 'object' && !('length' in dom) && !('type' in dom)) { renderOptions = dom; dom = undefined; }\n const nodes = dom === undefined ? [this._root] : this(dom).toArray();\n const binding = nodeBinding(this._root)!;\n return operation(binding.document, 'render', { ids: importNodes(binding.document, nodes), options: flattenOptions(renderOptions, this._options) });\n },\n xml(this: CheerioAPI, dom?: any): string {\n const binding = nodeBinding(this._root)!;\n return operation(binding.document, 'render', { ids: importNodes(binding.document, dom === undefined ? [this._root] : this(dom).toArray()), options: { ...this._options, xmlMode: true, _useHtmlParser2: true } });\n },\n text(this: CheerioAPI | undefined, elements?: ArrayLike<AnyNode>): string {\n if (!elements && !this) return '';\n const nodes = elements ?? [this!._root];\n const binding = this ? nodeBinding(this._root) : nodeBinding(nodes[0]);\n if (binding) return binding.document.text(importNodes(binding.document, nodes));\n const doc = routeDocument(new (requireNative().NativeDocument)('', false));\n return doc.text(importNodes(doc, nodes));\n },\n parseHTML(this: CheerioAPI, data?: string | null, context?: unknown, keepScripts = typeof context === 'boolean' ? context : false): AnyNode[] | null {\n if (!data || typeof data !== 'string') return null;\n if (typeof context === 'boolean') keepScripts = context;\n const parsed = this.load(data, this._options, false);\n if (!keepScripts) parsed('script').remove();\n return parsed._root.children.slice();\n },\n extract<M extends ExtractMap>(this: CheerioAPI, map: M): ExtractedMap<M> { return this.root().extract(map); },\n contains,\n merge,\n};\n\nfunction makeRoot(document: NativeDocument, children: number[]): number {\n const id = operation<number>(document, 'createNode', { type: 'root' });\n operation(document, 'setNode', { id, field: 'children', value: children });\n return id;\n}\n\nexport function load(content: LoadContent, options?: CheerioOptions | null, isDocument = true): CheerioAPI {\n if (content == null) throw new Error('cheerio.load() expects a string');\n const opts = flattenOptions(options);\n const binding = requireNative();\n const string = Buffer.isBuffer(content) ? content.toString() : typeof content === 'string' ? content : undefined;\n const document = string === undefined ? routeDocument(new binding.NativeDocument('', false, JSON.stringify(cleanParserOptions(opts))), opts) : parseNativeDocument(string, opts, isDocument);\n if (string !== undefined) return createAPI(document, opts);\n const nodes = importNodes(document, content);\n if (!Array.isArray(content) && (content as AnyNode).type === 'root') return createAPI(document, opts, nodes[0]);\n operation(document, 'setNode', { id: document.rootId(), field: 'children', value: nodes });\n return createAPI(routeDocument(document, opts), opts);\n}\n\nexport async function loadAsync(content: LoadContent, options?: CheerioOptions | null, isDocument = true): Promise<CheerioAPI> {\n if (content == null) throw new Error('cheerio.load() expects a string');\n if (typeof content !== 'string' && !Buffer.isBuffer(content)) return load(content, options, isDocument);\n const binding = requireNative();\n const opts = flattenOptions(options);\n const html = String(content);\n // User parser hooks execute on JavaScript, exactly where their callbacks live.\n if (!opts._useHtmlParser2 && opts.treeAdapter) {\n const session = createTreeAdapterSession(opts, isDocument);\n try { await session.write(html); return createAPI(await session.end(), opts); }\n catch (error) { session.abort(); throw error; }\n }\n if (opts._useHtmlParser2 && opts.Tokenizer) return createAPI(parseNativeDocument(html, opts, isDocument), opts);\n const document = binding.parseAsync ? await binding.parseAsync(html, isDocument, JSON.stringify(parserOptions(html, opts))) : new binding.NativeDocument(html, isDocument, JSON.stringify(parserOptions(html, opts)));\n deliverParseErrors(document, opts);\n return createAPI(routeDocument(document, opts), opts);\n}\n\nexport function contains(container: AnyNode, contained: AnyNode): boolean {\n if (!container || !contained || container === contained) return false;\n let parent = nodeBinding(container);\n if (!parent) {\n const document = routeDocument(new (requireNative().NativeDocument)('', false));\n importNodes(document, [container]); parent = nodeBinding(container);\n }\n const child = nodeBinding(contained);\n return !!parent && !!child && sameNodeSpace(child.document, parent.document) && operation(parent.document, 'contains', { container: parent.id, contained: child.id });\n}\n\nexport function merge<T>(first: ArrayLike<T>, second: ArrayLike<T>): ArrayLike<T> | undefined {\n const arrayLike = (value: any): boolean => Array.isArray(value) || value && typeof value === 'object' && typeof value.length === 'number' && value.length >= 0 && Array.from({ length: value.length }, (_unused, i) => i in value).every(Boolean);\n if (!arrayLike(first) || !arrayLike(second)) return undefined;\n const writable = first as { [key: number]: T; length: number };\n let length = first.length;\n for (let i = 0, count = +second.length; i < count; i++) writable[length++] = second[i];\n writable.length = length;\n return writable;\n}\n\nfunction parallelOptions(options?: ParallelOptions | null): { options: CheerioOptions; threads: number } {\n const { threads = Math.min(availableParallelism(), 256), ...opts } = options ?? {};\n if (!Number.isSafeInteger(threads) || threads < 1 || threads > 256) throw new RangeError('threads must be an integer from 1 to 256');\n return { options: flattenOptions(opts), threads };\n}\n\nexport async function loadAll(content: readonly string[], options?: ParallelOptions | null, isDocument = true): Promise<CheerioAPI[]> {\n const { options: opts, threads } = parallelOptions(options);\n if (!Array.isArray(content) || content.some((item) => typeof item !== 'string')) throw new TypeError('loadAll expects an array of HTML strings');\n if (!content.length) return [];\n const binding = requireNative();\n if (!binding.parseManyAsync || hasParserHooks(opts)) return Promise.all(content.map((html) => loadAsync(html, opts, isDocument)));\n const documents = await binding.parseManyAsync([...content], isDocument, threads, JSON.stringify(opts));\n return documents.map((document) => createAPI(routeDocument(document, opts), opts));\n}\n\nfunction nativeQueries(map: ExtractMap, options: CheerioOptions): NativeQuery[] | undefined {\n const queries: NativeQuery[] = [];\n const plainProperties = /^(?:id|class|title|href|src|alt|name|data-.+|aria-.+)$/;\n for (const key in map) {\n const entry = map[key]; const all = Array.isArray(entry); const descriptor = all ? entry[0] : entry;\n const selector = typeof descriptor === 'string' ? descriptor : descriptor.selector;\n const value = typeof descriptor === 'string' ? 'textContent' : descriptor.value ?? 'textContent';\n if (typeof value !== 'string' || value !== 'textContent' && !plainProperties.test(value) || options.baseURI && (value === 'href' || value === 'src') || options.pseudos) return undefined;\n queries.push({ key, selector, all, ...(value === 'textContent' ? {} : { attr: value }) });\n }\n return queries;\n}\n\nexport async function extractAll<M extends ExtractMap>(content: readonly string[], map: M, options?: ParallelOptions | null): Promise<ExtractedMap<M>[]> {\n const { options: opts, threads } = parallelOptions(options);\n if (!Array.isArray(content) || content.some((item) => typeof item !== 'string')) throw new TypeError('extractAll expects an array of HTML strings');\n if (!content.length) return [];\n const binding = requireNative();\n const plan = hasParserHooks(opts) ? undefined : compileExtractPlan(map, opts);\n if (binding.extractPlanManyAsync && plan) {\n const results: Record<string, unknown>[] = JSON.parse(await binding.extractPlanManyAsync([...content], JSON.stringify(plan), threads, JSON.stringify(opts)));\n for (const result of results) hydrateExtractResult(result, plan.entries);\n return results as ExtractedMap<M>[];\n }\n const queries = binding.extractPlanManyAsync || hasParserHooks(opts) ? undefined : nativeQueries(map, opts);\n if (binding.extractManyAsync && queries) {\n const results: Record<string, unknown>[] = JSON.parse(await binding.extractManyAsync([...content], queries, threads, true, JSON.stringify(opts)));\n for (const result of results) for (const query of queries) {\n if (!Object.hasOwn(result, query.key)) Object.defineProperty(result, query.key, { value: query.all ? [] : undefined, configurable: true, writable: true, enumerable: true });\n if (query.all && Array.isArray(result[query.key])) result[query.key] = (result[query.key] as unknown[]).filter((value) => value != null);\n }\n return results as ExtractedMap<M>[];\n }\n const documents = await loadAll(content, { ...opts, threads });\n const results: ExtractedMap<M>[] = [];\n let yieldedAt = performance.now();\n for (const document of documents) {\n results.push((await extractCooperatively(document.root(), map)).value);\n if (performance.now() - yieldedAt >= 4) { await yieldToEventLoop(); yieldedAt = performance.now(); }\n }\n return results;\n}\n","import { requireNative, type NativeWorkerPoolInfo } from './native.js';\n\nexport interface WorkerOptions { threads: number }\nexport type WorkerPoolInfo = NativeWorkerPoolInfo;\n\n/** Set the process-wide native CPU-worker budget before starting async work. */\nexport function configureWorkers(options: WorkerOptions | number): WorkerPoolInfo {\n const threads = typeof options === 'number' ? options : options?.threads;\n if (!Number.isSafeInteger(threads) || threads < 1 || threads > 256) throw new RangeError('threads must be an integer from 1 to 256');\n const binding = requireNative();\n if (!binding.configureWorkerPool || !binding.workerPoolInfo) throw new Error('This native build does not support a shared worker pool');\n binding.configureWorkerPool(threads);\n return binding.workerPoolInfo();\n}\n\n/** Observe the configured budget and actual concurrent native CPU work. */\nexport function workerPoolInfo(): WorkerPoolInfo {\n const binding = requireNative();\n if (!binding.workerPoolInfo) throw new Error('This native build does not support worker pool diagnostics');\n return binding.workerPoolInfo();\n}\n","import { Readable, Writable } from 'node:stream';\nimport { request as requestHTTP } from 'node:http';\nimport { request as requestHTTPS } from 'node:https';\nimport { stringify as stringifyQuery } from 'node:querystring';\nimport type { EventEmitter } from 'node:events';\nimport { MIMEType } from 'node:util';\nimport { createAPI, flattenOptions, load } from './index.js';\nimport { requireNative, type NativeStream } from './native.js';\nimport { createDiagnosticSession, createTokenizerSession, createTreeAdapterSession, deliverParseErrors, parserOptions } from './hooks.js';\nimport { routeDocument } from './router.js';\nimport type { CheerioAPI, CheerioOptions, CheerioRequestOptions, DecodeStreamOptions, EncodingOptions } from './types.js';\n\nexport type LoadCallback = (error: Error | null | undefined, document: CheerioAPI) => void;\n\nfunction encodingLabel(label: string | null | undefined): string | undefined {\n if (!label) return undefined;\n if (label.trim().toLowerCase() === 'x-user-defined') return 'x-user-defined';\n try { return new TextDecoder(label.trim()).encoding; } catch { return undefined; }\n}\n\n/** WHATWG decoding with BOM, transport headers, and the HTML meta prescan. */\nfunction sniffEncoding(buffer: Uint8Array, options: EncodingOptions = {}): string {\n let label: string | undefined;\n if (buffer[0] === 0xef && buffer[1] === 0xbb && buffer[2] === 0xbf) label = 'utf-8';\n else if (buffer[0] === 0xff && buffer[1] === 0xfe) label = 'utf-16le';\n else if (buffer[0] === 0xfe && buffer[1] === 0xff) label = 'utf-16be';\n label ??= encodingLabel((options as EncodingOptions & { userEncoding?: string }).userEncoding);\n label ??= encodingLabel(options.transportLayerEncodingLabel);\n if (!label && buffer[0] === 0 && buffer[1] === 0x3c && buffer[2] === 0 && buffer[3] === 0x3f && buffer[4] === 0 && buffer[5] === 0x78) label = 'utf-16be';\n if (!label && buffer[0] === 0x3c && buffer[1] === 0 && buffer[2] === 0x3f && buffer[3] === 0 && buffer[4] === 0x78 && buffer[5] === 0) label = 'utf-16le';\n if (!label) {\n const prefix = Buffer.from(buffer.subarray(0, options.maxBytes ?? 1024)).toString('latin1').replace(/<!--[\\s\\S]*?(?:-->|$)/g, '');\n for (const token of prefix.matchAll(/<meta\\b([^>]*)>/gi)) {\n const attributes: Record<string, string> = {};\n for (const attribute of token[1].matchAll(/([^\\s=/'\">]+)(?:\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)'|([^\\s\"'>]+)))?/g)) {\n const key = attribute[1].toLowerCase();\n if (!(key in attributes)) attributes[key] = attribute[2] ?? attribute[3] ?? attribute[4] ?? '';\n }\n const declared = attributes.charset ?? (attributes['http-equiv']?.toLowerCase() === 'content-type'\n ? /\\bcharset\\s*=\\s*[\"']?([^\\s;\"']+)/i.exec(attributes.content ?? '')?.[1] : undefined);\n label = encodingLabel(declared);\n if (label) {\n if (label === 'utf-16le' || label === 'utf-16be') label = 'utf-8';\n if (label === 'x-user-defined') label = 'windows-1252';\n break;\n }\n }\n if (!label) {\n const declaration = /<\\?xml\\b[^>]*\\bencoding\\s*=\\s*[\"']([^\"']+)[\"']/i.exec(prefix);\n label = encodingLabel(declaration?.[1]);\n if (label === 'utf-16le' || label === 'utf-16be') label = 'utf-8';\n }\n }\n label ??= encodingLabel(options.defaultEncoding) ?? 'windows-1252';\n return label;\n}\n\nexport function decodeBuffer(buffer: Uint8Array, options: EncodingOptions = {}): string {\n const label = sniffEncoding(buffer, options);\n if (label === 'x-user-defined') {\n let decoded = '';\n for (const byte of buffer) decoded += String.fromCharCode(byte < 0x80 ? byte : 0xf700 + byte);\n return decoded;\n }\n return new TextDecoder(label).decode(buffer);\n}\n\nfunction decodedInput(buffer: Uint8Array, options: DecodeStreamOptions): [string, CheerioOptions] {\n const { encoding, ...parserOptions } = options;\n const xml = !!(options.xmlMode || options.xml);\n return [decodeBuffer(buffer, { defaultEncoding: xml ? 'utf-8' : 'windows-1252', ...encoding }), parserOptions];\n}\n\nexport function loadBuffer(buffer: Buffer | Uint8Array, options: DecodeStreamOptions = {}): CheerioAPI {\n return load(...decodedInput(buffer, options));\n}\n\nfunction completion(callback: LoadCallback): (error?: Error | null, document?: CheerioAPI) => void {\n let completed = false;\n return (error, document) => {\n if (completed) return;\n completed = true;\n callback(error, document as CheerioAPI);\n };\n}\n\nfunction requestHeaders(input: NonNullable<CheerioRequestOptions['requestOptions']>['headers']): Headers {\n if (!input) return new Headers();\n if (input instanceof Headers) return new Headers(input);\n const headers = new Headers();\n if (Array.isArray(input)) {\n if (input.length % 2) throw new TypeError('HTTP header arrays must contain name/value pairs');\n for (let index = 0; index < input.length; index += 2) headers.append(input[index], input[index + 1]);\n } else {\n const entries: Iterable<[string, string | string[] | undefined]> = Symbol.iterator in input\n ? input as Iterable<[string, string | string[] | undefined]> : Object.entries(input);\n for (const [name, value] of entries) {\n if (value == null) continue;\n for (const item of Array.isArray(value) ? value : [value]) headers.append(name, item);\n }\n }\n return headers;\n}\n\ninterface HTTPResponse {\n status: number;\n ok: boolean;\n headers: Headers;\n body: ReadableStream<Uint8Array> | null;\n rawHeaders?: Record<string, string | string[] | undefined>;\n}\n\n/** Node transport exposes informational responses and leaves wire headers alone. */\nasync function requestDocument(url: URL, method: string, headers: Headers, body: NonNullable<CheerioRequestOptions['requestOptions']>['body'], options: NonNullable<CheerioRequestOptions['requestOptions']>, signal: AbortSignal): Promise<HTTPResponse> {\n if (options.typeOfService != null && (!Number.isInteger(options.typeOfService) || options.typeOfService < 0 || options.typeOfService > 255)) {\n throw Object.assign(new Error('typeOfService must be an integer between 0 and 255'), { name: 'InvalidArgumentError', code: 'UND_ERR_INVALID_ARG' });\n }\n let payload: string | Uint8Array | Readable | ReadableStream<Uint8Array> | null | undefined = body as string | Uint8Array | Readable | null | undefined;\n if (body && typeof body === 'object' && !(body instanceof Uint8Array) && !(body instanceof Readable)) {\n // Request supplies Node's built-in multipart encoder for either Node or\n // Undici FormData without requiring the Undici package at runtime.\n let form: FormData;\n if (body instanceof FormData) form = body;\n else {\n form = new FormData();\n for (const [name, value] of body as import('./types.js').FormDataLike) {\n if (typeof value === 'string') form.append(name, value);\n else if ('name' in value && typeof value.name === 'string') form.append(name, value as Blob, value.name);\n else form.append(name, value as Blob);\n }\n }\n const encoded = new Request(url, { method: 'POST', body: form });\n // Node 20's encoder omits the final CRLF used by Undici 7. Keep the\n // request streaming while normalizing that suffix across Node versions.\n payload = Readable.from((async function* () {\n let previous = -1;\n let last = -1;\n for await (const chunk of Readable.fromWeb(encoded.body! as import('node:stream/web').ReadableStream<Uint8Array>)) {\n const bytes = chunk as Buffer;\n if (bytes.length >= 2) previous = bytes[bytes.length - 2];\n else if (bytes.length === 1) previous = last;\n if (bytes.length) last = bytes[bytes.length - 1];\n yield bytes;\n }\n if (previous !== 13 || last !== 10) yield Buffer.from('\\r\\n');\n })());\n if (!requestHeaders(options.headers).has('content-type')) headers.set('content-type', encoded.headers.get('content-type')!);\n }\n if (payload != null && !(payload instanceof Readable) && !(typeof payload === 'object' && 'getReader' in payload) && !headers.has('content-length') && !headers.has('transfer-encoding')) {\n headers.set('content-length', String(typeof payload === 'string' ? Buffer.byteLength(payload) : payload.byteLength));\n }\n const declaredLength = headers.has('content-length') ? Number(headers.get('content-length')) : undefined;\n const lengthError = () => Object.assign(new Error('Request body length does not match content-length header'), { name: 'RequestContentLengthMismatchError', code: 'UND_ERR_REQ_CONTENT_LENGTH_MISMATCH' });\n const knownLength = typeof payload === 'string' ? Buffer.byteLength(payload) : payload instanceof Uint8Array ? payload.byteLength : undefined;\n if (declaredLength != null && knownLength != null && declaredLength !== knownLength) throw lengthError();\n if (options.reset === true && !headers.has('connection')) headers.set('connection', 'close');\n return new Promise<HTTPResponse>((resolve, reject) => {\n let informationalError: Error | undefined;\n const request = (url.protocol === 'https:' ? requestHTTPS : requestHTTP)(url, {\n method, headers: Object.fromEntries(headers), signal,\n ...(typeof options.highWaterMark === 'number' ? { highWaterMark: options.highWaterMark } : {}),\n }, response => {\n if (informationalError) { response.destroy(); return; }\n const rawHeaders: Record<string, string | string[]> = {};\n for (let index = 0; index < response.rawHeaders.length; index += 2) {\n const name = response.rawHeaders[index].toLowerCase();\n const value = response.rawHeaders[index + 1];\n if (!Object.hasOwn(rawHeaders, name)) Object.defineProperty(rawHeaders, name, { value, enumerable: true, writable: true, configurable: true });\n else rawHeaders[name] = [...(Array.isArray(rawHeaders[name]) ? rawHeaders[name] : [rawHeaders[name]]) as string[], value];\n }\n const responseHeaders = new Headers();\n for (const [name, value] of Object.entries(rawHeaders)) {\n if (value == null) continue;\n for (const item of Array.isArray(value) ? name === 'content-type' ? value.slice(0, 1) : value : [value]) responseHeaders.append(name, item);\n }\n const status = response.statusCode ?? 0;\n resolve({ status, ok: status >= 200 && status < 300, headers: responseHeaders, rawHeaders, body: Readable.toWeb(response) as ReadableStream<Uint8Array> });\n });\n request.once('error', error => reject(signal.aborted ? signal.reason : error));\n request.on('information', information => {\n try { options.onInfo?.({ statusCode: information.statusCode, headers: information.headers as Record<string, string | string[]> }); }\n catch (error) { informationalError = error as Error; reject(error); request.destroy(error as Error); }\n });\n request.once('socket', socket => {\n const transport = socket as typeof socket & { setTypeOfService?: (value?: number) => void };\n try {\n if (transport.setTypeOfService && options.typeOfService != null) transport.setTypeOfService(options.typeOfService);\n } catch (error) { request.destroy(error as Error); return; }\n if (socket.connecting) {\n const timer = setTimeout(() => request.destroy(Object.assign(new Error('Connect Timeout Error'), { name: 'ConnectTimeoutError', code: 'UND_ERR_CONNECT_TIMEOUT' })), 10000);\n timer.unref();\n socket.once(url.protocol === 'https:' ? 'secureConnect' : 'connect', () => clearTimeout(timer));\n request.once('close', () => clearTimeout(timer));\n }\n });\n if (payload instanceof Readable || payload && typeof payload === 'object' && 'getReader' in payload) {\n const source = payload instanceof Readable ? payload : Readable.fromWeb(payload as unknown as import('node:stream/web').ReadableStream<Uint8Array>);\n if (declaredLength != null) {\n let sent = 0;\n source.on('data', (chunk: Buffer | string) => {\n sent += typeof chunk === 'string' ? Buffer.byteLength(chunk) : chunk.byteLength;\n if (sent > declaredLength) { request.destroy(lengthError()); source.destroy(); }\n });\n source.once('end', () => { if (sent !== declaredLength) request.destroy(lengthError()); });\n }\n source.once('error', error => request.destroy(error));\n request.once('close', () => { if (!source.destroyed) source.destroy(); });\n source.pipe(request);\n } else request.end(payload);\n });\n}\n\n/** A Node writable that feeds the native parser with bounded backpressure. */\nexport function stringStream(options: CheerioOptions, callback: LoadCallback): Writable {\n const complete = completion(callback);\n const opts = flattenOptions(options);\n const xml = !!opts._useHtmlParser2;\n const binding = requireNative();\n let native: NativeStream | undefined;\n let writeNative: (chunk: string) => Promise<void>;\n let finishNative: () => Promise<CheerioAPI>;\n let abortNative: () => void;\n let carry = '';\n if (opts._useHtmlParser2 && opts.Tokenizer) {\n const session = createTokenizerSession(opts);\n // Arbitrary user tokenizers can emit offsets for any earlier input. Retain\n // their source until end rather than changing their callback contract.\n const chunks: string[] = [];\n writeNative = async (chunk) => { chunks.push(chunk); session.write(chunk); };\n finishNative = async () => {\n const document = new binding.NativeDocument(chunks.join(''), true, JSON.stringify(session.end()));\n chunks.length = 0;\n return createAPI(routeDocument(document, opts), opts);\n };\n abortNative = () => { chunks.length = 0; };\n } else if (!opts._useHtmlParser2 && opts.treeAdapter) {\n const session = createTreeAdapterSession(opts, true);\n writeNative = (chunk) => session.write(chunk);\n finishNative = async () => createAPI(await session.end(), opts);\n abortNative = () => session.abort();\n } else if (!opts._useHtmlParser2 && opts.onParseError) {\n const session = createDiagnosticSession(opts, true);\n writeNative = (chunk) => session.write(chunk);\n finishNative = async () => createAPI(await session.end(), opts);\n abortNative = () => session.abort();\n } else {\n if (!binding.NativeStream) throw new Error('This native build does not support incremental parsing');\n native = new binding.NativeStream(JSON.stringify(parserOptions('', opts)), true);\n writeNative = (chunk) => native!.write(chunk);\n finishNative = async () => {\n const document = await native!.finish();\n deliverParseErrors(document, opts);\n return createAPI(routeDocument(document, opts), opts);\n };\n abortNative = () => native!.abort();\n }\n const stream = new Writable({\n decodeStrings: false,\n write(chunk, _encoding, done) {\n if (typeof chunk !== 'string') throw new TypeError(xml ? 'Expected a string' : 'Parser can work only with string streams.');\n if (opts._useHtmlParser2 && opts.Tokenizer) { writeNative(chunk).then(() => done(), (error: Error) => done(error)); return; }\n let text = carry + chunk;\n carry = '';\n const last = text.charCodeAt(text.length - 1);\n if (last >= 0xd800 && last <= 0xdbff) { carry = text.slice(-1); text = text.slice(0, -1); }\n if (!text) { done(); return; }\n writeNative(text).then(() => done(), (error: Error) => done(error));\n },\n final(done) {\n (async () => {\n if (carry) await writeNative(carry);\n return finishNative();\n })().then((document) => {\n complete(null, document);\n done();\n }, (error: Error) => done(error));\n },\n destroy(error, done) { abortNative(); done(error); },\n });\n stream.on('error', (error) => complete(error));\n return stream;\n}\n\n/** Sniff a bounded prefix, then decode and parse each chunk as it arrives. */\nexport function decodeStream(options: DecodeStreamOptions, callback: LoadCallback): Writable {\n const complete = completion(callback);\n const { encoding = {}, ...parserOptions } = options ?? {};\n const opts = flattenOptions(parserOptions);\n const decoderOptions = { defaultEncoding: opts.xmlMode ? 'utf-8' : 'windows-1252', ...encoding };\n const maxBytes = decoderOptions.maxBytes ?? 1024;\n if (!Number.isSafeInteger(maxBytes) || maxBytes < 0) throw new RangeError('encoding.maxBytes must be a non-negative integer');\n const prefixLimit = Math.max(6, maxBytes);\n const prefix: Buffer[] = [];\n let prefixLength = 0;\n let decoder: TextDecoder | undefined;\n let userDefined = false;\n let started = false;\n const parser = stringStream(opts, (error, document) => complete(error, document));\n let downstreamError: Error | undefined;\n parser.on('error', (error) => { downstreamError = error; stream.destroy(error); });\n const writeText = (text: string): Promise<void> => new Promise((resolve, reject) => {\n if (downstreamError) { reject(downstreamError); return; }\n if (!text) { resolve(); return; }\n parser.write(text, (error?: Error | null) => error ? reject(error) : resolve());\n });\n const decode = (bytes: Uint8Array, final = false): string => {\n if (userDefined) {\n let text = '';\n for (const byte of bytes) text += String.fromCharCode(byte < 0x80 ? byte : 0xf700 + byte);\n return text;\n }\n return decoder!.decode(bytes, { stream: !final });\n };\n const start = async (): Promise<void> => {\n const bytes = Buffer.concat(prefix, prefixLength);\n const label = sniffEncoding(bytes, decoderOptions);\n userDefined = label === 'x-user-defined';\n if (!userDefined) decoder = new TextDecoder(label);\n started = true;\n prefix.length = 0;\n await writeText(decode(bytes));\n };\n const accept = async (bytes: Buffer): Promise<void> => {\n if (!started) {\n const count = Math.min(prefixLimit - prefixLength, bytes.length);\n if (count) { prefix.push(Buffer.from(bytes.subarray(0, count))); prefixLength += count; }\n bytes = bytes.subarray(count);\n const declaredEncoding = encodingLabel(decoderOptions.userEncoding) || encodingLabel(decoderOptions.transportLayerEncodingLabel);\n if (prefixLength >= prefixLimit || declaredEncoding && prefixLength >= 3) await start();\n }\n if (started && bytes.length) await writeText(decode(bytes));\n };\n const stream = new Writable({\n write(chunk: Buffer | string, encoding, done) {\n accept(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk, encoding)).then(() => done(), (error: Error) => done(error));\n },\n final(done) {\n (async () => {\n if (!started) await start();\n await writeText(decode(new Uint8Array(), true));\n await new Promise<void>((resolve, reject) => {\n parser.once('error', reject);\n parser.end(() => { parser.removeListener('error', reject); resolve(); });\n });\n })().then(() => done(), (error: Error) => done(error));\n },\n destroy(error, done) { parser.destroy(error ?? undefined); done(error); },\n });\n stream.on('error', (error) => complete(error));\n return stream;\n}\n\n/** Load HTML or XML with bounded redirects through Node's built-in transport. */\nexport async function fromURL(url: string | URL, options: CheerioRequestOptions = {}): Promise<CheerioAPI> {\n const signal = options.requestOptions?.signal;\n if (!signal) return loadURL(url, options);\n if (typeof signal !== 'object' && typeof signal !== 'function') throw new TypeError('signal must be an AbortSignal or EventEmitter');\n if ('addEventListener' in signal) return loadURL(url, options);\n if (!('once' in signal) || !('removeListener' in signal)) throw new TypeError('signal must be an AbortSignal or EventEmitter');\n const emitter = signal as EventEmitter;\n const controller = new AbortController();\n const abort = () => controller.abort();\n emitter.once('abort', abort);\n try { return await loadURL(url, { ...options, requestOptions: { ...options.requestOptions, signal: controller.signal } }); }\n finally { emitter.removeListener('abort', abort); }\n}\n\nasync function loadURL(url: string | URL, options: CheerioRequestOptions): Promise<CheerioAPI> {\n const { requestOptions = {}, encoding, ...parserOptions } = options;\n const maxRedirects = requestOptions.maxRedirections ?? 5;\n if (!Number.isInteger(maxRedirects) || maxRedirects < 0) throw new RangeError('maxRedirections must be a non-negative integer');\n const headers = requestHeaders(requestOptions.headers);\n if (!Object.hasOwn(requestOptions, 'headers')) headers.set('accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8');\n let current = new URL(url);\n if (requestOptions.query) {\n if (current.search || current.hash) throw new TypeError('URL must not contain a query or fragment when requestOptions.query is supplied');\n current.search = stringifyQuery(requestOptions.query);\n }\n let method = requestOptions.method ?? 'GET';\n let body = requestOptions.body;\n let response: HTTPResponse;\n const controller = new AbortController();\n const signal = requestOptions.signal ? AbortSignal.any([requestOptions.signal as AbortSignal, controller.signal]) : controller.signal;\n const timeoutError = (kind: 'Headers' | 'Body') => Object.assign(new Error(`${kind} Timeout Error`), {\n name: `${kind}TimeoutError`, code: kind === 'Headers' ? 'UND_ERR_HEADERS_TIMEOUT' : 'UND_ERR_BODY_TIMEOUT',\n });\n for (const timeout of [requestOptions.headersTimeout, requestOptions.bodyTimeout]) {\n if (timeout != null && (!Number.isFinite(timeout) || timeout < 0)) throw new RangeError('HTTP timeouts must be non-negative finite numbers');\n }\n const suppliedDispatcher = requestOptions.dispatcher as { dispatch?: (options: unknown, handler: unknown) => boolean } | undefined;\n if (suppliedDispatcher && typeof suppliedDispatcher.dispatch !== 'function') throw new TypeError('requestOptions.dispatcher must implement dispatch');\n const dispatcher = suppliedDispatcher && {\n dispatch(dispatchOptions: Record<string, unknown>, handler: unknown) {\n // Keep fetch's URL/body/header encoding and forward the remaining Undici\n // transport options to the caller's dispatcher without an npm dependency.\n const { dispatcher: _dispatcher, throwOnError: _throwOnError, maxRedirections: _maxRedirections, query: _query, ...transport } = requestOptions;\n return suppliedDispatcher.dispatch!({ ...transport, ...dispatchOptions }, handler);\n },\n };\n for (let redirects = 0; ; redirects += 1) {\n let timer: ReturnType<typeof setTimeout> | undefined;\n const headersTimeout = requestOptions.headersTimeout ?? 300000;\n if (headersTimeout) { timer = setTimeout(() => controller.abort(timeoutError('Headers')), headersTimeout); timer.unref(); }\n try {\n if (dispatcher) {\n const init: RequestInit & { dispatcher?: unknown; duplex?: 'half' } = { method, headers, body: body as BodyInit | undefined, redirect: 'manual', signal, dispatcher };\n if (body != null && typeof body !== 'string') init.duplex = 'half';\n response = await fetch(current, init);\n } else response = await requestDocument(current, method, headers, body, requestOptions, signal);\n } catch (error) {\n throw signal.aborted ? signal.reason : error;\n } finally { if (timer) clearTimeout(timer); }\n const location = response.headers.get('location');\n if (![300, 301, 302, 303, 307, 308].includes(response.status) || !location) break;\n const rewriteToGet = response.status === 303 && method.toUpperCase() !== 'HEAD' || (response.status === 301 || response.status === 302) && method.toUpperCase() === 'POST';\n if (body instanceof Readable && body.readableDidRead && !rewriteToGet) break;\n await response.body?.cancel();\n if (redirects >= maxRedirects) throw new Error('max redirects reached');\n const next = new URL(location, current);\n headers.delete('host');\n if (response.status === 303) for (const name of [...headers.keys()]) if (name.startsWith('content-')) headers.delete(name);\n if (next.origin !== current.origin) {\n headers.delete('authorization');\n headers.delete('cookie');\n headers.delete('proxy-authorization');\n }\n if (rewriteToGet) {\n method = 'GET';\n body = undefined;\n headers.delete('content-length');\n headers.delete('content-type');\n }\n current = next;\n }\n if (!response.ok) {\n await response.body?.cancel();\n const error = new Error('Response Error') as Error & { statusCode: number; code: string; headers: Record<string, string | string[] | undefined> };\n error.name = 'ResponseError';\n error.statusCode = response.status;\n error.code = 'UND_ERR_RESPONSE';\n error.headers = response.rawHeaders ?? Object.fromEntries(response.headers);\n throw error;\n }\n const contentType = response.headers.get('content-type') ?? 'text/html';\n let parsedType: MIMEType;\n try { parsedType = new MIMEType(contentType); }\n catch {\n await response.body?.cancel();\n throw new Error(`Could not parse MIME type string \"${contentType}\"`);\n }\n const mime = parsedType.essence;\n const xml = (parsedType.type === 'application' || parsedType.type === 'text') && parsedType.subtype === 'xml' || parsedType.subtype.endsWith('+xml');\n if (mime !== 'text/html' && !xml) {\n await response.body?.cancel();\n throw new RangeError(`The content-type \"${mime}\" is neither HTML nor XML.`);\n }\n const charset = parsedType.params.get('charset') ?? undefined;\n if (encoding) encoding.transportLayerEncodingLabel = charset;\n const streamOptions: DecodeStreamOptions = {\n xmlMode: xml,\n baseURI: current,\n ...parserOptions,\n encoding: { ...encoding, transportLayerEncodingLabel: charset },\n };\n return new Promise<CheerioAPI>((resolve, reject) => {\n const parser = decodeStream(streamOptions, (error, document) => error ? reject(error) : resolve(document));\n const reader = response.body?.getReader();\n parser.once('error', (error) => { controller.abort(error); void reader?.cancel(error).catch(() => {}); });\n (async () => {\n let received = 0;\n const maxResponseSize = requestOptions.maxResponseSize;\n if (maxResponseSize != null && (typeof maxResponseSize !== 'number' || !Number.isSafeInteger(maxResponseSize) || maxResponseSize < -1)) throw new RangeError('maxResponseSize must be -1 or a non-negative integer');\n while (reader) {\n let timer: ReturnType<typeof setTimeout> | undefined;\n const bodyTimeout = requestOptions.bodyTimeout ?? 300000;\n if (bodyTimeout) { timer = setTimeout(() => controller.abort(timeoutError('Body')), bodyTimeout); timer.unref(); }\n let chunk: ReadableStreamReadResult<Uint8Array>;\n try { chunk = await reader.read(); }\n catch (error) { throw controller.signal.aborted ? controller.signal.reason : error; }\n finally { if (timer) clearTimeout(timer); }\n if (chunk.done) break;\n received += chunk.value.byteLength;\n if (typeof maxResponseSize === 'number' && maxResponseSize >= 0 && received > maxResponseSize) {\n throw Object.assign(new Error('Response content exceeded maxResponseSize'), { name: 'ResponseExceededMaxSizeError', code: 'UND_ERR_RES_EXCEEDED_MAX_SIZE' });\n }\n await new Promise<void>((resolve, reject) => parser.write(Buffer.from(chunk.value.buffer, chunk.value.byteOffset, chunk.value.byteLength), (error?: Error | null) => error ? reject(error) : resolve()));\n }\n parser.end();\n })().catch((error: Error) => { parser.destroy(error); reject(error); });\n });\n}\n"],"mappings":"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","names":["Document","isDocument","require","attr","isDocument","document","parse","data","data","STRIDE","registryKey","globals","registry","cached","data","result","nodeId","values","isElement","childIds","data","compile","entries","value","data","cached","record","isDocument","document","parse","isDocument","isElementType","cached","parse","property","isDocument","length","nodes","types","types","compiled","value","parserOptions","encoded","encoding","resolve","reject","initialize","dom","data","isDocument","results"]}