@absolutejs/rag 0.10.0 → 0.12.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.
@@ -0,0 +1,217 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../node_modules/cssom/lib/StyleSheet.js", "../node_modules/cssom/lib/CSSRule.js", "../node_modules/cssom/lib/CSSStyleRule.js", "../node_modules/cssom/lib/CSSStyleSheet.js", "../node_modules/cssom/lib/MediaList.js", "../node_modules/cssom/lib/CSSImportRule.js", "../node_modules/cssom/lib/CSSGroupingRule.js", "../node_modules/cssom/lib/CSSConditionRule.js", "../node_modules/cssom/lib/CSSMediaRule.js", "../node_modules/cssom/lib/CSSSupportsRule.js", "../node_modules/cssom/lib/CSSFontFaceRule.js", "../node_modules/cssom/lib/CSSHostRule.js", "../node_modules/cssom/lib/CSSKeyframeRule.js", "../node_modules/cssom/lib/CSSKeyframesRule.js", "../node_modules/cssom/lib/CSSValue.js", "../node_modules/cssom/lib/CSSValueExpression.js", "../node_modules/cssom/lib/MatcherList.js", "../node_modules/cssom/lib/CSSDocumentRule.js", "../node_modules/cssom/lib/parse.js", "../node_modules/cssom/lib/CSSStyleDeclaration.js", "../node_modules/cssom/lib/clone.js", "../node_modules/linkedom/commonjs/canvas-shim.cjs", "../node_modules/linkedom/commonjs/canvas.cjs", "../node_modules/linkedom/esm/shared/symbols.js", "../node_modules/entities/dist/esm/decode-codepoint.js", "../node_modules/entities/dist/esm/internal/decode-shared.js", "../node_modules/entities/dist/esm/generated/decode-data-html.js", "../node_modules/entities/dist/esm/generated/decode-data-xml.js", "../node_modules/entities/dist/esm/internal/bin-trie-flags.js", "../node_modules/entities/dist/esm/decode.js", "../node_modules/htmlparser2/dist/esm/Tokenizer.js", "../node_modules/htmlparser2/dist/esm/Parser.js", "../node_modules/domelementtype/lib/esm/index.js", "../node_modules/htmlparser2/node_modules/domhandler/lib/esm/node.js", "../node_modules/htmlparser2/node_modules/domhandler/lib/esm/index.js", "../node_modules/htmlparser2/node_modules/domutils/node_modules/dom-serializer/node_modules/entities/lib/esm/escape.js", "../node_modules/htmlparser2/node_modules/domutils/node_modules/dom-serializer/node_modules/entities/lib/esm/index.js", "../node_modules/htmlparser2/node_modules/domutils/node_modules/dom-serializer/lib/esm/foreignNames.js", "../node_modules/htmlparser2/node_modules/domutils/node_modules/dom-serializer/lib/esm/index.js", "../node_modules/htmlparser2/node_modules/domutils/lib/esm/stringify.js", "../node_modules/htmlparser2/node_modules/domutils/lib/esm/traversal.js", "../node_modules/htmlparser2/node_modules/domutils/lib/esm/manipulation.js", "../node_modules/htmlparser2/node_modules/domutils/lib/esm/querying.js", "../node_modules/htmlparser2/node_modules/domutils/lib/esm/legacy.js", "../node_modules/htmlparser2/node_modules/domutils/lib/esm/helpers.js", "../node_modules/htmlparser2/node_modules/domutils/lib/esm/feeds.js", "../node_modules/htmlparser2/dist/esm/index.js", "../node_modules/linkedom/esm/shared/constants.js", "../node_modules/linkedom/esm/shared/object.js", "../node_modules/linkedom/esm/shared/utils.js", "../node_modules/linkedom/esm/shared/shadow-roots.js", "../node_modules/linkedom/esm/interface/custom-element-registry.js", "../node_modules/linkedom/esm/shared/parse-from-string.js", "../node_modules/linkedom/esm/shared/register-html-class.js", "../node_modules/linkedom/esm/shared/jsdon.js", "../node_modules/linkedom/esm/interface/mutation-observer.js", "../node_modules/linkedom/esm/shared/attributes.js", "../node_modules/linkedom/esm/interface/event-target.js", "../node_modules/linkedom/esm/interface/node-list.js", "../node_modules/linkedom/esm/interface/node.js", "../node_modules/linkedom/esm/shared/text-escaper.js", "../node_modules/linkedom/esm/interface/attr.js", "../node_modules/linkedom/esm/shared/node.js", "../node_modules/linkedom/esm/mixin/non-document-type-child-node.js", "../node_modules/linkedom/esm/mixin/child-node.js", "../node_modules/linkedom/esm/interface/character-data.js", "../node_modules/linkedom/esm/interface/cdata-section.js", "../node_modules/linkedom/esm/interface/comment.js", "../node_modules/boolbase/dist/index.js", "../node_modules/css-what/dist/types.js", "../node_modules/css-what/dist/parse.js", "../node_modules/domhandler/node_modules/domelementtype/dist/index.js", "../node_modules/domhandler/dist/node.js", "../node_modules/domutils/dist/querying.js", "../node_modules/domutils/dist/legacy.js", "../node_modules/dom-serializer/node_modules/domelementtype/dist/index.js", "../node_modules/dom-serializer/node_modules/entities/dist/escape.js", "../node_modules/dom-serializer/node_modules/entities/dist/index.js", "../node_modules/dom-serializer/dist/foreign-names.js", "../node_modules/dom-serializer/dist/index.js", "../node_modules/domutils/node_modules/domelementtype/dist/index.js", "../node_modules/domutils/dist/stringify.js", "../node_modules/domutils/dist/feeds.js", "../node_modules/domutils/dist/helpers.js", "../node_modules/domutils/dist/manipulation.js", "../node_modules/domutils/dist/traversal.js", "../node_modules/css-select/dist/attributes.js", "../node_modules/css-select/dist/helpers/querying.js", "../node_modules/css-select/dist/pseudo-selectors/aliases.js", "../node_modules/nth-check/dist/compile.js", "../node_modules/nth-check/dist/parse.js", "../node_modules/nth-check/dist/index.js", "../node_modules/css-select/dist/helpers/cache.js", "../node_modules/css-select/dist/helpers/options.js", "../node_modules/css-select/dist/pseudo-selectors/filters.js", "../node_modules/css-select/dist/pseudo-selectors/pseudos.js", "../node_modules/css-select/dist/helpers/selectors.js", "../node_modules/css-select/dist/pseudo-selectors/subselects.js", "../node_modules/css-select/dist/pseudo-selectors/index.js", "../node_modules/css-select/dist/general.js", "../node_modules/css-select/dist/compile.js", "../node_modules/css-select/dist/index.js", "../node_modules/linkedom/esm/shared/matches.js", "../node_modules/linkedom/esm/interface/text.js", "../node_modules/linkedom/esm/mixin/parent-node.js", "../node_modules/linkedom/esm/mixin/non-element-parent-node.js", "../node_modules/linkedom/esm/interface/document-fragment.js", "../node_modules/linkedom/esm/interface/document-type.js", "../node_modules/linkedom/esm/mixin/inner-html.js", "../node_modules/uhyphen/esm/index.js", "../node_modules/linkedom/esm/dom/string-map.js", "../node_modules/linkedom/esm/dom/token-list.js", "../node_modules/linkedom/esm/interface/css-style-declaration.js", "../node_modules/linkedom/esm/interface/event.js", "../node_modules/linkedom/esm/interface/named-node-map.js", "../node_modules/linkedom/esm/interface/shadow-root.js", "../node_modules/linkedom/esm/interface/element.js", "../node_modules/linkedom/esm/svg/element.js", "../node_modules/linkedom/esm/shared/facades.js", "../node_modules/linkedom/esm/html/element.js", "../node_modules/linkedom/esm/html/template-element.js", "../node_modules/linkedom/esm/html/html-element.js", "../node_modules/linkedom/esm/html/text-element.js", "../node_modules/linkedom/esm/html/script-element.js", "../node_modules/linkedom/esm/html/frame-element.js", "../node_modules/linkedom/esm/html/i-frame-element.js", "../node_modules/linkedom/esm/html/object-element.js", "../node_modules/linkedom/esm/html/head-element.js", "../node_modules/linkedom/esm/html/body-element.js", "../node_modules/cssom/lib/index.js", "../node_modules/linkedom/esm/html/style-element.js", "../node_modules/linkedom/esm/html/time-element.js", "../node_modules/linkedom/esm/html/field-set-element.js", "../node_modules/linkedom/esm/html/embed-element.js", "../node_modules/linkedom/esm/html/hr-element.js", "../node_modules/linkedom/esm/html/progress-element.js", "../node_modules/linkedom/esm/html/paragraph-element.js", "../node_modules/linkedom/esm/html/table-element.js", "../node_modules/linkedom/esm/html/frame-set-element.js", "../node_modules/linkedom/esm/html/li-element.js", "../node_modules/linkedom/esm/html/base-element.js", "../node_modules/linkedom/esm/html/data-list-element.js", "../node_modules/linkedom/esm/html/input-element.js", "../node_modules/linkedom/esm/html/param-element.js", "../node_modules/linkedom/esm/html/media-element.js", "../node_modules/linkedom/esm/html/audio-element.js", "../node_modules/linkedom/esm/html/heading-element.js", "../node_modules/linkedom/esm/html/directory-element.js", "../node_modules/linkedom/esm/html/quote-element.js", "../node_modules/linkedom/esm/html/canvas-element.js", "../node_modules/linkedom/esm/html/legend-element.js", "../node_modules/linkedom/esm/html/option-element.js", "../node_modules/linkedom/esm/html/span-element.js", "../node_modules/linkedom/esm/html/meter-element.js", "../node_modules/linkedom/esm/html/video-element.js", "../node_modules/linkedom/esm/html/table-cell-element.js", "../node_modules/linkedom/esm/html/title-element.js", "../node_modules/linkedom/esm/html/output-element.js", "../node_modules/linkedom/esm/html/table-row-element.js", "../node_modules/linkedom/esm/html/data-element.js", "../node_modules/linkedom/esm/html/menu-element.js", "../node_modules/linkedom/esm/html/select-element.js", "../node_modules/linkedom/esm/html/br-element.js", "../node_modules/linkedom/esm/html/button-element.js", "../node_modules/linkedom/esm/html/map-element.js", "../node_modules/linkedom/esm/html/opt-group-element.js", "../node_modules/linkedom/esm/html/d-list-element.js", "../node_modules/linkedom/esm/html/text-area-element.js", "../node_modules/linkedom/esm/html/font-element.js", "../node_modules/linkedom/esm/html/div-element.js", "../node_modules/linkedom/esm/html/link-element.js", "../node_modules/linkedom/esm/html/slot-element.js", "../node_modules/linkedom/esm/html/form-element.js", "../node_modules/linkedom/esm/html/image-element.js", "../node_modules/linkedom/esm/html/pre-element.js", "../node_modules/linkedom/esm/html/u-list-element.js", "../node_modules/linkedom/esm/html/meta-element.js", "../node_modules/linkedom/esm/html/picture-element.js", "../node_modules/linkedom/esm/html/area-element.js", "../node_modules/linkedom/esm/html/o-list-element.js", "../node_modules/linkedom/esm/html/table-caption-element.js", "../node_modules/linkedom/esm/html/anchor-element.js", "../node_modules/linkedom/esm/html/label-element.js", "../node_modules/linkedom/esm/html/unknown-element.js", "../node_modules/linkedom/esm/html/mod-element.js", "../node_modules/linkedom/esm/html/details-element.js", "../node_modules/linkedom/esm/html/source-element.js", "../node_modules/linkedom/esm/html/track-element.js", "../node_modules/linkedom/esm/html/marquee-element.js", "../node_modules/linkedom/esm/shared/html-classes.js", "../node_modules/linkedom/esm/shared/mime.js", "../node_modules/linkedom/esm/interface/custom-event.js", "../node_modules/linkedom/esm/interface/input-event.js", "../node_modules/linkedom/esm/interface/image.js", "../node_modules/linkedom/esm/interface/range.js", "../node_modules/linkedom/esm/interface/tree-walker.js", "../node_modules/linkedom/esm/interface/document.js", "../node_modules/linkedom/esm/html/document.js", "../node_modules/linkedom/esm/svg/document.js", "../node_modules/linkedom/esm/xml/document.js", "../node_modules/linkedom/esm/dom/parser.js", "../node_modules/linkedom/esm/index.js", "../src/web/transport.ts", "../src/web/evidence.ts", "../src/ingestion/ingestion.ts", "../src/internal/constants.ts", "../src/web/website.ts", "../src/web/index.ts"],
4
+ "sourcesContent": [
5
+ "//.CommonJS\nvar CSSOM = {};\n///CommonJS\n\n\n/**\n * @constructor\n * @see http://dev.w3.org/csswg/cssom/#the-stylesheet-interface\n */\nCSSOM.StyleSheet = function StyleSheet() {\n\tthis.parentStyleSheet = null;\n};\n\n\n//.CommonJS\nexports.StyleSheet = CSSOM.StyleSheet;\n///CommonJS\n",
6
+ "//.CommonJS\nvar CSSOM = {};\n///CommonJS\n\n\n/**\n * @constructor\n * @see http://dev.w3.org/csswg/cssom/#the-cssrule-interface\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule\n */\nCSSOM.CSSRule = function CSSRule() {\n\tthis.parentRule = null;\n\tthis.parentStyleSheet = null;\n};\n\nCSSOM.CSSRule.UNKNOWN_RULE = 0; // obsolete\nCSSOM.CSSRule.STYLE_RULE = 1;\nCSSOM.CSSRule.CHARSET_RULE = 2; // obsolete\nCSSOM.CSSRule.IMPORT_RULE = 3;\nCSSOM.CSSRule.MEDIA_RULE = 4;\nCSSOM.CSSRule.FONT_FACE_RULE = 5;\nCSSOM.CSSRule.PAGE_RULE = 6;\nCSSOM.CSSRule.KEYFRAMES_RULE = 7;\nCSSOM.CSSRule.KEYFRAME_RULE = 8;\nCSSOM.CSSRule.MARGIN_RULE = 9;\nCSSOM.CSSRule.NAMESPACE_RULE = 10;\nCSSOM.CSSRule.COUNTER_STYLE_RULE = 11;\nCSSOM.CSSRule.SUPPORTS_RULE = 12;\nCSSOM.CSSRule.DOCUMENT_RULE = 13;\nCSSOM.CSSRule.FONT_FEATURE_VALUES_RULE = 14;\nCSSOM.CSSRule.VIEWPORT_RULE = 15;\nCSSOM.CSSRule.REGION_STYLE_RULE = 16;\n\n\nCSSOM.CSSRule.prototype = {\n\tconstructor: CSSOM.CSSRule\n\t//FIXME\n};\n\n\n//.CommonJS\nexports.CSSRule = CSSOM.CSSRule;\n///CommonJS\n",
7
+ "//.CommonJS\nvar CSSOM = {\n\tCSSStyleDeclaration: require(\"./CSSStyleDeclaration\").CSSStyleDeclaration,\n\tCSSRule: require(\"./CSSRule\").CSSRule\n};\n///CommonJS\n\n\n/**\n * @constructor\n * @see http://dev.w3.org/csswg/cssom/#cssstylerule\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleRule\n */\nCSSOM.CSSStyleRule = function CSSStyleRule() {\n\tCSSOM.CSSRule.call(this);\n\tthis.selectorText = \"\";\n\tthis.style = new CSSOM.CSSStyleDeclaration();\n\tthis.style.parentRule = this;\n};\n\nCSSOM.CSSStyleRule.prototype = new CSSOM.CSSRule();\nCSSOM.CSSStyleRule.prototype.constructor = CSSOM.CSSStyleRule;\nCSSOM.CSSStyleRule.prototype.type = 1;\n\nObject.defineProperty(CSSOM.CSSStyleRule.prototype, \"cssText\", {\n\tget: function() {\n\t\tvar text;\n\t\tif (this.selectorText) {\n\t\t\ttext = this.selectorText + \" {\" + this.style.cssText + \"}\";\n\t\t} else {\n\t\t\ttext = \"\";\n\t\t}\n\t\treturn text;\n\t},\n\tset: function(cssText) {\n\t\tvar rule = CSSOM.CSSStyleRule.parse(cssText);\n\t\tthis.style = rule.style;\n\t\tthis.selectorText = rule.selectorText;\n\t}\n});\n\n\n/**\n * NON-STANDARD\n * lightweight version of parse.js.\n * @param {string} ruleText\n * @return CSSStyleRule\n */\nCSSOM.CSSStyleRule.parse = function(ruleText) {\n\tvar i = 0;\n\tvar state = \"selector\";\n\tvar index;\n\tvar j = i;\n\tvar buffer = \"\";\n\n\tvar SIGNIFICANT_WHITESPACE = {\n\t\t\"selector\": true,\n\t\t\"value\": true\n\t};\n\n\tvar styleRule = new CSSOM.CSSStyleRule();\n\tvar name, priority=\"\";\n\n\tfor (var character; (character = ruleText.charAt(i)); i++) {\n\n\t\tswitch (character) {\n\n\t\tcase \" \":\n\t\tcase \"\\t\":\n\t\tcase \"\\r\":\n\t\tcase \"\\n\":\n\t\tcase \"\\f\":\n\t\t\tif (SIGNIFICANT_WHITESPACE[state]) {\n\t\t\t\t// Squash 2 or more white-spaces in the row into 1\n\t\t\t\tswitch (ruleText.charAt(i - 1)) {\n\t\t\t\t\tcase \" \":\n\t\t\t\t\tcase \"\\t\":\n\t\t\t\t\tcase \"\\r\":\n\t\t\t\t\tcase \"\\n\":\n\t\t\t\t\tcase \"\\f\":\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbuffer += \" \";\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\n\t\t// String\n\t\tcase '\"':\n\t\t\tj = i + 1;\n\t\t\tindex = ruleText.indexOf('\"', j) + 1;\n\t\t\tif (!index) {\n\t\t\t\tthrow '\" is missing';\n\t\t\t}\n\t\t\tbuffer += ruleText.slice(i, index);\n\t\t\ti = index - 1;\n\t\t\tbreak;\n\n\t\tcase \"'\":\n\t\t\tj = i + 1;\n\t\t\tindex = ruleText.indexOf(\"'\", j) + 1;\n\t\t\tif (!index) {\n\t\t\t\tthrow \"' is missing\";\n\t\t\t}\n\t\t\tbuffer += ruleText.slice(i, index);\n\t\t\ti = index - 1;\n\t\t\tbreak;\n\n\t\t// Comment\n\t\tcase \"/\":\n\t\t\tif (ruleText.charAt(i + 1) === \"*\") {\n\t\t\t\ti += 2;\n\t\t\t\tindex = ruleText.indexOf(\"*/\", i);\n\t\t\t\tif (index === -1) {\n\t\t\t\t\tthrow new SyntaxError(\"Missing */\");\n\t\t\t\t} else {\n\t\t\t\t\ti = index + 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tbuffer += character;\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase \"{\":\n\t\t\tif (state === \"selector\") {\n\t\t\t\tstyleRule.selectorText = buffer.trim();\n\t\t\t\tbuffer = \"\";\n\t\t\t\tstate = \"name\";\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase \":\":\n\t\t\tif (state === \"name\") {\n\t\t\t\tname = buffer.trim();\n\t\t\t\tbuffer = \"\";\n\t\t\t\tstate = \"value\";\n\t\t\t} else {\n\t\t\t\tbuffer += character;\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase \"!\":\n\t\t\tif (state === \"value\" && ruleText.indexOf(\"!important\", i) === i) {\n\t\t\t\tpriority = \"important\";\n\t\t\t\ti += \"important\".length;\n\t\t\t} else {\n\t\t\t\tbuffer += character;\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase \";\":\n\t\t\tif (state === \"value\") {\n\t\t\t\tstyleRule.style.setProperty(name, buffer.trim(), priority);\n\t\t\t\tpriority = \"\";\n\t\t\t\tbuffer = \"\";\n\t\t\t\tstate = \"name\";\n\t\t\t} else {\n\t\t\t\tbuffer += character;\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase \"}\":\n\t\t\tif (state === \"value\") {\n\t\t\t\tstyleRule.style.setProperty(name, buffer.trim(), priority);\n\t\t\t\tpriority = \"\";\n\t\t\t\tbuffer = \"\";\n\t\t\t} else if (state === \"name\") {\n\t\t\t\tbreak;\n\t\t\t} else {\n\t\t\t\tbuffer += character;\n\t\t\t}\n\t\t\tstate = \"selector\";\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tbuffer += character;\n\t\t\tbreak;\n\n\t\t}\n\t}\n\n\treturn styleRule;\n\n};\n\n\n//.CommonJS\nexports.CSSStyleRule = CSSOM.CSSStyleRule;\n///CommonJS\n",
8
+ "//.CommonJS\nvar CSSOM = {\n\tStyleSheet: require(\"./StyleSheet\").StyleSheet,\n\tCSSStyleRule: require(\"./CSSStyleRule\").CSSStyleRule\n};\n///CommonJS\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleSheet\n */\nCSSOM.CSSStyleSheet = function CSSStyleSheet() {\n\tCSSOM.StyleSheet.call(this);\n\tthis.cssRules = [];\n};\n\n\nCSSOM.CSSStyleSheet.prototype = new CSSOM.StyleSheet();\nCSSOM.CSSStyleSheet.prototype.constructor = CSSOM.CSSStyleSheet;\n\n\n/**\n * Used to insert a new rule into the style sheet. The new rule now becomes part of the cascade.\n *\n * sheet = new Sheet(\"body {margin: 0}\")\n * sheet.toString()\n * -> \"body{margin:0;}\"\n * sheet.insertRule(\"img {border: none}\", 0)\n * -> 0\n * sheet.toString()\n * -> \"img{border:none;}body{margin:0;}\"\n *\n * @param {string} rule\n * @param {number} index\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleSheet-insertRule\n * @return {number} The index within the style sheet's rule collection of the newly inserted rule.\n */\nCSSOM.CSSStyleSheet.prototype.insertRule = function(rule, index) {\n\tif (index < 0 || index > this.cssRules.length) {\n\t\tthrow new RangeError(\"INDEX_SIZE_ERR\");\n\t}\n\tvar cssRule = CSSOM.parse(rule).cssRules[0];\n\tcssRule.parentStyleSheet = this;\n\tthis.cssRules.splice(index, 0, cssRule);\n\treturn index;\n};\n\n\n/**\n * Used to delete a rule from the style sheet.\n *\n * sheet = new Sheet(\"img{border:none} body{margin:0}\")\n * sheet.toString()\n * -> \"img{border:none;}body{margin:0;}\"\n * sheet.deleteRule(0)\n * sheet.toString()\n * -> \"body{margin:0;}\"\n *\n * @param {number} index within the style sheet's rule list of the rule to remove.\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleSheet-deleteRule\n */\nCSSOM.CSSStyleSheet.prototype.deleteRule = function(index) {\n\tif (index < 0 || index >= this.cssRules.length) {\n\t\tthrow new RangeError(\"INDEX_SIZE_ERR\");\n\t}\n\tthis.cssRules.splice(index, 1);\n};\n\n\n/**\n * NON-STANDARD\n * @return {string} serialize stylesheet\n */\nCSSOM.CSSStyleSheet.prototype.toString = function() {\n\tvar result = \"\";\n\tvar rules = this.cssRules;\n\tfor (var i=0; i<rules.length; i++) {\n\t\tresult += rules[i].cssText + \"\\n\";\n\t}\n\treturn result;\n};\n\n\n//.CommonJS\nexports.CSSStyleSheet = CSSOM.CSSStyleSheet;\nCSSOM.parse = require('./parse').parse; // Cannot be included sooner due to the mutual dependency between parse.js and CSSStyleSheet.js\n///CommonJS\n",
9
+ "//.CommonJS\nvar CSSOM = {};\n///CommonJS\n\n\n/**\n * @constructor\n * @see http://dev.w3.org/csswg/cssom/#the-medialist-interface\n */\nCSSOM.MediaList = function MediaList(){\n\tthis.length = 0;\n};\n\nCSSOM.MediaList.prototype = {\n\n\tconstructor: CSSOM.MediaList,\n\n\t/**\n\t * @return {string}\n\t */\n\tget mediaText() {\n\t\treturn Array.prototype.join.call(this, \", \");\n\t},\n\n\t/**\n\t * @param {string} value\n\t */\n\tset mediaText(value) {\n\t\tvar values = value.split(\",\");\n\t\tvar length = this.length = values.length;\n\t\tfor (var i=0; i<length; i++) {\n\t\t\tthis[i] = values[i].trim();\n\t\t}\n\t},\n\n\t/**\n\t * @param {string} medium\n\t */\n\tappendMedium: function(medium) {\n\t\tif (Array.prototype.indexOf.call(this, medium) === -1) {\n\t\t\tthis[this.length] = medium;\n\t\t\tthis.length++;\n\t\t}\n\t},\n\n\t/**\n\t * @param {string} medium\n\t */\n\tdeleteMedium: function(medium) {\n\t\tvar index = Array.prototype.indexOf.call(this, medium);\n\t\tif (index !== -1) {\n\t\t\tArray.prototype.splice.call(this, index, 1);\n\t\t}\n\t}\n\n};\n\n\n//.CommonJS\nexports.MediaList = CSSOM.MediaList;\n///CommonJS\n",
10
+ "//.CommonJS\nvar CSSOM = {\n\tCSSRule: require(\"./CSSRule\").CSSRule,\n\tCSSStyleSheet: require(\"./CSSStyleSheet\").CSSStyleSheet,\n\tMediaList: require(\"./MediaList\").MediaList\n};\n///CommonJS\n\n\n/**\n * @constructor\n * @see http://dev.w3.org/csswg/cssom/#cssimportrule\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSImportRule\n */\nCSSOM.CSSImportRule = function CSSImportRule() {\n\tCSSOM.CSSRule.call(this);\n\tthis.href = \"\";\n\tthis.media = new CSSOM.MediaList();\n\tthis.styleSheet = new CSSOM.CSSStyleSheet();\n};\n\nCSSOM.CSSImportRule.prototype = new CSSOM.CSSRule();\nCSSOM.CSSImportRule.prototype.constructor = CSSOM.CSSImportRule;\nCSSOM.CSSImportRule.prototype.type = 3;\n\nObject.defineProperty(CSSOM.CSSImportRule.prototype, \"cssText\", {\n get: function() {\n var mediaText = this.media.mediaText;\n return \"@import url(\" + this.href + \")\" + (mediaText ? \" \" + mediaText : \"\") + \";\";\n },\n set: function(cssText) {\n var i = 0;\n\n /**\n * @import url(partial.css) screen, handheld;\n * || |\n * after-import media\n * |\n * url\n */\n var state = '';\n\n var buffer = '';\n var index;\n for (var character; (character = cssText.charAt(i)); i++) {\n\n switch (character) {\n case ' ':\n case '\\t':\n case '\\r':\n case '\\n':\n case '\\f':\n if (state === 'after-import') {\n state = 'url';\n } else {\n buffer += character;\n }\n break;\n\n case '@':\n if (!state && cssText.indexOf('@import', i) === i) {\n state = 'after-import';\n i += 'import'.length;\n buffer = '';\n }\n break;\n\n case 'u':\n if (state === 'url' && cssText.indexOf('url(', i) === i) {\n index = cssText.indexOf(')', i + 1);\n if (index === -1) {\n throw i + ': \")\" not found';\n }\n i += 'url('.length;\n var url = cssText.slice(i, index);\n if (url[0] === url[url.length - 1]) {\n if (url[0] === '\"' || url[0] === \"'\") {\n url = url.slice(1, -1);\n }\n }\n this.href = url;\n i = index;\n state = 'media';\n }\n break;\n\n case '\"':\n if (state === 'url') {\n index = cssText.indexOf('\"', i + 1);\n if (!index) {\n throw i + \": '\\\"' not found\";\n }\n this.href = cssText.slice(i + 1, index);\n i = index;\n state = 'media';\n }\n break;\n\n case \"'\":\n if (state === 'url') {\n index = cssText.indexOf(\"'\", i + 1);\n if (!index) {\n throw i + ': \"\\'\" not found';\n }\n this.href = cssText.slice(i + 1, index);\n i = index;\n state = 'media';\n }\n break;\n\n case ';':\n if (state === 'media') {\n if (buffer) {\n this.media.mediaText = buffer.trim();\n }\n }\n break;\n\n default:\n if (state === 'media') {\n buffer += character;\n }\n break;\n }\n }\n }\n});\n\n\n//.CommonJS\nexports.CSSImportRule = CSSOM.CSSImportRule;\n///CommonJS\n",
11
+ "//.CommonJS\nvar CSSOM = {\n\tCSSRule: require(\"./CSSRule\").CSSRule\n};\n///CommonJS\n\n\n/**\n * @constructor\n * @see https://drafts.csswg.org/cssom/#the-cssgroupingrule-interface\n */\nCSSOM.CSSGroupingRule = function CSSGroupingRule() {\n\tCSSOM.CSSRule.call(this);\n\tthis.cssRules = [];\n};\n\nCSSOM.CSSGroupingRule.prototype = new CSSOM.CSSRule();\nCSSOM.CSSGroupingRule.prototype.constructor = CSSOM.CSSGroupingRule;\n\n\n/**\n * Used to insert a new CSS rule to a list of CSS rules.\n *\n * @example\n * cssGroupingRule.cssText\n * -> \"body{margin:0;}\"\n * cssGroupingRule.insertRule(\"img{border:none;}\", 1)\n * -> 1\n * cssGroupingRule.cssText\n * -> \"body{margin:0;}img{border:none;}\"\n *\n * @param {string} rule\n * @param {number} [index]\n * @see https://www.w3.org/TR/cssom-1/#dom-cssgroupingrule-insertrule\n * @return {number} The index within the grouping rule's collection of the newly inserted rule.\n */\n CSSOM.CSSGroupingRule.prototype.insertRule = function insertRule(rule, index) {\n\tif (index < 0 || index > this.cssRules.length) {\n\t\tthrow new RangeError(\"INDEX_SIZE_ERR\");\n\t}\n\tvar cssRule = CSSOM.parse(rule).cssRules[0];\n\tcssRule.parentRule = this;\n\tthis.cssRules.splice(index, 0, cssRule);\n\treturn index;\n};\n\n/**\n * Used to delete a rule from the grouping rule.\n *\n * cssGroupingRule.cssText\n * -> \"img{border:none;}body{margin:0;}\"\n * cssGroupingRule.deleteRule(0)\n * cssGroupingRule.cssText\n * -> \"body{margin:0;}\"\n *\n * @param {number} index within the grouping rule's rule list of the rule to remove.\n * @see https://www.w3.org/TR/cssom-1/#dom-cssgroupingrule-deleterule\n */\n CSSOM.CSSGroupingRule.prototype.deleteRule = function deleteRule(index) {\n\tif (index < 0 || index >= this.cssRules.length) {\n\t\tthrow new RangeError(\"INDEX_SIZE_ERR\");\n\t}\n\tthis.cssRules.splice(index, 1)[0].parentRule = null;\n};\n\n//.CommonJS\nexports.CSSGroupingRule = CSSOM.CSSGroupingRule;\n///CommonJS\n",
12
+ "//.CommonJS\nvar CSSOM = {\n CSSRule: require(\"./CSSRule\").CSSRule,\n CSSGroupingRule: require(\"./CSSGroupingRule\").CSSGroupingRule\n};\n///CommonJS\n\n\n/**\n * @constructor\n * @see https://www.w3.org/TR/css-conditional-3/#the-cssconditionrule-interface\n */\nCSSOM.CSSConditionRule = function CSSConditionRule() {\n CSSOM.CSSGroupingRule.call(this);\n this.cssRules = [];\n};\n\nCSSOM.CSSConditionRule.prototype = new CSSOM.CSSGroupingRule();\nCSSOM.CSSConditionRule.prototype.constructor = CSSOM.CSSConditionRule;\nCSSOM.CSSConditionRule.prototype.conditionText = ''\nCSSOM.CSSConditionRule.prototype.cssText = ''\n\n//.CommonJS\nexports.CSSConditionRule = CSSOM.CSSConditionRule;\n///CommonJS\n",
13
+ "//.CommonJS\nvar CSSOM = {\n\tCSSRule: require(\"./CSSRule\").CSSRule,\n\tCSSGroupingRule: require(\"./CSSGroupingRule\").CSSGroupingRule,\n\tCSSConditionRule: require(\"./CSSConditionRule\").CSSConditionRule,\n\tMediaList: require(\"./MediaList\").MediaList\n};\n///CommonJS\n\n\n/**\n * @constructor\n * @see http://dev.w3.org/csswg/cssom/#cssmediarule\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSMediaRule\n */\nCSSOM.CSSMediaRule = function CSSMediaRule() {\n\tCSSOM.CSSConditionRule.call(this);\n\tthis.media = new CSSOM.MediaList();\n};\n\nCSSOM.CSSMediaRule.prototype = new CSSOM.CSSConditionRule();\nCSSOM.CSSMediaRule.prototype.constructor = CSSOM.CSSMediaRule;\nCSSOM.CSSMediaRule.prototype.type = 4;\n\n// https://opensource.apple.com/source/WebCore/WebCore-7611.1.21.161.3/css/CSSMediaRule.cpp\nObject.defineProperties(CSSOM.CSSMediaRule.prototype, {\n \"conditionText\": {\n get: function() {\n return this.media.mediaText;\n },\n set: function(value) {\n this.media.mediaText = value;\n },\n configurable: true,\n enumerable: true\n },\n \"cssText\": {\n get: function() {\n var cssTexts = [];\n for (var i=0, length=this.cssRules.length; i < length; i++) {\n cssTexts.push(this.cssRules[i].cssText);\n }\n return \"@media \" + this.media.mediaText + \" {\" + cssTexts.join(\"\") + \"}\";\n },\n configurable: true,\n enumerable: true\n }\n});\n\n\n//.CommonJS\nexports.CSSMediaRule = CSSOM.CSSMediaRule;\n///CommonJS\n",
14
+ "//.CommonJS\nvar CSSOM = {\n CSSRule: require(\"./CSSRule\").CSSRule,\n CSSGroupingRule: require(\"./CSSGroupingRule\").CSSGroupingRule,\n CSSConditionRule: require(\"./CSSConditionRule\").CSSConditionRule\n};\n///CommonJS\n\n\n/**\n * @constructor\n * @see https://drafts.csswg.org/css-conditional-3/#the-csssupportsrule-interface\n */\nCSSOM.CSSSupportsRule = function CSSSupportsRule() {\n CSSOM.CSSConditionRule.call(this);\n};\n\nCSSOM.CSSSupportsRule.prototype = new CSSOM.CSSConditionRule();\nCSSOM.CSSSupportsRule.prototype.constructor = CSSOM.CSSSupportsRule;\nCSSOM.CSSSupportsRule.prototype.type = 12;\n\nObject.defineProperty(CSSOM.CSSSupportsRule.prototype, \"cssText\", {\n get: function() {\n var cssTexts = [];\n\n for (var i = 0, length = this.cssRules.length; i < length; i++) {\n cssTexts.push(this.cssRules[i].cssText);\n }\n\n return \"@supports \" + this.conditionText + \" {\" + cssTexts.join(\"\") + \"}\";\n }\n});\n\n//.CommonJS\nexports.CSSSupportsRule = CSSOM.CSSSupportsRule;\n///CommonJS\n",
15
+ "//.CommonJS\nvar CSSOM = {\n\tCSSStyleDeclaration: require(\"./CSSStyleDeclaration\").CSSStyleDeclaration,\n\tCSSRule: require(\"./CSSRule\").CSSRule\n};\n///CommonJS\n\n\n/**\n * @constructor\n * @see http://dev.w3.org/csswg/cssom/#css-font-face-rule\n */\nCSSOM.CSSFontFaceRule = function CSSFontFaceRule() {\n\tCSSOM.CSSRule.call(this);\n\tthis.style = new CSSOM.CSSStyleDeclaration();\n\tthis.style.parentRule = this;\n};\n\nCSSOM.CSSFontFaceRule.prototype = new CSSOM.CSSRule();\nCSSOM.CSSFontFaceRule.prototype.constructor = CSSOM.CSSFontFaceRule;\nCSSOM.CSSFontFaceRule.prototype.type = 5;\n//FIXME\n//CSSOM.CSSFontFaceRule.prototype.insertRule = CSSStyleSheet.prototype.insertRule;\n//CSSOM.CSSFontFaceRule.prototype.deleteRule = CSSStyleSheet.prototype.deleteRule;\n\n// http://www.opensource.apple.com/source/WebCore/WebCore-955.66.1/css/WebKitCSSFontFaceRule.cpp\nObject.defineProperty(CSSOM.CSSFontFaceRule.prototype, \"cssText\", {\n get: function() {\n return \"@font-face {\" + this.style.cssText + \"}\";\n }\n});\n\n\n//.CommonJS\nexports.CSSFontFaceRule = CSSOM.CSSFontFaceRule;\n///CommonJS\n",
16
+ "//.CommonJS\nvar CSSOM = {\n\tCSSRule: require(\"./CSSRule\").CSSRule\n};\n///CommonJS\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/shadow-dom/#host-at-rule\n */\nCSSOM.CSSHostRule = function CSSHostRule() {\n\tCSSOM.CSSRule.call(this);\n\tthis.cssRules = [];\n};\n\nCSSOM.CSSHostRule.prototype = new CSSOM.CSSRule();\nCSSOM.CSSHostRule.prototype.constructor = CSSOM.CSSHostRule;\nCSSOM.CSSHostRule.prototype.type = 1001;\n//FIXME\n//CSSOM.CSSHostRule.prototype.insertRule = CSSStyleSheet.prototype.insertRule;\n//CSSOM.CSSHostRule.prototype.deleteRule = CSSStyleSheet.prototype.deleteRule;\n\nObject.defineProperty(CSSOM.CSSHostRule.prototype, \"cssText\", {\n\tget: function() {\n\t\tvar cssTexts = [];\n\t\tfor (var i=0, length=this.cssRules.length; i < length; i++) {\n\t\t\tcssTexts.push(this.cssRules[i].cssText);\n\t\t}\n\t\treturn \"@host {\" + cssTexts.join(\"\") + \"}\";\n\t}\n});\n\n\n//.CommonJS\nexports.CSSHostRule = CSSOM.CSSHostRule;\n///CommonJS\n",
17
+ "//.CommonJS\nvar CSSOM = {\n\tCSSRule: require(\"./CSSRule\").CSSRule,\n\tCSSStyleDeclaration: require('./CSSStyleDeclaration').CSSStyleDeclaration\n};\n///CommonJS\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/css3-animations/#DOM-CSSKeyframeRule\n */\nCSSOM.CSSKeyframeRule = function CSSKeyframeRule() {\n\tCSSOM.CSSRule.call(this);\n\tthis.keyText = '';\n\tthis.style = new CSSOM.CSSStyleDeclaration();\n\tthis.style.parentRule = this;\n};\n\nCSSOM.CSSKeyframeRule.prototype = new CSSOM.CSSRule();\nCSSOM.CSSKeyframeRule.prototype.constructor = CSSOM.CSSKeyframeRule;\nCSSOM.CSSKeyframeRule.prototype.type = 8;\n//FIXME\n//CSSOM.CSSKeyframeRule.prototype.insertRule = CSSStyleSheet.prototype.insertRule;\n//CSSOM.CSSKeyframeRule.prototype.deleteRule = CSSStyleSheet.prototype.deleteRule;\n\n// http://www.opensource.apple.com/source/WebCore/WebCore-955.66.1/css/WebKitCSSKeyframeRule.cpp\nObject.defineProperty(CSSOM.CSSKeyframeRule.prototype, \"cssText\", {\n get: function() {\n return this.keyText + \" {\" + this.style.cssText + \"} \";\n }\n});\n\n\n//.CommonJS\nexports.CSSKeyframeRule = CSSOM.CSSKeyframeRule;\n///CommonJS\n",
18
+ "//.CommonJS\nvar CSSOM = {\n\tCSSRule: require(\"./CSSRule\").CSSRule\n};\n///CommonJS\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/css3-animations/#DOM-CSSKeyframesRule\n */\nCSSOM.CSSKeyframesRule = function CSSKeyframesRule() {\n\tCSSOM.CSSRule.call(this);\n\tthis.name = '';\n\tthis.cssRules = [];\n};\n\nCSSOM.CSSKeyframesRule.prototype = new CSSOM.CSSRule();\nCSSOM.CSSKeyframesRule.prototype.constructor = CSSOM.CSSKeyframesRule;\nCSSOM.CSSKeyframesRule.prototype.type = 7;\n//FIXME\n//CSSOM.CSSKeyframesRule.prototype.insertRule = CSSStyleSheet.prototype.insertRule;\n//CSSOM.CSSKeyframesRule.prototype.deleteRule = CSSStyleSheet.prototype.deleteRule;\n\n// http://www.opensource.apple.com/source/WebCore/WebCore-955.66.1/css/WebKitCSSKeyframesRule.cpp\nObject.defineProperty(CSSOM.CSSKeyframesRule.prototype, \"cssText\", {\n get: function() {\n var cssTexts = [];\n for (var i=0, length=this.cssRules.length; i < length; i++) {\n cssTexts.push(\" \" + this.cssRules[i].cssText);\n }\n return \"@\" + (this._vendorPrefix || '') + \"keyframes \" + this.name + \" { \\n\" + cssTexts.join(\"\\n\") + \"\\n}\";\n }\n});\n\n\n//.CommonJS\nexports.CSSKeyframesRule = CSSOM.CSSKeyframesRule;\n///CommonJS\n",
19
+ "//.CommonJS\nvar CSSOM = {};\n///CommonJS\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue\n *\n * TODO: add if needed\n */\nCSSOM.CSSValue = function CSSValue() {\n};\n\nCSSOM.CSSValue.prototype = {\n\tconstructor: CSSOM.CSSValue,\n\n\t// @see: http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue\n\tset cssText(text) {\n\t\tvar name = this._getConstructorName();\n\n\t\tthrow new Error('DOMException: property \"cssText\" of \"' + name + '\" is readonly and can not be replaced with \"' + text + '\"!');\n\t},\n\n\tget cssText() {\n\t\tvar name = this._getConstructorName();\n\n\t\tthrow new Error('getter \"cssText\" of \"' + name + '\" is not implemented!');\n\t},\n\n\t_getConstructorName: function() {\n\t\tvar s = this.constructor.toString(),\n\t\t\t\tc = s.match(/function\\s([^\\(]+)/),\n\t\t\t\tname = c[1];\n\n\t\treturn name;\n\t}\n};\n\n\n//.CommonJS\nexports.CSSValue = CSSOM.CSSValue;\n///CommonJS\n",
20
+ "//.CommonJS\nvar CSSOM = {\n\tCSSValue: require('./CSSValue').CSSValue\n};\n///CommonJS\n\n\n/**\n * @constructor\n * @see http://msdn.microsoft.com/en-us/library/ms537634(v=vs.85).aspx\n *\n */\nCSSOM.CSSValueExpression = function CSSValueExpression(token, idx) {\n\tthis._token = token;\n\tthis._idx = idx;\n};\n\nCSSOM.CSSValueExpression.prototype = new CSSOM.CSSValue();\nCSSOM.CSSValueExpression.prototype.constructor = CSSOM.CSSValueExpression;\n\n/**\n * parse css expression() value\n *\n * @return {Object}\n * - error:\n * or\n * - idx:\n * - expression:\n *\n * Example:\n *\n * .selector {\n *\t\tzoom: expression(documentElement.clientWidth > 1000 ? '1000px' : 'auto');\n * }\n */\nCSSOM.CSSValueExpression.prototype.parse = function() {\n\tvar token = this._token,\n\t\t\tidx = this._idx;\n\n\tvar character = '',\n\t\t\texpression = '',\n\t\t\terror = '',\n\t\t\tinfo,\n\t\t\tparen = [];\n\n\n\tfor (; ; ++idx) {\n\t\tcharacter = token.charAt(idx);\n\n\t\t// end of token\n\t\tif (character === '') {\n\t\t\terror = 'css expression error: unfinished expression!';\n\t\t\tbreak;\n\t\t}\n\n\t\tswitch(character) {\n\t\t\tcase '(':\n\t\t\t\tparen.push(character);\n\t\t\t\texpression += character;\n\t\t\t\tbreak;\n\n\t\t\tcase ')':\n\t\t\t\tparen.pop(character);\n\t\t\t\texpression += character;\n\t\t\t\tbreak;\n\n\t\t\tcase '/':\n\t\t\t\tif ((info = this._parseJSComment(token, idx))) { // comment?\n\t\t\t\t\tif (info.error) {\n\t\t\t\t\t\terror = 'css expression error: unfinished comment in expression!';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tidx = info.idx;\n\t\t\t\t\t\t// ignore the comment\n\t\t\t\t\t}\n\t\t\t\t} else if ((info = this._parseJSRexExp(token, idx))) { // regexp\n\t\t\t\t\tidx = info.idx;\n\t\t\t\t\texpression += info.text;\n\t\t\t\t} else { // other\n\t\t\t\t\texpression += character;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"'\":\n\t\t\tcase '\"':\n\t\t\t\tinfo = this._parseJSString(token, idx, character);\n\t\t\t\tif (info) { // string\n\t\t\t\t\tidx = info.idx;\n\t\t\t\t\texpression += info.text;\n\t\t\t\t} else {\n\t\t\t\t\texpression += character;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\texpression += character;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif (error) {\n\t\t\tbreak;\n\t\t}\n\n\t\t// end of expression\n\t\tif (paren.length === 0) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tvar ret;\n\tif (error) {\n\t\tret = {\n\t\t\terror: error\n\t\t};\n\t} else {\n\t\tret = {\n\t\t\tidx: idx,\n\t\t\texpression: expression\n\t\t};\n\t}\n\n\treturn ret;\n};\n\n\n/**\n *\n * @return {Object|false}\n * - idx:\n * - text:\n * or\n * - error:\n * or\n * false\n *\n */\nCSSOM.CSSValueExpression.prototype._parseJSComment = function(token, idx) {\n\tvar nextChar = token.charAt(idx + 1),\n\t\t\ttext;\n\n\tif (nextChar === '/' || nextChar === '*') {\n\t\tvar startIdx = idx,\n\t\t\t\tendIdx,\n\t\t\t\tcommentEndChar;\n\n\t\tif (nextChar === '/') { // line comment\n\t\t\tcommentEndChar = '\\n';\n\t\t} else if (nextChar === '*') { // block comment\n\t\t\tcommentEndChar = '*/';\n\t\t}\n\n\t\tendIdx = token.indexOf(commentEndChar, startIdx + 1 + 1);\n\t\tif (endIdx !== -1) {\n\t\t\tendIdx = endIdx + commentEndChar.length - 1;\n\t\t\ttext = token.substring(idx, endIdx + 1);\n\t\t\treturn {\n\t\t\t\tidx: endIdx,\n\t\t\t\ttext: text\n\t\t\t};\n\t\t} else {\n\t\t\tvar error = 'css expression error: unfinished comment in expression!';\n\t\t\treturn {\n\t\t\t\terror: error\n\t\t\t};\n\t\t}\n\t} else {\n\t\treturn false;\n\t}\n};\n\n\n/**\n *\n * @return {Object|false}\n *\t\t\t\t\t- idx:\n *\t\t\t\t\t- text:\n *\t\t\t\t\tor \n *\t\t\t\t\tfalse\n *\n */\nCSSOM.CSSValueExpression.prototype._parseJSString = function(token, idx, sep) {\n\tvar endIdx = this._findMatchedIdx(token, idx, sep),\n\t\t\ttext;\n\n\tif (endIdx === -1) {\n\t\treturn false;\n\t} else {\n\t\ttext = token.substring(idx, endIdx + sep.length);\n\n\t\treturn {\n\t\t\tidx: endIdx,\n\t\t\ttext: text\n\t\t};\n\t}\n};\n\n\n/**\n * parse regexp in css expression\n *\n * @return {Object|false}\n *\t\t\t\t- idx:\n *\t\t\t\t- regExp:\n *\t\t\t\tor \n *\t\t\t\tfalse\n */\n\n/*\n\nall legal RegExp\n \n/a/\n(/a/)\n[/a/]\n[12, /a/]\n\n!/a/\n\n+/a/\n-/a/\n* /a/\n/ /a/\n%/a/\n\n===/a/\n!==/a/\n==/a/\n!=/a/\n>/a/\n>=/a/\n</a/\n<=/a/\n\n&/a/\n|/a/\n^/a/\n~/a/\n<</a/\n>>/a/\n>>>/a/\n\n&&/a/\n||/a/\n?/a/\n=/a/\n,/a/\n\n\t\tdelete /a/\n\t\t\t\tin /a/\ninstanceof /a/\n\t\t\t\tnew /a/\n\t\ttypeof /a/\n\t\t\tvoid /a/\n\n*/\nCSSOM.CSSValueExpression.prototype._parseJSRexExp = function(token, idx) {\n\tvar before = token.substring(0, idx).replace(/\\s+$/, \"\"),\n\t\t\tlegalRegx = [\n\t\t\t\t/^$/,\n\t\t\t\t/\\($/,\n\t\t\t\t/\\[$/,\n\t\t\t\t/\\!$/,\n\t\t\t\t/\\+$/,\n\t\t\t\t/\\-$/,\n\t\t\t\t/\\*$/,\n\t\t\t\t/\\/\\s+/,\n\t\t\t\t/\\%$/,\n\t\t\t\t/\\=$/,\n\t\t\t\t/\\>$/,\n\t\t\t\t/<$/,\n\t\t\t\t/\\&$/,\n\t\t\t\t/\\|$/,\n\t\t\t\t/\\^$/,\n\t\t\t\t/\\~$/,\n\t\t\t\t/\\?$/,\n\t\t\t\t/\\,$/,\n\t\t\t\t/delete$/,\n\t\t\t\t/in$/,\n\t\t\t\t/instanceof$/,\n\t\t\t\t/new$/,\n\t\t\t\t/typeof$/,\n\t\t\t\t/void$/\n\t\t\t];\n\n\tvar isLegal = legalRegx.some(function(reg) {\n\t\treturn reg.test(before);\n\t});\n\n\tif (!isLegal) {\n\t\treturn false;\n\t} else {\n\t\tvar sep = '/';\n\n\t\t// same logic as string\n\t\treturn this._parseJSString(token, idx, sep);\n\t}\n};\n\n\n/**\n *\n * find next sep(same line) index in `token`\n *\n * @return {Number}\n *\n */\nCSSOM.CSSValueExpression.prototype._findMatchedIdx = function(token, idx, sep) {\n\tvar startIdx = idx,\n\t\t\tendIdx;\n\n\tvar NOT_FOUND = -1;\n\n\twhile(true) {\n\t\tendIdx = token.indexOf(sep, startIdx + 1);\n\n\t\tif (endIdx === -1) { // not found\n\t\t\tendIdx = NOT_FOUND;\n\t\t\tbreak;\n\t\t} else {\n\t\t\tvar text = token.substring(idx + 1, endIdx),\n\t\t\t\t\tmatched = text.match(/\\\\+$/);\n\t\t\tif (!matched || matched[0] % 2 === 0) { // not escaped\n\t\t\t\tbreak;\n\t\t\t} else {\n\t\t\t\tstartIdx = endIdx;\n\t\t\t}\n\t\t}\n\t}\n\n\t// boundary must be in the same line(js sting or regexp)\n\tvar nextNewLineIdx = token.indexOf('\\n', idx + 1);\n\tif (nextNewLineIdx < endIdx) {\n\t\tendIdx = NOT_FOUND;\n\t}\n\n\n\treturn endIdx;\n};\n\n\n\n\n//.CommonJS\nexports.CSSValueExpression = CSSOM.CSSValueExpression;\n///CommonJS\n",
21
+ "//.CommonJS\nvar CSSOM = {};\n///CommonJS\n\n\n/**\n * @constructor\n * @see https://developer.mozilla.org/en/CSS/@-moz-document\n */\nCSSOM.MatcherList = function MatcherList(){\n this.length = 0;\n};\n\nCSSOM.MatcherList.prototype = {\n\n constructor: CSSOM.MatcherList,\n\n /**\n * @return {string}\n */\n get matcherText() {\n return Array.prototype.join.call(this, \", \");\n },\n\n /**\n * @param {string} value\n */\n set matcherText(value) {\n // just a temporary solution, actually it may be wrong by just split the value with ',', because a url can include ','.\n var values = value.split(\",\");\n var length = this.length = values.length;\n for (var i=0; i<length; i++) {\n this[i] = values[i].trim();\n }\n },\n\n /**\n * @param {string} matcher\n */\n appendMatcher: function(matcher) {\n if (Array.prototype.indexOf.call(this, matcher) === -1) {\n this[this.length] = matcher;\n this.length++;\n }\n },\n\n /**\n * @param {string} matcher\n */\n deleteMatcher: function(matcher) {\n var index = Array.prototype.indexOf.call(this, matcher);\n if (index !== -1) {\n Array.prototype.splice.call(this, index, 1);\n }\n }\n\n};\n\n\n//.CommonJS\nexports.MatcherList = CSSOM.MatcherList;\n///CommonJS\n",
22
+ "//.CommonJS\nvar CSSOM = {\n CSSRule: require(\"./CSSRule\").CSSRule,\n MatcherList: require(\"./MatcherList\").MatcherList\n};\n///CommonJS\n\n\n/**\n * @constructor\n * @see https://developer.mozilla.org/en/CSS/@-moz-document\n */\nCSSOM.CSSDocumentRule = function CSSDocumentRule() {\n CSSOM.CSSRule.call(this);\n this.matcher = new CSSOM.MatcherList();\n this.cssRules = [];\n};\n\nCSSOM.CSSDocumentRule.prototype = new CSSOM.CSSRule();\nCSSOM.CSSDocumentRule.prototype.constructor = CSSOM.CSSDocumentRule;\nCSSOM.CSSDocumentRule.prototype.type = 10;\n//FIXME\n//CSSOM.CSSDocumentRule.prototype.insertRule = CSSStyleSheet.prototype.insertRule;\n//CSSOM.CSSDocumentRule.prototype.deleteRule = CSSStyleSheet.prototype.deleteRule;\n\nObject.defineProperty(CSSOM.CSSDocumentRule.prototype, \"cssText\", {\n get: function() {\n var cssTexts = [];\n for (var i=0, length=this.cssRules.length; i < length; i++) {\n cssTexts.push(this.cssRules[i].cssText);\n }\n return \"@-moz-document \" + this.matcher.matcherText + \" {\" + cssTexts.join(\"\") + \"}\";\n }\n});\n\n\n//.CommonJS\nexports.CSSDocumentRule = CSSOM.CSSDocumentRule;\n///CommonJS\n",
23
+ "//.CommonJS\nvar CSSOM = {};\n///CommonJS\n\n\n/**\n * @param {string} token\n */\nCSSOM.parse = function parse(token) {\n\n\tvar i = 0;\n\n\t/**\n\t\t\"before-selector\" or\n\t\t\"selector\" or\n\t\t\"atRule\" or\n\t\t\"atBlock\" or\n\t\t\"conditionBlock\" or\n\t\t\"before-name\" or\n\t\t\"name\" or\n\t\t\"before-value\" or\n\t\t\"value\"\n\t*/\n\tvar state = \"before-selector\";\n\n\tvar index;\n\tvar buffer = \"\";\n\tvar valueParenthesisDepth = 0;\n\n\tvar SIGNIFICANT_WHITESPACE = {\n\t\t\"selector\": true,\n\t\t\"value\": true,\n\t\t\"value-parenthesis\": true,\n\t\t\"atRule\": true,\n\t\t\"importRule-begin\": true,\n\t\t\"importRule\": true,\n\t\t\"atBlock\": true,\n\t\t\"conditionBlock\": true,\n\t\t'documentRule-begin': true\n\t};\n\n\tvar styleSheet = new CSSOM.CSSStyleSheet();\n\n\t// @type CSSStyleSheet|CSSMediaRule|CSSSupportsRule|CSSFontFaceRule|CSSKeyframesRule|CSSDocumentRule\n\tvar currentScope = styleSheet;\n\n\t// @type CSSMediaRule|CSSSupportsRule|CSSKeyframesRule|CSSDocumentRule\n\tvar parentRule;\n\n\tvar ancestorRules = [];\n\tvar hasAncestors = false;\n\tvar prevScope;\n\n\tvar name, priority=\"\", styleRule, mediaRule, supportsRule, importRule, fontFaceRule, keyframesRule, documentRule, hostRule;\n\n\tvar atKeyframesRegExp = /@(-(?:\\w+-)+)?keyframes/g;\n\n\tvar parseError = function(message) {\n\t\tvar lines = token.substring(0, i).split('\\n');\n\t\tvar lineCount = lines.length;\n\t\tvar charCount = lines.pop().length + 1;\n\t\tvar error = new Error(message + ' (line ' + lineCount + ', char ' + charCount + ')');\n\t\terror.line = lineCount;\n\t\t/* jshint sub : true */\n\t\terror['char'] = charCount;\n\t\terror.styleSheet = styleSheet;\n\t\tthrow error;\n\t};\n\n\tfor (var character; (character = token.charAt(i)); i++) {\n\n\t\tswitch (character) {\n\n\t\tcase \" \":\n\t\tcase \"\\t\":\n\t\tcase \"\\r\":\n\t\tcase \"\\n\":\n\t\tcase \"\\f\":\n\t\t\tif (SIGNIFICANT_WHITESPACE[state]) {\n\t\t\t\tbuffer += character;\n\t\t\t}\n\t\t\tbreak;\n\n\t\t// String\n\t\tcase '\"':\n\t\t\tindex = i + 1;\n\t\t\tdo {\n\t\t\t\tindex = token.indexOf('\"', index) + 1;\n\t\t\t\tif (!index) {\n\t\t\t\t\tparseError('Unmatched \"');\n\t\t\t\t}\n\t\t\t} while (token[index - 2] === '\\\\');\n\t\t\tbuffer += token.slice(i, index);\n\t\t\ti = index - 1;\n\t\t\tswitch (state) {\n\t\t\t\tcase 'before-value':\n\t\t\t\t\tstate = 'value';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'importRule-begin':\n\t\t\t\t\tstate = 'importRule';\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase \"'\":\n\t\t\tindex = i + 1;\n\t\t\tdo {\n\t\t\t\tindex = token.indexOf(\"'\", index) + 1;\n\t\t\t\tif (!index) {\n\t\t\t\t\tparseError(\"Unmatched '\");\n\t\t\t\t}\n\t\t\t} while (token[index - 2] === '\\\\');\n\t\t\tbuffer += token.slice(i, index);\n\t\t\ti = index - 1;\n\t\t\tswitch (state) {\n\t\t\t\tcase 'before-value':\n\t\t\t\t\tstate = 'value';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'importRule-begin':\n\t\t\t\t\tstate = 'importRule';\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tbreak;\n\n\t\t// Comment\n\t\tcase \"/\":\n\t\t\tif (token.charAt(i + 1) === \"*\") {\n\t\t\t\ti += 2;\n\t\t\t\tindex = token.indexOf(\"*/\", i);\n\t\t\t\tif (index === -1) {\n\t\t\t\t\tparseError(\"Missing */\");\n\t\t\t\t} else {\n\t\t\t\t\ti = index + 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tbuffer += character;\n\t\t\t}\n\t\t\tif (state === \"importRule-begin\") {\n\t\t\t\tbuffer += \" \";\n\t\t\t\tstate = \"importRule\";\n\t\t\t}\n\t\t\tbreak;\n\n\t\t// At-rule\n\t\tcase \"@\":\n\t\t\tif (token.indexOf(\"@-moz-document\", i) === i) {\n\t\t\t\tstate = \"documentRule-begin\";\n\t\t\t\tdocumentRule = new CSSOM.CSSDocumentRule();\n\t\t\t\tdocumentRule.__starts = i;\n\t\t\t\ti += \"-moz-document\".length;\n\t\t\t\tbuffer = \"\";\n\t\t\t\tbreak;\n\t\t\t} else if (token.indexOf(\"@media\", i) === i) {\n\t\t\t\tstate = \"atBlock\";\n\t\t\t\tmediaRule = new CSSOM.CSSMediaRule();\n\t\t\t\tmediaRule.__starts = i;\n\t\t\t\ti += \"media\".length;\n\t\t\t\tbuffer = \"\";\n\t\t\t\tbreak;\n\t\t\t} else if (token.indexOf(\"@supports\", i) === i) {\n\t\t\t\tstate = \"conditionBlock\";\n\t\t\t\tsupportsRule = new CSSOM.CSSSupportsRule();\n\t\t\t\tsupportsRule.__starts = i;\n\t\t\t\ti += \"supports\".length;\n\t\t\t\tbuffer = \"\";\n\t\t\t\tbreak;\n\t\t\t} else if (token.indexOf(\"@host\", i) === i) {\n\t\t\t\tstate = \"hostRule-begin\";\n\t\t\t\ti += \"host\".length;\n\t\t\t\thostRule = new CSSOM.CSSHostRule();\n\t\t\t\thostRule.__starts = i;\n\t\t\t\tbuffer = \"\";\n\t\t\t\tbreak;\n\t\t\t} else if (token.indexOf(\"@import\", i) === i) {\n\t\t\t\tstate = \"importRule-begin\";\n\t\t\t\ti += \"import\".length;\n\t\t\t\tbuffer += \"@import\";\n\t\t\t\tbreak;\n\t\t\t} else if (token.indexOf(\"@font-face\", i) === i) {\n\t\t\t\tstate = \"fontFaceRule-begin\";\n\t\t\t\ti += \"font-face\".length;\n\t\t\t\tfontFaceRule = new CSSOM.CSSFontFaceRule();\n\t\t\t\tfontFaceRule.__starts = i;\n\t\t\t\tbuffer = \"\";\n\t\t\t\tbreak;\n\t\t\t} else {\n\t\t\t\tatKeyframesRegExp.lastIndex = i;\n\t\t\t\tvar matchKeyframes = atKeyframesRegExp.exec(token);\n\t\t\t\tif (matchKeyframes && matchKeyframes.index === i) {\n\t\t\t\t\tstate = \"keyframesRule-begin\";\n\t\t\t\t\tkeyframesRule = new CSSOM.CSSKeyframesRule();\n\t\t\t\t\tkeyframesRule.__starts = i;\n\t\t\t\t\tkeyframesRule._vendorPrefix = matchKeyframes[1]; // Will come out as undefined if no prefix was found\n\t\t\t\t\ti += matchKeyframes[0].length - 1;\n\t\t\t\t\tbuffer = \"\";\n\t\t\t\t\tbreak;\n\t\t\t\t} else if (state === \"selector\") {\n\t\t\t\t\tstate = \"atRule\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tbuffer += character;\n\t\t\tbreak;\n\n\t\tcase \"{\":\n\t\t\tif (state === \"selector\" || state === \"atRule\") {\n\t\t\t\tstyleRule.selectorText = buffer.trim();\n\t\t\t\tstyleRule.style.__starts = i;\n\t\t\t\tbuffer = \"\";\n\t\t\t\tstate = \"before-name\";\n\t\t\t} else if (state === \"atBlock\") {\n\t\t\t\tmediaRule.media.mediaText = buffer.trim();\n\n\t\t\t\tif (parentRule) {\n\t\t\t\t\tancestorRules.push(parentRule);\n\t\t\t\t}\n\n\t\t\t\tcurrentScope = parentRule = mediaRule;\n\t\t\t\tmediaRule.parentStyleSheet = styleSheet;\n\t\t\t\tbuffer = \"\";\n\t\t\t\tstate = \"before-selector\";\n\t\t\t} else if (state === \"conditionBlock\") {\n\t\t\t\tsupportsRule.conditionText = buffer.trim();\n\n\t\t\t\tif (parentRule) {\n\t\t\t\t\tancestorRules.push(parentRule);\n\t\t\t\t}\n\n\t\t\t\tcurrentScope = parentRule = supportsRule;\n\t\t\t\tsupportsRule.parentStyleSheet = styleSheet;\n\t\t\t\tbuffer = \"\";\n\t\t\t\tstate = \"before-selector\";\n\t\t\t} else if (state === \"hostRule-begin\") {\n\t\t\t\tif (parentRule) {\n\t\t\t\t\tancestorRules.push(parentRule);\n\t\t\t\t}\n\n\t\t\t\tcurrentScope = parentRule = hostRule;\n\t\t\t\thostRule.parentStyleSheet = styleSheet;\n\t\t\t\tbuffer = \"\";\n\t\t\t\tstate = \"before-selector\";\n\t\t\t} else if (state === \"fontFaceRule-begin\") {\n\t\t\t\tif (parentRule) {\n\t\t\t\t\tfontFaceRule.parentRule = parentRule;\n\t\t\t\t}\n\t\t\t\tfontFaceRule.parentStyleSheet = styleSheet;\n\t\t\t\tstyleRule = fontFaceRule;\n\t\t\t\tbuffer = \"\";\n\t\t\t\tstate = \"before-name\";\n\t\t\t} else if (state === \"keyframesRule-begin\") {\n\t\t\t\tkeyframesRule.name = buffer.trim();\n\t\t\t\tif (parentRule) {\n\t\t\t\t\tancestorRules.push(parentRule);\n\t\t\t\t\tkeyframesRule.parentRule = parentRule;\n\t\t\t\t}\n\t\t\t\tkeyframesRule.parentStyleSheet = styleSheet;\n\t\t\t\tcurrentScope = parentRule = keyframesRule;\n\t\t\t\tbuffer = \"\";\n\t\t\t\tstate = \"keyframeRule-begin\";\n\t\t\t} else if (state === \"keyframeRule-begin\") {\n\t\t\t\tstyleRule = new CSSOM.CSSKeyframeRule();\n\t\t\t\tstyleRule.keyText = buffer.trim();\n\t\t\t\tstyleRule.__starts = i;\n\t\t\t\tbuffer = \"\";\n\t\t\t\tstate = \"before-name\";\n\t\t\t} else if (state === \"documentRule-begin\") {\n\t\t\t\t// FIXME: what if this '{' is in the url text of the match function?\n\t\t\t\tdocumentRule.matcher.matcherText = buffer.trim();\n\t\t\t\tif (parentRule) {\n\t\t\t\t\tancestorRules.push(parentRule);\n\t\t\t\t\tdocumentRule.parentRule = parentRule;\n\t\t\t\t}\n\t\t\t\tcurrentScope = parentRule = documentRule;\n\t\t\t\tdocumentRule.parentStyleSheet = styleSheet;\n\t\t\t\tbuffer = \"\";\n\t\t\t\tstate = \"before-selector\";\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase \":\":\n\t\t\tif (state === \"name\") {\n\t\t\t\tname = buffer.trim();\n\t\t\t\tbuffer = \"\";\n\t\t\t\tstate = \"before-value\";\n\t\t\t} else {\n\t\t\t\tbuffer += character;\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase \"(\":\n\t\t\tif (state === 'value') {\n\t\t\t\t// ie css expression mode\n\t\t\t\tif (buffer.trim() === 'expression') {\n\t\t\t\t\tvar info = (new CSSOM.CSSValueExpression(token, i)).parse();\n\n\t\t\t\t\tif (info.error) {\n\t\t\t\t\t\tparseError(info.error);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbuffer += info.expression;\n\t\t\t\t\t\ti = info.idx;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tstate = 'value-parenthesis';\n\t\t\t\t\t//always ensure this is reset to 1 on transition\n\t\t\t\t\t//from value to value-parenthesis\n\t\t\t\t\tvalueParenthesisDepth = 1;\n\t\t\t\t\tbuffer += character;\n\t\t\t\t}\n\t\t\t} else if (state === 'value-parenthesis') {\n\t\t\t\tvalueParenthesisDepth++;\n\t\t\t\tbuffer += character;\n\t\t\t} else {\n\t\t\t\tbuffer += character;\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase \")\":\n\t\t\tif (state === 'value-parenthesis') {\n\t\t\t\tvalueParenthesisDepth--;\n\t\t\t\tif (valueParenthesisDepth === 0) state = 'value';\n\t\t\t}\n\t\t\tbuffer += character;\n\t\t\tbreak;\n\n\t\tcase \"!\":\n\t\t\tif (state === \"value\" && token.indexOf(\"!important\", i) === i) {\n\t\t\t\tpriority = \"important\";\n\t\t\t\ti += \"important\".length;\n\t\t\t} else {\n\t\t\t\tbuffer += character;\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase \";\":\n\t\t\tswitch (state) {\n\t\t\t\tcase \"value\":\n\t\t\t\t\tstyleRule.style.setProperty(name, buffer.trim(), priority);\n\t\t\t\t\tpriority = \"\";\n\t\t\t\t\tbuffer = \"\";\n\t\t\t\t\tstate = \"before-name\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"atRule\":\n\t\t\t\t\tbuffer = \"\";\n\t\t\t\t\tstate = \"before-selector\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"importRule\":\n\t\t\t\t\timportRule = new CSSOM.CSSImportRule();\n\t\t\t\t\timportRule.parentStyleSheet = importRule.styleSheet.parentStyleSheet = styleSheet;\n\t\t\t\t\timportRule.cssText = buffer + character;\n\t\t\t\t\tstyleSheet.cssRules.push(importRule);\n\t\t\t\t\tbuffer = \"\";\n\t\t\t\t\tstate = \"before-selector\";\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tbuffer += character;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase \"}\":\n\t\t\tswitch (state) {\n\t\t\t\tcase \"value\":\n\t\t\t\t\tstyleRule.style.setProperty(name, buffer.trim(), priority);\n\t\t\t\t\tpriority = \"\";\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase \"before-name\":\n\t\t\t\tcase \"name\":\n\t\t\t\t\tstyleRule.__ends = i + 1;\n\t\t\t\t\tif (parentRule) {\n\t\t\t\t\t\tstyleRule.parentRule = parentRule;\n\t\t\t\t\t}\n\t\t\t\t\tstyleRule.parentStyleSheet = styleSheet;\n\t\t\t\t\tcurrentScope.cssRules.push(styleRule);\n\t\t\t\t\tbuffer = \"\";\n\t\t\t\t\tif (currentScope.constructor === CSSOM.CSSKeyframesRule) {\n\t\t\t\t\t\tstate = \"keyframeRule-begin\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstate = \"before-selector\";\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"keyframeRule-begin\":\n\t\t\t\tcase \"before-selector\":\n\t\t\t\tcase \"selector\":\n\t\t\t\t\t// End of media/supports/document rule.\n\t\t\t\t\tif (!parentRule) {\n\t\t\t\t\t\tparseError(\"Unexpected }\");\n\t\t\t\t\t}\n\n\t\t\t\t\t// Handle rules nested in @media or @supports\n\t\t\t\t\thasAncestors = ancestorRules.length > 0;\n\n\t\t\t\t\twhile (ancestorRules.length > 0) {\n\t\t\t\t\t\tparentRule = ancestorRules.pop();\n\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tparentRule.constructor.name === \"CSSMediaRule\"\n\t\t\t\t\t\t\t|| parentRule.constructor.name === \"CSSSupportsRule\"\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tprevScope = currentScope;\n\t\t\t\t\t\t\tcurrentScope = parentRule;\n\t\t\t\t\t\t\tcurrentScope.cssRules.push(prevScope);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (ancestorRules.length === 0) {\n\t\t\t\t\t\t\thasAncestors = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (!hasAncestors) {\n\t\t\t\t\t\tcurrentScope.__ends = i + 1;\n\t\t\t\t\t\tstyleSheet.cssRules.push(currentScope);\n\t\t\t\t\t\tcurrentScope = styleSheet;\n\t\t\t\t\t\tparentRule = null;\n\t\t\t\t\t}\n\n\t\t\t\t\tbuffer = \"\";\n\t\t\t\t\tstate = \"before-selector\";\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tswitch (state) {\n\t\t\t\tcase \"before-selector\":\n\t\t\t\t\tstate = \"selector\";\n\t\t\t\t\tstyleRule = new CSSOM.CSSStyleRule();\n\t\t\t\t\tstyleRule.__starts = i;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"before-name\":\n\t\t\t\t\tstate = \"name\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"before-value\":\n\t\t\t\t\tstate = \"value\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"importRule-begin\":\n\t\t\t\t\tstate = \"importRule\";\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tbuffer += character;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn styleSheet;\n};\n\n\n//.CommonJS\nexports.parse = CSSOM.parse;\n// The following modules cannot be included sooner due to the mutual dependency with parse.js\nCSSOM.CSSStyleSheet = require(\"./CSSStyleSheet\").CSSStyleSheet;\nCSSOM.CSSStyleRule = require(\"./CSSStyleRule\").CSSStyleRule;\nCSSOM.CSSImportRule = require(\"./CSSImportRule\").CSSImportRule;\nCSSOM.CSSGroupingRule = require(\"./CSSGroupingRule\").CSSGroupingRule;\nCSSOM.CSSMediaRule = require(\"./CSSMediaRule\").CSSMediaRule;\nCSSOM.CSSConditionRule = require(\"./CSSConditionRule\").CSSConditionRule;\nCSSOM.CSSSupportsRule = require(\"./CSSSupportsRule\").CSSSupportsRule;\nCSSOM.CSSFontFaceRule = require(\"./CSSFontFaceRule\").CSSFontFaceRule;\nCSSOM.CSSHostRule = require(\"./CSSHostRule\").CSSHostRule;\nCSSOM.CSSStyleDeclaration = require('./CSSStyleDeclaration').CSSStyleDeclaration;\nCSSOM.CSSKeyframeRule = require('./CSSKeyframeRule').CSSKeyframeRule;\nCSSOM.CSSKeyframesRule = require('./CSSKeyframesRule').CSSKeyframesRule;\nCSSOM.CSSValueExpression = require('./CSSValueExpression').CSSValueExpression;\nCSSOM.CSSDocumentRule = require('./CSSDocumentRule').CSSDocumentRule;\n///CommonJS\n",
24
+ "//.CommonJS\nvar CSSOM = {};\n///CommonJS\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration\n */\nCSSOM.CSSStyleDeclaration = function CSSStyleDeclaration(){\n\tthis.length = 0;\n\tthis.parentRule = null;\n\n\t// NON-STANDARD\n\tthis._importants = {};\n};\n\n\nCSSOM.CSSStyleDeclaration.prototype = {\n\n\tconstructor: CSSOM.CSSStyleDeclaration,\n\n\t/**\n\t *\n\t * @param {string} name\n\t * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-getPropertyValue\n\t * @return {string} the value of the property if it has been explicitly set for this declaration block.\n\t * Returns the empty string if the property has not been set.\n\t */\n\tgetPropertyValue: function(name) {\n\t\treturn this[name] || \"\";\n\t},\n\n\t/**\n\t *\n\t * @param {string} name\n\t * @param {string} value\n\t * @param {string} [priority=null] \"important\" or null\n\t * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-setProperty\n\t */\n\tsetProperty: function(name, value, priority) {\n\t\tif (this[name]) {\n\t\t\t// Property already exist. Overwrite it.\n\t\t\tvar index = Array.prototype.indexOf.call(this, name);\n\t\t\tif (index < 0) {\n\t\t\t\tthis[this.length] = name;\n\t\t\t\tthis.length++;\n\t\t\t}\n\t\t} else {\n\t\t\t// New property.\n\t\t\tthis[this.length] = name;\n\t\t\tthis.length++;\n\t\t}\n\t\tthis[name] = value + \"\";\n\t\tthis._importants[name] = priority;\n\t},\n\n\t/**\n\t *\n\t * @param {string} name\n\t * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-removeProperty\n\t * @return {string} the value of the property if it has been explicitly set for this declaration block.\n\t * Returns the empty string if the property has not been set or the property name does not correspond to a known CSS property.\n\t */\n\tremoveProperty: function(name) {\n\t\tif (!(name in this)) {\n\t\t\treturn \"\";\n\t\t}\n\t\tvar index = Array.prototype.indexOf.call(this, name);\n\t\tif (index < 0) {\n\t\t\treturn \"\";\n\t\t}\n\t\tvar prevValue = this[name];\n\t\tthis[name] = \"\";\n\n\t\t// That's what WebKit and Opera do\n\t\tArray.prototype.splice.call(this, index, 1);\n\n\t\t// That's what Firefox does\n\t\t//this[index] = \"\"\n\n\t\treturn prevValue;\n\t},\n\n\tgetPropertyCSSValue: function() {\n\t\t//FIXME\n\t},\n\n\t/**\n\t *\n\t * @param {String} name\n\t */\n\tgetPropertyPriority: function(name) {\n\t\treturn this._importants[name] || \"\";\n\t},\n\n\n\t/**\n\t * element.style.overflow = \"auto\"\n\t * element.style.getPropertyShorthand(\"overflow-x\")\n\t * -> \"overflow\"\n\t */\n\tgetPropertyShorthand: function() {\n\t\t//FIXME\n\t},\n\n\tisPropertyImplicit: function() {\n\t\t//FIXME\n\t},\n\n\t// Doesn't work in IE < 9\n\tget cssText(){\n\t\tvar properties = [];\n\t\tfor (var i=0, length=this.length; i < length; ++i) {\n\t\t\tvar name = this[i];\n\t\t\tvar value = this.getPropertyValue(name);\n\t\t\tvar priority = this.getPropertyPriority(name);\n\t\t\tif (priority) {\n\t\t\t\tpriority = \" !\" + priority;\n\t\t\t}\n\t\t\tproperties[i] = name + \": \" + value + priority + \";\";\n\t\t}\n\t\treturn properties.join(\" \");\n\t},\n\n\tset cssText(text){\n\t\tvar i, name;\n\t\tfor (i = this.length; i--;) {\n\t\t\tname = this[i];\n\t\t\tthis[name] = \"\";\n\t\t}\n\t\tArray.prototype.splice.call(this, 0, this.length);\n\t\tthis._importants = {};\n\n\t\tvar dummyRule = CSSOM.parse('#bogus{' + text + '}').cssRules[0].style;\n\t\tvar length = dummyRule.length;\n\t\tfor (i = 0; i < length; ++i) {\n\t\t\tname = dummyRule[i];\n\t\t\tthis.setProperty(dummyRule[i], dummyRule.getPropertyValue(name), dummyRule.getPropertyPriority(name));\n\t\t}\n\t}\n};\n\n\n//.CommonJS\nexports.CSSStyleDeclaration = CSSOM.CSSStyleDeclaration;\nCSSOM.parse = require('./parse').parse; // Cannot be included sooner due to the mutual dependency between parse.js and CSSStyleDeclaration.js\n///CommonJS\n",
25
+ "//.CommonJS\nvar CSSOM = {\n\tCSSStyleSheet: require(\"./CSSStyleSheet\").CSSStyleSheet,\n\tCSSRule: require(\"./CSSRule\").CSSRule,\n\tCSSStyleRule: require(\"./CSSStyleRule\").CSSStyleRule,\n\tCSSGroupingRule: require(\"./CSSGroupingRule\").CSSGroupingRule,\n\tCSSConditionRule: require(\"./CSSConditionRule\").CSSConditionRule,\n\tCSSMediaRule: require(\"./CSSMediaRule\").CSSMediaRule,\n\tCSSSupportsRule: require(\"./CSSSupportsRule\").CSSSupportsRule,\n\tCSSStyleDeclaration: require(\"./CSSStyleDeclaration\").CSSStyleDeclaration,\n\tCSSKeyframeRule: require('./CSSKeyframeRule').CSSKeyframeRule,\n\tCSSKeyframesRule: require('./CSSKeyframesRule').CSSKeyframesRule\n};\n///CommonJS\n\n\n/**\n * Produces a deep copy of stylesheet — the instance variables of stylesheet are copied recursively.\n * @param {CSSStyleSheet|CSSOM.CSSStyleSheet} stylesheet\n * @nosideeffects\n * @return {CSSOM.CSSStyleSheet}\n */\nCSSOM.clone = function clone(stylesheet) {\n\n\tvar cloned = new CSSOM.CSSStyleSheet();\n\n\tvar rules = stylesheet.cssRules;\n\tif (!rules) {\n\t\treturn cloned;\n\t}\n\n\tfor (var i = 0, rulesLength = rules.length; i < rulesLength; i++) {\n\t\tvar rule = rules[i];\n\t\tvar ruleClone = cloned.cssRules[i] = new rule.constructor();\n\n\t\tvar style = rule.style;\n\t\tif (style) {\n\t\t\tvar styleClone = ruleClone.style = new CSSOM.CSSStyleDeclaration();\n\t\t\tfor (var j = 0, styleLength = style.length; j < styleLength; j++) {\n\t\t\t\tvar name = styleClone[j] = style[j];\n\t\t\t\tstyleClone[name] = style[name];\n\t\t\t\tstyleClone._importants[name] = style.getPropertyPriority(name);\n\t\t\t}\n\t\t\tstyleClone.length = style.length;\n\t\t}\n\n\t\tif (rule.hasOwnProperty('keyText')) {\n\t\t\truleClone.keyText = rule.keyText;\n\t\t}\n\n\t\tif (rule.hasOwnProperty('selectorText')) {\n\t\t\truleClone.selectorText = rule.selectorText;\n\t\t}\n\n\t\tif (rule.hasOwnProperty('mediaText')) {\n\t\t\truleClone.mediaText = rule.mediaText;\n\t\t}\n\n\t\tif (rule.hasOwnProperty('conditionText')) {\n\t\t\truleClone.conditionText = rule.conditionText;\n\t\t}\n\n\t\tif (rule.hasOwnProperty('cssRules')) {\n\t\t\truleClone.cssRules = clone(rule).cssRules;\n\t\t}\n\t}\n\n\treturn cloned;\n\n};\n\n//.CommonJS\nexports.clone = CSSOM.clone;\n///CommonJS\n",
26
+ "class Canvas {\n constructor(width, height) {\n this.width = width;\n this.height = height;\n }\n getContext() {\n return null;\n }\n toDataURL() {\n return '';\n }\n}\n\nmodule.exports = {\n createCanvas: (width, height) => new Canvas(width, height),\n};\n",
27
+ "/* c8 ignore start */\ntry {\n module.exports = require('canvas');\n} catch (fallback) {\n module.exports = require('./canvas-shim.cjs');\n}\n/* c8 ignore stop */\n",
28
+ "// used in Attr to signal changes\nexport const CHANGED = Symbol('changed');\n\n// used in Element to setup once classList\nexport const CLASS_LIST = Symbol('classList');\n\n// used in Document to attach once customElements\nexport const CUSTOM_ELEMENTS = Symbol('CustomElements');\n\n// used in HTMLTemplateElement\nexport const CONTENT = Symbol('content');\n\n// used in Element for data attributes\nexport const DATASET = Symbol('dataset');\n\n// used in Document to attach the DocType\nexport const DOCTYPE = Symbol('doctype');\n\n// used in parser and Document to attach once a DOMParser\nexport const DOM_PARSER = Symbol('DOMParser');\n\n// used to reference an end node\nexport const END = Symbol('end');\n\n// used in Document to make the globalThis an event target\nexport const EVENT_TARGET = Symbol('EventTarget');\n\n// used to augment a created document defaultView\nexport const GLOBALS = Symbol('globals');\n\n// used in both Canvas and Document to provide images\nexport const IMAGE = Symbol('image');\n\n// used to define Document mime type\nexport const MIME = Symbol('mime');\n\n// used in Document to attach once MutationObserver\nexport const MUTATION_OBSERVER = Symbol('MutationObserver');\n\n// used to define next node reference\nexport const NEXT = Symbol('next');\n\n// used to define Attr owner elements\nexport const OWNER_ELEMENT = Symbol('ownerElement');\n\n// used to define previous node reference\nexport const PREV = Symbol('prev');\n\n// used to define various \"private\" properties\nexport const PRIVATE = Symbol('private');\n\n// used to define the CSSStyleSheet.sheet\nexport const SHEET = Symbol('sheet');\n\n// used to define start node reference\nexport const START = Symbol('start');\n\n// used to define special CSS style attribute\nexport const STYLE = Symbol('style');\n\n// used to upgrade Custom Elements\nexport const UPGRADE = Symbol('upgrade');\n\n// used to define generic values\nexport const VALUE = Symbol('value');\n",
29
+ "// Adapted from https://github.com/mathiasbynens/he/blob/36afe179392226cf1b6ccdb16ebbb7a5a844d93a/src/he.js#L106-L134\nvar _a;\nconst decodeMap = new Map([\n [0, 65533],\n // C1 Unicode control character reference replacements\n [128, 8364],\n [130, 8218],\n [131, 402],\n [132, 8222],\n [133, 8230],\n [134, 8224],\n [135, 8225],\n [136, 710],\n [137, 8240],\n [138, 352],\n [139, 8249],\n [140, 338],\n [142, 381],\n [145, 8216],\n [146, 8217],\n [147, 8220],\n [148, 8221],\n [149, 8226],\n [150, 8211],\n [151, 8212],\n [152, 732],\n [153, 8482],\n [154, 353],\n [155, 8250],\n [156, 339],\n [158, 382],\n [159, 376],\n]);\n/**\n * Polyfill for `String.fromCodePoint`. It is used to create a string from a Unicode code point.\n */\nexport const fromCodePoint = \n// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, n/no-unsupported-features/es-builtins\n(_a = String.fromCodePoint) !== null && _a !== void 0 ? _a : ((codePoint) => {\n let output = \"\";\n if (codePoint > 65535) {\n codePoint -= 65536;\n output += String.fromCharCode(((codePoint >>> 10) & 1023) | 55296);\n codePoint = 56320 | (codePoint & 1023);\n }\n output += String.fromCharCode(codePoint);\n return output;\n});\n/**\n * Replace the given code point with a replacement character if it is a\n * surrogate or is outside the valid range. Otherwise return the code\n * point unchanged.\n */\nexport function replaceCodePoint(codePoint) {\n var _a;\n if ((codePoint >= 55296 && codePoint <= 57343) ||\n codePoint > 1114111) {\n return 65533;\n }\n return (_a = decodeMap.get(codePoint)) !== null && _a !== void 0 ? _a : codePoint;\n}\n/**\n * Replace the code point if relevant, then convert it to a string.\n *\n * @deprecated Use `fromCodePoint(replaceCodePoint(codePoint))` instead.\n * @param codePoint The code point to decode.\n * @returns The decoded code point.\n */\nexport function decodeCodePoint(codePoint) {\n return fromCodePoint(replaceCodePoint(codePoint));\n}\n//# sourceMappingURL=decode-codepoint.js.map",
30
+ "/*\n * Shared base64 decode helper for generated decode data.\n * Assumes global atob is available.\n */\nexport function decodeBase64(input) {\n const binary = \n // eslint-disable-next-line n/no-unsupported-features/node-builtins\n typeof atob === \"function\"\n ? // Browser (and Node >=16)\n // eslint-disable-next-line n/no-unsupported-features/node-builtins\n atob(input)\n : // Older Node versions (<16)\n // eslint-disable-next-line n/no-unsupported-features/node-builtins\n typeof Buffer.from === \"function\"\n ? // eslint-disable-next-line n/no-unsupported-features/node-builtins\n Buffer.from(input, \"base64\").toString(\"binary\")\n : // eslint-disable-next-line unicorn/no-new-buffer, n/no-deprecated-api\n new Buffer(input, \"base64\").toString(\"binary\");\n const evenLength = binary.length & ~1; // Round down to even length\n const out = new Uint16Array(evenLength / 2);\n for (let index = 0, outIndex = 0; index < evenLength; index += 2) {\n const lo = binary.charCodeAt(index);\n const hi = binary.charCodeAt(index + 1);\n out[outIndex++] = lo | (hi << 8);\n }\n return out;\n}\n//# sourceMappingURL=decode-shared.js.map",
31
+ "// Generated using scripts/write-decode-map.ts\nimport { decodeBase64 } from \"../internal/decode-shared.js\";\nexport const htmlDecodeTree = /* #__PURE__ */ decodeBase64(\"QR08ALkAAgH6AYsDNQR2BO0EPgXZBQEGLAbdBxMISQrvCmQLfQurDKQNLw4fD4YPpA+6D/IPAAAAAAAAAAAAAAAAKhBMEY8TmxUWF2EYLBkxGuAa3RsJHDscWR8YIC8jSCSIJcMl6ie3Ku8rEC0CLjoupS7kLgAIRU1hYmNmZ2xtbm9wcnN0dVQAWgBeAGUAaQBzAHcAfgCBAIQAhwCSAJoAoACsALMAbABpAGcAO4DGAMZAUAA7gCYAJkBjAHUAdABlADuAwQDBQHIiZXZlAAJhAAFpeW0AcgByAGMAO4DCAMJAEGRyAADgNdgE3XIAYQB2AGUAO4DAAMBA8CFoYZFj4SFjcgBhZAAAoFMqAAFncIsAjgBvAG4ABGFmAADgNdg43fAlbHlGdW5jdGlvbgCgYSBpAG4AZwA7gMUAxUAAAWNzpACoAHIAAOA12Jzc6SFnbgCgVCJpAGwAZABlADuAwwDDQG0AbAA7gMQAxEAABGFjZWZvcnN1xQDYANoA7QDxAPYA+QD8AAABY3LJAM8AayNzbGFzaAAAoBYidgHTANUAAKDnKmUAZAAAoAYjeQARZIABY3J0AOAA5QDrAGEidXNlAACgNSLuI291bGxpcwCgLCFhAJJjcgAA4DXYBd1wAGYAAOA12Dnd5SF2ZdhiYwDyAOoAbSJwZXEAAKBOIgAHSE9hY2RlZmhpbG9yc3UXARoBHwE6AVIBVQFiAWQBZgGCAakB6QHtAfIBYwB5ACdkUABZADuAqQCpQIABY3B5ACUBKAE1AfUhdGUGYWmg0iJ0KGFsRGlmZmVyZW50aWFsRAAAoEUhbCJleXMAAKAtIQACYWVpb0EBRAFKAU0B8iFvbgxhZABpAGwAO4DHAMdAcgBjAAhhbiJpbnQAAKAwIm8AdAAKYQABZG5ZAV0BaSJsbGEAuGB0I2VyRG90ALdg8gA5AWkAp2NyImNsZQAAAkRNUFRwAXQBeQF9AW8AdAAAoJkiaSJudXMAAKCWIuwhdXMAoJUiaSJtZXMAAKCXIm8AAAFjc4cBlAFrKndpc2VDb250b3VySW50ZWdyYWwAAKAyImUjQ3VybHkAAAFEUZwBpAFvJXVibGVRdW90ZQAAoB0gdSJvdGUAAKAZIAACbG5wdbABtgHNAdgBbwBuAGWgNyIAoHQqgAFnaXQAvAHBAcUB8iJ1ZW50AKBhIm4AdAAAoC8i7yV1ckludGVncmFsAKAuIgABZnLRAdMBAKACIe8iZHVjdACgECJuLnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbAAAoDMi7yFzcwCgLypjAHIAAOA12J7ccABDoNMiYQBwAACgTSKABURKU1phY2VmaW9zAAsCEgIVAhgCGwIsAjQCOQI9AnMCfwNvoEUh9CJyYWhkAKARKWMAeQACZGMAeQAFZGMAeQAPZIABZ3JzACECJQIoAuchZXIAoCEgcgAAoKEhaAB2AACg5CoAAWF5MAIzAvIhb24OYRRkbAB0oAciYQCUY3IAAOA12AfdAAFhZkECawIAAWNtRQJnAvIjaXRpY2FsAAJBREdUUAJUAl8CYwJjInV0ZQC0YG8AdAFZAloC2WJiJGxlQWN1dGUA3WJyImF2ZQBgYGkibGRlANxi7yFuZACgxCJmJWVyZW50aWFsRAAAoEYhcAR9AgAAAAAAAIECjgIAABoDZgAA4DXYO91EoagAhQKJAm8AdAAAoNwgcSJ1YWwAAKBQIuIhbGUAA0NETFJVVpkCqAK1Au8C/wIRA28AbgB0AG8AdQByAEkAbgB0AGUAZwByAGEA7ADEAW8AdAKvAgAAAACwAqhgbiNBcnJvdwAAoNMhAAFlb7kC0AJmAHQAgAFBUlQAwQLGAs0CciJyb3cAAKDQIekkZ2h0QXJyb3cAoNQhZQDlACsCbgBnAAABTFLWAugC5SFmdAABQVLcAuECciJyb3cAAKD4J+kkZ2h0QXJyb3cAoPon6SRnaHRBcnJvdwCg+SdpImdodAAAAUFU9gL7AnIicm93AACg0iFlAGUAAKCoInAAQQIGAwAAAAALA3Iicm93AACg0SFvJHduQXJyb3cAAKDVIWUlcnRpY2FsQmFyAACgJSJuAAADQUJMUlRhJAM2AzoDWgNxA3oDciJyb3cAAKGTIUJVLAMwA2EAcgAAoBMpcCNBcnJvdwAAoPUhciJldmUAEWPlIWZ00gJDAwAASwMAAFIDaSVnaHRWZWN0b3IAAKBQKWUkZVZlY3RvcgAAoF4p5SJjdG9yQqC9IWEAcgAAoFYpaSJnaHQA1AFiAwAAaQNlJGVWZWN0b3IAAKBfKeUiY3RvckKgwSFhAHIAAKBXKWUAZQBBoKQiciJyb3cAAKCnIXIAcgBvAPcAtAIAAWN0gwOHA3IA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YwAAoN8i4SFycnCgtiEAoD0pgKIqImJjZG9zACsVMBU6FT4VQRVyImNhcAAAoEgqAAFhdTQVNxVwAACgRipwAACgSipvAHQAAKCNInIAAKBFKgDgKiIA/gACYWxydksVURVuFXMVcgByAG2gtyEAoDwpeQCAAWV2dwBYFWUVaRVxAHACXxUAAAAAYxVyAGUA4wAXFXUA4wAZFWUAZQAAoM4iZSJkZ2UAAKDPImUAbgA7gKQApEBlI2Fycm93AAABbHJ7FX8V5SFmdACgtiFpImdodAAAoLchZQDkAG0VAAFjaYsVkRVvAG4AaQBuAPQAkwFuAHQAAKAxImwiY3R5AACgLSOACUFIYWJjZGVmaGlqbG9yc3R1d3oAuBW7Fb8V1RXgFegV+RUKFhUWHxZUFlcWZRbFFtsW7xb7FgUXChdyAPIAtAJhAHIAAKBlKQACZ2xyc8YVyhXOFdAV5yFlcgCgICDlIXRoAKA4IfIA9QxoAHagECAAoKMiawHZFd4VYSJyb3cAAKAPKWEA4wBfAgABYXnkFecV8iFvbg9hNGQAoUYhYW/tFfQVAAFnciEC8RVyAACgyiF0InNlcQAAoHcqgAFnbG0A/xUCFgUWO4CwALBAdABhALRjcCJ0eXYAAKCxKQABaXIOFhIW8yFodACgfykA4DXYId1hAHIAAAFschsWHRYAoMMhAKDCIYACYWVnc3YAKBauAjYWOhY+Fm0AAKHEIm9zLhY0Fm4AZABzoMQi9SFpdACgZiZhIm1tYQDdY2kAbgAAoPIiAKH3AGlvQxZRFmQAZQAAgfcAO29KFksW90BuI3RpbWVzAACgxyJuAPgAUBZjAHkAUmRjAG8CXhYAAAAAYhZyAG4AAKAeI28AcAAAoA0jgAJscHR1dwBuFnEWdRaSFp4W7CFhciRgZgAA4DXYVd0AotkCZW1wc30WhBaJFo0WcQBkoFAibwB0AACgUSJpIm51cwAAoDgi7CF1cwCgFCLxInVhcmUAoKEiYgBsAGUAYgBhAHIAdwBlAGQAZwDlANcAbgCAAWFkaAClFqoWtBZyAHIAbwD3APUMbwB3AG4AYQByAHIAbwB3APMA8xVhI3Jwb29uAAABbHK8FsAWZQBmAPQAHBZpAGcAaAD0AB4WYgHJFs8WawBhAHIAbwD3AJILbwLUFgAAAADYFnIAbgAAoB8jbwBwAACgDCOAAWNvdADhFukW7BYAAXJ55RboFgDgNdi53FVkbAAAoPYp8iFvaxFhAAFkcvMW9xZvAHQAAKDxImkA5qC/JVsSAAFhaP8WAhdyAPIANQNhAPIA1wvhIm5nbGUAoKYpAAFjaQ4XEBd5AF9k5yJyYXJyAKD/JwAJRGFjZGVmZ2xtbm9wcXJzdHV4MRc4F0YXWxcyBF4XaRd5F40XrBe0F78X2RcVGCEYLRg1GEAYAAFEbzUXgRZvAPQA+BUAAWNzPBdCF3UAdABlADuA6QDpQPQhZXIAoG4qAAJhaW95TRdQF1YXWhfyIW9uG2FyAGOgViI7gOoA6kDsIW9uAKBVIk1kbwB0ABdhAAFEcmIXZhdvAHQAAKBSIgDgNdgi3XKhmipuF3QXYQB2AGUAO4DoAOhAZKCWKm8AdAAAoJgqgKGZKmlscwCAF4UXhxfuInRlcnMAoOcjAKATIWSglSpvAHQAAKCXKoABYXBzAJMXlheiF2MAcgATYXQAeQBzogUinxcAAAAAoRdlAHQAAKAFInAAMaADIDMBqRerFwCgBCAAoAUgAAFnc7AXsRdLYXAAAKACIAABZ3C4F7sXbwBuABlhZgAA4DXYVt2AAWFscwDFF8sXzxdyAHOg1SJsAACg4yl1AHMAAKBxKmkAAKG1A2x21RfYF28AbgC1Y/VjAAJjc3V24BfoF/0XEBgAAWlv5BdWF3IAYwAAoFYiaQLuFwAAAADwF+0ADQThIW50AAFnbPUX+Rd0AHIAAKCWKuUhc3MAoJUqgAFhZWkAAxgGGAoYbABzAD1gcwB0AACgXyJ2AESgYSJEAACgeCrwImFyc2wAoOUpAAFEYRkYHRhvAHQAAKBTInIAcgAAoHEpgAFjZGkAJxgqGO0XcgAAoC8hbwD0AIwCAAFhaDEYMhi3YzuA8ADwQAABbXI5GD0YbAA7gOsA60BvAACgrCCAAWNpcABGGEgYSxhsACFgcwD0ACwEAAFlb08YVxhjAHQAYQB0AGkAbwDuABoEbgBlAG4AdABpAGEAbADlADME4Ql1GAAAgRgAAIMYiBgAAAAAoRilGAAAqhgAALsYvhjRGAAA1xgnGWwAbABpAG4AZwBkAG8AdABzAGUA8QBlF3kARGRtImFsZQAAoEAmgAFpbHIAjRiRGJ0Y7CFpZwCgA/tpApcYAAAAAJoYZwAAoAD7aQBnAACgBPsA4DXYI93sIWlnAKAB++whaWcA4GYAagCAAWFsdACvGLIYthh0AACgbSZpAGcAAKAC+24AcwAAoLElbwBmAJJh8AHCGAAAxhhmAADgNdhX3QABYWvJGMwYbADsAGsEdqDUIgCg2SphI3J0aW50AACgDSoAAWFv2hgiGQABY3PeGB8ZsQPnGP0YBRkSGRUZAAAdGbID7xjyGPQY9xj5GAAA+xg7gL0AvUAAoFMhO4C8ALxAAKBVIQCgWSEAoFshswEBGQAAAxkAoFQhAKBWIbQCCxkOGQAAAAAQGTuAvgC+QACgVyEAoFwhNQAAoFghtgEZGQAAGxkAoFohAKBdITgAAKBeIWwAAKBEIHcAbgAAoCIjYwByAADgNdi73IAIRWFiY2RlZmdpamxub3JzdHYARhlKGVoZXhlmGWkZkhmWGZkZnRmgGa0ZxhnLGc8Z4BkjGmygZyIAoIwqgAFjbXAAUBlTGVgZ9SF0ZfVhbQBhAOSgswM6FgCghipyImV2ZQAfYQABaXliGWUZcgBjAB1hM2RvAHQAIWGAoWUibHFzAMYEcBl6GfGhZSLOBAAAdhlsAGEAbgD0AN8EgKF+KmNkbACBGYQZjBljAACgqSpvAHQAb6CAKmyggioAoIQqZeDbIgD+cwAAoJQqcgAA4DXYJN3noGsirATtIWVsAKA3IWMAeQBTZIChdyJFYWoApxmpGasZAKCSKgCgpSoAoKQqAAJFYWVztBm2Gb0ZwhkAoGkicABwoIoq8iFveACgiipxoIgq8aCIKrUZaQBtAACg5yJwAGYAAOA12FjdYQB2AOUAYwIAAWNp0xnWGXIAAKAKIW0AAKFzImVs3BneGQCgjioAoJAqAIM+ADtjZGxxco0E6xn0GfgZ/BkBGgABY2nvGfEZAKCnKnIAAKB6Km8AdAAAoNci0CFhcgCglSl1ImVzdAAAoHwqgAJhZGVscwAKGvQZFhrVBCAa8AEPGgAAFBpwAHIAbwD4AFkZcgAAoHgpcQAAAWxxxAQbGmwAZQBzAPMASRlpAO0A5AQAAWVuJxouGnIjdG5lcXEAAOBpIgD+xQAsGgAFQWFiY2Vma29zeUAaQxpmGmoabRqDGocalhrCGtMacgDyAMwCAAJpbG1yShpOGlAaVBpyAHMA8ABxD2YAvWBpAGwA9AASBQABZHJYGlsaYwB5AEpkAKGUIWN3YBpkGmkAcgAAoEgpAKCtIWEAcgAAoA8h6SFyYyVhgAFhbHIAcxp7Gn8a8iF0c3WgZSZpAHQAAKBlJuwhaXAAoCYg4yFvbgCguSJyAADgNdgl3XMAAAFld4wakRphInJvdwAAoCUpYSJyb3cAAKAmKYACYW1vcHIAnxqjGqcauhq+GnIAcgAAoP8h9CFodACgOyJrAAABbHKsGrMaZSRmdGFycm93AACgqSHpJGdodGFycm93AKCqIWYAAOA12Fnd4iFhcgCgFSCAAWNsdADIGswa0BpyAADgNdi93GEAcwDoAGka8iFvaydhAAFicNca2xr1IWxsAKBDIOghZW4AoBAg4Qr2GgAA/RoAAAgbExsaGwAAIRs7GwAAAAA+G2IbmRuVG6sbAACyG80b0htjAHUAdABlADuA7QDtQAChYyBpeQEbBhtyAGMAO4DuAO5AOGQAAWN4CxsNG3kANWRjAGwAO4ChAKFAAAFmcssCFhsA4DXYJt1yAGEAdgBlADuA7ADsQIChSCFpbm8AJxsyGzYbAAFpbisbLxtuAHQAAKAMKnQAAKAtIuYhaW4AoNwpdABhAACgKSHsIWlnM2GAAWFvcABDG1sbXhuAAWNndABJG0sbWRtyACthgAFlbHAAcQVRG1UbaQBuAOUAyAVhAHIA9AByBWgAMWFmAACgtyJlAGQAtWEAoggiY2ZvdGkbbRt1G3kb4SFyZQCgBSFpAG4AdKAeImkAZQAAoN0pZABvAPQAWxsAoisiY2VscIEbhRuPG5QbYQBsAACguiIAAWdyiRuNG2UAcgDzACMQ4wCCG2EicmhrAACgFyryIW9kAKA8KgACY2dwdJ8boRukG6gbeQBRZG8AbgAvYWYAAOA12FrdYQC5Y3UAZQBzAHQAO4C/AL9AAAFjabUbuRtyAADgNdi+3G4AAKIIIkVkc3bCG8QbyBvQAwCg+SJvAHQAAKD1Inag9CIAoPMiaaBiIOwhZGUpYesB1hsAANkbYwB5AFZkbAA7gO8A70AAA2NmbW9zdeYb7hvyG/Ub+hsFHAABaXnqG+0bcgBjADVhOWRyAADgNdgn3eEhdGg3YnAAZgAA4DXYW93jAf8bAAADHHIAAOA12L/c8iFjeVhk6yFjeVRkAARhY2ZnaGpvcxUcGhwiHCYcKhwtHDAcNRzwIXBhdqC6A/BjAAFleR4cIRzkIWls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ZmdobG1vcHJzdHV3CiwNLBEsHSwnLDEsQCxLLFIsYix6LIQsjyzLLOgs7Sz/LAotcgDyAAkDYQByAACgYykAAWNyFSwbLHUAdABlADuA+gD6QPIACQ1yAOMBIywAACUseQBeZHYAZQBtYQABaXkrLDAscgBjADuA+wD7QENkgAFhYmgANyw6LD0scgDyANEO7CFhY3FhYQDyAOAOAAFpckQsSCzzIWh0AKB+KQDgNdgy3XIAYQB2AGUAO4D5APlAYQFWLF8scgAAAWxyWixcLACgvyEAoL4hbABrAACggCUAAWN0Zix2LG8CbCwAAAAAcyxyAG4AZaAcI3IAAKAcI28AcAAAoA8jcgBpAACg+CUAAWFsfiyBLGMAcgBrYTuAqACoQAABZ3CILIssbwBuAHNhZgAA4DXYZt0AA2FkaGxzdZksniynLLgsuyzFLHIAcgBvAPcACQ1vAHcAbgBhAHIAcgBvAPcA2A5hI3Jwb29uAAABbHKvLLMsZQBmAPQAWyxpAGcAaAD0AF0sdQDzAKYOaQAAocUDaGzBLMIs0mNvAG4AxWPwI2Fycm93cwCgyCGAAWNpdADRLOEs5CxvAtcsAAAAAN4scgBuAGWgHSNyAACgHSNvAHAAAKAOI24AZwBvYXIAaQAAoPklYwByAADgNdjK3IABZGlyAPMs9yz6LG8AdAAAoPAi7CFkZWlhaQBmoLUlAKC0JQABYW0DLQYtcgDyAMosbAA7gPwA/EDhIm5nbGUAoKcpgAdBQkRhY2RlZmxub3Byc3oAJy0qLTAtNC2bLZ0toS2/LcMtxy3TLdgt3C3gLfwtcgDyABADYQByAHag6CoAoOkqYQBzAOgA/gIAAW5yOC08LechcnQAoJwpgANla25wcnN0AJkpSC1NLVQtXi1iLYItYQBwAHAA4QAaHG8AdABoAGkAbgDnAKEXgAFoaXIAoSmzJFotbwBwAPQAdCVooJUh7wD4JgABaXVmLWotZwBtAOEAuygAAWJwbi14LXMjZXRuZXEAceCKIgD+AODLKgD+cyNldG5lcQBx4IsiAP4A4MwqAP4AAWhyhi2KLWUAdADhABIraSNhbmdsZQAAAWxyki2WLeUhZnQAoLIiaSJnaHQAAKCzInkAMmThIXNoAKCiIoABZWxyAKcttC24LWKiKCKuLQAAAACyLWEAcgAAoLsicQAAoFoi7CFpcACg7iIAAWJ0vC1eD2EA8gBfD3IAAOA12DPddAByAOkAlS1zAHUAAAFicM0t0C0A4IIi0iAA4IMi0iBwAGYAAOA12GfdcgBvAPAAWQt0AHIA6QCaLQABY3XkLegtcgAA4DXYy9wAAWJw7C30LW4AAAFFZXUt8S0A4IoiAP5uAAABRWV/LfktAOCLIgD+6SJnemFnAKCaKYADY2Vmb3BycwANLhAuJS4pLiMuLi40LukhcmN1YQABZGkULiEuAAFiZxguHC5hAHIAAKBfKmUAcaAnIgCgWSLlIXJwAKAYIXIAAOA12DTdcABmAADgNdho3WWgQCJhAHQA6ABqD2MAcgAA4DXYzNzjCuQRUC4AAFQuAABYLmIuAAAAAGMubS5wLnQuAAAAAIguki4AAJouJxIqEnQAcgDpAB0ScgAA4DXYNd0AAUFhWy5eLnIA8gDnAnIA8gCTB75jAAFBYWYuaS5yAPIA4AJyAPIAjAdhAPAAeh5pAHMAAKD7IoABZHB0APgReS6DLgABZmx9LoAuAOA12GnddQDzAP8RaQBtAOUABBIAAUFhiy6OLnIA8gDuAnIA8gCaBwABY3GVLgoScgAA4DXYzdwAAXB0nS6hLmwAdQDzACUScgDpACASAARhY2VmaW9zdbEuvC7ELsguzC7PLtQu2S5jAAABdXm2LrsudABlADuA/QD9QE9kAAFpecAuwy5yAGMAd2FLZG4AO4ClAKVAcgAA4DXYNt1jAHkAV2RwAGYAAOA12GrdYwByAADgNdjO3AABY23dLt8ueQBOZGwAO4D/AP9AAAVhY2RlZmhpb3N38y73Lv8uAi8MLxAvEy8YLx0vIi9jInV0ZQB6YQABYXn7Lv4u8iFvbn5hN2RvAHQAfGEAAWV0Bi8KL3QAcgDmAB8QYQC2Y3IAAOA12DfdYwB5ADZk5yJyYXJyAKDdIXAAZgAA4DXYa91jAHIAAOA12M/cAAFqbiYvKC8AoA0gagAAoAwg\");\n//# sourceMappingURL=decode-data-html.js.map",
32
+ "// Generated using scripts/write-decode-map.ts\nimport { decodeBase64 } from \"../internal/decode-shared.js\";\nexport const xmlDecodeTree = /* #__PURE__ */ decodeBase64(\"AAJhZ2xxBwARABMAFQBtAg0AAAAAAA8AcAAmYG8AcwAnYHQAPmB0ADxg9SFvdCJg\");\n//# sourceMappingURL=decode-data-xml.js.map",
33
+ "/**\n * Bit flags & masks for the binary trie encoding used for entity decoding.\n *\n * Bit layout (16 bits total):\n * 15..14 VALUE_LENGTH (+1 encoding; 0 => no value)\n * 13 FLAG13. If valueLength>0: semicolon required flag (implicit ';').\n * If valueLength==0: compact run flag.\n * 12..7 BRANCH_LENGTH Branch length (0 => single branch in 6..0 if jumpOffset==char) OR run length (when compact run)\n * 6..0 JUMP_TABLE Jump offset (jump table) OR single-branch char code OR first run char\n */\nexport var BinTrieFlags;\n(function (BinTrieFlags) {\n BinTrieFlags[BinTrieFlags[\"VALUE_LENGTH\"] = 49152] = \"VALUE_LENGTH\";\n BinTrieFlags[BinTrieFlags[\"FLAG13\"] = 8192] = \"FLAG13\";\n BinTrieFlags[BinTrieFlags[\"BRANCH_LENGTH\"] = 8064] = \"BRANCH_LENGTH\";\n BinTrieFlags[BinTrieFlags[\"JUMP_TABLE\"] = 127] = \"JUMP_TABLE\";\n})(BinTrieFlags || (BinTrieFlags = {}));\n//# sourceMappingURL=bin-trie-flags.js.map",
34
+ "import { fromCodePoint, replaceCodePoint } from \"./decode-codepoint.js\";\nimport { htmlDecodeTree } from \"./generated/decode-data-html.js\";\nimport { xmlDecodeTree } from \"./generated/decode-data-xml.js\";\nimport { BinTrieFlags } from \"./internal/bin-trie-flags.js\";\nvar CharCodes;\n(function (CharCodes) {\n CharCodes[CharCodes[\"NUM\"] = 35] = \"NUM\";\n CharCodes[CharCodes[\"SEMI\"] = 59] = \"SEMI\";\n CharCodes[CharCodes[\"EQUALS\"] = 61] = \"EQUALS\";\n CharCodes[CharCodes[\"ZERO\"] = 48] = \"ZERO\";\n CharCodes[CharCodes[\"NINE\"] = 57] = \"NINE\";\n CharCodes[CharCodes[\"LOWER_A\"] = 97] = \"LOWER_A\";\n CharCodes[CharCodes[\"LOWER_F\"] = 102] = \"LOWER_F\";\n CharCodes[CharCodes[\"LOWER_X\"] = 120] = \"LOWER_X\";\n CharCodes[CharCodes[\"LOWER_Z\"] = 122] = \"LOWER_Z\";\n CharCodes[CharCodes[\"UPPER_A\"] = 65] = \"UPPER_A\";\n CharCodes[CharCodes[\"UPPER_F\"] = 70] = \"UPPER_F\";\n CharCodes[CharCodes[\"UPPER_Z\"] = 90] = \"UPPER_Z\";\n})(CharCodes || (CharCodes = {}));\n/** Bit that needs to be set to convert an upper case ASCII character to lower case */\nconst TO_LOWER_BIT = 32;\nfunction isNumber(code) {\n return code >= CharCodes.ZERO && code <= CharCodes.NINE;\n}\nfunction isHexadecimalCharacter(code) {\n return ((code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_F) ||\n (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_F));\n}\nfunction isAsciiAlphaNumeric(code) {\n return ((code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_Z) ||\n (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_Z) ||\n isNumber(code));\n}\n/**\n * Checks if the given character is a valid end character for an entity in an attribute.\n *\n * Attribute values that aren't terminated properly aren't parsed, and shouldn't lead to a parser error.\n * See the example in https://html.spec.whatwg.org/multipage/parsing.html#named-character-reference-state\n */\nfunction isEntityInAttributeInvalidEnd(code) {\n return code === CharCodes.EQUALS || isAsciiAlphaNumeric(code);\n}\nvar EntityDecoderState;\n(function (EntityDecoderState) {\n EntityDecoderState[EntityDecoderState[\"EntityStart\"] = 0] = \"EntityStart\";\n EntityDecoderState[EntityDecoderState[\"NumericStart\"] = 1] = \"NumericStart\";\n EntityDecoderState[EntityDecoderState[\"NumericDecimal\"] = 2] = \"NumericDecimal\";\n EntityDecoderState[EntityDecoderState[\"NumericHex\"] = 3] = \"NumericHex\";\n EntityDecoderState[EntityDecoderState[\"NamedEntity\"] = 4] = \"NamedEntity\";\n})(EntityDecoderState || (EntityDecoderState = {}));\nexport var DecodingMode;\n(function (DecodingMode) {\n /** Entities in text nodes that can end with any character. */\n DecodingMode[DecodingMode[\"Legacy\"] = 0] = \"Legacy\";\n /** Only allow entities terminated with a semicolon. */\n DecodingMode[DecodingMode[\"Strict\"] = 1] = \"Strict\";\n /** Entities in attributes have limitations on ending characters. */\n DecodingMode[DecodingMode[\"Attribute\"] = 2] = \"Attribute\";\n})(DecodingMode || (DecodingMode = {}));\n/**\n * Token decoder with support of writing partial entities.\n */\nexport class EntityDecoder {\n constructor(\n /** The tree used to decode entities. */\n // biome-ignore lint/correctness/noUnusedPrivateClassMembers: False positive\n decodeTree, \n /**\n * The function that is called when a codepoint is decoded.\n *\n * For multi-byte named entities, this will be called multiple times,\n * with the second codepoint, and the same `consumed` value.\n *\n * @param codepoint The decoded codepoint.\n * @param consumed The number of bytes consumed by the decoder.\n */\n emitCodePoint, \n /** An object that is used to produce errors. */\n errors) {\n this.decodeTree = decodeTree;\n this.emitCodePoint = emitCodePoint;\n this.errors = errors;\n /** The current state of the decoder. */\n this.state = EntityDecoderState.EntityStart;\n /** Characters that were consumed while parsing an entity. */\n this.consumed = 1;\n /**\n * The result of the entity.\n *\n * Either the result index of a numeric entity, or the codepoint of a\n * numeric entity.\n */\n this.result = 0;\n /** The current index in the decode tree. */\n this.treeIndex = 0;\n /** The number of characters that were consumed in excess. */\n this.excess = 1;\n /** The mode in which the decoder is operating. */\n this.decodeMode = DecodingMode.Strict;\n /** The number of characters that have been consumed in the current run. */\n this.runConsumed = 0;\n }\n /** Resets the instance to make it reusable. */\n startEntity(decodeMode) {\n this.decodeMode = decodeMode;\n this.state = EntityDecoderState.EntityStart;\n this.result = 0;\n this.treeIndex = 0;\n this.excess = 1;\n this.consumed = 1;\n this.runConsumed = 0;\n }\n /**\n * Write an entity to the decoder. This can be called multiple times with partial entities.\n * If the entity is incomplete, the decoder will return -1.\n *\n * Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the\n * entity is incomplete, and resume when the next string is written.\n *\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The offset at which the entity begins. Should be 0 if this is not the first call.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n write(input, offset) {\n switch (this.state) {\n case EntityDecoderState.EntityStart: {\n if (input.charCodeAt(offset) === CharCodes.NUM) {\n this.state = EntityDecoderState.NumericStart;\n this.consumed += 1;\n return this.stateNumericStart(input, offset + 1);\n }\n this.state = EntityDecoderState.NamedEntity;\n return this.stateNamedEntity(input, offset);\n }\n case EntityDecoderState.NumericStart: {\n return this.stateNumericStart(input, offset);\n }\n case EntityDecoderState.NumericDecimal: {\n return this.stateNumericDecimal(input, offset);\n }\n case EntityDecoderState.NumericHex: {\n return this.stateNumericHex(input, offset);\n }\n case EntityDecoderState.NamedEntity: {\n return this.stateNamedEntity(input, offset);\n }\n }\n }\n /**\n * Switches between the numeric decimal and hexadecimal states.\n *\n * Equivalent to the `Numeric character reference state` in the HTML spec.\n *\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n stateNumericStart(input, offset) {\n if (offset >= input.length) {\n return -1;\n }\n if ((input.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) {\n this.state = EntityDecoderState.NumericHex;\n this.consumed += 1;\n return this.stateNumericHex(input, offset + 1);\n }\n this.state = EntityDecoderState.NumericDecimal;\n return this.stateNumericDecimal(input, offset);\n }\n /**\n * Parses a hexadecimal numeric entity.\n *\n * Equivalent to the `Hexademical character reference state` in the HTML spec.\n *\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n stateNumericHex(input, offset) {\n while (offset < input.length) {\n const char = input.charCodeAt(offset);\n if (isNumber(char) || isHexadecimalCharacter(char)) {\n // Convert hex digit to value (0-15); 'a'/'A' -> 10.\n const digit = char <= CharCodes.NINE\n ? char - CharCodes.ZERO\n : (char | TO_LOWER_BIT) - CharCodes.LOWER_A + 10;\n this.result = this.result * 16 + digit;\n this.consumed++;\n offset++;\n }\n else {\n return this.emitNumericEntity(char, 3);\n }\n }\n return -1; // Incomplete entity\n }\n /**\n * Parses a decimal numeric entity.\n *\n * Equivalent to the `Decimal character reference state` in the HTML spec.\n *\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n stateNumericDecimal(input, offset) {\n while (offset < input.length) {\n const char = input.charCodeAt(offset);\n if (isNumber(char)) {\n this.result = this.result * 10 + (char - CharCodes.ZERO);\n this.consumed++;\n offset++;\n }\n else {\n return this.emitNumericEntity(char, 2);\n }\n }\n return -1; // Incomplete entity\n }\n /**\n * Validate and emit a numeric entity.\n *\n * Implements the logic from the `Hexademical character reference start\n * state` and `Numeric character reference end state` in the HTML spec.\n *\n * @param lastCp The last code point of the entity. Used to see if the\n * entity was terminated with a semicolon.\n * @param expectedLength The minimum number of characters that should be\n * consumed. Used to validate that at least one digit\n * was consumed.\n * @returns The number of characters that were consumed.\n */\n emitNumericEntity(lastCp, expectedLength) {\n var _a;\n // Ensure we consumed at least one digit.\n if (this.consumed <= expectedLength) {\n (_a = this.errors) === null || _a === void 0 ? void 0 : _a.absenceOfDigitsInNumericCharacterReference(this.consumed);\n return 0;\n }\n // Figure out if this is a legit end of the entity\n if (lastCp === CharCodes.SEMI) {\n this.consumed += 1;\n }\n else if (this.decodeMode === DecodingMode.Strict) {\n return 0;\n }\n this.emitCodePoint(replaceCodePoint(this.result), this.consumed);\n if (this.errors) {\n if (lastCp !== CharCodes.SEMI) {\n this.errors.missingSemicolonAfterCharacterReference();\n }\n this.errors.validateNumericCharacterReference(this.result);\n }\n return this.consumed;\n }\n /**\n * Parses a named entity.\n *\n * Equivalent to the `Named character reference state` in the HTML spec.\n *\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n stateNamedEntity(input, offset) {\n const { decodeTree } = this;\n let current = decodeTree[this.treeIndex];\n // The length is the number of bytes of the value, including the current byte.\n let valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n while (offset < input.length) {\n // Handle compact runs (possibly inline): valueLength == 0 and SEMI_REQUIRED bit set.\n if (valueLength === 0 && (current & BinTrieFlags.FLAG13) !== 0) {\n const runLength = (current & BinTrieFlags.BRANCH_LENGTH) >> 7; /* 2..63 */\n // If we are starting a run, check the first char.\n if (this.runConsumed === 0) {\n const firstChar = current & BinTrieFlags.JUMP_TABLE;\n if (input.charCodeAt(offset) !== firstChar) {\n return this.result === 0\n ? 0\n : this.emitNotTerminatedNamedEntity();\n }\n offset++;\n this.excess++;\n this.runConsumed++;\n }\n // Check remaining characters in the run.\n while (this.runConsumed < runLength) {\n if (offset >= input.length) {\n return -1;\n }\n const charIndexInPacked = this.runConsumed - 1;\n const packedWord = decodeTree[this.treeIndex + 1 + (charIndexInPacked >> 1)];\n const expectedChar = charIndexInPacked % 2 === 0\n ? packedWord & 0xff\n : (packedWord >> 8) & 0xff;\n if (input.charCodeAt(offset) !== expectedChar) {\n this.runConsumed = 0;\n return this.result === 0\n ? 0\n : this.emitNotTerminatedNamedEntity();\n }\n offset++;\n this.excess++;\n this.runConsumed++;\n }\n this.runConsumed = 0;\n this.treeIndex += 1 + (runLength >> 1);\n current = decodeTree[this.treeIndex];\n valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n }\n if (offset >= input.length)\n break;\n const char = input.charCodeAt(offset);\n /*\n * Implicit semicolon handling for nodes that require a semicolon but\n * don't have an explicit ';' branch stored in the trie. If we have\n * a value on the current node, it requires a semicolon, and the\n * current input character is a semicolon, emit the entity using the\n * current node (without descending further).\n */\n if (char === CharCodes.SEMI &&\n valueLength !== 0 &&\n (current & BinTrieFlags.FLAG13) !== 0) {\n return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);\n }\n this.treeIndex = determineBranch(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char);\n if (this.treeIndex < 0) {\n return this.result === 0 ||\n // If we are parsing an attribute\n (this.decodeMode === DecodingMode.Attribute &&\n // We shouldn't have consumed any characters after the entity,\n (valueLength === 0 ||\n // And there should be no invalid characters.\n isEntityInAttributeInvalidEnd(char)))\n ? 0\n : this.emitNotTerminatedNamedEntity();\n }\n current = decodeTree[this.treeIndex];\n valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n // If the branch is a value, store it and continue\n if (valueLength !== 0) {\n // If the entity is terminated by a semicolon, we are done.\n if (char === CharCodes.SEMI) {\n return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);\n }\n // If we encounter a non-terminated (legacy) entity while parsing strictly, then ignore it.\n if (this.decodeMode !== DecodingMode.Strict &&\n (current & BinTrieFlags.FLAG13) === 0) {\n this.result = this.treeIndex;\n this.consumed += this.excess;\n this.excess = 0;\n }\n }\n // Increment offset & excess for next iteration\n offset++;\n this.excess++;\n }\n return -1;\n }\n /**\n * Emit a named entity that was not terminated with a semicolon.\n *\n * @returns The number of characters consumed.\n */\n emitNotTerminatedNamedEntity() {\n var _a;\n const { result, decodeTree } = this;\n const valueLength = (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14;\n this.emitNamedEntityData(result, valueLength, this.consumed);\n (_a = this.errors) === null || _a === void 0 ? void 0 : _a.missingSemicolonAfterCharacterReference();\n return this.consumed;\n }\n /**\n * Emit a named entity.\n *\n * @param result The index of the entity in the decode tree.\n * @param valueLength The number of bytes in the entity.\n * @param consumed The number of characters consumed.\n *\n * @returns The number of characters consumed.\n */\n emitNamedEntityData(result, valueLength, consumed) {\n const { decodeTree } = this;\n this.emitCodePoint(valueLength === 1\n ? decodeTree[result] &\n ~(BinTrieFlags.VALUE_LENGTH | BinTrieFlags.FLAG13)\n : decodeTree[result + 1], consumed);\n if (valueLength === 3) {\n // For multi-byte values, we need to emit the second byte.\n this.emitCodePoint(decodeTree[result + 2], consumed);\n }\n return consumed;\n }\n /**\n * Signal to the parser that the end of the input was reached.\n *\n * Remaining data will be emitted and relevant errors will be produced.\n *\n * @returns The number of characters consumed.\n */\n end() {\n var _a;\n switch (this.state) {\n case EntityDecoderState.NamedEntity: {\n // Emit a named entity if we have one.\n return this.result !== 0 &&\n (this.decodeMode !== DecodingMode.Attribute ||\n this.result === this.treeIndex)\n ? this.emitNotTerminatedNamedEntity()\n : 0;\n }\n // Otherwise, emit a numeric entity if we have one.\n case EntityDecoderState.NumericDecimal: {\n return this.emitNumericEntity(0, 2);\n }\n case EntityDecoderState.NumericHex: {\n return this.emitNumericEntity(0, 3);\n }\n case EntityDecoderState.NumericStart: {\n (_a = this.errors) === null || _a === void 0 ? void 0 : _a.absenceOfDigitsInNumericCharacterReference(this.consumed);\n return 0;\n }\n case EntityDecoderState.EntityStart: {\n // Return 0 if we have no entity.\n return 0;\n }\n }\n }\n}\n/**\n * Creates a function that decodes entities in a string.\n *\n * @param decodeTree The decode tree.\n * @returns A function that decodes entities in a string.\n */\nfunction getDecoder(decodeTree) {\n let returnValue = \"\";\n const decoder = new EntityDecoder(decodeTree, (data) => (returnValue += fromCodePoint(data)));\n return function decodeWithTrie(input, decodeMode) {\n let lastIndex = 0;\n let offset = 0;\n while ((offset = input.indexOf(\"&\", offset)) >= 0) {\n returnValue += input.slice(lastIndex, offset);\n decoder.startEntity(decodeMode);\n const length = decoder.write(input, \n // Skip the \"&\"\n offset + 1);\n if (length < 0) {\n lastIndex = offset + decoder.end();\n break;\n }\n lastIndex = offset + length;\n // If `length` is 0, skip the current `&` and continue.\n offset = length === 0 ? lastIndex + 1 : lastIndex;\n }\n const result = returnValue + input.slice(lastIndex);\n // Make sure we don't keep a reference to the final string.\n returnValue = \"\";\n return result;\n };\n}\n/**\n * Determines the branch of the current node that is taken given the current\n * character. This function is used to traverse the trie.\n *\n * @param decodeTree The trie.\n * @param current The current node.\n * @param nodeIdx The index right after the current node and its value.\n * @param char The current character.\n * @returns The index of the next node, or -1 if no branch is taken.\n */\nexport function determineBranch(decodeTree, current, nodeIndex, char) {\n const branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;\n const jumpOffset = current & BinTrieFlags.JUMP_TABLE;\n // Case 1: Single branch encoded in jump offset\n if (branchCount === 0) {\n return jumpOffset !== 0 && char === jumpOffset ? nodeIndex : -1;\n }\n // Case 2: Multiple branches encoded in jump table\n if (jumpOffset) {\n const value = char - jumpOffset;\n return value < 0 || value >= branchCount\n ? -1\n : decodeTree[nodeIndex + value] - 1;\n }\n // Case 3: Multiple branches encoded in packed dictionary (two keys per uint16)\n const packedKeySlots = (branchCount + 1) >> 1;\n /*\n * Treat packed keys as a virtual sorted array of length `branchCount`.\n * Key(i) = low byte for even i, high byte for odd i in slot i>>1.\n */\n let lo = 0;\n let hi = branchCount - 1;\n while (lo <= hi) {\n const mid = (lo + hi) >>> 1;\n const slot = mid >> 1;\n const packed = decodeTree[nodeIndex + slot];\n const midKey = (packed >> ((mid & 1) * 8)) & 0xff;\n if (midKey < char) {\n lo = mid + 1;\n }\n else if (midKey > char) {\n hi = mid - 1;\n }\n else {\n return decodeTree[nodeIndex + packedKeySlots + mid];\n }\n }\n return -1;\n}\nconst htmlDecoder = /* #__PURE__ */ getDecoder(htmlDecodeTree);\nconst xmlDecoder = /* #__PURE__ */ getDecoder(xmlDecodeTree);\n/**\n * Decodes an HTML string.\n *\n * @param htmlString The string to decode.\n * @param mode The decoding mode.\n * @returns The decoded string.\n */\nexport function decodeHTML(htmlString, mode = DecodingMode.Legacy) {\n return htmlDecoder(htmlString, mode);\n}\n/**\n * Decodes an HTML string in an attribute.\n *\n * @param htmlAttribute The string to decode.\n * @returns The decoded string.\n */\nexport function decodeHTMLAttribute(htmlAttribute) {\n return htmlDecoder(htmlAttribute, DecodingMode.Attribute);\n}\n/**\n * Decodes an HTML string, requiring all entities to be terminated by a semicolon.\n *\n * @param htmlString The string to decode.\n * @returns The decoded string.\n */\nexport function decodeHTMLStrict(htmlString) {\n return htmlDecoder(htmlString, DecodingMode.Strict);\n}\n/**\n * Decodes an XML string, requiring all entities to be terminated by a semicolon.\n *\n * @param xmlString The string to decode.\n * @returns The decoded string.\n */\nexport function decodeXML(xmlString) {\n return xmlDecoder(xmlString, DecodingMode.Strict);\n}\nexport { decodeCodePoint, fromCodePoint, replaceCodePoint, } from \"./decode-codepoint.js\";\n// Re-export for use by eg. htmlparser2\nexport { htmlDecodeTree } from \"./generated/decode-data-html.js\";\nexport { xmlDecodeTree } from \"./generated/decode-data-xml.js\";\n//# sourceMappingURL=decode.js.map",
35
+ "import { EntityDecoder, DecodingMode, htmlDecodeTree, xmlDecodeTree, } from \"entities/decode\";\nvar CharCodes;\n(function (CharCodes) {\n CharCodes[CharCodes[\"Tab\"] = 9] = \"Tab\";\n CharCodes[CharCodes[\"NewLine\"] = 10] = \"NewLine\";\n CharCodes[CharCodes[\"FormFeed\"] = 12] = \"FormFeed\";\n CharCodes[CharCodes[\"CarriageReturn\"] = 13] = \"CarriageReturn\";\n CharCodes[CharCodes[\"Space\"] = 32] = \"Space\";\n CharCodes[CharCodes[\"ExclamationMark\"] = 33] = \"ExclamationMark\";\n CharCodes[CharCodes[\"Number\"] = 35] = \"Number\";\n CharCodes[CharCodes[\"Amp\"] = 38] = \"Amp\";\n CharCodes[CharCodes[\"SingleQuote\"] = 39] = \"SingleQuote\";\n CharCodes[CharCodes[\"DoubleQuote\"] = 34] = \"DoubleQuote\";\n CharCodes[CharCodes[\"Dash\"] = 45] = \"Dash\";\n CharCodes[CharCodes[\"Slash\"] = 47] = \"Slash\";\n CharCodes[CharCodes[\"Zero\"] = 48] = \"Zero\";\n CharCodes[CharCodes[\"Nine\"] = 57] = \"Nine\";\n CharCodes[CharCodes[\"Semi\"] = 59] = \"Semi\";\n CharCodes[CharCodes[\"Lt\"] = 60] = \"Lt\";\n CharCodes[CharCodes[\"Eq\"] = 61] = \"Eq\";\n CharCodes[CharCodes[\"Gt\"] = 62] = \"Gt\";\n CharCodes[CharCodes[\"Questionmark\"] = 63] = \"Questionmark\";\n CharCodes[CharCodes[\"UpperA\"] = 65] = \"UpperA\";\n CharCodes[CharCodes[\"LowerA\"] = 97] = \"LowerA\";\n CharCodes[CharCodes[\"UpperF\"] = 70] = \"UpperF\";\n CharCodes[CharCodes[\"LowerF\"] = 102] = \"LowerF\";\n CharCodes[CharCodes[\"UpperZ\"] = 90] = \"UpperZ\";\n CharCodes[CharCodes[\"LowerZ\"] = 122] = \"LowerZ\";\n CharCodes[CharCodes[\"LowerX\"] = 120] = \"LowerX\";\n CharCodes[CharCodes[\"OpeningSquareBracket\"] = 91] = \"OpeningSquareBracket\";\n})(CharCodes || (CharCodes = {}));\n/** All the states the tokenizer can be in. */\nvar State;\n(function (State) {\n State[State[\"Text\"] = 1] = \"Text\";\n State[State[\"BeforeTagName\"] = 2] = \"BeforeTagName\";\n State[State[\"InTagName\"] = 3] = \"InTagName\";\n State[State[\"InSelfClosingTag\"] = 4] = \"InSelfClosingTag\";\n State[State[\"BeforeClosingTagName\"] = 5] = \"BeforeClosingTagName\";\n State[State[\"InClosingTagName\"] = 6] = \"InClosingTagName\";\n State[State[\"AfterClosingTagName\"] = 7] = \"AfterClosingTagName\";\n // Attributes\n State[State[\"BeforeAttributeName\"] = 8] = \"BeforeAttributeName\";\n State[State[\"InAttributeName\"] = 9] = \"InAttributeName\";\n State[State[\"AfterAttributeName\"] = 10] = \"AfterAttributeName\";\n State[State[\"BeforeAttributeValue\"] = 11] = \"BeforeAttributeValue\";\n State[State[\"InAttributeValueDq\"] = 12] = \"InAttributeValueDq\";\n State[State[\"InAttributeValueSq\"] = 13] = \"InAttributeValueSq\";\n State[State[\"InAttributeValueNq\"] = 14] = \"InAttributeValueNq\";\n // Declarations\n State[State[\"BeforeDeclaration\"] = 15] = \"BeforeDeclaration\";\n State[State[\"InDeclaration\"] = 16] = \"InDeclaration\";\n // Processing instructions\n State[State[\"InProcessingInstruction\"] = 17] = \"InProcessingInstruction\";\n // Comments & CDATA\n State[State[\"BeforeComment\"] = 18] = \"BeforeComment\";\n State[State[\"CDATASequence\"] = 19] = \"CDATASequence\";\n State[State[\"InSpecialComment\"] = 20] = \"InSpecialComment\";\n State[State[\"InCommentLike\"] = 21] = \"InCommentLike\";\n // Special tags\n State[State[\"BeforeSpecialS\"] = 22] = \"BeforeSpecialS\";\n State[State[\"BeforeSpecialT\"] = 23] = \"BeforeSpecialT\";\n State[State[\"SpecialStartSequence\"] = 24] = \"SpecialStartSequence\";\n State[State[\"InSpecialTag\"] = 25] = \"InSpecialTag\";\n State[State[\"InEntity\"] = 26] = \"InEntity\";\n})(State || (State = {}));\nfunction isWhitespace(c) {\n return (c === CharCodes.Space ||\n c === CharCodes.NewLine ||\n c === CharCodes.Tab ||\n c === CharCodes.FormFeed ||\n c === CharCodes.CarriageReturn);\n}\nfunction isEndOfTagSection(c) {\n return c === CharCodes.Slash || c === CharCodes.Gt || isWhitespace(c);\n}\nfunction isASCIIAlpha(c) {\n return ((c >= CharCodes.LowerA && c <= CharCodes.LowerZ) ||\n (c >= CharCodes.UpperA && c <= CharCodes.UpperZ));\n}\nexport var QuoteType;\n(function (QuoteType) {\n QuoteType[QuoteType[\"NoValue\"] = 0] = \"NoValue\";\n QuoteType[QuoteType[\"Unquoted\"] = 1] = \"Unquoted\";\n QuoteType[QuoteType[\"Single\"] = 2] = \"Single\";\n QuoteType[QuoteType[\"Double\"] = 3] = \"Double\";\n})(QuoteType || (QuoteType = {}));\n/**\n * Sequences used to match longer strings.\n *\n * We don't have `Script`, `Style`, or `Title` here. Instead, we re-use the *End\n * sequences with an increased offset.\n */\nconst Sequences = {\n Cdata: new Uint8Array([0x43, 0x44, 0x41, 0x54, 0x41, 0x5b]), // CDATA[\n CdataEnd: new Uint8Array([0x5d, 0x5d, 0x3e]), // ]]>\n CommentEnd: new Uint8Array([0x2d, 0x2d, 0x3e]), // `-->`\n ScriptEnd: new Uint8Array([0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74]), // `</script`\n StyleEnd: new Uint8Array([0x3c, 0x2f, 0x73, 0x74, 0x79, 0x6c, 0x65]), // `</style`\n TitleEnd: new Uint8Array([0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65]), // `</title`\n TextareaEnd: new Uint8Array([\n 0x3c, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x61, 0x72, 0x65, 0x61,\n ]), // `</textarea`\n XmpEnd: new Uint8Array([0x3c, 0x2f, 0x78, 0x6d, 0x70]), // `</xmp`\n};\nexport default class Tokenizer {\n constructor({ xmlMode = false, decodeEntities = true, }, cbs) {\n this.cbs = cbs;\n /** The current state the tokenizer is in. */\n this.state = State.Text;\n /** The read buffer. */\n this.buffer = \"\";\n /** The beginning of the section that is currently being read. */\n this.sectionStart = 0;\n /** The index within the buffer that we are currently looking at. */\n this.index = 0;\n /** The start of the last entity. */\n this.entityStart = 0;\n /** Some behavior, eg. when decoding entities, is done while we are in another state. This keeps track of the other state type. */\n this.baseState = State.Text;\n /** For special parsing behavior inside of script and style tags. */\n this.isSpecial = false;\n /** Indicates whether the tokenizer has been paused. */\n this.running = true;\n /** The offset of the current buffer. */\n this.offset = 0;\n this.currentSequence = undefined;\n this.sequenceIndex = 0;\n this.xmlMode = xmlMode;\n this.decodeEntities = decodeEntities;\n this.entityDecoder = new EntityDecoder(xmlMode ? xmlDecodeTree : htmlDecodeTree, (cp, consumed) => this.emitCodePoint(cp, consumed));\n }\n reset() {\n this.state = State.Text;\n this.buffer = \"\";\n this.sectionStart = 0;\n this.index = 0;\n this.baseState = State.Text;\n this.currentSequence = undefined;\n this.running = true;\n this.offset = 0;\n }\n write(chunk) {\n this.offset += this.buffer.length;\n this.buffer = chunk;\n this.parse();\n }\n end() {\n if (this.running)\n this.finish();\n }\n pause() {\n this.running = false;\n }\n resume() {\n this.running = true;\n if (this.index < this.buffer.length + this.offset) {\n this.parse();\n }\n }\n stateText(c) {\n if (c === CharCodes.Lt ||\n (!this.decodeEntities && this.fastForwardTo(CharCodes.Lt))) {\n if (this.index > this.sectionStart) {\n this.cbs.ontext(this.sectionStart, this.index);\n }\n this.state = State.BeforeTagName;\n this.sectionStart = this.index;\n }\n else if (this.decodeEntities && c === CharCodes.Amp) {\n this.startEntity();\n }\n }\n stateSpecialStartSequence(c) {\n const isEnd = this.sequenceIndex === this.currentSequence.length;\n const isMatch = isEnd\n ? // If we are at the end of the sequence, make sure the tag name has ended\n isEndOfTagSection(c)\n : // Otherwise, do a case-insensitive comparison\n (c | 0x20) === this.currentSequence[this.sequenceIndex];\n if (!isMatch) {\n this.isSpecial = false;\n }\n else if (!isEnd) {\n this.sequenceIndex++;\n return;\n }\n this.sequenceIndex = 0;\n this.state = State.InTagName;\n this.stateInTagName(c);\n }\n /** Look for an end tag. For <title> tags, also decode entities. */\n stateInSpecialTag(c) {\n if (this.sequenceIndex === this.currentSequence.length) {\n if (c === CharCodes.Gt || isWhitespace(c)) {\n const endOfText = this.index - this.currentSequence.length;\n if (this.sectionStart < endOfText) {\n // Spoof the index so that reported locations match up.\n const actualIndex = this.index;\n this.index = endOfText;\n this.cbs.ontext(this.sectionStart, endOfText);\n this.index = actualIndex;\n }\n this.isSpecial = false;\n this.sectionStart = endOfText + 2; // Skip over the `</`\n this.stateInClosingTagName(c);\n return; // We are done; skip the rest of the function.\n }\n this.sequenceIndex = 0;\n }\n if ((c | 0x20) === this.currentSequence[this.sequenceIndex]) {\n this.sequenceIndex += 1;\n }\n else if (this.sequenceIndex === 0) {\n if (this.currentSequence === Sequences.TitleEnd) {\n // We have to parse entities in <title> tags.\n if (this.decodeEntities && c === CharCodes.Amp) {\n this.startEntity();\n }\n }\n else if (this.fastForwardTo(CharCodes.Lt)) {\n // Outside of <title> tags, we can fast-forward.\n this.sequenceIndex = 1;\n }\n }\n else {\n // If we see a `<`, set the sequence index to 1; useful for eg. `<</script>`.\n this.sequenceIndex = Number(c === CharCodes.Lt);\n }\n }\n stateCDATASequence(c) {\n if (c === Sequences.Cdata[this.sequenceIndex]) {\n if (++this.sequenceIndex === Sequences.Cdata.length) {\n this.state = State.InCommentLike;\n this.currentSequence = Sequences.CdataEnd;\n this.sequenceIndex = 0;\n this.sectionStart = this.index + 1;\n }\n }\n else {\n this.sequenceIndex = 0;\n this.state = State.InDeclaration;\n this.stateInDeclaration(c); // Reconsume the character\n }\n }\n /**\n * When we wait for one specific character, we can speed things up\n * by skipping through the buffer until we find it.\n *\n * @returns Whether the character was found.\n */\n fastForwardTo(c) {\n while (++this.index < this.buffer.length + this.offset) {\n if (this.buffer.charCodeAt(this.index - this.offset) === c) {\n return true;\n }\n }\n /*\n * We increment the index at the end of the `parse` loop,\n * so set it to `buffer.length - 1` here.\n *\n * TODO: Refactor `parse` to increment index before calling states.\n */\n this.index = this.buffer.length + this.offset - 1;\n return false;\n }\n /**\n * Comments and CDATA end with `-->` and `]]>`.\n *\n * Their common qualities are:\n * - Their end sequences have a distinct character they start with.\n * - That character is then repeated, so we have to check multiple repeats.\n * - All characters but the start character of the sequence can be skipped.\n */\n stateInCommentLike(c) {\n if (c === this.currentSequence[this.sequenceIndex]) {\n if (++this.sequenceIndex === this.currentSequence.length) {\n if (this.currentSequence === Sequences.CdataEnd) {\n this.cbs.oncdata(this.sectionStart, this.index, 2);\n }\n else {\n this.cbs.oncomment(this.sectionStart, this.index, 2);\n }\n this.sequenceIndex = 0;\n this.sectionStart = this.index + 1;\n this.state = State.Text;\n }\n }\n else if (this.sequenceIndex === 0) {\n // Fast-forward to the first character of the sequence\n if (this.fastForwardTo(this.currentSequence[0])) {\n this.sequenceIndex = 1;\n }\n }\n else if (c !== this.currentSequence[this.sequenceIndex - 1]) {\n // Allow long sequences, eg. --->, ]]]>\n this.sequenceIndex = 0;\n }\n }\n /**\n * HTML only allows ASCII alpha characters (a-z and A-Z) at the beginning of a tag name.\n *\n * XML allows a lot more characters here (@see https://www.w3.org/TR/REC-xml/#NT-NameStartChar).\n * We allow anything that wouldn't end the tag.\n */\n isTagStartChar(c) {\n return this.xmlMode ? !isEndOfTagSection(c) : isASCIIAlpha(c);\n }\n startSpecial(sequence, offset) {\n this.isSpecial = true;\n this.currentSequence = sequence;\n this.sequenceIndex = offset;\n this.state = State.SpecialStartSequence;\n }\n stateBeforeTagName(c) {\n if (c === CharCodes.ExclamationMark) {\n this.state = State.BeforeDeclaration;\n this.sectionStart = this.index + 1;\n }\n else if (c === CharCodes.Questionmark) {\n this.state = State.InProcessingInstruction;\n this.sectionStart = this.index + 1;\n }\n else if (this.isTagStartChar(c)) {\n const lower = c | 0x20;\n this.sectionStart = this.index;\n if (this.xmlMode) {\n this.state = State.InTagName;\n }\n else if (lower === Sequences.ScriptEnd[2]) {\n this.state = State.BeforeSpecialS;\n }\n else if (lower === Sequences.TitleEnd[2] ||\n lower === Sequences.XmpEnd[2]) {\n this.state = State.BeforeSpecialT;\n }\n else {\n this.state = State.InTagName;\n }\n }\n else if (c === CharCodes.Slash) {\n this.state = State.BeforeClosingTagName;\n }\n else {\n this.state = State.Text;\n this.stateText(c);\n }\n }\n stateInTagName(c) {\n if (isEndOfTagSection(c)) {\n this.cbs.onopentagname(this.sectionStart, this.index);\n this.sectionStart = -1;\n this.state = State.BeforeAttributeName;\n this.stateBeforeAttributeName(c);\n }\n }\n stateBeforeClosingTagName(c) {\n if (isWhitespace(c)) {\n // Ignore\n }\n else if (c === CharCodes.Gt) {\n this.state = State.Text;\n }\n else {\n this.state = this.isTagStartChar(c)\n ? State.InClosingTagName\n : State.InSpecialComment;\n this.sectionStart = this.index;\n }\n }\n stateInClosingTagName(c) {\n if (c === CharCodes.Gt || isWhitespace(c)) {\n this.cbs.onclosetag(this.sectionStart, this.index);\n this.sectionStart = -1;\n this.state = State.AfterClosingTagName;\n this.stateAfterClosingTagName(c);\n }\n }\n stateAfterClosingTagName(c) {\n // Skip everything until \">\"\n if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {\n this.state = State.Text;\n this.sectionStart = this.index + 1;\n }\n }\n stateBeforeAttributeName(c) {\n if (c === CharCodes.Gt) {\n this.cbs.onopentagend(this.index);\n if (this.isSpecial) {\n this.state = State.InSpecialTag;\n this.sequenceIndex = 0;\n }\n else {\n this.state = State.Text;\n }\n this.sectionStart = this.index + 1;\n }\n else if (c === CharCodes.Slash) {\n this.state = State.InSelfClosingTag;\n }\n else if (!isWhitespace(c)) {\n this.state = State.InAttributeName;\n this.sectionStart = this.index;\n }\n }\n stateInSelfClosingTag(c) {\n if (c === CharCodes.Gt) {\n this.cbs.onselfclosingtag(this.index);\n this.state = State.Text;\n this.sectionStart = this.index + 1;\n this.isSpecial = false; // Reset special state, in case of self-closing special tags\n }\n else if (!isWhitespace(c)) {\n this.state = State.BeforeAttributeName;\n this.stateBeforeAttributeName(c);\n }\n }\n stateInAttributeName(c) {\n if (c === CharCodes.Eq || isEndOfTagSection(c)) {\n this.cbs.onattribname(this.sectionStart, this.index);\n this.sectionStart = this.index;\n this.state = State.AfterAttributeName;\n this.stateAfterAttributeName(c);\n }\n }\n stateAfterAttributeName(c) {\n if (c === CharCodes.Eq) {\n this.state = State.BeforeAttributeValue;\n }\n else if (c === CharCodes.Slash || c === CharCodes.Gt) {\n this.cbs.onattribend(QuoteType.NoValue, this.sectionStart);\n this.sectionStart = -1;\n this.state = State.BeforeAttributeName;\n this.stateBeforeAttributeName(c);\n }\n else if (!isWhitespace(c)) {\n this.cbs.onattribend(QuoteType.NoValue, this.sectionStart);\n this.state = State.InAttributeName;\n this.sectionStart = this.index;\n }\n }\n stateBeforeAttributeValue(c) {\n if (c === CharCodes.DoubleQuote) {\n this.state = State.InAttributeValueDq;\n this.sectionStart = this.index + 1;\n }\n else if (c === CharCodes.SingleQuote) {\n this.state = State.InAttributeValueSq;\n this.sectionStart = this.index + 1;\n }\n else if (!isWhitespace(c)) {\n this.sectionStart = this.index;\n this.state = State.InAttributeValueNq;\n this.stateInAttributeValueNoQuotes(c); // Reconsume token\n }\n }\n handleInAttributeValue(c, quote) {\n if (c === quote ||\n (!this.decodeEntities && this.fastForwardTo(quote))) {\n this.cbs.onattribdata(this.sectionStart, this.index);\n this.sectionStart = -1;\n this.cbs.onattribend(quote === CharCodes.DoubleQuote\n ? QuoteType.Double\n : QuoteType.Single, this.index + 1);\n this.state = State.BeforeAttributeName;\n }\n else if (this.decodeEntities && c === CharCodes.Amp) {\n this.startEntity();\n }\n }\n stateInAttributeValueDoubleQuotes(c) {\n this.handleInAttributeValue(c, CharCodes.DoubleQuote);\n }\n stateInAttributeValueSingleQuotes(c) {\n this.handleInAttributeValue(c, CharCodes.SingleQuote);\n }\n stateInAttributeValueNoQuotes(c) {\n if (isWhitespace(c) || c === CharCodes.Gt) {\n this.cbs.onattribdata(this.sectionStart, this.index);\n this.sectionStart = -1;\n this.cbs.onattribend(QuoteType.Unquoted, this.index);\n this.state = State.BeforeAttributeName;\n this.stateBeforeAttributeName(c);\n }\n else if (this.decodeEntities && c === CharCodes.Amp) {\n this.startEntity();\n }\n }\n stateBeforeDeclaration(c) {\n if (c === CharCodes.OpeningSquareBracket) {\n this.state = State.CDATASequence;\n this.sequenceIndex = 0;\n }\n else {\n this.state =\n c === CharCodes.Dash\n ? State.BeforeComment\n : State.InDeclaration;\n }\n }\n stateInDeclaration(c) {\n if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {\n this.cbs.ondeclaration(this.sectionStart, this.index);\n this.state = State.Text;\n this.sectionStart = this.index + 1;\n }\n }\n stateInProcessingInstruction(c) {\n if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {\n this.cbs.onprocessinginstruction(this.sectionStart, this.index);\n this.state = State.Text;\n this.sectionStart = this.index + 1;\n }\n }\n stateBeforeComment(c) {\n if (c === CharCodes.Dash) {\n this.state = State.InCommentLike;\n this.currentSequence = Sequences.CommentEnd;\n // Allow short comments (eg. <!-->)\n this.sequenceIndex = 2;\n this.sectionStart = this.index + 1;\n }\n else {\n this.state = State.InDeclaration;\n }\n }\n stateInSpecialComment(c) {\n if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {\n this.cbs.oncomment(this.sectionStart, this.index, 0);\n this.state = State.Text;\n this.sectionStart = this.index + 1;\n }\n }\n stateBeforeSpecialS(c) {\n const lower = c | 0x20;\n if (lower === Sequences.ScriptEnd[3]) {\n this.startSpecial(Sequences.ScriptEnd, 4);\n }\n else if (lower === Sequences.StyleEnd[3]) {\n this.startSpecial(Sequences.StyleEnd, 4);\n }\n else {\n this.state = State.InTagName;\n this.stateInTagName(c); // Consume the token again\n }\n }\n stateBeforeSpecialT(c) {\n const lower = c | 0x20;\n switch (lower) {\n case Sequences.TitleEnd[3]: {\n this.startSpecial(Sequences.TitleEnd, 4);\n break;\n }\n case Sequences.TextareaEnd[3]: {\n this.startSpecial(Sequences.TextareaEnd, 4);\n break;\n }\n case Sequences.XmpEnd[3]: {\n this.startSpecial(Sequences.XmpEnd, 4);\n break;\n }\n default: {\n this.state = State.InTagName;\n this.stateInTagName(c); // Consume the token again\n }\n }\n }\n startEntity() {\n this.baseState = this.state;\n this.state = State.InEntity;\n this.entityStart = this.index;\n this.entityDecoder.startEntity(this.xmlMode\n ? DecodingMode.Strict\n : this.baseState === State.Text ||\n this.baseState === State.InSpecialTag\n ? DecodingMode.Legacy\n : DecodingMode.Attribute);\n }\n stateInEntity() {\n const indexInBuffer = this.index - this.offset;\n const length = this.entityDecoder.write(this.buffer, indexInBuffer);\n // If `length` is positive, we are done with the entity.\n if (length >= 0) {\n this.state = this.baseState;\n if (length === 0) {\n this.index -= 1;\n }\n }\n else {\n if (indexInBuffer < this.buffer.length &&\n this.buffer.charCodeAt(indexInBuffer) === CharCodes.Amp) {\n this.state = this.baseState;\n this.index -= 1;\n return;\n }\n // Mark buffer as consumed.\n this.index = this.offset + this.buffer.length - 1;\n }\n }\n /**\n * Remove data that has already been consumed from the buffer.\n */\n cleanup() {\n // If we are inside of text or attributes, emit what we already have.\n if (this.running && this.sectionStart !== this.index) {\n if (this.state === State.Text ||\n (this.state === State.InSpecialTag && this.sequenceIndex === 0)) {\n this.cbs.ontext(this.sectionStart, this.index);\n this.sectionStart = this.index;\n }\n else if (this.state === State.InAttributeValueDq ||\n this.state === State.InAttributeValueSq ||\n this.state === State.InAttributeValueNq) {\n this.cbs.onattribdata(this.sectionStart, this.index);\n this.sectionStart = this.index;\n }\n }\n }\n shouldContinue() {\n return this.index < this.buffer.length + this.offset && this.running;\n }\n /**\n * Iterates through the buffer, calling the function corresponding to the current state.\n *\n * States that are more likely to be hit are higher up, as a performance improvement.\n */\n parse() {\n while (this.shouldContinue()) {\n const c = this.buffer.charCodeAt(this.index - this.offset);\n switch (this.state) {\n case State.Text: {\n this.stateText(c);\n break;\n }\n case State.SpecialStartSequence: {\n this.stateSpecialStartSequence(c);\n break;\n }\n case State.InSpecialTag: {\n this.stateInSpecialTag(c);\n break;\n }\n case State.CDATASequence: {\n this.stateCDATASequence(c);\n break;\n }\n case State.InAttributeValueDq: {\n this.stateInAttributeValueDoubleQuotes(c);\n break;\n }\n case State.InAttributeName: {\n this.stateInAttributeName(c);\n break;\n }\n case State.InCommentLike: {\n this.stateInCommentLike(c);\n break;\n }\n case State.InSpecialComment: {\n this.stateInSpecialComment(c);\n break;\n }\n case State.BeforeAttributeName: {\n this.stateBeforeAttributeName(c);\n break;\n }\n case State.InTagName: {\n this.stateInTagName(c);\n break;\n }\n case State.InClosingTagName: {\n this.stateInClosingTagName(c);\n break;\n }\n case State.BeforeTagName: {\n this.stateBeforeTagName(c);\n break;\n }\n case State.AfterAttributeName: {\n this.stateAfterAttributeName(c);\n break;\n }\n case State.InAttributeValueSq: {\n this.stateInAttributeValueSingleQuotes(c);\n break;\n }\n case State.BeforeAttributeValue: {\n this.stateBeforeAttributeValue(c);\n break;\n }\n case State.BeforeClosingTagName: {\n this.stateBeforeClosingTagName(c);\n break;\n }\n case State.AfterClosingTagName: {\n this.stateAfterClosingTagName(c);\n break;\n }\n case State.BeforeSpecialS: {\n this.stateBeforeSpecialS(c);\n break;\n }\n case State.BeforeSpecialT: {\n this.stateBeforeSpecialT(c);\n break;\n }\n case State.InAttributeValueNq: {\n this.stateInAttributeValueNoQuotes(c);\n break;\n }\n case State.InSelfClosingTag: {\n this.stateInSelfClosingTag(c);\n break;\n }\n case State.InDeclaration: {\n this.stateInDeclaration(c);\n break;\n }\n case State.BeforeDeclaration: {\n this.stateBeforeDeclaration(c);\n break;\n }\n case State.BeforeComment: {\n this.stateBeforeComment(c);\n break;\n }\n case State.InProcessingInstruction: {\n this.stateInProcessingInstruction(c);\n break;\n }\n case State.InEntity: {\n this.stateInEntity();\n break;\n }\n }\n this.index++;\n }\n this.cleanup();\n }\n finish() {\n if (this.state === State.InEntity) {\n this.entityDecoder.end();\n this.state = this.baseState;\n }\n this.handleTrailingData();\n this.cbs.onend();\n }\n /** Handle any trailing data. */\n handleTrailingData() {\n const endIndex = this.buffer.length + this.offset;\n // If there is no remaining data, we are done.\n if (this.sectionStart >= endIndex) {\n return;\n }\n if (this.state === State.InCommentLike) {\n if (this.currentSequence === Sequences.CdataEnd) {\n this.cbs.oncdata(this.sectionStart, endIndex, 0);\n }\n else {\n this.cbs.oncomment(this.sectionStart, endIndex, 0);\n }\n }\n else if (this.state === State.InTagName ||\n this.state === State.BeforeAttributeName ||\n this.state === State.BeforeAttributeValue ||\n this.state === State.AfterAttributeName ||\n this.state === State.InAttributeName ||\n this.state === State.InAttributeValueSq ||\n this.state === State.InAttributeValueDq ||\n this.state === State.InAttributeValueNq ||\n this.state === State.InClosingTagName) {\n /*\n * If we are currently in an opening or closing tag, us not calling the\n * respective callback signals that the tag should be ignored.\n */\n }\n else {\n this.cbs.ontext(this.sectionStart, endIndex);\n }\n }\n emitCodePoint(cp, consumed) {\n if (this.baseState !== State.Text &&\n this.baseState !== State.InSpecialTag) {\n if (this.sectionStart < this.entityStart) {\n this.cbs.onattribdata(this.sectionStart, this.entityStart);\n }\n this.sectionStart = this.entityStart + consumed;\n this.index = this.sectionStart - 1;\n this.cbs.onattribentity(cp);\n }\n else {\n if (this.sectionStart < this.entityStart) {\n this.cbs.ontext(this.sectionStart, this.entityStart);\n }\n this.sectionStart = this.entityStart + consumed;\n this.index = this.sectionStart - 1;\n this.cbs.ontextentity(cp, this.sectionStart);\n }\n }\n}\n//# sourceMappingURL=Tokenizer.js.map",
36
+ "import Tokenizer, { QuoteType } from \"./Tokenizer.js\";\nimport { fromCodePoint } from \"entities/decode\";\nconst formTags = new Set([\n \"input\",\n \"option\",\n \"optgroup\",\n \"select\",\n \"button\",\n \"datalist\",\n \"textarea\",\n]);\nconst pTag = new Set([\"p\"]);\nconst tableSectionTags = new Set([\"thead\", \"tbody\"]);\nconst ddtTags = new Set([\"dd\", \"dt\"]);\nconst rtpTags = new Set([\"rt\", \"rp\"]);\nconst openImpliesClose = new Map([\n [\"tr\", new Set([\"tr\", \"th\", \"td\"])],\n [\"th\", new Set([\"th\"])],\n [\"td\", new Set([\"thead\", \"th\", \"td\"])],\n [\"body\", new Set([\"head\", \"link\", \"script\"])],\n [\"li\", new Set([\"li\"])],\n [\"p\", pTag],\n [\"h1\", pTag],\n [\"h2\", pTag],\n [\"h3\", pTag],\n [\"h4\", pTag],\n [\"h5\", pTag],\n [\"h6\", pTag],\n [\"select\", formTags],\n [\"input\", formTags],\n [\"output\", formTags],\n [\"button\", formTags],\n [\"datalist\", formTags],\n [\"textarea\", formTags],\n [\"option\", new Set([\"option\"])],\n [\"optgroup\", new Set([\"optgroup\", \"option\"])],\n [\"dd\", ddtTags],\n [\"dt\", ddtTags],\n [\"address\", pTag],\n [\"article\", pTag],\n [\"aside\", pTag],\n [\"blockquote\", pTag],\n [\"details\", pTag],\n [\"div\", pTag],\n [\"dl\", pTag],\n [\"fieldset\", pTag],\n [\"figcaption\", pTag],\n [\"figure\", pTag],\n [\"footer\", pTag],\n [\"form\", pTag],\n [\"header\", pTag],\n [\"hr\", pTag],\n [\"main\", pTag],\n [\"nav\", pTag],\n [\"ol\", pTag],\n [\"pre\", pTag],\n [\"section\", pTag],\n [\"table\", pTag],\n [\"ul\", pTag],\n [\"rt\", rtpTags],\n [\"rp\", rtpTags],\n [\"tbody\", tableSectionTags],\n [\"tfoot\", tableSectionTags],\n]);\nconst voidElements = new Set([\n \"area\",\n \"base\",\n \"basefont\",\n \"br\",\n \"col\",\n \"command\",\n \"embed\",\n \"frame\",\n \"hr\",\n \"img\",\n \"input\",\n \"isindex\",\n \"keygen\",\n \"link\",\n \"meta\",\n \"param\",\n \"source\",\n \"track\",\n \"wbr\",\n]);\nconst foreignContextElements = new Set([\"math\", \"svg\"]);\nconst htmlIntegrationElements = new Set([\n \"mi\",\n \"mo\",\n \"mn\",\n \"ms\",\n \"mtext\",\n \"annotation-xml\",\n \"foreignobject\",\n \"desc\",\n \"title\",\n]);\nconst reNameEnd = /\\s|\\//;\nexport class Parser {\n constructor(cbs, options = {}) {\n var _a, _b, _c, _d, _e, _f;\n this.options = options;\n /** The start index of the last event. */\n this.startIndex = 0;\n /** The end index of the last event. */\n this.endIndex = 0;\n /**\n * Store the start index of the current open tag,\n * so we can update the start index for attributes.\n */\n this.openTagStart = 0;\n this.tagname = \"\";\n this.attribname = \"\";\n this.attribvalue = \"\";\n this.attribs = null;\n this.stack = [];\n this.buffers = [];\n this.bufferOffset = 0;\n /** The index of the last written buffer. Used when resuming after a `pause()`. */\n this.writeIndex = 0;\n /** Indicates whether the parser has finished running / `.end` has been called. */\n this.ended = false;\n this.cbs = cbs !== null && cbs !== void 0 ? cbs : {};\n this.htmlMode = !this.options.xmlMode;\n this.lowerCaseTagNames = (_a = options.lowerCaseTags) !== null && _a !== void 0 ? _a : this.htmlMode;\n this.lowerCaseAttributeNames =\n (_b = options.lowerCaseAttributeNames) !== null && _b !== void 0 ? _b : this.htmlMode;\n this.recognizeSelfClosing =\n (_c = options.recognizeSelfClosing) !== null && _c !== void 0 ? _c : !this.htmlMode;\n this.tokenizer = new ((_d = options.Tokenizer) !== null && _d !== void 0 ? _d : Tokenizer)(this.options, this);\n this.foreignContext = [!this.htmlMode];\n (_f = (_e = this.cbs).onparserinit) === null || _f === void 0 ? void 0 : _f.call(_e, this);\n }\n // Tokenizer event handlers\n /** @internal */\n ontext(start, endIndex) {\n var _a, _b;\n const data = this.getSlice(start, endIndex);\n this.endIndex = endIndex - 1;\n (_b = (_a = this.cbs).ontext) === null || _b === void 0 ? void 0 : _b.call(_a, data);\n this.startIndex = endIndex;\n }\n /** @internal */\n ontextentity(cp, endIndex) {\n var _a, _b;\n this.endIndex = endIndex - 1;\n (_b = (_a = this.cbs).ontext) === null || _b === void 0 ? void 0 : _b.call(_a, fromCodePoint(cp));\n this.startIndex = endIndex;\n }\n /**\n * Checks if the current tag is a void element. Override this if you want\n * to specify your own additional void elements.\n */\n isVoidElement(name) {\n return this.htmlMode && voidElements.has(name);\n }\n /** @internal */\n onopentagname(start, endIndex) {\n this.endIndex = endIndex;\n let name = this.getSlice(start, endIndex);\n if (this.lowerCaseTagNames) {\n name = name.toLowerCase();\n }\n this.emitOpenTag(name);\n }\n emitOpenTag(name) {\n var _a, _b, _c, _d;\n this.openTagStart = this.startIndex;\n this.tagname = name;\n const impliesClose = this.htmlMode && openImpliesClose.get(name);\n if (impliesClose) {\n while (this.stack.length > 0 && impliesClose.has(this.stack[0])) {\n const element = this.stack.shift();\n (_b = (_a = this.cbs).onclosetag) === null || _b === void 0 ? void 0 : _b.call(_a, element, true);\n }\n }\n if (!this.isVoidElement(name)) {\n this.stack.unshift(name);\n if (this.htmlMode) {\n if (foreignContextElements.has(name)) {\n this.foreignContext.unshift(true);\n }\n else if (htmlIntegrationElements.has(name)) {\n this.foreignContext.unshift(false);\n }\n }\n }\n (_d = (_c = this.cbs).onopentagname) === null || _d === void 0 ? void 0 : _d.call(_c, name);\n if (this.cbs.onopentag)\n this.attribs = {};\n }\n endOpenTag(isImplied) {\n var _a, _b;\n this.startIndex = this.openTagStart;\n if (this.attribs) {\n (_b = (_a = this.cbs).onopentag) === null || _b === void 0 ? void 0 : _b.call(_a, this.tagname, this.attribs, isImplied);\n this.attribs = null;\n }\n if (this.cbs.onclosetag && this.isVoidElement(this.tagname)) {\n this.cbs.onclosetag(this.tagname, true);\n }\n this.tagname = \"\";\n }\n /** @internal */\n onopentagend(endIndex) {\n this.endIndex = endIndex;\n this.endOpenTag(false);\n // Set `startIndex` for next node\n this.startIndex = endIndex + 1;\n }\n /** @internal */\n onclosetag(start, endIndex) {\n var _a, _b, _c, _d, _e, _f, _g, _h;\n this.endIndex = endIndex;\n let name = this.getSlice(start, endIndex);\n if (this.lowerCaseTagNames) {\n name = name.toLowerCase();\n }\n if (this.htmlMode &&\n (foreignContextElements.has(name) ||\n htmlIntegrationElements.has(name))) {\n this.foreignContext.shift();\n }\n if (!this.isVoidElement(name)) {\n const pos = this.stack.indexOf(name);\n if (pos !== -1) {\n for (let index = 0; index <= pos; index++) {\n const element = this.stack.shift();\n // We know the stack has sufficient elements.\n (_b = (_a = this.cbs).onclosetag) === null || _b === void 0 ? void 0 : _b.call(_a, element, index !== pos);\n }\n }\n else if (this.htmlMode && name === \"p\") {\n // Implicit open before close\n this.emitOpenTag(\"p\");\n this.closeCurrentTag(true);\n }\n }\n else if (this.htmlMode && name === \"br\") {\n // We can't use `emitOpenTag` for implicit open, as `br` would be implicitly closed.\n (_d = (_c = this.cbs).onopentagname) === null || _d === void 0 ? void 0 : _d.call(_c, \"br\");\n (_f = (_e = this.cbs).onopentag) === null || _f === void 0 ? void 0 : _f.call(_e, \"br\", {}, true);\n (_h = (_g = this.cbs).onclosetag) === null || _h === void 0 ? void 0 : _h.call(_g, \"br\", false);\n }\n // Set `startIndex` for next node\n this.startIndex = endIndex + 1;\n }\n /** @internal */\n onselfclosingtag(endIndex) {\n this.endIndex = endIndex;\n if (this.recognizeSelfClosing || this.foreignContext[0]) {\n this.closeCurrentTag(false);\n // Set `startIndex` for next node\n this.startIndex = endIndex + 1;\n }\n else {\n // Ignore the fact that the tag is self-closing.\n this.onopentagend(endIndex);\n }\n }\n closeCurrentTag(isOpenImplied) {\n var _a, _b;\n const name = this.tagname;\n this.endOpenTag(isOpenImplied);\n // Self-closing tags will be on the top of the stack\n if (this.stack[0] === name) {\n // If the opening tag isn't implied, the closing tag has to be implied.\n (_b = (_a = this.cbs).onclosetag) === null || _b === void 0 ? void 0 : _b.call(_a, name, !isOpenImplied);\n this.stack.shift();\n }\n }\n /** @internal */\n onattribname(start, endIndex) {\n this.startIndex = start;\n const name = this.getSlice(start, endIndex);\n this.attribname = this.lowerCaseAttributeNames\n ? name.toLowerCase()\n : name;\n }\n /** @internal */\n onattribdata(start, endIndex) {\n this.attribvalue += this.getSlice(start, endIndex);\n }\n /** @internal */\n onattribentity(cp) {\n this.attribvalue += fromCodePoint(cp);\n }\n /** @internal */\n onattribend(quote, endIndex) {\n var _a, _b;\n this.endIndex = endIndex;\n (_b = (_a = this.cbs).onattribute) === null || _b === void 0 ? void 0 : _b.call(_a, this.attribname, this.attribvalue, quote === QuoteType.Double\n ? '\"'\n : quote === QuoteType.Single\n ? \"'\"\n : quote === QuoteType.NoValue\n ? undefined\n : null);\n if (this.attribs &&\n !Object.prototype.hasOwnProperty.call(this.attribs, this.attribname)) {\n this.attribs[this.attribname] = this.attribvalue;\n }\n this.attribvalue = \"\";\n }\n getInstructionName(value) {\n const index = value.search(reNameEnd);\n let name = index < 0 ? value : value.substr(0, index);\n if (this.lowerCaseTagNames) {\n name = name.toLowerCase();\n }\n return name;\n }\n /** @internal */\n ondeclaration(start, endIndex) {\n this.endIndex = endIndex;\n const value = this.getSlice(start, endIndex);\n if (this.cbs.onprocessinginstruction) {\n const name = this.getInstructionName(value);\n this.cbs.onprocessinginstruction(`!${name}`, `!${value}`);\n }\n // Set `startIndex` for next node\n this.startIndex = endIndex + 1;\n }\n /** @internal */\n onprocessinginstruction(start, endIndex) {\n this.endIndex = endIndex;\n const value = this.getSlice(start, endIndex);\n if (this.cbs.onprocessinginstruction) {\n const name = this.getInstructionName(value);\n this.cbs.onprocessinginstruction(`?${name}`, `?${value}`);\n }\n // Set `startIndex` for next node\n this.startIndex = endIndex + 1;\n }\n /** @internal */\n oncomment(start, endIndex, offset) {\n var _a, _b, _c, _d;\n this.endIndex = endIndex;\n (_b = (_a = this.cbs).oncomment) === null || _b === void 0 ? void 0 : _b.call(_a, this.getSlice(start, endIndex - offset));\n (_d = (_c = this.cbs).oncommentend) === null || _d === void 0 ? void 0 : _d.call(_c);\n // Set `startIndex` for next node\n this.startIndex = endIndex + 1;\n }\n /** @internal */\n oncdata(start, endIndex, offset) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n this.endIndex = endIndex;\n const value = this.getSlice(start, endIndex - offset);\n if (!this.htmlMode || this.options.recognizeCDATA) {\n (_b = (_a = this.cbs).oncdatastart) === null || _b === void 0 ? void 0 : _b.call(_a);\n (_d = (_c = this.cbs).ontext) === null || _d === void 0 ? void 0 : _d.call(_c, value);\n (_f = (_e = this.cbs).oncdataend) === null || _f === void 0 ? void 0 : _f.call(_e);\n }\n else {\n (_h = (_g = this.cbs).oncomment) === null || _h === void 0 ? void 0 : _h.call(_g, `[CDATA[${value}]]`);\n (_k = (_j = this.cbs).oncommentend) === null || _k === void 0 ? void 0 : _k.call(_j);\n }\n // Set `startIndex` for next node\n this.startIndex = endIndex + 1;\n }\n /** @internal */\n onend() {\n var _a, _b;\n if (this.cbs.onclosetag) {\n // Set the end index for all remaining tags\n this.endIndex = this.startIndex;\n for (let index = 0; index < this.stack.length; index++) {\n this.cbs.onclosetag(this.stack[index], true);\n }\n }\n (_b = (_a = this.cbs).onend) === null || _b === void 0 ? void 0 : _b.call(_a);\n }\n /**\n * Resets the parser to a blank state, ready to parse a new HTML document\n */\n reset() {\n var _a, _b, _c, _d;\n (_b = (_a = this.cbs).onreset) === null || _b === void 0 ? void 0 : _b.call(_a);\n this.tokenizer.reset();\n this.tagname = \"\";\n this.attribname = \"\";\n this.attribs = null;\n this.stack.length = 0;\n this.startIndex = 0;\n this.endIndex = 0;\n (_d = (_c = this.cbs).onparserinit) === null || _d === void 0 ? void 0 : _d.call(_c, this);\n this.buffers.length = 0;\n this.foreignContext.length = 0;\n this.foreignContext.unshift(!this.htmlMode);\n this.bufferOffset = 0;\n this.writeIndex = 0;\n this.ended = false;\n }\n /**\n * Resets the parser, then parses a complete document and\n * pushes it to the handler.\n *\n * @param data Document to parse.\n */\n parseComplete(data) {\n this.reset();\n this.end(data);\n }\n getSlice(start, end) {\n while (start - this.bufferOffset >= this.buffers[0].length) {\n this.shiftBuffer();\n }\n let slice = this.buffers[0].slice(start - this.bufferOffset, end - this.bufferOffset);\n while (end - this.bufferOffset > this.buffers[0].length) {\n this.shiftBuffer();\n slice += this.buffers[0].slice(0, end - this.bufferOffset);\n }\n return slice;\n }\n shiftBuffer() {\n this.bufferOffset += this.buffers[0].length;\n this.writeIndex--;\n this.buffers.shift();\n }\n /**\n * Parses a chunk of data and calls the corresponding callbacks.\n *\n * @param chunk Chunk to parse.\n */\n write(chunk) {\n var _a, _b;\n if (this.ended) {\n (_b = (_a = this.cbs).onerror) === null || _b === void 0 ? void 0 : _b.call(_a, new Error(\".write() after done!\"));\n return;\n }\n this.buffers.push(chunk);\n if (this.tokenizer.running) {\n this.tokenizer.write(chunk);\n this.writeIndex++;\n }\n }\n /**\n * Parses the end of the buffer and clears the stack, calls onend.\n *\n * @param chunk Optional final chunk to parse.\n */\n end(chunk) {\n var _a, _b;\n if (this.ended) {\n (_b = (_a = this.cbs).onerror) === null || _b === void 0 ? void 0 : _b.call(_a, new Error(\".end() after done!\"));\n return;\n }\n if (chunk)\n this.write(chunk);\n this.ended = true;\n this.tokenizer.end();\n }\n /**\n * Pauses parsing. The parser won't emit events until `resume` is called.\n */\n pause() {\n this.tokenizer.pause();\n }\n /**\n * Resumes parsing after `pause` was called.\n */\n resume() {\n this.tokenizer.resume();\n while (this.tokenizer.running &&\n this.writeIndex < this.buffers.length) {\n this.tokenizer.write(this.buffers[this.writeIndex++]);\n }\n if (this.ended)\n this.tokenizer.end();\n }\n /**\n * Alias of `write`, for backwards compatibility.\n *\n * @param chunk Chunk to parse.\n * @deprecated\n */\n parseChunk(chunk) {\n this.write(chunk);\n }\n /**\n * Alias of `end`, for backwards compatibility.\n *\n * @param chunk Optional final chunk to parse.\n * @deprecated\n */\n done(chunk) {\n this.end(chunk);\n }\n}\n//# sourceMappingURL=Parser.js.map",
37
+ "/** Types of elements found in htmlparser2's DOM */\nexport var ElementType;\n(function (ElementType) {\n /** Type for the root element of a document */\n ElementType[\"Root\"] = \"root\";\n /** Type for Text */\n ElementType[\"Text\"] = \"text\";\n /** Type for <? ... ?> */\n ElementType[\"Directive\"] = \"directive\";\n /** Type for <!-- ... --> */\n ElementType[\"Comment\"] = \"comment\";\n /** Type for <script> tags */\n ElementType[\"Script\"] = \"script\";\n /** Type for <style> tags */\n ElementType[\"Style\"] = \"style\";\n /** Type for Any tag */\n ElementType[\"Tag\"] = \"tag\";\n /** Type for <![CDATA[ ... ]]> */\n ElementType[\"CDATA\"] = \"cdata\";\n /** Type for <!doctype ...> */\n ElementType[\"Doctype\"] = \"doctype\";\n})(ElementType || (ElementType = {}));\n/**\n * Tests whether an element is a tag or not.\n *\n * @param elem Element to test\n */\nexport function isTag(elem) {\n return (elem.type === ElementType.Tag ||\n elem.type === ElementType.Script ||\n elem.type === ElementType.Style);\n}\n// Exports for backwards compatibility\n/** Type for the root element of a document */\nexport const Root = ElementType.Root;\n/** Type for Text */\nexport const Text = ElementType.Text;\n/** Type for <? ... ?> */\nexport const Directive = ElementType.Directive;\n/** Type for <!-- ... --> */\nexport const Comment = ElementType.Comment;\n/** Type for <script> tags */\nexport const Script = ElementType.Script;\n/** Type for <style> tags */\nexport const Style = ElementType.Style;\n/** Type for Any tag */\nexport const Tag = ElementType.Tag;\n/** Type for <![CDATA[ ... ]]> */\nexport const CDATA = ElementType.CDATA;\n/** Type for <!doctype ...> */\nexport const Doctype = ElementType.Doctype;\n",
38
+ "import { ElementType, isTag as isTagRaw } from \"domelementtype\";\n/**\n * This object will be used as the prototype for Nodes when creating a\n * DOM-Level-1-compliant structure.\n */\nexport class Node {\n constructor() {\n /** Parent of the node */\n this.parent = null;\n /** Previous sibling */\n this.prev = null;\n /** Next sibling */\n this.next = null;\n /** The start index of the node. Requires `withStartIndices` on the handler to be `true. */\n this.startIndex = null;\n /** The end index of the node. Requires `withEndIndices` on the handler to be `true. */\n this.endIndex = null;\n }\n // Read-write aliases for properties\n /**\n * Same as {@link parent}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get parentNode() {\n return this.parent;\n }\n set parentNode(parent) {\n this.parent = parent;\n }\n /**\n * Same as {@link prev}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get previousSibling() {\n return this.prev;\n }\n set previousSibling(prev) {\n this.prev = prev;\n }\n /**\n * Same as {@link next}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get nextSibling() {\n return this.next;\n }\n set nextSibling(next) {\n this.next = next;\n }\n /**\n * Clone this node, and optionally its children.\n *\n * @param recursive Clone child nodes as well.\n * @returns A clone of the node.\n */\n cloneNode(recursive = false) {\n return cloneNode(this, recursive);\n }\n}\n/**\n * A node that contains some data.\n */\nexport class DataNode extends Node {\n /**\n * @param data The content of the data node\n */\n constructor(data) {\n super();\n this.data = data;\n }\n /**\n * Same as {@link data}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get nodeValue() {\n return this.data;\n }\n set nodeValue(data) {\n this.data = data;\n }\n}\n/**\n * Text within the document.\n */\nexport class Text extends DataNode {\n constructor() {\n super(...arguments);\n this.type = ElementType.Text;\n }\n get nodeType() {\n return 3;\n }\n}\n/**\n * Comments within the document.\n */\nexport class Comment extends DataNode {\n constructor() {\n super(...arguments);\n this.type = ElementType.Comment;\n }\n get nodeType() {\n return 8;\n }\n}\n/**\n * Processing instructions, including doc types.\n */\nexport class ProcessingInstruction extends DataNode {\n constructor(name, data) {\n super(data);\n this.name = name;\n this.type = ElementType.Directive;\n }\n get nodeType() {\n return 1;\n }\n}\n/**\n * A `Node` that can have children.\n */\nexport class NodeWithChildren extends Node {\n /**\n * @param children Children of the node. Only certain node types can have children.\n */\n constructor(children) {\n super();\n this.children = children;\n }\n // Aliases\n /** First child of the node. */\n get firstChild() {\n var _a;\n return (_a = this.children[0]) !== null && _a !== void 0 ? _a : null;\n }\n /** Last child of the node. */\n get lastChild() {\n return this.children.length > 0\n ? this.children[this.children.length - 1]\n : null;\n }\n /**\n * Same as {@link children}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get childNodes() {\n return this.children;\n }\n set childNodes(children) {\n this.children = children;\n }\n}\nexport class CDATA extends NodeWithChildren {\n constructor() {\n super(...arguments);\n this.type = ElementType.CDATA;\n }\n get nodeType() {\n return 4;\n }\n}\n/**\n * The root node of the document.\n */\nexport class Document extends NodeWithChildren {\n constructor() {\n super(...arguments);\n this.type = ElementType.Root;\n }\n get nodeType() {\n return 9;\n }\n}\n/**\n * An element within the DOM.\n */\nexport class Element extends NodeWithChildren {\n /**\n * @param name Name of the tag, eg. `div`, `span`.\n * @param attribs Object mapping attribute names to attribute values.\n * @param children Children of the node.\n */\n constructor(name, attribs, children = [], type = name === \"script\"\n ? ElementType.Script\n : name === \"style\"\n ? ElementType.Style\n : ElementType.Tag) {\n super(children);\n this.name = name;\n this.attribs = attribs;\n this.type = type;\n }\n get nodeType() {\n return 1;\n }\n // DOM Level 1 aliases\n /**\n * Same as {@link name}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get tagName() {\n return this.name;\n }\n set tagName(name) {\n this.name = name;\n }\n get attributes() {\n return Object.keys(this.attribs).map((name) => {\n var _a, _b;\n return ({\n name,\n value: this.attribs[name],\n namespace: (_a = this[\"x-attribsNamespace\"]) === null || _a === void 0 ? void 0 : _a[name],\n prefix: (_b = this[\"x-attribsPrefix\"]) === null || _b === void 0 ? void 0 : _b[name],\n });\n });\n }\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node is a `Element`, `false` otherwise.\n */\nexport function isTag(node) {\n return isTagRaw(node);\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `CDATA`, `false` otherwise.\n */\nexport function isCDATA(node) {\n return node.type === ElementType.CDATA;\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `Text`, `false` otherwise.\n */\nexport function isText(node) {\n return node.type === ElementType.Text;\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `Comment`, `false` otherwise.\n */\nexport function isComment(node) {\n return node.type === ElementType.Comment;\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `ProcessingInstruction`, `false` otherwise.\n */\nexport function isDirective(node) {\n return node.type === ElementType.Directive;\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `ProcessingInstruction`, `false` otherwise.\n */\nexport function isDocument(node) {\n return node.type === ElementType.Root;\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node has children, `false` otherwise.\n */\nexport function hasChildren(node) {\n return Object.prototype.hasOwnProperty.call(node, \"children\");\n}\n/**\n * Clone a node, and optionally its children.\n *\n * @param recursive Clone child nodes as well.\n * @returns A clone of the node.\n */\nexport function cloneNode(node, recursive = false) {\n let result;\n if (isText(node)) {\n result = new Text(node.data);\n }\n else if (isComment(node)) {\n result = new Comment(node.data);\n }\n else if (isTag(node)) {\n const children = recursive ? cloneChildren(node.children) : [];\n const clone = new Element(node.name, { ...node.attribs }, children);\n children.forEach((child) => (child.parent = clone));\n if (node.namespace != null) {\n clone.namespace = node.namespace;\n }\n if (node[\"x-attribsNamespace\"]) {\n clone[\"x-attribsNamespace\"] = { ...node[\"x-attribsNamespace\"] };\n }\n if (node[\"x-attribsPrefix\"]) {\n clone[\"x-attribsPrefix\"] = { ...node[\"x-attribsPrefix\"] };\n }\n result = clone;\n }\n else if (isCDATA(node)) {\n const children = recursive ? cloneChildren(node.children) : [];\n const clone = new CDATA(children);\n children.forEach((child) => (child.parent = clone));\n result = clone;\n }\n else if (isDocument(node)) {\n const children = recursive ? cloneChildren(node.children) : [];\n const clone = new Document(children);\n children.forEach((child) => (child.parent = clone));\n if (node[\"x-mode\"]) {\n clone[\"x-mode\"] = node[\"x-mode\"];\n }\n result = clone;\n }\n else if (isDirective(node)) {\n const instruction = new ProcessingInstruction(node.name, node.data);\n if (node[\"x-name\"] != null) {\n instruction[\"x-name\"] = node[\"x-name\"];\n instruction[\"x-publicId\"] = node[\"x-publicId\"];\n instruction[\"x-systemId\"] = node[\"x-systemId\"];\n }\n result = instruction;\n }\n else {\n throw new Error(`Not implemented yet: ${node.type}`);\n }\n result.startIndex = node.startIndex;\n result.endIndex = node.endIndex;\n if (node.sourceCodeLocation != null) {\n result.sourceCodeLocation = node.sourceCodeLocation;\n }\n return result;\n}\nfunction cloneChildren(childs) {\n const children = childs.map((child) => cloneNode(child, true));\n for (let i = 1; i < children.length; i++) {\n children[i].prev = children[i - 1];\n children[i - 1].next = children[i];\n }\n return children;\n}\n",
39
+ "import { ElementType } from \"domelementtype\";\nimport { Element, Text, Comment, CDATA, Document, ProcessingInstruction, } from \"./node.js\";\nexport * from \"./node.js\";\n// Default options\nconst defaultOpts = {\n withStartIndices: false,\n withEndIndices: false,\n xmlMode: false,\n};\nexport class DomHandler {\n /**\n * @param callback Called once parsing has completed.\n * @param options Settings for the handler.\n * @param elementCB Callback whenever a tag is closed.\n */\n constructor(callback, options, elementCB) {\n /** The elements of the DOM */\n this.dom = [];\n /** The root element for the DOM */\n this.root = new Document(this.dom);\n /** Indicated whether parsing has been completed. */\n this.done = false;\n /** Stack of open tags. */\n this.tagStack = [this.root];\n /** A data node that is still being written to. */\n this.lastNode = null;\n /** Reference to the parser instance. Used for location information. */\n this.parser = null;\n // Make it possible to skip arguments, for backwards-compatibility\n if (typeof options === \"function\") {\n elementCB = options;\n options = defaultOpts;\n }\n if (typeof callback === \"object\") {\n options = callback;\n callback = undefined;\n }\n this.callback = callback !== null && callback !== void 0 ? callback : null;\n this.options = options !== null && options !== void 0 ? options : defaultOpts;\n this.elementCB = elementCB !== null && elementCB !== void 0 ? elementCB : null;\n }\n onparserinit(parser) {\n this.parser = parser;\n }\n // Resets the handler back to starting state\n onreset() {\n this.dom = [];\n this.root = new Document(this.dom);\n this.done = false;\n this.tagStack = [this.root];\n this.lastNode = null;\n this.parser = null;\n }\n // Signals the handler that parsing is done\n onend() {\n if (this.done)\n return;\n this.done = true;\n this.parser = null;\n this.handleCallback(null);\n }\n onerror(error) {\n this.handleCallback(error);\n }\n onclosetag() {\n this.lastNode = null;\n const elem = this.tagStack.pop();\n if (this.options.withEndIndices) {\n elem.endIndex = this.parser.endIndex;\n }\n if (this.elementCB)\n this.elementCB(elem);\n }\n onopentag(name, attribs) {\n const type = this.options.xmlMode ? ElementType.Tag : undefined;\n const element = new Element(name, attribs, undefined, type);\n this.addNode(element);\n this.tagStack.push(element);\n }\n ontext(data) {\n const { lastNode } = this;\n if (lastNode && lastNode.type === ElementType.Text) {\n lastNode.data += data;\n if (this.options.withEndIndices) {\n lastNode.endIndex = this.parser.endIndex;\n }\n }\n else {\n const node = new Text(data);\n this.addNode(node);\n this.lastNode = node;\n }\n }\n oncomment(data) {\n if (this.lastNode && this.lastNode.type === ElementType.Comment) {\n this.lastNode.data += data;\n return;\n }\n const node = new Comment(data);\n this.addNode(node);\n this.lastNode = node;\n }\n oncommentend() {\n this.lastNode = null;\n }\n oncdatastart() {\n const text = new Text(\"\");\n const node = new CDATA([text]);\n this.addNode(node);\n text.parent = node;\n this.lastNode = text;\n }\n oncdataend() {\n this.lastNode = null;\n }\n onprocessinginstruction(name, data) {\n const node = new ProcessingInstruction(name, data);\n this.addNode(node);\n }\n handleCallback(error) {\n if (typeof this.callback === \"function\") {\n this.callback(error, this.dom);\n }\n else if (error) {\n throw error;\n }\n }\n addNode(node) {\n const parent = this.tagStack[this.tagStack.length - 1];\n const previousSibling = parent.children[parent.children.length - 1];\n if (this.options.withStartIndices) {\n node.startIndex = this.parser.startIndex;\n }\n if (this.options.withEndIndices) {\n node.endIndex = this.parser.endIndex;\n }\n parent.children.push(node);\n if (previousSibling) {\n node.prev = previousSibling;\n previousSibling.next = node;\n }\n node.parent = parent;\n this.lastNode = null;\n }\n}\nexport default DomHandler;\n",
40
+ "export const xmlReplacer = /[\"&'<>$\\x80-\\uFFFF]/g;\nconst xmlCodeMap = new Map([\n [34, \"&quot;\"],\n [38, \"&amp;\"],\n [39, \"&apos;\"],\n [60, \"&lt;\"],\n [62, \"&gt;\"],\n]);\n// For compatibility with node < 4, we wrap `codePointAt`\nexport const getCodePoint = \n// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\nString.prototype.codePointAt != null\n ? (str, index) => str.codePointAt(index)\n : // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n (c, index) => (c.charCodeAt(index) & 0xfc00) === 0xd800\n ? (c.charCodeAt(index) - 0xd800) * 0x400 +\n c.charCodeAt(index + 1) -\n 0xdc00 +\n 0x10000\n : c.charCodeAt(index);\n/**\n * Encodes all non-ASCII characters, as well as characters not valid in XML\n * documents using XML entities.\n *\n * If a character has no equivalent entity, a\n * numeric hexadecimal reference (eg. `&#xfc;`) will be used.\n */\nexport function encodeXML(str) {\n let ret = \"\";\n let lastIdx = 0;\n let match;\n while ((match = xmlReplacer.exec(str)) !== null) {\n const i = match.index;\n const char = str.charCodeAt(i);\n const next = xmlCodeMap.get(char);\n if (next !== undefined) {\n ret += str.substring(lastIdx, i) + next;\n lastIdx = i + 1;\n }\n else {\n ret += `${str.substring(lastIdx, i)}&#x${getCodePoint(str, i).toString(16)};`;\n // Increase by 1 if we have a surrogate pair\n lastIdx = xmlReplacer.lastIndex += Number((char & 0xfc00) === 0xd800);\n }\n }\n return ret + str.substr(lastIdx);\n}\n/**\n * Encodes all non-ASCII characters, as well as characters not valid in XML\n * documents using numeric hexadecimal reference (eg. `&#xfc;`).\n *\n * Have a look at `escapeUTF8` if you want a more concise output at the expense\n * of reduced transportability.\n *\n * @param data String to escape.\n */\nexport const escape = encodeXML;\n/**\n * Creates a function that escapes all characters matched by the given regular\n * expression using the given map of characters to escape to their entities.\n *\n * @param regex Regular expression to match characters to escape.\n * @param map Map of characters to escape to their entities.\n *\n * @returns Function that escapes all characters matched by the given regular\n * expression using the given map of characters to escape to their entities.\n */\nfunction getEscaper(regex, map) {\n return function escape(data) {\n let match;\n let lastIdx = 0;\n let result = \"\";\n while ((match = regex.exec(data))) {\n if (lastIdx !== match.index) {\n result += data.substring(lastIdx, match.index);\n }\n // We know that this character will be in the map.\n result += map.get(match[0].charCodeAt(0));\n // Every match will be of length 1\n lastIdx = match.index + 1;\n }\n return result + data.substring(lastIdx);\n };\n}\n/**\n * Encodes all characters not valid in XML documents using XML entities.\n *\n * Note that the output will be character-set dependent.\n *\n * @param data String to escape.\n */\nexport const escapeUTF8 = getEscaper(/[&<>'\"]/g, xmlCodeMap);\n/**\n * Encodes all characters that have to be escaped in HTML attributes,\n * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.\n *\n * @param data String to escape.\n */\nexport const escapeAttribute = getEscaper(/[\"&\\u00A0]/g, new Map([\n [34, \"&quot;\"],\n [38, \"&amp;\"],\n [160, \"&nbsp;\"],\n]));\n/**\n * Encodes all characters that have to be escaped in HTML text,\n * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.\n *\n * @param data String to escape.\n */\nexport const escapeText = getEscaper(/[&<>\\u00A0]/g, new Map([\n [38, \"&amp;\"],\n [60, \"&lt;\"],\n [62, \"&gt;\"],\n [160, \"&nbsp;\"],\n]));\n//# sourceMappingURL=escape.js.map",
41
+ "import { decodeXML, decodeHTML, DecodingMode } from \"./decode.js\";\nimport { encodeHTML, encodeNonAsciiHTML } from \"./encode.js\";\nimport { encodeXML, escapeUTF8, escapeAttribute, escapeText, } from \"./escape.js\";\n/** The level of entities to support. */\nexport var EntityLevel;\n(function (EntityLevel) {\n /** Support only XML entities. */\n EntityLevel[EntityLevel[\"XML\"] = 0] = \"XML\";\n /** Support HTML entities, which are a superset of XML entities. */\n EntityLevel[EntityLevel[\"HTML\"] = 1] = \"HTML\";\n})(EntityLevel || (EntityLevel = {}));\nexport var EncodingMode;\n(function (EncodingMode) {\n /**\n * The output is UTF-8 encoded. Only characters that need escaping within\n * XML will be escaped.\n */\n EncodingMode[EncodingMode[\"UTF8\"] = 0] = \"UTF8\";\n /**\n * The output consists only of ASCII characters. Characters that need\n * escaping within HTML, and characters that aren't ASCII characters will\n * be escaped.\n */\n EncodingMode[EncodingMode[\"ASCII\"] = 1] = \"ASCII\";\n /**\n * Encode all characters that have an equivalent entity, as well as all\n * characters that are not ASCII characters.\n */\n EncodingMode[EncodingMode[\"Extensive\"] = 2] = \"Extensive\";\n /**\n * Encode all characters that have to be escaped in HTML attributes,\n * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.\n */\n EncodingMode[EncodingMode[\"Attribute\"] = 3] = \"Attribute\";\n /**\n * Encode all characters that have to be escaped in HTML text,\n * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.\n */\n EncodingMode[EncodingMode[\"Text\"] = 4] = \"Text\";\n})(EncodingMode || (EncodingMode = {}));\n/**\n * Decodes a string with entities.\n *\n * @param data String to decode.\n * @param options Decoding options.\n */\nexport function decode(data, options = EntityLevel.XML) {\n const level = typeof options === \"number\" ? options : options.level;\n if (level === EntityLevel.HTML) {\n const mode = typeof options === \"object\" ? options.mode : undefined;\n return decodeHTML(data, mode);\n }\n return decodeXML(data);\n}\n/**\n * Decodes a string with entities. Does not allow missing trailing semicolons for entities.\n *\n * @param data String to decode.\n * @param options Decoding options.\n * @deprecated Use `decode` with the `mode` set to `Strict`.\n */\nexport function decodeStrict(data, options = EntityLevel.XML) {\n var _a;\n const opts = typeof options === \"number\" ? { level: options } : options;\n (_a = opts.mode) !== null && _a !== void 0 ? _a : (opts.mode = DecodingMode.Strict);\n return decode(data, opts);\n}\n/**\n * Encodes a string with entities.\n *\n * @param data String to encode.\n * @param options Encoding options.\n */\nexport function encode(data, options = EntityLevel.XML) {\n const opts = typeof options === \"number\" ? { level: options } : options;\n // Mode `UTF8` just escapes XML entities\n if (opts.mode === EncodingMode.UTF8)\n return escapeUTF8(data);\n if (opts.mode === EncodingMode.Attribute)\n return escapeAttribute(data);\n if (opts.mode === EncodingMode.Text)\n return escapeText(data);\n if (opts.level === EntityLevel.HTML) {\n if (opts.mode === EncodingMode.ASCII) {\n return encodeNonAsciiHTML(data);\n }\n return encodeHTML(data);\n }\n // ASCII and Extensive are equivalent\n return encodeXML(data);\n}\nexport { encodeXML, escape, escapeUTF8, escapeAttribute, escapeText, } from \"./escape.js\";\nexport { encodeHTML, encodeNonAsciiHTML, \n// Legacy aliases (deprecated)\nencodeHTML as encodeHTML4, encodeHTML as encodeHTML5, } from \"./encode.js\";\nexport { EntityDecoder, DecodingMode, decodeXML, decodeHTML, decodeHTMLStrict, decodeHTMLAttribute, \n// Legacy aliases (deprecated)\ndecodeHTML as decodeHTML4, decodeHTML as decodeHTML5, decodeHTMLStrict as decodeHTML4Strict, decodeHTMLStrict as decodeHTML5Strict, decodeXML as decodeXMLStrict, } from \"./decode.js\";\n//# sourceMappingURL=index.js.map",
42
+ "export const elementNames = new Map([\n \"altGlyph\",\n \"altGlyphDef\",\n \"altGlyphItem\",\n \"animateColor\",\n \"animateMotion\",\n \"animateTransform\",\n \"clipPath\",\n \"feBlend\",\n \"feColorMatrix\",\n \"feComponentTransfer\",\n \"feComposite\",\n \"feConvolveMatrix\",\n \"feDiffuseLighting\",\n \"feDisplacementMap\",\n \"feDistantLight\",\n \"feDropShadow\",\n \"feFlood\",\n \"feFuncA\",\n \"feFuncB\",\n \"feFuncG\",\n \"feFuncR\",\n \"feGaussianBlur\",\n \"feImage\",\n \"feMerge\",\n \"feMergeNode\",\n \"feMorphology\",\n \"feOffset\",\n \"fePointLight\",\n \"feSpecularLighting\",\n \"feSpotLight\",\n \"feTile\",\n \"feTurbulence\",\n \"foreignObject\",\n \"glyphRef\",\n \"linearGradient\",\n \"radialGradient\",\n \"textPath\",\n].map((val) => [val.toLowerCase(), val]));\nexport const attributeNames = new Map([\n \"definitionURL\",\n \"attributeName\",\n \"attributeType\",\n \"baseFrequency\",\n \"baseProfile\",\n \"calcMode\",\n \"clipPathUnits\",\n \"diffuseConstant\",\n \"edgeMode\",\n \"filterUnits\",\n \"glyphRef\",\n \"gradientTransform\",\n \"gradientUnits\",\n \"kernelMatrix\",\n \"kernelUnitLength\",\n \"keyPoints\",\n \"keySplines\",\n \"keyTimes\",\n \"lengthAdjust\",\n \"limitingConeAngle\",\n \"markerHeight\",\n \"markerUnits\",\n \"markerWidth\",\n \"maskContentUnits\",\n \"maskUnits\",\n \"numOctaves\",\n \"pathLength\",\n \"patternContentUnits\",\n \"patternTransform\",\n \"patternUnits\",\n \"pointsAtX\",\n \"pointsAtY\",\n \"pointsAtZ\",\n \"preserveAlpha\",\n \"preserveAspectRatio\",\n \"primitiveUnits\",\n \"refX\",\n \"refY\",\n \"repeatCount\",\n \"repeatDur\",\n \"requiredExtensions\",\n \"requiredFeatures\",\n \"specularConstant\",\n \"specularExponent\",\n \"spreadMethod\",\n \"startOffset\",\n \"stdDeviation\",\n \"stitchTiles\",\n \"surfaceScale\",\n \"systemLanguage\",\n \"tableValues\",\n \"targetX\",\n \"targetY\",\n \"textLength\",\n \"viewBox\",\n \"viewTarget\",\n \"xChannelSelector\",\n \"yChannelSelector\",\n \"zoomAndPan\",\n].map((val) => [val.toLowerCase(), val]));\n",
43
+ "/*\n * Module dependencies\n */\nimport * as ElementType from \"domelementtype\";\nimport { encodeXML, escapeAttribute, escapeText } from \"entities\";\n/**\n * Mixed-case SVG and MathML tags & attributes\n * recognized by the HTML parser.\n *\n * @see https://html.spec.whatwg.org/multipage/parsing.html#parsing-main-inforeign\n */\nimport { elementNames, attributeNames } from \"./foreignNames.js\";\nconst unencodedElements = new Set([\n \"style\",\n \"script\",\n \"xmp\",\n \"iframe\",\n \"noembed\",\n \"noframes\",\n \"plaintext\",\n \"noscript\",\n]);\nfunction replaceQuotes(value) {\n return value.replace(/\"/g, \"&quot;\");\n}\n/**\n * Format attributes\n */\nfunction formatAttributes(attributes, opts) {\n var _a;\n if (!attributes)\n return;\n const encode = ((_a = opts.encodeEntities) !== null && _a !== void 0 ? _a : opts.decodeEntities) === false\n ? replaceQuotes\n : opts.xmlMode || opts.encodeEntities !== \"utf8\"\n ? encodeXML\n : escapeAttribute;\n return Object.keys(attributes)\n .map((key) => {\n var _a, _b;\n const value = (_a = attributes[key]) !== null && _a !== void 0 ? _a : \"\";\n if (opts.xmlMode === \"foreign\") {\n /* Fix up mixed-case attribute names */\n key = (_b = attributeNames.get(key)) !== null && _b !== void 0 ? _b : key;\n }\n if (!opts.emptyAttrs && !opts.xmlMode && value === \"\") {\n return key;\n }\n return `${key}=\"${encode(value)}\"`;\n })\n .join(\" \");\n}\n/**\n * Self-enclosing tags\n */\nconst singleTag = new Set([\n \"area\",\n \"base\",\n \"basefont\",\n \"br\",\n \"col\",\n \"command\",\n \"embed\",\n \"frame\",\n \"hr\",\n \"img\",\n \"input\",\n \"isindex\",\n \"keygen\",\n \"link\",\n \"meta\",\n \"param\",\n \"source\",\n \"track\",\n \"wbr\",\n]);\n/**\n * Renders a DOM node or an array of DOM nodes to a string.\n *\n * Can be thought of as the equivalent of the `outerHTML` of the passed node(s).\n *\n * @param node Node to be rendered.\n * @param options Changes serialization behavior\n */\nexport function render(node, options = {}) {\n const nodes = \"length\" in node ? node : [node];\n let output = \"\";\n for (let i = 0; i < nodes.length; i++) {\n output += renderNode(nodes[i], options);\n }\n return output;\n}\nexport default render;\nfunction renderNode(node, options) {\n switch (node.type) {\n case ElementType.Root:\n return render(node.children, options);\n // @ts-expect-error We don't use `Doctype` yet\n case ElementType.Doctype:\n case ElementType.Directive:\n return renderDirective(node);\n case ElementType.Comment:\n return renderComment(node);\n case ElementType.CDATA:\n return renderCdata(node);\n case ElementType.Script:\n case ElementType.Style:\n case ElementType.Tag:\n return renderTag(node, options);\n case ElementType.Text:\n return renderText(node, options);\n }\n}\nconst foreignModeIntegrationPoints = new Set([\n \"mi\",\n \"mo\",\n \"mn\",\n \"ms\",\n \"mtext\",\n \"annotation-xml\",\n \"foreignObject\",\n \"desc\",\n \"title\",\n]);\nconst foreignElements = new Set([\"svg\", \"math\"]);\nfunction renderTag(elem, opts) {\n var _a;\n // Handle SVG / MathML in HTML\n if (opts.xmlMode === \"foreign\") {\n /* Fix up mixed-case element names */\n elem.name = (_a = elementNames.get(elem.name)) !== null && _a !== void 0 ? _a : elem.name;\n /* Exit foreign mode at integration points */\n if (elem.parent &&\n foreignModeIntegrationPoints.has(elem.parent.name)) {\n opts = { ...opts, xmlMode: false };\n }\n }\n if (!opts.xmlMode && foreignElements.has(elem.name)) {\n opts = { ...opts, xmlMode: \"foreign\" };\n }\n let tag = `<${elem.name}`;\n const attribs = formatAttributes(elem.attribs, opts);\n if (attribs) {\n tag += ` ${attribs}`;\n }\n if (elem.children.length === 0 &&\n (opts.xmlMode\n ? // In XML mode or foreign mode, and user hasn't explicitly turned off self-closing tags\n opts.selfClosingTags !== false\n : // User explicitly asked for self-closing tags, even in HTML mode\n opts.selfClosingTags && singleTag.has(elem.name))) {\n if (!opts.xmlMode)\n tag += \" \";\n tag += \"/>\";\n }\n else {\n tag += \">\";\n if (elem.children.length > 0) {\n tag += render(elem.children, opts);\n }\n if (opts.xmlMode || !singleTag.has(elem.name)) {\n tag += `</${elem.name}>`;\n }\n }\n return tag;\n}\nfunction renderDirective(elem) {\n return `<${elem.data}>`;\n}\nfunction renderText(elem, opts) {\n var _a;\n let data = elem.data || \"\";\n // If entities weren't decoded, no need to encode them back\n if (((_a = opts.encodeEntities) !== null && _a !== void 0 ? _a : opts.decodeEntities) !== false &&\n !(!opts.xmlMode &&\n elem.parent &&\n unencodedElements.has(elem.parent.name))) {\n data =\n opts.xmlMode || opts.encodeEntities !== \"utf8\"\n ? encodeXML(data)\n : escapeText(data);\n }\n return data;\n}\nfunction renderCdata(elem) {\n return `<![CDATA[${elem.children[0].data}]]>`;\n}\nfunction renderComment(elem) {\n return `<!--${elem.data}-->`;\n}\n",
44
+ "import { isTag, isCDATA, isText, hasChildren, isComment, } from \"domhandler\";\nimport renderHTML from \"dom-serializer\";\nimport { ElementType } from \"domelementtype\";\n/**\n * @category Stringify\n * @deprecated Use the `dom-serializer` module directly.\n * @param node Node to get the outer HTML of.\n * @param options Options for serialization.\n * @returns `node`'s outer HTML.\n */\nexport function getOuterHTML(node, options) {\n return renderHTML(node, options);\n}\n/**\n * @category Stringify\n * @deprecated Use the `dom-serializer` module directly.\n * @param node Node to get the inner HTML of.\n * @param options Options for serialization.\n * @returns `node`'s inner HTML.\n */\nexport function getInnerHTML(node, options) {\n return hasChildren(node)\n ? node.children.map((node) => getOuterHTML(node, options)).join(\"\")\n : \"\";\n}\n/**\n * Get a node's inner text. Same as `textContent`, but inserts newlines for `<br>` tags. Ignores comments.\n *\n * @category Stringify\n * @deprecated Use `textContent` instead.\n * @param node Node to get the inner text of.\n * @returns `node`'s inner text.\n */\nexport function getText(node) {\n if (Array.isArray(node))\n return node.map(getText).join(\"\");\n if (isTag(node))\n return node.name === \"br\" ? \"\\n\" : getText(node.children);\n if (isCDATA(node))\n return getText(node.children);\n if (isText(node))\n return node.data;\n return \"\";\n}\n/**\n * Get a node's text content. Ignores comments.\n *\n * @category Stringify\n * @param node Node to get the text content of.\n * @returns `node`'s text content.\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent}\n */\nexport function textContent(node) {\n if (Array.isArray(node))\n return node.map(textContent).join(\"\");\n if (hasChildren(node) && !isComment(node)) {\n return textContent(node.children);\n }\n if (isText(node))\n return node.data;\n return \"\";\n}\n/**\n * Get a node's inner text, ignoring `<script>` and `<style>` tags. Ignores comments.\n *\n * @category Stringify\n * @param node Node to get the inner text of.\n * @returns `node`'s inner text.\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/Node/innerText}\n */\nexport function innerText(node) {\n if (Array.isArray(node))\n return node.map(innerText).join(\"\");\n if (hasChildren(node) && (node.type === ElementType.Tag || isCDATA(node))) {\n return innerText(node.children);\n }\n if (isText(node))\n return node.data;\n return \"\";\n}\n//# sourceMappingURL=stringify.js.map",
45
+ "import { isTag, hasChildren, } from \"domhandler\";\n/**\n * Get a node's children.\n *\n * @category Traversal\n * @param elem Node to get the children of.\n * @returns `elem`'s children, or an empty array.\n */\nexport function getChildren(elem) {\n return hasChildren(elem) ? elem.children : [];\n}\n/**\n * Get a node's parent.\n *\n * @category Traversal\n * @param elem Node to get the parent of.\n * @returns `elem`'s parent node, or `null` if `elem` is a root node.\n */\nexport function getParent(elem) {\n return elem.parent || null;\n}\n/**\n * Gets an elements siblings, including the element itself.\n *\n * Attempts to get the children through the element's parent first. If we don't\n * have a parent (the element is a root node), we walk the element's `prev` &\n * `next` to get all remaining nodes.\n *\n * @category Traversal\n * @param elem Element to get the siblings of.\n * @returns `elem`'s siblings, including `elem`.\n */\nexport function getSiblings(elem) {\n const parent = getParent(elem);\n if (parent != null)\n return getChildren(parent);\n const siblings = [elem];\n let { prev, next } = elem;\n while (prev != null) {\n siblings.unshift(prev);\n ({ prev } = prev);\n }\n while (next != null) {\n siblings.push(next);\n ({ next } = next);\n }\n return siblings;\n}\n/**\n * Gets an attribute from an element.\n *\n * @category Traversal\n * @param elem Element to check.\n * @param name Attribute name to retrieve.\n * @returns The element's attribute value, or `undefined`.\n */\nexport function getAttributeValue(elem, name) {\n var _a;\n return (_a = elem.attribs) === null || _a === void 0 ? void 0 : _a[name];\n}\n/**\n * Checks whether an element has an attribute.\n *\n * @category Traversal\n * @param elem Element to check.\n * @param name Attribute name to look for.\n * @returns Returns whether `elem` has the attribute `name`.\n */\nexport function hasAttrib(elem, name) {\n return (elem.attribs != null &&\n Object.prototype.hasOwnProperty.call(elem.attribs, name) &&\n elem.attribs[name] != null);\n}\n/**\n * Get the tag name of an element.\n *\n * @category Traversal\n * @param elem The element to get the name for.\n * @returns The tag name of `elem`.\n */\nexport function getName(elem) {\n return elem.name;\n}\n/**\n * Returns the next element sibling of a node.\n *\n * @category Traversal\n * @param elem The element to get the next sibling of.\n * @returns `elem`'s next sibling that is a tag, or `null` if there is no next\n * sibling.\n */\nexport function nextElementSibling(elem) {\n let { next } = elem;\n while (next !== null && !isTag(next))\n ({ next } = next);\n return next;\n}\n/**\n * Returns the previous element sibling of a node.\n *\n * @category Traversal\n * @param elem The element to get the previous sibling of.\n * @returns `elem`'s previous sibling that is a tag, or `null` if there is no\n * previous sibling.\n */\nexport function prevElementSibling(elem) {\n let { prev } = elem;\n while (prev !== null && !isTag(prev))\n ({ prev } = prev);\n return prev;\n}\n//# sourceMappingURL=traversal.js.map",
46
+ "/**\n * Remove an element from the dom\n *\n * @category Manipulation\n * @param elem The element to be removed\n */\nexport function removeElement(elem) {\n if (elem.prev)\n elem.prev.next = elem.next;\n if (elem.next)\n elem.next.prev = elem.prev;\n if (elem.parent) {\n const childs = elem.parent.children;\n const childsIndex = childs.lastIndexOf(elem);\n if (childsIndex >= 0) {\n childs.splice(childsIndex, 1);\n }\n }\n elem.next = null;\n elem.prev = null;\n elem.parent = null;\n}\n/**\n * Replace an element in the dom\n *\n * @category Manipulation\n * @param elem The element to be replaced\n * @param replacement The element to be added\n */\nexport function replaceElement(elem, replacement) {\n const prev = (replacement.prev = elem.prev);\n if (prev) {\n prev.next = replacement;\n }\n const next = (replacement.next = elem.next);\n if (next) {\n next.prev = replacement;\n }\n const parent = (replacement.parent = elem.parent);\n if (parent) {\n const childs = parent.children;\n childs[childs.lastIndexOf(elem)] = replacement;\n elem.parent = null;\n }\n}\n/**\n * Append a child to an element.\n *\n * @category Manipulation\n * @param parent The element to append to.\n * @param child The element to be added as a child.\n */\nexport function appendChild(parent, child) {\n removeElement(child);\n child.next = null;\n child.parent = parent;\n if (parent.children.push(child) > 1) {\n const sibling = parent.children[parent.children.length - 2];\n sibling.next = child;\n child.prev = sibling;\n }\n else {\n child.prev = null;\n }\n}\n/**\n * Append an element after another.\n *\n * @category Manipulation\n * @param elem The element to append after.\n * @param next The element be added.\n */\nexport function append(elem, next) {\n removeElement(next);\n const { parent } = elem;\n const currNext = elem.next;\n next.next = currNext;\n next.prev = elem;\n elem.next = next;\n next.parent = parent;\n if (currNext) {\n currNext.prev = next;\n if (parent) {\n const childs = parent.children;\n childs.splice(childs.lastIndexOf(currNext), 0, next);\n }\n }\n else if (parent) {\n parent.children.push(next);\n }\n}\n/**\n * Prepend a child to an element.\n *\n * @category Manipulation\n * @param parent The element to prepend before.\n * @param child The element to be added as a child.\n */\nexport function prependChild(parent, child) {\n removeElement(child);\n child.parent = parent;\n child.prev = null;\n if (parent.children.unshift(child) !== 1) {\n const sibling = parent.children[1];\n sibling.prev = child;\n child.next = sibling;\n }\n else {\n child.next = null;\n }\n}\n/**\n * Prepend an element before another.\n *\n * @category Manipulation\n * @param elem The element to prepend before.\n * @param prev The element be added.\n */\nexport function prepend(elem, prev) {\n removeElement(prev);\n const { parent } = elem;\n if (parent) {\n const childs = parent.children;\n childs.splice(childs.indexOf(elem), 0, prev);\n }\n if (elem.prev) {\n elem.prev.next = prev;\n }\n prev.parent = parent;\n prev.prev = elem.prev;\n prev.next = elem;\n elem.prev = prev;\n}\n//# sourceMappingURL=manipulation.js.map",
47
+ "import { isTag, hasChildren } from \"domhandler\";\n/**\n * Search a node and its children for nodes passing a test function. If `node` is not an array, it will be wrapped in one.\n *\n * @category Querying\n * @param test Function to test nodes on.\n * @param node Node to search. Will be included in the result set if it matches.\n * @param recurse Also consider child nodes.\n * @param limit Maximum number of nodes to return.\n * @returns All nodes passing `test`.\n */\nexport function filter(test, node, recurse = true, limit = Infinity) {\n return find(test, Array.isArray(node) ? node : [node], recurse, limit);\n}\n/**\n * Search an array of nodes and their children for nodes passing a test function.\n *\n * @category Querying\n * @param test Function to test nodes on.\n * @param nodes Array of nodes to search.\n * @param recurse Also consider child nodes.\n * @param limit Maximum number of nodes to return.\n * @returns All nodes passing `test`.\n */\nexport function find(test, nodes, recurse, limit) {\n const result = [];\n /** Stack of the arrays we are looking at. */\n const nodeStack = [Array.isArray(nodes) ? nodes : [nodes]];\n /** Stack of the indices within the arrays. */\n const indexStack = [0];\n for (;;) {\n // First, check if the current array has any more elements to look at.\n if (indexStack[0] >= nodeStack[0].length) {\n // If we have no more arrays to look at, we are done.\n if (indexStack.length === 1) {\n return result;\n }\n // Otherwise, remove the current array from the stack.\n nodeStack.shift();\n indexStack.shift();\n // Loop back to the start to continue with the next array.\n continue;\n }\n const elem = nodeStack[0][indexStack[0]++];\n if (test(elem)) {\n result.push(elem);\n if (--limit <= 0)\n return result;\n }\n if (recurse && hasChildren(elem) && elem.children.length > 0) {\n /*\n * Add the children to the stack. We are depth-first, so this is\n * the next array we look at.\n */\n indexStack.unshift(0);\n nodeStack.unshift(elem.children);\n }\n }\n}\n/**\n * Finds the first element inside of an array that matches a test function. This is an alias for `Array.prototype.find`.\n *\n * @category Querying\n * @param test Function to test nodes on.\n * @param nodes Array of nodes to search.\n * @returns The first node in the array that passes `test`.\n * @deprecated Use `Array.prototype.find` directly.\n */\nexport function findOneChild(test, nodes) {\n return nodes.find(test);\n}\n/**\n * Finds one element in a tree that passes a test.\n *\n * @category Querying\n * @param test Function to test nodes on.\n * @param nodes Node or array of nodes to search.\n * @param recurse Also consider child nodes.\n * @returns The first node that passes `test`.\n */\nexport function findOne(test, nodes, recurse = true) {\n const searchedNodes = Array.isArray(nodes) ? nodes : [nodes];\n for (let i = 0; i < searchedNodes.length; i++) {\n const node = searchedNodes[i];\n if (isTag(node) && test(node)) {\n return node;\n }\n if (recurse && hasChildren(node) && node.children.length > 0) {\n const found = findOne(test, node.children, true);\n if (found)\n return found;\n }\n }\n return null;\n}\n/**\n * Checks if a tree of nodes contains at least one node passing a test.\n *\n * @category Querying\n * @param test Function to test nodes on.\n * @param nodes Array of nodes to search.\n * @returns Whether a tree of nodes contains at least one node passing the test.\n */\nexport function existsOne(test, nodes) {\n return (Array.isArray(nodes) ? nodes : [nodes]).some((node) => (isTag(node) && test(node)) ||\n (hasChildren(node) && existsOne(test, node.children)));\n}\n/**\n * Search an array of nodes and their children for elements passing a test function.\n *\n * Same as `find`, but limited to elements and with less options, leading to reduced complexity.\n *\n * @category Querying\n * @param test Function to test nodes on.\n * @param nodes Array of nodes to search.\n * @returns All nodes passing `test`.\n */\nexport function findAll(test, nodes) {\n const result = [];\n const nodeStack = [Array.isArray(nodes) ? nodes : [nodes]];\n const indexStack = [0];\n for (;;) {\n if (indexStack[0] >= nodeStack[0].length) {\n if (nodeStack.length === 1) {\n return result;\n }\n // Otherwise, remove the current array from the stack.\n nodeStack.shift();\n indexStack.shift();\n // Loop back to the start to continue with the next array.\n continue;\n }\n const elem = nodeStack[0][indexStack[0]++];\n if (isTag(elem) && test(elem))\n result.push(elem);\n if (hasChildren(elem) && elem.children.length > 0) {\n indexStack.unshift(0);\n nodeStack.unshift(elem.children);\n }\n }\n}\n//# sourceMappingURL=querying.js.map",
48
+ "import { isTag, isText } from \"domhandler\";\nimport { filter, findOne } from \"./querying.js\";\n/**\n * A map of functions to check nodes against.\n */\nconst Checks = {\n tag_name(name) {\n if (typeof name === \"function\") {\n return (elem) => isTag(elem) && name(elem.name);\n }\n else if (name === \"*\") {\n return isTag;\n }\n return (elem) => isTag(elem) && elem.name === name;\n },\n tag_type(type) {\n if (typeof type === \"function\") {\n return (elem) => type(elem.type);\n }\n return (elem) => elem.type === type;\n },\n tag_contains(data) {\n if (typeof data === \"function\") {\n return (elem) => isText(elem) && data(elem.data);\n }\n return (elem) => isText(elem) && elem.data === data;\n },\n};\n/**\n * Returns a function to check whether a node has an attribute with a particular\n * value.\n *\n * @param attrib Attribute to check.\n * @param value Attribute value to look for.\n * @returns A function to check whether the a node has an attribute with a\n * particular value.\n */\nfunction getAttribCheck(attrib, value) {\n if (typeof value === \"function\") {\n return (elem) => isTag(elem) && value(elem.attribs[attrib]);\n }\n return (elem) => isTag(elem) && elem.attribs[attrib] === value;\n}\n/**\n * Returns a function that returns `true` if either of the input functions\n * returns `true` for a node.\n *\n * @param a First function to combine.\n * @param b Second function to combine.\n * @returns A function taking a node and returning `true` if either of the input\n * functions returns `true` for the node.\n */\nfunction combineFuncs(a, b) {\n return (elem) => a(elem) || b(elem);\n}\n/**\n * Returns a function that executes all checks in `options` and returns `true`\n * if any of them match a node.\n *\n * @param options An object describing nodes to look for.\n * @returns A function that executes all checks in `options` and returns `true`\n * if any of them match a node.\n */\nfunction compileTest(options) {\n const funcs = Object.keys(options).map((key) => {\n const value = options[key];\n return Object.prototype.hasOwnProperty.call(Checks, key)\n ? Checks[key](value)\n : getAttribCheck(key, value);\n });\n return funcs.length === 0 ? null : funcs.reduce(combineFuncs);\n}\n/**\n * Checks whether a node matches the description in `options`.\n *\n * @category Legacy Query Functions\n * @param options An object describing nodes to look for.\n * @param node The element to test.\n * @returns Whether the element matches the description in `options`.\n */\nexport function testElement(options, node) {\n const test = compileTest(options);\n return test ? test(node) : true;\n}\n/**\n * Returns all nodes that match `options`.\n *\n * @category Legacy Query Functions\n * @param options An object describing nodes to look for.\n * @param nodes Nodes to search through.\n * @param recurse Also consider child nodes.\n * @param limit Maximum number of nodes to return.\n * @returns All nodes that match `options`.\n */\nexport function getElements(options, nodes, recurse, limit = Infinity) {\n const test = compileTest(options);\n return test ? filter(test, nodes, recurse, limit) : [];\n}\n/**\n * Returns the node with the supplied ID.\n *\n * @category Legacy Query Functions\n * @param id The unique ID attribute value to look for.\n * @param nodes Nodes to search through.\n * @param recurse Also consider child nodes.\n * @returns The node with the supplied ID.\n */\nexport function getElementById(id, nodes, recurse = true) {\n if (!Array.isArray(nodes))\n nodes = [nodes];\n return findOne(getAttribCheck(\"id\", id), nodes, recurse);\n}\n/**\n * Returns all nodes with the supplied `tagName`.\n *\n * @category Legacy Query Functions\n * @param tagName Tag name to search for.\n * @param nodes Nodes to search through.\n * @param recurse Also consider child nodes.\n * @param limit Maximum number of nodes to return.\n * @returns All nodes with the supplied `tagName`.\n */\nexport function getElementsByTagName(tagName, nodes, recurse = true, limit = Infinity) {\n return filter(Checks[\"tag_name\"](tagName), nodes, recurse, limit);\n}\n/**\n * Returns all nodes with the supplied `className`.\n *\n * @category Legacy Query Functions\n * @param className Class name to search for.\n * @param nodes Nodes to search through.\n * @param recurse Also consider child nodes.\n * @param limit Maximum number of nodes to return.\n * @returns All nodes with the supplied `className`.\n */\nexport function getElementsByClassName(className, nodes, recurse = true, limit = Infinity) {\n return filter(getAttribCheck(\"class\", className), nodes, recurse, limit);\n}\n/**\n * Returns all nodes with the supplied `type`.\n *\n * @category Legacy Query Functions\n * @param type Element type to look for.\n * @param nodes Nodes to search through.\n * @param recurse Also consider child nodes.\n * @param limit Maximum number of nodes to return.\n * @returns All nodes with the supplied `type`.\n */\nexport function getElementsByTagType(type, nodes, recurse = true, limit = Infinity) {\n return filter(Checks[\"tag_type\"](type), nodes, recurse, limit);\n}\n//# sourceMappingURL=legacy.js.map",
49
+ "import { hasChildren } from \"domhandler\";\n/**\n * Given an array of nodes, remove any member that is contained by another\n * member.\n *\n * @category Helpers\n * @param nodes Nodes to filter.\n * @returns Remaining nodes that aren't contained by other nodes.\n */\nexport function removeSubsets(nodes) {\n let idx = nodes.length;\n /*\n * Check if each node (or one of its ancestors) is already contained in the\n * array.\n */\n while (--idx >= 0) {\n const node = nodes[idx];\n /*\n * Remove the node if it is not unique.\n * We are going through the array from the end, so we only\n * have to check nodes that preceed the node under consideration in the array.\n */\n if (idx > 0 && nodes.lastIndexOf(node, idx - 1) >= 0) {\n nodes.splice(idx, 1);\n continue;\n }\n for (let ancestor = node.parent; ancestor; ancestor = ancestor.parent) {\n if (nodes.includes(ancestor)) {\n nodes.splice(idx, 1);\n break;\n }\n }\n }\n return nodes;\n}\n/**\n * @category Helpers\n * @see {@link http://dom.spec.whatwg.org/#dom-node-comparedocumentposition}\n */\nexport var DocumentPosition;\n(function (DocumentPosition) {\n DocumentPosition[DocumentPosition[\"DISCONNECTED\"] = 1] = \"DISCONNECTED\";\n DocumentPosition[DocumentPosition[\"PRECEDING\"] = 2] = \"PRECEDING\";\n DocumentPosition[DocumentPosition[\"FOLLOWING\"] = 4] = \"FOLLOWING\";\n DocumentPosition[DocumentPosition[\"CONTAINS\"] = 8] = \"CONTAINS\";\n DocumentPosition[DocumentPosition[\"CONTAINED_BY\"] = 16] = \"CONTAINED_BY\";\n})(DocumentPosition || (DocumentPosition = {}));\n/**\n * Compare the position of one node against another node in any other document,\n * returning a bitmask with the values from {@link DocumentPosition}.\n *\n * Document order:\n * > There is an ordering, document order, defined on all the nodes in the\n * > document corresponding to the order in which the first character of the\n * > XML representation of each node occurs in the XML representation of the\n * > document after expansion of general entities. Thus, the document element\n * > node will be the first node. Element nodes occur before their children.\n * > Thus, document order orders element nodes in order of the occurrence of\n * > their start-tag in the XML (after expansion of entities). The attribute\n * > nodes of an element occur after the element and before its children. The\n * > relative order of attribute nodes is implementation-dependent.\n *\n * Source:\n * http://www.w3.org/TR/DOM-Level-3-Core/glossary.html#dt-document-order\n *\n * @category Helpers\n * @param nodeA The first node to use in the comparison\n * @param nodeB The second node to use in the comparison\n * @returns A bitmask describing the input nodes' relative position.\n *\n * See http://dom.spec.whatwg.org/#dom-node-comparedocumentposition for\n * a description of these values.\n */\nexport function compareDocumentPosition(nodeA, nodeB) {\n const aParents = [];\n const bParents = [];\n if (nodeA === nodeB) {\n return 0;\n }\n let current = hasChildren(nodeA) ? nodeA : nodeA.parent;\n while (current) {\n aParents.unshift(current);\n current = current.parent;\n }\n current = hasChildren(nodeB) ? nodeB : nodeB.parent;\n while (current) {\n bParents.unshift(current);\n current = current.parent;\n }\n const maxIdx = Math.min(aParents.length, bParents.length);\n let idx = 0;\n while (idx < maxIdx && aParents[idx] === bParents[idx]) {\n idx++;\n }\n if (idx === 0) {\n return DocumentPosition.DISCONNECTED;\n }\n const sharedParent = aParents[idx - 1];\n const siblings = sharedParent.children;\n const aSibling = aParents[idx];\n const bSibling = bParents[idx];\n if (siblings.indexOf(aSibling) > siblings.indexOf(bSibling)) {\n if (sharedParent === nodeB) {\n return DocumentPosition.FOLLOWING | DocumentPosition.CONTAINED_BY;\n }\n return DocumentPosition.FOLLOWING;\n }\n if (sharedParent === nodeA) {\n return DocumentPosition.PRECEDING | DocumentPosition.CONTAINS;\n }\n return DocumentPosition.PRECEDING;\n}\n/**\n * Sort an array of nodes based on their relative position in the document,\n * removing any duplicate nodes. If the array contains nodes that do not belong\n * to the same document, sort order is unspecified.\n *\n * @category Helpers\n * @param nodes Array of DOM nodes.\n * @returns Collection of unique nodes, sorted in document order.\n */\nexport function uniqueSort(nodes) {\n nodes = nodes.filter((node, i, arr) => !arr.includes(node, i + 1));\n nodes.sort((a, b) => {\n const relative = compareDocumentPosition(a, b);\n if (relative & DocumentPosition.PRECEDING) {\n return -1;\n }\n else if (relative & DocumentPosition.FOLLOWING) {\n return 1;\n }\n return 0;\n });\n return nodes;\n}\n//# sourceMappingURL=helpers.js.map",
50
+ "import { textContent } from \"./stringify.js\";\nimport { getElementsByTagName } from \"./legacy.js\";\n/**\n * Get the feed object from the root of a DOM tree.\n *\n * @category Feeds\n * @param doc - The DOM to to extract the feed from.\n * @returns The feed.\n */\nexport function getFeed(doc) {\n const feedRoot = getOneElement(isValidFeed, doc);\n return !feedRoot\n ? null\n : feedRoot.name === \"feed\"\n ? getAtomFeed(feedRoot)\n : getRssFeed(feedRoot);\n}\n/**\n * Parse an Atom feed.\n *\n * @param feedRoot The root of the feed.\n * @returns The parsed feed.\n */\nfunction getAtomFeed(feedRoot) {\n var _a;\n const childs = feedRoot.children;\n const feed = {\n type: \"atom\",\n items: getElementsByTagName(\"entry\", childs).map((item) => {\n var _a;\n const { children } = item;\n const entry = { media: getMediaElements(children) };\n addConditionally(entry, \"id\", \"id\", children);\n addConditionally(entry, \"title\", \"title\", children);\n const href = (_a = getOneElement(\"link\", children)) === null || _a === void 0 ? void 0 : _a.attribs[\"href\"];\n if (href) {\n entry.link = href;\n }\n const description = fetch(\"summary\", children) || fetch(\"content\", children);\n if (description) {\n entry.description = description;\n }\n const pubDate = fetch(\"updated\", children);\n if (pubDate) {\n entry.pubDate = new Date(pubDate);\n }\n return entry;\n }),\n };\n addConditionally(feed, \"id\", \"id\", childs);\n addConditionally(feed, \"title\", \"title\", childs);\n const href = (_a = getOneElement(\"link\", childs)) === null || _a === void 0 ? void 0 : _a.attribs[\"href\"];\n if (href) {\n feed.link = href;\n }\n addConditionally(feed, \"description\", \"subtitle\", childs);\n const updated = fetch(\"updated\", childs);\n if (updated) {\n feed.updated = new Date(updated);\n }\n addConditionally(feed, \"author\", \"email\", childs, true);\n return feed;\n}\n/**\n * Parse a RSS feed.\n *\n * @param feedRoot The root of the feed.\n * @returns The parsed feed.\n */\nfunction getRssFeed(feedRoot) {\n var _a, _b;\n const childs = (_b = (_a = getOneElement(\"channel\", feedRoot.children)) === null || _a === void 0 ? void 0 : _a.children) !== null && _b !== void 0 ? _b : [];\n const feed = {\n type: feedRoot.name.substr(0, 3),\n id: \"\",\n items: getElementsByTagName(\"item\", feedRoot.children).map((item) => {\n const { children } = item;\n const entry = { media: getMediaElements(children) };\n addConditionally(entry, \"id\", \"guid\", children);\n addConditionally(entry, \"title\", \"title\", children);\n addConditionally(entry, \"link\", \"link\", children);\n addConditionally(entry, \"description\", \"description\", children);\n const pubDate = fetch(\"pubDate\", children) || fetch(\"dc:date\", children);\n if (pubDate)\n entry.pubDate = new Date(pubDate);\n return entry;\n }),\n };\n addConditionally(feed, \"title\", \"title\", childs);\n addConditionally(feed, \"link\", \"link\", childs);\n addConditionally(feed, \"description\", \"description\", childs);\n const updated = fetch(\"lastBuildDate\", childs);\n if (updated) {\n feed.updated = new Date(updated);\n }\n addConditionally(feed, \"author\", \"managingEditor\", childs, true);\n return feed;\n}\nconst MEDIA_KEYS_STRING = [\"url\", \"type\", \"lang\"];\nconst MEDIA_KEYS_INT = [\n \"fileSize\",\n \"bitrate\",\n \"framerate\",\n \"samplingrate\",\n \"channels\",\n \"duration\",\n \"height\",\n \"width\",\n];\n/**\n * Get all media elements of a feed item.\n *\n * @param where Nodes to search in.\n * @returns Media elements.\n */\nfunction getMediaElements(where) {\n return getElementsByTagName(\"media:content\", where).map((elem) => {\n const { attribs } = elem;\n const media = {\n medium: attribs[\"medium\"],\n isDefault: !!attribs[\"isDefault\"],\n };\n for (const attrib of MEDIA_KEYS_STRING) {\n if (attribs[attrib]) {\n media[attrib] = attribs[attrib];\n }\n }\n for (const attrib of MEDIA_KEYS_INT) {\n if (attribs[attrib]) {\n media[attrib] = parseInt(attribs[attrib], 10);\n }\n }\n if (attribs[\"expression\"]) {\n media.expression = attribs[\"expression\"];\n }\n return media;\n });\n}\n/**\n * Get one element by tag name.\n *\n * @param tagName Tag name to look for\n * @param node Node to search in\n * @returns The element or null\n */\nfunction getOneElement(tagName, node) {\n return getElementsByTagName(tagName, node, true, 1)[0];\n}\n/**\n * Get the text content of an element with a certain tag name.\n *\n * @param tagName Tag name to look for.\n * @param where Node to search in.\n * @param recurse Whether to recurse into child nodes.\n * @returns The text content of the element.\n */\nfunction fetch(tagName, where, recurse = false) {\n return textContent(getElementsByTagName(tagName, where, recurse, 1)).trim();\n}\n/**\n * Adds a property to an object if it has a value.\n *\n * @param obj Object to be extended\n * @param prop Property name\n * @param tagName Tag name that contains the conditionally added property\n * @param where Element to search for the property\n * @param recurse Whether to recurse into child nodes.\n */\nfunction addConditionally(obj, prop, tagName, where, recurse = false) {\n const val = fetch(tagName, where, recurse);\n if (val)\n obj[prop] = val;\n}\n/**\n * Checks if an element is a feed root node.\n *\n * @param value The name of the element to check.\n * @returns Whether an element is a feed root node.\n */\nfunction isValidFeed(value) {\n return value === \"rss\" || value === \"feed\" || value === \"rdf:RDF\";\n}\n//# sourceMappingURL=feeds.js.map",
51
+ "import { Parser } from \"./Parser.js\";\nexport { Parser } from \"./Parser.js\";\nimport { DomHandler, } from \"domhandler\";\nexport { DomHandler, \n// Old name for DomHandler\nDomHandler as DefaultHandler, } from \"domhandler\";\n// Helper methods\n/**\n * Parses the data, returns the resulting document.\n *\n * @param data The data that should be parsed.\n * @param options Optional options for the parser and DOM handler.\n */\nexport function parseDocument(data, options) {\n const handler = new DomHandler(undefined, options);\n new Parser(handler, options).end(data);\n return handler.root;\n}\n/**\n * Parses data, returns an array of the root nodes.\n *\n * Note that the root nodes still have a `Document` node as their parent.\n * Use `parseDocument` to get the `Document` node instead.\n *\n * @param data The data that should be parsed.\n * @param options Optional options for the parser and DOM handler.\n * @deprecated Use `parseDocument` instead.\n */\nexport function parseDOM(data, options) {\n return parseDocument(data, options).children;\n}\n/**\n * Creates a parser instance, with an attached DOM handler.\n *\n * @param callback A callback that will be called once parsing has been completed, with the resulting document.\n * @param options Optional options for the parser and DOM handler.\n * @param elementCallback An optional callback that will be called every time a tag has been completed inside of the DOM.\n */\nexport function createDocumentStream(callback, options, elementCallback) {\n const handler = new DomHandler((error) => callback(error, handler.root), options, elementCallback);\n return new Parser(handler, options);\n}\n/**\n * Creates a parser instance, with an attached DOM handler.\n *\n * @param callback A callback that will be called once parsing has been completed, with an array of root nodes.\n * @param options Optional options for the parser and DOM handler.\n * @param elementCallback An optional callback that will be called every time a tag has been completed inside of the DOM.\n * @deprecated Use `createDocumentStream` instead.\n */\nexport function createDomStream(callback, options, elementCallback) {\n const handler = new DomHandler(callback, options, elementCallback);\n return new Parser(handler, options);\n}\nexport { default as Tokenizer, QuoteType, } from \"./Tokenizer.js\";\n/*\n * All of the following exports exist for backwards-compatibility.\n * They should probably be removed eventually.\n */\nexport * as ElementType from \"domelementtype\";\nimport { getFeed } from \"domutils\";\nexport { getFeed } from \"domutils\";\nconst parseFeedDefaultOptions = { xmlMode: true };\n/**\n * Parse a feed.\n *\n * @param feed The feed that should be parsed, as a string.\n * @param options Optionally, options for parsing. When using this, you should set `xmlMode` to `true`.\n */\nexport function parseFeed(feed, options = parseFeedDefaultOptions) {\n return getFeed(parseDOM(feed, options));\n}\nexport * as DomUtils from \"domutils\";\n//# sourceMappingURL=index.js.map",
52
+ "// Internal\nexport const NODE_END = -1;\n\n// Node\nexport const ELEMENT_NODE = 1;\nexport const ATTRIBUTE_NODE = 2;\nexport const TEXT_NODE = 3;\nexport const CDATA_SECTION_NODE = 4;\nexport const COMMENT_NODE = 8;\nexport const DOCUMENT_NODE = 9;\nexport const DOCUMENT_TYPE_NODE = 10;\nexport const DOCUMENT_FRAGMENT_NODE = 11;\n\n// Elements\nexport const BLOCK_ELEMENTS = new Set(['ARTICLE', 'ASIDE', 'BLOCKQUOTE', 'BODY', 'BR', 'BUTTON', 'CANVAS', 'CAPTION', 'COL', 'COLGROUP', 'DD', 'DIV', 'DL', 'DT', 'EMBED', 'FIELDSET', 'FIGCAPTION', 'FIGURE', 'FOOTER', 'FORM', 'H1', 'H2', 'H3', 'H4', 'H5', 'H6', 'LI', 'UL', 'OL', 'P']);\n\n// TreeWalker\nexport const SHOW_ALL = -1;\nexport const SHOW_ELEMENT = 1;\nexport const SHOW_TEXT = 4;\nexport const SHOW_CDATA_SECTION = 8;\nexport const SHOW_COMMENT = 128;\n\n// Document position\nexport const DOCUMENT_POSITION_DISCONNECTED = 0x01;\nexport const DOCUMENT_POSITION_PRECEDING = 0x02;\nexport const DOCUMENT_POSITION_FOLLOWING = 0x04;\nexport const DOCUMENT_POSITION_CONTAINS = 0x08;\nexport const DOCUMENT_POSITION_CONTAINED_BY = 0x10;\nexport const DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = 0x20;\n\n// SVG\nexport const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n",
53
+ "const {\n assign,\n create,\n defineProperties,\n entries,\n getOwnPropertyDescriptors,\n keys,\n setPrototypeOf\n} = Object;\n\nexport {\n assign,\n create,\n defineProperties,\n entries,\n getOwnPropertyDescriptors,\n keys,\n setPrototypeOf\n};\n",
54
+ "import {ELEMENT_NODE} from './constants.js';\nimport {END, MIME, NEXT, PREV} from './symbols.js';\n\nconst $String = String;\nexport {$String as String};\n\nexport const getEnd = node => node.nodeType === ELEMENT_NODE ? node[END] : node;\n\nexport const ignoreCase = ({ownerDocument}) => ownerDocument[MIME].ignoreCase;\n\nexport const knownAdjacent = (prev, next) => {\n prev[NEXT] = next;\n next[PREV] = prev;\n};\n\nexport const knownBoundaries = (prev, current, next) => {\n knownAdjacent(prev, current);\n knownAdjacent(getEnd(current), next);\n};\n\nexport const knownSegment = (prev, start, end, next) => {\n knownAdjacent(prev, start);\n knownAdjacent(getEnd(end), next);\n};\n\nexport const knownSiblings = (prev, current, next) => {\n knownAdjacent(prev, current);\n knownAdjacent(current, next);\n};\n\nexport const localCase = ({localName, ownerDocument}) => {\n return ownerDocument[MIME].ignoreCase ? localName.toUpperCase() : localName;\n};\n\nexport const setAdjacent = (prev, next) => {\n if (prev)\n prev[NEXT] = next;\n if (next)\n next[PREV] = prev;\n};\n\n/**\n * @param {import(\"../interface/document.js\").Document} ownerDocument\n * @param {string} html\n * @return {import(\"../interface/document-fragment.js\").DocumentFragment}\n */\nexport const htmlToFragment = (ownerDocument, html) => {\n const fragment = ownerDocument.createDocumentFragment();\n\n const elem = ownerDocument.createElement('');\n elem.innerHTML = html;\n const { firstChild, lastChild } = elem;\n\n if (firstChild) {\n knownSegment(fragment, firstChild, lastChild, fragment[END]);\n\n let child = firstChild;\n do {\n child.parentNode = fragment;\n } while (child !== lastChild && (child = getEnd(child)[NEXT]));\n }\n\n return fragment;\n};",
55
+ "export const shadowRoots = new WeakMap;\n",
56
+ "import {ELEMENT_NODE} from '../shared/constants.js';\nimport {END, NEXT, UPGRADE} from '../shared/symbols.js';\nimport {entries, setPrototypeOf} from '../shared/object.js';\nimport {shadowRoots} from '../shared/shadow-roots.js';\n\nlet reactive = false;\n\nexport const Classes = new WeakMap;\n\nexport const customElements = new WeakMap;\n\nexport const attributeChangedCallback = (element, attributeName, oldValue, newValue) => {\n if (\n reactive &&\n customElements.has(element) &&\n element.attributeChangedCallback &&\n element.constructor.observedAttributes.includes(attributeName)\n ) {\n element.attributeChangedCallback(attributeName, oldValue, newValue);\n }\n};\n\nconst createTrigger = (method, isConnected) => element => {\n if (customElements.has(element)) {\n const info = customElements.get(element);\n if (info.connected !== isConnected && element.isConnected === isConnected) {\n info.connected = isConnected;\n if (method in element)\n element[method]();\n }\n }\n};\n\nconst triggerConnected = createTrigger('connectedCallback', true);\nexport const connectedCallback = element => {\n if (reactive) {\n triggerConnected(element);\n if (shadowRoots.has(element))\n element = shadowRoots.get(element).shadowRoot;\n let {[NEXT]: next, [END]: end} = element;\n while (next !== end) {\n if (next.nodeType === ELEMENT_NODE)\n triggerConnected(next);\n next = next[NEXT];\n }\n }\n};\n\nconst triggerDisconnected = createTrigger('disconnectedCallback', false);\nexport const disconnectedCallback = element => {\n if (reactive) {\n triggerDisconnected(element);\n if (shadowRoots.has(element))\n element = shadowRoots.get(element).shadowRoot;\n let {[NEXT]: next, [END]: end} = element;\n while (next !== end) {\n if (next.nodeType === ELEMENT_NODE)\n triggerDisconnected(next);\n next = next[NEXT];\n }\n }\n};\n\n/**\n * @implements globalThis.CustomElementRegistry\n */\nexport class CustomElementRegistry {\n\n /**\n * @param {Document} ownerDocument\n */\n constructor(ownerDocument) {\n /**\n * @private\n */\n this.ownerDocument = ownerDocument;\n\n /**\n * @private\n */\n this.registry = new Map;\n\n /**\n * @private\n */\n this.waiting = new Map;\n\n /**\n * @private\n */\n this.active = false;\n }\n\n /**\n * @param {string} localName the custom element definition name\n * @param {Function} Class the custom element **Class** definition\n * @param {object?} options the optional object with an `extends` property\n */\n define(localName, Class, options = {}) {\n const {ownerDocument, registry, waiting} = this;\n\n if (registry.has(localName))\n throw new Error('unable to redefine ' + localName);\n\n if (Classes.has(Class))\n throw new Error('unable to redefine the same class: ' + Class);\n\n this.active = (reactive = true);\n\n const {extends: extend} = options;\n\n Classes.set(Class, {\n ownerDocument,\n options: {is: extend ? localName : ''},\n localName: extend || localName\n });\n\n const check = extend ?\n element => {\n return element.localName === extend &&\n element.getAttribute('is') === localName;\n } :\n element => element.localName === localName;\n registry.set(localName, {Class, check});\n if (waiting.has(localName)) {\n for (const resolve of waiting.get(localName))\n resolve(Class);\n waiting.delete(localName);\n }\n ownerDocument.querySelectorAll(\n extend ? `${extend}[is=\"${localName}\"]` : localName\n ).forEach(this.upgrade, this);\n }\n\n /**\n * @param {Element} element\n */\n upgrade(element) {\n if (customElements.has(element))\n return;\n const {ownerDocument, registry} = this;\n const ce = element.getAttribute('is') || element.localName;\n if (registry.has(ce)) {\n const {Class, check} = registry.get(ce);\n if (check(element)) {\n const {attributes, isConnected} = element;\n for (const attr of attributes)\n element.removeAttributeNode(attr);\n\n const values = entries(element);\n for (const [key] of values)\n delete element[key];\n\n setPrototypeOf(element, Class.prototype);\n ownerDocument[UPGRADE] = {element, values};\n new Class(ownerDocument, ce);\n\n customElements.set(element, {connected: isConnected});\n\n for (const attr of attributes)\n element.setAttributeNode(attr);\n\n if (isConnected && element.connectedCallback)\n element.connectedCallback();\n }\n }\n }\n\n /**\n * @param {string} localName the custom element definition name\n */\n whenDefined(localName) {\n const {registry, waiting} = this;\n return new Promise(resolve => {\n if (registry.has(localName))\n resolve(registry.get(localName).Class);\n else {\n if (!waiting.has(localName))\n waiting.set(localName, []);\n waiting.get(localName).push(resolve);\n }\n });\n }\n\n /**\n * @param {string} localName the custom element definition name\n * @returns {Function?} the custom element **Class**, if any\n */\n get(localName) {\n const info = this.registry.get(localName);\n return info && info.Class;\n }\n\n /**\n * @param {Function} Class **Class** of custom element\n * @returns {string?} found tag name or null\n */\n getName(Class) {\n if (Classes.has(Class)) {\n const { localName } = Classes.get(Class);\n return localName;\n }\n return null;\n }\n}\n",
57
+ "import * as HTMLParser2 from 'htmlparser2';\n\nimport {ELEMENT_NODE, SVG_NAMESPACE} from './constants.js';\nimport {CUSTOM_ELEMENTS, PREV, END, VALUE} from './symbols.js';\nimport {keys} from './object.js';\n\nimport {knownBoundaries, knownSiblings} from './utils.js';\nimport {attributeChangedCallback, connectedCallback} from '../interface/custom-element-registry.js';\n\nconst {Parser} = HTMLParser2;\n\n// import {Mime} from './mime.js';\n// const VOID_SOURCE = Mime['text/html'].voidElements.source.slice(4, -2);\n// const VOID_ELEMENTS = new RegExp(`<(${VOID_SOURCE})([^>]*?)>`, 'gi');\n// const VOID_SANITIZER = (_, $1, $2) => `<${$1}${$2}${/\\/$/.test($2) ? '' : ' /'}>`;\n// const voidSanitizer = html => html.replace(VOID_ELEMENTS, VOID_SANITIZER);\n\nlet notParsing = true;\n\nconst append = (self, node, active) => {\n const end = self[END];\n node.parentNode = self;\n knownBoundaries(end[PREV], node, end);\n if (active && node.nodeType === ELEMENT_NODE)\n connectedCallback(node);\n return node;\n};\n\nconst attribute = (element, end, attribute, value, active) => {\n attribute[VALUE] = value;\n attribute.ownerElement = element;\n knownSiblings(end[PREV], attribute, end);\n if (attribute.name === 'class')\n element.className = value;\n if (active)\n attributeChangedCallback(element, attribute.name, null, value);\n};\n\nexport const isNotParsing = () => notParsing;\n\nexport const parseFromString = (document, isHTML, markupLanguage) => {\n const {active, registry} = document[CUSTOM_ELEMENTS];\n\n let node = document;\n let ownerSVGElement = null;\n let parsingCData = false;\n\n notParsing = false;\n\n const content = new Parser({\n // <!DOCTYPE ...>\n onprocessinginstruction(name, data) {\n if (name.toLowerCase() === '!doctype')\n document.doctype = data.slice(name.length).trim();\n },\n\n // <tagName>\n onopentag(name, attributes) {\n let create = true;\n if (isHTML) {\n if (ownerSVGElement) {\n node = append(node, document.createElementNS(SVG_NAMESPACE, name), active);\n node.ownerSVGElement = ownerSVGElement;\n create = false;\n }\n else if (name === 'svg' || name === 'SVG') {\n ownerSVGElement = document.createElementNS(SVG_NAMESPACE, name);\n node = append(node, ownerSVGElement, active);\n create = false;\n }\n else if (active) {\n const ce = name.includes('-') ? name : (attributes.is || '');\n if (ce && registry.has(ce)) {\n const {Class} = registry.get(ce);\n node = append(node, new Class, active);\n delete attributes.is;\n create = false;\n }\n }\n }\n\n if (create)\n node = append(node, document.createElement(name), false);\n\n let end = node[END];\n for (const name of keys(attributes))\n attribute(node, end, document.createAttribute(name), attributes[name], active);\n },\n\n // #text, #comment\n oncomment(data) { append(node, document.createComment(data), active); },\n ontext(text) {\n if (parsingCData) {\n append(node, document.createCDATASection(text), active);\n } else {\n append(node, document.createTextNode(text), active);\n }\n },\n\n // #cdata\n oncdatastart() { parsingCData = true; },\n oncdataend() { parsingCData = false; },\n\n // </tagName>\n onclosetag() {\n if (isHTML && node === ownerSVGElement)\n ownerSVGElement = null;\n node = node.parentNode;\n }\n }, {\n lowerCaseAttributeNames: false,\n decodeEntities: true,\n xmlMode: !isHTML\n });\n\n content.write(markupLanguage);\n content.end();\n\n notParsing = true;\n\n return document;\n};\n",
58
+ "export const htmlClasses = new Map;\n\nexport const registerHTMLClass = (names, Class) => {\n for (const name of [].concat(names)) {\n htmlClasses.set(name, Class);\n htmlClasses.set(name.toUpperCase(), Class);\n }\n};\n",
59
+ "import {\n NODE_END,\n ATTRIBUTE_NODE,\n CDATA_SECTION_NODE,\n COMMENT_NODE,\n DOCUMENT_TYPE_NODE,\n ELEMENT_NODE,\n TEXT_NODE\n} from './constants.js';\n\nimport {END, NEXT, VALUE} from './symbols.js';\n\nimport {getEnd} from './utils.js';\n\nconst loopSegment = ({[NEXT]: next, [END]: end}, json) => {\n while (next !== end) {\n switch (next.nodeType) {\n case ATTRIBUTE_NODE:\n attrAsJSON(next, json);\n break;\n case TEXT_NODE:\n case COMMENT_NODE:\n case CDATA_SECTION_NODE:\n characterDataAsJSON(next, json);\n break;\n case ELEMENT_NODE:\n elementAsJSON(next, json);\n next = getEnd(next);\n break;\n case DOCUMENT_TYPE_NODE:\n documentTypeAsJSON(next, json);\n break;\n }\n next = next[NEXT];\n }\n const last = json.length - 1;\n const value = json[last];\n if (typeof value === 'number' && value < 0)\n json[last] += NODE_END;\n else\n json.push(NODE_END);\n};\n\nexport const attrAsJSON = (attr, json) => {\n json.push(ATTRIBUTE_NODE, attr.name);\n const value = attr[VALUE].trim();\n if (value)\n json.push(value);\n};\n\nexport const characterDataAsJSON = (node, json) => {\n const value = node[VALUE];\n if (value.trim())\n json.push(node.nodeType, value);\n};\n\nexport const nonElementAsJSON = (node, json) => {\n json.push(node.nodeType);\n loopSegment(node, json);\n};\n\nexport const documentTypeAsJSON = ({name, publicId, systemId}, json) => {\n json.push(DOCUMENT_TYPE_NODE, name);\n if (publicId)\n json.push(publicId);\n if (systemId)\n json.push(systemId);\n};\n\nexport const elementAsJSON = (element, json) => {\n json.push(ELEMENT_NODE, element.localName);\n loopSegment(element, json);\n};\n",
60
+ "import {MUTATION_OBSERVER} from '../shared/symbols.js';\n\nconst createRecord =\n (type, target, element, addedNodes, removedNodes, attributeName, oldValue) =>\n ({\n type,\n target,\n addedNodes,\n removedNodes,\n attributeName,\n oldValue,\n previousSibling: element?.previousSibling || null,\n nextSibling: element?.nextSibling || null,\n});\n\nconst queueAttribute = (\n observer, target, attributeName, attributeFilter, attributeOldValue, oldValue\n) => {\n if ((!attributeFilter || attributeFilter.includes(attributeName))) {\n const {callback, records, scheduled} = observer;\n records.push(createRecord(\n 'attributes', target, null,\n [], [],\n attributeName, attributeOldValue ? oldValue : void 0\n ));\n if (!scheduled) {\n observer.scheduled = true;\n Promise.resolve().then(() => {\n observer.scheduled = false;\n callback(records.splice(0), observer);\n });\n }\n }\n};\n\nexport const attributeChangedCallback = (element, attributeName, oldValue) => {\n const {ownerDocument} = element;\n const {active, observers} = ownerDocument[MUTATION_OBSERVER];\n if (active) {\n for (const observer of observers) {\n for (const [\n target,\n {\n childList,\n subtree,\n attributes,\n attributeFilter,\n attributeOldValue\n }\n ] of observer.nodes) {\n if (childList) {\n if (\n (subtree && (target === ownerDocument || target.contains(element))) ||\n (!subtree && target.children.includes(element))\n ) {\n queueAttribute(\n observer, element,\n attributeName, attributeFilter, attributeOldValue, oldValue\n );\n break;\n }\n }\n else if (\n attributes &&\n target === element\n ) {\n queueAttribute(\n observer, element,\n attributeName, attributeFilter, attributeOldValue, oldValue\n );\n break;\n }\n }\n }\n }\n};\n\nexport const moCallback = (element, parentNode) => {\n const {ownerDocument} = element;\n const {active, observers} = ownerDocument[MUTATION_OBSERVER];\n if (active) {\n for (const observer of observers) {\n for (const [target, {subtree, childList, characterData}] of observer.nodes) {\n if (childList) {\n if (\n (parentNode && (target === parentNode || /* c8 ignore next */(subtree && target.contains(parentNode)))) ||\n (!parentNode && ((subtree && (target === ownerDocument || /* c8 ignore next */target.contains(element))) ||\n (!subtree && target[characterData ? 'childNodes' : 'children'].includes(element))))\n ) {\n const {callback, records, scheduled} = observer;\n records.push(createRecord(\n 'childList', target, element,\n parentNode ? [] : [element], parentNode ? [element] : []\n ));\n if (!scheduled) {\n observer.scheduled = true;\n Promise.resolve().then(() => {\n observer.scheduled = false;\n callback(records.splice(0), observer);\n });\n }\n break;\n }\n }\n }\n }\n }\n};\n\nexport class MutationObserverClass {\n constructor(ownerDocument) {\n const observers = new Set;\n this.observers = observers;\n this.active = false;\n\n /**\n * @implements globalThis.MutationObserver\n */\n this.class = class MutationObserver {\n\n constructor(callback) {\n /**\n * @private\n */\n this.callback = callback;\n\n /**\n * @private\n */\n this.nodes = new Map;\n\n /**\n * @private\n */\n this.records = [];\n\n /**\n * @private\n */\n this.scheduled = false;\n }\n\n disconnect() {\n this.records.splice(0);\n this.nodes.clear();\n observers.delete(this);\n ownerDocument[MUTATION_OBSERVER].active = !!observers.size;\n }\n\n /**\n * @param {Element} target\n * @param {MutationObserverInit} options\n */\n observe(target, options = {\n subtree: false,\n childList: false,\n attributes: false,\n attributeFilter: null,\n attributeOldValue: false,\n characterData: false,\n // TODO: not implemented yet\n // characterDataOldValue: false\n }) {\n if (('attributeOldValue' in options) || ('attributeFilter' in options))\n options.attributes = true;\n // if ('characterDataOldValue' in options)\n // options.characterData = true;\n options.childList = !!options.childList;\n options.subtree = !!options.subtree;\n this.nodes.set(target, options);\n observers.add(this);\n ownerDocument[MUTATION_OBSERVER].active = true;\n }\n\n /**\n * @returns {MutationRecord[]}\n */\n takeRecords() { return this.records.splice(0); }\n }\n }\n}\n",
61
+ "import {CLASS_LIST, NEXT, PREV, VALUE} from './symbols.js';\n\nimport {knownAdjacent, knownSiblings} from './utils.js';\n\nimport {attributeChangedCallback as ceAttributes} from '../interface/custom-element-registry.js';\nimport {attributeChangedCallback as moAttributes} from '../interface/mutation-observer.js';\n\nexport const emptyAttributes = new Set([\n 'allowfullscreen',\n 'allowpaymentrequest',\n 'async',\n 'autofocus',\n 'autoplay',\n 'checked',\n 'class',\n 'contenteditable',\n 'controls',\n 'default',\n 'defer',\n 'disabled',\n 'draggable',\n 'formnovalidate',\n 'hidden',\n 'id',\n 'ismap',\n 'itemscope',\n 'loop',\n 'multiple',\n 'muted',\n 'nomodule',\n 'novalidate',\n 'open',\n 'playsinline',\n 'readonly',\n 'required',\n 'reversed',\n 'selected',\n 'style',\n 'truespeed'\n]);\n\nexport const setAttribute = (element, attribute) => {\n const {[VALUE]: value, name} = attribute;\n attribute.ownerElement = element;\n knownSiblings(element, attribute, element[NEXT]);\n if (name === 'class')\n element.className = value;\n moAttributes(element, name, null);\n ceAttributes(element, name, null, value);\n};\n\nexport const removeAttribute = (element, attribute) => {\n const {[VALUE]: value, name} = attribute;\n knownAdjacent(attribute[PREV], attribute[NEXT]);\n attribute.ownerElement = attribute[PREV] = attribute[NEXT] = null;\n if (name === 'class')\n element[CLASS_LIST] = null;\n moAttributes(element, name, value);\n ceAttributes(element, name, value, null);\n};\n\nexport const booleanAttribute = {\n get(element, name) {\n return element.hasAttribute(name);\n },\n set(element, name, value) {\n if (value)\n element.setAttribute(name, '');\n else\n element.removeAttribute(name);\n }\n};\n\nexport const numericAttribute = {\n get(element, name) {\n return parseFloat(element.getAttribute(name) || 0);\n },\n set(element, name, value) {\n element.setAttribute(name, value);\n }\n};\n\nexport const stringAttribute = {\n get(element, name) {\n return element.getAttribute(name) || '';\n },\n set(element, name, value) {\n element.setAttribute(name, value);\n }\n};\n\n/* oddly enough, this apparently is not a thing\nexport const nullableAttribute = {\n get(element, name) {\n return element.getAttribute(name);\n },\n set(element, name, value) {\n if (value === null)\n element.removeAttribute(name);\n else\n element.setAttribute(name, value);\n }\n};\n*/\n",
62
+ "// https://dom.spec.whatwg.org/#interface-eventtarget\n\nconst wm = new WeakMap();\n\nfunction dispatch(event, listener) {\n if (typeof listener === 'function')\n listener.call(event.target, event);\n else\n listener.handleEvent(event);\n return event._stopImmediatePropagationFlag;\n}\n\nfunction invokeListeners({currentTarget, target}) {\n const map = wm.get(currentTarget);\n if (map && map.has(this.type)) {\n const listeners = map.get(this.type);\n if (currentTarget === target) {\n this.eventPhase = this.AT_TARGET;\n } else {\n this.eventPhase = this.BUBBLING_PHASE;\n }\n\n this.currentTarget = currentTarget;\n this.target = target;\n for (const [listener, options] of listeners) {\n if (options && options.once)\n listeners.delete(listener);\n if (dispatch(this, listener))\n break;\n }\n delete this.currentTarget;\n delete this.target;\n return this.cancelBubble;\n }\n}\n\n\n/**\n * @implements globalThis.EventTarget\n */\nclass DOMEventTarget {\n\n constructor() {\n wm.set(this, new Map);\n }\n\n /**\n * @protected\n */\n _getParent() {\n return null;\n }\n\n addEventListener(type, listener, options) {\n const map = wm.get(this);\n if (!map.has(type)) \n map.set(type, new Map);\n map.get(type).set(listener, options);\n }\n\n removeEventListener(type, listener) {\n const map = wm.get(this);\n if (map.has(type)) {\n const listeners = map.get(type);\n if (listeners.delete(listener) && !listeners.size)\n map.delete(type);\n }\n }\n\n dispatchEvent(event) {\n let node = this;\n event.eventPhase = event.CAPTURING_PHASE;\n\n // intentionally simplified, specs imply way more code: https://dom.spec.whatwg.org/#event-path\n while (node) {\n if (node.dispatchEvent)\n event._path.push({currentTarget: node, target: this});\n node = event.bubbles && node._getParent && node._getParent();\n }\n event._path.some(invokeListeners, event);\n event._path = [];\n event.eventPhase = event.NONE;\n return !event.defaultPrevented;\n }\n\n}\n\nexport {DOMEventTarget as EventTarget};\n",
63
+ "// https://dom.spec.whatwg.org/#interface-nodelist\n\n/**\n * @implements globalThis.NodeList\n */\nexport class NodeList extends Array {\n item(i) { return i < this.length ? this[i] : null; }\n}\n",
64
+ "// https://dom.spec.whatwg.org/#node\n\nimport {\n ELEMENT_NODE,\n ATTRIBUTE_NODE,\n TEXT_NODE,\n CDATA_SECTION_NODE,\n COMMENT_NODE,\n DOCUMENT_NODE,\n DOCUMENT_FRAGMENT_NODE,\n DOCUMENT_TYPE_NODE,\n DOCUMENT_POSITION_DISCONNECTED,\n DOCUMENT_POSITION_PRECEDING,\n DOCUMENT_POSITION_FOLLOWING,\n DOCUMENT_POSITION_CONTAINS,\n DOCUMENT_POSITION_CONTAINED_BY,\n DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC\n} from '../shared/constants.js';\n\nimport {NEXT, PREV} from '../shared/symbols.js';\n\nimport {EventTarget} from './event-target.js';\n\nimport {NodeList} from './node-list.js';\n\nconst getParentNodeCount = ({parentNode}) => {\n let count = 0;\n while (parentNode) {\n count++;\n parentNode = parentNode.parentNode;\n }\n return count;\n};\n\n/**\n * @implements globalThis.Node\n */\nexport class Node extends EventTarget {\n\n static get ELEMENT_NODE() { return ELEMENT_NODE; }\n static get ATTRIBUTE_NODE() { return ATTRIBUTE_NODE; }\n static get TEXT_NODE() { return TEXT_NODE; }\n static get CDATA_SECTION_NODE() { return CDATA_SECTION_NODE; }\n static get COMMENT_NODE() { return COMMENT_NODE; }\n static get DOCUMENT_NODE() { return DOCUMENT_NODE; }\n static get DOCUMENT_FRAGMENT_NODE() { return DOCUMENT_FRAGMENT_NODE; }\n static get DOCUMENT_TYPE_NODE() { return DOCUMENT_TYPE_NODE; }\n\n constructor(ownerDocument, localName, nodeType) {\n super();\n this.ownerDocument = ownerDocument;\n this.localName = localName;\n this.nodeType = nodeType;\n this.parentNode = null;\n this[NEXT] = null;\n this[PREV] = null;\n }\n\n get ELEMENT_NODE() { return ELEMENT_NODE; }\n get ATTRIBUTE_NODE() { return ATTRIBUTE_NODE; }\n get TEXT_NODE() { return TEXT_NODE; }\n get CDATA_SECTION_NODE() { return CDATA_SECTION_NODE; }\n get COMMENT_NODE() { return COMMENT_NODE; }\n get DOCUMENT_NODE() { return DOCUMENT_NODE; }\n get DOCUMENT_FRAGMENT_NODE() { return DOCUMENT_FRAGMENT_NODE; }\n get DOCUMENT_TYPE_NODE() { return DOCUMENT_TYPE_NODE; }\n\n get baseURI() {\n const ownerDocument = this.nodeType === DOCUMENT_NODE ?\n this : this.ownerDocument;\n if (ownerDocument) {\n const base = ownerDocument.querySelector('base');\n if (base)\n return base.getAttribute('href');\n\n const {location} = ownerDocument.defaultView;\n if (location)\n return location.href;\n }\n\n return null;\n }\n\n /* c8 ignore start */\n // mixin: node\n get isConnected() { return false; }\n get nodeName() { return this.localName; }\n get parentElement() { return null; }\n get previousSibling() { return null; }\n get previousElementSibling() { return null; }\n get nextSibling() { return null; }\n get nextElementSibling() { return null; }\n get childNodes() { return new NodeList; }\n get firstChild() { return null; }\n get lastChild() { return null; }\n\n // default values\n get nodeValue() { return null; }\n set nodeValue(value) {}\n get textContent() { return null; }\n set textContent(value) {}\n normalize() {}\n cloneNode() { return null; }\n contains() { return false; }\n /**\n * Inserts a node before a reference node as a child of this parent node.\n * @param {Node} newNode The node to be inserted.\n * @param {Node} referenceNode The node before which newNode is inserted. If this is null, then newNode is inserted at the end of node's child nodes.\n * @returns The added child\n */\n // eslint-disable-next-line no-unused-vars\n insertBefore(newNode, referenceNode) { return newNode }\n /**\n * Adds a node to the end of the list of children of this node.\n * @param {Node} child The node to append to the given parent node.\n * @returns The appended child.\n */\n appendChild(child) { return child }\n /**\n * Replaces a child node within this node\n * @param {Node} newChild The new node to replace oldChild.\n * @param {Node} oldChild The child to be replaced.\n * @returns The replaced Node. This is the same node as oldChild.\n */\n replaceChild(newChild, oldChild) { return oldChild }\n /**\n * Removes a child node from the DOM.\n * @param {Node} child A Node that is the child node to be removed from the DOM.\n * @returns The removed node.\n */\n removeChild(child) { return child }\n toString() { return ''; }\n /* c8 ignore stop */\n\n hasChildNodes() { return !!this.lastChild; }\n isSameNode(node) { return this === node; }\n\n // TODO: attributes?\n compareDocumentPosition(target) {\n let result = 0;\n if (this !== target) {\n let self = getParentNodeCount(this);\n let other = getParentNodeCount(target);\n if (self < other) {\n result += DOCUMENT_POSITION_FOLLOWING;\n if (this.contains(target))\n result += DOCUMENT_POSITION_CONTAINED_BY;\n }\n else if (other < self) {\n result += DOCUMENT_POSITION_PRECEDING;\n if (target.contains(this))\n result += DOCUMENT_POSITION_CONTAINS;\n }\n else if (self && other) {\n const {childNodes} = this.parentNode;\n if (childNodes.indexOf(this) < childNodes.indexOf(target))\n result += DOCUMENT_POSITION_FOLLOWING;\n else\n result += DOCUMENT_POSITION_PRECEDING;\n }\n if (!self || !other) {\n result += DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC;\n result += DOCUMENT_POSITION_DISCONNECTED;\n }\n }\n return result;\n }\n\n isEqualNode(node) {\n if (this === node)\n return true;\n if (this.nodeType === node.nodeType) {\n switch (this.nodeType) {\n case DOCUMENT_NODE:\n case DOCUMENT_FRAGMENT_NODE: {\n const aNodes = this.childNodes;\n const bNodes = node.childNodes;\n return aNodes.length === bNodes.length && aNodes.every((node, i) => node.isEqualNode(bNodes[i]));\n }\n }\n return this.toString() === node.toString();\n }\n return false;\n }\n\n /**\n * @protected\n */\n _getParent() {\n return this.parentNode;\n }\n\n /**\n * Calling it on an element inside a standard web page will return an HTMLDocument object representing the entire page (or <iframe>).\n * Calling it on an element inside a shadow DOM will return the associated ShadowRoot.\n * @return {ShadowRoot | HTMLDocument}\n */\n getRootNode() {\n let root = this;\n while (root.parentNode)\n root = root.parentNode;\n return root;\n }\n}\n",
65
+ "const {replace} = '';\n\n// escape\nconst ca = /[<>&\\xA0]/g;\n\nconst esca = {\n '\\xA0': '&#160;',\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;'\n};\n\nconst pe = m => esca[m];\n\n/**\n * Safely escape HTML entities such as `&`, `<`, `>` only.\n * @param {string} es the input to safely escape\n * @returns {string} the escaped input, and it **throws** an error if\n * the input type is unexpected, except for boolean and numbers,\n * converted as string.\n */\nexport const escape = es => replace.call(es, ca, pe);\n",
66
+ "import {ATTRIBUTE_NODE} from '../shared/constants.js';\nimport {CHANGED, VALUE} from '../shared/symbols.js';\nimport {String, ignoreCase} from '../shared/utils.js';\nimport {attrAsJSON} from '../shared/jsdon.js';\nimport {emptyAttributes} from '../shared/attributes.js';\n\nimport {attributeChangedCallback as moAttributes} from './mutation-observer.js';\nimport {attributeChangedCallback as ceAttributes} from './custom-element-registry.js';\n\nimport {Node} from './node.js';\nimport {escape} from '../shared/text-escaper.js';\n\nconst QUOTE = /\"/g;\n\n/**\n * @implements globalThis.Attr\n */\nexport class Attr extends Node {\n constructor(ownerDocument, name, value = '') {\n super(ownerDocument, name, ATTRIBUTE_NODE);\n this.ownerElement = null;\n this.name = String(name);\n this[VALUE] = String(value);\n this[CHANGED] = false;\n }\n\n get value() { return this[VALUE]; }\n set value(newValue) {\n const {[VALUE]: oldValue, name, ownerElement} = this;\n this[VALUE] = String(newValue);\n this[CHANGED] = true;\n if (ownerElement) {\n moAttributes(ownerElement, name, oldValue);\n ceAttributes(ownerElement, name, oldValue, this[VALUE]);\n }\n }\n\n cloneNode() {\n const {ownerDocument, name, [VALUE]: value} = this;\n return new Attr(ownerDocument, name, value);\n }\n\n toString() {\n const {name, [VALUE]: value} = this;\n if (emptyAttributes.has(name) && !value) {\n return ignoreCase(this) ? name : `${name}=\"\"`;\n }\n const escapedValue = (ignoreCase(this) ? value : escape(value)).replace(QUOTE, '&quot;');\n return `${name}=\"${escapedValue}\"`;\n }\n\n toJSON() {\n const json = [];\n attrAsJSON(this, json);\n return json;\n }\n}\n",
67
+ "import {\n CDATA_SECTION_NODE,\n COMMENT_NODE,\n DOCUMENT_NODE,\n DOCUMENT_FRAGMENT_NODE,\n TEXT_NODE,\n NODE_END\n} from './constants.js';\n\nimport {START, NEXT, PREV} from './symbols.js';\nimport {getEnd} from './utils.js';\n\nexport const isConnected = ({ownerDocument, parentNode}) => {\n while (parentNode) {\n if (parentNode === ownerDocument)\n return true;\n parentNode = parentNode.parentNode || parentNode.host;\n }\n return false;\n};\n\nexport const parentElement = ({parentNode}) => {\n if (parentNode) {\n switch (parentNode.nodeType) {\n case DOCUMENT_NODE:\n case DOCUMENT_FRAGMENT_NODE:\n return null;\n }\n }\n return parentNode;\n};\n\nexport const previousSibling = ({[PREV]: prev}) => {\n switch (prev ? prev.nodeType : 0) {\n case NODE_END:\n return prev[START];\n case TEXT_NODE:\n case COMMENT_NODE:\n case CDATA_SECTION_NODE:\n return prev;\n }\n return null;\n};\n\nexport const nextSibling = node => {\n const next = getEnd(node)[NEXT];\n return next && (next.nodeType === NODE_END ? null : next);\n};\n",
68
+ "// https://dom.spec.whatwg.org/#nondocumenttypechildnode\n// CharacterData, Element\n\nimport {ELEMENT_NODE} from '../shared/constants.js';\n\nimport {nextSibling, previousSibling} from '../shared/node.js';\n\nexport const nextElementSibling = node => {\n let next = nextSibling(node);\n while (next && next.nodeType !== ELEMENT_NODE)\n next = nextSibling(next);\n return next;\n};\n\nexport const previousElementSibling = node => {\n let prev = previousSibling(node);\n while (prev && prev.nodeType !== ELEMENT_NODE)\n prev = previousSibling(prev);\n return prev;\n};\n",
69
+ "// https://dom.spec.whatwg.org/#childnode\n// CharacterData, DocumentType, Element\n\nimport {ELEMENT_NODE} from '../shared/constants.js';\nimport {NEXT, PREV} from '../shared/symbols.js';\n\nimport {getEnd, setAdjacent} from '../shared/utils.js';\n\nimport {moCallback} from '../interface/mutation-observer.js';\nimport {disconnectedCallback} from '../interface/custom-element-registry.js';\n\nconst asFragment = (ownerDocument, nodes) => {\n const fragment = ownerDocument.createDocumentFragment();\n fragment.append(...nodes);\n return fragment;\n};\n\nexport const before = (node, nodes) => {\n const {ownerDocument, parentNode} = node;\n if (parentNode)\n parentNode.insertBefore(\n asFragment(ownerDocument, nodes),\n node\n );\n};\n\nexport const after = (node, nodes) => {\n const {ownerDocument, parentNode} = node;\n if (parentNode)\n parentNode.insertBefore(\n asFragment(ownerDocument, nodes),\n getEnd(node)[NEXT]\n );\n};\n\nexport const replaceWith = (node, nodes) => {\n const {ownerDocument, parentNode} = node;\n if (parentNode) {\n if (nodes.includes(node))\n replaceWith(node, [node = node.cloneNode()]);\n parentNode.insertBefore(\n asFragment(ownerDocument, nodes),\n node\n );\n node.remove();\n }\n};\n\nexport const remove = (prev, current, next) => {\n const {parentNode, nodeType} = current;\n if (prev || next) {\n setAdjacent(prev, next);\n current[PREV] = null;\n getEnd(current)[NEXT] = null;\n }\n if (parentNode) {\n current.parentNode = null;\n moCallback(current, parentNode);\n if (nodeType === ELEMENT_NODE)\n disconnectedCallback(current);\n }\n};\n",
70
+ "// https://dom.spec.whatwg.org/#interface-characterdata\n\nimport {NEXT, PREV, VALUE} from '../shared/symbols.js';\nimport {String} from '../shared/utils.js';\nimport {isConnected, parentElement, previousSibling, nextSibling} from '../shared/node.js';\nimport {characterDataAsJSON} from '../shared/jsdon.js';\n\nimport {previousElementSibling, nextElementSibling} from '../mixin/non-document-type-child-node.js';\nimport {before, after, replaceWith, remove} from '../mixin/child-node.js';\n\nimport {Node} from './node.js';\nimport {moCallback} from './mutation-observer.js';\n\n/**\n * @implements globalThis.CharacterData\n */\nexport class CharacterData extends Node {\n\n constructor(ownerDocument, localName, nodeType, data) {\n super(ownerDocument, localName, nodeType);\n this[VALUE] = String(data);\n }\n\n // <Mixins>\n get isConnected() { return isConnected(this); }\n get parentElement() { return parentElement(this); }\n get previousSibling() { return previousSibling(this); }\n get nextSibling() { return nextSibling(this); }\n\n get previousElementSibling() { return previousElementSibling(this); }\n get nextElementSibling() { return nextElementSibling(this); }\n\n before(...nodes) { before(this, nodes); }\n after(...nodes) { after(this, nodes); }\n replaceWith(...nodes) { replaceWith(this, nodes); }\n remove() { remove(this[PREV], this, this[NEXT]); }\n // </Mixins>\n\n // CharacterData only\n /* c8 ignore start */\n get data() { return this[VALUE]; }\n set data(value) {\n this[VALUE] = String(value);\n moCallback(this, this.parentNode);\n }\n\n get nodeValue() { return this.data; }\n set nodeValue(value) { this.data = value; }\n\n get textContent() { return this.data; }\n set textContent(value) { this.data = value; }\n\n get length() { return this.data.length; }\n\n substringData(offset, count) {\n return this.data.substr(offset, count);\n }\n\n appendData(data) {\n this.data += data;\n }\n\n insertData(offset, data) {\n const {data: t} = this;\n this.data = t.slice(0, offset) + data + t.slice(offset);\n }\n\n deleteData(offset, count) {\n const {data: t} = this;\n this.data = t.slice(0, offset) + t.slice(offset + count);\n }\n\n replaceData(offset, count, data) {\n const {data: t} = this;\n this.data = t.slice(0, offset) + data + t.slice(offset + count);\n }\n /* c8 ignore stop */\n\n toJSON() {\n const json = [];\n characterDataAsJSON(this, json);\n return json;\n }\n}\n",
71
+ "import {CDATA_SECTION_NODE} from '../shared/constants.js';\nimport {VALUE} from '../shared/symbols.js';\n\nimport {CharacterData} from './character-data.js';\n\n/**\n * @implements globalThis.CDATASection\n */\nexport class CDATASection extends CharacterData {\n constructor(ownerDocument, data = '') {\n super(ownerDocument, '#cdatasection', CDATA_SECTION_NODE, data);\n }\n\n cloneNode() {\n const {ownerDocument, [VALUE]: data} = this;\n return new CDATASection(ownerDocument, data);\n }\n\n toString() { return `<![CDATA[${this[VALUE]}]]>`; }\n}\n",
72
+ "import {COMMENT_NODE} from '../shared/constants.js';\nimport {VALUE} from '../shared/symbols.js';\n\nimport {CharacterData} from './character-data.js';\n\n/**\n * @implements globalThis.Comment\n */\nexport class Comment extends CharacterData {\n constructor(ownerDocument, data = '') {\n super(ownerDocument, '#comment', COMMENT_NODE, data);\n }\n\n cloneNode() {\n const {ownerDocument, [VALUE]: data} = this;\n return new Comment(ownerDocument, data);\n }\n\n toString() { return `<!--${this[VALUE]}-->`; }\n}\n",
73
+ "export function trueFunc() {\n return true;\n}\nexport function falseFunc() {\n return false;\n}\n",
74
+ "/** Discriminants for selector token kinds. */\nexport var SelectorType;\n(function (SelectorType) {\n SelectorType[\"Attribute\"] = \"attribute\";\n SelectorType[\"Pseudo\"] = \"pseudo\";\n SelectorType[\"PseudoElement\"] = \"pseudo-element\";\n SelectorType[\"Tag\"] = \"tag\";\n SelectorType[\"Universal\"] = \"universal\";\n // Traversals\n SelectorType[\"Adjacent\"] = \"adjacent\";\n SelectorType[\"Child\"] = \"child\";\n SelectorType[\"Descendant\"] = \"descendant\";\n SelectorType[\"Parent\"] = \"parent\";\n SelectorType[\"Sibling\"] = \"sibling\";\n SelectorType[\"ColumnCombinator\"] = \"column-combinator\";\n})(SelectorType || (SelectorType = {}));\n/**\n * Modes for ignore case.\n *\n * This could be updated to an enum, and the object is\n * the current stand-in that will allow code to be updated\n * without big changes.\n */\nexport const IgnoreCaseMode = {\n Unknown: null,\n QuirksMode: \"quirks\",\n IgnoreCase: true,\n CaseSensitive: false,\n};\n/** Operators available for attribute selectors. */\nexport var AttributeAction;\n(function (AttributeAction) {\n AttributeAction[\"Any\"] = \"any\";\n AttributeAction[\"Element\"] = \"element\";\n AttributeAction[\"End\"] = \"end\";\n AttributeAction[\"Equals\"] = \"equals\";\n AttributeAction[\"Exists\"] = \"exists\";\n AttributeAction[\"Hyphen\"] = \"hyphen\";\n AttributeAction[\"Not\"] = \"not\";\n AttributeAction[\"Start\"] = \"start\";\n})(AttributeAction || (AttributeAction = {}));\n",
75
+ "import { AttributeAction, SelectorType, } from \"./types.js\";\nconst reName = /^[^#\\\\]?(?:\\\\(?:[\\da-f]{1,6}\\s?|.)|[\\w\\u00B0-\\uFFFF-])+/;\nconst reEscape = /\\\\([\\da-f]{1,6}\\s?|(\\s)|.)/gi;\nvar CharCode;\n(function (CharCode) {\n CharCode[CharCode[\"LeftParenthesis\"] = 40] = \"LeftParenthesis\";\n CharCode[CharCode[\"RightParenthesis\"] = 41] = \"RightParenthesis\";\n CharCode[CharCode[\"LeftSquareBracket\"] = 91] = \"LeftSquareBracket\";\n CharCode[CharCode[\"RightSquareBracket\"] = 93] = \"RightSquareBracket\";\n CharCode[CharCode[\"Comma\"] = 44] = \"Comma\";\n CharCode[CharCode[\"Period\"] = 46] = \"Period\";\n CharCode[CharCode[\"Colon\"] = 58] = \"Colon\";\n CharCode[CharCode[\"SingleQuote\"] = 39] = \"SingleQuote\";\n CharCode[CharCode[\"DoubleQuote\"] = 34] = \"DoubleQuote\";\n CharCode[CharCode[\"Plus\"] = 43] = \"Plus\";\n CharCode[CharCode[\"Tilde\"] = 126] = \"Tilde\";\n CharCode[CharCode[\"QuestionMark\"] = 63] = \"QuestionMark\";\n CharCode[CharCode[\"ExclamationMark\"] = 33] = \"ExclamationMark\";\n CharCode[CharCode[\"Slash\"] = 47] = \"Slash\";\n CharCode[CharCode[\"Equal\"] = 61] = \"Equal\";\n CharCode[CharCode[\"Dollar\"] = 36] = \"Dollar\";\n CharCode[CharCode[\"Pipe\"] = 124] = \"Pipe\";\n CharCode[CharCode[\"Circumflex\"] = 94] = \"Circumflex\";\n CharCode[CharCode[\"Asterisk\"] = 42] = \"Asterisk\";\n CharCode[CharCode[\"GreaterThan\"] = 62] = \"GreaterThan\";\n CharCode[CharCode[\"LessThan\"] = 60] = \"LessThan\";\n CharCode[CharCode[\"Hash\"] = 35] = \"Hash\";\n CharCode[CharCode[\"LowerI\"] = 105] = \"LowerI\";\n CharCode[CharCode[\"LowerS\"] = 115] = \"LowerS\";\n CharCode[CharCode[\"BackSlash\"] = 92] = \"BackSlash\";\n // Whitespace\n CharCode[CharCode[\"Space\"] = 32] = \"Space\";\n CharCode[CharCode[\"Tab\"] = 9] = \"Tab\";\n CharCode[CharCode[\"NewLine\"] = 10] = \"NewLine\";\n CharCode[CharCode[\"FormFeed\"] = 12] = \"FormFeed\";\n CharCode[CharCode[\"CarriageReturn\"] = 13] = \"CarriageReturn\";\n})(CharCode || (CharCode = {}));\nconst actionTypes = new Map([\n [CharCode.Tilde, AttributeAction.Element],\n [CharCode.Circumflex, AttributeAction.Start],\n [CharCode.Dollar, AttributeAction.End],\n [CharCode.Asterisk, AttributeAction.Any],\n [CharCode.ExclamationMark, AttributeAction.Not],\n [CharCode.Pipe, AttributeAction.Hyphen],\n]);\n// Pseudos, whose data property is parsed as well.\nconst unpackPseudos = new Set([\n \"has\",\n \"not\",\n \"matches\",\n \"is\",\n \"where\",\n \"host\",\n \"host-context\",\n]);\n/**\n * Pseudo elements defined in CSS Level 1 and CSS Level 2 can be written with\n * a single colon; eg. :before will turn into ::before.\n * @see {@link https://www.w3.org/TR/2018/WD-selectors-4-20181121/#pseudo-element-syntax}\n */\nconst pseudosToPseudoElements = new Set([\n \"before\",\n \"after\",\n \"first-line\",\n \"first-letter\",\n]);\n/**\n * Checks whether a specific selector is a traversal.\n * This is useful eg. in swapping the order of elements that\n * are not traversals.\n * @param selector Selector to check.\n */\nexport function isTraversal(selector) {\n switch (selector.type) {\n case SelectorType.Adjacent:\n case SelectorType.Child:\n case SelectorType.Descendant:\n case SelectorType.Parent:\n case SelectorType.Sibling:\n case SelectorType.ColumnCombinator: {\n return true;\n }\n case SelectorType.Attribute:\n case SelectorType.Pseudo:\n case SelectorType.PseudoElement:\n case SelectorType.Tag:\n case SelectorType.Universal: {\n return false;\n }\n }\n}\nconst stripQuotesFromPseudos = new Set([\"contains\", \"icontains\"]);\n// Unescape function taken from https://github.com/jquery/sizzle/blob/master/src/sizzle.js#L152\nfunction funescape(_, escaped, escapedWhitespace) {\n const high = Number.parseInt(escaped, 16) - 0x1_00_00;\n // NaN means non-codepoint\n return Number.isNaN(high) || escapedWhitespace\n ? escaped\n : high < 0\n ? // BMP codepoint\n String.fromCharCode(high + 0x1_00_00)\n : // Supplemental Plane codepoint (surrogate pair)\n String.fromCharCode((high >> 10) | 0xd8_00, (high & 0x3_ff) | 0xdc_00);\n}\nfunction unescapeCSS(cssString) {\n return cssString.replace(reEscape, funescape);\n}\nfunction isQuote(c) {\n return c === CharCode.SingleQuote || c === CharCode.DoubleQuote;\n}\nfunction isWhitespace(c) {\n return (c === CharCode.Space ||\n c === CharCode.Tab ||\n c === CharCode.NewLine ||\n c === CharCode.FormFeed ||\n c === CharCode.CarriageReturn);\n}\n/**\n * Parses `selector`.\n * @param selector Selector to parse.\n * @returns Returns a two-dimensional array.\n * The first dimension represents selectors separated by commas (eg. `sub1, sub2`),\n * the second contains the relevant tokens for that selector.\n */\nexport function parse(selector) {\n const subselects = [];\n const endIndex = parseSelector(subselects, `${selector}`, 0);\n if (endIndex < selector.length) {\n throw new Error(`Unmatched selector: ${selector.slice(endIndex)}`);\n }\n return subselects;\n}\nfunction parseSelector(subselects, selector, selectorIndex) {\n let tokens = [];\n function getName(offset) {\n const match = selector.slice(selectorIndex + offset).match(reName);\n if (!match) {\n throw new Error(`Expected name, found ${selector.slice(selectorIndex)}`);\n }\n const [name] = match;\n selectorIndex += offset + name.length;\n return unescapeCSS(name);\n }\n function stripWhitespace(offset) {\n selectorIndex += offset;\n while (selectorIndex < selector.length &&\n isWhitespace(selector.charCodeAt(selectorIndex))) {\n selectorIndex++;\n }\n }\n function readValueWithParenthesis() {\n selectorIndex += 1;\n const start = selectorIndex;\n for (let counter = 1; selectorIndex < selector.length; selectorIndex++) {\n switch (selector.charCodeAt(selectorIndex)) {\n case CharCode.BackSlash: {\n // Skip next character\n selectorIndex += 1;\n break;\n }\n case CharCode.LeftParenthesis: {\n counter += 1;\n break;\n }\n case CharCode.RightParenthesis: {\n counter -= 1;\n if (counter === 0) {\n return unescapeCSS(selector.slice(start, selectorIndex++));\n }\n break;\n }\n }\n }\n throw new Error(\"Parenthesis not matched\");\n }\n function ensureNotTraversal() {\n if (tokens.length > 0 && isTraversal(tokens[tokens.length - 1])) {\n throw new Error(\"Did not expect successive traversals.\");\n }\n }\n function addTraversal(type) {\n if (tokens.length > 0 &&\n tokens[tokens.length - 1].type === SelectorType.Descendant) {\n tokens[tokens.length - 1].type = type;\n return;\n }\n ensureNotTraversal();\n tokens.push({ type });\n }\n function addSpecialAttribute(name, action) {\n tokens.push({\n type: SelectorType.Attribute,\n name,\n action,\n value: getName(1),\n namespace: null,\n ignoreCase: \"quirks\",\n });\n }\n /**\n * We have finished parsing the current part of the selector.\n *\n * Remove descendant tokens at the end if they exist,\n * and return the last index, so that parsing can be\n * picked up from here.\n */\n function finalizeSubselector() {\n if (tokens.length > 0 &&\n tokens[tokens.length - 1].type === SelectorType.Descendant) {\n tokens.pop();\n }\n if (tokens.length === 0) {\n throw new Error(\"Empty sub-selector\");\n }\n subselects.push(tokens);\n }\n stripWhitespace(0);\n if (selector.length === selectorIndex) {\n return selectorIndex;\n }\n loop: while (selectorIndex < selector.length) {\n const firstChar = selector.charCodeAt(selectorIndex);\n switch (firstChar) {\n // Whitespace\n case CharCode.Space:\n case CharCode.Tab:\n case CharCode.NewLine:\n case CharCode.FormFeed:\n case CharCode.CarriageReturn: {\n if (tokens.length === 0 ||\n tokens[0].type !== SelectorType.Descendant) {\n ensureNotTraversal();\n tokens.push({ type: SelectorType.Descendant });\n }\n stripWhitespace(1);\n break;\n }\n // Traversals\n case CharCode.GreaterThan: {\n addTraversal(SelectorType.Child);\n stripWhitespace(1);\n break;\n }\n case CharCode.LessThan: {\n addTraversal(SelectorType.Parent);\n stripWhitespace(1);\n break;\n }\n case CharCode.Tilde: {\n addTraversal(SelectorType.Sibling);\n stripWhitespace(1);\n break;\n }\n case CharCode.Plus: {\n addTraversal(SelectorType.Adjacent);\n stripWhitespace(1);\n break;\n }\n // Special attribute selectors: .class, #id\n case CharCode.Period: {\n addSpecialAttribute(\"class\", AttributeAction.Element);\n break;\n }\n case CharCode.Hash: {\n addSpecialAttribute(\"id\", AttributeAction.Equals);\n break;\n }\n case CharCode.LeftSquareBracket: {\n stripWhitespace(1);\n // Determine attribute name and namespace\n let name;\n let namespace = null;\n if (selector.charCodeAt(selectorIndex) === CharCode.Pipe) {\n // Equivalent to no namespace\n name = getName(1);\n }\n else if (selector.startsWith(\"*|\", selectorIndex)) {\n namespace = \"*\";\n name = getName(2);\n }\n else {\n name = getName(0);\n if (selector.charCodeAt(selectorIndex) === CharCode.Pipe &&\n selector.charCodeAt(selectorIndex + 1) !==\n CharCode.Equal) {\n namespace = name;\n name = getName(1);\n }\n }\n stripWhitespace(0);\n // Determine comparison operation\n let action = AttributeAction.Exists;\n const possibleAction = actionTypes.get(selector.charCodeAt(selectorIndex));\n if (possibleAction) {\n action = possibleAction;\n if (selector.charCodeAt(selectorIndex + 1) !==\n CharCode.Equal) {\n throw new Error(\"Expected `=`\");\n }\n stripWhitespace(2);\n }\n else if (selector.charCodeAt(selectorIndex) === CharCode.Equal) {\n action = AttributeAction.Equals;\n stripWhitespace(1);\n }\n // Determine value\n let value = \"\";\n let ignoreCase = null;\n if (action !== \"exists\") {\n if (isQuote(selector.charCodeAt(selectorIndex))) {\n const quote = selector.charCodeAt(selectorIndex);\n selectorIndex += 1;\n const sectionStart = selectorIndex;\n while (selectorIndex < selector.length &&\n selector.charCodeAt(selectorIndex) !== quote) {\n selectorIndex +=\n // Skip next character if it is escaped\n selector.charCodeAt(selectorIndex) ===\n CharCode.BackSlash\n ? 2\n : 1;\n }\n if (selector.charCodeAt(selectorIndex) !== quote) {\n throw new Error(\"Attribute value didn't end\");\n }\n value = unescapeCSS(selector.slice(sectionStart, selectorIndex));\n selectorIndex += 1;\n }\n else {\n const valueStart = selectorIndex;\n while (selectorIndex < selector.length &&\n !isWhitespace(selector.charCodeAt(selectorIndex)) &&\n selector.charCodeAt(selectorIndex) !==\n CharCode.RightSquareBracket) {\n selectorIndex +=\n // Skip next character if it is escaped\n selector.charCodeAt(selectorIndex) ===\n CharCode.BackSlash\n ? 2\n : 1;\n }\n value = unescapeCSS(selector.slice(valueStart, selectorIndex));\n }\n stripWhitespace(0);\n // See if we have a force ignore flag\n switch (selector.charCodeAt(selectorIndex) | 0x20) {\n // If the forceIgnore flag is set (either `i` or `s`), use that value\n case CharCode.LowerI: {\n ignoreCase = true;\n stripWhitespace(1);\n break;\n }\n case CharCode.LowerS: {\n ignoreCase = false;\n stripWhitespace(1);\n break;\n }\n }\n }\n if (selector.charCodeAt(selectorIndex) !==\n CharCode.RightSquareBracket) {\n throw new Error(\"Attribute selector didn't terminate\");\n }\n selectorIndex += 1;\n const attributeSelector = {\n type: SelectorType.Attribute,\n name,\n action,\n value,\n namespace,\n ignoreCase,\n };\n tokens.push(attributeSelector);\n break;\n }\n case CharCode.Colon: {\n if (selector.charCodeAt(selectorIndex + 1) === CharCode.Colon) {\n tokens.push({\n type: SelectorType.PseudoElement,\n name: getName(2).toLowerCase(),\n data: selector.charCodeAt(selectorIndex) ===\n CharCode.LeftParenthesis\n ? readValueWithParenthesis()\n : null,\n });\n break;\n }\n const name = getName(1).toLowerCase();\n if (pseudosToPseudoElements.has(name)) {\n tokens.push({\n type: SelectorType.PseudoElement,\n name,\n data: null,\n });\n break;\n }\n let data = null;\n if (selector.charCodeAt(selectorIndex) ===\n CharCode.LeftParenthesis) {\n if (unpackPseudos.has(name)) {\n if (isQuote(selector.charCodeAt(selectorIndex + 1))) {\n throw new Error(`Pseudo-selector ${name} cannot be quoted`);\n }\n data = [];\n selectorIndex = parseSelector(data, selector, selectorIndex + 1);\n if (selector.charCodeAt(selectorIndex) !==\n CharCode.RightParenthesis) {\n throw new Error(`Missing closing parenthesis in :${name} (${selector})`);\n }\n selectorIndex += 1;\n }\n else {\n data = readValueWithParenthesis();\n if (stripQuotesFromPseudos.has(name)) {\n const quot = data.charCodeAt(0);\n if (quot === data.charCodeAt(data.length - 1) &&\n isQuote(quot)) {\n data = data.slice(1, -1);\n }\n }\n data = unescapeCSS(data);\n }\n }\n tokens.push({ type: SelectorType.Pseudo, name, data });\n break;\n }\n case CharCode.Comma: {\n finalizeSubselector();\n tokens = [];\n stripWhitespace(1);\n break;\n }\n default: {\n if (selector.startsWith(\"/*\", selectorIndex)) {\n const endIndex = selector.indexOf(\"*/\", selectorIndex + 2);\n if (endIndex === -1) {\n throw new Error(\"Comment was not terminated\");\n }\n selectorIndex = endIndex + 2;\n // Remove leading whitespace\n if (tokens.length === 0) {\n stripWhitespace(0);\n }\n break;\n }\n let namespace = null;\n let name;\n if (firstChar === CharCode.Asterisk) {\n selectorIndex += 1;\n name = \"*\";\n }\n else if (firstChar === CharCode.Pipe) {\n name = \"\";\n if (selector.charCodeAt(selectorIndex + 1) === CharCode.Pipe) {\n addTraversal(SelectorType.ColumnCombinator);\n stripWhitespace(2);\n break;\n }\n }\n else if (reName.test(selector.slice(selectorIndex))) {\n name = getName(0);\n }\n else {\n break loop;\n }\n if (selector.charCodeAt(selectorIndex) === CharCode.Pipe &&\n selector.charCodeAt(selectorIndex + 1) !== CharCode.Pipe) {\n namespace = name;\n if (selector.charCodeAt(selectorIndex + 1) ===\n CharCode.Asterisk) {\n name = \"*\";\n selectorIndex += 2;\n }\n else {\n name = getName(1);\n }\n }\n tokens.push(name === \"*\"\n ? { type: SelectorType.Universal, namespace }\n : { type: SelectorType.Tag, name, namespace });\n }\n }\n }\n finalizeSubselector();\n return selectorIndex;\n}\n",
76
+ "/** Types of elements found in htmlparser2's DOM */\nexport var ElementType;\n(function (ElementType) {\n /** Type for the root element of a document */\n ElementType[\"Root\"] = \"root\";\n /** Type for Text */\n ElementType[\"Text\"] = \"text\";\n /** Type for <? ... ?> */\n ElementType[\"Directive\"] = \"directive\";\n /** Type for <!-- ... --> */\n ElementType[\"Comment\"] = \"comment\";\n /** Type for <script> tags */\n ElementType[\"Script\"] = \"script\";\n /** Type for <style> tags */\n ElementType[\"Style\"] = \"style\";\n /** Type for Any tag */\n ElementType[\"Tag\"] = \"tag\";\n /** Type for <![CDATA[ ... ]]> */\n ElementType[\"CDATA\"] = \"cdata\";\n /** Type for <!doctype ...> */\n ElementType[\"Doctype\"] = \"doctype\";\n})(ElementType || (ElementType = {}));\n/**\n * Tests whether an element is a tag or not.\n * @param element Element to test\n * @param element.type Node type discriminator to check.\n */\nexport function isTag(element) {\n return (element.type === ElementType.Tag ||\n element.type === ElementType.Script ||\n element.type === ElementType.Style);\n}\n// Exports for backwards compatibility\n/** Type for the root element of a document */\n// eslint-disable-next-line prefer-destructuring\nexport const Root = ElementType.Root;\n/** Type for Text */\n// eslint-disable-next-line prefer-destructuring\nexport const Text = ElementType.Text;\n/** Type for <? ... ?> */\n// eslint-disable-next-line prefer-destructuring\nexport const Directive = ElementType.Directive;\n/** Type for <!-- ... --> */\n// eslint-disable-next-line prefer-destructuring\nexport const Comment = ElementType.Comment;\n/** Type for <script> tags */\n// eslint-disable-next-line prefer-destructuring\nexport const Script = ElementType.Script;\n/** Type for <style> tags */\n// eslint-disable-next-line prefer-destructuring\nexport const Style = ElementType.Style;\n/** Type for Any tag */\n// eslint-disable-next-line prefer-destructuring\nexport const Tag = ElementType.Tag;\n/** Type for <![CDATA[ ... ]]> */\n// eslint-disable-next-line prefer-destructuring\nexport const CDATA = ElementType.CDATA;\n/** Type for <!doctype ...> */\n// eslint-disable-next-line prefer-destructuring\nexport const Doctype = ElementType.Doctype;\n",
77
+ "import { ElementType, isTag as isTagRaw } from \"domelementtype\";\n/**\n * This object will be used as the prototype for Nodes when creating a\n * DOM-Level-1-compliant structure.\n */\nexport class Node {\n /** Parent of the node */\n parent = null;\n /** Previous sibling */\n prev = null;\n /** Next sibling */\n next = null;\n /** The start index of the node. Requires `withStartIndices` on the handler to be `true. */\n startIndex = null;\n /** The end index of the node. Requires `withEndIndices` on the handler to be `true. */\n endIndex = null;\n // Read-write aliases for properties\n /**\n * Same as {@link parent}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get parentNode() {\n return this.parent;\n }\n set parentNode(parent) {\n this.parent = parent;\n }\n /**\n * Same as {@link prev}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get previousSibling() {\n return this.prev;\n }\n set previousSibling(previous) {\n this.prev = previous;\n }\n /**\n * Same as {@link next}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get nextSibling() {\n return this.next;\n }\n set nextSibling(next) {\n this.next = next;\n }\n /**\n * Clone this node, and optionally its children.\n * @param recursive Clone child nodes as well.\n * @returns A clone of the node.\n */\n cloneNode(recursive = false) {\n return cloneNode(this, recursive);\n }\n}\n/**\n * A node that contains some data.\n */\nexport class DataNode extends Node {\n data;\n /**\n * @param data The content of the data node\n */\n constructor(data) {\n super();\n this.data = data;\n }\n /**\n * Same as {@link data}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get nodeValue() {\n return this.data;\n }\n set nodeValue(data) {\n this.data = data;\n }\n}\n/**\n * Text within the document.\n */\nexport class Text extends DataNode {\n type = ElementType.Text;\n get nodeType() {\n return 3;\n }\n}\n/**\n * Comments within the document.\n */\nexport class Comment extends DataNode {\n type = ElementType.Comment;\n get nodeType() {\n return 8;\n }\n}\n/**\n * Processing instructions, including doc types.\n */\nexport class ProcessingInstruction extends DataNode {\n type = ElementType.Directive;\n name;\n constructor(name, data) {\n super(data);\n this.name = name;\n }\n get nodeType() {\n return 1;\n }\n /** If this is a doctype, the document type name (parse5 only). */\n \"x-name\";\n /** If this is a doctype, the document type public identifier (parse5 only). */\n \"x-publicId\";\n /** If this is a doctype, the document type system identifier (parse5 only). */\n \"x-systemId\";\n}\n/**\n * A node that can have children.\n */\nexport class NodeWithChildren extends Node {\n children;\n /**\n * @param children Children of the node. Only certain node types can have children.\n */\n constructor(children) {\n super();\n this.children = children;\n }\n // Aliases\n /** First child of the node. */\n get firstChild() {\n return this.children[0] ?? null;\n }\n /** Last child of the node. */\n get lastChild() {\n return this.children.length > 0\n ? this.children[this.children.length - 1]\n : null;\n }\n /**\n * Same as {@link children}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get childNodes() {\n return this.children;\n }\n set childNodes(children) {\n this.children = children;\n }\n}\n/**\n * CDATA nodes.\n */\nexport class CDATA extends NodeWithChildren {\n type = ElementType.CDATA;\n get nodeType() {\n return 4;\n }\n}\n/**\n * The root node of the document.\n */\nexport class Document extends NodeWithChildren {\n type = ElementType.Root;\n get nodeType() {\n return 9;\n }\n}\n/**\n * An element within the DOM.\n */\nexport class Element extends NodeWithChildren {\n name;\n attribs;\n type;\n /**\n * @param name Name of the tag, eg. `div`, `span`.\n * @param attribs Object mapping attribute names to attribute values.\n * @param children Children of the node.\n * @param type Node type used for the new node instance.\n */\n constructor(name, attribs, children = [], type = name === \"script\"\n ? ElementType.Script\n : name === \"style\"\n ? ElementType.Style\n : ElementType.Tag) {\n super(children);\n this.name = name;\n this.attribs = attribs;\n this.type = type;\n }\n get nodeType() {\n return 1;\n }\n // DOM Level 1 aliases\n /**\n * Same as {@link name}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get tagName() {\n return this.name;\n }\n set tagName(name) {\n this.name = name;\n }\n get attributes() {\n return Object.keys(this.attribs).map((name) => ({\n name,\n value: this.attribs[name],\n namespace: this[\"x-attribsNamespace\"]?.[name],\n prefix: this[\"x-attribsPrefix\"]?.[name],\n }));\n }\n /** Element namespace (parse5 only). */\n namespace;\n /** Element attribute namespaces (parse5 only). */\n \"x-attribsNamespace\";\n /** Element attribute namespace-related prefixes (parse5 only). */\n \"x-attribsPrefix\";\n}\n/**\n * Checks if `node` is an element node.\n * @param node Node to check.\n * @returns `true` if the node is an element node.\n */\nexport function isTag(node) {\n return isTagRaw(node);\n}\n/**\n * Checks if `node` is a CDATA node.\n * @param node Node to check.\n * @returns `true` if the node is a CDATA node.\n */\nexport function isCDATA(node) {\n return node.type === ElementType.CDATA;\n}\n/**\n * Checks if `node` is a text node.\n * @param node Node to check.\n * @returns `true` if the node is a text node.\n */\nexport function isText(node) {\n return node.type === ElementType.Text;\n}\n/**\n * Checks if `node` is a comment node.\n * @param node Node to check.\n * @returns `true` if the node is a comment node.\n */\nexport function isComment(node) {\n return node.type === ElementType.Comment;\n}\n/**\n * Checks if `node` is a directive node.\n * @param node Node to check.\n * @returns `true` if the node is a directive node.\n */\nexport function isDirective(node) {\n return node.type === ElementType.Directive;\n}\n/**\n * Checks if `node` is a document node.\n * @param node Node to check.\n * @returns `true` if the node is a document node.\n */\nexport function isDocument(node) {\n return node.type === ElementType.Root;\n}\n/**\n * Checks if `node` has children.\n * @param node Node to check.\n * @returns `true` if the node has children.\n */\nexport function hasChildren(node) {\n return Object.hasOwn(node, \"children\");\n}\n/**\n * Clone a node, and optionally its children.\n * @param node Node to clone.\n * @param recursive Clone child nodes as well.\n * @returns A clone of the node.\n */\nexport function cloneNode(node, recursive = false) {\n let result;\n if (isText(node)) {\n result = new Text(node.data);\n }\n else if (isComment(node)) {\n result = new Comment(node.data);\n }\n else if (isTag(node)) {\n const children = recursive ? cloneChildren(node.children) : [];\n const clone = new Element(node.name, { ...node.attribs }, children);\n for (const child of children) {\n child.parent = clone;\n }\n if (node.namespace != null) {\n clone.namespace = node.namespace;\n }\n if (node[\"x-attribsNamespace\"]) {\n clone[\"x-attribsNamespace\"] = { ...node[\"x-attribsNamespace\"] };\n }\n if (node[\"x-attribsPrefix\"]) {\n clone[\"x-attribsPrefix\"] = { ...node[\"x-attribsPrefix\"] };\n }\n result = clone;\n }\n else if (isCDATA(node)) {\n const children = recursive ? cloneChildren(node.children) : [];\n const clone = new CDATA(children);\n for (const child of children) {\n child.parent = clone;\n }\n result = clone;\n }\n else if (isDocument(node)) {\n const children = recursive ? cloneChildren(node.children) : [];\n const clone = new Document(children);\n for (const child of children) {\n child.parent = clone;\n }\n if (node[\"x-mode\"]) {\n clone[\"x-mode\"] = node[\"x-mode\"];\n }\n result = clone;\n }\n else if (isDirective(node)) {\n const instruction = new ProcessingInstruction(node.name, node.data);\n if (node[\"x-name\"] != null) {\n instruction[\"x-name\"] = node[\"x-name\"];\n instruction[\"x-publicId\"] = node[\"x-publicId\"];\n instruction[\"x-systemId\"] = node[\"x-systemId\"];\n }\n result = instruction;\n }\n else {\n throw new Error(`Not implemented yet: ${node.type}`);\n }\n result.startIndex = node.startIndex;\n result.endIndex = node.endIndex;\n if (node.sourceCodeLocation != null) {\n result.sourceCodeLocation = node.sourceCodeLocation;\n }\n return result;\n}\n/**\n * Clone a list of child nodes.\n * @param childs The child nodes to clone.\n * @returns A list of cloned child nodes.\n */\nfunction cloneChildren(childs) {\n const children = childs.map((child) => cloneNode(child, true));\n for (let index = 1; index < children.length; index++) {\n children[index].prev = children[index - 1];\n children[index - 1].next = children[index];\n }\n return children;\n}\n",
78
+ "import { hasChildren, isTag, } from \"domhandler\";\n/**\n * Search a node and its children for nodes passing a test function. If `node` is not an array, it will be wrapped in one.\n *\n * @category Querying\n * @param test Function to test nodes on.\n * @param node Node to search. Will be included in the result set if it matches.\n * @param recurse Also consider child nodes.\n * @param limit Maximum number of nodes to return.\n * @returns All nodes passing `test`.\n */\nexport function filter(test, node, recurse = true, limit = Number.POSITIVE_INFINITY) {\n return find(test, Array.isArray(node) ? node : [node], recurse, limit);\n}\n/**\n * Search an array of nodes and their children for nodes passing a test function.\n *\n * @category Querying\n * @param test Function to test nodes on.\n * @param nodes Array of nodes to search.\n * @param recurse Also consider child nodes.\n * @param limit Maximum number of nodes to return.\n * @returns All nodes passing `test`.\n */\nexport function find(test, nodes, recurse, limit) {\n const result = [];\n /** Stack of the arrays we are looking at. */\n const nodeStack = [Array.isArray(nodes) ? nodes : [nodes]];\n /** Stack of the indices within the arrays. */\n const indexStack = [0];\n for (;;) {\n // First, check if the current array has any more elements to look at.\n if (indexStack[0] >= nodeStack[0].length) {\n // If we have no more arrays to look at, we are done.\n if (indexStack.length === 1) {\n return result;\n }\n // Otherwise, remove the current array from the stack.\n nodeStack.shift();\n indexStack.shift();\n // Loop back to the start to continue with the next array.\n continue;\n }\n const element = nodeStack[0][indexStack[0]++];\n if (test(element)) {\n result.push(element);\n if (--limit <= 0)\n return result;\n }\n if (recurse && hasChildren(element) && element.children.length > 0) {\n /*\n * Add the children to the stack. We are depth-first, so this is\n * the next array we look at.\n */\n indexStack.unshift(0);\n nodeStack.unshift(element.children);\n }\n }\n}\n/**\n * Finds one element in a tree that passes a test.\n *\n * @category Querying\n * @param test Function to test nodes on.\n * @param nodes Node or array of nodes to search.\n * @param recurse Also consider child nodes.\n * @returns The first node that passes `test`.\n */\nexport function findOne(test, nodes, recurse = true) {\n const searchedNodes = Array.isArray(nodes) ? nodes : [nodes];\n for (const node of searchedNodes) {\n if (isTag(node) && test(node)) {\n return node;\n }\n if (recurse && hasChildren(node) && node.children.length > 0) {\n const found = findOne(test, node.children, true);\n if (found)\n return found;\n }\n }\n return null;\n}\n/**\n * Checks if a tree of nodes contains at least one node passing a test.\n *\n * @category Querying\n * @param test Function to test nodes on.\n * @param nodes Array of nodes to search.\n * @returns Whether a tree of nodes contains at least one node passing the test.\n */\nexport function existsOne(test, nodes) {\n return (Array.isArray(nodes) ? nodes : [nodes]).some((node) => (isTag(node) && test(node)) ||\n (hasChildren(node) && existsOne(test, node.children)));\n}\n/**\n * Search an array of nodes and their children for elements passing a test function.\n *\n * Same as `find`, but limited to elements and with less options, leading to reduced complexity.\n *\n * @category Querying\n * @param test Function to test nodes on.\n * @param nodes Array of nodes to search.\n * @returns All nodes passing `test`.\n */\nexport function findAll(test, nodes) {\n const result = [];\n const nodeStack = [Array.isArray(nodes) ? nodes : [nodes]];\n const indexStack = [0];\n for (;;) {\n if (indexStack[0] >= nodeStack[0].length) {\n if (nodeStack.length === 1) {\n return result;\n }\n // Otherwise, remove the current array from the stack.\n nodeStack.shift();\n indexStack.shift();\n // Loop back to the start to continue with the next array.\n continue;\n }\n const element = nodeStack[0][indexStack[0]++];\n if (isTag(element) && test(element))\n result.push(element);\n if (hasChildren(element) && element.children.length > 0) {\n indexStack.unshift(0);\n nodeStack.unshift(element.children);\n }\n }\n}\n//# sourceMappingURL=querying.js.map",
79
+ "import { isTag, isText } from \"domhandler\";\nimport { filter, findOne } from \"./querying.js\";\n/**\n * A map of functions to check nodes against.\n */\nconst Checks = {\n tag_name(name) {\n if (typeof name === \"function\") {\n return (element) => isTag(element) && name(element.name);\n }\n if (name === \"*\") {\n return isTag;\n }\n return (element) => isTag(element) && element.name === name;\n },\n tag_type(type) {\n if (typeof type === \"function\") {\n return (element) => type(element.type);\n }\n return (element) => element.type === type;\n },\n tag_contains(data) {\n if (typeof data === \"function\") {\n return (element) => isText(element) && data(element.data);\n }\n return (element) => isText(element) && element.data === data;\n },\n};\n/**\n * Returns a function to check whether a node has an attribute with a particular\n * value.\n *\n * @param attrib Attribute to check.\n * @param value Attribute value to look for.\n * @returns A function to check whether the a node has an attribute with a\n * particular value.\n */\nfunction getAttribCheck(attrib, value) {\n if (typeof value === \"function\") {\n return (element) => isTag(element) && value(element.attribs[attrib]);\n }\n return (element) => isTag(element) && element.attribs[attrib] === value;\n}\n/**\n * Returns a function that returns `true` if either of the input functions\n * returns `true` for a node.\n *\n * @param a First function to combine.\n * @param b Second function to combine.\n * @returns A function taking a node and returning `true` if either of the input\n * functions returns `true` for the node.\n */\nfunction combineFuncs(a, b) {\n return (element) => a(element) || b(element);\n}\n/**\n * Returns a function that executes all checks in `options` and returns `true`\n * if any of them match a node.\n *\n * @param options An object describing nodes to look for.\n * @returns A function that executes all checks in `options` and returns `true`\n * if any of them match a node.\n */\nfunction compileTest(options) {\n const funcs = Object.keys(options).map((key) => {\n const value = options[key];\n return Object.hasOwn(Checks, key)\n ? Checks[key](value)\n : getAttribCheck(key, value);\n });\n return funcs.length === 0 ? null : funcs.reduce(combineFuncs);\n}\n/**\n * Checks whether a node matches the description in `options`.\n *\n * @category Legacy Query Functions\n * @param options An object describing nodes to look for.\n * @param node The element to test.\n * @returns Whether the element matches the description in `options`.\n */\nexport function testElement(options, node) {\n const test = compileTest(options);\n return test ? test(node) : true;\n}\n/**\n * Returns all nodes that match `options`.\n *\n * @category Legacy Query Functions\n * @param options An object describing nodes to look for.\n * @param nodes Nodes to search through.\n * @param recurse Also consider child nodes.\n * @param limit Maximum number of nodes to return.\n * @returns All nodes that match `options`.\n */\nexport function getElements(options, nodes, recurse, limit = Number.POSITIVE_INFINITY) {\n const test = compileTest(options);\n return test ? filter(test, nodes, recurse, limit) : [];\n}\n/**\n * Returns the node with the supplied ID.\n *\n * @category Legacy Query Functions\n * @param id The unique ID attribute value to look for.\n * @param nodes Nodes to search through.\n * @param recurse Also consider child nodes.\n * @returns The node with the supplied ID.\n */\nexport function getElementById(id, nodes, recurse = true) {\n if (!Array.isArray(nodes))\n nodes = [nodes];\n return findOne(getAttribCheck(\"id\", id), nodes, recurse);\n}\n/**\n * Returns all nodes with the supplied `tagName`.\n *\n * @category Legacy Query Functions\n * @param tagName Tag name to search for.\n * @param nodes Nodes to search through.\n * @param recurse Also consider child nodes.\n * @param limit Maximum number of nodes to return.\n * @returns All nodes with the supplied `tagName`.\n */\nexport function getElementsByTagName(tagName, nodes, recurse = true, limit = Number.POSITIVE_INFINITY) {\n return filter(Checks[\"tag_name\"](tagName), nodes, recurse, limit);\n}\n/**\n * Returns all nodes with the supplied `className`.\n *\n * @category Legacy Query Functions\n * @param className Class name to search for.\n * @param nodes Nodes to search through.\n * @param recurse Also consider child nodes.\n * @param limit Maximum number of nodes to return.\n * @returns All nodes with the supplied `className`.\n */\nexport function getElementsByClassName(className, nodes, recurse = true, limit = Number.POSITIVE_INFINITY) {\n return filter(getAttribCheck(\"class\", className), nodes, recurse, limit);\n}\n/**\n * Returns all nodes with the supplied `type`.\n *\n * @category Legacy Query Functions\n * @param type Element type to look for.\n * @param nodes Nodes to search through.\n * @param recurse Also consider child nodes.\n * @param limit Maximum number of nodes to return.\n * @returns All nodes with the supplied `type`.\n */\nexport function getElementsByTagType(type, nodes, recurse = true, limit = Number.POSITIVE_INFINITY) {\n return filter(Checks[\"tag_type\"](type), nodes, recurse, limit);\n}\n//# sourceMappingURL=legacy.js.map",
80
+ "/** Types of elements found in htmlparser2's DOM */\nexport var ElementType;\n(function (ElementType) {\n /** Type for the root element of a document */\n ElementType[\"Root\"] = \"root\";\n /** Type for Text */\n ElementType[\"Text\"] = \"text\";\n /** Type for <? ... ?> */\n ElementType[\"Directive\"] = \"directive\";\n /** Type for <!-- ... --> */\n ElementType[\"Comment\"] = \"comment\";\n /** Type for <script> tags */\n ElementType[\"Script\"] = \"script\";\n /** Type for <style> tags */\n ElementType[\"Style\"] = \"style\";\n /** Type for Any tag */\n ElementType[\"Tag\"] = \"tag\";\n /** Type for <![CDATA[ ... ]]> */\n ElementType[\"CDATA\"] = \"cdata\";\n /** Type for <!doctype ...> */\n ElementType[\"Doctype\"] = \"doctype\";\n})(ElementType || (ElementType = {}));\n/**\n * Tests whether an element is a tag or not.\n * @param element Element to test\n * @param element.type Node type discriminator to check.\n */\nexport function isTag(element) {\n return (element.type === ElementType.Tag ||\n element.type === ElementType.Script ||\n element.type === ElementType.Style);\n}\n// Exports for backwards compatibility\n/** Type for the root element of a document */\n// eslint-disable-next-line prefer-destructuring\nexport const Root = ElementType.Root;\n/** Type for Text */\n// eslint-disable-next-line prefer-destructuring\nexport const Text = ElementType.Text;\n/** Type for <? ... ?> */\n// eslint-disable-next-line prefer-destructuring\nexport const Directive = ElementType.Directive;\n/** Type for <!-- ... --> */\n// eslint-disable-next-line prefer-destructuring\nexport const Comment = ElementType.Comment;\n/** Type for <script> tags */\n// eslint-disable-next-line prefer-destructuring\nexport const Script = ElementType.Script;\n/** Type for <style> tags */\n// eslint-disable-next-line prefer-destructuring\nexport const Style = ElementType.Style;\n/** Type for Any tag */\n// eslint-disable-next-line prefer-destructuring\nexport const Tag = ElementType.Tag;\n/** Type for <![CDATA[ ... ]]> */\n// eslint-disable-next-line prefer-destructuring\nexport const CDATA = ElementType.CDATA;\n/** Type for <!doctype ...> */\n// eslint-disable-next-line prefer-destructuring\nexport const Doctype = ElementType.Doctype;\n",
81
+ "/**\n * Get the named reference for an XML special character or U+00A0.\n * @param char Code unit matched by one of the escape regexes.\n */\nfunction getEscape(char) {\n return char === 34\n ? \"&quot;\"\n : char === 38\n ? \"&amp;\"\n : char === 39\n ? \"&apos;\"\n : char === 60\n ? \"&lt;\"\n : char === 62\n ? \"&gt;\"\n : \"&nbsp;\";\n}\n/**\n * Read a code point at a given index.\n * @param input String to read the code point from.\n * @param index Current read position in the input string.\n * @returns The code point at `index`, or `undefined` if `index` is out of range.\n * @deprecated Use `String.prototype.codePointAt` directly instead; this export\n * will be removed in the next major.\n */\nexport const getCodePoint = (input, index) => input.codePointAt(index);\n/**\n * Bitset for ASCII characters that need to be escaped in XML.\n */\nexport const XML_BITSET_VALUE = 0x50_00_00_c4; // 32..63 -> 34 (\"),38 (&),39 ('),60 (<),62 (>)\n/**\n * Matches exactly the characters `encodeXML` escapes: the five XML special\n * characters plus every non-ASCII code unit (lone surrogates included — no\n * `u` flag). Kept in sync with `XML_BITSET_VALUE`.\n *\n * Shared with `encodeNonAsciiHTML` in `encode.ts`. Because the regex is\n * stateful (`g` flag), every call site must set `lastIndex` before use.\n */\n// eslint-disable-next-line unicorn/prefer-unicode-code-point-escapes -- the `\\u{...}` form requires the `u` flag, which we deliberately omit so lone surrogates match by code unit\nexport const xmlEncodeRegex = /[\"&'<>\\u0080-\\uFFFF]/g;\n/**\n * Whether `code` (a UTF-16 code unit) is escaped by {@link encodeXML}: a\n * non-ASCII unit, or one of the five XML specials flagged in\n * `XML_BITSET_VALUE` (which is only meaningful for code units 32-63).\n * @param code Code unit to test.\n */\nfunction isXmlEscapable(code) {\n return (code >= 0x80 ||\n (code >= 32 && code < 64 && ((XML_BITSET_VALUE >>> code) & 1) === 1));\n}\n/**\n * Encodes all non-ASCII characters, as well as characters not valid in XML\n * documents using XML entities.\n *\n * If a character has no equivalent entity, a numeric hexadecimal reference\n * (eg. `&#xfc;`) will be used.\n * @param input Input string to encode.\n */\nexport function encodeXML(input) {\n const { length } = input;\n let out;\n let last = 0;\n let index = 0;\n while (index < length) {\n const char = input.charCodeAt(index);\n /*\n * Find the next character to escape: scan a short window inline\n * (escapable characters cluster in markup-heavy input), then fall\n * back to the regex, which skips clean spans in native code.\n */\n if (!isXmlEscapable(char)) {\n const bound = Math.min(index + 32, length);\n let next = index + 1;\n while (next < bound && !isXmlEscapable(input.charCodeAt(next))) {\n next++;\n }\n if (next < bound) {\n index = next;\n continue;\n }\n if (next >= length)\n break;\n xmlEncodeRegex.lastIndex = next;\n if (!xmlEncodeRegex.test(input))\n break;\n index = xmlEncodeRegex.lastIndex - 1;\n continue;\n }\n if (out === undefined)\n out = input.substring(0, index);\n else if (last !== index)\n out += input.substring(last, index);\n if (char < 64) {\n // Known replacement\n out += getEscape(char);\n last = index += 1;\n continue;\n }\n // Non-ASCII: encode as numeric entity (handle surrogate pair)\n const cp = input.codePointAt(index);\n out += `&#x${cp.toString(16)};`;\n if (cp !== char)\n index++; // Skip trailing surrogate\n last = index += 1;\n }\n if (out === undefined)\n return input;\n if (last < length)\n out += input.substr(last);\n return out;\n}\n/**\n * Encodes all non-ASCII characters, as well as characters not valid in XML\n * documents using numeric hexadecimal reference (eg. `&#xfc;`).\n *\n * Have a look at `escapeUTF8` if you want a more concise output at the expense\n * of reduced transportability.\n * @param data String to escape.\n */\nexport const escape = encodeXML;\n/**\n * Escape `data` using `re`, mapping each matched character to its entity.\n * Every match is one UTF-16 code unit, so its index is `lastIndex - 1`.\n * @param re Global regex matching exactly the characters to escape\n * (`\"`, `&`, `'`, `<`, `>`, `\\u00A0` at most).\n * @param data String to escape.\n */\nfunction escapeWithRegex(re, data) {\n re.lastIndex = 0;\n if (!re.test(data))\n return data;\n let out = \"\";\n let last = 0;\n do {\n const index = re.lastIndex - 1;\n if (last !== index)\n out += data.substring(last, index);\n const char = data.charCodeAt(index);\n out += getEscape(char);\n last = index + 1;\n } while (re.test(data));\n return out + data.substring(last);\n}\nconst xmlEscapeRegex = /[\"&'<>]/g;\n/**\n * Encodes all characters not valid in XML documents using XML entities.\n *\n * Note that the output will be character-set dependent.\n * @param data String to escape.\n */\nexport function escapeUTF8(data) {\n return escapeWithRegex(xmlEscapeRegex, data);\n}\nconst attributeEscapeRegex = /[\"&\\u{A0}]/gu;\n/**\n * Encodes all characters that have to be escaped in HTML attributes,\n * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.\n * @param data String to escape.\n */\nexport function escapeAttribute(data) {\n return escapeWithRegex(attributeEscapeRegex, data);\n}\nconst textEscapeRegex = /[&<>\\u{A0}]/gu;\n/**\n * Encodes all characters that have to be escaped in HTML text,\n * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.\n * @param data String to escape.\n */\nexport function escapeText(data) {\n return escapeWithRegex(textEscapeRegex, data);\n}\n//# sourceMappingURL=escape.js.map",
82
+ "import { decodeHTML, decodeXML } from \"./decode.js\";\nimport { encodeHTML, encodeNonAsciiHTML } from \"./encode.js\";\nimport { encodeXML, escapeAttribute, escapeText, escapeUTF8, } from \"./escape.js\";\n/** The level of entities to support. */\nexport var EntityLevel;\n(function (EntityLevel) {\n /** Support only XML entities. */\n EntityLevel[EntityLevel[\"XML\"] = 0] = \"XML\";\n /** Support HTML entities, which are a superset of XML entities. */\n EntityLevel[EntityLevel[\"HTML\"] = 1] = \"HTML\";\n})(EntityLevel || (EntityLevel = {}));\n/**\n * Encoding strategy used by `encode`.\n */\nexport var EncodingMode;\n(function (EncodingMode) {\n /**\n * The output is UTF-8 encoded. Only characters that need escaping within\n * XML will be escaped.\n */\n EncodingMode[EncodingMode[\"UTF8\"] = 0] = \"UTF8\";\n /**\n * The output consists only of ASCII characters. Characters that need\n * escaping within HTML, and characters that aren't ASCII characters will\n * be escaped.\n */\n EncodingMode[EncodingMode[\"ASCII\"] = 1] = \"ASCII\";\n /**\n * Encode all characters that have an equivalent entity, as well as all\n * characters that are not ASCII characters.\n */\n EncodingMode[EncodingMode[\"Extensive\"] = 2] = \"Extensive\";\n /**\n * Encode all characters that have to be escaped in HTML attributes,\n * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.\n */\n EncodingMode[EncodingMode[\"Attribute\"] = 3] = \"Attribute\";\n /**\n * Encode all characters that have to be escaped in HTML text,\n * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.\n */\n EncodingMode[EncodingMode[\"Text\"] = 4] = \"Text\";\n})(EncodingMode || (EncodingMode = {}));\n/**\n * Decodes a string with entities.\n * @param input String to decode.\n * @param options Decoding options.\n */\nexport function decode(input, options = EntityLevel.XML) {\n const level = typeof options === \"number\" ? options : options.level;\n if (level === EntityLevel.HTML) {\n const mode = typeof options === \"object\" ? options.mode : undefined;\n return decodeHTML(input, mode);\n }\n return decodeXML(input);\n}\n/**\n * Encodes a string with entities.\n * @param input String to encode.\n * @param options Encoding options.\n */\nexport function encode(input, options = EntityLevel.XML) {\n const { mode = EncodingMode.Extensive, level = EntityLevel.XML } = typeof options === \"number\" ? { level: options } : options;\n switch (mode) {\n case EncodingMode.UTF8: {\n return escapeUTF8(input);\n }\n case EncodingMode.Attribute: {\n return escapeAttribute(input);\n }\n case EncodingMode.Text: {\n return escapeText(input);\n }\n case EncodingMode.ASCII: {\n return (level === EntityLevel.HTML ? encodeNonAsciiHTML : encodeXML)(input);\n }\n // biome-ignore lint/complexity/noUselessSwitchCase: we get an error for the switch not being exhaustive\n case EncodingMode.Extensive:\n default: {\n return (level === EntityLevel.HTML ? encodeHTML : encodeXML)(input);\n }\n }\n}\nexport { DecodingMode, decodeHTML, decodeHTMLAttribute, decodeHTMLStrict, decodeXML, decodeXML as decodeXMLStrict, EntityDecoder, } from \"./decode.js\";\nexport { encodeHTML, encodeNonAsciiHTML, } from \"./encode.js\";\nexport { encodeXML, escape, escapeAttribute, escapeText, escapeUTF8, } from \"./escape.js\";\n//# sourceMappingURL=index.js.map",
83
+ "/**\n * Mixed-case SVG and MathML element names recognized in foreign content.\n * @see https://html.spec.whatwg.org/multipage/parsing.html#parsing-main-inforeign\n */\nexport const elementNames = new Map(\"altGlyph altGlyphDef altGlyphItem animateColor animateMotion animateTransform clipPath feBlend feColorMatrix feComponentTransfer feComposite feConvolveMatrix feDiffuseLighting feDisplacementMap feDistantLight feDropShadow feFlood feFuncA feFuncB feFuncG feFuncR feGaussianBlur feImage feMerge feMergeNode feMorphology feOffset fePointLight feSpecularLighting feSpotLight feTile feTurbulence foreignObject glyphRef linearGradient radialGradient textPath\"\n .split(\" \")\n .map((name) => [name.toLowerCase(), name]));\n/**\n * Mixed-case SVG and MathML attribute names recognized in foreign content.\n * @see https://html.spec.whatwg.org/multipage/parsing.html#parsing-main-inforeign\n */\nexport const attributeNames = new Map(\"definitionURL attributeName attributeType baseFrequency baseProfile calcMode clipPathUnits diffuseConstant edgeMode filterUnits glyphRef gradientTransform gradientUnits kernelMatrix kernelUnitLength keyPoints keySplines keyTimes lengthAdjust limitingConeAngle markerHeight markerUnits markerWidth maskContentUnits maskUnits numOctaves pathLength patternContentUnits patternTransform patternUnits pointsAtX pointsAtY pointsAtZ preserveAlpha preserveAspectRatio primitiveUnits refX refY repeatCount repeatDur requiredExtensions requiredFeatures specularConstant specularExponent spreadMethod startOffset stdDeviation stitchTiles surfaceScale systemLanguage tableValues targetX targetY textLength viewBox viewTarget xChannelSelector yChannelSelector zoomAndPan\"\n .split(\" \")\n .map((name) => [name.toLowerCase(), name]));\n//# sourceMappingURL=foreign-names.js.map",
84
+ "import * as ElementType from \"domelementtype\";\nimport { encodeXML, escapeAttribute, escapeText } from \"entities\";\nimport { attributeNames, elementNames } from \"./foreign-names.js\";\n// ── Constants ────────────────────────────────────────────────────────\n/** Elements whose text content is never entity-encoded. */\nconst unencodedElements = new Set(\"style script xmp iframe noembed noframes plaintext noscript\".split(\" \"));\n/** HTML void elements — they cannot have children. */\nconst voidElements = new Set(\"area base basefont br col command embed frame hr img input isindex keygen link meta param source track wbr\".split(\" \"));\n/** Elements that switch the parser into foreign (XML-like) mode. */\nconst foreignElements = new Set([\"svg\", \"math\"]);\n/**\n * Foreign-mode integration points: children of these elements are parsed\n * as HTML again, not as foreign content.\n */\nconst foreignModeIntegrationPoints = new Set(\"mi mo mn ms mtext annotation-xml foreignObject desc title\".split(\" \"));\n// ── Public API ───────────────────────────────────────────────────────\n/**\n * Renders a DOM node or an array of DOM nodes to a string.\n *\n * Can be thought of as the equivalent of the `outerHTML` of the passed\n * node(s).\n * @param node Node to be rendered.\n * @param options Changes serialization behavior\n */\nexport function render(node, options = {}) {\n const nodes = \"length\" in node ? node : [node];\n /*\n * `xmlMode` is threaded as a separate argument through the internal\n * functions so that foreign-mode transitions (svg/mathml ↔ html) can\n * adjust it without copying the options object on every element.\n */\n const xmlMode = options.xmlMode ?? false;\n let output = \"\";\n // eslint-disable-next-line unicorn/no-for-loop\n for (let index = 0; index < nodes.length; index++) {\n output += renderNode(nodes[index], options, xmlMode);\n }\n return output;\n}\nexport default render;\n// ── Internal rendering ───────────────────────────────────────────────\n/**\n * Render an array of child nodes (skips the single-node wrapping in `render`).\n * @param children The child nodes to render.\n * @param options The serialization options.\n * @param xmlMode The XML mode to use.\n */\nfunction renderChildren(children, options, xmlMode) {\n let output = \"\";\n // eslint-disable-next-line unicorn/no-for-loop\n for (let index = 0; index < children.length; index++) {\n output += renderNode(children[index], options, xmlMode);\n }\n return output;\n}\nfunction renderNode(node, options, xmlMode) {\n switch (node.type) {\n case ElementType.Root: {\n return renderChildren(node.children, options, xmlMode);\n }\n case ElementType.Directive: {\n return `<${node.data}>`;\n }\n case ElementType.Comment: {\n return `<!--${node.data}-->`;\n }\n case ElementType.CDATA: {\n return `<![CDATA[${node.children[0].data}]]>`;\n }\n case ElementType.Script:\n case ElementType.Style:\n case ElementType.Tag: {\n return renderTag(node, options, xmlMode);\n }\n case ElementType.Text: {\n const element = node;\n const data = element.data || \"\";\n /*\n * Skip encoding when entities weren't decoded on input, or when\n * inside a raw-text element (script, style, etc.) in HTML mode.\n */\n if ((options.encodeEntities ?? options.decodeEntities) !== false &&\n !(!xmlMode &&\n element.parent &&\n unencodedElements.has(element.parent.name))) {\n // `xmlMode: \"foreign\"` is truthy\n return xmlMode || options.encodeEntities !== \"utf8\"\n ? encodeXML(data)\n : escapeText(data);\n }\n return data;\n }\n }\n}\nfunction renderTag(element, options, xmlMode) {\n if (xmlMode === \"foreign\") {\n // Correct lowercase element names back to their canonical mixed-case form\n element.name = elementNames.get(element.name) ?? element.name;\n // Integration points exit foreign mode: their children are HTML\n if (element.parent &&\n foreignModeIntegrationPoints.has(element.parent.name)) {\n xmlMode = false;\n }\n }\n if (!xmlMode && foreignElements.has(element.name)) {\n xmlMode = \"foreign\";\n }\n const { name, children } = element;\n // Cache the void-element check — used for both self-closing and closing-tag logic\n const isVoid = !xmlMode && voidElements.has(name);\n let tag = `<${name}${formatAttributes(element.attribs, options, xmlMode)}`;\n if (children.length === 0 &&\n (xmlMode\n ? options.selfClosingTags !== false\n : options.selfClosingTags && isVoid)) {\n // XML: `<br/>`, HTML: `<br />`\n tag += xmlMode ? \"/>\" : \" />\";\n }\n else {\n tag += \">\";\n if (children.length > 0) {\n tag += renderChildren(children, options, xmlMode);\n }\n if (!isVoid) {\n tag += `</${name}>`;\n }\n }\n return tag;\n}\n// ── Attribute formatting ─────────────────────────────────────────────\nfunction replaceQuotes(value) {\n return value.replaceAll('\"', \"&quot;\");\n}\n/**\n * Serialize an element's attribute map to a string.\n *\n * Returns a string with a leading space before each attribute, or an\n * empty string if there are no attributes. This convention lets the\n * caller unconditionally concatenate the result onto the tag name.\n * @param attributes\n * @param options\n * @param xmlMode\n */\nfunction formatAttributes(attributes, options, xmlMode) {\n if (!attributes)\n return \"\";\n /*\n * Pick the right encoder:\n * - Encoding disabled → only escape double-quotes (for valid attributes)\n * - XML / non-utf8 → full numeric entity encoding (encodeXML)\n * - HTML + utf8 → minimal escaping (escapeAttribute)\n */\n const encode = (options.encodeEntities ?? options.decodeEntities) === false\n ? replaceQuotes\n : xmlMode || options.encodeEntities !== \"utf8\"\n ? encodeXML\n : escapeAttribute;\n const isForeign = xmlMode === \"foreign\";\n const showEmpty = !!(options.emptyAttrs ?? xmlMode);\n let result = \"\";\n for (const key in attributes) {\n if (!Object.hasOwn(attributes, key))\n continue;\n const value = attributes[key];\n const k = isForeign ? (attributeNames.get(key) ?? key) : key;\n result +=\n !showEmpty && (value == null || value === \"\")\n ? ` ${k}`\n : ` ${k}=\"${encode(value == null ? \"\" : String(value))}\"`;\n }\n return result;\n}\n//# sourceMappingURL=index.js.map",
85
+ "/** Types of elements found in htmlparser2's DOM */\nexport var ElementType;\n(function (ElementType) {\n /** Type for the root element of a document */\n ElementType[\"Root\"] = \"root\";\n /** Type for Text */\n ElementType[\"Text\"] = \"text\";\n /** Type for <? ... ?> */\n ElementType[\"Directive\"] = \"directive\";\n /** Type for <!-- ... --> */\n ElementType[\"Comment\"] = \"comment\";\n /** Type for <script> tags */\n ElementType[\"Script\"] = \"script\";\n /** Type for <style> tags */\n ElementType[\"Style\"] = \"style\";\n /** Type for Any tag */\n ElementType[\"Tag\"] = \"tag\";\n /** Type for <![CDATA[ ... ]]> */\n ElementType[\"CDATA\"] = \"cdata\";\n /** Type for <!doctype ...> */\n ElementType[\"Doctype\"] = \"doctype\";\n})(ElementType || (ElementType = {}));\n/**\n * Tests whether an element is a tag or not.\n * @param element Element to test\n * @param element.type Node type discriminator to check.\n */\nexport function isTag(element) {\n return (element.type === ElementType.Tag ||\n element.type === ElementType.Script ||\n element.type === ElementType.Style);\n}\n// Exports for backwards compatibility\n/** Type for the root element of a document */\n// eslint-disable-next-line prefer-destructuring\nexport const Root = ElementType.Root;\n/** Type for Text */\n// eslint-disable-next-line prefer-destructuring\nexport const Text = ElementType.Text;\n/** Type for <? ... ?> */\n// eslint-disable-next-line prefer-destructuring\nexport const Directive = ElementType.Directive;\n/** Type for <!-- ... --> */\n// eslint-disable-next-line prefer-destructuring\nexport const Comment = ElementType.Comment;\n/** Type for <script> tags */\n// eslint-disable-next-line prefer-destructuring\nexport const Script = ElementType.Script;\n/** Type for <style> tags */\n// eslint-disable-next-line prefer-destructuring\nexport const Style = ElementType.Style;\n/** Type for Any tag */\n// eslint-disable-next-line prefer-destructuring\nexport const Tag = ElementType.Tag;\n/** Type for <![CDATA[ ... ]]> */\n// eslint-disable-next-line prefer-destructuring\nexport const CDATA = ElementType.CDATA;\n/** Type for <!doctype ...> */\n// eslint-disable-next-line prefer-destructuring\nexport const Doctype = ElementType.Doctype;\n",
86
+ "import renderHTML from \"dom-serializer\";\nimport { ElementType } from \"domelementtype\";\nimport { hasChildren, isCDATA, isComment, isTag, isText, } from \"domhandler\";\n/**\n * @category Stringify\n * @deprecated Use the `dom-serializer` module directly.\n * @param node Node to get the outer HTML of.\n * @param options Options for serialization.\n * @returns `node`'s outer HTML.\n */\nexport function getOuterHTML(node, options) {\n return renderHTML(node, options);\n}\n/**\n * @category Stringify\n * @deprecated Use the `dom-serializer` module directly.\n * @param node Node to get the inner HTML of.\n * @param options Options for serialization.\n * @returns `node`'s inner HTML.\n */\nexport function getInnerHTML(node, options) {\n return hasChildren(node)\n ? node.children.map((node) => getOuterHTML(node, options)).join(\"\")\n : \"\";\n}\n/**\n * Get a node's inner text. Same as `textContent`, but inserts newlines for `<br>` tags. Ignores comments.\n *\n * @category Stringify\n * @deprecated Use `textContent` instead.\n * @param node Node to get the inner text of.\n * @returns `node`'s inner text.\n */\nexport function getText(node) {\n if (Array.isArray(node))\n return node.map(getText).join(\"\");\n if (isTag(node))\n return node.name === \"br\" ? \"\\n\" : getText(node.children);\n if (isCDATA(node))\n return getText(node.children);\n if (isText(node))\n return node.data;\n return \"\";\n}\n/**\n * Get a node's text content. Ignores comments.\n *\n * @category Stringify\n * @param node Node to get the text content of.\n * @returns `node`'s text content.\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent}\n */\nexport function textContent(node) {\n if (Array.isArray(node))\n return node.map(textContent).join(\"\");\n if (hasChildren(node) && !isComment(node)) {\n return textContent(node.children);\n }\n if (isText(node))\n return node.data;\n return \"\";\n}\n/**\n * Get a node's inner text, ignoring `<script>` and `<style>` tags. Ignores comments.\n *\n * @category Stringify\n * @param node Node to get the inner text of.\n * @returns `node`'s inner text.\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/Node/innerText}\n */\nexport function innerText(node) {\n if (Array.isArray(node))\n return node.map(innerText).join(\"\");\n if (hasChildren(node) && (node.type === ElementType.Tag || isCDATA(node))) {\n return innerText(node.children);\n }\n if (isText(node))\n return node.data;\n return \"\";\n}\n//# sourceMappingURL=stringify.js.map",
87
+ "import { getElementsByTagName } from \"./legacy.js\";\nimport { textContent } from \"./stringify.js\";\n/**\n * Get the feed object from the root of a DOM tree.\n *\n * @category Feeds\n * @param document The DOM to extract the feed from.\n * @returns The feed.\n */\nexport function getFeed(document) {\n const feedRoot = getOneElement(isValidFeed, document);\n return feedRoot\n ? feedRoot.name === \"feed\"\n ? getAtomFeed(feedRoot)\n : getRssFeed(feedRoot)\n : null;\n}\n/**\n * Parse an Atom feed.\n *\n * @param feedRoot The root of the feed.\n * @returns The parsed feed.\n */\nfunction getAtomFeed(feedRoot) {\n const childs = feedRoot.children;\n const feed = {\n type: \"atom\",\n items: getElementsByTagName(\"entry\", childs).map((item) => {\n const { children } = item;\n const entry = { media: getMediaElements(children) };\n addConditionally(entry, \"id\", \"id\", children);\n addConditionally(entry, \"title\", \"title\", children);\n const href = getOneElement(\"link\", children)?.attribs[\"href\"];\n if (href) {\n entry.link = href;\n }\n const description = fetch(\"summary\", children) || fetch(\"content\", children);\n if (description) {\n entry.description = description;\n }\n const pubDate = fetch(\"updated\", children);\n if (pubDate) {\n entry.pubDate = new Date(pubDate);\n }\n return entry;\n }),\n };\n addConditionally(feed, \"id\", \"id\", childs);\n addConditionally(feed, \"title\", \"title\", childs);\n const href = getOneElement(\"link\", childs)?.attribs[\"href\"];\n if (href) {\n feed.link = href;\n }\n addConditionally(feed, \"description\", \"subtitle\", childs);\n const updated = fetch(\"updated\", childs);\n if (updated) {\n feed.updated = new Date(updated);\n }\n addConditionally(feed, \"author\", \"email\", childs, true);\n return feed;\n}\n/**\n * Parse a RSS feed.\n *\n * @param feedRoot The root of the feed.\n * @returns The parsed feed.\n */\nfunction getRssFeed(feedRoot) {\n const childs = getOneElement(\"channel\", feedRoot.children)?.children ?? [];\n const feed = {\n type: feedRoot.name.substr(0, 3),\n id: \"\",\n items: getElementsByTagName(\"item\", feedRoot.children).map((item) => {\n const { children } = item;\n const entry = { media: getMediaElements(children) };\n addConditionally(entry, \"id\", \"guid\", children);\n addConditionally(entry, \"title\", \"title\", children);\n addConditionally(entry, \"link\", \"link\", children);\n addConditionally(entry, \"description\", \"description\", children);\n const pubDate = fetch(\"pubDate\", children) || fetch(\"dc:date\", children);\n if (pubDate)\n entry.pubDate = new Date(pubDate);\n return entry;\n }),\n };\n addConditionally(feed, \"title\", \"title\", childs);\n addConditionally(feed, \"link\", \"link\", childs);\n addConditionally(feed, \"description\", \"description\", childs);\n const updated = fetch(\"lastBuildDate\", childs);\n if (updated) {\n feed.updated = new Date(updated);\n }\n addConditionally(feed, \"author\", \"managingEditor\", childs, true);\n return feed;\n}\nconst MEDIA_KEYS_STRING = [\"url\", \"type\", \"lang\"];\nconst MEDIA_KEYS_INT = [\n \"fileSize\",\n \"bitrate\",\n \"framerate\",\n \"samplingrate\",\n \"channels\",\n \"duration\",\n \"height\",\n \"width\",\n];\n/**\n * Get all media elements of a feed item.\n *\n * @param where Nodes to search in.\n * @returns Media elements.\n */\nfunction getMediaElements(where) {\n return getElementsByTagName(\"media:content\", where).map((element) => {\n const { attribs } = element;\n const media = {\n medium: attribs[\"medium\"],\n isDefault: !!attribs[\"isDefault\"],\n };\n for (const attrib of MEDIA_KEYS_STRING) {\n if (attribs[attrib]) {\n media[attrib] = attribs[attrib];\n }\n }\n for (const attrib of MEDIA_KEYS_INT) {\n if (attribs[attrib]) {\n media[attrib] = Number.parseInt(attribs[attrib], 10);\n }\n }\n if (attribs[\"expression\"]) {\n media.expression = attribs[\"expression\"];\n }\n return media;\n });\n}\n/**\n * Get one element by tag name.\n *\n * @param tagName Tag name to look for\n * @param node Node to search in\n * @returns The element or null\n */\nfunction getOneElement(tagName, node) {\n return getElementsByTagName(tagName, node, true, 1)[0];\n}\n/**\n * Get the text content of an element with a certain tag name.\n *\n * @param tagName Tag name to look for.\n * @param where Node to search in.\n * @param recurse Whether to recurse into child nodes.\n * @returns The text content of the element.\n */\nfunction fetch(tagName, where, recurse = false) {\n return textContent(getElementsByTagName(tagName, where, recurse, 1)).trim();\n}\n/**\n * Adds a property to an object if it has a value.\n *\n * @param object Object to be extended.\n * @param property Property name.\n * @param tagName Tag name that contains the conditionally added property.\n * @param where Element to search for the property.\n * @param recurse Whether to recurse into child nodes.\n */\nfunction addConditionally(object, property, tagName, where, recurse = false) {\n const value = fetch(tagName, where, recurse);\n if (value)\n object[property] = value;\n}\n/**\n * Checks if an element is a feed root node.\n *\n * @param value The name of the element to check.\n * @returns Whether an element is a feed root node.\n */\nfunction isValidFeed(value) {\n return value === \"rss\" || value === \"feed\" || value === \"rdf:RDF\";\n}\n//# sourceMappingURL=feeds.js.map",
88
+ "import { hasChildren } from \"domhandler\";\n/**\n * Given an array of nodes, remove any member that is contained by another\n * member.\n *\n * @category Helpers\n * @param nodes Nodes to filter.\n * @returns Remaining nodes that aren't contained by other nodes.\n */\nexport function removeSubsets(nodes) {\n let index = nodes.length;\n /*\n * Check if each node (or one of its ancestors) is already contained in the\n * array.\n */\n while (--index >= 0) {\n const node = nodes[index];\n /*\n * Remove the node if it is not unique.\n * We are going through the array from the end, so we only\n * have to check nodes that preceed the node under consideration in the array.\n */\n if (index > 0 && nodes.lastIndexOf(node, index - 1) >= 0) {\n nodes.splice(index, 1);\n continue;\n }\n for (let ancestor = node.parent; ancestor; ancestor = ancestor.parent) {\n if (nodes.includes(ancestor)) {\n nodes.splice(index, 1);\n break;\n }\n }\n }\n return nodes;\n}\n/**\n * @category Helpers\n * @see {@link http://dom.spec.whatwg.org/#dom-node-comparedocumentposition}\n */\nexport var DocumentPosition;\n(function (DocumentPosition) {\n DocumentPosition[DocumentPosition[\"DISCONNECTED\"] = 1] = \"DISCONNECTED\";\n DocumentPosition[DocumentPosition[\"PRECEDING\"] = 2] = \"PRECEDING\";\n DocumentPosition[DocumentPosition[\"FOLLOWING\"] = 4] = \"FOLLOWING\";\n DocumentPosition[DocumentPosition[\"CONTAINS\"] = 8] = \"CONTAINS\";\n DocumentPosition[DocumentPosition[\"CONTAINED_BY\"] = 16] = \"CONTAINED_BY\";\n})(DocumentPosition || (DocumentPosition = {}));\n/**\n * Compare the position of one node against another node in any other document,\n * returning a bitmask with the values from {@link DocumentPosition}.\n *\n * Document order:\n * > There is an ordering, document order, defined on all the nodes in the\n * > document corresponding to the order in which the first character of the\n * > XML representation of each node occurs in the XML representation of the\n * > document after expansion of general entities. Thus, the document element\n * > node will be the first node. Element nodes occur before their children.\n * > Thus, document order orders element nodes in order of the occurrence of\n * > their start-tag in the XML (after expansion of entities). The attribute\n * > nodes of an element occur after the element and before its children. The\n * > relative order of attribute nodes is implementation-dependent.\n *\n * Source:\n * http://www.w3.org/TR/DOM-Level-3-Core/glossary.html#dt-document-order\n *\n * @category Helpers\n * @param nodeA The first node to use in the comparison\n * @param nodeB The second node to use in the comparison\n * @returns A bitmask describing the input nodes' relative position.\n *\n * See http://dom.spec.whatwg.org/#dom-node-comparedocumentposition for\n * a description of these values.\n */\nexport function compareDocumentPosition(nodeA, nodeB) {\n const aParents = [];\n const bParents = [];\n if (nodeA === nodeB) {\n return 0;\n }\n let current = hasChildren(nodeA) ? nodeA : nodeA.parent;\n while (current) {\n aParents.unshift(current);\n current = current.parent;\n }\n current = hasChildren(nodeB) ? nodeB : nodeB.parent;\n while (current) {\n bParents.unshift(current);\n current = current.parent;\n }\n const maxIndex = Math.min(aParents.length, bParents.length);\n let index = 0;\n while (index < maxIndex && aParents[index] === bParents[index]) {\n index++;\n }\n if (index === 0) {\n return DocumentPosition.DISCONNECTED;\n }\n const sharedParent = aParents[index - 1];\n const siblings = sharedParent.children;\n const aSibling = aParents[index];\n const bSibling = bParents[index];\n if (siblings.indexOf(aSibling) > siblings.indexOf(bSibling)) {\n if (sharedParent === nodeB) {\n return DocumentPosition.FOLLOWING | DocumentPosition.CONTAINED_BY;\n }\n return DocumentPosition.FOLLOWING;\n }\n if (sharedParent === nodeA) {\n return DocumentPosition.PRECEDING | DocumentPosition.CONTAINS;\n }\n return DocumentPosition.PRECEDING;\n}\n/**\n * Sort an array of nodes based on their relative position in the document,\n * removing any duplicate nodes. If the array contains nodes that do not belong\n * to the same document, sort order is unspecified.\n *\n * @category Helpers\n * @param nodes Array of DOM nodes.\n * @returns Collection of unique nodes, sorted in document order.\n */\nexport function uniqueSort(nodes) {\n nodes = nodes.filter((node, index, array) => !array.includes(node, index + 1));\n nodes.sort((a, b) => {\n const relative = compareDocumentPosition(a, b);\n if (relative & DocumentPosition.PRECEDING) {\n return -1;\n }\n if (relative & DocumentPosition.FOLLOWING) {\n return 1;\n }\n return 0;\n });\n return nodes;\n}\n//# sourceMappingURL=helpers.js.map",
89
+ "/**\n * Remove an element from the dom\n *\n * @category Manipulation\n * @param element The element to be removed.\n */\nexport function removeElement(element) {\n if (element.prev)\n element.prev.next = element.next;\n if (element.next)\n element.next.prev = element.prev;\n if (element.parent) {\n const childs = element.parent.children;\n const childsIndex = childs.lastIndexOf(element);\n if (childsIndex !== -1) {\n childs.splice(childsIndex, 1);\n }\n }\n element.next = null;\n element.prev = null;\n element.parent = null;\n}\n/**\n * Replace an element in the dom\n *\n * @category Manipulation\n * @param element The element to be replaced.\n * @param replacement The element to be added\n */\nexport function replaceElement(element, replacement) {\n replacement.prev = element.prev;\n if (replacement.prev) {\n replacement.prev.next = replacement;\n }\n replacement.next = element.next;\n if (replacement.next) {\n replacement.next.prev = replacement;\n }\n replacement.parent = element.parent;\n if (replacement.parent) {\n const { children } = replacement.parent;\n const elementIndex = children.lastIndexOf(element);\n if (elementIndex === -1) {\n return;\n }\n children[elementIndex] = replacement;\n element.parent = null;\n }\n}\n/**\n * Append a child to an element.\n *\n * @category Manipulation\n * @param parent The element to append to.\n * @param child The element to be added as a child.\n */\nexport function appendChild(parent, child) {\n removeElement(child);\n child.next = null;\n child.parent = parent;\n if (parent.children.push(child) > 1) {\n const sibling = parent.children[parent.children.length - 2];\n sibling.next = child;\n child.prev = sibling;\n }\n else {\n child.prev = null;\n }\n}\n/**\n * Append an element after another.\n *\n * @category Manipulation\n * @param element The element to append after.\n * @param next The element be added.\n */\nexport function append(element, next) {\n removeElement(next);\n const { parent } = element;\n const currentNext = element.next;\n next.next = currentNext;\n next.prev = element;\n element.next = next;\n next.parent = parent;\n if (currentNext) {\n currentNext.prev = next;\n if (parent) {\n const childs = parent.children;\n childs.splice(childs.lastIndexOf(currentNext), 0, next);\n }\n }\n else if (parent) {\n parent.children.push(next);\n }\n}\n/**\n * Prepend a child to an element.\n *\n * @category Manipulation\n * @param parent The element to prepend before.\n * @param child The element to be added as a child.\n */\nexport function prependChild(parent, child) {\n removeElement(child);\n child.parent = parent;\n child.prev = null;\n if (parent.children.unshift(child) === 1) {\n child.next = null;\n }\n else {\n const sibling = parent.children[1];\n sibling.prev = child;\n child.next = sibling;\n }\n}\n/**\n * Prepend an element before another.\n *\n * @category Manipulation\n * @param element The element to prepend before.\n * @param previous The element to be added.\n */\nexport function prepend(element, previous) {\n removeElement(previous);\n const { parent } = element;\n if (parent) {\n const childs = parent.children;\n childs.splice(childs.indexOf(element), 0, previous);\n }\n if (element.prev) {\n element.prev.next = previous;\n }\n previous.parent = parent;\n previous.prev = element.prev;\n previous.next = element;\n element.prev = previous;\n}\n//# sourceMappingURL=manipulation.js.map",
90
+ "import { hasChildren, isTag, } from \"domhandler\";\n/**\n * Get a node's children.\n *\n * @category Traversal\n * @param element Node to get the children of.\n * @returns `element`'s children, or an empty array.\n */\nexport function getChildren(element) {\n return hasChildren(element) ? element.children : [];\n}\nexport function getParent(element) {\n return element.parent || null;\n}\n/**\n * Gets an elements siblings, including the element itself.\n *\n * Attempts to get the children through the element's parent first. If we don't\n * have a parent (the element is a root node), we walk the element's `prev` &\n * `next` to get all remaining nodes.\n *\n * @category Traversal\n * @param element Element to get the siblings of.\n * @returns `element`'s siblings, including `element`.\n */\nexport function getSiblings(element) {\n const parent = getParent(element);\n if (parent != null)\n return getChildren(parent);\n const siblings = [element];\n let { prev, next } = element;\n while (prev != null) {\n siblings.unshift(prev);\n ({ prev } = prev);\n }\n while (next != null) {\n siblings.push(next);\n ({ next } = next);\n }\n return siblings;\n}\n/**\n * Gets an attribute from an element.\n *\n * @category Traversal\n * @param element Element to check.\n * @param name Attribute name to retrieve.\n * @returns The element's attribute value, or `undefined`.\n */\nexport function getAttributeValue(element, name) {\n const { attribs } = element;\n return attribs?.[name];\n}\n/**\n * Checks whether an element has an attribute.\n *\n * @category Traversal\n * @param element Element to check.\n * @param name Attribute name to look for.\n * @returns Returns whether `element` has the attribute `name`.\n */\nexport function hasAttrib(element, name) {\n const { attribs } = element;\n return (attribs != null && Object.hasOwn(attribs, name) && attribs[name] != null);\n}\n/**\n * Get the tag name of an element.\n *\n * @category Traversal\n * @param element The element to get the name for.\n * @returns The tag name of `element`.\n */\nexport function getName(element) {\n return element.name;\n}\n/**\n * Returns the next element sibling of a node.\n *\n * @category Traversal\n * @param element The element to get the next sibling of.\n * @returns `element`'s next sibling that is a tag, or `null` if there is no next\n * sibling.\n */\nexport function nextElementSibling(element) {\n let { next } = element;\n while (next !== null && !isTag(next))\n ({ next } = next);\n return next;\n}\n/**\n * Returns the previous element sibling of a node.\n *\n * @category Traversal\n * @param element The element to get the previous sibling of.\n * @returns `element`'s previous sibling that is a tag, or `null` if there is no\n * previous sibling.\n */\n// eslint-disable-next-line unicorn/prevent-abbreviations -- Keep public API name for backwards compatibility.\nexport function prevElementSibling(element) {\n let { prev } = element;\n while (prev !== null && !isTag(prev))\n ({ prev } = prev);\n return prev;\n}\n//# sourceMappingURL=traversal.js.map",
91
+ "import * as boolbase from \"boolbase\";\n/**\n * All reserved characters in a regex, used for escaping.\n *\n * Taken from XRegExp, (c) 2007-2020 Steven Levithan under the MIT license\n * https://github.com/slevithan/xregexp/blob/95eeebeb8fac8754d54eafe2b4743661ac1cf028/src/xregexp.js#L794\n */\nconst reChars = /[-[\\]{}()*+?.,\\\\^$|#\\s]/g;\nconst whitespaceRe = /\\s/;\nfunction escapeRegex(value) {\n return value.replace(reChars, \"\\\\$&\");\n}\n/**\n * Attributes that are case-insensitive in HTML.\n * @see https://html.spec.whatwg.org/multipage/semantics-other.html#case-sensitivity-of-selectors\n */\nconst caseInsensitiveAttributes = new Set([\n \"accept\",\n \"accept-charset\",\n \"align\",\n \"alink\",\n \"axis\",\n \"bgcolor\",\n \"charset\",\n \"checked\",\n \"clear\",\n \"codetype\",\n \"color\",\n \"compact\",\n \"declare\",\n \"defer\",\n \"dir\",\n \"direction\",\n \"disabled\",\n \"enctype\",\n \"face\",\n \"frame\",\n \"hreflang\",\n \"http-equiv\",\n \"lang\",\n \"language\",\n \"link\",\n \"media\",\n \"method\",\n \"multiple\",\n \"nohref\",\n \"noresize\",\n \"noshade\",\n \"nowrap\",\n \"readonly\",\n \"rel\",\n \"rev\",\n \"rules\",\n \"scope\",\n \"scrolling\",\n \"selected\",\n \"shape\",\n \"target\",\n \"text\",\n \"type\",\n \"valign\",\n \"valuetype\",\n \"vlink\",\n]);\nfunction shouldIgnoreCase(selector, options) {\n return typeof selector.ignoreCase === \"boolean\"\n ? selector.ignoreCase\n : selector.ignoreCase === \"quirks\"\n ? !!options.quirksMode\n : !options.xmlMode && caseInsensitiveAttributes.has(selector.name);\n}\n/**\n * Attribute selectors\n */\nexport const attributeRules = {\n equals(next, data, options) {\n const { adapter } = options;\n const { name } = data;\n let { value } = data;\n if (shouldIgnoreCase(data, options)) {\n value = value.toLowerCase();\n return (element) => {\n const attribute = adapter.getAttributeValue(element, name);\n return (attribute != null &&\n attribute.length === value.length &&\n attribute.toLowerCase() === value &&\n next(element));\n };\n }\n return (element) => adapter.getAttributeValue(element, name) === value && next(element);\n },\n hyphen(next, data, options) {\n const { adapter } = options;\n const { name } = data;\n let { value } = data;\n const { length } = value;\n if (shouldIgnoreCase(data, options)) {\n value = value.toLowerCase();\n return function hyphenIC(element) {\n const attribute = adapter.getAttributeValue(element, name);\n return (attribute != null &&\n (attribute.length === length ||\n attribute.charAt(length) === \"-\") &&\n attribute.substr(0, length).toLowerCase() === value &&\n next(element));\n };\n }\n return function hyphen(element) {\n const attribute = adapter.getAttributeValue(element, name);\n return (attribute != null &&\n (attribute.length === length ||\n attribute.charAt(length) === \"-\") &&\n attribute.substr(0, length) === value &&\n next(element));\n };\n },\n element(next, data, options) {\n const { adapter } = options;\n const { name, value } = data;\n if (whitespaceRe.test(value)) {\n return boolbase.falseFunc;\n }\n const regex = new RegExp(`(?:^|\\\\s)${escapeRegex(value)}(?:$|\\\\s)`, shouldIgnoreCase(data, options) ? \"i\" : \"\");\n return function element(node) {\n const attribute = adapter.getAttributeValue(node, name);\n return (attribute != null &&\n attribute.length >= value.length &&\n regex.test(attribute) &&\n next(node));\n };\n },\n exists(next, { name }, { adapter }) {\n return (element) => adapter.hasAttrib(element, name) && next(element);\n },\n start(next, data, options) {\n const { adapter } = options;\n const { name } = data;\n let { value } = data;\n const { length } = value;\n if (length === 0) {\n return boolbase.falseFunc;\n }\n if (shouldIgnoreCase(data, options)) {\n value = value.toLowerCase();\n return (element) => {\n const attribute = adapter.getAttributeValue(element, name);\n return (attribute != null &&\n attribute.length >= length &&\n attribute.substr(0, length).toLowerCase() === value &&\n next(element));\n };\n }\n return (element) => !!adapter.getAttributeValue(element, name)?.startsWith(value) &&\n next(element);\n },\n end(next, data, options) {\n const { adapter } = options;\n const { name } = data;\n let { value } = data;\n const length = -value.length;\n if (length === 0) {\n return boolbase.falseFunc;\n }\n if (shouldIgnoreCase(data, options)) {\n value = value.toLowerCase();\n return (element) => adapter\n .getAttributeValue(element, name)\n ?.substr(length)\n .toLowerCase() === value && next(element);\n }\n return (element) => !!adapter.getAttributeValue(element, name)?.endsWith(value) &&\n next(element);\n },\n any(next, data, options) {\n const { adapter } = options;\n const { name, value } = data;\n if (value === \"\") {\n return boolbase.falseFunc;\n }\n if (shouldIgnoreCase(data, options)) {\n const regex = new RegExp(escapeRegex(value), \"i\");\n return function anyIC(element) {\n const attribute = adapter.getAttributeValue(element, name);\n return (attribute != null &&\n attribute.length >= value.length &&\n regex.test(attribute) &&\n next(element));\n };\n }\n return (element) => !!adapter.getAttributeValue(element, name)?.includes(value) &&\n next(element);\n },\n not(next, data, options) {\n const { adapter } = options;\n const { name } = data;\n let { value } = data;\n if (value === \"\") {\n return (element) => !!adapter.getAttributeValue(element, name) && next(element);\n }\n if (shouldIgnoreCase(data, options)) {\n value = value.toLowerCase();\n return (element) => {\n const attribute = adapter.getAttributeValue(element, name);\n return ((attribute == null ||\n attribute.length !== value.length ||\n attribute.toLowerCase() !== value) &&\n next(element));\n };\n }\n return (element) => adapter.getAttributeValue(element, name) !== value && next(element);\n },\n};\n//# sourceMappingURL=attributes.js.map",
92
+ "/**\n * Find all elements matching the query. If not in XML mode, the query will ignore\n * the contents of `<template>` elements.\n * @param query - Function that returns true if the element matches the query.\n * @param nodes - Nodes to query. If a node is an element, its children will be queried.\n * @param options - Options for querying the document.\n * @returns All matching elements.\n */\nexport function findAll(query, nodes, options) {\n const { adapter, xmlMode = false } = options;\n const result = [];\n /** Stack of the arrays we are looking at. */\n const nodeStack = [nodes];\n /** Stack of the indices within the arrays. */\n const indexStack = [0];\n for (;;) {\n // First, check if the current array has any more elements to look at.\n if (indexStack[0] >= nodeStack[0].length) {\n // If we have no more arrays to look at, we are done.\n if (nodeStack.length === 1) {\n return result;\n }\n nodeStack.shift();\n indexStack.shift();\n // Loop back to the start to continue with the next array.\n continue;\n }\n const element = nodeStack[0][indexStack[0]++];\n if (!adapter.isTag(element)) {\n continue;\n }\n if (query(element)) {\n result.push(element);\n }\n if (xmlMode || adapter.getName(element) !== \"template\") {\n /*\n * Add the children to the stack. We are depth-first, so this is\n * the next array we look at.\n */\n const children = adapter.getChildren(element);\n if (children.length > 0) {\n nodeStack.unshift(children);\n indexStack.unshift(0);\n }\n }\n }\n}\n/**\n * Find the first element matching the query. If not in XML mode, the query will ignore\n * the contents of `<template>` elements.\n * @param query - Function that returns true if the element matches the query.\n * @param nodes - Nodes to query. If a node is an element, its children will be queried.\n * @param options - Options for querying the document.\n * @returns The first matching element, or null if there was no match.\n */\nexport function findOne(query, nodes, options) {\n const { adapter, xmlMode = false } = options;\n /** Stack of the arrays we are looking at. */\n const nodeStack = [nodes];\n /** Stack of the indices within the arrays. */\n const indexStack = [0];\n for (;;) {\n // First, check if the current array has any more elements to look at.\n if (indexStack[0] >= nodeStack[0].length) {\n // If we have no more arrays to look at, we are done.\n if (nodeStack.length === 1) {\n return null;\n }\n nodeStack.shift();\n indexStack.shift();\n // Loop back to the start to continue with the next array.\n continue;\n }\n const element = nodeStack[0][indexStack[0]++];\n if (!adapter.isTag(element)) {\n continue;\n }\n if (query(element)) {\n return element;\n }\n if (xmlMode || adapter.getName(element) !== \"template\") {\n /*\n * Add the children to the stack. We are depth-first, so this is\n * the next array we look at.\n */\n const children = adapter.getChildren(element);\n if (children.length > 0) {\n nodeStack.unshift(children);\n indexStack.unshift(0);\n }\n }\n }\n}\n/**\n * Get all element siblings after the provided node.\n * @param element Element candidate being tested.\n * @param adapter Adapter implementation used for DOM operations.\n */\nexport function getNextSiblings(element, adapter) {\n const siblings = adapter.getSiblings(element);\n if (siblings.length <= 1) {\n return [];\n }\n const elementIndex = siblings.indexOf(element);\n if (elementIndex === -1 || elementIndex === siblings.length - 1) {\n return [];\n }\n return siblings.slice(elementIndex + 1).filter(adapter.isTag);\n}\n/**\n * Get the parent element of a node.\n * @param node Node to inspect.\n * @param adapter Adapter implementation used for DOM operations.\n */\nexport function getElementParent(node, adapter) {\n const parent = adapter.getParent(node);\n return parent != null && adapter.isTag(parent) ? parent : null;\n}\n//# sourceMappingURL=querying.js.map",
93
+ "/**\n * Only text controls can be made read-only, since for other controls (such\n * as checkboxes and buttons) there is no useful distinction between being\n * read-only and being disabled.\n * @see {@link https://html.spec.whatwg.org/multipage/input.html#attr-input-readonly}\n */\nconst textControl = \"input:is([type=text i],[type=search i],[type=url i],[type=tel i],[type=email i],[type=password i],[type=date i],[type=month i],[type=week i],[type=time i],[type=datetime-local i],[type=number i])\";\n/**\n * Aliases are pseudos that are expressed as selectors.\n */\nexport const aliases = {\n // Links\n \"any-link\": \":is(a, area, link)[href]\",\n link: \":any-link:not(:visited)\",\n // Forms\n // https://html.spec.whatwg.org/multipage/scripting.html#disabled-elements\n disabled: `:is(\n :is(button, input, select, textarea, optgroup, option)[disabled],\n optgroup[disabled] > option,\n fieldset[disabled]:not(fieldset[disabled] legend:first-of-type *)\n )`,\n enabled: \":is(button, input, select, textarea, optgroup, option, fieldset):not(:disabled)\",\n checked: \":is(:is(input[type=radio], input[type=checkbox])[checked], :selected)\",\n required: \":is(input, select, textarea)[required]\",\n optional: \":is(input, select, textarea):not([required])\",\n \"read-only\": `[readonly]:is(textarea, ${textControl})`,\n \"read-write\": `:not([readonly]):is(textarea, ${textControl})`,\n // JQuery extensions\n /**\n * `:selected` matches option elements that have the `selected` attribute,\n * or are the first option element in a select element that does not have\n * the `multiple` attribute and does not have any option elements with the\n * `selected` attribute.\n * @see https://html.spec.whatwg.org/multipage/form-elements.html#concept-option-selectedness\n */\n selected: \"option:is([selected], select:not([multiple]):not(:has(> option[selected])) > :first-of-type)\",\n checkbox: \"[type=checkbox]\",\n file: \"[type=file]\",\n password: \"[type=password]\",\n radio: \"[type=radio]\",\n reset: \"[type=reset]\",\n image: \"[type=image]\",\n submit: \"[type=submit]\",\n parent: \":not(:empty)\",\n header: \":is(h1, h2, h3, h4, h5, h6)\",\n button: \":is(button, input[type=button])\",\n input: \":is(input, textarea, select, button)\",\n text: \"input:is(:not([type!='']), [type=text])\",\n};\n//# sourceMappingURL=aliases.js.map",
94
+ "import * as boolbase from \"boolbase\";\n/**\n * Returns a function that checks if an elements index matches the given rule\n * highly optimized to return the fastest solution.\n * @param parsed A tuple [a, b], as returned by `parse`.\n * @returns A highly optimized function that returns whether an index matches the nth-check.\n * @example\n *\n * ```js\n * const check = nthCheck.compile([2, 3]);\n *\n * check(0); // `false`\n * check(1); // `false`\n * check(2); // `true`\n * check(3); // `false`\n * check(4); // `true`\n * check(5); // `false`\n * check(6); // `true`\n * ```\n */\nexport function compile(parsed) {\n const a = parsed[0];\n // Subtract 1 from `b`, to convert from one- to zero-indexed.\n const b = parsed[1] - 1;\n /*\n * When `b <= 0`, `a * n` won't be lead to any matches for `a < 0`.\n * Besides, the specification states that no elements are\n * matched when `a` and `b` are 0.\n *\n * `b < 0` here as we subtracted 1 from `b` above.\n */\n if (b < 0 && a <= 0)\n return boolbase.falseFunc;\n // When `a` is in the range -1..1, it matches any element (so only `b` is checked).\n if (a === -1)\n return (index) => index <= b;\n if (a === 0)\n return (index) => index === b;\n // When `b <= 0` and `a === 1`, they match any element.\n if (a === 1)\n return b < 0 ? boolbase.trueFunc : (index) => index >= b;\n /*\n * Otherwise, modulo can be used to check if there is a match.\n *\n * Modulo doesn't care about the sign, so let's use `a`s absolute value.\n */\n const absA = Math.abs(a);\n // Get `b mod a`, + a if this is negative.\n const bModulo = ((b % absA) + absA) % absA;\n return a > 1\n ? (index) => index >= b && index % absA === bModulo\n : (index) => index <= b && index % absA === bModulo;\n}\n/**\n * Returns a function that produces a monotonously increasing sequence of indices.\n *\n * If the sequence has an end, the returned function will return `null` after\n * the last index in the sequence.\n * @param parsed A tuple [a, b], as returned by `parse`.\n * @returns A function that produces a sequence of indices.\n * @example <caption>Always increasing (2n+3)</caption>\n *\n * ```js\n * const gen = nthCheck.generate([2, 3])\n *\n * gen() // `1`\n * gen() // `3`\n * gen() // `5`\n * gen() // `8`\n * gen() // `11`\n * ```\n * @example <caption>With end value (-2n+10)</caption>\n *\n * ```js\n *\n * const gen = nthCheck.generate([-2, 5]);\n *\n * gen() // 0\n * gen() // 2\n * gen() // 4\n * gen() // null\n * ```\n */\nexport function generate(parsed) {\n const a = parsed[0];\n // Subtract 1 from `b`, to convert from one- to zero-indexed.\n let b = parsed[1] - 1;\n let n = 0;\n // Make sure to always return an increasing sequence\n if (a < 0) {\n const aPos = -a;\n // Get `b mod a`\n const minValue = ((b % aPos) + aPos) % aPos;\n return () => {\n const value = minValue + aPos * n++;\n return value > b ? null : value;\n };\n }\n if (a === 0)\n return b < 0\n ? // There are no result — always return `null`\n () => null\n : // Return `b` exactly once\n () => (n++ === 0 ? b : null);\n if (b < 0) {\n b += a * Math.ceil(-b / a);\n }\n return () => a * n++ + b;\n}\n//# sourceMappingURL=compile.js.map",
95
+ "// Following http://www.w3.org/TR/css3-selectors/#nth-child-pseudo\n// Whitespace as per https://www.w3.org/TR/selectors-3/#lex is \" \\t\\r\\n\\f\"\nconst whitespace = new Set([9, 10, 12, 13, 32]);\nconst ZERO = \"0\".charCodeAt(0);\nconst NINE = \"9\".charCodeAt(0);\n/**\n * Parses an expression.\n * @param formula CSS nth-formula to parse.\n * @throws {Error} An `Error` if parsing fails.\n * @returns An array containing the integer step size and the integer offset of the nth rule.\n * @example nthCheck.parse(\"2n+3\"); // returns [2, 3]\n */\nexport function parse(formula) {\n formula = formula.trim().toLowerCase();\n switch (formula) {\n case \"even\": {\n return [2, 0];\n }\n case \"odd\": {\n return [2, 1];\n }\n }\n // Parse [ ['-'|'+']? INTEGER? {N} [ S* ['-'|'+'] S* INTEGER ]?\n let index = 0;\n let a = 0;\n let sign = readSign();\n let number = readNumber();\n if (index < formula.length && formula.charAt(index) === \"n\") {\n index++;\n a = sign * (number ?? 1);\n skipWhitespace();\n if (index < formula.length) {\n sign = readSign();\n skipWhitespace();\n number = readNumber();\n }\n else {\n sign = number = 0;\n }\n }\n // Throw if there is anything else\n if (number === null || index < formula.length) {\n throw new Error(`n-th rule couldn't be parsed ('${formula}')`);\n }\n return [a, sign * number];\n function readSign() {\n switch (formula.charAt(index)) {\n case \"-\": {\n index++;\n return -1;\n }\n case \"+\": {\n index++;\n break;\n }\n }\n return 1;\n }\n function readNumber() {\n const start = index;\n let value = 0;\n while (index < formula.length &&\n formula.charCodeAt(index) >= ZERO &&\n formula.charCodeAt(index) <= NINE) {\n value = value * 10 + (formula.charCodeAt(index) - ZERO);\n index++;\n }\n // Return `null` if we didn't read anything.\n return index === start ? null : value;\n }\n function skipWhitespace() {\n while (index < formula.length &&\n whitespace.has(formula.charCodeAt(index))) {\n index++;\n }\n }\n}\n//# sourceMappingURL=parse.js.map",
96
+ "import { compile, generate } from \"./compile.js\";\nimport { parse } from \"./parse.js\";\n/**\n * Parses and compiles a formula to a highly optimized function.\n * Combination of {@link parse} and {@link compile}.\n *\n * If the formula doesn't match any elements,\n * it returns [`boolbase`](https://github.com/fb55/boolbase)'s `falseFunc`.\n * Otherwise, a function accepting an _index_ is returned, which returns\n * whether or not the passed _index_ matches the formula.\n *\n * Note: The nth-rule starts counting at `1`, the returned function at `0`.\n * @param formula The formula to compile.\n * @example\n * const check = nthCheck(\"2n+3\");\n *\n * check(0); // `false`\n * check(1); // `false`\n * check(2); // `true`\n * check(3); // `false`\n * check(4); // `true`\n * check(5); // `false`\n * check(6); // `true`\n */\nexport default function nthCheck(formula) {\n return compile(parse(formula));\n}\n/**\n * Parses and compiles a formula to a generator that produces a sequence of indices.\n * Combination of {@link parse} and {@link generate}.\n * @param formula The formula to compile.\n * @returns A function that produces a sequence of indices.\n * @example <caption>Always increasing</caption>\n *\n * ```js\n * const gen = nthCheck.sequence('2n+3')\n *\n * gen() // `1`\n * gen() // `3`\n * gen() // `5`\n * gen() // `8`\n * gen() // `11`\n * ```\n * @example <caption>With end value</caption>\n *\n * ```js\n *\n * const gen = nthCheck.sequence('-2n+5');\n *\n * gen() // 0\n * gen() // 2\n * gen() // 4\n * gen() // null\n * ```\n */\nexport function sequence(formula) {\n return generate(parse(formula));\n}\nexport { compile, generate } from \"./compile.js\";\nexport { parse } from \"./parse.js\";\n//# sourceMappingURL=index.js.map",
97
+ "import { getElementParent } from \"./querying.js\";\n/**\n * Some selectors such as `:contains` and (non-relative) `:has` will only be\n * able to match elements if their parents match the selector (as they contain\n * a subset of the elements that the parent contains).\n *\n * This function wraps the given `matches` function in a function that caches\n * the results of the parent elements, so that the `matches` function only\n * needs to be called once for each subtree.\n * @param next Matcher to run after this matcher succeeds.\n * @param options Configuration object for cache behavior.\n * @param options.adapter Adapter implementation used for DOM access.\n * @param options.cacheResults Whether results should be memoized by input root.\n * @param matches Compiled matcher function to wrap with caching.\n */\nexport function cacheParentResults(next, { adapter, cacheResults }, matches) {\n if (cacheResults === false || typeof WeakMap === \"undefined\") {\n return (element) => next(element) && matches(element);\n }\n // Use a cache to avoid re-checking children of an element.\n // @ts-expect-error `Node` is not extending object\n const resultCache = new WeakMap();\n function addResultToCache(element) {\n const result = matches(element);\n resultCache.set(element, result);\n return result;\n }\n return function cachedMatcher(element) {\n if (!next(element)) {\n return false;\n }\n if (resultCache.has(element)) {\n return resultCache.get(element) ?? false;\n }\n // Check all of the element's parents.\n let node = element;\n do {\n const parent = getElementParent(node, adapter);\n if (parent === null) {\n return addResultToCache(element);\n }\n node = parent;\n } while (!resultCache.has(node));\n return resultCache.get(node) ? addResultToCache(element) : false;\n };\n}\n//# sourceMappingURL=cache.js.map",
98
+ "/**\n * Create a copy of options, omitting `context` and `rootFunc`.\n *\n * This is used when compiling nested selectors (e.g. inside `:is`, `:not`,\n * `:nth-child(… of S)`) so that the parent compilation state doesn't leak.\n */\nexport function copyOptions(options) {\n // Omit context and rootFunc so parent compilation state doesn't leak.\n const { context: _, rootFunc: __, ...copied } = options;\n return copied;\n}\n//# sourceMappingURL=options.js.map",
99
+ "import * as boolbase from \"boolbase\";\nimport { parse } from \"css-what\";\nimport getNCheck from \"nth-check\";\nimport { cacheParentResults } from \"../helpers/cache.js\";\nimport { copyOptions } from \"../helpers/options.js\";\nimport { getElementParent } from \"../helpers/querying.js\";\n/**\n * RFC 4647 extended filtering with pre-split subtags.\n * @param tag - Lowercased subtags of the element's language value.\n * @param range - Lowercased subtags of the language range to match against.\n */\nfunction extendedFilter(tag, range) {\n if (range[0] !== \"*\" && range[0] !== tag[0])\n return false;\n let tagIndex = 1;\n for (let rangeIndex = 1; rangeIndex < range.length; rangeIndex++) {\n if (range[rangeIndex] === \"*\")\n continue;\n // Skip non-singleton tag subtags until we find a match.\n while (tagIndex < tag.length && tag[tagIndex] !== range[rangeIndex]) {\n if (tag[tagIndex++].length <= 1)\n return false;\n }\n if (tagIndex >= tag.length)\n return false;\n tagIndex++;\n }\n return true;\n}\n/** @see {@link https://www.w3.org/TR/selectors-4/#the-nth-child-pseudo} */\nconst nthOfRegex = /^(.+?)\\s+of\\s+(.+)$/is;\nfunction compileNth(reverse, ofType) {\n return function nth(next, rule, options, context, compileToken) {\n const { adapter, equals } = options;\n const ofMatch = ofType ? null : rule.match(nthOfRegex);\n const nthCheck = getNCheck(ofMatch ? ofMatch[1].trim() : rule);\n if (nthCheck === boolbase.falseFunc)\n return boolbase.falseFunc;\n const ofSelector = ofMatch && compileToken\n ? compileToken(parse(ofMatch[2].trim()), copyOptions(options), context)\n : undefined;\n if (ofSelector === boolbase.falseFunc)\n return boolbase.falseFunc;\n if (nthCheck === boolbase.trueFunc && !ofSelector) {\n return (element) => getElementParent(element, adapter) !== null && next(element);\n }\n const shouldCount = ofSelector\n ? (_element, sibling) => ofSelector(sibling)\n : ofType\n ? (element, sibling) => adapter.getName(sibling) === adapter.getName(element)\n : boolbase.trueFunc;\n if (reverse) {\n return function nthLast(element) {\n if (ofSelector && !ofSelector(element))\n return false;\n const siblings = adapter.getSiblings(element);\n let pos = 0;\n for (let index = siblings.length - 1; index >= 0; index--) {\n const sibling = siblings[index];\n if (equals(element, sibling))\n break;\n if (adapter.isTag(sibling) && shouldCount(element, sibling))\n pos++;\n }\n return nthCheck(pos) && next(element);\n };\n }\n return function nth(element) {\n if (ofSelector && !ofSelector(element))\n return false;\n const siblings = adapter.getSiblings(element);\n let pos = 0;\n for (const sibling of siblings) {\n if (equals(element, sibling))\n break;\n if (adapter.isTag(sibling) && shouldCount(element, sibling))\n pos++;\n }\n return nthCheck(pos) && next(element);\n };\n };\n}\n/**\n * Pre-compiled pseudo filters.\n */\nexport const filters = {\n contains(next, text, options) {\n const { getText } = options.adapter;\n return cacheParentResults(next, options, (element) => getText(element).includes(text));\n },\n icontains(next, text, options) {\n const itext = text.toLowerCase();\n const { getText } = options.adapter;\n return cacheParentResults(next, options, (element) => getText(element).toLowerCase().includes(itext));\n },\n // Location specific methods\n \"nth-child\": compileNth(false, false),\n \"nth-last-child\": compileNth(true, false),\n \"nth-of-type\": compileNth(false, true),\n \"nth-last-of-type\": compileNth(true, true),\n // TODO determine the actual root element\n root(next, _rule, { adapter }) {\n return (element) => getElementParent(element, adapter) === null && next(element);\n },\n scope(next, rule, options, context) {\n const { equals } = options;\n if (!context || context.length === 0) {\n // Equivalent to :root\n return filters[\"root\"](next, rule, options);\n }\n if (context.length === 1) {\n // NOTE: can't be unpacked, as :has uses this for side-effects\n return (element) => equals(context[0], element) && next(element);\n }\n return (element) => context.includes(element) && next(element);\n },\n lang(next, code, { adapter }) {\n const ranges = code\n .split(\",\")\n .map((r) => r.trim())\n .filter((r) => r.length > 0)\n .map((r) => r\n .replace(/^['\"]|['\"]$/g, \"\")\n .toLowerCase()\n .split(\"-\"));\n return function lang(element) {\n let node = element;\n while (node != null) {\n const value = adapter.getAttributeValue(node, \"xml:lang\") ??\n adapter.getAttributeValue(node, \"lang\");\n if (value != null) {\n if (!value) {\n return ranges.some((r) => r[0] === \"\") && next(element);\n }\n const tag = value.toLowerCase().split(\"-\");\n return (ranges.some((r) => extendedFilter(tag, r)) &&\n next(element));\n }\n const parent = adapter.getParent(node);\n node =\n parent != null && adapter.isTag(parent)\n ? parent\n : null;\n }\n return ranges.some((r) => r[0] === \"\") && next(element);\n };\n },\n hover: dynamicStatePseudo(\"isHovered\"),\n visited: dynamicStatePseudo(\"isVisited\"),\n active: dynamicStatePseudo(\"isActive\"),\n};\n/**\n * Dynamic state pseudos. These depend on optional Adapter methods.\n * @param name The name of the adapter method to call.\n * @returns Pseudo for the `filters` object.\n */\nfunction dynamicStatePseudo(name) {\n return function dynamicPseudo(next, _rule, { adapter }) {\n const filterFunction = adapter[name];\n if (typeof filterFunction !== \"function\") {\n return boolbase.falseFunc;\n }\n return function active(element) {\n return filterFunction(element) && next(element);\n };\n };\n}\n//# sourceMappingURL=filters.js.map",
100
+ "/**\n * CSS limits the characters considered as whitespace to space, tab & line\n * feed. We add carriage returns as htmlparser2 doesn't normalize them to\n * line feeds.\n * @see {@link https://www.w3.org/TR/css-text-3/#white-space}\n */\nconst isDocumentWhiteSpace = /^[ \\t\\r\\n]*$/;\n// While filters are precompiled, pseudos get called when they are needed\n/** Runtime pseudo selector implementations. */\nexport const pseudos = {\n empty(element, { adapter }) {\n const children = adapter.getChildren(element);\n return (\n // First, make sure the tag does not have any element children.\n children.every((element) => !adapter.isTag(element)) &&\n // Then, check that the text content is only whitespace.\n children.every((element) => \n // FIXME: `getText` call is potentially expensive.\n isDocumentWhiteSpace.test(adapter.getText(element))));\n },\n \"first-child\"(element, { adapter, equals }) {\n if (adapter.prevElementSibling) {\n return adapter.prevElementSibling(element) == null;\n }\n const firstChild = adapter\n .getSiblings(element)\n .find((sibling) => adapter.isTag(sibling));\n return firstChild != null && equals(element, firstChild);\n },\n \"last-child\"(element, { adapter, equals }) {\n const siblings = adapter.getSiblings(element);\n for (let index = siblings.length - 1; index >= 0; index--) {\n if (equals(element, siblings[index])) {\n return true;\n }\n if (adapter.isTag(siblings[index])) {\n break;\n }\n }\n return false;\n },\n \"first-of-type\"(element, { adapter, equals }) {\n const siblings = adapter.getSiblings(element);\n const elementName = adapter.getName(element);\n for (const currentSibling of siblings) {\n if (equals(element, currentSibling)) {\n return true;\n }\n if (adapter.isTag(currentSibling) &&\n adapter.getName(currentSibling) === elementName) {\n break;\n }\n }\n return false;\n },\n \"last-of-type\"(element, { adapter, equals }) {\n const siblings = adapter.getSiblings(element);\n const elementName = adapter.getName(element);\n for (let index = siblings.length - 1; index >= 0; index--) {\n const currentSibling = siblings[index];\n if (equals(element, currentSibling)) {\n return true;\n }\n if (adapter.isTag(currentSibling) &&\n adapter.getName(currentSibling) === elementName) {\n break;\n }\n }\n return false;\n },\n \"only-of-type\"(element, { adapter, equals }) {\n const elementName = adapter.getName(element);\n return adapter\n .getSiblings(element)\n .every((sibling) => equals(element, sibling) ||\n !adapter.isTag(sibling) ||\n adapter.getName(sibling) !== elementName);\n },\n \"only-child\"(element, { adapter, equals }) {\n return adapter\n .getSiblings(element)\n .every((sibling) => equals(element, sibling) || !adapter.isTag(sibling));\n },\n};\n/**\n * Validate pseudo selector argument arity.\n * @param pseudoClassCondition Pseudo-function implementation to wrap.\n * @param name Name of the pseudo selector.\n * @param subselect Subselector passed to the pseudo-function.\n * @param argumentIndex Index of the argument parser to apply.\n */\nexport function verifyPseudoArguments(pseudoClassCondition, name, subselect, argumentIndex) {\n if (subselect === null) {\n if (pseudoClassCondition.length > argumentIndex) {\n throw new Error(`Pseudo-class :${name} requires an argument`);\n }\n }\n else if (pseudoClassCondition.length === argumentIndex) {\n throw new Error(`Pseudo-class :${name} doesn't have any arguments`);\n }\n}\n//# sourceMappingURL=pseudos.js.map",
101
+ "import { AttributeAction, isTraversal as isTraversalBase, SelectorType, } from \"css-what\";\n/**\n * Check whether a selector token performs traversal.\n * @param token Selector token(s) to compile.\n */\nexport function isTraversal(token) {\n return token.type === \"_flexibleDescendant\" || isTraversalBase(token);\n}\n/**\n * Sort the parts of the passed selector, as there is potential for\n * optimization (some types of selectors are faster than others).\n * @param array Selector to sort\n */\nexport function sortRules(array) {\n const ratings = array.map(getQuality);\n for (let index = 1; index < array.length; index++) {\n const procNew = ratings[index];\n if (procNew < 0) {\n continue;\n }\n // Use insertion sort to move the token to the correct position.\n for (let currentIndex = index; currentIndex > 0 && procNew < ratings[currentIndex - 1]; currentIndex--) {\n const token = array[currentIndex];\n array[currentIndex] = array[currentIndex - 1];\n array[currentIndex - 1] = token;\n ratings[currentIndex] = ratings[currentIndex - 1];\n ratings[currentIndex - 1] = procNew;\n }\n }\n}\nfunction getAttributeQuality(token) {\n switch (token.action) {\n case AttributeAction.Exists: {\n return 10;\n }\n case AttributeAction.Equals: {\n // Prefer ID selectors (eg. #ID)\n return token.name === \"id\" ? 9 : 8;\n }\n case AttributeAction.Not: {\n return 7;\n }\n case AttributeAction.Start: {\n return 6;\n }\n case AttributeAction.End: {\n return 6;\n }\n case AttributeAction.Any: {\n return 5;\n }\n case AttributeAction.Hyphen: {\n return 4;\n }\n case AttributeAction.Element: {\n return 3;\n }\n }\n}\n/**\n * Determine the quality of the passed token. The higher the number, the\n * faster the token is to execute.\n * @param token Token to get the quality of.\n * @returns The token's quality.\n */\nexport function getQuality(token) {\n switch (token.type) {\n case SelectorType.Universal: {\n return 50;\n }\n case SelectorType.Tag: {\n return 30;\n }\n case SelectorType.Attribute: {\n return Math.floor(getAttributeQuality(token) /\n // `ignoreCase` adds some overhead, half the result if applicable.\n (token.ignoreCase ? 2 : 1));\n }\n case SelectorType.Pseudo: {\n return token.data\n ? token.name === \"has\" ||\n token.name === \"contains\" ||\n token.name === \"icontains\"\n ? // Expensive in any case — run as late as possible.\n 0\n : Array.isArray(token.data)\n ? // Eg. `:is`, `:not`\n Math.max(\n // If we have traversals, try to avoid executing this selector\n 0, Math.min(...token.data.map((d) => Math.min(...d.map(getQuality)))))\n : 2\n : 3;\n }\n default: {\n return -1;\n }\n }\n}\n/**\n * Check whether a token or nested token includes `:scope`.\n * @param t Selector token under inspection.\n */\nexport function includesScopePseudo(t) {\n return (t.type === SelectorType.Pseudo &&\n (t.name === \"scope\" ||\n (Array.isArray(t.data) &&\n t.data.some((data) => data.some(includesScopePseudo)))));\n}\n//# sourceMappingURL=selectors.js.map",
102
+ "import * as boolbase from \"boolbase\";\nimport { cacheParentResults } from \"../helpers/cache.js\";\nimport { copyOptions } from \"../helpers/options.js\";\nimport { findOne, getNextSiblings } from \"../helpers/querying.js\";\nimport { includesScopePseudo, isTraversal } from \"../helpers/selectors.js\";\n/** Used as a placeholder for :has. Will be replaced with the actual element. */\nexport const PLACEHOLDER_ELEMENT = {};\n/**\n * Check if the selector has any properties that rely on the current element.\n * If not, we can cache the result of the selector.\n *\n * We can't cache selectors that start with a traversal (e.g. `>`, `+`, `~`),\n * or include a `:scope`.\n * @param selector - The selector to check.\n * @returns Whether the selector has any properties that rely on the current element.\n */\nfunction hasDependsOnCurrentElement(selector) {\n return selector.some((sel) => sel.length > 0 &&\n (isTraversal(sel[0]) || sel.some(includesScopePseudo)));\n}\nconst is = (next, token, options, context, compileToken) => {\n const compiledToken = compileToken(token, copyOptions(options), context);\n return compiledToken === boolbase.trueFunc\n ? next\n : compiledToken === boolbase.falseFunc\n ? boolbase.falseFunc\n : (element) => compiledToken(element) && next(element);\n};\n/*\n * :not, :has, :is, :matches and :where have to compile selectors\n * doing this in src/pseudos.ts would lead to circular dependencies,\n * so we add them here\n */\n/** Pseudo selectors that compile nested selectors. */\nexport const subselects = {\n is,\n /**\n * `:matches` and `:where` are aliases for `:is`.\n */\n matches: is,\n where: is,\n not(next, token, options, context, compileToken) {\n const compiledToken = compileToken(token, copyOptions(options), context);\n return compiledToken === boolbase.falseFunc\n ? next\n : compiledToken === boolbase.trueFunc\n ? boolbase.falseFunc\n : (element) => !compiledToken(element) && next(element);\n },\n has(next, subselect, options, _context, compileToken) {\n const { adapter } = options;\n const copiedOptions = copyOptions(options);\n copiedOptions.relativeSelector = true;\n const context = subselect.some((s) => s.some(isTraversal))\n ? // Used as a placeholder. Will be replaced with the actual element.\n [PLACEHOLDER_ELEMENT]\n : undefined;\n const skipCache = hasDependsOnCurrentElement(subselect);\n const compiled = compileToken(subselect, copiedOptions, context);\n if (compiled === boolbase.falseFunc) {\n return boolbase.falseFunc;\n }\n // If `compiled` is `trueFunc`, we can skip this.\n if (context && compiled !== boolbase.trueFunc) {\n return skipCache\n ? (element) => {\n if (!next(element)) {\n return false;\n }\n context[0] = element;\n const childs = adapter.getChildren(element);\n return (findOne(compiled, compiled.shouldTestNextSiblings\n ? [\n ...childs,\n ...getNextSiblings(element, adapter),\n ]\n : childs, options) !== null);\n }\n : cacheParentResults(next, options, (element) => {\n context[0] = element;\n return (findOne(compiled, adapter.getChildren(element), options) !== null);\n });\n }\n const hasOne = (element) => findOne(compiled, adapter.getChildren(element), options) !== null;\n return skipCache\n ? (element) => next(element) && hasOne(element)\n : cacheParentResults(next, options, hasOne);\n },\n};\n//# sourceMappingURL=subselects.js.map",
103
+ "/*\n * Pseudo selectors\n *\n * Pseudo selectors are available in three forms:\n *\n * 1. Filters are called when the selector is compiled and return a function\n * that has to return either false, or the results of `next()`.\n * 2. Pseudos are called on execution. They have to return a boolean.\n * 3. Subselects work like filters, but have an embedded selector that will be run separately.\n *\n * Filters are great if you want to do some pre-processing, or change the call order\n * of `next()` and your code.\n * Pseudos should be used to implement simple checks.\n */\nimport { parse } from \"css-what\";\nimport { aliases } from \"./aliases.js\";\nimport { filters } from \"./filters.js\";\nimport { pseudos, verifyPseudoArguments } from \"./pseudos.js\";\nimport { subselects } from \"./subselects.js\";\n/**\n * Compile a pseudo selector into an executable query function.\n * @param next Matcher to run after this matcher succeeds.\n * @param selector Selector used to match elements.\n * @param options Options that control this operation.\n * @param context Context nodes used to scope selector matching.\n * @param compileToken Function used to compile nested selector tokens.\n */\nexport function compilePseudoSelector(next, selector, options, context, compileToken) {\n const { name, data } = selector;\n if (Array.isArray(data)) {\n if (!(name in subselects)) {\n throw new Error(`Unknown pseudo-class :${name}(${data})`);\n }\n return subselects[name](next, data, options, context, compileToken);\n }\n const userPseudo = options.pseudos?.[name];\n const stringPseudo = typeof userPseudo === \"string\" ? userPseudo : aliases[name];\n if (typeof stringPseudo === \"string\") {\n if (data != null) {\n throw new Error(`Pseudo ${name} doesn't have any arguments`);\n }\n // The alias has to be parsed here, to make sure options are respected.\n const alias = parse(stringPseudo);\n return subselects[\"is\"](next, alias, options, context, compileToken);\n }\n if (typeof userPseudo === \"function\") {\n verifyPseudoArguments(userPseudo, name, data, 1);\n return (element) => userPseudo(element, data) && next(element);\n }\n if (name in filters) {\n return filters[name](next, data, options, context, compileToken);\n }\n if (name in pseudos) {\n const pseudo = pseudos[name];\n verifyPseudoArguments(pseudo, name, data, 2);\n return (element) => pseudo(element, options, data) && next(element);\n }\n throw new Error(`Unknown pseudo-class :${name}`);\n}\nexport { aliases } from \"./aliases.js\";\nexport { filters } from \"./filters.js\";\nexport { pseudos } from \"./pseudos.js\";\n//# sourceMappingURL=index.js.map",
104
+ "import { SelectorType } from \"css-what\";\nimport { attributeRules } from \"./attributes.js\";\nimport { getElementParent } from \"./helpers/querying.js\";\nimport { compilePseudoSelector } from \"./pseudo-selectors/index.js\";\n/*\n * All available rules\n */\n/**\n * Compile a single selector token.\n * @param next Matcher to run after this matcher succeeds.\n * @param selector Selector used to match elements.\n * @param options Options that control this operation.\n * @param context Context nodes used to scope selector matching.\n * @param compileToken Function used to compile nested selector tokens.\n * @param hasExpensiveSubselector Whether the selector contains expensive subselectors.\n */\nexport function compileGeneralSelector(next, selector, options, context, compileToken, hasExpensiveSubselector) {\n const { adapter, equals, cacheResults } = options;\n switch (selector.type) {\n case SelectorType.PseudoElement: {\n throw new Error(\"Pseudo-elements are not supported by css-select\");\n }\n case SelectorType.ColumnCombinator: {\n throw new Error(\"Column combinators are not yet supported by css-select\");\n }\n case SelectorType.Attribute: {\n if (selector.namespace != null) {\n throw new Error(\"Namespaced attributes are not yet supported by css-select\");\n }\n if (!options.xmlMode || options.lowerCaseAttributeNames) {\n selector.name = selector.name.toLowerCase();\n }\n return attributeRules[selector.action](next, selector, options);\n }\n case SelectorType.Pseudo: {\n return compilePseudoSelector(next, selector, options, context, compileToken);\n }\n // Tags\n case SelectorType.Tag: {\n if (selector.namespace != null) {\n throw new Error(\"Namespaced tag names are not yet supported by css-select\");\n }\n let { name } = selector;\n if (!options.xmlMode || options.lowerCaseTags) {\n name = name.toLowerCase();\n }\n return function tag(element) {\n return adapter.getName(element) === name && next(element);\n };\n }\n // Traversal\n case SelectorType.Descendant: {\n if (!hasExpensiveSubselector ||\n cacheResults === false ||\n typeof WeakMap === \"undefined\") {\n return function descendant(element) {\n let current = element;\n while ((current = getElementParent(current, adapter))) {\n if (next(current)) {\n return true;\n }\n }\n return false;\n };\n }\n const resultCache = new WeakMap();\n return function cachedDescendant(element) {\n let current = element;\n let result;\n while ((current = getElementParent(current, adapter))) {\n const cached = resultCache.get(current);\n if (cached === undefined) {\n result ??= { matches: false };\n result.matches = next(current);\n resultCache.set(current, result);\n if (result.matches) {\n return true;\n }\n }\n else {\n if (result) {\n result.matches = cached.matches;\n }\n return cached.matches;\n }\n }\n return false;\n };\n }\n case \"_flexibleDescendant\": {\n // Include element itself, only used while querying an array\n return function flexibleDescendant(element) {\n let current = element;\n do {\n if (next(current)) {\n return true;\n }\n current = getElementParent(current, adapter);\n } while (current);\n return false;\n };\n }\n case SelectorType.Parent: {\n return function parent(element) {\n return adapter\n .getChildren(element)\n .some((element) => adapter.isTag(element) && next(element));\n };\n }\n case SelectorType.Child: {\n return function child(element) {\n const parent = getElementParent(element, adapter);\n return parent !== null && next(parent);\n };\n }\n case SelectorType.Sibling: {\n return function sibling(element) {\n const siblings = adapter.getSiblings(element);\n for (const currentSibling of siblings) {\n if (equals(element, currentSibling)) {\n break;\n }\n if (adapter.isTag(currentSibling) && next(currentSibling)) {\n return true;\n }\n }\n return false;\n };\n }\n case SelectorType.Adjacent: {\n if (adapter.prevElementSibling) {\n return function adjacent(element) {\n // biome-ignore lint/style/noNonNullAssertion: checked by if statement\n const previous = adapter.prevElementSibling(element);\n return previous != null && next(previous);\n };\n }\n return function adjacent(element) {\n const siblings = adapter.getSiblings(element);\n let lastElement;\n for (const currentSibling of siblings) {\n if (equals(element, currentSibling)) {\n break;\n }\n if (adapter.isTag(currentSibling)) {\n lastElement = currentSibling;\n }\n }\n return !!lastElement && next(lastElement);\n };\n }\n case SelectorType.Universal: {\n if (selector.namespace != null && selector.namespace !== \"*\") {\n throw new Error(\"Namespaced universal selectors are not yet supported by css-select\");\n }\n return next;\n }\n }\n}\n//# sourceMappingURL=general.js.map",
105
+ "import * as boolbase from \"boolbase\";\nimport { SelectorType } from \"css-what\";\nimport { compileGeneralSelector } from \"./general.js\";\nimport { getElementParent } from \"./helpers/querying.js\";\nimport { getQuality, includesScopePseudo, isTraversal, sortRules, } from \"./helpers/selectors.js\";\nimport { PLACEHOLDER_ELEMENT } from \"./pseudo-selectors/subselects.js\";\nconst DESCENDANT_TOKEN = { type: SelectorType.Descendant };\nconst FLEXIBLE_DESCENDANT_TOKEN = {\n type: \"_flexibleDescendant\",\n};\nconst SCOPE_TOKEN = {\n type: SelectorType.Pseudo,\n name: \"scope\",\n data: null,\n};\n/*\n * CSS 4 Spec (Draft): 3.4.1. Absolutizing a Relative Selector\n * http://www.w3.org/TR/selectors4/#absolutizing\n */\nfunction absolutize(token, { adapter }, context) {\n // TODO Use better check if the context is a document\n const hasContext = !!context?.every((element) => element === PLACEHOLDER_ELEMENT ||\n (adapter.isTag(element) &&\n getElementParent(element, adapter) !== null));\n for (const t of token) {\n if (t.length > 0 &&\n isTraversal(t[0]) &&\n t[0].type !== SelectorType.Descendant) {\n // Don't continue in else branch\n }\n else if (hasContext && !t.some(includesScopePseudo)) {\n t.unshift(DESCENDANT_TOKEN);\n }\n else {\n continue;\n }\n t.unshift(SCOPE_TOKEN);\n }\n}\n/**\n * Compile a parsed selector token into an executable query function.\n * @param token Selector token(s) to compile.\n * @param options Options that control this operation.\n * @param compilationContext Compilation context for relative selector handling.\n */\nexport function compileToken(token, options, compilationContext) {\n for (const rules of token) {\n sortRules(rules);\n }\n const { context = compilationContext, rootFunc: rootFunction = boolbase.trueFunc, } = options;\n const isArrayContext = Array.isArray(context);\n const finalContext = context && (Array.isArray(context) ? context : [context]);\n // Check if the selector is relative\n if (options.relativeSelector !== false) {\n absolutize(token, options, finalContext);\n }\n else if (token.some((t) => t.length > 0 && isTraversal(t[0]))) {\n throw new Error(\"Relative selectors are not allowed when the `relativeSelector` option is disabled\");\n }\n let shouldTestNextSiblings = false;\n let query = boolbase.falseFunc;\n combineLoop: for (const rules of token) {\n if (rules.length >= 2) {\n const [first, second] = rules;\n if (first.type !== SelectorType.Pseudo || first.name !== \"scope\") {\n // Ignore\n }\n else if (isArrayContext &&\n second.type === SelectorType.Descendant) {\n rules[1] = FLEXIBLE_DESCENDANT_TOKEN;\n }\n else if (second.type === SelectorType.Adjacent ||\n second.type === SelectorType.Sibling) {\n shouldTestNextSiblings = true;\n }\n }\n let next = rootFunction;\n let hasExpensiveSubselector = false;\n for (const rule of rules) {\n next = compileGeneralSelector(next, rule, options, finalContext, compileToken, hasExpensiveSubselector);\n const quality = getQuality(rule);\n if (quality === 0) {\n hasExpensiveSubselector = true;\n }\n // If the sub-selector won't match any elements, skip it.\n if (next === boolbase.falseFunc) {\n continue combineLoop;\n }\n }\n // If we have a function that always returns true, we can stop here.\n if (next === rootFunction) {\n return rootFunction;\n }\n query = query === boolbase.falseFunc ? next : or(query, next);\n }\n query.shouldTestNextSiblings = shouldTestNextSiblings;\n return query;\n}\nfunction or(a, b) {\n return (element) => a(element) || b(element);\n}\n//# sourceMappingURL=compile.js.map",
106
+ "import * as boolbase from \"boolbase\";\nimport { parse } from \"css-what\";\nimport { isTag } from \"domhandler\";\nimport * as DomUtils from \"domutils\";\nimport { compileToken } from \"./compile.js\";\nimport { findAll, findOne, getNextSiblings } from \"./helpers/querying.js\";\nconst defaultEquals = (a, b) => a === b;\nconst defaultOptions = {\n adapter: { ...DomUtils, isTag },\n equals: defaultEquals,\n};\nfunction convertOptionFormats(options) {\n /*\n * We force one format of options to the other one.\n */\n // @ts-expect-error Default options may have incompatible `Node` / `ElementNode`.\n const finalOptions = options ?? defaultOptions;\n // @ts-expect-error Same as above.\n finalOptions.adapter ??= defaultOptions.adapter;\n // @ts-expect-error `equals` does not exist on `Options`\n finalOptions.equals ??= finalOptions.adapter?.equals ?? defaultEquals;\n return finalOptions;\n}\n/**\n * Compiles a selector to an executable function.\n *\n * The returned function checks if each passed node is an element. Use\n * `_compileUnsafe` to skip this check.\n * @param selector Selector to compile.\n * @param options Compilation options.\n * @param context Optional context for the selector.\n */\nexport function compile(selector, options, context) {\n const convertedOptions = convertOptionFormats(options);\n const next = _compileUnsafe(selector, convertedOptions, context);\n return next === boolbase.falseFunc\n ? boolbase.falseFunc\n : (element) => convertedOptions.adapter.isTag(element) && next(element);\n}\n/**\n * Like `compile`, but does not add a check if elements are tags.\n * @param selector Selector used to match elements.\n * @param options Options that control this operation.\n * @param context Context nodes used to scope selector matching.\n */\nexport function _compileUnsafe(selector, options, context) {\n return compileToken(typeof selector === \"string\" ? parse(selector) : selector, convertOptionFormats(options), context);\n}\nfunction getSelectorFunction(searchFunction) {\n return function select(query, elements, options) {\n const convertedOptions = convertOptionFormats(options);\n if (typeof query !== \"function\") {\n query = _compileUnsafe(query, convertedOptions, elements);\n }\n const filteredElements = prepareContext(elements, convertedOptions.adapter, query.shouldTestNextSiblings);\n return searchFunction(query, filteredElements, convertedOptions);\n };\n}\n/**\n * Normalize a query context and optionally include next siblings.\n * @param elements Elements to test against sibling-dependent selectors.\n * @param adapter Adapter implementation used for DOM operations.\n * @param shouldTestNextSiblings Whether sibling combinators should include following siblings.\n */\nexport function prepareContext(elements, adapter, shouldTestNextSiblings = false) {\n /*\n * Add siblings if the query requires them.\n * See https://github.com/fb55/css-select/pull/43#issuecomment-225414692\n */\n if (shouldTestNextSiblings) {\n elements = appendNextSiblings(elements, adapter);\n }\n return Array.isArray(elements)\n ? adapter.removeSubsets(elements)\n : adapter.getChildren(elements);\n}\nfunction appendNextSiblings(element, adapter) {\n // Order matters because jQuery seems to check the children before the siblings\n const elements = Array.isArray(element) ? [...element] : [element];\n const elementsLength = elements.length;\n for (let index = 0; index < elementsLength; index++) {\n const nextSiblings = getNextSiblings(elements[index], adapter);\n elements.push(...nextSiblings);\n }\n return elements;\n}\n/**\n * @template Node The generic Node type for the DOM adapter being used.\n * @template ElementNode The Node type for elements for the DOM adapter being used.\n * @param elems Elements to query. If it is an element, its children will be queried.\n * @param query can be either a CSS selector string or a compiled query function.\n * @param [options] options for querying the document.\n * @see compile for supported selector queries.\n * @returns All matching elements.\n */\nexport const selectAll = getSelectorFunction((query, elements, options) => query === boolbase.falseFunc || !elements || elements.length === 0\n ? []\n : findAll(query, elements, options));\n/**\n * @template Node The generic Node type for the DOM adapter being used.\n * @template ElementNode The Node type for elements for the DOM adapter being used.\n * @param elems Elements to query. If it is an element, its children will be queried.\n * @param query can be either a CSS selector string or a compiled query function.\n * @param [options] options for querying the document.\n * @see compile for supported selector queries.\n * @returns the first match, or null if there was no match.\n */\nexport const selectOne = getSelectorFunction((query, elements, options) => query === boolbase.falseFunc || !elements || elements.length === 0\n ? null\n : findOne(query, elements, options));\n/**\n * Tests whether or not an element is matched by query.\n * @template Node The generic Node type for the DOM adapter being used.\n * @template ElementNode The Node type for elements for the DOM adapter being used.\n * @param element The element to test if it matches the query.\n * @param query can be either a CSS selector string or a compiled query function.\n * @param [options] options for querying the document.\n * @see compile for supported selector queries.\n * @returns Whether the element matches the query.\n */\nexport function is(element, query, options) {\n return (typeof query === \"function\" ? query : compile(query, options))(element);\n}\n/**\n * Alias for selectAll(query, elems, options).\n * @see [compile] for supported selector queries.\n */\nexport default selectAll;\n//# sourceMappingURL=index.js.map",
107
+ "import * as CSSselect from 'css-select';\n\nimport {ELEMENT_NODE, TEXT_NODE} from './constants.js';\nimport {ignoreCase} from './utils.js';\n\nconst {isArray} = Array;\n\n/* c8 ignore start */\nconst isTag = ({nodeType}) => nodeType === ELEMENT_NODE;\n\nconst existsOne = (test, elements) => elements.some(\n element => isTag(element) && (\n test(element) ||\n existsOne(test, getChildren(element))\n )\n);\n\nconst getAttributeValue = (element, name) => name === 'class' ?\n element.classList.value : element.getAttribute(name);\n\nconst getChildren = ({childNodes}) => childNodes;\n\nconst getName = (element) => {\n const {localName} = element;\n return ignoreCase(element) ? localName.toLowerCase() : localName;\n};\n\nconst getParent = ({parentNode}) => parentNode;\n\nconst getSiblings = element => {\n const {parentNode} = element;\n return parentNode ? getChildren(parentNode) : element;\n};\n\nconst getText = node => {\n if (isArray(node))\n return node.map(getText).join('');\n if (isTag(node))\n return getText(getChildren(node));\n if (node.nodeType === TEXT_NODE)\n return node.data;\n return '';\n};\n\nconst hasAttrib = (element, name) => element.hasAttribute(name);\n\nconst removeSubsets = nodes => {\n let {length} = nodes;\n while (length--) {\n const node = nodes[length];\n if (length && -1 < nodes.lastIndexOf(node, length - 1)) {\n nodes.splice(length, 1);\n continue;\n }\n for (let {parentNode} = node; parentNode; parentNode = parentNode.parentNode) {\n if (nodes.includes(parentNode)) {\n nodes.splice(length, 1);\n break;\n }\n }\n }\n return nodes;\n};\n\nconst findAll = (test, nodes) => {\n const matches = [];\n for (const node of nodes) {\n if (isTag(node)) {\n if (test(node))\n matches.push(node);\n matches.push(...findAll(test, getChildren(node)));\n }\n }\n return matches;\n};\n\nconst findOne = (test, nodes) => {\n for (let node of nodes)\n if (test(node) || (node = findOne(test, getChildren(node))))\n return node;\n return null;\n};\n/* c8 ignore stop */\n\nconst adapter = {\n isTag,\n existsOne,\n getAttributeValue,\n getChildren,\n getName,\n getParent,\n getSiblings,\n getText,\n hasAttrib,\n removeSubsets,\n findAll,\n findOne\n};\n\nexport const prepareMatch = (element, selectors) => CSSselect.compile(\n selectors,\n {\n context: selectors.includes(':scope') ? element : void 0,\n xmlMode: !ignoreCase(element),\n adapter\n }\n);\n\nexport const matches = (element, selectors) => CSSselect.is(\n element,\n selectors,\n {\n strict: true,\n context: selectors.includes(':scope') ? element : void 0,\n xmlMode: !ignoreCase(element),\n adapter\n }\n);\n",
108
+ "import {TEXT_NODE} from '../shared/constants.js';\nimport {VALUE} from '../shared/symbols.js';\nimport {escape} from '../shared/text-escaper.js';\n\nimport {CharacterData} from './character-data.js';\n\n/**\n * @implements globalThis.Text\n */\nexport class Text extends CharacterData {\n constructor(ownerDocument, data = '') {\n super(ownerDocument, '#text', TEXT_NODE, data);\n }\n\n get wholeText() {\n const text = [];\n let {previousSibling, nextSibling} = this;\n while (previousSibling) {\n if (previousSibling.nodeType === TEXT_NODE)\n text.unshift(previousSibling[VALUE]);\n else\n break;\n previousSibling = previousSibling.previousSibling;\n }\n text.push(this[VALUE]);\n while (nextSibling) {\n if (nextSibling.nodeType === TEXT_NODE)\n text.push(nextSibling[VALUE]);\n else\n break;\n nextSibling = nextSibling.nextSibling;\n }\n return text.join('');\n }\n\n cloneNode() {\n const {ownerDocument, [VALUE]: data} = this;\n return new Text(ownerDocument, data);\n }\n\n toString() { return escape(this[VALUE]); }\n}\n",
109
+ "// https://dom.spec.whatwg.org/#interface-parentnode\n// Document, DocumentFragment, Element\n\nimport {\n ATTRIBUTE_NODE,\n DOCUMENT_FRAGMENT_NODE,\n ELEMENT_NODE,\n TEXT_NODE,\n NODE_END,\n CDATA_SECTION_NODE,\n COMMENT_NODE\n} from '../shared/constants.js';\n\nimport {PRIVATE, END, NEXT, PREV, START, VALUE} from '../shared/symbols.js';\n\nimport {prepareMatch} from '../shared/matches.js';\nimport {previousSibling, nextSibling} from '../shared/node.js';\nimport {getEnd, knownAdjacent, knownBoundaries, knownSegment, knownSiblings, localCase} from '../shared/utils.js';\n\nimport {Node} from '../interface/node.js';\nimport {Text} from '../interface/text.js';\nimport {NodeList} from '../interface/node-list.js';\n\nimport {moCallback} from '../interface/mutation-observer.js';\nimport {connectedCallback} from '../interface/custom-element-registry.js';\n\nimport {nextElementSibling} from './non-document-type-child-node.js';\n\nconst isNode = node => node instanceof Node;\n\nconst insert = (parentNode, child, nodes) => {\n const {ownerDocument} = parentNode;\n for (const node of nodes)\n parentNode.insertBefore(\n isNode(node) ? node : new Text(ownerDocument, node),\n child\n );\n};\n\n/** @typedef { import('../interface/element.js').Element & {\n [typeof NEXT]: NodeStruct,\n [typeof PREV]: NodeStruct,\n [typeof START]: NodeStruct,\n nodeType: typeof ATTRIBUTE_NODE | typeof DOCUMENT_FRAGMENT_NODE | typeof ELEMENT_NODE | typeof TEXT_NODE | typeof NODE_END | typeof COMMENT_NODE | typeof CDATA_SECTION_NODE,\n ownerDocument: Document,\n parentNode: ParentNode,\n}} NodeStruct */\n\nexport class ParentNode extends Node {\n constructor(ownerDocument, localName, nodeType) {\n super(ownerDocument, localName, nodeType);\n this[PRIVATE] = null;\n /** @type {NodeStruct} */\n this[NEXT] = this[END] = {\n [NEXT]: null,\n [PREV]: this,\n [START]: this,\n nodeType: NODE_END,\n ownerDocument: this.ownerDocument,\n parentNode: null\n };\n }\n\n get childNodes() {\n const childNodes = new NodeList;\n let {firstChild} = this;\n while (firstChild) {\n childNodes.push(firstChild);\n firstChild = nextSibling(firstChild);\n }\n return childNodes;\n }\n\n get children() {\n const children = new NodeList;\n let {firstElementChild} = this;\n while (firstElementChild) {\n children.push(firstElementChild);\n firstElementChild = nextElementSibling(firstElementChild);\n }\n return children;\n }\n\n /**\n * @returns {NodeStruct | null}\n */\n get firstChild() {\n let {[NEXT]: next, [END]: end} = this;\n while (next.nodeType === ATTRIBUTE_NODE)\n next = next[NEXT];\n return next === end ? null : next;\n }\n\n /**\n * @returns {NodeStruct | null}\n */\n get firstElementChild() {\n let {firstChild} = this;\n while (firstChild) {\n if (firstChild.nodeType === ELEMENT_NODE)\n return firstChild;\n firstChild = nextSibling(firstChild);\n }\n return null;\n }\n\n get lastChild() {\n const prev = this[END][PREV];\n switch (prev.nodeType) {\n case NODE_END:\n return prev[START];\n case ATTRIBUTE_NODE:\n return null;\n }\n return prev === this ? null : prev;\n }\n\n get lastElementChild() {\n let {lastChild} = this;\n while (lastChild) {\n if (lastChild.nodeType === ELEMENT_NODE)\n return lastChild;\n lastChild = previousSibling(lastChild);\n }\n return null;\n }\n\n get childElementCount() {\n return this.children.length;\n }\n\n prepend(...nodes) {\n insert(this, this.firstChild, nodes);\n }\n\n append(...nodes) {\n insert(this, this[END], nodes);\n }\n\n replaceChildren(...nodes) {\n let {[NEXT]: next, [END]: end} = this;\n while (next !== end && next.nodeType === ATTRIBUTE_NODE)\n next = next[NEXT];\n while (next !== end) {\n const after = getEnd(next)[NEXT];\n next.remove();\n next = after;\n }\n if (nodes.length)\n insert(this, end, nodes);\n }\n\n getElementsByClassName(className) {\n const elements = new NodeList;\n let {[NEXT]: next, [END]: end} = this;\n while (next !== end) {\n if (\n next.nodeType === ELEMENT_NODE &&\n next.hasAttribute('class') &&\n next.classList.has(className)\n )\n elements.push(next);\n next = next[NEXT];\n }\n return elements;\n }\n\n getElementsByTagName(tagName) {\n const elements = new NodeList;\n let {[NEXT]: next, [END]: end} = this;\n while (next !== end) {\n if (next.nodeType === ELEMENT_NODE && (\n next.localName === tagName ||\n localCase(next) === tagName\n ))\n elements.push(next);\n next = next[NEXT];\n }\n return elements;\n }\n\n querySelector(selectors) {\n const matches = prepareMatch(this, selectors);\n let {[NEXT]: next, [END]: end} = this;\n while (next !== end) {\n if (next.nodeType === ELEMENT_NODE && matches(next))\n return next;\n next = next.nodeType === ELEMENT_NODE && next.localName === 'template' ? next[END] : next[NEXT];\n }\n return null;\n }\n\n querySelectorAll(selectors) {\n const matches = prepareMatch(this, selectors);\n const elements = new NodeList;\n let {[NEXT]: next, [END]: end} = this;\n while (next !== end) {\n if (next.nodeType === ELEMENT_NODE && matches(next))\n elements.push(next);\n next = next.nodeType === ELEMENT_NODE && next.localName === 'template' ? next[END] : next[NEXT];\n }\n return elements;\n }\n\n appendChild(node) {\n return this.insertBefore(node, this[END]);\n }\n\n contains(node) {\n let parentNode = node;\n while (parentNode && parentNode !== this)\n parentNode = parentNode.parentNode;\n return parentNode === this;\n }\n\n insertBefore(node, before = null) {\n if (node === before)\n return node;\n if (node === this)\n throw new Error('unable to append a node to itself');\n const next = before || this[END];\n switch (node.nodeType) {\n case ELEMENT_NODE:\n node.remove();\n node.parentNode = this;\n knownBoundaries(next[PREV], node, next);\n moCallback(node, null);\n connectedCallback(node);\n break;\n case DOCUMENT_FRAGMENT_NODE: {\n let {[PRIVATE]: parentNode, firstChild, lastChild} = node;\n if (firstChild) {\n knownSegment(next[PREV], firstChild, lastChild, next);\n knownAdjacent(node, node[END]);\n if (parentNode)\n parentNode.replaceChildren();\n do {\n firstChild.parentNode = this;\n moCallback(firstChild, null);\n if (firstChild.nodeType === ELEMENT_NODE)\n connectedCallback(firstChild);\n } while (\n firstChild !== lastChild &&\n (firstChild = nextSibling(firstChild))\n );\n }\n break;\n }\n case TEXT_NODE:\n case COMMENT_NODE:\n case CDATA_SECTION_NODE:\n node.remove();\n /* eslint no-fallthrough:0 */\n // this covers DOCUMENT_TYPE_NODE too\n default:\n node.parentNode = this;\n knownSiblings(next[PREV], node, next);\n moCallback(node, null);\n break;\n }\n return node;\n }\n\n normalize() {\n let {[NEXT]: next, [END]: end} = this;\n while (next !== end) {\n const {[NEXT]: $next, [PREV]: $prev, nodeType} = next;\n if (nodeType === TEXT_NODE) {\n if (!next[VALUE])\n next.remove();\n else if ($prev && $prev.nodeType === TEXT_NODE) {\n $prev.textContent += next.textContent;\n next.remove();\n }\n }\n next = $next;\n }\n }\n\n removeChild(node) {\n if (node.parentNode !== this)\n throw new Error('node is not a child');\n node.remove();\n return node;\n }\n\n replaceChild(node, replaced) {\n const next = getEnd(replaced)[NEXT];\n replaced.remove();\n this.insertBefore(node, next);\n return replaced;\n }\n}\n",
110
+ "// https://dom.spec.whatwg.org/#interface-nonelementparentnode\n// Document, DocumentFragment\n\nimport {ELEMENT_NODE} from '../shared/constants.js';\nimport {END, NEXT} from '../shared/symbols.js';\nimport {nonElementAsJSON} from '../shared/jsdon.js';\n\nimport {ParentNode} from './parent-node.js';\n\nexport class NonElementParentNode extends ParentNode {\n getElementById(id) {\n let {[NEXT]: next, [END]: end} = this;\n while (next !== end) {\n if (next.nodeType === ELEMENT_NODE && next.id === id)\n return next;\n next = next[NEXT];\n }\n return null;\n }\n\n cloneNode(deep) {\n const {ownerDocument, constructor} = this;\n const nonEPN = new constructor(ownerDocument);\n if (deep) {\n const {[END]: end} = nonEPN;\n for (const node of this.childNodes)\n nonEPN.insertBefore(node.cloneNode(deep), end);\n }\n return nonEPN; \n }\n\n toString() {\n const {childNodes, localName} = this;\n return `<${localName}>${childNodes.join('')}</${localName}>`;\n }\n\n toJSON() {\n const json = [];\n nonElementAsJSON(this, json);\n return json;\n }\n}\n",
111
+ "import {DOCUMENT_FRAGMENT_NODE} from '../shared/constants.js';\nimport {NonElementParentNode} from '../mixin/non-element-parent-node.js';\n\n/**\n * @implements globalThis.DocumentFragment\n */\nexport class DocumentFragment extends NonElementParentNode {\n constructor(ownerDocument) {\n super(ownerDocument, '#document-fragment', DOCUMENT_FRAGMENT_NODE);\n }\n}\n",
112
+ "import {DOCUMENT_TYPE_NODE} from '../shared/constants.js';\nimport {documentTypeAsJSON} from '../shared/jsdon.js';\n\nimport {Node} from './node.js';\n\n/**\n * @implements globalThis.DocumentType\n */\nexport class DocumentType extends Node {\n constructor(ownerDocument, name, publicId = '', systemId = '') {\n super(ownerDocument, '#document-type', DOCUMENT_TYPE_NODE);\n this.name = name;\n this.publicId = publicId;\n this.systemId = systemId;\n }\n\n cloneNode() {\n const {ownerDocument, name, publicId, systemId} = this;\n return new DocumentType(ownerDocument, name, publicId, systemId);\n }\n\n toString() {\n const {name, publicId, systemId} = this;\n const hasPublic = 0 < publicId.length;\n const str = [name];\n if (hasPublic)\n str.push('PUBLIC', `\"${publicId}\"`);\n if (systemId.length) {\n if (!hasPublic)\n str.push('SYSTEM');\n str.push(`\"${systemId}\"`);\n }\n return `<!DOCTYPE ${str.join(' ')}>`;\n }\n\n toJSON() {\n const json = [];\n documentTypeAsJSON(this, json);\n return json;\n }\n}\n",
113
+ "import {ELEMENT_NODE, DOCUMENT_FRAGMENT_NODE} from '../shared/constants.js';\nimport {CUSTOM_ELEMENTS} from '../shared/symbols.js';\nimport {parseFromString} from '../shared/parse-from-string.js';\nimport {ignoreCase} from '../shared/utils.js';\n\n\n/**\n * @param {Node} node\n * @returns {String}\n */\nexport const getInnerHtml = node => node.childNodes.join('');\n\n/**\n * @param {Node} node\n * @param {String} html\n */\nexport const setInnerHtml = (node, html) => {\n const {ownerDocument} = node;\n const {constructor} = ownerDocument;\n const document = new constructor;\n document[CUSTOM_ELEMENTS] = ownerDocument[CUSTOM_ELEMENTS];\n const {childNodes} = parseFromString(document, ignoreCase(node), html);\n\n node.replaceChildren(...childNodes.map(setOwnerDocument, ownerDocument));\n};\n\nfunction setOwnerDocument(node) {\n node.ownerDocument = this;\n switch (node.nodeType) {\n case ELEMENT_NODE:\n case DOCUMENT_FRAGMENT_NODE:\n node.childNodes.forEach(setOwnerDocument, this);\n break;\n }\n return node;\n}\n",
114
+ "export default camel => camel.replace(/(([A-Z0-9])([A-Z0-9][a-z]))|(([a-z0-9]+)([A-Z]))/g, '$2$5-$3$6')\n .toLowerCase();\n",
115
+ "import uhyphen from 'uhyphen';\nimport {setPrototypeOf} from '../shared/object.js';\n\nconst refs = new WeakMap;\n\nconst key = name => `data-${uhyphen(name)}`;\nconst prop = name => name.slice(5).replace(/-([a-z])/g, (_, $1) => $1.toUpperCase());\n\nconst handler = {\n get(dataset, name) {\n if (name in dataset)\n return refs.get(dataset).getAttribute(key(name));\n },\n\n set(dataset, name, value) {\n dataset[name] = value;\n refs.get(dataset).setAttribute(key(name), value);\n return true;\n },\n\n deleteProperty(dataset, name) {\n if (name in dataset)\n refs.get(dataset).removeAttribute(key(name));\n return delete dataset[name];\n }\n};\n\n/**\n * @implements globalThis.DOMStringMap\n */\nexport class DOMStringMap {\n /**\n * @param {Element} ref\n */\n constructor(ref) {\n for (const {name, value} of ref.attributes) {\n if (/^data-/.test(name))\n this[prop(name)] = value;\n }\n refs.set(this, ref);\n return new Proxy(this, handler);\n }\n}\n\nsetPrototypeOf(DOMStringMap.prototype, null);\n",
116
+ "import {OWNER_ELEMENT} from '../shared/symbols.js';\nimport {setAttribute} from '../shared/attributes.js';\n\nimport {Attr} from '../interface/attr.js';\n\nconst {add} = Set.prototype;\nconst addTokens = (self, tokens) => {\n for (const token of tokens) {\n if (token)\n add.call(self, token);\n }\n};\n\nconst update = ({[OWNER_ELEMENT]: ownerElement, value}) => {\n const attribute = ownerElement.getAttributeNode('class');\n if (attribute)\n attribute.value = value;\n else\n setAttribute(\n ownerElement,\n new Attr(ownerElement.ownerDocument, 'class', value)\n );\n};\n\n/**\n * @implements globalThis.DOMTokenList\n */\nexport class DOMTokenList extends Set {\n\n constructor(ownerElement) {\n super();\n this[OWNER_ELEMENT] = ownerElement;\n const attribute = ownerElement.getAttributeNode('class');\n if (attribute)\n addTokens(this, attribute.value.split(/\\s+/));\n }\n\n get length() { return this.size; }\n\n get value() { return [...this].join(' '); }\n\n /**\n * @param {...string} tokens\n */\n add(...tokens) {\n addTokens(this, tokens);\n update(this);\n }\n\n /**\n * @param {string} token\n */\n contains(token) { return this.has(token); }\n\n /**\n * @param {...string} tokens\n */\n remove(...tokens) {\n for (const token of tokens)\n this.delete(token);\n update(this);\n }\n\n /**\n * @param {string} token\n * @param {boolean?} force\n */\n toggle(token, force) {\n if (this.has(token)) {\n if (force)\n return true;\n this.delete(token);\n update(this);\n }\n else if (force || arguments.length === 1) {\n super.add(token);\n update(this);\n return true;\n }\n return false;\n }\n\n /**\n * @param {string} token\n * @param {string} newToken\n */\n replace(token, newToken) {\n if (this.has(token)) {\n this.delete(token);\n super.add(newToken);\n update(this);\n return true;\n }\n return false;\n }\n\n /**\n * @param {string} token\n */\n supports() { return true; }\n}\n",
117
+ "import uhyphen from 'uhyphen';\n\nimport {CHANGED, PRIVATE, VALUE} from '../shared/symbols.js';\n\nconst refs = new WeakMap;\n\nconst getKeys = style => [...style.keys()].filter(key => key !== PRIVATE);\n\nconst updateKeys = style => {\n const attr = refs.get(style).getAttributeNode('style');\n if (!attr || attr[CHANGED] || style.get(PRIVATE) !== attr) {\n style.clear();\n if (attr) {\n style.set(PRIVATE, attr);\n for (const rule of attr[VALUE].split(/\\s*;\\s*/)) {\n let [key, ...rest] = rule.split(':');\n if (rest.length > 0) {\n key = key.trim();\n const value = rest.join(':').trim();\n if (key && value)\n style.set(key, value);\n }\n }\n }\n }\n return attr;\n};\n\nconst handler = {\n get(style, name) {\n if (name in prototype)\n return style[name];\n updateKeys(style);\n if (name === 'length')\n return getKeys(style).length;\n if (/^\\d+$/.test(name))\n return getKeys(style)[name];\n return style.get(uhyphen(name)) ?? '';\n },\n\n set(style, name, value) {\n if (name === 'cssText')\n style[name] = value;\n else {\n let attr = updateKeys(style);\n if (value == null)\n style.delete(uhyphen(name));\n else\n style.set(uhyphen(name), value);\n if (!attr) {\n const element = refs.get(style);\n attr = element.ownerDocument.createAttribute('style');\n element.setAttributeNode(attr);\n style.set(PRIVATE, attr);\n }\n attr[CHANGED] = false;\n attr[VALUE] = style.toString();\n }\n return true;\n }\n};\n\n/**\n * @implements globalThis.CSSStyleDeclaration\n */\nexport class CSSStyleDeclaration extends Map {\n constructor(element) {\n super();\n refs.set(this, element);\n /* c8 ignore start */\n return new Proxy(this, handler);\n /* c8 ignore stop */\n }\n\n get cssText() {\n return this.toString();\n }\n\n set cssText(value) {\n refs.get(this).setAttribute('style', value);\n }\n\n getPropertyValue(name) {\n const self = this[PRIVATE];\n return handler.get(self, name);\n }\n\n setProperty(name, value) {\n const self = this[PRIVATE];\n handler.set(self, name, value);\n }\n\n removeProperty(name) {\n const self = this[PRIVATE];\n handler.set(self, name, null);\n }\n\n [Symbol.iterator]() {\n const self = this[PRIVATE];\n updateKeys(self);\n const keys = getKeys(self);\n const {length} = keys;\n let i = 0;\n return {\n next() {\n const done = i === length;\n return {done, value: done ? null : keys[i++]};\n }\n };\n }\n\n get[PRIVATE]() { return this; }\n\n toString() {\n const self = this[PRIVATE];\n updateKeys(self);\n const cssText = [];\n self.forEach(push, cssText);\n return cssText.join(';');\n }\n}\n\nconst {prototype} = CSSStyleDeclaration;\n\nfunction push(value, key) {\n if (key !== PRIVATE)\n this.push(`${key}:${value}`);\n}\n",
118
+ "// https://dom.spec.whatwg.org/#interface-event\n\n/* c8 ignore start */\n\n// Node 15 has Event but 14 and 12 don't\nconst BUBBLING_PHASE = 3;\nconst AT_TARGET = 2;\nconst CAPTURING_PHASE = 1;\nconst NONE = 0;\n\nfunction getCurrentTarget(ev) {\n return ev.currentTarget;\n}\n\n/**\n * @implements globalThis.Event\n */\nclass GlobalEvent {\n static get BUBBLING_PHASE() { return BUBBLING_PHASE; }\n static get AT_TARGET() { return AT_TARGET; }\n static get CAPTURING_PHASE() { return CAPTURING_PHASE; }\n static get NONE() { return NONE; }\n\n constructor(type, eventInitDict = {}) {\n this.type = type;\n this.bubbles = !!eventInitDict.bubbles;\n this.cancelBubble = false;\n this._stopImmediatePropagationFlag = false;\n this.cancelable = !!eventInitDict.cancelable;\n this.eventPhase = this.NONE;\n this.timeStamp = Date.now();\n this.defaultPrevented = false;\n this.originalTarget = null;\n this.returnValue = null;\n this.srcElement = null;\n this.target = null;\n this._path = [];\n }\n\n get BUBBLING_PHASE() { return BUBBLING_PHASE; }\n get AT_TARGET() { return AT_TARGET; }\n get CAPTURING_PHASE() { return CAPTURING_PHASE; }\n get NONE() { return NONE; }\n\n preventDefault() { this.defaultPrevented = true; }\n\n // simplified implementation, should be https://dom.spec.whatwg.org/#dom-event-composedpath\n composedPath() {\n return this._path.map(getCurrentTarget);\n }\n\n stopPropagation() {\n this.cancelBubble = true;\n }\n \n stopImmediatePropagation() {\n this.stopPropagation();\n this._stopImmediatePropagationFlag = true;\n }\n }\n\nexport {GlobalEvent as Event};\n\n/* c8 ignore stop */\n",
119
+ "/**\n * @implements globalThis.NamedNodeMap\n */\nexport class NamedNodeMap extends Array {\n constructor(ownerElement) {\n super();\n this.ownerElement = ownerElement;\n }\n\n getNamedItem(name) {\n return this.ownerElement.getAttributeNode(name);\n }\n\n setNamedItem(attr) {\n this.ownerElement.setAttributeNode(attr);\n this.unshift(attr);\n }\n\n removeNamedItem(name) {\n const item = this.getNamedItem(name);\n this.ownerElement.removeAttribute(name);\n this.splice(this.indexOf(item), 1);\n }\n\n item(index) {\n return index < this.length ? this[index] : null;\n }\n\n /* c8 ignore start */\n getNamedItemNS(_, name) {\n return this.getNamedItem(name);\n }\n\n setNamedItemNS(_, attr) {\n return this.setNamedItem(attr);\n }\n\n removeNamedItemNS(_, name) {\n return this.removeNamedItem(name);\n }\n /* c8 ignore stop */\n}\n",
120
+ "import {DOCUMENT_FRAGMENT_NODE} from '../shared/constants.js';\nimport {getInnerHtml, setInnerHtml} from '../mixin/inner-html.js';\nimport {NonElementParentNode} from '../mixin/non-element-parent-node.js';\n\n/**\n * @implements globalThis.ShadowRoot\n */\nexport class ShadowRoot extends NonElementParentNode {\n constructor(host) {\n super(host.ownerDocument, '#shadow-root', DOCUMENT_FRAGMENT_NODE);\n this.host = host;\n }\n\n get innerHTML() {\n return getInnerHtml(this);\n }\n set innerHTML(html) {\n setInnerHtml(this, html);\n }\n}\n",
121
+ "// https://dom.spec.whatwg.org/#interface-element\n\nimport {\n ATTRIBUTE_NODE,\n BLOCK_ELEMENTS,\n CDATA_SECTION_NODE,\n COMMENT_NODE,\n ELEMENT_NODE,\n NODE_END,\n TEXT_NODE,\n SVG_NAMESPACE\n} from '../shared/constants.js';\n\nimport {\n setAttribute, removeAttribute,\n numericAttribute, stringAttribute\n} from '../shared/attributes.js';\n\nimport {\n CLASS_LIST, DATASET, STYLE,\n END, NEXT, PREV, START,\n MIME\n} from '../shared/symbols.js';\n\nimport {\n htmlToFragment,\n ignoreCase,\n knownAdjacent,\n localCase,\n String\n} from '../shared/utils.js';\n\nimport {elementAsJSON} from '../shared/jsdon.js';\nimport {matches, prepareMatch} from '../shared/matches.js';\nimport {shadowRoots} from '../shared/shadow-roots.js';\n\nimport {isConnected, parentElement, previousSibling, nextSibling} from '../shared/node.js';\nimport {previousElementSibling, nextElementSibling} from '../mixin/non-document-type-child-node.js';\n\nimport {before, after, replaceWith, remove} from '../mixin/child-node.js';\nimport {getInnerHtml, setInnerHtml} from '../mixin/inner-html.js';\nimport {ParentNode} from '../mixin/parent-node.js';\n\nimport {DOMStringMap} from '../dom/string-map.js';\nimport {DOMTokenList} from '../dom/token-list.js';\n\nimport {CSSStyleDeclaration} from './css-style-declaration.js';\nimport {Event} from './event.js';\nimport {NamedNodeMap} from './named-node-map.js';\nimport {ShadowRoot} from './shadow-root.js';\nimport {NodeList} from './node-list.js';\nimport {Attr} from './attr.js';\nimport {Text} from './text.js';\nimport {escape} from '../shared/text-escaper.js';\n\n// <utils>\nconst attributesHandler = {\n get(target, key) {\n return key in target ? target[key] : target.find(({name}) => name === key);\n }\n};\n\nconst create = (ownerDocument, element, localName) => {\n if ('ownerSVGElement' in element) {\n const svg = ownerDocument.createElementNS(SVG_NAMESPACE, localName);\n svg.ownerSVGElement = element.ownerSVGElement;\n return svg;\n }\n return ownerDocument.createElement(localName);\n};\n\nconst isVoid = ({localName, ownerDocument}) => {\n return ownerDocument[MIME].voidElements.test(localName);\n};\n\n// </utils>\n\n/**\n * @implements globalThis.Element\n */\nexport class Element extends ParentNode {\n constructor(ownerDocument, localName) {\n super(ownerDocument, localName, ELEMENT_NODE);\n this[CLASS_LIST] = null;\n this[DATASET] = null;\n this[STYLE] = null;\n }\n\n // <Mixins>\n get isConnected() { return isConnected(this); }\n get parentElement() { return parentElement(this); }\n get previousSibling() { return previousSibling(this); }\n get nextSibling() { return nextSibling(this); }\n get namespaceURI() {\n return 'http://www.w3.org/1999/xhtml';\n }\n\n get previousElementSibling() { return previousElementSibling(this); }\n get nextElementSibling() { return nextElementSibling(this); }\n\n before(...nodes) { before(this, nodes); }\n after(...nodes) { after(this, nodes); }\n replaceWith(...nodes) { replaceWith(this, nodes); }\n remove() { remove(this[PREV], this, this[END][NEXT]); }\n // </Mixins>\n\n // <specialGetters>\n get id() { return stringAttribute.get(this, 'id'); }\n set id(value) { stringAttribute.set(this, 'id', value); }\n\n get className() { return this.classList.value; }\n set className(value) {\n const {classList} = this;\n classList.clear();\n classList.add(...(String(value).split(/\\s+/)));\n }\n\n get nodeName() { return localCase(this); }\n get tagName() { return localCase(this); }\n\n get classList() {\n return this[CLASS_LIST] || (\n this[CLASS_LIST] = new DOMTokenList(this)\n );\n }\n\n get dataset() {\n return this[DATASET] || (\n this[DATASET] = new DOMStringMap(this)\n );\n }\n\n getBoundingClientRect() {\n return {\n x: 0,\n y: 0,\n bottom: 0,\n height: 0,\n left: 0,\n right: 0,\n top: 0,\n width: 0\n };\n }\n\n get nonce() { return stringAttribute.get(this, 'nonce'); }\n set nonce(value) { stringAttribute.set(this, 'nonce', value); }\n\n get style() {\n return this[STYLE] || (\n this[STYLE] = new CSSStyleDeclaration(this)\n );\n }\n\n get tabIndex() { return numericAttribute.get(this, 'tabindex') || -1; }\n set tabIndex(value) { numericAttribute.set(this, 'tabindex', value); }\n\n get slot() { return stringAttribute.get(this, 'slot'); }\n set slot(value) { stringAttribute.set(this, 'slot', value); }\n // </specialGetters>\n\n\n // <contentRelated>\n get innerText() {\n const text = [];\n let {[NEXT]: next, [END]: end} = this;\n while (next !== end) {\n if (next.nodeType === TEXT_NODE) {\n text.push(next.textContent.replace(/\\s+/g, ' '));\n } else if(\n text.length && next[NEXT] != end &&\n BLOCK_ELEMENTS.has(next.tagName)\n ) {\n text.push('\\n');\n }\n next = next[NEXT];\n }\n return text.join('');\n }\n\n /**\n * @returns {String}\n */\n get textContent() {\n const text = [];\n let {[NEXT]: next, [END]: end} = this;\n while (next !== end) {\n const nodeType = next.nodeType;\n if (nodeType === TEXT_NODE || nodeType === CDATA_SECTION_NODE)\n text.push(next.textContent);\n next = next[NEXT];\n }\n return text.join('');\n }\n\n set textContent(text) {\n this.replaceChildren();\n if (text != null && text !== '')\n this.appendChild(new Text(this.ownerDocument, text));\n }\n\n get innerHTML() {\n return getInnerHtml(this);\n }\n set innerHTML(html) {\n setInnerHtml(this, html);\n }\n\n get outerHTML() { return this.toString(); }\n set outerHTML(html) {\n const template = this.ownerDocument.createElement('');\n template.innerHTML = html;\n this.replaceWith(...template.childNodes);\n }\n // </contentRelated>\n\n // <attributes>\n get attributes() {\n const attributes = new NamedNodeMap(this);\n let next = this[NEXT];\n while (next.nodeType === ATTRIBUTE_NODE) {\n attributes.push(next);\n next = next[NEXT];\n }\n return new Proxy(attributes, attributesHandler);\n }\n\n focus() { this.dispatchEvent(new Event('focus')); }\n\n getAttribute(name) {\n if (name === 'class')\n return this.className;\n const attribute = this.getAttributeNode(name);\n return attribute && (ignoreCase(this) ? attribute.value : escape(attribute.value));\n }\n\n getAttributeNode(name) {\n let next = this[NEXT];\n while (next.nodeType === ATTRIBUTE_NODE) {\n if (next.name === name)\n return next;\n next = next[NEXT];\n }\n return null;\n }\n\n getAttributeNames() {\n const attributes = new NodeList;\n let next = this[NEXT];\n while (next.nodeType === ATTRIBUTE_NODE) {\n attributes.push(next.name);\n next = next[NEXT];\n }\n return attributes;\n }\n\n hasAttribute(name) { return !!this.getAttributeNode(name); }\n hasAttributes() { return this[NEXT].nodeType === ATTRIBUTE_NODE; }\n\n removeAttribute(name) {\n if (name === 'class' && this[CLASS_LIST])\n this[CLASS_LIST].clear();\n let next = this[NEXT];\n while (next.nodeType === ATTRIBUTE_NODE) {\n if (next.name === name) {\n removeAttribute(this, next);\n return;\n }\n next = next[NEXT];\n }\n }\n\n removeAttributeNode(attribute) {\n let next = this[NEXT];\n while (next.nodeType === ATTRIBUTE_NODE) {\n if (next === attribute) {\n removeAttribute(this, next);\n return;\n }\n next = next[NEXT];\n }\n }\n\n setAttribute(name, value) {\n if (name === 'class')\n this.className = value;\n else {\n const attribute = this.getAttributeNode(name);\n if (attribute)\n attribute.value = value;\n else\n setAttribute(this, new Attr(this.ownerDocument, name, value));\n }\n }\n\n setAttributeNode(attribute) {\n const {name} = attribute;\n const previously = this.getAttributeNode(name);\n if (previously !== attribute) {\n if (previously)\n this.removeAttributeNode(previously);\n const {ownerElement} = attribute;\n if (ownerElement)\n ownerElement.removeAttributeNode(attribute);\n setAttribute(this, attribute);\n }\n return previously;\n }\n\n toggleAttribute(name, force) {\n if (this.hasAttribute(name)) {\n if (!force) {\n this.removeAttribute(name);\n return false;\n }\n return true;\n }\n else if (force || arguments.length === 1) {\n this.setAttribute(name, '');\n return true;\n }\n return false;\n }\n // </attributes>\n\n // <ShadowDOM>\n get shadowRoot() {\n if (shadowRoots.has(this)) {\n const {mode, shadowRoot} = shadowRoots.get(this);\n if (mode === 'open')\n return shadowRoot;\n }\n return null;\n }\n\n attachShadow(init) {\n if (shadowRoots.has(this))\n throw new Error('operation not supported');\n // TODO: shadowRoot should be likely a specialized class that extends DocumentFragment\n // but until DSD is out, I am not sure I should spend time on this.\n const shadowRoot = new ShadowRoot(this);\n shadowRoots.set(this, {\n mode: init.mode,\n shadowRoot\n });\n return shadowRoot;\n }\n // </ShadowDOM>\n\n // <selectors>\n matches(selectors) { return matches(this, selectors); }\n closest(selectors) {\n let parentElement = this;\n const matches = prepareMatch(parentElement, selectors);\n while (parentElement && !matches(parentElement))\n parentElement = parentElement.parentElement;\n return parentElement;\n }\n // </selectors>\n\n // <insertAdjacent>\n insertAdjacentElement(position, element) {\n const {parentElement} = this;\n switch (position) {\n case 'beforebegin':\n if (parentElement) {\n parentElement.insertBefore(element, this);\n break;\n }\n return null;\n case 'afterbegin':\n this.insertBefore(element, this.firstChild);\n break;\n case 'beforeend':\n this.insertBefore(element, null);\n break;\n case 'afterend':\n if (parentElement) {\n parentElement.insertBefore(element, this.nextSibling);\n break;\n }\n return null;\n }\n return element;\n }\n\n insertAdjacentHTML(position, html) {\n this.insertAdjacentElement(position, htmlToFragment(this.ownerDocument, html));\n }\n\n insertAdjacentText(position, text) {\n const node = this.ownerDocument.createTextNode(text);\n this.insertAdjacentElement(position, node);\n }\n // </insertAdjacent>\n\n cloneNode(deep = false) {\n const {ownerDocument, localName} = this;\n const addNext = next => {\n next.parentNode = parentNode;\n knownAdjacent($next, next);\n $next = next;\n };\n const clone = create(ownerDocument, this, localName);\n let parentNode = clone, $next = clone;\n let {[NEXT]: next, [END]: prev} = this;\n while (next !== prev && (deep || next.nodeType === ATTRIBUTE_NODE)) {\n switch (next.nodeType) {\n case NODE_END:\n knownAdjacent($next, parentNode[END]);\n $next = parentNode[END];\n parentNode = parentNode.parentNode;\n break;\n case ELEMENT_NODE: {\n const node = create(ownerDocument, next, next.localName);\n addNext(node);\n parentNode = node;\n break;\n }\n case ATTRIBUTE_NODE: {\n const attr = next.cloneNode(deep);\n attr.ownerElement = parentNode;\n addNext(attr);\n break;\n }\n case TEXT_NODE:\n case COMMENT_NODE:\n case CDATA_SECTION_NODE:\n addNext(next.cloneNode(deep));\n break;\n }\n next = next[NEXT];\n }\n knownAdjacent($next, clone[END]);\n return clone;\n }\n\n // <custom>\n toString() {\n const out = [];\n const {[END]: end} = this;\n let next = {[NEXT]: this};\n let isOpened = false;\n do {\n next = next[NEXT];\n switch (next.nodeType) {\n case ATTRIBUTE_NODE: {\n const attr = ' ' + next;\n switch (attr) {\n case ' id':\n case ' class':\n case ' style':\n break;\n default:\n out.push(attr);\n }\n break;\n }\n case NODE_END: {\n const start = next[START];\n if (isOpened) {\n if ('ownerSVGElement' in start)\n out.push(' />');\n else if (isVoid(start))\n out.push(ignoreCase(start) ? '>' : ' />');\n else\n out.push(`></${start.localName}>`);\n isOpened = false;\n }\n else\n out.push(`</${start.localName}>`);\n break;\n }\n case ELEMENT_NODE:\n if (isOpened)\n out.push('>');\n if (next.toString !== this.toString) {\n out.push(next.toString());\n next = next[END];\n isOpened = false;\n }\n else {\n out.push(`<${next.localName}`);\n isOpened = true;\n }\n break;\n case TEXT_NODE:\n case COMMENT_NODE:\n case CDATA_SECTION_NODE:\n out.push((isOpened ? '>' : '') + next);\n isOpened = false;\n break;\n }\n } while (next !== end);\n return out.join('');\n }\n\n toJSON() {\n const json = [];\n elementAsJSON(this, json);\n return json;\n }\n // </custom>\n\n\n /* c8 ignore start */\n getAttributeNS(_, name) { return this.getAttribute(name); }\n getElementsByTagNameNS(_, name) { return this.getElementsByTagName(name); }\n hasAttributeNS(_, name) { return this.hasAttribute(name); }\n removeAttributeNS(_, name) { this.removeAttribute(name); }\n setAttributeNS(_, name, value) { this.setAttribute(name, value); }\n setAttributeNodeNS(attr) { return this.setAttributeNode(attr); }\n /* c8 ignore stop */\n}\n",
122
+ "import {Element} from '../interface/element.js';\nimport {String} from '../shared/utils.js';\n\nconst classNames = new WeakMap;\n\nconst handler = {\n get(target, name) {\n return target[name];\n },\n set(target, name, value) {\n target[name] = value;\n return true;\n }\n};\n\n/**\n * @implements globalThis.SVGElement\n */\nexport class SVGElement extends Element {\n constructor(ownerDocument, localName, ownerSVGElement = null) {\n super(ownerDocument, localName);\n this.ownerSVGElement = ownerSVGElement;\n }\n\n get className() {\n if (!classNames.has(this))\n classNames.set(this, new Proxy({baseVal: '', animVal: ''}, handler));\n return classNames.get(this);\n }\n\n /* c8 ignore start */\n set className(value) {\n const {classList} = this;\n classList.clear();\n classList.add(...(String(value).split(/\\s+/)));\n }\n /* c8 ignore stop */\n\n get namespaceURI() {\n return 'http://www.w3.org/2000/svg';\n }\n\n getAttribute(name) {\n return name === 'class' ?\n [...this.classList].join(' ') :\n super.getAttribute(name);\n }\n\n setAttribute(name, value) {\n if (name === 'class')\n this.className = value;\n else if (name === 'style') {\n const {className} = this;\n className.baseVal = className.animVal = value;\n }\n super.setAttribute(name, value);\n }\n}\n",
123
+ "import {Attr as _Attr} from '../interface/attr.js';\nimport {CharacterData as _CharacterData} from '../interface/character-data.js';\nimport {CDATASection as _CDATASection} from '../interface/cdata-section.js';\nimport {Comment as _Comment} from '../interface/comment.js';\nimport {DocumentFragment as _DocumentFragment} from '../interface/document-fragment.js';\nimport {DocumentType as _DocumentType} from '../interface/document-type.js';\nimport {Element as _Element} from '../interface/element.js';\nimport {Node as _Node} from '../interface/node.js';\nimport {ShadowRoot as _ShadowRoot} from '../interface/shadow-root.js';\nimport {Text as _Text} from '../interface/text.js';\nimport {SVGElement as _SVGElement} from '../svg/element.js';\n\nimport {setPrototypeOf} from './object.js';\n\n/* c8 ignore start */\nexport const illegalConstructor = () => {\n throw new TypeError('Illegal constructor');\n};\n\nexport function Attr() { illegalConstructor(); }\nsetPrototypeOf(Attr, _Attr);\nAttr.prototype = _Attr.prototype;\n\nexport function CDATASection() { illegalConstructor(); }\nsetPrototypeOf(CDATASection, _CDATASection);\nCDATASection.prototype = _CDATASection.prototype;\n\nexport function CharacterData() { illegalConstructor(); }\nsetPrototypeOf(CharacterData, _CharacterData);\nCharacterData.prototype = _CharacterData.prototype;\n\nexport function Comment() { illegalConstructor(); }\nsetPrototypeOf(Comment, _Comment);\nComment.prototype = _Comment.prototype;\n\nexport function DocumentFragment() { illegalConstructor(); }\nsetPrototypeOf(DocumentFragment, _DocumentFragment);\nDocumentFragment.prototype = _DocumentFragment.prototype;\n\nexport function DocumentType() { illegalConstructor(); }\nsetPrototypeOf(DocumentType, _DocumentType);\nDocumentType.prototype = _DocumentType.prototype;\n\nexport function Element() { illegalConstructor(); }\nsetPrototypeOf(Element, _Element);\nElement.prototype = _Element.prototype;\n\nexport function Node() { illegalConstructor(); }\nsetPrototypeOf(Node, _Node);\nNode.prototype = _Node.prototype;\n\nexport function ShadowRoot() { illegalConstructor(); }\nsetPrototypeOf(ShadowRoot, _ShadowRoot);\nShadowRoot.prototype = _ShadowRoot.prototype;\n\nexport function Text() { illegalConstructor(); }\nsetPrototypeOf(Text, _Text);\nText.prototype = _Text.prototype;\n\nexport function SVGElement() { illegalConstructor(); }\nsetPrototypeOf(SVGElement, _SVGElement);\nSVGElement.prototype = _SVGElement.prototype;\n/* c8 ignore stop */\n\nexport const Facades = {\n Attr,\n CDATASection,\n CharacterData,\n Comment,\n DocumentFragment,\n DocumentType,\n Element,\n Node,\n ShadowRoot,\n Text,\n SVGElement\n};\n",
124
+ "import {END, UPGRADE} from '../shared/symbols.js';\nimport {booleanAttribute, stringAttribute} from '../shared/attributes.js';\n\nimport {Event} from '../interface/event.js';\nimport {Element} from '../interface/element.js';\nimport {Classes, customElements} from '../interface/custom-element-registry.js';\n\nconst Level0 = new WeakMap;\nconst level0 = {\n get(element, name) {\n return Level0.has(element) && Level0.get(element)[name] || null;\n },\n set(element, name, value) {\n if (!Level0.has(element))\n Level0.set(element, {});\n const handlers = Level0.get(element);\n const type = name.slice(2);\n if (handlers[name])\n element.removeEventListener(type, handlers[name], false);\n if ((handlers[name] = value))\n element.addEventListener(type, value, false);\n }\n};\n\n/**\n * @implements globalThis.HTMLElement\n */\nexport class HTMLElement extends Element {\n\n static get observedAttributes() { return []; }\n\n constructor(ownerDocument = null, localName = '') {\n super(ownerDocument, localName);\n\n const ownerLess = !ownerDocument;\n let options;\n\n if (ownerLess) {\n const {constructor: Class} = this;\n if (!Classes.has(Class))\n throw new Error('unable to initialize this Custom Element');\n ({ownerDocument, localName, options} = Classes.get(Class));\n }\n\n if (ownerDocument[UPGRADE]) {\n const {element, values} = ownerDocument[UPGRADE];\n ownerDocument[UPGRADE] = null;\n for (const [key, value] of values)\n element[key] = value;\n return element;\n }\n\n if (ownerLess) {\n this.ownerDocument = this[END].ownerDocument = ownerDocument;\n this.localName = localName;\n customElements.set(this, {connected: false});\n if (options.is)\n this.setAttribute('is', options.is);\n }\n }\n\n /* c8 ignore start */\n\n /* TODO: what about these?\n offsetHeight\n offsetLeft\n offsetParent\n offsetTop\n offsetWidth\n */\n\n blur() { this.dispatchEvent(new Event('blur')); }\n click() {\n const clickEvent = new Event('click', {bubbles: true, cancelable: true});\n clickEvent.button = 0;\n\n this.dispatchEvent(clickEvent);\n }\n\n // Boolean getters\n get accessKeyLabel() {\n const {accessKey} = this;\n return accessKey && `Alt+Shift+${accessKey}`;\n }\n get isContentEditable() { return this.hasAttribute('contenteditable'); }\n\n // Boolean Accessors\n get contentEditable() { return booleanAttribute.get(this, 'contenteditable'); }\n set contentEditable(value) { booleanAttribute.set(this, 'contenteditable', value); }\n get draggable() { return booleanAttribute.get(this, 'draggable'); }\n set draggable(value) { booleanAttribute.set(this, 'draggable', value); }\n get hidden() { return booleanAttribute.get(this, 'hidden'); }\n set hidden(value) { booleanAttribute.set(this, 'hidden', value); }\n get spellcheck() { return booleanAttribute.get(this, 'spellcheck'); }\n set spellcheck(value) { booleanAttribute.set(this, 'spellcheck', value); }\n\n // String Accessors\n get accessKey() { return stringAttribute.get(this, 'accesskey'); }\n set accessKey(value) { stringAttribute.set(this, 'accesskey', value); }\n get dir() { return stringAttribute.get(this, 'dir'); }\n set dir(value) { stringAttribute.set(this, 'dir', value); }\n get lang() { return stringAttribute.get(this, 'lang'); }\n set lang(value) { stringAttribute.set(this, 'lang', value); }\n get title() { return stringAttribute.get(this, 'title'); }\n set title(value) { stringAttribute.set(this, 'title', value); }\n\n // DOM Level 0\n get onabort() { return level0.get(this, 'onabort'); }\n set onabort(value) { level0.set(this, 'onabort', value); }\n\n get onblur() { return level0.get(this, 'onblur'); }\n set onblur(value) { level0.set(this, 'onblur', value); }\n\n get oncancel() { return level0.get(this, 'oncancel'); }\n set oncancel(value) { level0.set(this, 'oncancel', value); }\n\n get oncanplay() { return level0.get(this, 'oncanplay'); }\n set oncanplay(value) { level0.set(this, 'oncanplay', value); }\n\n get oncanplaythrough() { return level0.get(this, 'oncanplaythrough'); }\n set oncanplaythrough(value) { level0.set(this, 'oncanplaythrough', value); }\n\n get onchange() { return level0.get(this, 'onchange'); }\n set onchange(value) { level0.set(this, 'onchange', value); }\n\n get onclick() { return level0.get(this, 'onclick'); }\n set onclick(value) { level0.set(this, 'onclick', value); }\n\n get onclose() { return level0.get(this, 'onclose'); }\n set onclose(value) { level0.set(this, 'onclose', value); }\n\n get oncontextmenu() { return level0.get(this, 'oncontextmenu'); }\n set oncontextmenu(value) { level0.set(this, 'oncontextmenu', value); }\n\n get oncuechange() { return level0.get(this, 'oncuechange'); }\n set oncuechange(value) { level0.set(this, 'oncuechange', value); }\n\n get ondblclick() { return level0.get(this, 'ondblclick'); }\n set ondblclick(value) { level0.set(this, 'ondblclick', value); }\n\n get ondrag() { return level0.get(this, 'ondrag'); }\n set ondrag(value) { level0.set(this, 'ondrag', value); }\n\n get ondragend() { return level0.get(this, 'ondragend'); }\n set ondragend(value) { level0.set(this, 'ondragend', value); }\n\n get ondragenter() { return level0.get(this, 'ondragenter'); }\n set ondragenter(value) { level0.set(this, 'ondragenter', value); }\n\n get ondragleave() { return level0.get(this, 'ondragleave'); }\n set ondragleave(value) { level0.set(this, 'ondragleave', value); }\n\n get ondragover() { return level0.get(this, 'ondragover'); }\n set ondragover(value) { level0.set(this, 'ondragover', value); }\n\n get ondragstart() { return level0.get(this, 'ondragstart'); }\n set ondragstart(value) { level0.set(this, 'ondragstart', value); }\n\n get ondrop() { return level0.get(this, 'ondrop'); }\n set ondrop(value) { level0.set(this, 'ondrop', value); }\n\n get ondurationchange() { return level0.get(this, 'ondurationchange'); }\n set ondurationchange(value) { level0.set(this, 'ondurationchange', value); }\n\n get onemptied() { return level0.get(this, 'onemptied'); }\n set onemptied(value) { level0.set(this, 'onemptied', value); }\n\n get onended() { return level0.get(this, 'onended'); }\n set onended(value) { level0.set(this, 'onended', value); }\n\n get onerror() { return level0.get(this, 'onerror'); }\n set onerror(value) { level0.set(this, 'onerror', value); }\n\n get onfocus() { return level0.get(this, 'onfocus'); }\n set onfocus(value) { level0.set(this, 'onfocus', value); }\n\n get oninput() { return level0.get(this, 'oninput'); }\n set oninput(value) { level0.set(this, 'oninput', value); }\n\n get oninvalid() { return level0.get(this, 'oninvalid'); }\n set oninvalid(value) { level0.set(this, 'oninvalid', value); }\n\n get onkeydown() { return level0.get(this, 'onkeydown'); }\n set onkeydown(value) { level0.set(this, 'onkeydown', value); }\n\n get onkeypress() { return level0.get(this, 'onkeypress'); }\n set onkeypress(value) { level0.set(this, 'onkeypress', value); }\n\n get onkeyup() { return level0.get(this, 'onkeyup'); }\n set onkeyup(value) { level0.set(this, 'onkeyup', value); }\n\n get onload() { return level0.get(this, 'onload'); }\n set onload(value) { level0.set(this, 'onload', value); }\n\n get onloadeddata() { return level0.get(this, 'onloadeddata'); }\n set onloadeddata(value) { level0.set(this, 'onloadeddata', value); }\n\n get onloadedmetadata() { return level0.get(this, 'onloadedmetadata'); }\n set onloadedmetadata(value) { level0.set(this, 'onloadedmetadata', value); }\n\n get onloadstart() { return level0.get(this, 'onloadstart'); }\n set onloadstart(value) { level0.set(this, 'onloadstart', value); }\n\n get onmousedown() { return level0.get(this, 'onmousedown'); }\n set onmousedown(value) { level0.set(this, 'onmousedown', value); }\n\n get onmouseenter() { return level0.get(this, 'onmouseenter'); }\n set onmouseenter(value) { level0.set(this, 'onmouseenter', value); }\n\n get onmouseleave() { return level0.get(this, 'onmouseleave'); }\n set onmouseleave(value) { level0.set(this, 'onmouseleave', value); }\n\n get onmousemove() { return level0.get(this, 'onmousemove'); }\n set onmousemove(value) { level0.set(this, 'onmousemove', value); }\n\n get onmouseout() { return level0.get(this, 'onmouseout'); }\n set onmouseout(value) { level0.set(this, 'onmouseout', value); }\n\n get onmouseover() { return level0.get(this, 'onmouseover'); }\n set onmouseover(value) { level0.set(this, 'onmouseover', value); }\n\n get onmouseup() { return level0.get(this, 'onmouseup'); }\n set onmouseup(value) { level0.set(this, 'onmouseup', value); }\n\n get onmousewheel() { return level0.get(this, 'onmousewheel'); }\n set onmousewheel(value) { level0.set(this, 'onmousewheel', value); }\n\n get onpause() { return level0.get(this, 'onpause'); }\n set onpause(value) { level0.set(this, 'onpause', value); }\n\n get onplay() { return level0.get(this, 'onplay'); }\n set onplay(value) { level0.set(this, 'onplay', value); }\n\n get onplaying() { return level0.get(this, 'onplaying'); }\n set onplaying(value) { level0.set(this, 'onplaying', value); }\n\n get onprogress() { return level0.get(this, 'onprogress'); }\n set onprogress(value) { level0.set(this, 'onprogress', value); }\n\n get onratechange() { return level0.get(this, 'onratechange'); }\n set onratechange(value) { level0.set(this, 'onratechange', value); }\n\n get onreset() { return level0.get(this, 'onreset'); }\n set onreset(value) { level0.set(this, 'onreset', value); }\n\n get onresize() { return level0.get(this, 'onresize'); }\n set onresize(value) { level0.set(this, 'onresize', value); }\n\n get onscroll() { return level0.get(this, 'onscroll'); }\n set onscroll(value) { level0.set(this, 'onscroll', value); }\n\n get onseeked() { return level0.get(this, 'onseeked'); }\n set onseeked(value) { level0.set(this, 'onseeked', value); }\n\n get onseeking() { return level0.get(this, 'onseeking'); }\n set onseeking(value) { level0.set(this, 'onseeking', value); }\n\n get onselect() { return level0.get(this, 'onselect'); }\n set onselect(value) { level0.set(this, 'onselect', value); }\n\n get onshow() { return level0.get(this, 'onshow'); }\n set onshow(value) { level0.set(this, 'onshow', value); }\n\n get onstalled() { return level0.get(this, 'onstalled'); }\n set onstalled(value) { level0.set(this, 'onstalled', value); }\n\n get onsubmit() { return level0.get(this, 'onsubmit'); }\n set onsubmit(value) { level0.set(this, 'onsubmit', value); }\n\n get onsuspend() { return level0.get(this, 'onsuspend'); }\n set onsuspend(value) { level0.set(this, 'onsuspend', value); }\n\n get ontimeupdate() { return level0.get(this, 'ontimeupdate'); }\n set ontimeupdate(value) { level0.set(this, 'ontimeupdate', value); }\n\n get ontoggle() { return level0.get(this, 'ontoggle'); }\n set ontoggle(value) { level0.set(this, 'ontoggle', value); }\n\n get onvolumechange() { return level0.get(this, 'onvolumechange'); }\n set onvolumechange(value) { level0.set(this, 'onvolumechange', value); }\n\n get onwaiting() { return level0.get(this, 'onwaiting'); }\n set onwaiting(value) { level0.set(this, 'onwaiting', value); }\n\n get onauxclick() { return level0.get(this, 'onauxclick'); }\n set onauxclick(value) { level0.set(this, 'onauxclick', value); }\n\n get ongotpointercapture() { return level0.get(this, 'ongotpointercapture'); }\n set ongotpointercapture(value) { level0.set(this, 'ongotpointercapture', value); }\n\n get onlostpointercapture() { return level0.get(this, 'onlostpointercapture'); }\n set onlostpointercapture(value) { level0.set(this, 'onlostpointercapture', value); }\n\n get onpointercancel() { return level0.get(this, 'onpointercancel'); }\n set onpointercancel(value) { level0.set(this, 'onpointercancel', value); }\n\n get onpointerdown() { return level0.get(this, 'onpointerdown'); }\n set onpointerdown(value) { level0.set(this, 'onpointerdown', value); }\n\n get onpointerenter() { return level0.get(this, 'onpointerenter'); }\n set onpointerenter(value) { level0.set(this, 'onpointerenter', value); }\n\n get onpointerleave() { return level0.get(this, 'onpointerleave'); }\n set onpointerleave(value) { level0.set(this, 'onpointerleave', value); }\n\n get onpointermove() { return level0.get(this, 'onpointermove'); }\n set onpointermove(value) { level0.set(this, 'onpointermove', value); }\n\n get onpointerout() { return level0.get(this, 'onpointerout'); }\n set onpointerout(value) { level0.set(this, 'onpointerout', value); }\n\n get onpointerover() { return level0.get(this, 'onpointerover'); }\n set onpointerover(value) { level0.set(this, 'onpointerover', value); }\n\n get onpointerup() { return level0.get(this, 'onpointerup'); }\n set onpointerup(value) { level0.set(this, 'onpointerup', value); }\n /* c8 ignore stop */\n\n}\n",
125
+ "import {CONTENT, PRIVATE} from '../shared/symbols.js';\n\nimport {registerHTMLClass} from '../shared/register-html-class.js';\n\nimport {HTMLElement} from './element.js';\n\nconst tagName = 'template';\n\n/**\n * @implements globalThis.HTMLTemplateElement\n */\nclass HTMLTemplateElement extends HTMLElement {\n constructor(ownerDocument) {\n super(ownerDocument, tagName);\n const content = this.ownerDocument.createDocumentFragment();\n (this[CONTENT] = content)[PRIVATE] = this;\n }\n\n get content() {\n if (this.hasChildNodes() && !this[CONTENT].hasChildNodes()) {\n for (const node of this.childNodes)\n this[CONTENT].appendChild(node.cloneNode(true));\n }\n return this[CONTENT];\n }\n}\n\nregisterHTMLClass(tagName, HTMLTemplateElement);\n\nexport {HTMLTemplateElement};\n",
126
+ "import {HTMLElement} from './element.js';\n\n/**\n * @implements globalThis.HTMLHtmlElement\n */\nexport class HTMLHtmlElement extends HTMLElement {\n constructor(ownerDocument, localName = 'html') {\n super(ownerDocument, localName);\n }\n}\n",
127
+ "import {HTMLElement} from './element.js';\n\nconst {toString} = HTMLElement.prototype;\n\nexport class TextElement extends HTMLElement {\n\n get innerHTML() { return this.textContent; }\n set innerHTML(html) { this.textContent = html; }\n\n toString() {\n const outerHTML = toString.call(this.cloneNode());\n return outerHTML.replace('><', () => `>${this.textContent}<`);\n }\n}\n",
128
+ "import { booleanAttribute, stringAttribute } from '../shared/attributes.js';\nimport { registerHTMLClass } from '../shared/register-html-class.js';\n\nimport { TextElement } from './text-element.js';\n\nconst tagName = 'script';\n\n/**\n * @implements globalThis.HTMLScriptElement\n */\nclass HTMLScriptElement extends TextElement {\n constructor(ownerDocument, localName = tagName) {\n super(ownerDocument, localName);\n }\n\n get type() {\n return stringAttribute.get(this, 'type');\n }\n set type(value) {\n stringAttribute.set(this, 'type', value);\n }\n\n get src() {\n return stringAttribute.get(this, 'src');\n }\n set src(value) {\n stringAttribute.set(this, 'src', value);\n }\n\n get defer() {\n return booleanAttribute.get(this, 'defer');\n }\n\n set defer(value) {\n booleanAttribute.set(this, 'defer', value);\n }\n\n get crossOrigin() {\n return stringAttribute.get(this, 'crossorigin');\n }\n set crossOrigin(value) {\n stringAttribute.set(this, 'crossorigin', value);\n }\n\n get nomodule() {\n return booleanAttribute.get(this, 'nomodule');\n }\n set nomodule(value) {\n booleanAttribute.set(this, 'nomodule', value);\n }\n\n get referrerPolicy() {\n return stringAttribute.get(this, 'referrerpolicy');\n }\n set referrerPolicy(value) {\n stringAttribute.set(this, 'referrerpolicy', value);\n }\n\n get nonce() {\n return stringAttribute.get(this, 'nonce');\n }\n set nonce(value) {\n stringAttribute.set(this, 'nonce', value);\n }\n\n get async() {\n return booleanAttribute.get(this, 'async');\n }\n set async(value) {\n booleanAttribute.set(this, 'async', value);\n }\n\n get text() { return this.textContent; }\n set text(content) { this.textContent = content; }\n}\n\nregisterHTMLClass(tagName, HTMLScriptElement);\n\nexport { HTMLScriptElement };\n",
129
+ "import {HTMLElement} from './element.js';\n\n/**\n * @implements globalThis.HTMLFrameElement\n */\nexport class HTMLFrameElement extends HTMLElement {\n constructor(ownerDocument, localName = 'frame') {\n super(ownerDocument, localName);\n }\n}\n",
130
+ "import {registerHTMLClass} from '../shared/register-html-class.js';\nimport {booleanAttribute, stringAttribute} from '../shared/attributes.js';\n\nimport {HTMLElement} from './element.js';\n\nconst tagName = 'iframe';\n\n/**\n * @implements globalThis.HTMLIFrameElement\n */\nclass HTMLIFrameElement extends HTMLElement {\n constructor(ownerDocument, localName = tagName) {\n super(ownerDocument, localName);\n }\n\n /* c8 ignore start */\n get src() { return stringAttribute.get(this, 'src'); }\n set src(value) { stringAttribute.set(this, 'src', value); }\n\n get srcdoc() { return stringAttribute.get(this, \"srcdoc\"); }\n set srcdoc(value) { stringAttribute.set(this, \"srcdoc\", value); }\n\n get name() { return stringAttribute.get(this, \"name\"); }\n set name(value) { stringAttribute.set(this, \"name\", value); }\n\n get allow() { return stringAttribute.get(this, \"allow\"); }\n set allow(value) { stringAttribute.set(this, \"allow\", value); }\n\n get allowFullscreen() { return booleanAttribute.get(this, \"allowfullscreen\"); }\n set allowFullscreen(value) { booleanAttribute.set(this, \"allowfullscreen\", value); }\n \n get referrerPolicy() { return stringAttribute.get(this, \"referrerpolicy\"); }\n set referrerPolicy(value) { stringAttribute.set(this, \"referrerpolicy\", value); }\n \n get loading() { return stringAttribute.get(this, \"loading\"); }\n set loading(value) { stringAttribute.set(this, \"loading\", value); }\n /* c8 ignore stop */\n}\n\nregisterHTMLClass(tagName, HTMLIFrameElement);\n\nexport {HTMLIFrameElement};\n",
131
+ "import {HTMLElement} from './element.js';\n\n/**\n * @implements globalThis.HTMLObjectElement\n */\nexport class HTMLObjectElement extends HTMLElement {\n constructor(ownerDocument, localName = 'object') {\n super(ownerDocument, localName);\n }\n}\n",
132
+ "import {HTMLElement} from './element.js';\n\n/**\n * @implements globalThis.HTMLHeadElement\n */\nexport class HTMLHeadElement extends HTMLElement {\n constructor(ownerDocument, localName = 'head') {\n super(ownerDocument, localName);\n }\n}\n",
133
+ "import {HTMLElement} from './element.js';\n\n/**\n * @implements globalThis.HTMLBodyElement\n */\nexport class HTMLBodyElement extends HTMLElement {\n constructor(ownerDocument, localName = 'body') {\n super(ownerDocument, localName);\n }\n}\n",
134
+ "'use strict';\n\nexports.CSSStyleDeclaration = require('./CSSStyleDeclaration').CSSStyleDeclaration;\nexports.CSSRule = require('./CSSRule').CSSRule;\nexports.CSSGroupingRule = require('./CSSGroupingRule').CSSGroupingRule;\nexports.CSSConditionRule = require('./CSSConditionRule').CSSConditionRule;\nexports.CSSStyleRule = require('./CSSStyleRule').CSSStyleRule;\nexports.MediaList = require('./MediaList').MediaList;\nexports.CSSMediaRule = require('./CSSMediaRule').CSSMediaRule;\nexports.CSSSupportsRule = require('./CSSSupportsRule').CSSSupportsRule;\nexports.CSSImportRule = require('./CSSImportRule').CSSImportRule;\nexports.CSSFontFaceRule = require('./CSSFontFaceRule').CSSFontFaceRule;\nexports.CSSHostRule = require('./CSSHostRule').CSSHostRule;\nexports.StyleSheet = require('./StyleSheet').StyleSheet;\nexports.CSSStyleSheet = require('./CSSStyleSheet').CSSStyleSheet;\nexports.CSSKeyframesRule = require('./CSSKeyframesRule').CSSKeyframesRule;\nexports.CSSKeyframeRule = require('./CSSKeyframeRule').CSSKeyframeRule;\nexports.MatcherList = require('./MatcherList').MatcherList;\nexports.CSSDocumentRule = require('./CSSDocumentRule').CSSDocumentRule;\nexports.CSSValue = require('./CSSValue').CSSValue;\nexports.CSSValueExpression = require('./CSSValueExpression').CSSValueExpression;\nexports.parse = require('./parse').parse;\nexports.clone = require('./clone').clone;\n",
135
+ "import {parse} from 'cssom';\n\nimport {registerHTMLClass} from '../shared/register-html-class.js';\nimport {SHEET} from '../shared/symbols.js';\n\nimport {TextElement} from './text-element.js';\n\nconst tagName = 'style';\n\n/**\n * @implements globalThis.HTMLStyleElement\n */\nclass HTMLStyleElement extends TextElement {\n constructor(ownerDocument, localName = tagName) {\n super(ownerDocument, localName);\n this[SHEET] = null;\n }\n\n get sheet() {\n const sheet = this[SHEET];\n if (sheet !== null) {\n return sheet;\n }\n return this[SHEET] = parse(this.textContent);\n }\n\n get innerHTML() {\n return super.innerHTML || '';\n }\n set innerHTML(value) {\n super.textContent = value;\n this[SHEET] = null;\n }\n get innerText() {\n return super.innerText || '';\n }\n set innerText(value) {\n super.textContent = value;\n this[SHEET] = null;\n }\n get textContent() {\n return super.textContent || '';\n }\n set textContent(value) {\n super.textContent = value;\n this[SHEET] = null;\n }\n}\n\nregisterHTMLClass(tagName, HTMLStyleElement);\n\nexport {HTMLStyleElement};\n",
136
+ "import {stringAttribute} from '../shared/attributes.js';\nimport {registerHTMLClass} from '../shared/register-html-class.js';\n\nimport {HTMLElement} from './element.js';\n\n/**\n * @implements globalThis.HTMLTimeElement\n */\nclass HTMLTimeElement extends HTMLElement {\n constructor(ownerDocument, localName = 'time') {\n super(ownerDocument, localName);\n }\n\n /**\n * @type {string}\n */\n get dateTime() { return stringAttribute.get(this, 'datetime'); }\n set dateTime(value) { stringAttribute.set(this, 'datetime', value); }\n}\n\nregisterHTMLClass('time', HTMLTimeElement)\n\nexport {HTMLTimeElement};\n",
137
+ "import {HTMLElement} from './element.js';\n\n/**\n * @implements globalThis.HTMLFieldSetElement\n */\nexport class HTMLFieldSetElement extends HTMLElement {\n constructor(ownerDocument, localName = 'fieldset') {\n super(ownerDocument, localName);\n }\n}\n",
138
+ "import {HTMLElement} from './element.js';\n\n/**\n * @implements globalThis.HTMLEmbedElement\n */\nexport class HTMLEmbedElement extends HTMLElement {\n constructor(ownerDocument, localName = 'embed') {\n super(ownerDocument, localName);\n }\n}\n",
139
+ "import {HTMLElement} from './element.js';\n\n/**\n * @implements globalThis.HTMLHRElement\n */\nexport class HTMLHRElement extends HTMLElement {\n constructor(ownerDocument, localName = 'hr') {\n super(ownerDocument, localName);\n }\n}\n",
140
+ "import {HTMLElement} from './element.js';\n\n/**\n * @implements globalThis.HTMLProgressElement\n */\nexport class HTMLProgressElement extends HTMLElement {\n constructor(ownerDocument, localName = 'progress') {\n super(ownerDocument, localName);\n }\n}\n",
141
+ "import {HTMLElement} from './element.js';\n\n/**\n * @implements globalThis.HTMLParagraphElement\n */\nexport class HTMLParagraphElement extends HTMLElement {\n constructor(ownerDocument, localName = 'p') {\n super(ownerDocument, localName);\n }\n}\n",
142
+ "import {HTMLElement} from './element.js';\n\n/**\n * @implements globalThis.HTMLTableElement\n */\nexport class HTMLTableElement extends HTMLElement {\n constructor(ownerDocument, localName = 'table') {\n super(ownerDocument, localName);\n }\n}\n",
143
+ "import {HTMLElement} from './element.js';\n\n/**\n * @implements globalThis.HTMLFrameSetElement\n */\nexport class HTMLFrameSetElement extends HTMLElement {\n constructor(ownerDocument, localName = 'frameset') {\n super(ownerDocument, localName);\n }\n}\n",
144
+ "import {HTMLElement} from './element.js';\n\n/**\n * @implements globalThis.HTMLLIElement\n */\nexport class HTMLLIElement extends HTMLElement {\n constructor(ownerDocument, localName = 'li') {\n super(ownerDocument, localName);\n }\n}\n",
145
+ "import {HTMLElement} from './element.js';\n\n/**\n * @implements globalThis.HTMLBaseElement\n */\nexport class HTMLBaseElement extends HTMLElement {\n constructor(ownerDocument, localName = 'base') {\n super(ownerDocument, localName);\n }\n}\n",
146
+ "import {HTMLElement} from './element.js';\n\n/**\n * @implements globalThis.HTMLDataListElement\n */\nexport class HTMLDataListElement extends HTMLElement {\n constructor(ownerDocument, localName = 'datalist') {\n super(ownerDocument, localName);\n }\n}\n",
147
+ "import {registerHTMLClass} from '../shared/register-html-class.js';\nimport {booleanAttribute, stringAttribute} from '../shared/attributes.js';\n\nimport {HTMLElement} from './element.js';\n\nconst tagName = 'input';\n\n/**\n * @implements globalThis.HTMLInputElement\n */\nclass HTMLInputElement extends HTMLElement {\n constructor(ownerDocument, localName = tagName) {\n super(ownerDocument, localName);\n }\n\n /* c8 ignore start */\n get autofocus() { return booleanAttribute.get(this, 'autofocus') || -1; }\n set autofocus(value) { booleanAttribute.set(this, 'autofocus', value); }\n\n get disabled() { return booleanAttribute.get(this, 'disabled'); }\n set disabled(value) { booleanAttribute.set(this, 'disabled', value); }\n\n get name() { return this.getAttribute('name'); }\n set name(value) { this.setAttribute('name', value); }\n\n get placeholder() { return this.getAttribute('placeholder'); }\n set placeholder(value) { this.setAttribute('placeholder', value); }\n\n get type() { return this.getAttribute('type'); }\n set type(value) { this.setAttribute('type', value); }\n\n get value() { return stringAttribute.get(this, 'value'); }\n set value(value) { stringAttribute.set(this, 'value', value); }\n /* c8 ignore stop */\n}\n\nregisterHTMLClass(tagName, HTMLInputElement);\n\nexport {HTMLInputElement};\n",
148
+ "import {HTMLElement} from './element.js';\n\n/**\n * @implements globalThis.HTMLParamElement\n */\nexport class HTMLParamElement extends HTMLElement {\n constructor(ownerDocument, localName = 'param') {\n super(ownerDocument, localName);\n }\n}\n",
149
+ "import {HTMLElement} from './element.js';\n\n/**\n * @implements globalThis.HTMLMediaElement\n */\nexport class HTMLMediaElement extends HTMLElement {\n constructor(ownerDocument, localName = 'media') {\n super(ownerDocument, localName);\n }\n}\n",
150
+ "import {HTMLElement} from './element.js';\n\n/**\n * @implements globalThis.HTMLAudioElement\n */\nexport class HTMLAudioElement extends HTMLElement {\n constructor(ownerDocument, localName = 'audio') {\n super(ownerDocument, localName);\n }\n}\n",
151
+ "import {registerHTMLClass} from '../shared/register-html-class.js';\n\nimport {HTMLElement} from './element.js';\n\nconst tagName = 'h1';\n\n/**\n * @implements globalThis.HTMLHeadingElement\n */\nclass HTMLHeadingElement extends HTMLElement {\n constructor(ownerDocument, localName = tagName) {\n super(ownerDocument, localName);\n }\n}\n\nregisterHTMLClass([tagName, 'h2', 'h3', 'h4', 'h5', 'h6'], HTMLHeadingElement);\n\nexport {HTMLHeadingElement};\n",
152
+ "import {HTMLElement} from './element.js';\n\n/**\n * @implements globalThis.HTMLDirectoryElement\n */\nexport class HTMLDirectoryElement extends HTMLElement {\n constructor(ownerDocument, localName = 'dir') {\n super(ownerDocument, localName);\n }\n}\n",
153
+ "import {HTMLElement} from './element.js';\n\n/**\n * @implements globalThis.HTMLQuoteElement\n */\nexport class HTMLQuoteElement extends HTMLElement {\n constructor(ownerDocument, localName = 'quote') {\n super(ownerDocument, localName);\n }\n}\n",
154
+ "import {IMAGE} from '../shared/symbols.js';\n\nimport {registerHTMLClass} from '../shared/register-html-class.js';\nimport {numericAttribute} from '../shared/attributes.js';\n\nimport Canvas from '../../commonjs/canvas.cjs';\n\nimport {HTMLElement} from './element.js';\n\nconst {createCanvas} = Canvas;\n\nconst tagName = 'canvas';\n\n/**\n * @implements globalThis.HTMLCanvasElement\n */\nclass HTMLCanvasElement extends HTMLElement {\n constructor(ownerDocument, localName = tagName) {\n super(ownerDocument, localName);\n this[IMAGE] = createCanvas(300, 150);\n }\n\n get width() {\n return this[IMAGE].width;\n }\n\n set width(value) {\n numericAttribute.set(this, 'width', value);\n this[IMAGE].width = value;\n }\n\n get height() {\n return this[IMAGE].height;\n }\n\n set height(value) {\n numericAttribute.set(this, 'height', value);\n this[IMAGE].height = value;\n }\n\n getContext(type) {\n return this[IMAGE].getContext(type);\n }\n\n toDataURL(...args) {\n return this[IMAGE].toDataURL(...args);\n }\n}\n\nregisterHTMLClass(tagName, HTMLCanvasElement);\n\nexport {HTMLCanvasElement};\n",
155
+ "import {HTMLElement} from './element.js';\n\n/**\n * @implements globalThis.HTMLLegendElement\n */\nexport class HTMLLegendElement extends HTMLElement {\n constructor(ownerDocument, localName = 'legend') {\n super(ownerDocument, localName);\n }\n}\n",
156
+ "import {HTMLElement} from './element.js';\nimport {booleanAttribute, stringAttribute} from '../shared/attributes.js';\nimport {registerHTMLClass} from '../shared/register-html-class.js';\n\nconst tagName = 'option';\n\n/**\n * @implements globalThis.HTMLOptionElement\n */\nclass HTMLOptionElement extends HTMLElement {\n constructor(ownerDocument, localName = tagName) {\n super(ownerDocument, localName);\n }\n\n /* c8 ignore start */\n get value() { return stringAttribute.get(this, 'value'); }\n set value(value) { stringAttribute.set(this, 'value', value); }\n /* c8 ignore stop */\n\n get selected() { return booleanAttribute.get(this, 'selected'); }\n set selected(value) {\n const option = this.parentElement?.querySelector('option[selected]');\n if (option && option !== this)\n option.selected = false;\n booleanAttribute.set(this, 'selected', value);\n }\n}\n\nregisterHTMLClass(tagName, HTMLOptionElement);\n\nexport {HTMLOptionElement};\n",
157
+ "import {HTMLElement} from './element.js';\n\n/**\n * @implements globalThis.HTMLSpanElement\n */\nexport class HTMLSpanElement extends HTMLElement {\n constructor(ownerDocument, localName = 'span') {\n super(ownerDocument, localName);\n }\n}\n",
158
+ "import {HTMLElement} from './element.js';\n\n/**\n * @implements globalThis.HTMLMeterElement\n */\nexport class HTMLMeterElement extends HTMLElement {\n constructor(ownerDocument, localName = 'meter') {\n super(ownerDocument, localName);\n }\n}\n",
159
+ "import {HTMLElement} from './element.js';\n\n/**\n * @implements globalThis.HTMLVideoElement\n */\nexport class HTMLVideoElement extends HTMLElement {\n constructor(ownerDocument, localName = 'video') {\n super(ownerDocument, localName);\n }\n}\n",
160
+ "import {HTMLElement} from './element.js';\n\n/**\n * @implements globalThis.HTMLTableCellElement\n */\nexport class HTMLTableCellElement extends HTMLElement {\n constructor(ownerDocument, localName = 'td') {\n super(ownerDocument, localName);\n }\n}\n",
161
+ "import {registerHTMLClass} from '../shared/register-html-class.js';\n\nimport {TextElement} from './text-element.js';\n\nconst tagName = 'title';\n\n/**\n * @implements globalThis.HTMLTitleElement\n */\nclass HTMLTitleElement extends TextElement {\n constructor(ownerDocument, localName = tagName) {\n super(ownerDocument, localName);\n }\n}\n\nregisterHTMLClass(tagName, HTMLTitleElement);\n\nexport {HTMLTitleElement};\n",
162
+ "import {HTMLElement} from './element.js';\n\n/**\n * @implements globalThis.HTMLOutputElement\n */\nexport class HTMLOutputElement extends HTMLElement {\n constructor(ownerDocument, localName = 'output') {\n super(ownerDocument, localName);\n }\n}\n",
163
+ "import {HTMLElement} from './element.js';\n\n/**\n * @implements globalThis.HTMLTableRowElement\n */\nexport class HTMLTableRowElement extends HTMLElement {\n constructor(ownerDocument, localName = 'tr') {\n super(ownerDocument, localName);\n }\n}\n",
164
+ "import {HTMLElement} from './element.js';\n\n/**\n * @implements globalThis.HTMLDataElement\n */\nexport class HTMLDataElement extends HTMLElement {\n constructor(ownerDocument, localName = 'data') {\n super(ownerDocument, localName);\n }\n}\n",
165
+ "import {HTMLElement} from './element.js';\n\n/**\n * @implements globalThis.HTMLMenuElement\n */\nexport class HTMLMenuElement extends HTMLElement {\n constructor(ownerDocument, localName = 'menu') {\n super(ownerDocument, localName);\n }\n}\n",
166
+ "import {registerHTMLClass} from '../shared/register-html-class.js';\nimport {booleanAttribute} from '../shared/attributes.js';\n\nimport {HTMLElement} from './element.js';\nimport {NodeList} from '../interface/node-list.js';\n\nconst tagName = 'select';\n\n/**\n * @implements globalThis.HTMLSelectElement\n */\nclass HTMLSelectElement extends HTMLElement {\n constructor(ownerDocument, localName = tagName) {\n super(ownerDocument, localName);\n }\n\n get options() {\n let children = new NodeList;\n let {firstElementChild} = this;\n while (firstElementChild) {\n if (firstElementChild.tagName === 'OPTGROUP')\n children.push(...firstElementChild.children);\n else\n children.push(firstElementChild);\n firstElementChild = firstElementChild.nextElementSibling;\n }\n return children;\n }\n\n /* c8 ignore start */\n get disabled() { return booleanAttribute.get(this, 'disabled'); }\n set disabled(value) { booleanAttribute.set(this, 'disabled', value); }\n\n get name() { return this.getAttribute('name'); }\n set name(value) { this.setAttribute('name', value); }\n /* c8 ignore stop */\n\n get value() { return this.querySelector('option[selected]')?.value; }\n}\n\nregisterHTMLClass(tagName, HTMLSelectElement);\n\nexport {HTMLSelectElement};\n\n",
167
+ "import {HTMLElement} from './element.js';\n\n/**\n * @implements globalThis.HTMLBRElement\n */\nexport class HTMLBRElement extends HTMLElement {\n constructor(ownerDocument, localName = 'br') {\n super(ownerDocument, localName);\n }\n}\n",
168
+ "import {registerHTMLClass} from '../shared/register-html-class.js';\nimport {booleanAttribute} from '../shared/attributes.js';\n\nimport {HTMLElement} from './element.js';\n\nconst tagName = 'button';\n\n/**\n * @implements globalThis.HTMLButtonElement\n */\nclass HTMLButtonElement extends HTMLElement {\n constructor(ownerDocument, localName = tagName) {\n super(ownerDocument, localName);\n }\n\n /* c8 ignore start */\n get disabled() { return booleanAttribute.get(this, 'disabled'); }\n set disabled(value) { booleanAttribute.set(this, 'disabled', value); }\n\n get name() { return this.getAttribute('name'); }\n set name(value) { this.setAttribute('name', value); }\n\n get type() { return this.getAttribute('type'); }\n set type(value) { this.setAttribute('type', value); }\n /* c8 ignore stop */\n}\n\nregisterHTMLClass(tagName, HTMLButtonElement);\n\nexport {HTMLButtonElement};\n",
169
+ "import {HTMLElement} from './element.js';\n\n/**\n * @implements globalThis.HTMLMapElement\n */\nexport class HTMLMapElement extends HTMLElement {\n constructor(ownerDocument, localName = 'map') {\n super(ownerDocument, localName);\n }\n}\n",
170
+ "import {HTMLElement} from './element.js';\n\n/**\n * @implements globalThis.HTMLOptGroupElement\n */\nexport class HTMLOptGroupElement extends HTMLElement {\n constructor(ownerDocument, localName = 'optgroup') {\n super(ownerDocument, localName);\n }\n}\n",
171
+ "import {HTMLElement} from './element.js';\n\n/**\n * @implements globalThis.HTMLDListElement\n */\nexport class HTMLDListElement extends HTMLElement {\n constructor(ownerDocument, localName = 'dl') {\n super(ownerDocument, localName);\n }\n}\n",
172
+ "import {registerHTMLClass} from '../shared/register-html-class.js';\nimport {booleanAttribute} from '../shared/attributes.js';\n\nimport {TextElement} from './text-element.js';\n\nconst tagName = 'textarea';\n\n/**\n * @implements globalThis.HTMLTextAreaElement\n */\nclass HTMLTextAreaElement extends TextElement {\n constructor(ownerDocument, localName = tagName) {\n super(ownerDocument, localName);\n }\n\n /* c8 ignore start */\n get disabled() { return booleanAttribute.get(this, 'disabled'); }\n set disabled(value) { booleanAttribute.set(this, 'disabled', value); }\n\n get name() { return this.getAttribute('name'); }\n set name(value) { this.setAttribute('name', value); }\n\n get placeholder() { return this.getAttribute('placeholder'); }\n set placeholder(value) { this.setAttribute('placeholder', value); }\n\n get type() { return this.getAttribute('type'); }\n set type(value) { this.setAttribute('type', value); }\n\n get value() { return this.textContent; }\n set value(content) { this.textContent = content; }\n /* c8 ignore stop */\n}\n\nregisterHTMLClass(tagName, HTMLTextAreaElement);\n\nexport {HTMLTextAreaElement};\n",
173
+ "import {HTMLElement} from './element.js';\n\n/**\n * @implements globalThis.HTMLFontElement\n */\nexport class HTMLFontElement extends HTMLElement {\n constructor(ownerDocument, localName = 'font') {\n super(ownerDocument, localName);\n }\n}\n",
174
+ "import {HTMLElement} from './element.js';\n\n/**\n * @implements globalThis.HTMLDivElement\n */\nexport class HTMLDivElement extends HTMLElement {\n constructor(ownerDocument, localName = 'div') {\n super(ownerDocument, localName);\n }\n}\n",
175
+ "import {registerHTMLClass} from '../shared/register-html-class.js';\nimport {booleanAttribute, stringAttribute} from '../shared/attributes.js';\n\nimport {HTMLElement} from './element.js';\n\nconst tagName = 'link';\n\n/**\n * @implements globalThis.HTMLLinkElement\n */\nclass HTMLLinkElement extends HTMLElement {\n constructor(ownerDocument, localName = tagName) {\n super(ownerDocument, localName);\n }\n\n /* c8 ignore start */ // copy paste from img.src, already covered\n get disabled() { return booleanAttribute.get(this, 'disabled'); }\n set disabled(value) { booleanAttribute.set(this, 'disabled', value); }\n\n get href() { return stringAttribute.get(this, 'href').trim(); }\n set href(value) { stringAttribute.set(this, 'href', value); }\n\n get hreflang() { return stringAttribute.get(this, 'hreflang'); }\n set hreflang(value) { stringAttribute.set(this, 'hreflang', value); }\n\n get media() { return stringAttribute.get(this, 'media'); }\n set media(value) { stringAttribute.set(this, 'media', value); }\n\n get rel() { return stringAttribute.get(this, 'rel'); }\n set rel(value) { stringAttribute.set(this, 'rel', value); }\n\n get type() { return stringAttribute.get(this, 'type'); }\n set type(value) { stringAttribute.set(this, 'type', value); }\n /* c8 ignore stop */\n\n}\n\nregisterHTMLClass(tagName, HTMLLinkElement);\n\nexport {HTMLLinkElement};\n",
176
+ "import {HTMLElement} from './element.js';\nimport {registerHTMLClass} from '../shared/register-html-class.js';\n\nconst tagName = 'slot';\n\n/**\n * @implements globalThis.HTMLSlotElement\n */\nclass HTMLSlotElement extends HTMLElement {\n constructor(ownerDocument, localName = tagName) {\n super(ownerDocument, localName);\n }\n\n /* c8 ignore start */\n get name() { return this.getAttribute('name'); }\n set name(value) { this.setAttribute('name', value); }\n\n assign() {}\n\n assignedNodes(options) {\n const isNamedSlot = !!this.name;\n const hostChildNodes = this.getRootNode().host?.childNodes ?? [];\n let slottables;\n\n if (isNamedSlot) {\n slottables = [...hostChildNodes].filter(node => node.slot === this.name);\n } else {\n slottables = [...hostChildNodes].filter(node => !node.slot);\n }\n\n if (options?.flatten) {\n const result = [];\n\n // Element and Text nodes are slottables. A slot can be a slottable.\n for (let slottable of slottables) {\n if (slottable.localName === 'slot') {\n result.push(...slottable.assignedNodes({ flatten: true }));\n } else {\n result.push(slottable);\n }\n }\n\n slottables = result;\n }\n\n // If no assigned nodes are found, it returns the slot's fallback content.\n return slottables.length ? slottables : [...this.childNodes];\n }\n\n assignedElements(options) {\n const slottables = this.assignedNodes(options).filter(n => n.nodeType === 1);\n\n // If no assigned elements are found, it returns the slot's fallback content.\n return slottables.length ? slottables : [...this.children];\n }\n /* c8 ignore stop */\n}\n\nregisterHTMLClass(tagName, HTMLSlotElement);\n\nexport {HTMLSlotElement};\n",
177
+ "import {HTMLElement} from './element.js';\n\n/**\n * @implements globalThis.HTMLFormElement\n */\nexport class HTMLFormElement extends HTMLElement {\n constructor(ownerDocument, localName = 'form') {\n super(ownerDocument, localName);\n }\n}\n",
178
+ "import {registerHTMLClass} from '../shared/register-html-class.js';\nimport {numericAttribute, stringAttribute} from '../shared/attributes.js';\n\nimport {HTMLElement} from './element.js';\n\nconst tagName = 'img';\n\n/**\n * @implements globalThis.HTMLImageElement\n */\nclass HTMLImageElement extends HTMLElement {\n constructor(ownerDocument, localName = tagName) {\n super(ownerDocument, localName);\n }\n\n /* c8 ignore start */\n get alt() { return stringAttribute.get(this, 'alt'); }\n set alt(value) { stringAttribute.set(this, 'alt', value); }\n\n get sizes() { return stringAttribute.get(this, 'sizes'); }\n set sizes(value) { stringAttribute.set(this, 'sizes', value); }\n\n get src() { return stringAttribute.get(this, 'src'); }\n set src(value) { stringAttribute.set(this, 'src', value); }\n\n get srcset() { return stringAttribute.get(this, 'srcset'); }\n set srcset(value) { stringAttribute.set(this, 'srcset', value); }\n\n get title() { return stringAttribute.get(this, 'title'); }\n set title(value) { stringAttribute.set(this, 'title', value); }\n\n get width() { return numericAttribute.get(this, 'width'); }\n set width(value) { numericAttribute.set(this, 'width', value); }\n\n get height() { return numericAttribute.get(this, 'height'); }\n set height(value) { numericAttribute.set(this, 'height', value); }\n /* c8 ignore stop */\n}\n\nregisterHTMLClass(tagName, HTMLImageElement);\n\nexport {HTMLImageElement};\n",
179
+ "import {HTMLElement} from './element.js';\n\n/**\n * @implements globalThis.HTMLPreElement\n */\nexport class HTMLPreElement extends HTMLElement {\n constructor(ownerDocument, localName = 'pre') {\n super(ownerDocument, localName);\n }\n}\n",
180
+ "import {HTMLElement} from './element.js';\n\n/**\n * @implements globalThis.HTMLUListElement\n */\nexport class HTMLUListElement extends HTMLElement {\n constructor(ownerDocument, localName = 'ul') {\n super(ownerDocument, localName);\n }\n}\n",
181
+ "import {HTMLElement} from './element.js';\nimport {registerHTMLClass} from '../shared/register-html-class.js';\nimport { stringAttribute } from '../shared/attributes.js';\n\nconst tagName = 'meta'\n/**\n * @implements globalThis.HTMLMetaElement\n */\nexport class HTMLMetaElement extends HTMLElement {\n constructor(ownerDocument, localName =tagName) {\n super(ownerDocument, localName);\n }\n\n /* c8 ignore start */\n get name() { return stringAttribute.get(this, 'name'); }\n set name(value) { stringAttribute.set(this, 'name', value); }\n\n get httpEquiv() { return stringAttribute.get(this, 'http-equiv'); }\n set httpEquiv(value) { stringAttribute.set(this, 'http-equiv', value); }\n\n get content() { return stringAttribute.get(this, 'content'); }\n set content(value) { stringAttribute.set(this, 'content', value); }\n\n get charset() { return stringAttribute.get(this, 'charset'); }\n set charset(value) { stringAttribute.set(this, 'charset', value); }\n\n get media() { return stringAttribute.get(this, 'media'); }\n set media(value) { stringAttribute.set(this, 'media', value); }\n /* c8 ignore stop */\n\n}\n\nregisterHTMLClass(tagName, HTMLMetaElement);\n\n",
182
+ "import {HTMLElement} from './element.js';\n\n/**\n * @implements globalThis.HTMLPictureElement\n */\nexport class HTMLPictureElement extends HTMLElement {\n constructor(ownerDocument, localName = 'picture') {\n super(ownerDocument, localName);\n }\n}\n",
183
+ "import {HTMLElement} from './element.js';\n\n/**\n * @implements globalThis.HTMLAreaElement\n */\nexport class HTMLAreaElement extends HTMLElement {\n constructor(ownerDocument, localName = 'area') {\n super(ownerDocument, localName);\n }\n}\n",
184
+ "import {HTMLElement} from './element.js';\n\n/**\n * @implements globalThis.HTMLOListElement\n */\nexport class HTMLOListElement extends HTMLElement {\n constructor(ownerDocument, localName = 'ol') {\n super(ownerDocument, localName);\n }\n}\n",
185
+ "import {HTMLElement} from './element.js';\n\n/**\n * @implements globalThis.HTMLTableCaptionElement\n */\nexport class HTMLTableCaptionElement extends HTMLElement {\n constructor(ownerDocument, localName = 'caption') {\n super(ownerDocument, localName);\n }\n}\n",
186
+ "import {registerHTMLClass} from '../shared/register-html-class.js';\nimport {stringAttribute} from '../shared/attributes.js';\n\nimport {HTMLElement} from './element.js';\n\nconst tagName = 'a';\n\n/**\n * @implements globalThis.HTMLAnchorElement\n */\nclass HTMLAnchorElement extends HTMLElement {\n constructor(ownerDocument, localName = tagName) {\n super(ownerDocument, localName);\n }\n\n /* c8 ignore start */ // copy paste from img.src, already covered\n get href() { return encodeURI(decodeURI(stringAttribute.get(this, 'href'))).trim(); }\n set href(value) { stringAttribute.set(this, 'href', decodeURI(value)); }\n\n get download() { return encodeURI(decodeURI(stringAttribute.get(this, 'download'))); }\n set download(value) { stringAttribute.set(this, 'download', decodeURI(value)); }\n\n get target() { return stringAttribute.get(this, 'target'); }\n set target(value) { stringAttribute.set(this, 'target', value); }\n\n get type() { return stringAttribute.get(this, 'type'); }\n set type(value) { stringAttribute.set(this, 'type', value); }\n\n get rel() { return stringAttribute.get(this, 'rel'); }\n set rel(value) { stringAttribute.set(this, 'rel', value); }\n /* c8 ignore stop */\n\n}\n\nregisterHTMLClass(tagName, HTMLAnchorElement);\n\nexport {HTMLAnchorElement};\n",
187
+ "import {HTMLElement} from './element.js';\n\n/**\n * @implements globalThis.HTMLLabelElement\n */\nexport class HTMLLabelElement extends HTMLElement {\n constructor(ownerDocument, localName = 'label') {\n super(ownerDocument, localName);\n }\n}\n",
188
+ "import {HTMLElement} from './element.js';\n\n/**\n * @implements globalThis.HTMLUnknownElement\n */\nexport class HTMLUnknownElement extends HTMLElement {\n constructor(ownerDocument, localName = 'unknown') {\n super(ownerDocument, localName);\n }\n}\n",
189
+ "import {HTMLElement} from './element.js';\n\n/**\n * @implements globalThis.HTMLModElement\n */\nexport class HTMLModElement extends HTMLElement {\n constructor(ownerDocument, localName = 'mod') {\n super(ownerDocument, localName);\n }\n}\n",
190
+ "import {HTMLElement} from './element.js';\n\n/**\n * @implements globalThis.HTMLDetailsElement\n */\nexport class HTMLDetailsElement extends HTMLElement {\n constructor(ownerDocument, localName = 'details') {\n super(ownerDocument, localName);\n }\n}\n",
191
+ "import {registerHTMLClass} from '../shared/register-html-class.js';\nimport {stringAttribute} from '../shared/attributes.js';\n\nimport {HTMLElement} from './element.js';\n\nconst tagName = 'source';\n\n/**\n * @implements globalThis.HTMLSourceElement\n */\nclass HTMLSourceElement extends HTMLElement {\n constructor(ownerDocument, localName = tagName) {\n super(ownerDocument, localName);\n }\n\n /* c8 ignore start */\n get src() { return stringAttribute.get(this, 'src'); }\n set src(value) { stringAttribute.set(this, 'src', value); }\n\n get srcset() { return stringAttribute.get(this, 'srcset'); }\n set srcset(value) { stringAttribute.set(this, 'srcset', value); }\n\n get sizes() { return stringAttribute.get(this, 'sizes'); }\n set sizes(value) { stringAttribute.set(this, 'sizes', value); }\n\n get type() { return stringAttribute.get(this, 'type'); }\n set type(value) { stringAttribute.set(this, 'type', value); }\n /* c8 ignore stop */\n}\n\nregisterHTMLClass(tagName, HTMLSourceElement);\n\nexport {HTMLSourceElement};\n",
192
+ "import {HTMLElement} from './element.js';\n\n/**\n * @implements globalThis.HTMLTrackElement\n */\nexport class HTMLTrackElement extends HTMLElement {\n constructor(ownerDocument, localName = 'track') {\n super(ownerDocument, localName);\n }\n}\n",
193
+ "import {HTMLElement} from './element.js';\n\n/**\n * @implements globalThis.HTMLMarqueeElement\n */\nexport class HTMLMarqueeElement extends HTMLElement {\n constructor(ownerDocument, localName = 'marquee') {\n super(ownerDocument, localName);\n }\n}\n",
194
+ "import {HTMLElement} from '../html/element.js';\nimport {HTMLTemplateElement} from '../html/template-element.js';\nimport {HTMLHtmlElement} from '../html/html-element.js';\nimport {HTMLScriptElement} from '../html/script-element.js';\nimport {HTMLFrameElement} from '../html/frame-element.js';\nimport {HTMLIFrameElement} from '../html/i-frame-element.js';\nimport {HTMLObjectElement} from '../html/object-element.js';\nimport {HTMLHeadElement} from '../html/head-element.js';\nimport {HTMLBodyElement} from '../html/body-element.js';\nimport {HTMLStyleElement} from '../html/style-element.js';\nimport {HTMLTimeElement} from '../html/time-element.js';\nimport {HTMLFieldSetElement} from '../html/field-set-element.js';\nimport {HTMLEmbedElement} from '../html/embed-element.js';\nimport {HTMLHRElement} from '../html/hr-element.js';\nimport {HTMLProgressElement} from '../html/progress-element.js';\nimport {HTMLParagraphElement} from '../html/paragraph-element.js';\nimport {HTMLTableElement} from '../html/table-element.js';\nimport {HTMLFrameSetElement} from '../html/frame-set-element.js';\nimport {HTMLLIElement} from '../html/li-element.js';\nimport {HTMLBaseElement} from '../html/base-element.js';\nimport {HTMLDataListElement} from '../html/data-list-element.js';\nimport {HTMLInputElement} from '../html/input-element.js';\nimport {HTMLParamElement} from '../html/param-element.js';\nimport {HTMLMediaElement} from '../html/media-element.js';\nimport {HTMLAudioElement} from '../html/audio-element.js';\nimport {HTMLHeadingElement} from '../html/heading-element.js';\nimport {HTMLDirectoryElement} from '../html/directory-element.js';\nimport {HTMLQuoteElement} from '../html/quote-element.js';\nimport {HTMLCanvasElement} from '../html/canvas-element.js';\nimport {HTMLLegendElement} from '../html/legend-element.js';\nimport {HTMLOptionElement} from '../html/option-element.js';\nimport {HTMLSpanElement} from '../html/span-element.js';\nimport {HTMLMeterElement} from '../html/meter-element.js';\nimport {HTMLVideoElement} from '../html/video-element.js';\nimport {HTMLTableCellElement} from '../html/table-cell-element.js';\nimport {HTMLTitleElement} from '../html/title-element.js';\nimport {HTMLOutputElement} from '../html/output-element.js';\nimport {HTMLTableRowElement} from '../html/table-row-element.js';\nimport {HTMLDataElement} from '../html/data-element.js';\nimport {HTMLMenuElement} from '../html/menu-element.js';\nimport {HTMLSelectElement} from '../html/select-element.js';\nimport {HTMLBRElement} from '../html/br-element.js';\nimport {HTMLButtonElement} from '../html/button-element.js';\nimport {HTMLMapElement} from '../html/map-element.js';\nimport {HTMLOptGroupElement} from '../html/opt-group-element.js';\nimport {HTMLDListElement} from '../html/d-list-element.js';\nimport {HTMLTextAreaElement} from '../html/text-area-element.js';\nimport {HTMLFontElement} from '../html/font-element.js';\nimport {HTMLDivElement} from '../html/div-element.js';\nimport {HTMLLinkElement} from '../html/link-element.js';\nimport {HTMLSlotElement} from '../html/slot-element.js';\nimport {HTMLFormElement} from '../html/form-element.js';\nimport {HTMLImageElement} from '../html/image-element.js';\nimport {HTMLPreElement} from '../html/pre-element.js';\nimport {HTMLUListElement} from '../html/u-list-element.js';\nimport {HTMLMetaElement} from '../html/meta-element.js';\nimport {HTMLPictureElement} from '../html/picture-element.js';\nimport {HTMLAreaElement} from '../html/area-element.js';\nimport {HTMLOListElement} from '../html/o-list-element.js';\nimport {HTMLTableCaptionElement} from '../html/table-caption-element.js';\nimport {HTMLAnchorElement} from '../html/anchor-element.js';\nimport {HTMLLabelElement} from '../html/label-element.js';\nimport {HTMLUnknownElement} from '../html/unknown-element.js';\nimport {HTMLModElement} from '../html/mod-element.js';\nimport {HTMLDetailsElement} from '../html/details-element.js';\nimport {HTMLSourceElement} from '../html/source-element.js';\nimport {HTMLTrackElement} from '../html/track-element.js';\nimport {HTMLMarqueeElement} from '../html/marquee-element.js';\n\nexport {\n HTMLElement,\n HTMLTemplateElement,\n HTMLHtmlElement,\n HTMLScriptElement,\n HTMLFrameElement,\n HTMLIFrameElement,\n HTMLObjectElement,\n HTMLHeadElement,\n HTMLBodyElement,\n HTMLStyleElement,\n HTMLTimeElement,\n HTMLFieldSetElement,\n HTMLEmbedElement,\n HTMLHRElement,\n HTMLProgressElement,\n HTMLParagraphElement,\n HTMLTableElement,\n HTMLFrameSetElement,\n HTMLLIElement,\n HTMLBaseElement,\n HTMLDataListElement,\n HTMLInputElement,\n HTMLParamElement,\n HTMLMediaElement,\n HTMLAudioElement,\n HTMLHeadingElement,\n HTMLDirectoryElement,\n HTMLQuoteElement,\n HTMLCanvasElement,\n HTMLLegendElement,\n HTMLOptionElement,\n HTMLSpanElement,\n HTMLMeterElement,\n HTMLVideoElement,\n HTMLTableCellElement,\n HTMLTitleElement,\n HTMLOutputElement,\n HTMLTableRowElement,\n HTMLDataElement,\n HTMLMenuElement,\n HTMLSelectElement,\n HTMLBRElement,\n HTMLButtonElement,\n HTMLMapElement,\n HTMLOptGroupElement,\n HTMLDListElement,\n HTMLTextAreaElement,\n HTMLFontElement,\n HTMLDivElement,\n HTMLLinkElement,\n HTMLSlotElement,\n HTMLFormElement,\n HTMLImageElement,\n HTMLPreElement,\n HTMLUListElement,\n HTMLMetaElement,\n HTMLPictureElement,\n HTMLAreaElement,\n HTMLOListElement,\n HTMLTableCaptionElement,\n HTMLAnchorElement,\n HTMLLabelElement,\n HTMLUnknownElement,\n HTMLModElement,\n HTMLDetailsElement,\n HTMLSourceElement,\n HTMLTrackElement,\n HTMLMarqueeElement\n};\n\nexport const HTMLClasses = {\n HTMLElement,\n HTMLTemplateElement,\n HTMLHtmlElement,\n HTMLScriptElement,\n HTMLFrameElement,\n HTMLIFrameElement,\n HTMLObjectElement,\n HTMLHeadElement,\n HTMLBodyElement,\n HTMLStyleElement,\n HTMLTimeElement,\n HTMLFieldSetElement,\n HTMLEmbedElement,\n HTMLHRElement,\n HTMLProgressElement,\n HTMLParagraphElement,\n HTMLTableElement,\n HTMLFrameSetElement,\n HTMLLIElement,\n HTMLBaseElement,\n HTMLDataListElement,\n HTMLInputElement,\n HTMLParamElement,\n HTMLMediaElement,\n HTMLAudioElement,\n HTMLHeadingElement,\n HTMLDirectoryElement,\n HTMLQuoteElement,\n HTMLCanvasElement,\n HTMLLegendElement,\n HTMLOptionElement,\n HTMLSpanElement,\n HTMLMeterElement,\n HTMLVideoElement,\n HTMLTableCellElement,\n HTMLTitleElement,\n HTMLOutputElement,\n HTMLTableRowElement,\n HTMLDataElement,\n HTMLMenuElement,\n HTMLSelectElement,\n HTMLBRElement,\n HTMLButtonElement,\n HTMLMapElement,\n HTMLOptGroupElement,\n HTMLDListElement,\n HTMLTextAreaElement,\n HTMLFontElement,\n HTMLDivElement,\n HTMLLinkElement,\n HTMLSlotElement,\n HTMLFormElement,\n HTMLImageElement,\n HTMLPreElement,\n HTMLUListElement,\n HTMLMetaElement,\n HTMLPictureElement,\n HTMLAreaElement,\n HTMLOListElement,\n HTMLTableCaptionElement,\n HTMLAnchorElement,\n HTMLLabelElement,\n HTMLUnknownElement,\n HTMLModElement,\n HTMLDetailsElement,\n HTMLSourceElement,\n HTMLTrackElement,\n HTMLMarqueeElement\n};\n",
195
+ "// TODO: ensure all these are text only\n// /^(?:plaintext|script|style|textarea|title|xmp)$/i\n\nconst voidElements = {test: () => true};\nexport const Mime = {\n 'text/html': {\n docType: '<!DOCTYPE html>',\n ignoreCase: true,\n voidElements: /^(?:area|base|br|col|embed|hr|img|input|keygen|link|menuitem|meta|param|source|track|wbr)$/i\n },\n 'image/svg+xml': {\n docType: '<?xml version=\"1.0\" encoding=\"utf-8\"?>',\n ignoreCase: false,\n voidElements\n },\n 'text/xml': {\n docType: '<?xml version=\"1.0\" encoding=\"utf-8\"?>',\n ignoreCase: false,\n voidElements\n },\n 'application/xml': {\n docType: '<?xml version=\"1.0\" encoding=\"utf-8\"?>',\n ignoreCase: false,\n voidElements\n },\n 'application/xhtml+xml': {\n docType: '<?xml version=\"1.0\" encoding=\"utf-8\"?>',\n ignoreCase: false,\n voidElements\n }\n};\n",
196
+ "// https://dom.spec.whatwg.org/#interface-customevent\n\n/* c8 ignore start */\n\n// One day Node might have CustomEvent too\n\nimport {Event} from './event.js';\n\n/**\n * @implements globalThis.CustomEvent\n */\nexport class CustomEvent extends Event {\n constructor(type, eventInitDict = {}) {\n super(type, eventInitDict);\n this.detail = eventInitDict.detail;\n }\n}\n\n/* c8 ignore stop */\n",
197
+ "// https://dom.spec.whatwg.org/#interface-customevent\n\n/* c8 ignore start */\n\n// One day Node might have CustomEvent too\n\nimport {Event} from './event.js';\n\n/**\n * @implements globalThis.InputEvent\n */\nexport class InputEvent extends Event {\n constructor(type, inputEventInit = {}) {\n super(type, inputEventInit);\n this.inputType = inputEventInit.inputType;\n this.data = inputEventInit.data;\n this.dataTransfer = inputEventInit.dataTransfer;\n this.isComposing = inputEventInit.isComposing || false;\n this.ranges = inputEventInit.ranges;\n }\n}\n/* c8 ignore stop */\n",
198
+ "import {HTMLImageElement} from '../html/image-element.js';\n\nexport const ImageClass = ownerDocument =>\n/**\n * @implements globalThis.Image\n */\nclass Image extends HTMLImageElement {\n constructor(width, height) {\n super(ownerDocument);\n switch (arguments.length) {\n case 1:\n this.height = width;\n this.width = width;\n break;\n case 2:\n this.height = height;\n this.width = width;\n break;\n }\n }\n};\n",
199
+ "// https://dom.spec.whatwg.org/#concept-live-range\n\nimport {END, NEXT, PREV, START} from '../shared/symbols.js';\n\nimport {SVGElement} from '../svg/element.js';\n\nimport {getEnd, htmlToFragment, setAdjacent} from '../shared/utils.js';\n\nconst deleteContents = ({[START]: start, [END]: end}, fragment = null) => {\n setAdjacent(start[PREV], end[NEXT]);\n do {\n const after = getEnd(start);\n const next = after === end ? after : after[NEXT];\n if (fragment)\n fragment.insertBefore(start, fragment[END]);\n else\n start.remove();\n start = next;\n } while (start !== end);\n};\n\n/**\n * @implements globalThis.Range\n */\nexport class Range {\n constructor() {\n this[START] = null;\n this[END] = null;\n this.commonAncestorContainer = null;\n }\n\n /* TODO: this is more complicated than it looks\n setStart(node, offset) {\n this[START] = node.childNodes[offset];\n }\n\n setEnd(node, offset) {\n this[END] = getEnd(node.childNodes[offset]);\n }\n //*/\n\n insertNode(newNode) {\n this[END].parentNode.insertBefore(newNode, this[START]);\n }\n\n selectNode(node) {\n this[START] = node;\n this[END] = getEnd(node);\n }\n\n // TODO: SVG elements should then create contextual fragments\n // that return SVG nodes\n selectNodeContents(node) {\n this.selectNode(node);\n this.commonAncestorContainer = node;\n }\n\n surroundContents(parentNode) {\n parentNode.replaceChildren(this.extractContents());\n }\n\n setStartBefore(node) {\n this[START] = node;\n }\n\n setStartAfter(node) {\n this[START] = node.nextSibling;\n }\n\n setEndBefore(node) {\n this[END] = getEnd(node.previousSibling);\n }\n\n setEndAfter(node) {\n this[END] = getEnd(node);\n }\n\n cloneContents() {\n let {[START]: start, [END]: end} = this;\n const fragment = start.ownerDocument.createDocumentFragment();\n while (start !== end) {\n fragment.insertBefore(start.cloneNode(true), fragment[END]);\n start = getEnd(start);\n if (start !== end)\n start = start[NEXT];\n }\n return fragment;\n }\n\n deleteContents() {\n deleteContents(this);\n }\n\n extractContents() {\n const fragment = this[START].ownerDocument.createDocumentFragment();\n deleteContents(this, fragment);\n return fragment;\n }\n\n createContextualFragment(html) {\n const { commonAncestorContainer: doc } = this;\n const isSVG = 'ownerSVGElement' in doc;\n const document = isSVG ? doc.ownerDocument : doc;\n let content = htmlToFragment(document, html);\n if (isSVG) {\n const childNodes = [...content.childNodes];\n content = document.createDocumentFragment();\n Object.setPrototypeOf(content, SVGElement.prototype);\n content.ownerSVGElement = document;\n for (const child of childNodes) {\n Object.setPrototypeOf(child, SVGElement.prototype);\n child.ownerSVGElement = document;\n content.appendChild(child);\n }\n }\n else\n this.selectNode(content);\n return content;\n }\n\n cloneRange() {\n const range = new Range;\n range[START] = this[START];\n range[END] = this[END];\n return range;\n }\n}\n",
200
+ "import {\n DOCUMENT_NODE,\n ELEMENT_NODE,\n TEXT_NODE,\n CDATA_SECTION_NODE,\n COMMENT_NODE,\n SHOW_ALL,\n SHOW_ELEMENT,\n SHOW_CDATA_SECTION,\n SHOW_COMMENT,\n SHOW_TEXT\n} from '../shared/constants.js';\n\nimport {PRIVATE, END, NEXT} from '../shared/symbols.js';\n\nconst isOK = ({nodeType}, mask) => {\n switch (nodeType) {\n case ELEMENT_NODE:\n return mask & SHOW_ELEMENT;\n case TEXT_NODE:\n return mask & SHOW_TEXT;\n case COMMENT_NODE:\n return mask & SHOW_COMMENT;\n case CDATA_SECTION_NODE:\n return mask & SHOW_CDATA_SECTION;\n }\n return 0;\n};\n\n/**\n * @implements globalThis.TreeWalker\n */\nexport class TreeWalker {\n constructor(root, whatToShow = SHOW_ALL) {\n this.root = root;\n this.currentNode = root;\n this.whatToShow = whatToShow;\n let {[NEXT]: next, [END]: end} = root;\n if (root.nodeType === DOCUMENT_NODE) {\n const {documentElement} = root;\n next = documentElement;\n end = documentElement[END];\n }\n const nodes = [];\n while (next && next !== end) {\n if (isOK(next, whatToShow))\n nodes.push(next);\n next = next[NEXT];\n }\n this[PRIVATE] = {i: 0, nodes};\n }\n\n nextNode() {\n const $ = this[PRIVATE];\n this.currentNode = $.i < $.nodes.length ? $.nodes[$.i++] : null;\n return this.currentNode;\n }\n}\n",
201
+ "import {DOCUMENT_NODE, DOCUMENT_FRAGMENT_NODE, DOCUMENT_TYPE_NODE, ELEMENT_NODE, SVG_NAMESPACE} from '../shared/constants.js';\n\nimport {\n CUSTOM_ELEMENTS, DOM_PARSER, GLOBALS, IMAGE, MUTATION_OBSERVER,\n DOCTYPE, END, NEXT, MIME, EVENT_TARGET, UPGRADE\n} from '../shared/symbols.js';\n\nimport {Facades, illegalConstructor} from '../shared/facades.js';\nimport {HTMLClasses} from '../shared/html-classes.js';\nimport {Mime} from '../shared/mime.js';\nimport {knownSiblings} from '../shared/utils.js';\nimport {assign, create, defineProperties, setPrototypeOf} from '../shared/object.js';\n\nimport {NonElementParentNode} from '../mixin/non-element-parent-node.js';\n\nimport {SVGElement} from '../svg/element.js';\n\nimport {Attr} from './attr.js';\nimport {CDATASection} from './cdata-section.js'\nimport {Comment} from './comment.js';\nimport {CustomElementRegistry} from './custom-element-registry.js';\nimport {CustomEvent} from './custom-event.js';\nimport {DocumentFragment} from './document-fragment.js';\nimport {DocumentType} from './document-type.js';\nimport {Element} from './element.js';\nimport {Event} from './event.js';\nimport {EventTarget} from './event-target.js';\nimport {InputEvent} from './input-event.js';\nimport {ImageClass} from './image.js';\nimport {MutationObserverClass} from './mutation-observer.js';\nimport {NamedNodeMap} from './named-node-map.js';\nimport {NodeList} from './node-list.js';\nimport {Range} from './range.js';\nimport {Text} from './text.js';\nimport {TreeWalker} from './tree-walker.js';\n\nconst query = (method, ownerDocument, selectors) => {\n let {[NEXT]: next, [END]: end} = ownerDocument;\n return method.call({ownerDocument, [NEXT]: next, [END]: end}, selectors);\n};\n\nconst globalExports = assign(\n {},\n Facades,\n HTMLClasses,\n {\n CustomEvent,\n Event,\n EventTarget,\n InputEvent,\n NamedNodeMap,\n NodeList\n }\n);\n\nconst window = new WeakMap;\n\n/**\n * @implements globalThis.Document\n */\nexport class Document extends NonElementParentNode {\n constructor(type) {\n super(null, '#document', DOCUMENT_NODE);\n this[CUSTOM_ELEMENTS] = {active: false, registry: null};\n this[MUTATION_OBSERVER] = {active: false, class: null};\n this[MIME] = Mime[type];\n /** @type {DocumentType} */\n this[DOCTYPE] = null;\n this[DOM_PARSER] = null;\n this[GLOBALS] = null;\n this[IMAGE] = null;\n this[UPGRADE] = null;\n }\n\n /**\n * @type {globalThis.Document['defaultView']}\n */\n get defaultView() {\n if (!window.has(this))\n window.set(this, new Proxy(globalThis, {\n set: (target, name, value) => {\n switch (name) {\n case 'addEventListener':\n case 'removeEventListener':\n case 'dispatchEvent':\n this[EVENT_TARGET][name] = value;\n break;\n default:\n target[name] = value;\n break;\n }\n return true;\n },\n get: (globalThis, name) => {\n switch (name) {\n case 'addEventListener':\n case 'removeEventListener':\n case 'dispatchEvent':\n if (!this[EVENT_TARGET]) {\n const et = this[EVENT_TARGET] = new EventTarget;\n et.dispatchEvent = et.dispatchEvent.bind(et);\n et.addEventListener = et.addEventListener.bind(et);\n et.removeEventListener = et.removeEventListener.bind(et);\n }\n return this[EVENT_TARGET][name];\n case 'document':\n return this;\n /* c8 ignore start */\n case 'navigator':\n return {\n userAgent: 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36'\n };\n /* c8 ignore stop */\n case 'window':\n return window.get(this);\n case 'customElements':\n if (!this[CUSTOM_ELEMENTS].registry)\n this[CUSTOM_ELEMENTS] = new CustomElementRegistry(this);\n return this[CUSTOM_ELEMENTS];\n case 'performance':\n return globalThis.performance;\n case 'DOMParser':\n return this[DOM_PARSER];\n case 'Image':\n if (!this[IMAGE])\n this[IMAGE] = ImageClass(this);\n return this[IMAGE];\n case 'MutationObserver':\n if (!this[MUTATION_OBSERVER].class)\n this[MUTATION_OBSERVER] = new MutationObserverClass(this);\n return this[MUTATION_OBSERVER].class;\n }\n return (this[GLOBALS] && this[GLOBALS][name]) ||\n globalExports[name] ||\n globalThis[name];\n }\n }));\n return window.get(this);\n }\n\n get doctype() {\n const docType = this[DOCTYPE];\n if (docType)\n return docType;\n const {firstChild} = this;\n if (firstChild && firstChild.nodeType === DOCUMENT_TYPE_NODE)\n return (this[DOCTYPE] = firstChild);\n return null;\n }\n\n set doctype(value) {\n if (/^([a-z:]+)(\\s+system|\\s+public(\\s+\"([^\"]+)\")?)?(\\s+\"([^\"]+)\")?/i.test(value)) {\n const {$1: name, $4: publicId, $6: systemId} = RegExp;\n this[DOCTYPE] = new DocumentType(this, name, publicId, systemId);\n knownSiblings(this, this[DOCTYPE], this[NEXT]);\n }\n }\n\n get documentElement() {\n return this.firstElementChild;\n }\n\n get isConnected() { return true; }\n\n /**\n * @protected\n */\n _getParent() {\n return this[EVENT_TARGET];\n }\n\n createAttribute(name) { return new Attr(this, name); }\n createCDATASection(data) { return new CDATASection(this, data); }\n createComment(textContent) { return new Comment(this, textContent); }\n createDocumentFragment() { return new DocumentFragment(this); }\n createDocumentType(name, publicId, systemId) { return new DocumentType(this, name, publicId, systemId); }\n createElement(localName) { return new Element(this, localName); }\n createRange() {\n const range = new Range;\n range.commonAncestorContainer = this;\n return range;\n }\n createTextNode(textContent) { return new Text(this, textContent); }\n createTreeWalker(root, whatToShow = -1) { return new TreeWalker(root, whatToShow); }\n createNodeIterator(root, whatToShow = -1) { return this.createTreeWalker(root, whatToShow); }\n\n createEvent(name) {\n const event = create(name === 'Event' ? new Event('') : new CustomEvent(''));\n event.initEvent = event.initCustomEvent = (\n type,\n canBubble = false,\n cancelable = false,\n detail\n ) => {\n event.bubbles = !!canBubble;\n\n defineProperties(event, {\n type: {value: type},\n canBubble: {value: canBubble},\n cancelable: {value: cancelable},\n detail: {value: detail}\n });\n };\n return event;\n }\n\n cloneNode(deep = false) {\n const {\n constructor,\n [CUSTOM_ELEMENTS]: customElements,\n [DOCTYPE]: doctype\n } = this;\n const document = new constructor();\n document[CUSTOM_ELEMENTS] = customElements;\n if (deep) {\n const end = document[END];\n const {childNodes} = this;\n for (let {length} = childNodes, i = 0; i < length; i++)\n document.insertBefore(childNodes[i].cloneNode(true), end);\n if (doctype)\n document[DOCTYPE] = childNodes[0];\n }\n return document;\n }\n\n importNode(externalNode) {\n // important: keep the signature length as *one*\n // or it would behave like old IE or Edge with polyfills\n const deep = 1 < arguments.length && !!arguments[1];\n const node = externalNode.cloneNode(deep);\n const {[CUSTOM_ELEMENTS]: customElements} = this;\n const {active} = customElements;\n const upgrade = element => {\n const {ownerDocument, nodeType} = element;\n element.ownerDocument = this;\n if (active && ownerDocument !== this && nodeType === ELEMENT_NODE)\n customElements.upgrade(element);\n };\n upgrade(node);\n if (deep) {\n switch (node.nodeType) {\n case ELEMENT_NODE:\n case DOCUMENT_FRAGMENT_NODE: {\n let {[NEXT]: next, [END]: end} = node;\n while (next !== end) {\n if (next.nodeType === ELEMENT_NODE)\n upgrade(next);\n next = next[NEXT];\n }\n break;\n }\n }\n }\n return node;\n }\n\n toString() { return this.childNodes.join(''); }\n\n querySelector(selectors) {\n return query(super.querySelector, this, selectors);\n }\n\n querySelectorAll(selectors) {\n return query(super.querySelectorAll, this, selectors);\n }\n\n /* c8 ignore start */\n getElementsByTagNameNS(_, name) {\n return this.getElementsByTagName(name);\n }\n createAttributeNS(_, name) {\n return this.createAttribute(name);\n }\n createElementNS(nsp, localName, options) {\n return nsp === SVG_NAMESPACE ?\n new SVGElement(this, localName, null) :\n this.createElement(localName, options);\n }\n /* c8 ignore stop */\n}\n\nsetPrototypeOf(\n globalExports.Document = function Document() {\n illegalConstructor();\n },\n Document\n).prototype = Document.prototype;\n",
202
+ "import {ELEMENT_NODE} from '../shared/constants.js';\nimport {CUSTOM_ELEMENTS, END, NEXT} from '../shared/symbols.js';\nimport {htmlClasses} from '../shared/register-html-class.js';\n\nimport {Document} from '../interface/document.js';\nimport {NodeList} from '../interface/node-list.js';\nimport {customElements} from '../interface/custom-element-registry.js';\n\nimport {HTMLElement} from './element.js';\n\nconst createHTMLElement = (ownerDocument, builtin, localName, options) => {\n if (!builtin && htmlClasses.has(localName)) {\n const Class = htmlClasses.get(localName);\n return new Class(ownerDocument, localName);\n }\n const {[CUSTOM_ELEMENTS]: {active, registry}} = ownerDocument;\n if (active) {\n const ce = builtin ? options.is : localName;\n if (registry.has(ce)) {\n const {Class} = registry.get(ce);\n const element = new Class(ownerDocument, localName);\n customElements.set(element, {connected: false});\n return element;\n }\n }\n return new HTMLElement(ownerDocument, localName);\n};\n\n/**\n * @implements globalThis.HTMLDocument\n */\nexport class HTMLDocument extends Document {\n constructor() { super('text/html'); }\n\n get all() {\n const nodeList = new NodeList;\n let {[NEXT]: next, [END]: end} = this;\n while (next !== end) {\n switch (next.nodeType) {\n case ELEMENT_NODE:\n nodeList.push(next);\n break;\n }\n next = next[NEXT];\n }\n return nodeList;\n }\n\n /**\n * @type HTMLHeadElement\n */\n get head() {\n const {documentElement} = this;\n let {firstElementChild} = documentElement;\n if (!firstElementChild || firstElementChild.tagName !== 'HEAD') {\n firstElementChild = this.createElement('head');\n documentElement.prepend(firstElementChild);\n }\n return firstElementChild;\n }\n\n /**\n * @type HTMLBodyElement\n */\n get body() {\n const {head} = this;\n let {nextElementSibling} = head;\n if (!nextElementSibling || nextElementSibling.tagName !== 'BODY') {\n nextElementSibling = this.createElement('body');\n head.after(nextElementSibling);\n }\n return nextElementSibling;\n }\n\n /**\n * @type HTMLTitleElement\n */\n get title() {\n const {head} = this;\n return head.getElementsByTagName('title').at(0)?.textContent || '';\n }\n\n set title(textContent) {\n const {head} = this;\n let title = head.getElementsByTagName('title').at(0);\n if (title)\n title.textContent = textContent;\n else {\n head.insertBefore(\n this.createElement('title'),\n head.firstChild\n ).textContent = textContent;\n }\n }\n\n createElement(localName, options) {\n const builtin = !!(options && options.is);\n const element = createHTMLElement(this, builtin, localName, options);\n if (builtin)\n element.setAttribute('is', options.is);\n return element;\n }\n}\n",
203
+ "import {MIME} from '../shared/symbols.js';\nimport {Document} from '../interface/document.js';\n\n/**\n * @implements globalThis.Document\n */\nexport class SVGDocument extends Document {\n constructor() { super('image/svg+xml'); }\n toString() {\n return this[MIME].docType + super.toString();\n }\n}\n",
204
+ "import {MIME} from '../shared/symbols.js';\nimport {Document} from '../interface/document.js';\n\n/**\n * @implements globalThis.XMLDocument\n */\nexport class XMLDocument extends Document {\n constructor() { super('text/xml'); }\n toString() {\n return this[MIME].docType + super.toString();\n }\n}\n",
205
+ "import {DOM_PARSER, GLOBALS} from '../shared/symbols.js';\nimport {parseFromString} from '../shared/parse-from-string.js';\n\nimport {HTMLDocument} from '../html/document.js';\nimport {SVGDocument} from '../svg/document.js';\nimport {XMLDocument} from '../xml/document.js';\n\n/**\n * @implements globalThis.DOMParser\n */\nexport class DOMParser {\n\n /** @typedef {{ \"text/html\": HTMLDocument, \"image/svg+xml\": SVGDocument, \"text/xml\": XMLDocument }} MimeToDoc */\n /**\n * @template {keyof MimeToDoc} MIME\n * @param {string} markupLanguage\n * @param {MIME} mimeType\n * @returns {MimeToDoc[MIME]}\n */\n parseFromString(markupLanguage, mimeType, globals = null) {\n let isHTML = false, document;\n if (mimeType === 'text/html') {\n isHTML = true;\n document = new HTMLDocument;\n }\n else if (mimeType === 'image/svg+xml')\n document = new SVGDocument;\n else\n document = new XMLDocument;\n document[DOM_PARSER] = DOMParser;\n if (globals)\n document[GLOBALS] = globals;\n if (isHTML && markupLanguage === '...')\n markupLanguage = '<!doctype html><html><head></head><body></body></html>';\n return markupLanguage ?\n parseFromString(document, isHTML, markupLanguage) :\n document;\n }\n}\n",
206
+ "import {DOMParser} from './dom/parser.js';\nimport {Document as _Document} from './interface/document.js';\n\nimport {illegalConstructor} from './shared/facades.js';\nimport {setPrototypeOf} from './shared/object.js';\nexport {parseJSON, toJSON} from './shared/parse-json.js';\n\nexport * from './shared/facades.js';\nexport * from './shared/html-classes.js';\n\nexport {DOMParser};\n\nexport {CustomEvent} from './interface/custom-event.js';\nexport {Event} from './interface/event.js';\nexport {EventTarget} from './interface/event-target.js';\nexport {InputEvent} from './interface/input-event.js';\nexport {NodeList} from './interface/node-list.js';\nexport {NodeFilter} from './interface/node-filter.js';\n\nexport const parseHTML = (html, globals = null) => (new DOMParser).parseFromString(\n html, 'text/html', globals\n).defaultView;\n\nexport function Document() {\n illegalConstructor();\n}\n\nsetPrototypeOf(Document, _Document).prototype = _Document.prototype;\n",
207
+ "import { lookup } from \"node:dns/promises\";\nimport { isIP } from \"node:net\";\nimport { request as httpRequest } from \"node:http\";\nimport { request as httpsRequest } from \"node:https\";\nimport { brotliDecompressSync, gunzipSync, inflateSync } from \"node:zlib\";\n\nexport class WebReadError extends Error {\n constructor(\n public code: string,\n message: string,\n ) {\n super(message);\n this.name = \"WebReadError\";\n }\n}\nexport const isPublicWebAddress = (address: string) => {\n if (isIP(address) === 4) {\n const [a = 0, b = 0, c = 0] = address.split(\".\").map(Number);\n return !(\n a === 0 ||\n a === 10 ||\n a === 127 ||\n a >= 224 ||\n (a === 100 && b >= 64 && b <= 127) ||\n (a === 169 && b === 254) ||\n (a === 172 && b >= 16 && b <= 31) ||\n (a === 192 && (b === 168 || b === 0 || (b === 88 && c === 99))) ||\n (a === 198 && (b === 18 || b === 19 || (b === 51 && c === 100))) ||\n (a === 203 && b === 0 && c === 113)\n );\n }\n const value = address.toLowerCase();\n return (\n isIP(value) === 6 &&\n /^[23]/u.test(value) &&\n !/^2001:(?:db8|0):/u.test(value) &&\n !value.startsWith(\"2002:\")\n );\n};\nexport type WebRedirect = {\n from: string;\n to: string;\n kind: \"http\" | \"client\";\n status?: number;\n};\nexport type WebFetchResult = {\n redirects?: WebRedirect[];\n url: string;\n status: number;\n headers: Record<string, string>;\n body: Uint8Array;\n};\nexport type WebFetchOptions = {\n signal?: AbortSignal;\n redirect?: \"follow\" | \"manual\";\n maxBytes?: number;\n method?: string;\n body?: string;\n headers?: Record<string, string>;\n};\nexport const validatePublicWebUrl = (raw: string) => {\n let url: URL;\n try {\n url = new URL(raw);\n } catch {\n throw new WebReadError(\n \"invalid_url\",\n \"Provide a valid public HTTP or HTTPS URL.\",\n );\n }\n if (\n ![\"http:\", \"https:\"].includes(url.protocol) ||\n url.username ||\n url.password ||\n (url.port && ![\"80\", \"443\"].includes(url.port))\n )\n throw new WebReadError(\n \"blocked_url\",\n \"Only public HTTP/HTTPS URLs on standard ports are supported.\",\n );\n const host = url.hostname.replace(/^\\[|\\]$/gu, \"\").toLowerCase();\n if (\n host === \"localhost\" ||\n /\\.(?:localhost|local|internal)$/u.test(host) ||\n (isIP(host) && !isPublicWebAddress(host))\n )\n throw new WebReadError(\n \"blocked_url\",\n \"Private and local network destinations are not allowed.\",\n );\n return url;\n};\n/** Pin the validated DNS answer into the connection, including every redirect. */\nexport const fetchPublicWebResource = async (\n raw: string,\n options: WebFetchOptions = {},\n): Promise<WebFetchResult> => {\n const signal = options.signal ?? AbortSignal.timeout(15000);\n const maxBytes = options.maxBytes ?? 5_000_000;\n let url = validatePublicWebUrl(raw);\n const redirects: WebRedirect[] = [];\n let method = options.method ?? \"GET\";\n let body = options.body;\n for (let hop = 0; hop <= 5; hop++) {\n signal.throwIfAborted();\n const host = url.hostname.replace(/^\\[|\\]$/gu, \"\");\n const addresses = await lookup(host, { all: true });\n if (\n !addresses.length ||\n addresses.some(({ address }) => !isPublicWebAddress(address))\n )\n throw new WebReadError(\n \"blocked_url\",\n \"The destination resolved to a private or reserved network.\",\n );\n signal.throwIfAborted();\n const selected =\n addresses.find(({ family }) => family === 4) ?? addresses[0]!;\n const response = await new Promise<WebFetchResult>((resolve, reject) => {\n const request = url.protocol === \"https:\" ? httpsRequest : httpRequest;\n const req = request(\n {\n protocol: url.protocol,\n hostname: selected.address,\n family: selected.family,\n servername: isIP(host) ? undefined : host,\n port: url.port || undefined,\n path: url.pathname + url.search,\n method,\n signal,\n agent: false,\n headers: {\n \"user-agent\": \"onSparkReader/1.0 (+https://onspark.com)\",\n accept: \"*/*\",\n \"accept-encoding\": \"identity\",\n ...options.headers,\n host: url.host,\n },\n },\n (res) => {\n const chunks: Buffer[] = [];\n let bytes = 0;\n res.on(\"error\", reject);\n res.on(\"data\", (chunk: Buffer) => {\n bytes += chunk.length;\n if (bytes > maxBytes) {\n const error = new WebReadError(\n \"too_large\",\n \"The response exceeded the website read limit.\",\n );\n res.destroy(error);\n reject(error);\n } else chunks.push(chunk);\n });\n res.on(\"end\", () => {\n try {\n let data: Uint8Array = Buffer.concat(chunks);\n const encoding = res.headers[\"content-encoding\"];\n const limits = { maxOutputLength: maxBytes };\n if (encoding === \"gzip\") data = gunzipSync(data, limits);\n else if (encoding === \"br\")\n data = brotliDecompressSync(data, limits);\n else if (encoding === \"deflate\") data = inflateSync(data, limits);\n const headers = Object.fromEntries(\n Object.entries(res.headers)\n .filter(\n ([key]) =>\n ![\n \"content-encoding\",\n \"content-length\",\n \"transfer-encoding\",\n \"set-cookie\",\n ].includes(key),\n )\n .map(([key, value]) => [\n key,\n Array.isArray(value) ? value.join(\", \") : (value ?? \"\"),\n ]),\n );\n resolve({\n url: url.href,\n status: res.statusCode ?? 502,\n headers,\n body: data,\n });\n } catch (error) {\n reject(error);\n }\n });\n },\n );\n req.on(\"error\", reject);\n if (body) req.write(body);\n req.end();\n });\n if (options.redirect === \"manual\") return response;\n if (\n [301, 302, 303, 307, 308].includes(response.status) &&\n response.headers.location\n ) {\n const next = validatePublicWebUrl(\n new URL(response.headers.location, url).href,\n );\n redirects.push({\n from: url.href,\n to: next.href,\n kind: \"http\",\n status: response.status,\n });\n url = next;\n if (\n response.status === 303 ||\n ([301, 302].includes(response.status) && method === \"POST\")\n ) {\n method = \"GET\";\n body = undefined;\n }\n continue;\n }\n return { ...response, redirects };\n }\n throw new WebReadError(\n \"redirect_limit\",\n \"The site exceeded the redirect limit.\",\n );\n};\n",
208
+ "import { parseHTML } from \"linkedom\";\nimport { validatePublicWebUrl } from \"./transport\";\nexport type WebLink = { url: string; label: string };\nexport type WebImage = { url: string | null; label: string; context: string };\nexport type WebMedia = {\n kind: \"video\" | \"audio\" | \"embed\" | \"captions\";\n url: string;\n label: string;\n};\nexport type WebEvidence = {\n links: WebLink[];\n images: WebImage[];\n media: WebMedia[];\n canonicalUrl: string | null;\n};\nconst compact = (value: string | null | undefined) =>\n (value ?? \"\").replace(/\\s+/gu, \" \").trim().slice(0, 600);\nconst publicHref = (value: string | null, base: string) => {\n if (!value) return null;\n try {\n return validatePublicWebUrl(new URL(value, base).href).href;\n } catch {\n return null;\n }\n};\n/** Preserve semantic evidence that visible body text omits. Labels are not verified customer relationships. */\nexport const extractWebEvidence = (html: string, url: string): WebEvidence => {\n const { document } = parseHTML(html);\n const label = (element: Element) =>\n compact(element.getAttribute(\"aria-label\")) ||\n compact(element.getAttribute(\"title\")) ||\n compact(element.textContent) ||\n compact(element.querySelector(\"img\")?.getAttribute(\"alt\"));\n const links: WebLink[] = [];\n const seen = new Set<string>();\n for (const element of document.querySelectorAll(\"a[href]\")) {\n const href = publicHref(element.getAttribute(\"href\"), url);\n if (!href || seen.has(href) || links.length >= 100) continue;\n seen.add(href);\n links.push({ url: href, label: label(element) });\n }\n const images: WebImage[] = [];\n const seenImages = new Set<string>();\n for (const element of document.querySelectorAll(\"img,svg,[role=img]\")) {\n if (images.length >= 80) break;\n const imageLabel = compact(\n element.getAttribute(\"alt\") ||\n (element.getAttribute(\"aria-labelledby\") ?? \"\")\n .split(/\\s+/u)\n .filter(Boolean)\n .map((id) => document.getElementById(id)?.textContent ?? \"\")\n .join(\" \")\n .trim() ||\n element.getAttribute(\"aria-label\") ||\n element.querySelector(\"title\")?.textContent ||\n element.getAttribute(\"title\"),\n );\n const section = element.closest(\"section,figure,article\");\n const imageUrl = publicHref(\n element.getAttribute(\"src\") || element.getAttribute(\"data-src\"),\n url,\n );\n const context = compact(\n section?.querySelector(\"h1,h2,h3,figcaption\")?.textContent,\n );\n const key = `${imageUrl ?? \"\"}:${imageLabel}:${context}`;\n if ((!imageUrl && !imageLabel) || seenImages.has(key)) continue;\n seenImages.add(key);\n images.push({ url: imageUrl, label: imageLabel, context });\n }\n\n const media: WebMedia[] = [];\n for (const element of document.querySelectorAll(\n \"video,audio,video source,audio source,iframe,track\",\n )) {\n if (media.length >= 30) break;\n const href = publicHref(element.getAttribute(\"src\"), url);\n if (!href) continue;\n const tag = element.tagName.toLowerCase();\n media.push({\n kind:\n tag === \"track\"\n ? \"captions\"\n : tag === \"iframe\"\n ? \"embed\"\n : tag === \"audio\" || element.closest(\"audio\")\n ? \"audio\"\n : \"video\",\n url: href,\n label: compact(element.getAttribute(\"label\")) || label(element),\n });\n }\n return {\n links,\n images,\n media,\n canonicalUrl: publicHref(\n document.querySelector('link[rel=\"canonical\"]')?.getAttribute(\"href\") ??\n null,\n url,\n ),\n };\n};\n/** Navigation/footer text alone must not mask an empty or loading app root. */\nexport const hasIncompleteAppContent = (html: string) => {\n const { document } = parseHTML(html);\n if (!document.querySelector(\"script[src],script[type=module]\")) return false;\n const main = document.querySelector(\n \"main,[role=main],#root,#app,#__next,app-root\",\n );\n if (!main) return false;\n main\n .querySelectorAll(\"script,style,nav,header,footer\")\n .forEach((element) => element.remove());\n const text = compact(main.textContent);\n return (\n text.length < 100 || /^(?:loading|please wait)(?:[.\\s]|$)/iu.test(text)\n );\n};\n",
209
+ "import { readdir, readFile } from \"node:fs/promises\";\nimport { basename, extname, join, relative, resolve } from \"node:path\";\nimport { gunzipSync, inflateRawSync } from \"node:zlib\";\n\n// Opportunistic HTTP/2 multiplexing for outbound HTTPS (Bun 1.3.14+).\n// URL-source ingestion may receive a batch of same-origin URLs;\n// multiplexing eliminates per-request handshake. The `protocol` option\n// lands in @types/bun 1.3.14; widen locally for now. Hard-skip on\n// non-HTTPS — Bun's h2 client throws HTTP2Unsupported on h2c.\ntype H2Init = RequestInit & { protocol?: \"http2\" };\nconst h2IfHttps = (url: string): H2Init =>\n url.startsWith(\"https://\") ? { protocol: \"http2\" } : {};\nimport type {\n RAGChunkingOptions,\n RAGChunkingProfile,\n RAGChunkingProfileInput,\n RAGChunkingProfileRegistration,\n RAGChunkingRegistryLike,\n RAGContentFormat,\n RAGArchiveExpander,\n RAGArchiveEntry,\n RAGDirectoryIngestInput,\n RAGDocumentChunk,\n RAGDocumentFileInput,\n RAGDocumentIngestInput,\n RAGDocumentUploadIngestInput,\n RAGDocumentUploadInput,\n RAGDocumentUrlInput,\n RAGDocumentUrlIngestInput,\n RAGExtractedFileDocument,\n RAGFileExtractionInput,\n RAGFileExtractor,\n RAGFileExtractorRegistration,\n RAGFileExtractorRegistryInput,\n RAGFileExtractorRegistryLike,\n RAGIngestDocument,\n RAGMediaTranscriber,\n RAGMediaTranscriptionResult,\n RAGOCRResult,\n RAGPDFOCRExtractorOptions,\n RAGOCRProvider,\n RAGPreparedDocument,\n} from \"../../types/engine\";\nimport {\n EXCLUDE_LAST_OFFSET,\n RAG_CHUNK_ID_PAD_LENGTH,\n RAG_DOCUMENT_ID_PREVIEW_LENGTH,\n RAG_DOCUMENT_SLUG_MAX_LENGTH,\n RAG_MIN_CHUNK_LENGTH_FLOOR,\n} from \"../internal/constants\";\n\nconst DEFAULT_MAX_CHUNK_LENGTH = 900;\nconst DEFAULT_CHUNK_OVERLAP = 120;\nconst DEFAULT_MIN_CHUNK_LENGTH = 80;\nconst DEFAULT_STRATEGY = \"paragraphs\";\nconst DEFAULT_BINARY_NAME = \"document\";\n\nconst TEXT_FILE_EXTENSIONS = new Set([\n \".txt\",\n \".md\",\n \".mdx\",\n \".html\",\n \".htm\",\n \".json\",\n \".jsonl\",\n \".ndjson\",\n \".csv\",\n \".tsv\",\n \".xml\",\n \".yaml\",\n \".yml\",\n \".log\",\n \".ts\",\n \".tsx\",\n \".js\",\n \".jsx\",\n]);\nconst OFFICE_FILE_EXTENSIONS = new Set([\n \".docx\",\n \".xlsx\",\n \".pptx\",\n \".odt\",\n \".ods\",\n \".odp\",\n]);\nconst LEGACY_DOCUMENT_FILE_EXTENSIONS = new Set([\n \".rtf\",\n \".doc\",\n \".xls\",\n \".ppt\",\n \".msg\",\n]);\nconst MAILBOX_CONTAINER_FILE_EXTENSIONS = new Set([\".pst\", \".ost\"]);\nconst EMAIL_FILE_EXTENSIONS = new Set([\".eml\", \".emlx\", \".mbox\", \".mbx\"]);\nconst EPUB_FILE_EXTENSIONS = new Set([\".epub\"]);\n\nconst PDF_FILE_EXTENSIONS = new Set([\".pdf\"]);\nconst AUDIO_FILE_EXTENSIONS = new Set([\n \".mp3\",\n \".wav\",\n \".m4a\",\n \".aac\",\n \".flac\",\n \".ogg\",\n \".opus\",\n]);\nconst VIDEO_FILE_EXTENSIONS = new Set([\n \".mp4\",\n \".mov\",\n \".mkv\",\n \".webm\",\n \".avi\",\n \".m4v\",\n]);\nconst IMAGE_FILE_EXTENSIONS = new Set([\n \".png\",\n \".jpg\",\n \".jpeg\",\n \".webp\",\n \".tiff\",\n \".tif\",\n \".bmp\",\n \".gif\",\n \".heic\",\n]);\nconst ARCHIVE_FILE_EXTENSIONS = new Set([\n \".zip\",\n \".tar\",\n \".gz\",\n \".tgz\",\n \".bz2\",\n \".xz\",\n]);\nconst TAR_FILE_EXTENSIONS = new Set([\".tar\"]);\nconst GZIP_FILE_EXTENSIONS = new Set([\".gz\", \".tgz\"]);\n\nconst HTML_ENTITY_REPLACEMENTS = [\n [/&nbsp;/gi, \" \"],\n [/&amp;/gi, \"&\"],\n [/&lt;/gi, \"<\"],\n [/&gt;/gi, \">\"],\n [/&quot;/gi, '\"'],\n [/&#39;/gi, \"'\"],\n [/&#x27;/gi, \"'\"],\n [/&#x2f;/gi, \"/\"],\n] as const;\n\nconst MAX_MEDIA_GROUP_CONTINUITY_GAP_MS = 3_000;\nconst MAX_MEDIA_BRIDGED_UNKNOWN_SEGMENTS = 2;\n\nconst normalizeWhitespace = (value: string) =>\n value\n .replace(/\\r\\n?/g, \"\\n\")\n .replace(/[ \\t\\f\\v]+/g, \" \")\n .replace(/ *\\n */g, \"\\n\")\n .replace(/\\n{3,}/g, \"\\n\\n\")\n .trim();\n\nconst formatMediaTimestampForIngest = (value: number | undefined) => {\n if (typeof value !== \"number\" || !Number.isFinite(value) || value < 0) {\n return undefined;\n }\n\n const totalSeconds = Math.floor(value / 1000);\n const minutes = Math.floor(totalSeconds / 60);\n const seconds = totalSeconds % 60;\n const milliseconds = Math.floor(value % 1000);\n\n return `${String(minutes).padStart(2, \"0\")}:${String(seconds).padStart(\n 2,\n \"0\",\n )}.${String(milliseconds).padStart(3, \"0\")}`;\n};\n\nconst normalizeMediaSpeaker = (value: unknown) =>\n typeof value === \"string\" && value.trim().length > 0\n ? normalizeWhitespace(value)\n : undefined;\n\nconst canonicalMediaSpeakerKey = (value: unknown) => {\n const normalized = normalizeMediaSpeaker(value);\n return typeof normalized === \"string\"\n ? normalized.toLowerCase().replace(/[^a-z0-9]+/gi, \"\")\n : undefined;\n};\n\nconst normalizeMediaTimestamp = (value: unknown) =>\n typeof value === \"number\" && Number.isFinite(value) && value >= 0\n ? value\n : undefined;\n\nconst normalizeMediaSegmentWindow = (\n startMs: number | undefined,\n endMs: number | undefined,\n) => {\n if (typeof startMs !== \"number\" && typeof endMs !== \"number\") {\n return { endMs, startMs };\n }\n\n if (\n typeof startMs === \"number\" &&\n typeof endMs === \"number\" &&\n endMs < startMs\n ) {\n return {\n startMs: undefined,\n endMs: undefined,\n };\n }\n\n return {\n startMs,\n endMs,\n };\n};\n\nconst canonicalMediaChannel = (value: unknown) => {\n if (typeof value !== \"string\") {\n return undefined;\n }\n\n switch (\n value\n .trim()\n .toLowerCase()\n .replace(/[\\s_-]+/g, \"\")\n ) {\n case \"l\":\n case \"left\":\n case \"ch1\":\n case \"channel1\":\n case \"one\":\n return \"left\";\n case \"r\":\n case \"right\":\n case \"ch2\":\n case \"channel2\":\n case \"two\":\n return \"right\";\n case \"m\":\n case \"mono\":\n case \"center\":\n case \"centre\":\n case \"middle\":\n return \"mono\";\n default:\n return value.trim().toLowerCase();\n }\n};\n\nconst normalizeMediaChannel = (value: unknown) => canonicalMediaChannel(value);\n\ntype RAGMediaTranscriptSegmentWithText = NonNullable<\n RAGMediaTranscriptionResult[\"segments\"]\n>[number];\n\ntype RAGMediaSegmentGroup = {\n channel?: string;\n endMs?: number;\n segments: RAGMediaTranscriptSegmentWithText[];\n speaker?: string;\n speakerKey?: string;\n startMs?: number;\n};\n\nconst buildMediaTimestampBoundary = (\n segments: RAGMediaSegmentGroup[\"segments\"],\n) => {\n let startMs: number | undefined;\n let endMs: number | undefined;\n\n for (const segment of segments) {\n if (\n typeof segment.startMs === \"number\" &&\n Number.isFinite(segment.startMs)\n ) {\n startMs =\n typeof startMs === \"number\"\n ? Math.min(startMs, segment.startMs)\n : segment.startMs;\n }\n }\n\n for (const segment of segments) {\n if (typeof segment.endMs === \"number\" && Number.isFinite(segment.endMs)) {\n endMs =\n typeof endMs === \"number\"\n ? Math.max(endMs, segment.endMs)\n : segment.endMs;\n }\n }\n\n return { endMs, startMs };\n};\n\nconst buildMediaSegmentGapFromPrevious = (\n startMs: number | undefined,\n previousGroupEndMs: number | undefined,\n) => {\n if (\n typeof startMs !== \"number\" ||\n typeof previousGroupEndMs !== \"number\" ||\n !Number.isFinite(startMs) ||\n !Number.isFinite(previousGroupEndMs)\n ) {\n return undefined;\n }\n\n // Only reward true adjacency or forward gaps. Overlaps should not look like\n // gapless continuity because reranking treats a zero gap as the strongest case.\n if (startMs < previousGroupEndMs) {\n return undefined;\n }\n\n return startMs - previousGroupEndMs;\n};\n\nconst buildMediaSegmentGapToNext = (\n endMs: number | undefined,\n nextGroupStartMs: number | undefined,\n) => {\n if (\n typeof endMs !== \"number\" ||\n typeof nextGroupStartMs !== \"number\" ||\n !Number.isFinite(endMs) ||\n !Number.isFinite(nextGroupStartMs)\n ) {\n return undefined;\n }\n\n // Mirror previous-gap semantics: only reward true forward adjacency or gaps.\n // Overlaps should not look like gapless continuity.\n if (nextGroupStartMs < endMs) {\n return undefined;\n }\n\n return nextGroupStartMs - endMs;\n};\n\nconst normalizeMediaSegment = (\n segment: NonNullable<RAGMediaTranscriptionResult[\"segments\"]>[number],\n): RAGMediaTranscriptSegmentWithText => {\n const normalizedTimestampWindow = normalizeMediaSegmentWindow(\n normalizeMediaTimestamp(segment.startMs),\n normalizeMediaTimestamp(segment.endMs),\n );\n\n return {\n ...segment,\n speaker: normalizeMediaSpeaker(segment.speaker),\n channel: canonicalMediaChannel(segment.channel),\n ...normalizedTimestampWindow,\n };\n};\n\nconst hasMediaSegmentTiming = (\n segment:\n | Pick<RAGMediaTranscriptSegmentWithText, \"startMs\" | \"endMs\">\n | undefined,\n) =>\n Boolean(\n segment &&\n ((typeof segment.startMs === \"number\" &&\n Number.isFinite(segment.startMs)) ||\n (typeof segment.endMs === \"number\" && Number.isFinite(segment.endMs))),\n );\n\nconst sortMediaTranscriptSegments = (\n segments: RAGMediaTranscriptSegmentWithText[],\n) => {\n const sortTimedRun = (\n run: Array<{\n index: number;\n segment: RAGMediaTranscriptSegmentWithText;\n }>,\n ) =>\n run.sort((left, right) => {\n const leftStart = left.segment.startMs;\n const rightStart = right.segment.startMs;\n const leftHasStart =\n typeof leftStart === \"number\" && Number.isFinite(leftStart);\n const rightHasStart =\n typeof rightStart === \"number\" && Number.isFinite(rightStart);\n\n if (leftHasStart && rightHasStart && leftStart !== rightStart) {\n return leftStart - rightStart;\n }\n\n if (leftHasStart !== rightHasStart) {\n return leftHasStart ? -1 : 1;\n }\n\n const leftEnd = left.segment.endMs;\n const rightEnd = right.segment.endMs;\n const leftHasEnd =\n typeof leftEnd === \"number\" && Number.isFinite(leftEnd);\n const rightHasEnd =\n typeof rightEnd === \"number\" && Number.isFinite(rightEnd);\n\n if (leftHasEnd && rightHasEnd && leftEnd !== rightEnd) {\n return leftEnd - rightEnd;\n }\n\n if (leftHasEnd !== rightHasEnd) {\n return leftHasEnd ? -1 : 1;\n }\n\n return left.index - right.index;\n });\n\n const ordered: RAGMediaTranscriptSegmentWithText[] = [];\n let timedRun: Array<{\n index: number;\n segment: RAGMediaTranscriptSegmentWithText;\n }> = [];\n\n for (const [index, segment] of segments.entries()) {\n if (hasMediaSegmentTiming(segment)) {\n timedRun.push({ index, segment });\n continue;\n }\n\n if (timedRun.length > 0) {\n ordered.push(...sortTimedRun(timedRun).map((entry) => entry.segment));\n timedRun = [];\n }\n\n ordered.push(segment);\n }\n\n if (timedRun.length > 0) {\n ordered.push(...sortTimedRun(timedRun).map((entry) => entry.segment));\n }\n\n return ordered;\n};\n\nconst findNextInformativeMediaSegment = (\n segments: RAGMediaTranscriptSegmentWithText[],\n resolveValue: (\n segment: RAGMediaTranscriptSegmentWithText,\n ) => string | undefined,\n) => {\n let unknownSegments = 0;\n\n for (const segment of segments) {\n if (!segment || typeof segment !== \"object\") {\n continue;\n }\n\n if (normalizeWhitespace(segment.text ?? \"\").length === 0) {\n continue;\n }\n\n const value = resolveValue(segment);\n if (typeof value === \"string\" && value.length > 0) {\n return value;\n }\n\n unknownSegments += 1;\n if (unknownSegments > MAX_MEDIA_BRIDGED_UNKNOWN_SEGMENTS) {\n return undefined;\n }\n }\n\n return undefined;\n};\n\nconst groupTranscriptSegments = (\n segments: RAGMediaTranscriptSegmentWithText[],\n) => {\n const groups: RAGMediaSegmentGroup[] = [];\n\n for (const [index, segment] of segments.entries()) {\n if (!segment || typeof segment !== \"object\") {\n continue;\n }\n\n const text = normalizeWhitespace(segment.text ?? \"\");\n if (!text) {\n continue;\n }\n\n let speaker = normalizeMediaSpeaker(segment.speaker);\n let speakerKey = canonicalMediaSpeakerKey(segment.speaker);\n let channel = normalizeMediaChannel(segment.channel);\n const lastGroup = groups.at(-1);\n const remainingSegments = segments.slice(index + 1);\n const nextSpeakerKey = findNextInformativeMediaSegment(\n remainingSegments,\n (candidate) => canonicalMediaSpeakerKey(candidate.speaker),\n );\n const nextChannel = findNextInformativeMediaSegment(\n remainingSegments,\n (candidate) => normalizeMediaChannel(candidate.channel),\n );\n if (\n !speakerKey &&\n !channel &&\n lastGroup?.speakerKey &&\n lastGroup.channel &&\n nextSpeakerKey === lastGroup.speakerKey &&\n nextChannel === lastGroup.channel\n ) {\n speakerKey = lastGroup.speakerKey;\n speaker = lastGroup.speaker;\n channel = lastGroup.channel;\n }\n if (\n !speakerKey &&\n lastGroup?.speakerKey &&\n lastGroup.channel === channel &&\n nextSpeakerKey === lastGroup.speakerKey &&\n nextChannel === channel\n ) {\n speakerKey = lastGroup.speakerKey;\n speaker = lastGroup.speaker;\n }\n if (\n !channel &&\n lastGroup?.channel &&\n lastGroup.speakerKey === speakerKey &&\n nextChannel === lastGroup.channel &&\n nextSpeakerKey === speakerKey\n ) {\n channel = lastGroup.channel;\n }\n const shouldSplitForTimingModeChange =\n hasMediaSegmentTiming(segment) !== hasMediaSegmentTiming(lastGroup);\n const shouldSplitForGap =\n typeof segment.startMs === \"number\" &&\n typeof lastGroup?.endMs === \"number\" &&\n Number.isFinite(segment.startMs) &&\n Number.isFinite(lastGroup.endMs) &&\n segment.startMs - lastGroup.endMs > MAX_MEDIA_GROUP_CONTINUITY_GAP_MS;\n if (\n !lastGroup ||\n lastGroup.speakerKey !== speakerKey ||\n lastGroup.channel !== channel ||\n shouldSplitForTimingModeChange ||\n shouldSplitForGap\n ) {\n groups.push({\n channel,\n endMs: segment.endMs,\n segments: [segment],\n speaker,\n speakerKey,\n startMs: segment.startMs,\n });\n continue;\n }\n\n lastGroup.endMs =\n typeof segment.endMs === \"number\" && Number.isFinite(segment.endMs)\n ? segment.endMs\n : lastGroup.endMs;\n lastGroup.segments.push(segment);\n if (\n typeof segment.startMs === \"number\" &&\n Number.isFinite(segment.startMs)\n ) {\n if (\n typeof lastGroup.startMs !== \"number\" ||\n !Number.isFinite(lastGroup.startMs) ||\n segment.startMs < lastGroup.startMs\n ) {\n lastGroup.startMs = segment.startMs;\n }\n }\n }\n\n return groups;\n};\n\nconst decodeHtmlEntities = (value: string) => {\n let output = value;\n for (const [pattern, replacement] of HTML_ENTITY_REPLACEMENTS) {\n output = output.replace(pattern, replacement);\n }\n\n output = output.replace(/&#(\\d+);/g, (_, code) =>\n String.fromCodePoint(Number(code)),\n );\n\n return output.replace(/&#x([0-9a-f]+);/gi, (_, code) =>\n String.fromCodePoint(parseInt(code, 16)),\n );\n};\n\nconst formatHtmlLinkContext = (href: string) => {\n const decoded = decodeHtmlEntities(href.trim());\n if (!decoded) {\n return undefined;\n }\n\n if (decoded.startsWith(\"#\")) {\n return decoded;\n }\n\n if (/^[a-z]+:/i.test(decoded)) {\n try {\n const url = new URL(decoded);\n const path = url.pathname === \"/\" ? \"\" : url.pathname;\n return `${url.hostname}${path}`;\n } catch {\n return decoded;\n }\n }\n\n return decoded;\n};\n\nconst stripHtmlTags = (value: string) => {\n const withoutTags = value\n .replace(/<script\\b[^>]*>[\\s\\S]*?<\\/script>/gi, \" \")\n .replace(/<style\\b[^>]*>[\\s\\S]*?<\\/style>/gi, \" \")\n .replace(\n /<a\\b[^>]*href=(['\"])(.*?)\\1[^>]*>([\\s\\S]*?)<\\/a>/gi,\n (_match, _quote: string, href: string, inner: string) => {\n const label = normalizeWhitespace(stripHtmlTags(inner));\n const context = formatHtmlLinkContext(href);\n if (!label) {\n return context ?? \" \";\n }\n if (!context || context === label) {\n return label;\n }\n\n return `${label} (${context})`;\n },\n )\n .replace(/<br\\s*\\/?>/gi, \"\\n\")\n .replace(/<\\/(p|div|section|article|li|ul|ol|h[1-6]|table|tr)>/gi, \"\\n\")\n .replace(/<li\\b[^>]*>/gi, \"- \")\n .replace(/<[^>]+>/g, \" \");\n\n return decodeHtmlEntities(withoutTags);\n};\n\nconst stripHtmlNoiseBlocks = (value: string) =>\n value\n .replace(/<!--[\\s\\S]*?-->/g, \" \")\n .replace(/<(script|style|template|noscript)\\b[^>]*>[\\s\\S]*?<\\/\\1>/gi, \" \")\n .replace(\n /<([a-z0-9:_-]+)\\b[^>]*\\b(hidden|aria-hidden=(['\"])true\\3)[^>]*>[\\s\\S]*?<\\/\\1>/gi,\n \" \",\n )\n .replace(\n /<(nav|footer|header|aside|form|dialog)\\b[^>]*>[\\s\\S]*?<\\/\\1>/gi,\n \" \",\n )\n .replace(\n /<([a-z0-9:_-]+)\\b[^>]*\\b(?:id|class)=(['\"])[^'\"]*(nav|menu|footer|header|sidebar|promo|banner|cookie|breadcrumb|share|social|subscribe|newsletter|modal)[^'\"]*\\2[^>]*>[\\s\\S]*?<\\/\\1>/gi,\n \" \",\n );\n\nconst collectHtmlContentCandidates = (value: string) => {\n const patterns: Array<{\n contentGroup: number;\n pattern: RegExp;\n }> = [\n {\n contentGroup: 1,\n pattern: /<main\\b[^>]*>([\\s\\S]*?)<\\/main>/gi,\n },\n {\n contentGroup: 1,\n pattern: /<article\\b[^>]*>([\\s\\S]*?)<\\/article>/gi,\n },\n {\n contentGroup: 3,\n pattern:\n /<([a-z0-9:_-]+)\\b[^>]*\\brole=(['\"])main\\2[^>]*>([\\s\\S]*?)<\\/\\1>/gi,\n },\n {\n contentGroup: 4,\n pattern:\n /<([a-z0-9:_-]+)\\b[^>]*\\b(?:id|class)=(['\"])[^'\"]*(content|article|main|post|body)[^'\"]*\\2[^>]*>([\\s\\S]*?)<\\/\\1>/gi,\n },\n ];\n const candidates: string[] = [];\n\n for (const entry of patterns) {\n for (const match of value.matchAll(entry.pattern)) {\n const rawCandidate = match[entry.contentGroup];\n const candidate = typeof rawCandidate === \"string\" ? rawCandidate : \"\";\n if (candidate.trim()) {\n candidates.push(candidate.trim());\n }\n }\n }\n\n return candidates;\n};\n\nconst extractMainHtmlContent = (value: string) => {\n const trimmed = value.trim();\n if (!/<html\\b|<body\\b|<main\\b|<article\\b/i.test(trimmed)) {\n return value;\n }\n\n const stripped = stripHtmlNoiseBlocks(trimmed);\n const candidates = collectHtmlContentCandidates(stripped);\n\n if (candidates.length > 0) {\n const bestCandidate = candidates\n .map((candidate) => ({\n candidate,\n score: stripHtmlTags(candidate).replace(/\\s+/g, \" \").trim().length,\n }))\n .sort((left, right) => right.score - left.score)[0]?.candidate;\n if (bestCandidate) {\n return bestCandidate;\n }\n }\n\n const bodyMatch = stripped.match(/<body\\b[^>]*>([\\s\\S]*?)<\\/body>/i);\n if (bodyMatch?.[1]) {\n return bodyMatch[1];\n }\n\n return stripped;\n};\n\nconst stripHtml = (value: string) => {\n const focused = extractMainHtmlContent(value);\n\n return normalizeWhitespace(stripHtmlTags(focused));\n};\n\nconst stripMarkdown = (value: string) => {\n const withoutCodeBlocks = value.replace(/```[\\s\\S]*?```/g, (block) => {\n const lines = block.split(\"\\n\").slice(1, EXCLUDE_LAST_OFFSET);\n\n return lines.join(\"\\n\");\n });\n\n const stripped = withoutCodeBlocks\n .replace(/`([^`]+)`/g, \"$1\")\n .replace(/!\\[([^\\]]*)\\]\\([^)]+\\)/g, \"$1\")\n .replace(/\\[([^\\]]+)\\]\\([^)]+\\)/g, \"$1\")\n .replace(/^>\\s?/gm, \"\")\n .replace(/^#{1,6}\\s+/gm, \"\")\n .replace(/^[-*+]\\s+/gm, \"\")\n .replace(/^\\d+\\.\\s+/gm, \"\")\n .replace(/\\*\\*([^*]+)\\*\\*/g, \"$1\")\n .replace(/__([^_]+)__/g, \"$1\")\n .replace(/\\*([^*]+)\\*/g, \"$1\")\n .replace(/_([^_]+)_/g, \"$1\")\n .replace(/^---+$/gm, \"\\n\")\n .replace(/^===+$/gm, \"\\n\");\n\n return normalizeWhitespace(stripped);\n};\n\nconst stripMarkdownFence = (value: string) => {\n const lines = value.replace(/\\r\\n?/g, \"\\n\").split(\"\\n\");\n if (lines.length >= 2 && /^```/.test(lines[0] ?? \"\")) {\n lines.shift();\n }\n if (lines.length >= 1 && /^```/.test(lines[lines.length - 1] ?? \"\")) {\n lines.pop();\n }\n\n return lines.join(\"\\n\").trim();\n};\n\nconst splitMarkdownPreferredChunkUnits = (value: string) => {\n const lines = value.replace(/\\r\\n?/g, \"\\n\").split(\"\\n\");\n const units: string[] = [];\n let proseBuffer: string[] = [];\n let fenceBuffer: string[] | undefined;\n\n const flushProse = () => {\n if (proseBuffer.length === 0) {\n return;\n }\n\n const text = stripMarkdown(proseBuffer.join(\"\\n\"));\n if (text) {\n units.push(text);\n }\n proseBuffer = [];\n };\n\n const flushFence = () => {\n if (!fenceBuffer || fenceBuffer.length === 0) {\n fenceBuffer = undefined;\n return;\n }\n\n const text = stripMarkdownFence(fenceBuffer.join(\"\\n\"));\n if (text) {\n units.push(text);\n }\n fenceBuffer = undefined;\n };\n\n for (const line of lines) {\n if (/^```/.test(line.trim())) {\n if (fenceBuffer) {\n fenceBuffer.push(line);\n flushFence();\n continue;\n }\n\n flushProse();\n fenceBuffer = [line];\n continue;\n }\n\n if (fenceBuffer) {\n fenceBuffer.push(line);\n continue;\n }\n\n if (line.trim().length === 0) {\n flushProse();\n continue;\n }\n\n proseBuffer.push(line);\n }\n\n flushProse();\n flushFence();\n\n return units;\n};\n\ntype StructuredChunkUnit = {\n text: string;\n sourceAwareChunkReason?:\n | \"section_boundary\"\n | \"size_limit\"\n | \"source_native_unit\";\n sectionTitle?: string;\n sectionPath?: string[];\n sectionDepth?: number;\n sectionFamilyPath?: string[];\n sectionOrdinalPath?: number[];\n sectionSiblingFamilyKey?: string;\n sectionSiblingOrdinal?: number;\n spreadsheetHeaders?: string[];\n spreadsheetColumnStart?: string;\n spreadsheetColumnEnd?: string;\n spreadsheetTableCount?: number;\n spreadsheetTableIndex?: number;\n spreadsheetRowEnd?: number;\n spreadsheetRowStart?: number;\n officeBlockNumber?: number;\n officeBlockKind?: \"title\" | \"heading\" | \"paragraph\" | \"list\" | \"table\";\n officeFamilyPath?: string[];\n officeOrdinalPath?: number[];\n officeSiblingFamilyKey?: string;\n officeSiblingOrdinal?: number;\n officeListContextText?: string;\n officeListGroupItemCount?: number;\n officeListLevel?: number;\n officeListLevels?: number[];\n officeTableBodyRowEnd?: number;\n officeTableBodyRowCount?: number;\n officeTableBodyRowStart?: number;\n officeTableChunkKind?: \"full_table\" | \"table_slice\";\n officeTableColumnCount?: number;\n officeTableContextText?: string;\n officeTableFollowUpText?: string;\n officeTableHeaderText?: string;\n officeTableHeaders?: string[];\n officeTableRowCount?: number;\n officeTableSignature?: string;\n pageNumber?: number;\n pdfBlockNumber?: number;\n pdfFigureCaptionBlockNumber?: number;\n pdfFigureLabel?: string;\n pdfSemanticRole?: \"figure_caption\" | \"figure_body\";\n pdfTableBodyRowEnd?: number;\n pdfTableBodyRowCount?: number;\n pdfTableBodyRowStart?: number;\n pdfTableChunkKind?: \"full_table\" | \"table_slice\";\n pdfTableColumnCount?: number;\n pdfTableHeaderText?: string;\n pdfTableHeaders?: string[];\n pdfTableRowCount?: number;\n pdfTableSignature?: string;\n pdfTextKind?: \"paragraph\" | \"table_like\";\n emailSectionKind?: EmailBodySection[\"kind\"];\n emailForwardedBccAddresses?: string[];\n emailForwardedCcAddresses?: string[];\n emailForwardedDate?: string;\n emailForwardedFromAddress?: string;\n emailForwardedFromDisplayName?: string;\n emailForwardedChainCount?: number;\n emailForwardedOrdinal?: number;\n emailQuotedDepth?: number;\n emailForwardedHeaderFields?: Record<string, string>;\n emailForwardedParticipantAddresses?: string[];\n emailForwardedReplyToAddresses?: string[];\n emailForwardedSubject?: string;\n emailForwardedTimestamp?: string;\n emailForwardedToAddresses?: string[];\n sectionKind?:\n | \"markdown_heading\"\n | \"html_heading\"\n | \"jsonl_record\"\n | \"tsv_row\"\n | \"csv_row\"\n | \"xml_node\"\n | \"yaml_section\"\n | \"office_heading\"\n | \"office_block\"\n | \"code_block\"\n | \"spreadsheet_rows\"\n | \"presentation_slide\"\n | \"pdf_block\"\n | \"email_block\";\n preferredChunkUnits?: string[];\n};\n\ntype EmailBodySection = {\n kind: \"authored_text\" | \"forwarded_headers\" | \"quoted_history\" | \"signature\";\n text: string;\n forwardedHeaderFields?: Record<string, string>;\n forwardedFromAddress?: string;\n forwardedFromDisplayName?: string;\n forwardedToAddresses?: string[];\n forwardedCcAddresses?: string[];\n forwardedBccAddresses?: string[];\n forwardedReplyToAddresses?: string[];\n forwardedParticipantAddresses?: string[];\n forwardedSubject?: string;\n forwardedDate?: string;\n forwardedTimestamp?: string;\n quotedDepth?: number;\n};\n\ntype EmailMessageLineageEntry = {\n attachmentSource?: string;\n messageId?: string;\n messageSource?: string;\n messageSourceKind?: string;\n threadKey?: string;\n};\n\ntype OfficeDocumentBlock = {\n blockNumber: number;\n blockKind: \"title\" | \"heading\" | \"paragraph\" | \"list\" | \"table\";\n text: string;\n style?: string;\n headingLevel?: number;\n listLevel?: number;\n tableBodyRowCount?: number;\n tableColumnCount?: number;\n tableHeaderText?: string;\n tableHeaders?: string[];\n tableRowCount?: number;\n tableSignature?: string;\n};\n\nconst findNearestPDFContextHeading = (\n blockEntries: PDFNativeStructureBlockEntry[],\n pageNumber: number | undefined,\n) => {\n if (typeof pageNumber !== \"number\") {\n return undefined;\n }\n\n for (let index = blockEntries.length - 1; index >= 0; index -= 1) {\n const entry = blockEntries[index];\n if (!entry || entry.pageNumber !== pageNumber) {\n if (\n entry &&\n typeof entry.pageNumber === \"number\" &&\n entry.pageNumber < pageNumber\n ) {\n break;\n }\n continue;\n }\n if (entry.pdfSemanticRole || entry.pdfTextKind !== \"paragraph\") {\n continue;\n }\n const heading = inferPDFBlockHeading(entry.text);\n if (heading) {\n return heading;\n }\n }\n\n return undefined;\n};\n\nconst getPDFTableHeaders = (text: string) => {\n const lines = text\n .split(\"\\n\")\n .map((line) => normalizeWhitespace(line))\n .filter(Boolean);\n const headerLine = lines[0];\n if (!headerLine || !headerLine.includes(\" | \")) {\n return undefined;\n }\n\n const headers = headerLine\n .split(\" | \")\n .map((entry) => normalizeWhitespace(entry))\n .filter(Boolean);\n return headers.length >= 2 ? headers : undefined;\n};\n\nconst pdfNativeStructureUnits = (\n metadata?: Record<string, unknown>,\n): StructuredChunkUnit[] => {\n const blocks = Array.isArray(metadata?.pdfTextBlocks)\n ? metadata.pdfTextBlocks\n : [];\n const blockEntries: PDFNativeStructureBlockEntry[] = [];\n for (const block of blocks) {\n if (!block || typeof block !== \"object\") {\n continue;\n }\n\n const rawText = typeof block.text === \"string\" ? block.text : \"\";\n const pdfTextKind =\n block.textKind === \"table_like\" ? \"table_like\" : \"paragraph\";\n const text =\n pdfTextKind === \"table_like\"\n ? rawText\n .split(\"\\n\")\n .map((line: string) => normalizeWhitespace(line))\n .filter(Boolean)\n .join(\"\\n\")\n : normalizeWhitespace(rawText);\n if (!text) {\n continue;\n }\n\n const pageNumber =\n typeof block.pageNumber === \"number\" && Number.isFinite(block.pageNumber)\n ? block.pageNumber\n : undefined;\n const pdfBlockNumber =\n typeof block.blockNumber === \"number\" &&\n Number.isFinite(block.blockNumber)\n ? block.blockNumber\n : undefined;\n const previousBlock = blockEntries.at(-1);\n const previousFigureCaption =\n previousBlock &&\n previousBlock.pageNumber === pageNumber &&\n previousBlock.pdfSemanticRole === \"figure_caption\"\n ? previousBlock\n : undefined;\n const pdfSemanticRole =\n block.semanticRole === \"figure_caption\"\n ? \"figure_caption\"\n : block.semanticRole === \"figure_body\"\n ? \"figure_body\"\n : pdfTextKind === \"paragraph\" &&\n previousFigureCaption &&\n !inferPDFBlockHeading(text)\n ? \"figure_body\"\n : undefined;\n const currentBlockHeading =\n pdfTextKind === \"paragraph\" && !pdfSemanticRole\n ? inferPDFBlockHeading(text)\n : undefined;\n const contextualHeading =\n pdfTextKind === \"table_like\"\n ? findNearestPDFContextHeading(blockEntries, pageNumber)\n : undefined;\n const contextualTableTitle =\n contextualHeading && pdfTextKind === \"table_like\"\n ? /\\btable\\b/i.test(contextualHeading)\n ? contextualHeading\n : `${contextualHeading} Table`\n : undefined;\n const pdfTableHeaders =\n pdfTextKind === \"table_like\" ? getPDFTableHeaders(text) : undefined;\n const pdfTableHeaderText =\n pdfTextKind === \"table_like\"\n ? text\n .split(\"\\n\")\n .map((line: string) => normalizeWhitespace(line))\n .filter(Boolean)[0]\n : undefined;\n const pdfTableRowCount =\n pdfTextKind === \"table_like\"\n ? text\n .split(\"\\n\")\n .map((line: string) => normalizeWhitespace(line))\n .filter(Boolean).length\n : undefined;\n const pdfTableBodyRowCount =\n typeof pdfTableRowCount === \"number\"\n ? Math.max(0, pdfTableRowCount - 1)\n : undefined;\n const pdfTableBodyRowStart =\n typeof pdfTableBodyRowCount === \"number\" && pdfTableBodyRowCount > 0\n ? 1\n : undefined;\n const pdfTableBodyRowEnd =\n typeof pdfTableBodyRowCount === \"number\" && pdfTableBodyRowCount > 0\n ? pdfTableBodyRowCount\n : undefined;\n const pdfTableColumnCount = Array.isArray(pdfTableHeaders)\n ? pdfTableHeaders.length\n : undefined;\n const pdfTableSignature =\n Array.isArray(pdfTableHeaders) && pdfTableHeaders.length > 0\n ? pdfTableHeaders.join(\" | \")\n : undefined;\n const pdfFigureLabel =\n pdfSemanticRole === \"figure_caption\"\n ? extractPDFFigureLabel(text)\n : previousFigureCaption?.pdfFigureLabel;\n const pdfFigureCaptionBlockNumber =\n pdfSemanticRole === \"figure_caption\"\n ? pdfBlockNumber\n : previousFigureCaption?.pdfFigureCaptionBlockNumber;\n const baseSectionTitle =\n pdfSemanticRole === \"figure_caption\"\n ? pageNumber\n ? `Page ${pageNumber} Figure Caption`\n : \"Figure Caption\"\n : pdfSemanticRole === \"figure_body\"\n ? pdfFigureLabel\n ? `${pdfFigureLabel} Body`\n : pageNumber\n ? `Page ${pageNumber} Figure Body`\n : \"Figure Body\"\n : currentBlockHeading\n ? currentBlockHeading\n : contextualTableTitle\n ? contextualTableTitle\n : pageNumber\n ? pdfTextKind === \"table_like\"\n ? `Page ${pageNumber} Table Block`\n : `Page ${pageNumber} Text Block`\n : pdfTextKind === \"table_like\"\n ? \"Table Block\"\n : \"Text Block\";\n\n blockEntries.push({\n baseSectionTitle,\n pageNumber,\n pdfBlockNumber,\n ...(typeof pdfFigureCaptionBlockNumber === \"number\"\n ? { pdfFigureCaptionBlockNumber }\n : {}),\n ...(pdfFigureLabel ? { pdfFigureLabel } : {}),\n ...(pdfSemanticRole ? { pdfSemanticRole } : {}),\n ...(typeof pdfTableBodyRowEnd === \"number\" ? { pdfTableBodyRowEnd } : {}),\n ...(typeof pdfTableBodyRowCount === \"number\"\n ? { pdfTableBodyRowCount }\n : {}),\n ...(typeof pdfTableBodyRowStart === \"number\"\n ? { pdfTableBodyRowStart }\n : {}),\n ...(pdfTextKind === \"table_like\"\n ? { pdfTableChunkKind: \"full_table\" }\n : {}),\n ...(typeof pdfTableColumnCount === \"number\"\n ? { pdfTableColumnCount }\n : {}),\n ...(typeof pdfTableHeaderText === \"string\" ? { pdfTableHeaderText } : {}),\n ...(Array.isArray(pdfTableHeaders) && pdfTableHeaders.length > 0\n ? { pdfTableHeaders }\n : {}),\n ...(typeof pdfTableRowCount === \"number\" ? { pdfTableRowCount } : {}),\n ...(pdfTableSignature ? { pdfTableSignature } : {}),\n pdfTextKind,\n text,\n });\n }\n const titleCounts = new Map<string, number>();\n for (const block of blockEntries) {\n titleCounts.set(\n block.baseSectionTitle,\n (titleCounts.get(block.baseSectionTitle) ?? 0) + 1,\n );\n }\n const units: StructuredChunkUnit[] = [];\n\n for (const block of blockEntries) {\n const sectionTitle =\n (titleCounts.get(block.baseSectionTitle) ?? 0) > 1 &&\n typeof block.pdfBlockNumber === \"number\"\n ? `${block.baseSectionTitle} ${block.pdfBlockNumber}`\n : block.baseSectionTitle;\n\n units.push({\n pageNumber: block.pageNumber,\n pdfBlockNumber: block.pdfBlockNumber,\n ...(typeof block.pdfFigureCaptionBlockNumber === \"number\"\n ? {\n pdfFigureCaptionBlockNumber: block.pdfFigureCaptionBlockNumber,\n }\n : {}),\n ...(block.pdfFigureLabel ? { pdfFigureLabel: block.pdfFigureLabel } : {}),\n ...(block.pdfSemanticRole\n ? { pdfSemanticRole: block.pdfSemanticRole }\n : {}),\n ...(typeof block.pdfTableBodyRowEnd === \"number\"\n ? { pdfTableBodyRowEnd: block.pdfTableBodyRowEnd }\n : {}),\n ...(typeof block.pdfTableBodyRowCount === \"number\"\n ? { pdfTableBodyRowCount: block.pdfTableBodyRowCount }\n : {}),\n ...(typeof block.pdfTableBodyRowStart === \"number\"\n ? { pdfTableBodyRowStart: block.pdfTableBodyRowStart }\n : {}),\n ...(block.pdfTableChunkKind\n ? { pdfTableChunkKind: block.pdfTableChunkKind }\n : {}),\n ...(typeof block.pdfTableColumnCount === \"number\"\n ? { pdfTableColumnCount: block.pdfTableColumnCount }\n : {}),\n ...(typeof block.pdfTableHeaderText === \"string\"\n ? { pdfTableHeaderText: block.pdfTableHeaderText }\n : {}),\n ...(Array.isArray(block.pdfTableHeaders) &&\n block.pdfTableHeaders.length > 0\n ? { pdfTableHeaders: block.pdfTableHeaders }\n : {}),\n ...(typeof block.pdfTableRowCount === \"number\"\n ? { pdfTableRowCount: block.pdfTableRowCount }\n : {}),\n ...(block.pdfTableSignature\n ? { pdfTableSignature: block.pdfTableSignature }\n : {}),\n pdfTextKind: block.pdfTextKind,\n preferredChunkUnits:\n block.pdfTextKind === \"table_like\"\n ? block.text.split(\"\\n\").filter(Boolean)\n : undefined,\n sectionDepth: 1,\n sectionKind: \"pdf_block\",\n sectionPath: [sectionTitle],\n sectionTitle,\n text: block.text,\n });\n }\n\n return units;\n};\n\nconst officeNativeStructureUnits = (\n metadata?: Record<string, unknown>,\n): StructuredChunkUnit[] => {\n const blocks = Array.isArray(metadata?.officeBlocks)\n ? metadata.officeBlocks\n : [];\n const units: StructuredChunkUnit[] = [];\n const headingStack: string[] = [];\n const headingFamilyStack: string[] = [];\n const headingOrdinalStack: number[] = [];\n const headingSiblingCounts = new Map<string, number>();\n let pendingListContextText: string | undefined;\n let pendingTableContextText: string | undefined;\n let consumedOfficeUntil = -1;\n const decorateOfficeSectionText = (\n text: string,\n sectionTitle: string | undefined,\n ) => {\n if (!sectionTitle || text.includes(sectionTitle)) {\n return text;\n }\n\n return normalizeWhitespace(`${sectionTitle}\\n${text}`);\n };\n const getOfficeShortParagraphText = (value: unknown) => {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n\n const record = value as Record<string, unknown>;\n if (record.blockKind !== \"paragraph\") {\n return undefined;\n }\n\n const paragraphText =\n typeof record.text === \"string\" ? normalizeWhitespace(record.text) : \"\";\n return paragraphText.length > 0 && paragraphText.length <= 200\n ? paragraphText\n : undefined;\n };\n const isOfficeTableHeadingBlock = (value: unknown) => {\n if (!value || typeof value !== \"object\") {\n return false;\n }\n\n const record = value as Record<string, unknown>;\n return (\n record.blockKind === \"heading\" &&\n typeof record.text === \"string\" &&\n /\\btable\\b/i.test(record.text)\n );\n };\n const collectOfficeLeadingParagraphTexts = (\n startIndex: number,\n maxParagraphs = 3,\n ) => {\n const texts: string[] = [];\n let cursor = startIndex;\n\n while (texts.length < maxParagraphs) {\n const paragraphText = getOfficeShortParagraphText(blocks[cursor]);\n if (!paragraphText) {\n break;\n }\n texts.push(paragraphText);\n cursor += 1;\n }\n\n return { nextIndex: cursor, texts };\n };\n const hasFollowingOfficeTableFamily = (startIndex: number) => {\n let cursor = startIndex;\n const leadingParagraphs = collectOfficeLeadingParagraphTexts(cursor);\n cursor = leadingParagraphs.nextIndex;\n\n const sawHeading = isOfficeTableHeadingBlock(blocks[cursor]);\n if (sawHeading) {\n cursor += 1;\n }\n\n const trailingParagraphs = collectOfficeLeadingParagraphTexts(cursor);\n cursor = trailingParagraphs.nextIndex;\n\n return (\n (leadingParagraphs.texts.length > 0 ||\n sawHeading ||\n trailingParagraphs.texts.length > 0 ||\n blocks[startIndex]?.blockKind === \"table\") &&\n blocks[cursor]?.blockKind === \"table\"\n );\n };\n const collectOfficeTrailingTableParagraphTexts = (startIndex: number) => {\n const trailingParagraphs = collectOfficeLeadingParagraphTexts(\n startIndex,\n 5,\n );\n const nextBlock = blocks[trailingParagraphs.nextIndex];\n const nextKind =\n nextBlock && typeof nextBlock === \"object\"\n ? nextBlock.blockKind\n : undefined;\n\n if (\n trailingParagraphs.texts.length === 0 ||\n (nextKind !== \"heading\" && nextKind !== \"title\" && nextBlock) ||\n (nextBlock && isOfficeTableHeadingBlock(nextBlock))\n ) {\n return { nextIndex: startIndex, texts: [] as string[] };\n }\n\n return trailingParagraphs;\n };\n\n for (const [index, block] of blocks.entries()) {\n if (index <= consumedOfficeUntil) {\n continue;\n }\n\n if (!block || typeof block !== \"object\") {\n continue;\n }\n\n const text =\n typeof block.text === \"string\" ? normalizeWhitespace(block.text) : \"\";\n if (!text) {\n continue;\n }\n\n const officeBlockNumber =\n typeof block.blockNumber === \"number\" &&\n Number.isFinite(block.blockNumber)\n ? block.blockNumber\n : undefined;\n const officeBlockKind =\n block.blockKind === \"title\" ||\n block.blockKind === \"heading\" ||\n block.blockKind === \"list\" ||\n block.blockKind === \"table\"\n ? block.blockKind\n : \"paragraph\";\n const headingLevel =\n typeof block.headingLevel === \"number\" &&\n Number.isFinite(block.headingLevel)\n ? block.headingLevel\n : undefined;\n const officeListLevel =\n typeof block.listLevel === \"number\" && Number.isFinite(block.listLevel)\n ? block.listLevel\n : undefined;\n const officeTableBodyRowCount =\n typeof block.tableBodyRowCount === \"number\" &&\n Number.isFinite(block.tableBodyRowCount)\n ? block.tableBodyRowCount\n : undefined;\n const officeTableColumnCount =\n typeof block.tableColumnCount === \"number\" &&\n Number.isFinite(block.tableColumnCount)\n ? block.tableColumnCount\n : undefined;\n const officeTableHeaderText =\n typeof block.tableHeaderText === \"string\" &&\n block.tableHeaderText.length > 0\n ? block.tableHeaderText\n : undefined;\n const officeTableHeaders =\n Array.isArray(block.tableHeaders) && block.tableHeaders.length > 0\n ? block.tableHeaders.filter(\n (value: unknown): value is string =>\n typeof value === \"string\" && value.length > 0,\n )\n : undefined;\n const officeTableRowCount =\n typeof block.tableRowCount === \"number\" &&\n Number.isFinite(block.tableRowCount)\n ? block.tableRowCount\n : undefined;\n const officeTableSignature =\n typeof block.tableSignature === \"string\" &&\n block.tableSignature.length > 0\n ? block.tableSignature\n : undefined;\n\n if (officeBlockKind === \"title\" || officeBlockKind === \"heading\") {\n const level = officeBlockKind === \"title\" ? 1 : (headingLevel ?? 1);\n const parentScope = headingFamilyStack\n .slice(0, Math.max(0, level - 1))\n .join(\" > \");\n const parentOrdinalScope = headingOrdinalStack\n .slice(0, Math.max(0, level - 1))\n .join(\" > \");\n const headingKey = `${level}:${parentScope}:${parentOrdinalScope}:${text}`;\n const headingCount = (headingSiblingCounts.get(headingKey) ?? 0) + 1;\n headingSiblingCounts.set(headingKey, headingCount);\n const resolvedHeadingText =\n headingCount > 1 ? `${text} (${headingCount})` : text;\n headingStack[level - 1] = resolvedHeadingText;\n headingFamilyStack[level - 1] = text;\n headingOrdinalStack[level - 1] = headingCount;\n headingStack.length = level;\n headingFamilyStack.length = level;\n headingOrdinalStack.length = level;\n const nextBlock = blocks[index + 1];\n const nextKind =\n nextBlock && typeof nextBlock === \"object\"\n ? nextBlock.blockKind\n : undefined;\n if (\n nextKind === \"title\" ||\n nextKind === \"heading\" ||\n nextKind === \"list\" ||\n nextKind === \"table\" ||\n !nextBlock\n ) {\n units.push({\n officeBlockKind,\n officeListLevel,\n officeBlockNumber,\n ...(typeof officeTableBodyRowCount === \"number\"\n ? { officeTableBodyRowCount }\n : {}),\n ...(typeof officeTableColumnCount === \"number\"\n ? { officeTableColumnCount }\n : {}),\n ...(typeof officeTableHeaderText === \"string\"\n ? { officeTableHeaderText }\n : {}),\n ...(Array.isArray(officeTableHeaders) && officeTableHeaders.length > 0\n ? { officeTableHeaders }\n : {}),\n ...(typeof officeTableRowCount === \"number\"\n ? { officeTableRowCount }\n : {}),\n ...(typeof officeTableSignature === \"string\"\n ? { officeTableSignature }\n : {}),\n ...(headingFamilyStack.length > 0\n ? { officeFamilyPath: [...headingFamilyStack] }\n : {}),\n ...(headingOrdinalStack.length > 0\n ? { officeOrdinalPath: [...headingOrdinalStack] }\n : {}),\n ...(headingFamilyStack.length > 0\n ? { sectionFamilyPath: [...headingFamilyStack] }\n : {}),\n ...(headingOrdinalStack.length > 0\n ? { sectionOrdinalPath: [...headingOrdinalStack] }\n : {}),\n officeSiblingFamilyKey: text,\n officeSiblingOrdinal: headingCount,\n sectionSiblingFamilyKey: text,\n sectionSiblingOrdinal: headingCount,\n sectionDepth: headingStack.length,\n sectionKind: \"office_heading\",\n sectionPath: [...headingStack],\n sectionTitle: resolvedHeadingText,\n text,\n });\n }\n continue;\n }\n\n const sectionPath = headingStack.length > 0 ? [...headingStack] : undefined;\n const officeFamilyPath =\n headingFamilyStack.length > 0 ? [...headingFamilyStack] : undefined;\n const officeOrdinalPath =\n headingOrdinalStack.length > 0 ? [...headingOrdinalStack] : undefined;\n const sectionTitle = sectionPath?.at(-1);\n\n if (officeBlockKind === \"list\") {\n const runTexts: string[] = [];\n const runLevels: number[] = [];\n let runEnd = index;\n\n for (; runEnd < blocks.length; runEnd += 1) {\n const runBlock = blocks[runEnd];\n if (!runBlock || typeof runBlock !== \"object\") {\n break;\n }\n if (runBlock.blockKind !== \"list\") {\n break;\n }\n const runText =\n typeof runBlock.text === \"string\"\n ? normalizeWhitespace(runBlock.text)\n : \"\";\n if (!runText) {\n break;\n }\n runTexts.push(runText);\n if (\n typeof runBlock.listLevel === \"number\" &&\n Number.isFinite(runBlock.listLevel)\n ) {\n runLevels.push(runBlock.listLevel);\n }\n }\n runEnd -= 1;\n\n const trailingBridgeParagraphs = collectOfficeLeadingParagraphTexts(\n runEnd + 1,\n );\n const trailingTableBridgeText =\n trailingBridgeParagraphs.texts.length > 0 &&\n hasFollowingOfficeTableFamily(runEnd + 1)\n ? normalizeWhitespace(trailingBridgeParagraphs.texts.join(\"\\n\\n\"))\n : undefined;\n const officeListContextText = normalizeWhitespace(\n [\n ...(typeof pendingListContextText === \"string\"\n ? [pendingListContextText]\n : []),\n ...(typeof trailingTableBridgeText === \"string\"\n ? [trailingTableBridgeText]\n : []),\n ].join(\"\\n\\n\"),\n );\n const distinctLevels = [...new Set(runLevels)];\n const officeListLevel =\n distinctLevels.length === 1 ? distinctLevels[0] : undefined;\n const groupedListText = normalizeWhitespace(\n [\n ...(officeListContextText ? [officeListContextText] : []),\n ...runTexts,\n ].join(\"\\n\\n\"),\n );\n\n if (typeof trailingTableBridgeText === \"string\") {\n pendingTableContextText = normalizeWhitespace(\n [\n ...(typeof pendingTableContextText === \"string\"\n ? [pendingTableContextText]\n : []),\n trailingTableBridgeText,\n ].join(\"\\n\\n\"),\n );\n consumedOfficeUntil = trailingBridgeParagraphs.nextIndex - 1;\n } else {\n consumedOfficeUntil = runEnd;\n }\n pendingListContextText = undefined;\n\n units.push({\n officeBlockKind,\n ...(officeListContextText ? { officeListContextText } : {}),\n officeListGroupItemCount: runTexts.length,\n ...(typeof officeListLevel === \"number\" ? { officeListLevel } : {}),\n ...(distinctLevels.length > 0\n ? { officeListLevels: distinctLevels }\n : {}),\n officeBlockNumber,\n ...(officeFamilyPath && officeFamilyPath.length > 0\n ? { officeFamilyPath }\n : {}),\n ...(officeOrdinalPath && officeOrdinalPath.length > 0\n ? { officeOrdinalPath }\n : {}),\n ...(officeFamilyPath && officeFamilyPath.length > 0\n ? { sectionFamilyPath: officeFamilyPath }\n : {}),\n ...(officeOrdinalPath && officeOrdinalPath.length > 0\n ? { sectionOrdinalPath: officeOrdinalPath }\n : {}),\n ...(officeFamilyPath?.at(-1)\n ? { officeSiblingFamilyKey: officeFamilyPath.at(-1) }\n : {}),\n ...(typeof officeOrdinalPath?.at(-1) === \"number\"\n ? { officeSiblingOrdinal: officeOrdinalPath.at(-1) }\n : {}),\n ...(officeFamilyPath?.at(-1)\n ? { sectionSiblingFamilyKey: officeFamilyPath.at(-1) }\n : {}),\n ...(typeof officeOrdinalPath?.at(-1) === \"number\"\n ? { sectionSiblingOrdinal: officeOrdinalPath.at(-1) }\n : {}),\n preferredChunkUnits: [\n ...(officeListContextText ? [officeListContextText] : []),\n ...runTexts,\n ],\n sectionDepth: sectionPath?.length,\n sectionKind: \"office_block\",\n sectionPath,\n sectionTitle,\n text: groupedListText,\n });\n continue;\n }\n const nextBlock = blocks[index + 1];\n const nextKind =\n nextBlock && typeof nextBlock === \"object\"\n ? nextBlock.blockKind\n : undefined;\n const nextNextBlock = blocks[index + 2];\n const nextNextKind =\n nextNextBlock && typeof nextNextBlock === \"object\"\n ? nextNextBlock.blockKind\n : undefined;\n\n if (\n officeBlockKind === \"paragraph\" &&\n (nextKind === \"list\" ||\n (nextKind === \"paragraph\" && nextNextKind === \"list\")) &&\n text.length <= 200\n ) {\n pendingListContextText = normalizeWhitespace(\n [\n ...(typeof pendingListContextText === \"string\"\n ? [pendingListContextText]\n : []),\n text,\n ].join(\"\\n\\n\"),\n );\n continue;\n }\n\n if (\n officeBlockKind === \"paragraph\" &&\n hasFollowingOfficeTableFamily(index + 1) &&\n text.length <= 200\n ) {\n pendingTableContextText = normalizeWhitespace(\n [\n ...(typeof pendingTableContextText === \"string\"\n ? [pendingTableContextText]\n : []),\n text,\n ].join(\"\\n\\n\"),\n );\n continue;\n }\n\n const officeListContextText =\n officeBlockKind === \"list\" ? pendingListContextText : undefined;\n const officeTableContextText =\n officeBlockKind === \"table\" ? pendingTableContextText : undefined;\n const officeTableFollowUpParagraphs =\n officeBlockKind === \"table\"\n ? collectOfficeTrailingTableParagraphTexts(index + 1)\n : { nextIndex: index + 1, texts: [] as string[] };\n const officeTableFollowUpText =\n officeBlockKind === \"table\" &&\n officeTableFollowUpParagraphs.texts.length > 0\n ? normalizeWhitespace(officeTableFollowUpParagraphs.texts.join(\"\\n\\n\"))\n : undefined;\n if (officeBlockKind !== \"list\" || nextKind !== \"list\") {\n pendingListContextText = undefined;\n }\n pendingTableContextText = undefined;\n if (\n officeBlockKind === \"table\" &&\n typeof officeTableFollowUpText === \"string\"\n ) {\n consumedOfficeUntil = officeTableFollowUpParagraphs.nextIndex - 1;\n }\n\n units.push({\n officeBlockKind,\n officeListLevel,\n officeBlockNumber,\n ...(officeFamilyPath && officeFamilyPath.length > 0\n ? { officeFamilyPath }\n : {}),\n ...(officeOrdinalPath && officeOrdinalPath.length > 0\n ? { officeOrdinalPath }\n : {}),\n ...(officeFamilyPath && officeFamilyPath.length > 0\n ? { sectionFamilyPath: officeFamilyPath }\n : {}),\n ...(officeOrdinalPath && officeOrdinalPath.length > 0\n ? { sectionOrdinalPath: officeOrdinalPath }\n : {}),\n ...(officeFamilyPath?.at(-1)\n ? { officeSiblingFamilyKey: officeFamilyPath.at(-1) }\n : {}),\n ...(typeof officeOrdinalPath?.at(-1) === \"number\"\n ? { officeSiblingOrdinal: officeOrdinalPath.at(-1) }\n : {}),\n ...(officeFamilyPath?.at(-1)\n ? { sectionSiblingFamilyKey: officeFamilyPath.at(-1) }\n : {}),\n ...(typeof officeOrdinalPath?.at(-1) === \"number\"\n ? { sectionSiblingOrdinal: officeOrdinalPath.at(-1) }\n : {}),\n ...(typeof officeListContextText === \"string\"\n ? { officeListContextText }\n : {}),\n ...(typeof officeTableContextText === \"string\"\n ? { officeTableContextText }\n : {}),\n ...(typeof officeTableFollowUpText === \"string\"\n ? { officeTableFollowUpText }\n : {}),\n ...(typeof officeTableBodyRowCount === \"number\"\n ? { officeTableBodyRowCount }\n : {}),\n ...(typeof officeTableColumnCount === \"number\"\n ? { officeTableColumnCount }\n : {}),\n ...(typeof officeTableHeaderText === \"string\"\n ? { officeTableHeaderText }\n : {}),\n ...(Array.isArray(officeTableHeaders) && officeTableHeaders.length > 0\n ? { officeTableHeaders }\n : {}),\n ...(typeof officeTableRowCount === \"number\"\n ? { officeTableRowCount }\n : {}),\n ...(typeof officeTableSignature === \"string\"\n ? { officeTableSignature }\n : {}),\n preferredChunkUnits:\n officeBlockKind === \"table\"\n ? [\n ...(typeof officeTableContextText === \"string\"\n ? [officeTableContextText]\n : []),\n ...text.split(\"\\n\").filter(Boolean),\n ...(typeof officeTableFollowUpText === \"string\"\n ? [officeTableFollowUpText]\n : []),\n ]\n : officeBlockKind === \"list\"\n ? [\n ...(typeof officeListContextText === \"string\"\n ? [officeListContextText]\n : []),\n text,\n ]\n : undefined,\n sectionDepth: sectionPath?.length,\n sectionKind:\n officeBlockKind === \"paragraph\" ? \"office_heading\" : \"office_block\",\n sectionPath,\n sectionTitle,\n text:\n officeBlockKind === \"table\" &&\n typeof officeTableContextText === \"string\"\n ? normalizeWhitespace(\n [\n officeTableContextText,\n text,\n ...(typeof officeTableFollowUpText === \"string\"\n ? [officeTableFollowUpText]\n : []),\n ].join(\"\\n\\n\"),\n )\n : officeBlockKind === \"table\" &&\n typeof officeTableFollowUpText === \"string\"\n ? normalizeWhitespace(`${text}\\n\\n${officeTableFollowUpText}`)\n : officeBlockKind === \"list\" &&\n typeof officeListContextText === \"string\"\n ? normalizeWhitespace(`${officeListContextText}\\n\\n${text}`)\n : officeBlockKind === \"paragraph\"\n ? decorateOfficeSectionText(text, sectionTitle)\n : text,\n });\n }\n\n return units;\n};\n\nconst markdownStructureUnits = (value: string): StructuredChunkUnit[] => {\n const lines = value.replace(/\\r\\n?/g, \"\\n\").split(\"\\n\");\n const sections: Array<{ lines: string[]; sectionPath: string[] }> = [];\n let current: string[] = [];\n let currentPath: string[] = [];\n const headingStack: string[] = [];\n const flushCurrentSection = () => {\n if (current.length === 0) {\n return;\n }\n\n sections.push({\n lines: current,\n sectionPath: [...currentPath],\n });\n current = [];\n };\n\n for (const line of lines) {\n const headingMatch = line.match(/^\\s*(#{1,6})\\s+(.+)$/);\n if (headingMatch) {\n if (current.length > 0) {\n flushCurrentSection();\n }\n const depth = headingMatch[1]?.length ?? 1;\n const headingText = normalizeWhitespace(headingMatch[2] ?? \"\");\n if (headingText) {\n headingStack[depth - 1] = headingText;\n headingStack.length = depth;\n currentPath = [...headingStack];\n }\n }\n\n current.push(line);\n }\n\n flushCurrentSection();\n\n return sections\n .map(({ lines: sectionLines, sectionPath }) => {\n const sectionText = normalizeWhitespace(\n stripMarkdown(sectionLines.join(\"\\n\")),\n );\n const preferredChunkUnits = splitMarkdownPreferredChunkUnits(\n sectionLines.join(\"\\n\"),\n );\n\n return {\n ...(preferredChunkUnits.length > 0 ? { preferredChunkUnits } : {}),\n sectionDepth: sectionPath.length > 0 ? sectionPath.length : undefined,\n sectionKind:\n sectionPath.length > 0 ? (\"markdown_heading\" as const) : undefined,\n sectionPath: sectionPath.length > 0 ? sectionPath : undefined,\n sectionTitle: sectionPath.at(-1),\n text: sectionText,\n };\n })\n .filter((section) => Boolean(section.text));\n};\n\nconst joinHtmlHeadingSection = (headings: string[], content: string) => {\n const normalizedHeadings = headings.map((heading) =>\n normalizeWhitespace(heading),\n );\n const combined = [...normalizedHeadings, content].filter(Boolean).join(\"\\n\");\n\n return normalizeWhitespace(combined);\n};\n\nconst htmlStructureUnits = (value: string): StructuredChunkUnit[] => {\n const focused = extractMainHtmlContent(value);\n const headingPattern = /<h([1-6])\\b[^>]*>([\\s\\S]*?)<\\/h\\1>/gi;\n const sections: StructuredChunkUnit[] = [];\n const headingStack: string[] = [];\n let cursor = 0;\n let currentContentStart = 0;\n let activeHeadings: string[] = [];\n\n const flushSection = (end: number) => {\n const content = normalizeWhitespace(\n stripHtmlTags(focused.slice(currentContentStart, end)),\n );\n if (!content) {\n return;\n }\n\n const section = joinHtmlHeadingSection(activeHeadings, content);\n if (section) {\n sections.push({\n sectionDepth:\n activeHeadings.length > 0 ? activeHeadings.length : undefined,\n sectionKind: activeHeadings.length > 0 ? \"html_heading\" : undefined,\n sectionPath:\n activeHeadings.length > 0 ? [...activeHeadings] : undefined,\n sectionTitle: activeHeadings.at(-1),\n text: section,\n });\n }\n };\n\n for (const match of focused.matchAll(headingPattern)) {\n const fullMatch = match[0];\n const start = match.index ?? cursor;\n flushSection(start);\n\n const level = Number.parseInt(match[1] ?? \"1\", 10);\n const headingText = normalizeWhitespace(stripHtmlTags(match[2] ?? \"\"));\n if (headingText) {\n headingStack[level - 1] = headingText;\n headingStack.length = level;\n activeHeadings = [...headingStack];\n }\n\n cursor = start + fullMatch.length;\n currentContentStart = cursor;\n }\n\n flushSection(focused.length);\n\n if (sections.length > 0) {\n return sections;\n }\n\n return [{ text: normalizeWhitespace(stripHtmlTags(focused)) }].filter(\n (section) => Boolean(section.text),\n );\n};\n\nconst isLikelyOfficeHeadingParagraph = (value: string) => {\n const normalized = normalizeWhitespace(value);\n if (!normalized || normalized.length > 80) {\n return false;\n }\n\n if (/[.!?]$/.test(normalized)) {\n return false;\n }\n\n const words = normalized.split(/\\s+/);\n if (words.length > 8) {\n return false;\n }\n\n const headingLikeWords = words.filter((word) => {\n const stripped = word.replace(/^[^A-Za-z0-9]+|[^A-Za-z0-9]+$/g, \"\");\n if (!stripped) {\n return false;\n }\n\n return /^[A-Z0-9]/.test(stripped);\n }).length;\n\n return headingLikeWords / words.length >= 0.6;\n};\n\nconst officeHeadingStructureUnits = (value: string): StructuredChunkUnit[] => {\n const paragraphs = paragraphUnits(value);\n const sections: StructuredChunkUnit[] = [];\n let currentHeading: string | undefined;\n let currentParagraphs: string[] = [];\n\n const flush = () => {\n if (!currentHeading && currentParagraphs.length === 0) {\n return;\n }\n\n const text = normalizeWhitespace(\n [currentHeading, ...currentParagraphs].filter(Boolean).join(\"\\n\\n\"),\n );\n if (!text) {\n currentHeading = undefined;\n currentParagraphs = [];\n return;\n }\n\n sections.push({\n sectionDepth: currentHeading ? 1 : undefined,\n sectionKind: currentHeading ? \"office_heading\" : undefined,\n sectionPath: currentHeading ? [currentHeading] : undefined,\n sectionTitle: currentHeading,\n text,\n });\n currentHeading = undefined;\n currentParagraphs = [];\n };\n\n for (const paragraph of paragraphs) {\n if (isLikelyOfficeHeadingParagraph(paragraph)) {\n flush();\n currentHeading = paragraph;\n continue;\n }\n\n currentParagraphs.push(paragraph);\n }\n\n flush();\n\n return sections.length > 0\n ? sections\n : [{ text: normalizeWhitespace(value) }];\n};\n\nconst CODE_FILE_EXTENSIONS = new Set([\n \".ts\",\n \".tsx\",\n \".js\",\n \".jsx\",\n \".mjs\",\n \".cjs\",\n \".mts\",\n \".cts\",\n \".py\",\n \".go\",\n \".java\",\n \".rb\",\n \".rs\",\n \".php\",\n]);\n\nconst isCodeLikeSource = (source?: string) => {\n if (!source) {\n return false;\n }\n\n return CODE_FILE_EXTENSIONS.has(extname(source).toLowerCase());\n};\n\nconst countBraceDelta = (value: string) => {\n let delta = 0;\n let inSingle = false;\n let inDouble = false;\n let inTemplate = false;\n\n for (let index = 0; index < value.length; index += 1) {\n const char = value[index];\n const previous = index > 0 ? value[index - 1] : \"\";\n if (char === \"'\" && !inDouble && !inTemplate && previous !== \"\\\\\") {\n inSingle = !inSingle;\n continue;\n }\n if (char === '\"' && !inSingle && !inTemplate && previous !== \"\\\\\") {\n inDouble = !inDouble;\n continue;\n }\n if (char === \"`\" && !inSingle && !inDouble && previous !== \"\\\\\") {\n inTemplate = !inTemplate;\n continue;\n }\n if (inSingle || inDouble || inTemplate) {\n continue;\n }\n if (char === \"{\") {\n delta += 1;\n } else if (char === \"}\") {\n delta -= 1;\n }\n }\n\n return delta;\n};\n\nconst extractCodeSectionTitle = (line: string) => {\n const normalized = line.trim();\n const patterns = [\n /^(?:export\\s+)?(?:default\\s+)?(?:async\\s+)?function\\s+([A-Za-z_$][\\w$]*)/,\n /^(?:export\\s+)?class\\s+([A-Za-z_$][\\w$]*)/,\n /^(?:export\\s+)?interface\\s+([A-Za-z_$][\\w$]*)/,\n /^(?:export\\s+)?type\\s+([A-Za-z_$][\\w$]*)/,\n /^(?:export\\s+)?enum\\s+([A-Za-z_$][\\w$]*)/,\n /^(?:export\\s+)?const\\s+([A-Za-z_$][\\w$]*)\\s*=/,\n /^(?:export\\s+)?let\\s+([A-Za-z_$][\\w$]*)\\s*=/,\n /^(?:export\\s+)?var\\s+([A-Za-z_$][\\w$]*)\\s*=/,\n /^import\\s+.+?\\s+from\\s+['\"][^'\"]+['\"]/,\n /^export\\s+\\{.+\\}/,\n ];\n\n for (const pattern of patterns) {\n const match = normalized.match(pattern);\n if (!match) {\n continue;\n }\n if (match[1]) {\n return match[1];\n }\n return normalized;\n }\n\n return undefined;\n};\n\nconst codeStructureUnits = (value: string): StructuredChunkUnit[] => {\n const lines = value.replace(/\\r\\n?/g, \"\\n\").split(\"\\n\");\n const units: StructuredChunkUnit[] = [];\n let currentLines: string[] = [];\n let currentTitle: string | undefined;\n let braceDepth = 0;\n\n const flush = () => {\n const raw = currentLines.join(\"\\n\").trim();\n if (!raw) {\n currentLines = [];\n currentTitle = undefined;\n braceDepth = 0;\n return;\n }\n\n const preferredChunkUnits = raw\n .split(/\\n{2,}/)\n .map((entry) => entry.trim())\n .filter(Boolean);\n units.push({\n ...(preferredChunkUnits.length > 0 ? { preferredChunkUnits } : {}),\n sectionDepth: 1,\n sectionKind: \"code_block\",\n ...(currentTitle\n ? {\n sectionPath: [currentTitle],\n sectionTitle: currentTitle,\n }\n : {}),\n text: raw,\n });\n currentLines = [];\n currentTitle = undefined;\n braceDepth = 0;\n };\n\n for (const line of lines) {\n const trimmed = line.trim();\n const nextTitle =\n braceDepth <= 0 ? extractCodeSectionTitle(trimmed) : undefined;\n if (nextTitle && currentLines.length > 0) {\n flush();\n }\n\n if (!currentTitle && nextTitle) {\n currentTitle = nextTitle;\n }\n\n currentLines.push(line);\n braceDepth += countBraceDelta(line);\n if (braceDepth < 0) {\n braceDepth = 0;\n }\n }\n\n flush();\n\n return units.length > 0\n ? units\n : [{ sectionDepth: 1, sectionKind: \"code_block\", text: value.trim() }];\n};\n\nconst spreadsheetStructureUnits = (\n value: string,\n metadata?: Record<string, unknown>,\n): StructuredChunkUnit[] => {\n const lines = value\n .replace(/\\r\\n?/g, \"\\n\")\n .split(\"\\n\")\n .map((line) => normalizeWhitespace(line))\n .filter(Boolean);\n if (lines.length === 0) {\n return [];\n }\n\n const sheetName =\n (typeof metadata?.sheetName === \"string\" && metadata.sheetName) ||\n lines[0]!.replace(/^Sheet\\s+/i, \"\");\n const spreadsheetHeaders = Array.isArray(metadata?.sheetHeaders)\n ? metadata.sheetHeaders.filter(\n (value): value is string =>\n typeof value === \"string\" && value.trim().length > 0,\n )\n : [];\n const spreadsheetColumnStart =\n typeof metadata?.sheetColumnStart === \"string\" &&\n metadata.sheetColumnStart.trim().length > 0\n ? metadata.sheetColumnStart.trim().toUpperCase()\n : undefined;\n const spreadsheetColumnEnd =\n typeof metadata?.sheetColumnEnd === \"string\" &&\n metadata.sheetColumnEnd.trim().length > 0\n ? metadata.sheetColumnEnd.trim().toUpperCase()\n : undefined;\n const repeatedHeaderRowNumbers = Array.isArray(\n metadata?.repeatedHeaderRowNumbers,\n )\n ? metadata.repeatedHeaderRowNumbers.filter(\n (value): value is number =>\n typeof value === \"number\" && Number.isFinite(value),\n )\n : [];\n const spreadsheetTableCount =\n typeof metadata?.sheetTableCount === \"number\" &&\n Number.isFinite(metadata.sheetTableCount)\n ? metadata.sheetTableCount\n : Math.max(repeatedHeaderRowNumbers.length + 1, 1);\n const sheetTableColumnRanges = Array.isArray(metadata?.sheetTableColumnRanges)\n ? metadata.sheetTableColumnRanges.filter(\n (value): value is SpreadsheetTableColumnRange =>\n Boolean(value) &&\n typeof value === \"object\" &&\n typeof value.tableIndex === \"number\" &&\n Number.isFinite(value.tableIndex),\n )\n : [];\n const sheetTableHeaders = Array.isArray(metadata?.sheetTableHeaders)\n ? metadata.sheetTableHeaders.filter(\n (value): value is SpreadsheetTableHeaders =>\n Boolean(value) &&\n typeof value === \"object\" &&\n typeof value.tableIndex === \"number\" &&\n Number.isFinite(value.tableIndex) &&\n Array.isArray(value.spreadsheetHeaders),\n )\n : [];\n const rowLines = lines.filter((line) => /^Row \\d+\\./.test(line));\n if (rowLines.length === 0) {\n return [\n {\n sectionDepth: 1,\n sectionKind: \"spreadsheet_rows\",\n sectionFamilyPath: [sheetName, \"Spreadsheet Table\"],\n sectionOrdinalPath: [1, 1],\n sectionSiblingFamilyKey: \"Spreadsheet Table\",\n sectionSiblingOrdinal: 1,\n ...(spreadsheetHeaders.length > 0 ? { spreadsheetHeaders } : {}),\n ...(typeof spreadsheetColumnStart === \"string\"\n ? { spreadsheetColumnStart }\n : {}),\n ...(typeof spreadsheetColumnEnd === \"string\"\n ? { spreadsheetColumnEnd }\n : {}),\n ...(spreadsheetTableCount > 1\n ? { spreadsheetTableCount, spreadsheetTableIndex: 1 }\n : {}),\n sectionPath: [sheetName],\n sectionTitle: sheetName,\n text: normalizeWhitespace(lines.join(\"\\n\")),\n },\n ];\n }\n\n const tableSegments: { rows: string[]; tableIndex: number }[] = [];\n let currentTableRows: string[] = [];\n let tableIndex = 1;\n for (const row of rowLines) {\n const rowNumber = Number(row.match(/^Row (\\d+)\\./)?.[1] ?? NaN);\n if (\n currentTableRows.length > 0 &&\n Number.isFinite(rowNumber) &&\n repeatedHeaderRowNumbers.includes(rowNumber)\n ) {\n tableSegments.push({ rows: currentTableRows, tableIndex });\n currentTableRows = [row];\n tableIndex += 1;\n continue;\n }\n\n currentTableRows.push(row);\n }\n if (currentTableRows.length > 0) {\n tableSegments.push({ rows: currentTableRows, tableIndex });\n }\n\n const groups: Array<{\n rows: string[];\n tableIndex: number;\n }> = [];\n for (const segment of tableSegments) {\n let current: string[] = [];\n for (const row of segment.rows) {\n const candidate = [...current, row].join(\"\\n\");\n if (current.length > 0 && candidate.length > DEFAULT_MAX_CHUNK_LENGTH) {\n groups.push({ rows: current, tableIndex: segment.tableIndex });\n current = [row];\n continue;\n }\n\n current.push(row);\n }\n if (current.length > 0) {\n groups.push({ rows: current, tableIndex: segment.tableIndex });\n }\n }\n\n return groups.map(({ rows, tableIndex }) => {\n const rowNumbers = rows\n .map((row) => Number(row.match(/^Row (\\d+)\\./)?.[1] ?? NaN))\n .filter((value) => Number.isFinite(value));\n const tableColumnRange = sheetTableColumnRanges.find(\n (entry) => entry.tableIndex === tableIndex,\n );\n const tableHeaders = sheetTableHeaders.find(\n (entry) => entry.tableIndex === tableIndex,\n );\n const tableSpreadsheetColumnStart =\n typeof tableColumnRange?.spreadsheetColumnStart === \"string\"\n ? tableColumnRange.spreadsheetColumnStart\n : spreadsheetColumnStart;\n const tableSpreadsheetColumnEnd =\n typeof tableColumnRange?.spreadsheetColumnEnd === \"string\"\n ? tableColumnRange.spreadsheetColumnEnd\n : spreadsheetColumnEnd;\n const tableSpreadsheetHeaders =\n Array.isArray(tableHeaders?.spreadsheetHeaders) &&\n tableHeaders.spreadsheetHeaders.length > 0\n ? tableHeaders.spreadsheetHeaders\n : spreadsheetHeaders;\n\n return {\n preferredChunkUnits: rows,\n sectionDepth: 1,\n sectionKind: \"spreadsheet_rows\" as const,\n sectionFamilyPath: [sheetName, \"Spreadsheet Table\"],\n sectionOrdinalPath: [1, tableIndex],\n sectionSiblingFamilyKey: \"Spreadsheet Table\",\n sectionSiblingOrdinal: tableIndex,\n sectionPath: [sheetName],\n sectionTitle: sheetName,\n ...(tableSpreadsheetHeaders.length > 0\n ? { spreadsheetHeaders: tableSpreadsheetHeaders }\n : {}),\n ...(typeof tableSpreadsheetColumnStart === \"string\"\n ? { spreadsheetColumnStart: tableSpreadsheetColumnStart }\n : {}),\n ...(typeof tableSpreadsheetColumnEnd === \"string\"\n ? { spreadsheetColumnEnd: tableSpreadsheetColumnEnd }\n : {}),\n ...(spreadsheetTableCount > 1\n ? { spreadsheetTableCount, spreadsheetTableIndex: tableIndex }\n : {}),\n ...(rowNumbers.length > 0\n ? {\n spreadsheetRowEnd: rowNumbers[rowNumbers.length - 1],\n spreadsheetRowStart: rowNumbers[0],\n }\n : {}),\n text: normalizeWhitespace([`Sheet ${sheetName}`, ...rows].join(\"\\n\")),\n };\n });\n};\n\nconst presentationStructureUnits = (\n value: string,\n metadata?: Record<string, unknown>,\n): StructuredChunkUnit[] => {\n const slideNumber =\n typeof metadata?.slideNumber === \"number\"\n ? metadata.slideNumber\n : typeof metadata?.slideIndex === \"number\"\n ? metadata.slideIndex + 1\n : undefined;\n const slideTitle =\n typeof metadata?.slideTitle === \"string\" && metadata.slideTitle.trim()\n ? metadata.slideTitle.trim()\n : undefined;\n const slideBodyText =\n typeof metadata?.slideBodyText === \"string\" && metadata.slideBodyText.trim()\n ? metadata.slideBodyText.trim()\n : undefined;\n const slideNotesText =\n typeof metadata?.slideNotesText === \"string\" &&\n metadata.slideNotesText.trim()\n ? metadata.slideNotesText.trim()\n : undefined;\n const slideLabel =\n slideTitle || (slideNumber ? `Slide ${slideNumber}` : \"Slide\");\n const paragraphs = [\n slideTitle,\n slideBodyText,\n slideNotesText ? `Speaker notes: ${slideNotesText}` : undefined,\n ]\n .filter((entry): entry is string => Boolean(entry))\n .flatMap((entry) => paragraphUnits(entry));\n\n return [\n {\n preferredChunkUnits: paragraphs,\n sectionDepth: 1,\n sectionKind: \"presentation_slide\",\n sectionFamilyPath: [slideTitle || \"Slide\"],\n sectionOrdinalPath: [slideNumber ?? 1],\n sectionSiblingFamilyKey: slideTitle || \"Slide\",\n sectionSiblingOrdinal: slideNumber ?? 1,\n sectionPath: [slideLabel],\n sectionTitle: slideLabel,\n text: normalizeWhitespace([slideLabel, ...paragraphs].join(\"\\n\\n\")),\n },\n ];\n};\n\nconst emailStructureUnits = (\n value: string,\n metadata?: Record<string, unknown>,\n): StructuredChunkUnit[] => {\n const emailKind =\n typeof metadata?.emailKind === \"string\" ? metadata.emailKind : undefined;\n if (emailKind !== \"message\") {\n return [];\n }\n\n const threadTopic =\n typeof metadata?.threadTopic === \"string\" && metadata.threadTopic.trim()\n ? metadata.threadTopic.trim()\n : undefined;\n const from =\n typeof metadata?.from === \"string\" && metadata.from.trim()\n ? metadata.from.trim()\n : undefined;\n const sections = Array.isArray(metadata?.emailBodySections)\n ? metadata.emailBodySections\n : [];\n const normalizedSections: EmailBodySection[] = sections\n .map((section) => {\n if (!section || typeof section !== \"object\") {\n return undefined;\n }\n const kind =\n section.kind === \"authored_text\" ||\n section.kind === \"forwarded_headers\" ||\n section.kind === \"quoted_history\"\n ? section.kind\n : undefined;\n const text =\n typeof section.text === \"string\"\n ? normalizeWhitespace(section.text)\n : \"\";\n if (!kind || !text) {\n return undefined;\n }\n return {\n ...(Array.isArray(section.forwardedBccAddresses) &&\n section.forwardedBccAddresses.length > 0\n ? { forwardedBccAddresses: section.forwardedBccAddresses }\n : {}),\n ...(Array.isArray(section.forwardedCcAddresses) &&\n section.forwardedCcAddresses.length > 0\n ? { forwardedCcAddresses: section.forwardedCcAddresses }\n : {}),\n ...(typeof section.forwardedDate === \"string\"\n ? { forwardedDate: section.forwardedDate }\n : {}),\n ...(typeof section.forwardedFromAddress === \"string\"\n ? { forwardedFromAddress: section.forwardedFromAddress }\n : {}),\n ...(typeof section.forwardedFromDisplayName === \"string\"\n ? {\n forwardedFromDisplayName: section.forwardedFromDisplayName,\n }\n : {}),\n ...(section.forwardedHeaderFields &&\n typeof section.forwardedHeaderFields === \"object\"\n ? {\n forwardedHeaderFields: section.forwardedHeaderFields as Record<\n string,\n string\n >,\n }\n : {}),\n ...(Array.isArray(section.forwardedParticipantAddresses) &&\n section.forwardedParticipantAddresses.length > 0\n ? {\n forwardedParticipantAddresses:\n section.forwardedParticipantAddresses,\n }\n : {}),\n ...(Array.isArray(section.forwardedReplyToAddresses) &&\n section.forwardedReplyToAddresses.length > 0\n ? {\n forwardedReplyToAddresses: section.forwardedReplyToAddresses,\n }\n : {}),\n ...(typeof section.forwardedSubject === \"string\"\n ? { forwardedSubject: section.forwardedSubject }\n : {}),\n ...(typeof section.forwardedTimestamp === \"string\"\n ? { forwardedTimestamp: section.forwardedTimestamp }\n : {}),\n ...(Array.isArray(section.forwardedToAddresses) &&\n section.forwardedToAddresses.length > 0\n ? { forwardedToAddresses: section.forwardedToAddresses }\n : {}),\n ...(typeof section.quotedDepth === \"number\"\n ? { quotedDepth: section.quotedDepth }\n : {}),\n kind,\n text,\n };\n })\n .filter((section): section is EmailBodySection => Boolean(section));\n if (normalizedSections.length === 0) {\n return [];\n }\n\n const labelForSection = (kind: EmailBodySection[\"kind\"]) => {\n switch (kind) {\n case \"authored_text\":\n return \"Authored Text\";\n case \"forwarded_headers\":\n return \"Forwarded Headers\";\n case \"quoted_history\":\n return \"Quoted History\";\n case \"signature\":\n return \"Signature\";\n }\n };\n\n const familyKeyBase = threadTopic || from || \"Email Message\";\n const pathRoot =\n threadTopic || (from ? `Message from ${from}` : \"Email Message\");\n const forwardedChainCount = normalizedSections.filter(\n (section) => section.kind === \"forwarded_headers\",\n ).length;\n let forwardedOrdinal = 0;\n\n return normalizedSections.map((section, index) => {\n const sectionTitle = labelForSection(section.kind);\n const sectionForwardedOrdinal =\n section.kind === \"forwarded_headers\"\n ? (forwardedOrdinal += 1)\n : undefined;\n return {\n ...(Array.isArray(section.forwardedBccAddresses) &&\n section.forwardedBccAddresses.length > 0\n ? {\n emailForwardedBccAddresses: section.forwardedBccAddresses,\n }\n : {}),\n ...(Array.isArray(section.forwardedCcAddresses) &&\n section.forwardedCcAddresses.length > 0\n ? {\n emailForwardedCcAddresses: section.forwardedCcAddresses,\n }\n : {}),\n ...(typeof section.forwardedDate === \"string\"\n ? { emailForwardedDate: section.forwardedDate }\n : {}),\n ...(typeof section.forwardedFromAddress === \"string\"\n ? {\n emailForwardedFromAddress: section.forwardedFromAddress,\n }\n : {}),\n ...(typeof section.forwardedFromDisplayName === \"string\"\n ? {\n emailForwardedFromDisplayName: section.forwardedFromDisplayName,\n }\n : {}),\n ...(typeof sectionForwardedOrdinal === \"number\"\n ? { emailForwardedChainCount: forwardedChainCount }\n : {}),\n ...(typeof section.quotedDepth === \"number\"\n ? { emailQuotedDepth: section.quotedDepth }\n : {}),\n ...(section.forwardedHeaderFields\n ? { emailForwardedHeaderFields: section.forwardedHeaderFields }\n : {}),\n ...(Array.isArray(section.forwardedParticipantAddresses) &&\n section.forwardedParticipantAddresses.length > 0\n ? {\n emailForwardedParticipantAddresses:\n section.forwardedParticipantAddresses,\n }\n : {}),\n ...(Array.isArray(section.forwardedReplyToAddresses) &&\n section.forwardedReplyToAddresses.length > 0\n ? {\n emailForwardedReplyToAddresses: section.forwardedReplyToAddresses,\n }\n : {}),\n ...(typeof section.forwardedSubject === \"string\"\n ? { emailForwardedSubject: section.forwardedSubject }\n : {}),\n ...(typeof section.forwardedTimestamp === \"string\"\n ? { emailForwardedTimestamp: section.forwardedTimestamp }\n : {}),\n ...(Array.isArray(section.forwardedToAddresses) &&\n section.forwardedToAddresses.length > 0\n ? {\n emailForwardedToAddresses: section.forwardedToAddresses,\n }\n : {}),\n ...(typeof sectionForwardedOrdinal === \"number\"\n ? { emailForwardedOrdinal: sectionForwardedOrdinal }\n : {}),\n emailSectionKind: section.kind,\n preferredChunkUnits: paragraphUnits(section.text),\n sectionDepth: 1,\n sectionKind: \"email_block\",\n sectionFamilyPath: [familyKeyBase, section.kind],\n sectionOrdinalPath: [1, index + 1],\n sectionSiblingFamilyKey: section.kind,\n sectionSiblingOrdinal: index + 1,\n sectionPath: [pathRoot, sectionTitle],\n sectionTitle,\n text: normalizeWhitespace(`${sectionTitle}\\n${section.text}`),\n };\n });\n};\n\nconst inferFormat = (document: RAGIngestDocument) => {\n if (document.format) {\n return document.format;\n }\n\n const source = document.source?.toLowerCase() ?? \"\";\n if (source.endsWith(\".jsonl\") || source.endsWith(\".ndjson\")) {\n return \"jsonl\";\n }\n if (source.endsWith(\".xml\")) {\n return \"xml\";\n }\n if (source.endsWith(\".yaml\") || source.endsWith(\".yml\")) {\n return \"yaml\";\n }\n if (source.endsWith(\".csv\")) {\n return \"csv\";\n }\n if (source.endsWith(\".tsv\")) {\n return \"tsv\";\n }\n if (source.endsWith(\".md\") || source.endsWith(\".mdx\")) {\n return \"markdown\";\n }\n if (source.endsWith(\".html\") || source.endsWith(\".htm\")) {\n return \"html\";\n }\n\n return \"text\";\n};\n\nconst normalizeDocumentText = (text: string, format: RAGContentFormat) => {\n switch (format) {\n case \"html\":\n return stripHtml(text);\n case \"xml\":\n return normalizeWhitespace(stripHtmlTags(text));\n case \"jsonl\":\n case \"tsv\":\n case \"csv\":\n case \"yaml\":\n return normalizeWhitespace(\n text\n .split(\"\\n\")\n .map((line) => line.trim())\n .filter(Boolean)\n .join(\"\\n\\n\"),\n );\n case \"markdown\":\n return stripMarkdown(text);\n case \"text\":\n default:\n return normalizeWhitespace(text);\n }\n};\n\nconst slugify = (value: string) =>\n value\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\")\n .slice(0, RAG_DOCUMENT_SLUG_MAX_LENGTH) || \"document\";\n\nconst inferFormatFromPath = (path: string) => {\n const extension = extname(path).toLowerCase();\n if (extension === \".jsonl\" || extension === \".ndjson\") {\n return \"jsonl\";\n }\n if (extension === \".xml\") {\n return \"xml\";\n }\n if (extension === \".yaml\" || extension === \".yml\") {\n return \"yaml\";\n }\n if (extension === \".csv\") {\n return \"csv\";\n }\n if (extension === \".tsv\") {\n return \"tsv\";\n }\n if (extension === \".md\" || extension === \".mdx\") {\n return \"markdown\";\n }\n if (extension === \".html\" || extension === \".htm\") {\n return \"html\";\n }\n\n return \"text\";\n};\n\nconst inferFormatFromUrl = (input: string) => {\n try {\n return inferFormatFromPath(new URL(input).pathname);\n } catch {\n return \"text\";\n }\n};\n\nconst inferFormatFromName = (value: string | undefined) => {\n if (!value) {\n return \"text\";\n }\n\n return inferFormatFromPath(value);\n};\n\nconst inferFormatFromContentType = (contentType: string | null) => {\n const normalizedType = (contentType || \"\").toLowerCase();\n if (normalizedType.includes(\"html\")) {\n return \"html\";\n }\n if (normalizedType.includes(\"xml\")) {\n return \"xml\";\n }\n if (normalizedType.includes(\"yaml\") || normalizedType.includes(\"yml\")) {\n return \"yaml\";\n }\n if (\n normalizedType.includes(\"text/csv\") ||\n normalizedType.includes(\"application/csv\") ||\n normalizedType.includes(\"comma-separated-values\")\n ) {\n return \"csv\";\n }\n if (\n normalizedType.includes(\"tab-separated-values\") ||\n normalizedType.includes(\"text/tsv\") ||\n normalizedType.includes(\"text/tab-separated-values\")\n ) {\n return \"tsv\";\n }\n if (\n normalizedType.includes(\"x-ndjson\") ||\n normalizedType.includes(\"ndjson\") ||\n normalizedType.includes(\"jsonl\")\n ) {\n return \"jsonl\";\n }\n if (normalizedType.includes(\"text/markdown\")) {\n return \"markdown\";\n }\n if (normalizedType.includes(\"text/html\")) {\n return \"html\";\n }\n if (\n normalizedType.startsWith(\"text/\") ||\n normalizedType.includes(\"json\") ||\n normalizedType.includes(\"xml\") ||\n normalizedType.includes(\"yaml\")\n ) {\n return \"text\";\n }\n\n return undefined;\n};\n\nconst formatJSONLValue = (value: unknown, prefix?: string): string[] => {\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return prefix ? [`${prefix}: []`] : [\"[]\"];\n }\n\n const primitiveValues = value.filter(\n (entry) =>\n entry === null ||\n typeof entry === \"string\" ||\n typeof entry === \"number\" ||\n typeof entry === \"boolean\",\n );\n if (primitiveValues.length === value.length) {\n const joined = primitiveValues.map((entry) => String(entry)).join(\", \");\n return prefix ? [`${prefix}: ${joined}`] : [joined];\n }\n\n return value.flatMap((entry, index) =>\n formatJSONLValue(\n entry,\n prefix ? `${prefix}[${index + 1}]` : `[${index + 1}]`,\n ),\n );\n }\n\n if (value && typeof value === \"object\") {\n const entries = Object.entries(value);\n if (entries.length === 0) {\n return prefix ? [`${prefix}: {}`] : [\"{}\"];\n }\n\n return entries.flatMap(([key, entryValue]) =>\n formatJSONLValue(entryValue, prefix ? `${prefix}.${key}` : key),\n );\n }\n\n const rendered =\n value === null\n ? \"null\"\n : typeof value === \"string\"\n ? value\n : typeof value === \"number\" || typeof value === \"boolean\"\n ? String(value)\n : \"\";\n if (!rendered) {\n return [];\n }\n\n return prefix ? [`${prefix}: ${rendered}`] : [rendered];\n};\n\nconst jsonlStructureUnits = (value: string): StructuredChunkUnit[] => {\n const units: StructuredChunkUnit[] = [];\n const lines = value.split(\"\\n\");\n\n for (const [index, line] of lines.entries()) {\n const trimmed = line.trim();\n if (!trimmed) {\n continue;\n }\n\n let text = trimmed;\n try {\n const parsed = JSON.parse(trimmed) as unknown;\n const formatted = formatJSONLValue(parsed);\n if (formatted.length > 0) {\n text = normalizeWhitespace(formatted.join(\"\\n\"));\n }\n } catch {\n text = normalizeWhitespace(trimmed);\n }\n\n if (!text) {\n continue;\n }\n\n const recordLabel = `Record ${units.length + 1}`;\n units.push({\n preferredChunkUnits: text.split(\"\\n\").filter(Boolean),\n sectionDepth: 1,\n sectionKind: \"jsonl_record\",\n sectionPath: [recordLabel],\n sectionTitle: recordLabel,\n sourceAwareChunkReason: \"source_native_unit\",\n text: normalizeWhitespace(`${recordLabel}.\\n${text}`),\n });\n }\n\n return units;\n};\n\nconst parseDelimitedLine = (line: string, delimiter: string) => {\n const cells: string[] = [];\n let current = \"\";\n let inQuotes = false;\n\n for (let index = 0; index < line.length; index += 1) {\n const char = line[index];\n const next = index + 1 < line.length ? line[index + 1] : \"\";\n if (char === '\"') {\n if (inQuotes && next === '\"') {\n current += '\"';\n index += 1;\n continue;\n }\n inQuotes = !inQuotes;\n continue;\n }\n if (char === delimiter && !inQuotes) {\n cells.push(current.trim());\n current = \"\";\n continue;\n }\n current += char;\n }\n\n cells.push(current.trim());\n return cells;\n};\n\nconst formatDelimitedValue = (headers: string[], cells: string[]) => {\n const pairs = cells\n .map((value, index) => {\n const normalizedValue = normalizeWhitespace(value);\n if (!normalizedValue) {\n return undefined;\n }\n\n const header = normalizeWhitespace(headers[index] ?? \"\");\n return header\n ? `${header}: ${normalizedValue}`\n : `${String.fromCharCode(65 + index)}: ${normalizedValue}`;\n })\n .filter((value): value is string => Boolean(value));\n\n return pairs.length > 0 ? pairs.join(\" | \") : undefined;\n};\n\nconst delimitedStructureUnits = ({\n delimiter,\n rowKind,\n value,\n}: {\n delimiter: string;\n rowKind: \"tsv_row\" | \"csv_row\";\n value: string;\n}): StructuredChunkUnit[] => {\n const lines = value\n .replace(/\\r\\n?/g, \"\\n\")\n .split(\"\\n\")\n .map((line) => line.trim())\n .filter(Boolean);\n if (lines.length === 0) {\n return [];\n }\n\n const headers = parseDelimitedLine(lines[0] ?? \"\", delimiter).map((entry) =>\n normalizeWhitespace(entry),\n );\n const dataLines =\n headers.length > 0 && lines.length > 1 ? lines.slice(1) : lines;\n const units: StructuredChunkUnit[] = [];\n\n for (const [index, line] of dataLines.entries()) {\n const cells = parseDelimitedLine(line, delimiter);\n const rowText = formatDelimitedValue(headers, cells);\n if (!rowText) {\n continue;\n }\n\n const rowLabel = `Row ${index + 1}`;\n units.push({\n preferredChunkUnits: rowText.split(\" | \"),\n sectionDepth: 1,\n sectionKind: rowKind,\n sectionPath: [rowLabel],\n sectionTitle: rowLabel,\n sourceAwareChunkReason: \"source_native_unit\",\n text: normalizeWhitespace(`${rowLabel}.\\n${rowText}`),\n });\n }\n\n return units;\n};\n\nconst tsvStructureUnits = (value: string) =>\n delimitedStructureUnits({\n delimiter: \"\\t\",\n rowKind: \"tsv_row\",\n value,\n });\n\nconst csvStructureUnits = (value: string) =>\n delimitedStructureUnits({\n delimiter: \",\",\n rowKind: \"csv_row\",\n value,\n });\n\nconst xmlStructureUnits = (value: string): StructuredChunkUnit[] => {\n const normalized = value.replace(/\\r\\n?/g, \"\\n\");\n const units: StructuredChunkUnit[] = [];\n const body = normalized\n .replace(/<\\?xml[\\s\\S]*?\\?>/gi, \"\")\n .replace(/<!DOCTYPE[\\s\\S]*?>/gi, \"\")\n .trim();\n\n const rootMatch = body.match(/^<([A-Za-z_][\\w:.-]*)\\b[^>]*>([\\s\\S]*)<\\/\\1>$/);\n const inner = rootMatch?.[2] ?? body;\n const nodePattern =\n /<([A-Za-z_][\\w:.-]*)\\b[^>]*>([\\s\\S]*?)<\\/\\1>|<([A-Za-z_][\\w:.-]*)\\b[^>]*\\/>/g;\n\n for (const match of inner.matchAll(nodePattern)) {\n const tagName = match[1] ?? match[3];\n if (!tagName) {\n continue;\n }\n const raw = match[0] ?? \"\";\n const text = normalizeWhitespace(stripHtmlTags(raw));\n if (!text) {\n continue;\n }\n\n const label = tagName.replace(/^.*:/, \"\");\n units.push({\n preferredChunkUnits: text.split(\"\\n\").filter(Boolean),\n sectionDepth: 1,\n sectionKind: \"xml_node\",\n sectionPath: [label],\n sectionTitle: label,\n sourceAwareChunkReason: \"source_native_unit\",\n text: normalizeWhitespace(`${label}\\n${text}`),\n });\n }\n\n return units;\n};\n\nconst yamlStructureUnits = (value: string): StructuredChunkUnit[] => {\n const lines = value.replace(/\\r\\n?/g, \"\\n\").split(\"\\n\");\n const units: StructuredChunkUnit[] = [];\n let currentTitle: string | undefined;\n let currentLines: string[] = [];\n\n const flush = () => {\n if (!currentTitle && currentLines.length === 0) {\n return;\n }\n const text = normalizeWhitespace(currentLines.join(\"\\n\"));\n if (!text) {\n currentTitle = undefined;\n currentLines = [];\n return;\n }\n const title = currentTitle ?? `Section ${units.length + 1}`;\n units.push({\n preferredChunkUnits: currentLines\n .map((entry) => normalizeWhitespace(entry))\n .filter(Boolean),\n sectionDepth: 1,\n sectionKind: \"yaml_section\",\n sectionPath: [title],\n sectionTitle: title,\n sourceAwareChunkReason: \"source_native_unit\",\n text: normalizeWhitespace(`${title}\\n${text}`),\n });\n currentTitle = undefined;\n currentLines = [];\n };\n\n for (const line of lines) {\n if (!line.trim() || line.trim().startsWith(\"#\")) {\n continue;\n }\n const topLevelKey = line.match(/^([A-Za-z0-9_.-]+):(?:\\s*(.*))?$/);\n const topLevelList = line.match(/^-+\\s+(.+)$/);\n if (topLevelKey && !line.startsWith(\" \")) {\n flush();\n currentTitle = normalizeWhitespace(topLevelKey[1] ?? \"\");\n currentLines = [line];\n continue;\n }\n if (topLevelList && !line.startsWith(\" \")) {\n if (!currentTitle) {\n currentTitle = \"items\";\n }\n currentLines.push(line);\n continue;\n }\n currentLines.push(line);\n }\n\n flush();\n return units;\n};\n\nconst validateJSONLText = (value: string) => {\n const lines = value.replace(/\\r\\n?/g, \"\\n\").split(\"\\n\");\n for (const [index, line] of lines.entries()) {\n const trimmed = line.trim();\n if (!trimmed) {\n continue;\n }\n try {\n JSON.parse(trimmed);\n } catch (error) {\n const reason = error instanceof Error ? error.message : String(error);\n throw new Error(\n `AbsoluteJS detected malformed JSONL at line ${index + 1}: ${reason}`,\n );\n }\n }\n};\n\nconst validateDelimitedText = (\n value: string,\n formatLabel: \"CSV\" | \"TSV\",\n delimiter: string,\n) => {\n const lines = value.replace(/\\r\\n?/g, \"\\n\").split(\"\\n\");\n for (const [index, line] of lines.entries()) {\n if (!line.trim()) {\n continue;\n }\n let inQuotes = false;\n for (\n let characterIndex = 0;\n characterIndex < line.length;\n characterIndex += 1\n ) {\n const char = line[characterIndex];\n const next =\n characterIndex + 1 < line.length ? line[characterIndex + 1] : \"\";\n if (char === '\"') {\n if (inQuotes && next === '\"') {\n characterIndex += 1;\n continue;\n }\n inQuotes = !inQuotes;\n continue;\n }\n if (char === delimiter && !inQuotes) {\n continue;\n }\n }\n if (inQuotes) {\n throw new Error(\n `AbsoluteJS detected malformed ${formatLabel} at line ${index + 1}: unclosed quoted field`,\n );\n }\n }\n};\n\nconst validateXMLText = (value: string) => {\n const normalized = value\n .replace(/<\\?xml[\\s\\S]*?\\?>/gi, \"\")\n .replace(/<!DOCTYPE[\\s\\S]*?>/gi, \"\")\n .replace(/<!--[\\s\\S]*?-->/g, \"\");\n const tokenPattern = /<\\/?([A-Za-z_][\\w:.-]*)\\b[^>]*\\/?>/g;\n const stack: string[] = [];\n\n for (const match of normalized.matchAll(tokenPattern)) {\n const token = match[0] ?? \"\";\n const name = match[1] ?? \"\";\n if (!name) {\n continue;\n }\n const selfClosing =\n token.endsWith(\"/>\") || token.startsWith(\"<?\") || token.startsWith(\"<!\");\n if (selfClosing) {\n continue;\n }\n if (token.startsWith(\"</\")) {\n const expected = stack.pop();\n if (expected !== name) {\n throw new Error(\n `AbsoluteJS detected malformed XML: expected closing tag for <${expected ?? \"none\"}> but found </${name}>`,\n );\n }\n continue;\n }\n stack.push(name);\n }\n\n if (stack.length > 0) {\n throw new Error(\n `AbsoluteJS detected malformed XML: unclosed tag <${stack[stack.length - 1]}>`,\n );\n }\n};\n\nconst validateYAMLText = (value: string) => {\n const lines = value.replace(/\\r\\n?/g, \"\\n\").split(\"\\n\");\n let seenTopLevelKey = false;\n\n for (const [index, line] of lines.entries()) {\n if (!line.trim() || line.trim().startsWith(\"#\")) {\n continue;\n }\n if (/^\\t+/.test(line)) {\n throw new Error(\n `AbsoluteJS detected malformed YAML at line ${index + 1}: tab indentation is not supported`,\n );\n }\n if (/^\\s+/.test(line) && !seenTopLevelKey) {\n throw new Error(\n `AbsoluteJS detected malformed YAML at line ${index + 1}: nested content appears before any top-level key`,\n );\n }\n if (/^[A-Za-z0-9_.-]+:\\s*(.*)?$/.test(line)) {\n seenTopLevelKey = true;\n }\n }\n};\n\nconst validateStructuredTextInput = (\n value: string,\n format: RAGContentFormat,\n) => {\n switch (format) {\n case \"jsonl\":\n validateJSONLText(value);\n return;\n case \"csv\":\n validateDelimitedText(value, \"CSV\", \",\");\n return;\n case \"tsv\":\n validateDelimitedText(value, \"TSV\", \"\\t\");\n return;\n case \"xml\":\n validateXMLText(value);\n return;\n case \"yaml\":\n validateYAMLText(value);\n return;\n default:\n return;\n }\n};\n\nconst decodeUploadContent = (input: RAGDocumentUploadInput) => {\n if (input.encoding === \"base64\") {\n return Buffer.from(input.content, \"base64\");\n }\n\n return Buffer.from(input.content, \"utf8\");\n};\n\nconst inferNameFromInput = (input: {\n path?: string;\n name?: string;\n source?: string;\n title?: string;\n}) =>\n input.name ??\n input.path?.split(/[\\\\/]/).at(-1) ??\n input.source?.split(\"/\").at(-1) ??\n input.title ??\n DEFAULT_BINARY_NAME;\n\nconst inferExtensionFromInput = (input: {\n path?: string;\n name?: string;\n source?: string;\n}) => {\n const candidate = input.path ?? input.name ?? input.source ?? \"\";\n\n return extname(candidate).toLowerCase();\n};\n\nconst isLikelyTextData = (data: Uint8Array) => {\n if (data.length === 0) {\n return true;\n }\n\n const sample = data.subarray(0, Math.min(512, data.length));\n let suspicious = 0;\n for (const byte of sample) {\n if (byte === 9 || byte === 10 || byte === 13) {\n continue;\n }\n\n if (byte < 32 || byte === 127) {\n suspicious += 1;\n }\n }\n\n return suspicious / sample.length < 0.1;\n};\n\nconst decodePdfLiteral = (value: string) =>\n value\n .replace(/\\\\([\\\\()])/g, \"$1\")\n .replace(/\\\\n/g, \"\\n\")\n .replace(/\\\\r/g, \"\\r\")\n .replace(/\\\\t/g, \"\\t\")\n .replace(/\\\\b/g, \"\\b\")\n .replace(/\\\\f/g, \"\\f\")\n .replace(/\\\\([0-7]{1,3})/g, (_match, octal: string) =>\n String.fromCharCode(parseInt(octal, 8)),\n );\n\nconst PDF_TABLE_GAP_THRESHOLD = 120;\n\nconst extractPdfArrayText = (value: string) => {\n const parts: string[] = [];\n const tokenPattern = /\\(((?:\\\\.|[^\\\\)])*)\\)|([-+]?\\d*\\.?\\d+)/g;\n let pendingColumnGap = false;\n\n for (const match of value.matchAll(tokenPattern)) {\n if (match[1] !== undefined) {\n const decoded = decodePdfLiteral(match[1]);\n if (\n pendingColumnGap &&\n decoded &&\n !/^\\s/.test(decoded) &&\n parts.at(-1) !== \" | \"\n ) {\n parts.push(\" | \");\n }\n\n parts.push(decoded);\n pendingColumnGap = false;\n continue;\n }\n\n const gap = Number(match[2]);\n if (Number.isFinite(gap) && gap >= PDF_TABLE_GAP_THRESHOLD) {\n pendingColumnGap = true;\n }\n }\n\n return normalizeWhitespace(parts.join(\"\"))\n .replace(/\\s+\\|\\s+/g, \" | \")\n .trim();\n};\n\nconst appendPdfText = (parts: string[], value: string) => {\n if (!value) {\n return;\n }\n\n parts.push(value);\n};\n\nconst appendPdfLineBreak = (parts: string[]) => {\n const last = parts.at(-1);\n if (!last || last.endsWith(\"\\n\")) {\n return;\n }\n\n parts.push(\"\\n\");\n};\n\ntype PDFNativeTextBlock = {\n blockNumber: number;\n lineCount: number;\n pageNumber: number;\n semanticRole?: \"figure_caption\" | \"figure_body\";\n text: string;\n textKind: \"paragraph\" | \"table_like\";\n};\n\ntype PDFNativeTextBlockSeed = Omit<PDFNativeTextBlock, \"blockNumber\">;\ntype PDFNativeStructureBlockEntry = {\n baseSectionTitle: string;\n pageNumber?: number;\n pdfBlockNumber?: number;\n pdfFigureCaptionBlockNumber?: number;\n pdfFigureLabel?: string;\n pdfSemanticRole?: \"figure_caption\" | \"figure_body\";\n pdfTableBodyRowEnd?: number;\n pdfTableBodyRowCount?: number;\n pdfTableBodyRowStart?: number;\n pdfTableChunkKind?: \"full_table\" | \"table_slice\";\n pdfTableColumnCount?: number;\n pdfTableHeaderText?: string;\n pdfTableHeaders?: string[];\n pdfTableRowCount?: number;\n pdfTableSignature?: string;\n pdfTextKind: \"paragraph\" | \"table_like\";\n text: string;\n};\n\ntype PDFNativeTextExtraction = {\n pageCount: number;\n text: string;\n textBlockCount: number;\n textBlocks: PDFNativeTextBlock[];\n};\n\nconst PDF_CHROME_LINE_MAX_LENGTH = 80;\nconst PDF_LINK_CLUSTER_LINE_MAX_LENGTH = 120;\nconst PDF_FIGURE_LABEL_PATTERN =\n /^(?:figure|fig\\.)\\s*\\d+[A-Za-z]?(?:\\s*[:.-]\\s*|\\s+|$)/i;\nconst PDF_LINK_CLUSTER_HEADING_PATTERN =\n /^(?:related|quick|useful|reference|references|resources|links|see also)\\b/i;\nconst PDF_PROMO_HEADING_PATTERN =\n /^(?:start|free trial|upgrade|subscribe|newsletter|contact sales|book demo|try|learn more)\\b/i;\nconst PDF_PROMO_BODY_PATTERN =\n /\\b(?:free trial|upgrade|subscribe|newsletter|contact sales|book demo|learn more|pricing|enterprise|demo)\\b/i;\nconst OCR_SUMMARY_CONFIDENCE_THRESHOLD = 0.75;\nconst OCR_SUMMARY_MIN_STRONG_TEXT_RATIO = 0.6;\n\nconst PDF_TEXT_OPERATOR_PATTERN =\n /(\\[((?:\\\\.|[^\\]])*)\\]\\s*TJ)|(\\(((?:\\\\.|[^\\\\)])*)\\)\\s*Tj)|([-+]?\\d*\\.?\\d+\\s+[-+]?\\d*\\.?\\d+\\s+\\(((?:\\\\.|[^\\\\)])*)\\)\\s*\")|(\\(((?:\\\\.|[^\\\\)])*)\\)\\s*')|((?:[-+]?\\d*\\.?\\d+\\s+){2}(?:Td|TD))|(T\\*)|((?:[-+]?\\d*\\.?\\d+\\s+){6}Tm)/g;\n\nconst extractTextFromPDFTextObject = (value: string) => {\n const parts: string[] = [];\n\n for (const match of value.matchAll(PDF_TEXT_OPERATOR_PATTERN)) {\n if (match[2] !== undefined) {\n appendPdfText(parts, extractPdfArrayText(match[2]));\n continue;\n }\n\n if (match[4] !== undefined) {\n appendPdfText(parts, decodePdfLiteral(match[4]));\n continue;\n }\n\n if (match[6] !== undefined) {\n appendPdfLineBreak(parts);\n appendPdfText(parts, decodePdfLiteral(match[6]));\n continue;\n }\n\n if (match[8] !== undefined) {\n appendPdfLineBreak(parts);\n appendPdfText(parts, decodePdfLiteral(match[8]));\n continue;\n }\n\n if (\n match[9] !== undefined ||\n match[10] !== undefined ||\n match[11] !== undefined\n ) {\n appendPdfLineBreak(parts);\n }\n }\n\n return parts.join(\"\");\n};\n\nconst buildPDFNativeTextBlockSeed = (\n lines: string[],\n pageNumber: number,\n): PDFNativeTextBlockSeed | undefined => {\n const normalizedLines = lines\n .map((line) => normalizeWhitespace(line))\n .filter(Boolean);\n if (normalizedLines.length === 0) {\n return undefined;\n }\n const text = normalizedLines.join(\"\\n\");\n const semanticRole =\n normalizedLines.length >= 2 &&\n PDF_FIGURE_LABEL_PATTERN.test(normalizedLines[0] ?? \"\")\n ? \"figure_caption\"\n : undefined;\n\n return {\n lineCount: normalizedLines.length,\n pageNumber,\n ...(semanticRole ? { semanticRole } : {}),\n text,\n textKind: normalizedLines.some((line) => line.includes(\" | \"))\n ? \"table_like\"\n : \"paragraph\",\n };\n};\n\nconst inferPDFBlockHeading = (text: string) => {\n const lines = text\n .split(\"\\n\")\n .map((line) => normalizeWhitespace(line))\n .filter(Boolean);\n const candidate = lines[0];\n if (\n !candidate ||\n candidate.length > 80 ||\n candidate.includes(\" | \") ||\n /[.!?]$/.test(candidate)\n ) {\n return undefined;\n }\n\n return candidate;\n};\n\nconst extractPDFFigureLabel = (text: string) => {\n const lines = text\n .split(\"\\n\")\n .map((line) => normalizeWhitespace(line))\n .filter(Boolean);\n const candidate = lines[0];\n return candidate && PDF_FIGURE_LABEL_PATTERN.test(candidate)\n ? candidate\n : undefined;\n};\n\nconst splitPDFNativeTextBlocks = (\n text: string,\n pageNumber: number,\n): PDFNativeTextBlockSeed[] => {\n const lines = text\n .split(\"\\n\")\n .map((line) => normalizeWhitespace(line))\n .filter(Boolean);\n if (lines.length === 0) {\n return [];\n }\n\n const blocks: PDFNativeTextBlockSeed[] = [];\n let currentLines: string[] = [];\n let currentKind: PDFNativeTextBlock[\"textKind\"] | undefined;\n let currentSemanticRole: PDFNativeTextBlock[\"semanticRole\"] | undefined;\n\n const flush = () => {\n if (currentLines.length === 0) {\n return;\n }\n\n const block = buildPDFNativeTextBlockSeed(currentLines, pageNumber);\n if (block) {\n blocks.push(block);\n }\n currentLines = [];\n currentKind = undefined;\n currentSemanticRole = undefined;\n };\n\n for (const [index, line] of lines.entries()) {\n const lineKind: PDFNativeTextBlock[\"textKind\"] = line.includes(\" | \")\n ? \"table_like\"\n : \"paragraph\";\n const isFigureLabel = PDF_FIGURE_LABEL_PATTERN.test(line);\n\n if (isFigureLabel) {\n flush();\n currentKind = \"paragraph\";\n currentSemanticRole = \"figure_caption\";\n currentLines.push(line);\n continue;\n }\n\n if (currentSemanticRole === \"figure_caption\") {\n if (lineKind === \"paragraph\" && currentLines.length < 2) {\n currentLines.push(line);\n continue;\n }\n flush();\n }\n\n if (currentKind && lineKind !== currentKind) {\n flush();\n }\n\n currentKind = lineKind;\n currentLines.push(line);\n }\n\n flush();\n\n return blocks;\n};\n\nconst assignPDFBlockNumbers = (blocks: PDFNativeTextBlockSeed[]) =>\n blocks.map((block, index) => ({\n ...block,\n blockNumber: index + 1,\n }));\n\nconst isLikelyPDFPageLabel = (value: string) =>\n /^page\\s+\\d+(?:\\s+of\\s+\\d+)?$/i.test(value.trim());\n\nconst isLikelyPDFChromeLine = (value: string) => {\n const normalized = value.trim();\n if (!normalized) {\n return false;\n }\n\n return (\n isLikelyPDFPageLabel(normalized) ||\n /\\b(?:header|footer)\\s*$/i.test(normalized)\n );\n};\n\nconst isLikelyPDFLinkLine = (value: string) => {\n const normalized = value.trim();\n if (!normalized || normalized.length > PDF_LINK_CLUSTER_LINE_MAX_LENGTH) {\n return false;\n }\n\n return (\n /^https?:\\/\\//i.test(normalized) ||\n /^www\\./i.test(normalized) ||\n /^\\/[A-Za-z0-9/_#?&=%.-]+$/.test(normalized) ||\n /\\((?:https?:\\/\\/|\\/)[^)]+\\)/i.test(normalized)\n );\n};\n\nconst isLikelyPDFLinkClusterBlock = (block: PDFNativeTextBlock) => {\n if (block.semanticRole || block.textKind !== \"paragraph\") {\n return false;\n }\n\n const lines = block.text\n .split(\"\\n\")\n .map((line) => normalizeWhitespace(line))\n .filter(Boolean);\n if (lines.length === 1) {\n return isLikelyPDFLinkLine(lines[0] ?? \"\");\n }\n if (lines.length < 2) {\n return false;\n }\n\n const heading = lines[0] ?? \"\";\n const bodyLines = lines.slice(1);\n const linkLikeCount = bodyLines.filter((line) =>\n isLikelyPDFLinkLine(line),\n ).length;\n if (\n bodyLines.length > 0 &&\n linkLikeCount === bodyLines.length &&\n PDF_LINK_CLUSTER_HEADING_PATTERN.test(heading)\n ) {\n return true;\n }\n\n return linkLikeCount >= 2 && linkLikeCount >= Math.ceil(lines.length * 0.6);\n};\n\nconst isLikelyPDFPromoBlock = (block: PDFNativeTextBlock) => {\n if (block.semanticRole || block.textKind !== \"paragraph\") {\n return false;\n }\n\n const lines = block.text\n .split(\"\\n\")\n .map((line) => normalizeWhitespace(line))\n .filter(Boolean);\n if (lines.length === 1) {\n return PDF_PROMO_HEADING_PATTERN.test(lines[0] ?? \"\");\n }\n if (lines.length < 2 || lines.length > 4) {\n return false;\n }\n\n const heading = lines[0] ?? \"\";\n const bodyLines = lines.slice(1);\n const promoLikeCount = bodyLines.filter(\n (line) =>\n line.length <= PDF_LINK_CLUSTER_LINE_MAX_LENGTH &&\n (PDF_PROMO_BODY_PATTERN.test(line) || isLikelyPDFLinkLine(line)),\n ).length;\n\n if (\n PDF_PROMO_HEADING_PATTERN.test(heading) &&\n promoLikeCount >= Math.max(1, bodyLines.length - 1)\n ) {\n return true;\n }\n\n return false;\n};\n\nconst suppressRepeatedPDFChrome = (blocks: PDFNativeTextBlock[]) => {\n const linePages = new Map<string, Set<number>>();\n\n for (const block of blocks) {\n for (const line of block.text.split(\"\\n\")) {\n const normalized = normalizeWhitespace(line);\n if (!normalized || normalized.length > PDF_CHROME_LINE_MAX_LENGTH) {\n continue;\n }\n\n const pages = linePages.get(normalized) ?? new Set<number>();\n pages.add(block.pageNumber);\n linePages.set(normalized, pages);\n }\n }\n\n return blocks\n .map((block) => {\n const keptLines = block.text\n .split(\"\\n\")\n .map((line) => normalizeWhitespace(line))\n .filter((line) => {\n if (!line) {\n return false;\n }\n\n if (isLikelyPDFChromeLine(line)) {\n return false;\n }\n\n const repeatedPages = linePages.get(line);\n if (\n line.length <= PDF_CHROME_LINE_MAX_LENGTH &&\n repeatedPages &&\n repeatedPages.size > 1\n ) {\n return false;\n }\n\n return true;\n });\n const text = keptLines.join(\"\\n\");\n if (!text) {\n return undefined;\n }\n\n return {\n ...block,\n lineCount: text.split(\"\\n\").filter(Boolean).length,\n text,\n textKind: text.includes(\" | \") ? \"table_like\" : \"paragraph\",\n };\n })\n .filter((value): value is PDFNativeTextBlock => Boolean(value));\n};\n\nconst suppressNonContentPDFBlocks = (blocks: PDFNativeTextBlock[]) =>\n blocks.filter(\n (block) =>\n !isLikelyPDFLinkClusterBlock(block) && !isLikelyPDFPromoBlock(block),\n );\n\nconst mergePDFHeadingContinuationBlocks = (blocks: PDFNativeTextBlock[]) => {\n const merged: PDFNativeTextBlock[] = [];\n\n for (let index = 0; index < blocks.length; index += 1) {\n const block = blocks[index];\n if (!block) {\n continue;\n }\n\n const lines = block.text\n .split(\"\\n\")\n .map((line) => normalizeWhitespace(line))\n .filter(Boolean);\n const nextBlock = blocks[index + 1];\n const isHeadingOnlyBlock =\n !block.semanticRole &&\n block.textKind === \"paragraph\" &&\n lines.length === 1 &&\n inferPDFBlockHeading(block.text) === lines[0];\n const canMergeWithNext =\n isHeadingOnlyBlock &&\n nextBlock &&\n nextBlock.pageNumber === block.pageNumber &&\n !nextBlock.semanticRole &&\n nextBlock.textKind === \"paragraph\" &&\n inferPDFBlockHeading(nextBlock.text) === undefined;\n\n if (canMergeWithNext) {\n const text = [block.text, nextBlock.text]\n .flatMap((value) => value.split(\"\\n\"))\n .map((line) => normalizeWhitespace(line))\n .filter(Boolean)\n .join(\"\\n\");\n merged.push({\n ...block,\n lineCount: text.split(\"\\n\").filter(Boolean).length,\n text,\n });\n index += 1;\n continue;\n }\n\n merged.push(block);\n }\n\n return merged;\n};\n\nconst associatePDFNativeFigureBodies = (blocks: PDFNativeTextBlock[]) =>\n blocks.map((block, index) => {\n if (\n block.semanticRole ||\n block.textKind !== \"paragraph\" ||\n inferPDFBlockHeading(block.text)\n ) {\n return block;\n }\n\n const previousBlock = index > 0 ? blocks[index - 1] : undefined;\n if (\n !previousBlock ||\n previousBlock.pageNumber !== block.pageNumber ||\n previousBlock.semanticRole !== \"figure_caption\"\n ) {\n return block;\n }\n\n return {\n ...block,\n semanticRole: \"figure_body\" as const,\n };\n });\n\nconst extractNativePDFText = (data: Uint8Array): PDFNativeTextExtraction => {\n const raw = Buffer.from(data).toString(\"latin1\");\n const count = [...raw.matchAll(/\\/Type\\s*\\/Page\\b/g)].length;\n const pageCount = count > 0 ? count : 1;\n const pageMarkers = [...raw.matchAll(/\\/Type\\s*\\/Page\\b/g)].map(\n (match) => match.index ?? raw.length,\n );\n const blocks = assignPDFBlockNumbers(\n [...raw.matchAll(/BT([\\s\\S]*?)ET/g)].flatMap((match) => {\n const blockText = extractTextFromPDFTextObject(match[1] ?? \"\");\n const objectEnd = (match.index ?? 0) + (match[0]?.length ?? 0);\n const pageIndex = pageMarkers.findIndex((marker) => marker >= objectEnd);\n const pageNumber = pageIndex >= 0 ? pageIndex + 1 : pageCount;\n\n return splitPDFNativeTextBlocks(blockText, pageNumber);\n }),\n );\n const visibleBlocks = assignPDFBlockNumbers(\n associatePDFNativeFigureBodies(\n mergePDFHeadingContinuationBlocks(\n suppressNonContentPDFBlocks(suppressRepeatedPDFChrome(blocks)),\n ),\n ),\n );\n const fallbackText = [...raw.matchAll(/\\(((?:\\\\.|[^\\\\)])*)\\)\\s*Tj/g)]\n .map((match) => decodePdfLiteral(match[1] ?? \"\"))\n .join(\"\\n\");\n const text =\n visibleBlocks.length > 0\n ? normalizeWhitespace(\n visibleBlocks.map((block) => block.text).join(\"\\n\\n\"),\n )\n : normalizeWhitespace(fallbackText);\n\n return {\n pageCount,\n text,\n textBlockCount: visibleBlocks.length,\n textBlocks: visibleBlocks,\n };\n};\n\nconst readUInt16LE = (data: Uint8Array, offset: number) =>\n data[offset]! | (data[offset + 1]! << 8);\n\nconst readUInt32LE = (data: Uint8Array, offset: number) =>\n (data[offset]! |\n (data[offset + 1]! << 8) |\n (data[offset + 2]! << 16) |\n (data[offset + 3]! << 24)) >>>\n 0;\n\nconst decodeUtf8 = (data: Uint8Array) => Buffer.from(data).toString(\"utf8\");\n\n/**\n * Byte-preserving decode: each byte becomes the char with that code.\n *\n * A raw message must NOT be read as utf8 before its parts are parsed — a\n * part declaring iso-8859-1 or shift_jis has already been corrupted into\n * replacement characters by then, and no later decode can recover it. Holding\n * the message as latin1 keeps every byte addressable until the part's own\n * charset is known, at which point decodeWithCharset does the real decode.\n */\nconst decodeLatin1 = (data: Uint8Array) =>\n Buffer.from(data).toString(\"latin1\");\n\nconst isZipData = (data: Uint8Array) =>\n data.length >= 4 &&\n data[0] === 0x50 &&\n data[1] === 0x4b &&\n data[2] === 0x03 &&\n data[3] === 0x04;\n\nconst unzipEntries = (data: Uint8Array): RAGArchiveEntry[] => {\n const entries: RAGArchiveEntry[] = [];\n let offset = 0;\n\n while (offset + 30 <= data.length) {\n const signature = readUInt32LE(data, offset);\n if (signature !== 0x04034b50) {\n break;\n }\n\n const compressionMethod = readUInt16LE(data, offset + 8);\n const compressedSize = readUInt32LE(data, offset + 18);\n const fileNameLength = readUInt16LE(data, offset + 26);\n const extraFieldLength = readUInt16LE(data, offset + 28);\n const fileNameStart = offset + 30;\n const fileNameEnd = fileNameStart + fileNameLength;\n const fileName = decodeUtf8(data.subarray(fileNameStart, fileNameEnd));\n const dataStart = fileNameEnd + extraFieldLength;\n const dataEnd = dataStart + compressedSize;\n const raw = data.subarray(dataStart, dataEnd);\n let entryData: Uint8Array;\n\n if (compressionMethod === 0) {\n entryData = raw;\n } else if (compressionMethod === 8) {\n entryData = inflateRawSync(Buffer.from(raw));\n } else {\n throw new Error(\n `Unsupported ZIP compression method ${compressionMethod} for ${fileName}`,\n );\n }\n\n if (!fileName.endsWith(\"/\")) {\n entries.push({\n data: entryData,\n path: fileName,\n });\n }\n\n offset = dataEnd;\n }\n\n return entries;\n};\n\nconst untarEntries = (data: Uint8Array): RAGArchiveEntry[] => {\n const entries: RAGArchiveEntry[] = [];\n let offset = 0;\n\n while (offset + 512 <= data.length) {\n const header = data.subarray(offset, offset + 512);\n if (header.every((byte) => byte === 0)) {\n break;\n }\n\n const name = decodeUtf8(header.subarray(0, 100)).replace(/\\0.*$/, \"\");\n const sizeText = decodeUtf8(header.subarray(124, 136))\n .replace(/\\0.*$/, \"\")\n .trim();\n const size = sizeText ? parseInt(sizeText, 8) : 0;\n const typeFlag = header[156];\n const dataStart = offset + 512;\n const dataEnd = dataStart + size;\n\n if (typeFlag !== 53 && typeFlag !== 0 && typeFlag !== 48) {\n offset = dataStart + Math.ceil(size / 512) * 512;\n continue;\n }\n\n if (name) {\n entries.push({\n data: data.subarray(dataStart, dataEnd),\n path: name,\n });\n }\n\n offset = dataStart + Math.ceil(size / 512) * 512;\n }\n\n return entries;\n};\n\nconst decodeGzipEntries = (\n data: Uint8Array,\n input: RAGFileExtractionInput,\n): RAGArchiveEntry[] => {\n const ungzipped = gunzipSync(Buffer.from(data));\n const sourceName = inferNameFromInput(input);\n const stripped = sourceName.replace(/\\.t?gz$/i, \"\").replace(/\\.gz$/i, \"\");\n\n if (\n sourceName.toLowerCase().endsWith(\".tgz\") ||\n sourceName.toLowerCase().endsWith(\".tar.gz\")\n ) {\n return untarEntries(ungzipped);\n }\n\n return [\n {\n data: ungzipped,\n path: stripped || \"archive-entry\",\n },\n ];\n};\n\nconst extractXmlText = (value: string) =>\n normalizeWhitespace(\n decodeHtmlEntities(value.replace(/<[^>]+>/g, \" \").replace(/\\s+/g, \" \")),\n );\n\nconst extractOfficeParagraphText = (value: string) =>\n normalizeWhitespace(\n decodeHtmlEntities(\n value\n .replace(/<w:tab\\b[^>]*\\/>/gi, \"\\t\")\n .replace(/<w:br\\b[^>]*\\/>/gi, \"\\n\")\n .replace(/<[^>]+>/g, \" \"),\n ),\n );\n\nconst officeDocumentBlocks = (\n entries: RAGArchiveEntry[],\n): OfficeDocumentBlock[] => {\n const documentEntry = entries.find(\n (entry) => entry.path === \"word/document.xml\",\n );\n if (!documentEntry) {\n return [];\n }\n\n const xml = decodeUtf8(documentEntry.data);\n const bodyMatch = xml.match(/<w:body\\b[^>]*>([\\s\\S]*?)<\\/w:body>/i);\n const body = bodyMatch?.[1] ?? xml;\n const blocks: OfficeDocumentBlock[] = [];\n const blockPattern = /<(w:p|w:tbl)\\b[\\s\\S]*?<\\/\\1>/g;\n\n for (const match of body.matchAll(blockPattern)) {\n const blockXml = match[0] ?? \"\";\n if (blockXml.startsWith(\"<w:tbl\")) {\n const tableRows = [...blockXml.matchAll(/<w:tr\\b[\\s\\S]*?<\\/w:tr>/g)]\n .map((rowMatch) =>\n [...(rowMatch[0] ?? \"\").matchAll(/<w:tc\\b[\\s\\S]*?<\\/w:tc>/g)]\n .map((cellMatch) => extractOfficeParagraphText(cellMatch[0] ?? \"\"))\n .filter(Boolean),\n )\n .filter((cells) => cells.length > 0);\n const rows = tableRows\n .map((cells, rowIndex) => {\n return `Row ${rowIndex + 1}. ${cells\n .map(\n (cell, cellIndex) =>\n `${String.fromCharCode(65 + cellIndex)}: ${cell}`,\n )\n .join(\" | \")}`;\n })\n .filter(Boolean);\n const text = normalizeWhitespace(rows.join(\"\\n\"));\n if (!text) {\n continue;\n }\n const tableHeaders = tableRows[0];\n const tableRowCount = tableRows.length;\n const tableBodyRowCount =\n tableRowCount > 0 ? Math.max(0, tableRowCount - 1) : undefined;\n const tableColumnCount =\n Array.isArray(tableHeaders) && tableHeaders.length > 0\n ? tableHeaders.length\n : tableRows.reduce((max, row) => Math.max(max, row.length), 0) ||\n undefined;\n const tableHeaderText =\n Array.isArray(tableHeaders) && tableHeaders.length > 0\n ? tableHeaders.join(\" | \")\n : undefined;\n const tableSignature =\n Array.isArray(tableHeaders) && tableHeaders.length > 0\n ? tableHeaders.join(\" | \")\n : undefined;\n\n blocks.push({\n blockKind: \"table\",\n blockNumber: blocks.length + 1,\n ...(typeof tableBodyRowCount === \"number\" ? { tableBodyRowCount } : {}),\n ...(typeof tableColumnCount === \"number\" ? { tableColumnCount } : {}),\n ...(typeof tableHeaderText === \"string\" ? { tableHeaderText } : {}),\n ...(Array.isArray(tableHeaders) && tableHeaders.length > 0\n ? { tableHeaders }\n : {}),\n ...(typeof tableRowCount === \"number\" ? { tableRowCount } : {}),\n ...(typeof tableSignature === \"string\" ? { tableSignature } : {}),\n text,\n });\n continue;\n }\n\n const text = extractOfficeParagraphText(blockXml);\n if (!text) {\n continue;\n }\n\n const styleMatch = blockXml.match(\n /<w:pStyle\\b[^>]*w:val=\"([^\"]+)\"[^>]*\\/?>/i,\n );\n const style = (styleMatch?.[1] ?? \"\").toLowerCase();\n const headingMatch = style.match(/^heading([1-6])$/);\n const isListParagraph =\n /<w:numPr\\b/i.test(blockXml) ||\n style.includes(\"list\") ||\n style.includes(\"bullet\");\n const listLevelMatch = blockXml.match(\n /<w:ilvl\\b[^>]*w:val=\"(\\d+)\"[^>]*\\/?>/i,\n );\n const listLevel = listLevelMatch\n ? Number.parseInt(listLevelMatch[1] ?? \"0\", 10)\n : undefined;\n const blockKind: OfficeDocumentBlock[\"blockKind\"] =\n style === \"title\"\n ? \"title\"\n : headingMatch\n ? \"heading\"\n : isListParagraph\n ? \"list\"\n : \"paragraph\";\n const listPrefix =\n blockKind === \"list\"\n ? `${\" \".repeat(Math.max(0, listLevel ?? 0))}- `\n : \"\";\n const decoratedText =\n blockKind === \"list\" && !/^[-*]\\s/.test(text)\n ? `${listPrefix}${text}`\n : text;\n\n blocks.push({\n blockKind,\n blockNumber: blocks.length + 1,\n headingLevel: headingMatch\n ? Number.parseInt(headingMatch[1] ?? \"1\", 10)\n : undefined,\n listLevel:\n blockKind === \"list\" && Number.isFinite(listLevel ?? NaN)\n ? listLevel\n : undefined,\n style: style || undefined,\n text: decoratedText,\n });\n }\n\n return blocks;\n};\n\nconst officeDocumentParagraphs = (entries: RAGArchiveEntry[]) => {\n return officeDocumentBlocks(entries)\n .map((block) => block.text)\n .filter(Boolean);\n};\n\nconst officeDocumentText = (entries: RAGArchiveEntry[]) => {\n const blocks = officeDocumentBlocks(entries);\n if (blocks.length > 0) {\n return normalizeWhitespace(blocks.map((block) => block.text).join(\"\\n\\n\"));\n }\n\n const documentEntry = entries.find(\n (entry) => entry.path === \"word/document.xml\",\n );\n if (!documentEntry) {\n return \"\";\n }\n\n return extractXmlText(decodeUtf8(documentEntry.data));\n};\n\nconst officeDocumentSectionCount = (entries: RAGArchiveEntry[]) => {\n const count = officeDocumentBlocks(entries).length;\n\n return count > 0 ? count : undefined;\n};\n\nconst spreadsheetSharedStrings = (entries: RAGArchiveEntry[]) =>\n entries\n .filter((entry) => entry.path === \"xl/sharedStrings.xml\")\n .flatMap((entry) =>\n [...decodeUtf8(entry.data).matchAll(/<t[^>]*>([\\s\\S]*?)<\\/t>/g)].map(\n (match) => decodeHtmlEntities(match[1] ?? \"\"),\n ),\n );\n\nconst spreadsheetColumnLabel = (reference: string | undefined) => {\n const match = reference?.match(/([A-Z]+)/i);\n return match?.[1]?.toUpperCase() ?? \"\";\n};\n\nconst spreadsheetColumnIndex = (label: string | undefined) => {\n if (typeof label !== \"string\" || label.length === 0) {\n return undefined;\n }\n\n let index = 0;\n for (const character of label.toUpperCase()) {\n const code = character.charCodeAt(0);\n if (code < 65 || code > 90) {\n return undefined;\n }\n index = index * 26 + (code - 64);\n }\n\n return index > 0 ? index : undefined;\n};\n\nconst spreadsheetColumnLabelFromIndex = (index: number | undefined) => {\n if (typeof index !== \"number\" || !Number.isFinite(index) || index < 1) {\n return undefined;\n }\n\n let remaining = Math.floor(index);\n let label = \"\";\n while (remaining > 0) {\n const offset = (remaining - 1) % 26;\n label = String.fromCharCode(65 + offset) + label;\n remaining = Math.floor((remaining - 1) / 26);\n }\n\n return label || undefined;\n};\n\nconst spreadsheetColumnRange = (\n rows: Array<{ column: string; reference?: string; value: string }[]>,\n) => {\n let spreadsheetColumnStart: string | undefined;\n let spreadsheetColumnEnd: string | undefined;\n let startIndex: number | undefined;\n let endIndex: number | undefined;\n\n for (const row of rows) {\n for (const cell of row) {\n const columnIndex = spreadsheetColumnIndex(cell.column);\n if (typeof columnIndex !== \"number\" || !Number.isFinite(columnIndex)) {\n continue;\n }\n\n if (typeof startIndex !== \"number\" || columnIndex < startIndex) {\n startIndex = columnIndex;\n spreadsheetColumnStart = cell.column;\n }\n\n if (typeof endIndex !== \"number\" || columnIndex > endIndex) {\n endIndex = columnIndex;\n spreadsheetColumnEnd = cell.column;\n }\n }\n }\n\n return {\n spreadsheetColumnEnd,\n spreadsheetColumnStart,\n };\n};\n\nconst sortSpreadsheetCellsByColumn = <\n TCell extends { column: string; reference?: string },\n>(\n cells: TCell[],\n) =>\n [...cells].sort((left, right) => {\n const leftIndex = spreadsheetColumnIndex(left.column);\n const rightIndex = spreadsheetColumnIndex(right.column);\n if (\n typeof leftIndex === \"number\" &&\n Number.isFinite(leftIndex) &&\n typeof rightIndex === \"number\" &&\n Number.isFinite(rightIndex) &&\n leftIndex !== rightIndex\n ) {\n return leftIndex - rightIndex;\n }\n\n return (left.reference ?? left.column).localeCompare(\n right.reference ?? right.column,\n );\n });\n\ntype SpreadsheetTableColumnRange = {\n tableIndex: number;\n spreadsheetColumnStart?: string;\n spreadsheetColumnEnd?: string;\n};\n\ntype SpreadsheetTableHeaders = {\n tableIndex: number;\n spreadsheetHeaders: string[];\n};\n\ntype SpreadsheetWorksheetCell = {\n column: string;\n reference?: string;\n value: string;\n};\n\ntype SpreadsheetWorksheetRow = {\n cells: SpreadsheetWorksheetCell[];\n rowNumber: number;\n};\n\ntype SpreadsheetSheetText = {\n headers: string[];\n name: string;\n repeatedHeaderRowNumbers: number[];\n rowCount: number;\n sheetTableHeaders: SpreadsheetTableHeaders[];\n sheetTableColumnRanges: SpreadsheetTableColumnRange[];\n spreadsheetColumnEnd?: string;\n spreadsheetColumnStart?: string;\n tableCount: number;\n text: string;\n};\n\nconst spreadsheetResolveCellValue = (\n cellXml: string,\n sharedStrings: string[],\n) => {\n const inlineMatch = cellXml.match(\n /<is\\b[^>]*>[\\s\\S]*?<t[^>]*>([\\s\\S]*?)<\\/t>[\\s\\S]*?<\\/is>/i,\n );\n if (inlineMatch?.[1]) {\n return normalizeWhitespace(decodeHtmlEntities(inlineMatch[1]));\n }\n\n const valueMatch = cellXml.match(/<v>([\\s\\S]*?)<\\/v>/i);\n if (!valueMatch?.[1]) {\n return \"\";\n }\n\n const rawValue = decodeHtmlEntities(valueMatch[1]);\n const typeMatch = cellXml.match(/\\bt=\"([^\"]+)\"/i);\n if (typeMatch?.[1] === \"s\") {\n const index = Number(rawValue);\n return Number.isInteger(index) && sharedStrings[index]\n ? sharedStrings[index]!\n : rawValue;\n }\n\n return normalizeWhitespace(rawValue);\n};\n\nconst spreadsheetWorksheetRows = (\n worksheetXml: string,\n sharedStrings: string[],\n) =>\n [...worksheetXml.matchAll(/<row\\b([^>]*)>([\\s\\S]*?)<\\/row>/gi)]\n .map((rowMatch) => {\n const rowAttributes = rowMatch[1] ?? \"\";\n const rowXml = rowMatch[2] ?? \"\";\n const cells = sortSpreadsheetCellsByColumn(\n [...rowXml.matchAll(/<c\\b([^>]*)>([\\s\\S]*?)<\\/c>/gi)]\n .map((cellMatch) => {\n const attributes = cellMatch[1] ?? \"\";\n const cellBody = cellMatch[2] ?? \"\";\n const referenceMatch = attributes.match(/\\br=\"([^\"]+)\"/i);\n const reference = referenceMatch?.[1];\n const value = spreadsheetResolveCellValue(\n `<c${attributes}>${cellBody}</c>`,\n sharedStrings,\n );\n\n return {\n column: spreadsheetColumnLabel(reference),\n reference,\n value,\n };\n })\n .filter((cell) => cell.value),\n );\n const explicitRowNumber = Number.parseInt(\n rowAttributes.match(/\\br=\"(\\d+)\"/i)?.[1] ?? \"\",\n 10,\n );\n const fallbackRowNumber = Number.parseInt(\n cells[0]?.reference?.match(/\\d+/)?.[0] ?? \"\",\n 10,\n );\n\n return {\n cells,\n rowNumber: Number.isInteger(explicitRowNumber)\n ? explicitRowNumber\n : Number.isInteger(fallbackRowNumber)\n ? fallbackRowNumber\n : 0,\n };\n })\n .filter((row) => row.cells.length > 0)\n .map((row, index) => ({\n ...row,\n rowNumber: row.rowNumber > 0 ? row.rowNumber : index + 1,\n }));\n\nconst spreadsheetRowText = (\n row: { column: string; reference?: string; value: string }[],\n headers: string[],\n headerColumns?: string[],\n) => {\n const entries = row.map((cell, index) => {\n const exactHeaderIndex = Array.isArray(headerColumns)\n ? headerColumns.findIndex((column) => column === cell.column)\n : -1;\n const headerIndex = exactHeaderIndex >= 0 ? exactHeaderIndex : index;\n const header = headers[headerIndex];\n if (header) {\n return `${header}: ${cell.value}`;\n }\n\n return cell.column ? `${cell.column}: ${cell.value}` : cell.value;\n });\n\n return normalizeWhitespace(entries.join(\" | \"));\n};\n\nconst normalizeSpreadsheetHeaderValue = (value: string) =>\n normalizeWhitespace(value).toLowerCase();\n\nconst isSpreadsheetHeaderRow = (row: { value: string }[], headers: string[]) =>\n row.length === headers.length &&\n row.every(\n (cell, index) =>\n normalizeSpreadsheetHeaderValue(cell.value) ===\n normalizeSpreadsheetHeaderValue(headers[index] ?? \"\"),\n );\n\nconst isSpreadsheetHeaderLikeRow = (row: { value: string }[]) =>\n row.length > 0 &&\n row.every((cell) => {\n const normalized = normalizeSpreadsheetHeaderValue(cell.value);\n return (\n normalized.length > 0 &&\n /[a-z]/i.test(normalized) &&\n !/^\\d+(?:\\.\\d+)?$/.test(normalized)\n );\n });\n\nconst isSpreadsheetWeakHeaderRestartRow = (\n row: { value: string }[],\n headers: string[],\n) => {\n if (row.length === 0 || row.length !== headers.length) {\n return false;\n }\n\n const normalizedRow = row.map((cell) =>\n normalizeSpreadsheetHeaderValue(cell.value),\n );\n const normalizedHeaders = headers.map((value) =>\n normalizeSpreadsheetHeaderValue(value),\n );\n if (\n normalizedRow.every(\n (value, index) => value === (normalizedHeaders[index] ?? \"\"),\n )\n ) {\n return false;\n }\n\n const overlappingHeaderCount = normalizedRow.filter((value, index) => {\n const currentHeader = normalizedHeaders[index] ?? \"\";\n return value.length > 0 && value === currentHeader;\n }).length;\n const alphaishCellCount = normalizedRow.filter(\n (value) => value.length > 0 && /[a-z]/i.test(value),\n ).length;\n\n return (\n overlappingHeaderCount > 0 &&\n alphaishCellCount > 0 &&\n overlappingHeaderCount + alphaishCellCount >=\n Math.max(1, Math.ceil(row.length / 2))\n );\n};\n\nconst isSpreadsheetSparseHeaderRestartRow = (\n row: { column: string; value: string }[],\n headers: string[],\n headerColumns: string[],\n) => {\n if (\n row.length === 0 ||\n row.length >= headers.length ||\n headerColumns.length !== headers.length\n ) {\n return false;\n }\n\n const headerColumnSet = new Set(headerColumns);\n if (!row.every((cell) => headerColumnSet.has(cell.column))) {\n return false;\n }\n\n return row.every((cell) => {\n const normalized = normalizeSpreadsheetHeaderValue(cell.value);\n return (\n normalized.length > 0 &&\n /[a-z]/i.test(normalized) &&\n !/^\\d+(?:\\.\\d+)?$/.test(normalized)\n );\n });\n};\n\nconst isSpreadsheetSparseShiftedHeaderRestartRow = (\n row: { value: string }[],\n headers: string[],\n) => {\n if (row.length === 0 || row.length >= headers.length) {\n return false;\n }\n\n return row.every((cell) => {\n const normalized = normalizeSpreadsheetHeaderValue(cell.value);\n return (\n normalized.length > 0 &&\n /[a-z]/i.test(normalized) &&\n !/^\\d+(?:\\.\\d+)?$/.test(normalized)\n );\n });\n};\n\nconst buildSpreadsheetShiftedHeaderColumns = (\n row: { column: string; value: string }[],\n headerWidth: number,\n) => {\n const startIndex = spreadsheetColumnIndex(row[0]?.column);\n if (\n typeof startIndex !== \"number\" ||\n !Number.isFinite(startIndex) ||\n headerWidth < 1\n ) {\n return row.map((cell) => cell.column);\n }\n\n return Array.from({ length: headerWidth }, (_, index) =>\n spreadsheetColumnLabelFromIndex(startIndex + index),\n ).filter((value): value is string => typeof value === \"string\");\n};\n\nconst mergeSpreadsheetRestartHeaders = (\n row: { column: string; value: string }[],\n previousHeaders: string[],\n previousHeaderColumns: string[],\n) =>\n previousHeaderColumns.map((column, index) => {\n const currentCell = row.find((cell) => cell.column === column);\n const normalized = normalizeSpreadsheetHeaderValue(\n currentCell?.value ?? \"\",\n );\n if (normalized.length > 0) {\n return currentCell!.value;\n }\n\n return previousHeaders[index] ?? currentCell?.value ?? \"\";\n });\n\nconst spreadsheetSheetTexts = (\n entries: RAGArchiveEntry[],\n): SpreadsheetSheetText[] => {\n const sharedStrings = spreadsheetSharedStrings(entries);\n const sheetNames = spreadsheetSheetNames(entries);\n const sheetEntries = entries\n .filter(\n (entry) =>\n entry.path.startsWith(\"xl/worksheets/\") && entry.path.endsWith(\".xml\"),\n )\n .sort((left, right) => left.path.localeCompare(right.path));\n\n const sheets = sheetEntries.map<SpreadsheetSheetText | null>(\n (entry, index) => {\n const rows = spreadsheetWorksheetRows(\n decodeUtf8(entry.data),\n sharedStrings,\n );\n if (rows.length === 0) {\n return null;\n }\n\n const headers = rows[0]!.cells.map((cell) => cell.value);\n const { spreadsheetColumnEnd, spreadsheetColumnStart } =\n spreadsheetColumnRange(rows.map((row) => row.cells));\n const repeatedHeaderRowNumbers: number[] = [];\n const sheetTableHeaders: SpreadsheetTableHeaders[] = [];\n let tableCount = 1;\n const tableRows: Array<{\n rows: SpreadsheetWorksheetCell[][];\n tableIndex: number;\n }> = [];\n let currentTableRows: SpreadsheetWorksheetCell[][] | undefined;\n let currentTableIndex = 1;\n let currentTableHeaders = headers;\n let currentTableHeaderColumns = rows[0]!.cells.map((cell) => cell.column);\n let currentTableColumnStart = spreadsheetColumnRange([\n rows[0]!.cells,\n ]).spreadsheetColumnStart;\n let currentTableColumnEnd = spreadsheetColumnRange([\n rows[0]!.cells,\n ]).spreadsheetColumnEnd;\n const rowTexts = rows.map((rowEntry, rowIndex) => {\n const row = rowEntry.cells;\n const rowNumber = rowEntry.rowNumber;\n const rowColumnRange = spreadsheetColumnRange([row]);\n const previousRowNumber = rows[rowIndex - 1]?.rowNumber;\n const hasBlankRowGap =\n typeof previousRowNumber === \"number\" &&\n rowNumber > previousRowNumber + 1;\n const isShiftedHeaderRow =\n rowIndex > 0 &&\n row.length === currentTableHeaders.length &&\n isSpreadsheetHeaderLikeRow(row) &&\n (rowColumnRange.spreadsheetColumnStart !== currentTableColumnStart ||\n rowColumnRange.spreadsheetColumnEnd !== currentTableColumnEnd);\n const isBlankGapShiftedTableRestart =\n rowIndex > 0 &&\n hasBlankRowGap &&\n (rowColumnRange.spreadsheetColumnStart !== currentTableColumnStart ||\n rowColumnRange.spreadsheetColumnEnd !== currentTableColumnEnd);\n const isBlankGapHeaderRestart =\n rowIndex > 0 &&\n hasBlankRowGap &&\n rowColumnRange.spreadsheetColumnStart === currentTableColumnStart &&\n rowColumnRange.spreadsheetColumnEnd === currentTableColumnEnd &&\n ((isSpreadsheetHeaderLikeRow(row) &&\n !isSpreadsheetHeaderRow(row, currentTableHeaders)) ||\n isSpreadsheetWeakHeaderRestartRow(row, currentTableHeaders));\n const isBlankGapSparseHeaderRestart =\n rowIndex > 0 &&\n hasBlankRowGap &&\n isSpreadsheetSparseHeaderRestartRow(\n row,\n currentTableHeaders,\n currentTableHeaderColumns,\n );\n const isShiftedSparseHeaderRestart =\n rowIndex > 0 &&\n hasBlankRowGap &&\n (rowColumnRange.spreadsheetColumnStart !== currentTableColumnStart ||\n rowColumnRange.spreadsheetColumnEnd !== currentTableColumnEnd) &&\n isSpreadsheetSparseShiftedHeaderRestartRow(row, currentTableHeaders);\n const isAnySparseHeaderRestart =\n isBlankGapSparseHeaderRestart || isShiftedSparseHeaderRestart;\n const isHeaderRow =\n rowIndex === 0 ||\n isSpreadsheetHeaderRow(row, currentTableHeaders) ||\n isShiftedHeaderRow ||\n isBlankGapShiftedTableRestart ||\n isBlankGapHeaderRestart ||\n isAnySparseHeaderRestart;\n if (rowIndex > 0 && isHeaderRow) {\n repeatedHeaderRowNumbers.push(rowNumber);\n tableCount += 1;\n if (currentTableRows && currentTableRows.length > 0) {\n tableRows.push({\n rows: currentTableRows,\n tableIndex: currentTableIndex,\n });\n sheetTableHeaders.push({\n spreadsheetHeaders: currentTableHeaders,\n tableIndex: currentTableIndex,\n });\n }\n currentTableIndex = tableCount;\n const nextTableHeaderColumns = isShiftedSparseHeaderRestart\n ? buildSpreadsheetShiftedHeaderColumns(\n row,\n currentTableHeaderColumns.length,\n )\n : isBlankGapSparseHeaderRestart\n ? currentTableHeaderColumns\n : row.map((cell) => cell.column);\n currentTableHeaders = isAnySparseHeaderRestart\n ? mergeSpreadsheetRestartHeaders(\n row,\n currentTableHeaders,\n nextTableHeaderColumns,\n )\n : row.map((cell) => cell.value);\n currentTableHeaderColumns = nextTableHeaderColumns;\n currentTableColumnStart = isShiftedSparseHeaderRestart\n ? nextTableHeaderColumns[0]\n : isBlankGapSparseHeaderRestart\n ? currentTableColumnStart\n : rowColumnRange.spreadsheetColumnStart;\n currentTableColumnEnd = isShiftedSparseHeaderRestart\n ? nextTableHeaderColumns.at(-1)\n : isBlankGapSparseHeaderRestart\n ? currentTableColumnEnd\n : rowColumnRange.spreadsheetColumnEnd;\n currentTableRows = [row];\n } else {\n currentTableRows = [...(currentTableRows ?? []), row];\n }\n\n return normalizeWhitespace(\n `Row ${rowNumber}. ${spreadsheetRowText(\n row,\n isHeaderRow ? [] : currentTableHeaders,\n isHeaderRow ? [] : currentTableHeaderColumns,\n )}`,\n );\n });\n if (currentTableRows && currentTableRows.length > 0) {\n tableRows.push({\n rows: currentTableRows,\n tableIndex: currentTableIndex,\n });\n sheetTableHeaders.push({\n spreadsheetHeaders: currentTableHeaders,\n tableIndex: currentTableIndex,\n });\n }\n const sheetTableColumnRanges = tableRows.map(\n ({ rows, tableIndex }): SpreadsheetTableColumnRange => ({\n tableIndex,\n ...spreadsheetColumnRange(rows),\n }),\n );\n const text = normalizeWhitespace(rowTexts.join(\"\\n\"));\n if (!text) {\n return null;\n }\n\n return {\n headers,\n name: sheetNames[index] ?? `Sheet ${index + 1}`,\n repeatedHeaderRowNumbers,\n rowCount: rowTexts.length,\n sheetTableHeaders,\n sheetTableColumnRanges,\n spreadsheetColumnEnd,\n spreadsheetColumnStart,\n tableCount,\n text,\n };\n },\n );\n\n return sheets.filter(\n (entry): entry is SpreadsheetSheetText => entry !== null,\n );\n};\n\nconst spreadsheetText = (entries: RAGArchiveEntry[]) =>\n normalizeWhitespace(\n spreadsheetSheetTexts(entries)\n .map((sheet) => `Sheet ${sheet.name}\\n${sheet.text}`)\n .join(\"\\n\\n\"),\n );\n\nconst spreadsheetSheetNames = (entries: RAGArchiveEntry[]) =>\n entries\n .filter((entry) => entry.path === \"xl/workbook.xml\")\n .flatMap((entry) =>\n [...decodeUtf8(entry.data).matchAll(/<sheet[^>]*name=\"([^\"]+)\"/g)].map(\n (match) => match[1] ?? \"\",\n ),\n )\n .filter(Boolean);\n\nconst presentationNotesByIndex = (entries: RAGArchiveEntry[]) =>\n new Map(\n entries\n .filter(\n (entry) =>\n entry.path.startsWith(\"ppt/notesSlides/\") &&\n entry.path.endsWith(\".xml\"),\n )\n .sort((left, right) => left.path.localeCompare(right.path))\n .map((entry) => {\n const indexMatch = entry.path.match(/notesSlide(\\d+)\\.xml$/i);\n const index = Number(indexMatch?.[1] ?? \"0\") - 1;\n return [\n index,\n normalizeWhitespace(extractXmlText(decodeUtf8(entry.data))),\n ] as const;\n })\n .filter((entry) => entry[0] >= 0 && Boolean(entry[1])),\n );\n\nconst presentationSlides = (entries: RAGArchiveEntry[]) => {\n const notesByIndex = presentationNotesByIndex(entries);\n\n return entries\n .filter(\n (entry) =>\n entry.path.startsWith(\"ppt/slides/\") && entry.path.endsWith(\".xml\"),\n )\n .sort((left, right) => left.path.localeCompare(right.path))\n .map((entry, index) => {\n const textRuns = [\n ...decodeUtf8(entry.data).matchAll(/<a:t[^>]*>([\\s\\S]*?)<\\/a:t>/gi),\n ]\n .map((match) => normalizeWhitespace(decodeHtmlEntities(match[1] ?? \"\")))\n .filter(Boolean);\n const slideTitle = textRuns[0];\n const slideBodyText = normalizeWhitespace(textRuns.slice(1).join(\"\\n\"));\n const slideText = normalizeWhitespace(\n [slideTitle, slideBodyText].filter(Boolean).join(\"\\n\"),\n );\n const notesText = notesByIndex.get(index);\n const text = normalizeWhitespace(\n [slideText, notesText ? `Speaker notes: ${notesText}` : \"\"]\n .filter(Boolean)\n .join(\"\\n\"),\n );\n\n return {\n index,\n slideBodyText,\n slideTitle,\n notesText,\n text,\n };\n })\n .filter((slide) => Boolean(slide.text));\n};\n\nconst presentationText = (entries: RAGArchiveEntry[]) =>\n normalizeWhitespace(\n presentationSlides(entries)\n .map((slide) => slide.text)\n .join(\"\\n\\n\"),\n );\n\nconst presentationSlideCount = (entries: RAGArchiveEntry[]) =>\n entries.filter(\n (entry) =>\n entry.path.startsWith(\"ppt/slides/\") && entry.path.endsWith(\".xml\"),\n ).length;\n\nconst epubText = (entries: RAGArchiveEntry[]) => {\n const htmlEntries = entries.filter((entry) =>\n /\\.(xhtml|html|htm)$/i.test(entry.path),\n );\n\n return normalizeWhitespace(\n htmlEntries.map((entry) => stripHtml(decodeUtf8(entry.data))).join(\"\\n\\n\"),\n );\n};\n\nconst splitEmailMessage = (raw: string) => {\n const normalized = raw.replace(/\\r\\n?/g, \"\\n\");\n const separator = normalized.indexOf(\"\\n\\n\");\n if (separator < 0) {\n return {\n body: \"\",\n headerBlock: normalized,\n };\n }\n\n return {\n body: normalized.slice(separator + 2),\n headerBlock: normalized.slice(0, separator),\n };\n};\n\nconst EMAIL_MBOX_BOUNDARY_PATTERN = /^From [^\\s]+ .+$/;\n\nconst looksLikeMboxBoundary = (lines: string[], index: number) => {\n const line = lines[index];\n if (!EMAIL_MBOX_BOUNDARY_PATTERN.test(line ?? \"\")) {\n return false;\n }\n\n for (let offset = index + 1; offset < lines.length; offset += 1) {\n const candidate = lines[offset]?.trim() ?? \"\";\n if (!candidate) {\n return false;\n }\n if (/^[A-Za-z-]+:\\s+\\S+/.test(candidate)) {\n return true;\n }\n if (EMAIL_MBOX_BOUNDARY_PATTERN.test(candidate)) {\n return false;\n }\n }\n\n return false;\n};\n\nconst splitMboxMessages = (raw: string) => {\n const normalized = raw.replace(/\\r\\n?/g, \"\\n\");\n const lines = normalized.split(\"\\n\");\n const messages: string[] = [];\n let currentLines: string[] = [];\n\n const pushCurrent = () => {\n const text = currentLines.join(\"\\n\").trim();\n if (text) {\n messages.push(text);\n }\n currentLines = [];\n };\n\n for (let index = 0; index < lines.length; index += 1) {\n const line = lines[index] ?? \"\";\n if (looksLikeMboxBoundary(lines, index)) {\n pushCurrent();\n continue;\n }\n\n currentLines.push(line.replace(/^>(>*From )/, \"$1\"));\n }\n\n pushCurrent();\n\n return messages;\n};\n\nconst buildMailboxStateMetadata = (stateFlags: string[]) => ({\n ...(stateFlags.length > 0 ? { emailMailboxStateFlags: stateFlags } : {}),\n emailMailboxIsDraft: stateFlags.includes(\"draft\"),\n emailMailboxIsFlagged: stateFlags.includes(\"flagged\"),\n emailMailboxIsPassed: stateFlags.includes(\"passed\"),\n emailMailboxIsRead: stateFlags.includes(\"read\"),\n emailMailboxIsReplied: stateFlags.includes(\"replied\"),\n emailMailboxIsTrashed: stateFlags.includes(\"trashed\"),\n emailMailboxIsUnread: stateFlags.includes(\"unread\"),\n});\n\nconst parseMailboxAttachmentNames = (value: string | undefined) => {\n if (!value) {\n return [];\n }\n\n return value\n .split(/[;,|]+/g)\n .map((entry) => normalizeWhitespace(entry))\n .filter(Boolean);\n};\n\nconst parseMailboxStateFlags = (value: string | undefined) => {\n if (!value) {\n return [];\n }\n\n const tokens = value\n .toLowerCase()\n .split(/[^a-z0-9]+/g)\n .map((token) => token.trim())\n .filter(Boolean);\n const flags = new Set<string>();\n const add = (flag: string) => flags.add(flag);\n\n for (const token of tokens) {\n switch (token) {\n case \"read\":\n case \"seen\":\n add(\"read\");\n break;\n case \"unread\":\n case \"unseen\":\n case \"new\":\n add(\"unread\");\n break;\n case \"flagged\":\n case \"starred\":\n case \"important\":\n add(\"flagged\");\n break;\n case \"replied\":\n case \"answered\":\n add(\"replied\");\n break;\n case \"draft\":\n add(\"draft\");\n break;\n case \"trashed\":\n case \"trash\":\n case \"deleted\":\n add(\"trashed\");\n break;\n case \"passed\":\n case \"forwarded\":\n add(\"passed\");\n break;\n }\n }\n\n if (!flags.has(\"read\") && !flags.has(\"unread\")) {\n flags.add(\"unread\");\n }\n\n return [...flags];\n};\n\nconst parseMailboxFolderMetadata = (value: string | undefined) => {\n if (!value) {\n return {};\n }\n\n const pathSegments = value\n .split(/[\\\\/]+/)\n .map((segment) => normalizeWhitespace(segment))\n .filter(Boolean);\n if (pathSegments.length === 0) {\n return {};\n }\n\n const familyKey = pathSegments\n .map((segment) => segment.toLowerCase())\n .join(\"/\");\n const leaf = pathSegments.at(-1);\n\n return {\n emailMailboxFamilyKey: familyKey,\n emailMailboxFolder: leaf,\n emailMailboxLeaf: leaf,\n emailMailboxPathDepth: pathSegments.length,\n emailMailboxPathSegments: pathSegments,\n };\n};\n\nconst MAILBOX_CONTAINER_DECORATOR_KEYS = new Set([\n \"folder\",\n \"mailbox\",\n \"flags\",\n \"sender\",\n \"sender-name\",\n \"sender-email\",\n \"recipients\",\n \"to-recipients\",\n \"cc-recipients\",\n \"bcc-recipients\",\n \"reply-to-recipients\",\n \"sent\",\n \"received\",\n \"internet-message-id\",\n \"client-submit-time\",\n \"delivery-time\",\n \"creation-time\",\n \"last-modified-time\",\n \"parent-message-id\",\n \"reference-chain\",\n \"message-class\",\n \"attachment\",\n \"attachment-content-id\",\n \"attachment-content-location\",\n \"attachment-content-type\",\n \"attachment-data\",\n \"attachment-disposition\",\n \"attachment-transfer-encoding\",\n \"attachments\",\n \"categories\",\n \"conversation-index\",\n \"conversation-topic\",\n \"has-attachments\",\n \"importance\",\n \"normalized-subject\",\n \"read\",\n \"unread\",\n \"flagged\",\n \"replied\",\n \"answered\",\n \"draft\",\n \"passed\",\n \"forwarded\",\n \"sensitivity\",\n \"thread-topic\",\n \"trashed\",\n \"deleted\",\n]);\n\nconst MAILBOX_CONTAINER_EMAIL_HEADER_KEYS = new Set([\n \"subject\",\n \"from\",\n \"to\",\n \"cc\",\n \"bcc\",\n \"reply-to\",\n \"thread-topic\",\n \"date\",\n \"message-id\",\n \"in-reply-to\",\n \"references\",\n \"content-type\",\n]);\n\nconst buildMailboxContainerSenderHeader = (\n leadingMetadata: Record<string, string>,\n) => {\n const explicitSender = normalizeWhitespace(leadingMetadata.sender ?? \"\");\n if (explicitSender) {\n return explicitSender;\n }\n\n const senderEmail = normalizeWhitespace(\n leadingMetadata[\"sender-email\"] ?? \"\",\n );\n const senderName = normalizeWhitespace(leadingMetadata[\"sender-name\"] ?? \"\");\n if (senderEmail && senderName) {\n return `${senderName} <${senderEmail}>`;\n }\n return senderEmail || senderName || undefined;\n};\n\nconst buildMailboxContainerSyntheticHeaders = (\n messageRaw: string,\n leadingMetadata: Record<string, string>,\n) => {\n const { headerBlock, body } = splitEmailMessage(messageRaw);\n const headers = parseHeaderBlock(headerBlock);\n const syntheticHeaderLines: string[] = [];\n const senderHeader = buildMailboxContainerSenderHeader(leadingMetadata);\n const toHeader = normalizeWhitespace(\n leadingMetadata[\"to-recipients\"] ?? leadingMetadata.recipients ?? \"\",\n );\n const ccHeader = normalizeWhitespace(leadingMetadata[\"cc-recipients\"] ?? \"\");\n const bccHeader = normalizeWhitespace(\n leadingMetadata[\"bcc-recipients\"] ?? \"\",\n );\n const replyToHeader = normalizeWhitespace(\n leadingMetadata[\"reply-to-recipients\"] ?? \"\",\n );\n const threadTopicHeader = normalizeWhitespace(\n leadingMetadata[\"conversation-topic\"] ??\n leadingMetadata[\"thread-topic\"] ??\n \"\",\n );\n const subjectHeader = normalizeWhitespace(\n leadingMetadata[\"normalized-subject\"] ?? \"\",\n );\n const conversationIdHeader = normalizeWhitespace(\n leadingMetadata[\"conversation-id\"] ?? \"\",\n );\n const threadIndexHeader = normalizeWhitespace(\n leadingMetadata[\"conversation-index\"] ?? \"\",\n );\n const inReplyToHeader = normalizeWhitespace(\n leadingMetadata[\"parent-message-id\"] ?? \"\",\n );\n const referencesHeader = normalizeWhitespace(\n leadingMetadata[\"reference-chain\"] ?? \"\",\n );\n const sentHeader = normalizeWhitespace(\n leadingMetadata.sent ??\n leadingMetadata[\"client-submit-time\"] ??\n leadingMetadata[\"creation-time\"] ??\n \"\",\n );\n const messageIdHeader = normalizeWhitespace(\n leadingMetadata[\"internet-message-id\"] ?? \"\",\n );\n\n if (!headers.has(\"from\") && senderHeader) {\n syntheticHeaderLines.push(`From: ${senderHeader}`);\n }\n if (!headers.has(\"to\") && toHeader) {\n syntheticHeaderLines.push(`To: ${toHeader}`);\n }\n if (!headers.has(\"cc\") && ccHeader) {\n syntheticHeaderLines.push(`Cc: ${ccHeader}`);\n }\n if (!headers.has(\"bcc\") && bccHeader) {\n syntheticHeaderLines.push(`Bcc: ${bccHeader}`);\n }\n if (!headers.has(\"reply-to\") && replyToHeader) {\n syntheticHeaderLines.push(`Reply-To: ${replyToHeader}`);\n }\n if (!headers.has(\"thread-topic\") && threadTopicHeader) {\n syntheticHeaderLines.push(`Thread-Topic: ${threadTopicHeader}`);\n }\n if (!headers.has(\"subject\") && subjectHeader) {\n syntheticHeaderLines.push(`Subject: ${subjectHeader}`);\n }\n if (!headers.has(\"conversation-id\") && conversationIdHeader) {\n syntheticHeaderLines.push(`Conversation-ID: ${conversationIdHeader}`);\n }\n if (!headers.has(\"thread-index\") && threadIndexHeader) {\n syntheticHeaderLines.push(`Thread-Index: ${threadIndexHeader}`);\n }\n if (!headers.has(\"in-reply-to\") && inReplyToHeader) {\n syntheticHeaderLines.push(`In-Reply-To: ${inReplyToHeader}`);\n }\n if (!headers.has(\"references\") && referencesHeader) {\n syntheticHeaderLines.push(`References: ${referencesHeader}`);\n }\n if (!headers.has(\"date\") && sentHeader) {\n syntheticHeaderLines.push(`Date: ${sentHeader}`);\n }\n if (!headers.has(\"message-id\") && messageIdHeader) {\n syntheticHeaderLines.push(`Message-ID: ${messageIdHeader}`);\n }\n\n if (syntheticHeaderLines.length === 0) {\n return messageRaw;\n }\n\n const normalizedHeaderBlock = normalizeWhitespace(headerBlock);\n const normalizedBody = normalizeWhitespace(body);\n return [\n ...syntheticHeaderLines,\n ...(normalizedHeaderBlock ? [normalizedHeaderBlock] : []),\n \"\",\n ...(normalizedBody ? [normalizedBody] : []),\n ]\n .join(\"\\n\")\n .trim();\n};\n\ntype ParsedMailboxContainerMessage = {\n attachments?: {\n contentId?: string;\n contentLocation?: string;\n contentType?: string;\n data: Uint8Array;\n dispositionType?: string;\n fileName: string;\n role: \"attached_message\" | \"file_attachment\" | \"inline_resource\";\n }[];\n metadata: Record<string, unknown>;\n raw: string;\n};\n\nconst decodeMailboxContainerAttachmentData = (\n value: string,\n encoding: string | undefined,\n) => {\n const normalized = normalizeWhitespace(value);\n if (!normalized) {\n return undefined;\n }\n\n const format = normalizeWhitespace(encoding ?? \"\").toLowerCase();\n try {\n if (format === \"base64\") {\n return Uint8Array.from(Buffer.from(normalized, \"base64\"));\n }\n if (format === \"hex\") {\n return Uint8Array.from(Buffer.from(normalized, \"hex\"));\n }\n return Uint8Array.from(Buffer.from(value, \"utf8\"));\n } catch {\n return undefined;\n }\n};\n\nconst extractMailboxRecoveredEmbeddedReferences = (raw: string) => {\n const { body } = splitEmailMessage(raw);\n const normalizedBody = body.replace(/\\r\\n?/g, \"\\n\");\n const contentIds = [\n ...new Set(\n Array.from(\n normalizedBody.matchAll(/cid:([A-Za-z0-9._%+\\-@:$]+)/gi),\n (match) => normalizeEmailContentId(match[1]),\n ).filter((value): value is string => typeof value === \"string\"),\n ),\n ];\n\n return {\n contentIds,\n contentLocations: normalizedBody\n .split(/\\s+/)\n .map((token) =>\n normalizeWhitespace(token.replace(/^[(\"'`<]+|[)\"'`>,.;:!?]+$/g, \"\")),\n )\n .filter((token) => token.includes(\"/\") || token.includes(\".\")),\n };\n};\n\nconst splitMailboxContainerMessages = (\n raw: string,\n): ParsedMailboxContainerMessage[] => {\n const normalized = raw.replace(/\\r\\n?/g, \"\\n\");\n const lines = normalized.split(\"\\n\");\n const segments: string[] = [];\n let currentLines: string[] = [];\n let sawBody = false;\n let seenEmailHeaders = new Set<string>();\n\n const pushCurrent = () => {\n const segment = normalizeWhitespace(currentLines.join(\"\\n\"));\n if (segment) {\n segments.push(segment);\n }\n currentLines = [];\n sawBody = false;\n seenEmailHeaders = new Set<string>();\n };\n\n for (const line of lines) {\n const headerMatch = line.match(/^([A-Za-z-]+):\\s*(.*)$/);\n const key = headerMatch?.[1]?.toLowerCase() ?? \"\";\n const isDecorator = MAILBOX_CONTAINER_DECORATOR_KEYS.has(key);\n const isEmailHeader = MAILBOX_CONTAINER_EMAIL_HEADER_KEYS.has(key);\n const startsNewDecoratedMessage =\n isDecorator &&\n currentLines.length > 0 &&\n (seenEmailHeaders.size > 0 || sawBody);\n const startsNewSubjectMessage =\n key === \"subject\" &&\n currentLines.length > 0 &&\n (sawBody ||\n (seenEmailHeaders.has(\"subject\") &&\n (seenEmailHeaders.has(\"message-id\") ||\n seenEmailHeaders.has(\"from\"))));\n\n if (startsNewDecoratedMessage || startsNewSubjectMessage) {\n pushCurrent();\n }\n\n currentLines.push(line);\n if (isEmailHeader) {\n seenEmailHeaders.add(key);\n continue;\n }\n if (line.trim().length === 0) {\n if (seenEmailHeaders.size > 0) {\n sawBody = true;\n }\n continue;\n }\n if (seenEmailHeaders.size > 0 && !isDecorator) {\n sawBody = true;\n }\n }\n\n pushCurrent();\n\n return segments\n .map((segment) => {\n const lines = segment.split(\"\\n\");\n const leadingMetadata: Record<string, string> = {};\n const attachmentDescriptorNames: string[] = [];\n const recoverableAttachments: NonNullable<\n ParsedMailboxContainerMessage[\"attachments\"]\n > = [];\n let currentAttachment:\n | {\n contentId?: string;\n contentLocation?: string;\n contentType?: string;\n dataValue?: string;\n dispositionType?: string;\n fileName?: string;\n transferEncoding?: string;\n }\n | undefined;\n const pushCurrentAttachment = () => {\n if (!currentAttachment?.fileName || !currentAttachment.dataValue) {\n currentAttachment = undefined;\n return;\n }\n\n const data = decodeMailboxContainerAttachmentData(\n currentAttachment.dataValue,\n currentAttachment.transferEncoding,\n );\n if (!data || data.length === 0) {\n currentAttachment = undefined;\n return;\n }\n\n const normalizedContentType = normalizeWhitespace(\n currentAttachment.contentType ?? \"\",\n ).toLowerCase();\n const role = normalizedContentType.includes(\"message/rfc822\")\n ? \"attached_message\"\n : currentAttachment.dispositionType === \"inline\" ||\n typeof currentAttachment.contentId === \"string\" ||\n typeof currentAttachment.contentLocation === \"string\"\n ? \"inline_resource\"\n : \"file_attachment\";\n recoverableAttachments.push({\n contentId: currentAttachment.contentId,\n contentLocation: currentAttachment.contentLocation,\n contentType: currentAttachment.contentType,\n data,\n dispositionType: currentAttachment.dispositionType,\n fileName: currentAttachment.fileName,\n role,\n });\n currentAttachment = undefined;\n };\n let startIndex = 0;\n for (; startIndex < lines.length; startIndex += 1) {\n const line = lines[startIndex] ?? \"\";\n const headerMatch = line.match(/^([A-Za-z-]+):\\s*(.*)$/);\n if (!headerMatch) {\n continue;\n }\n const key = headerMatch[1]?.toLowerCase() ?? \"\";\n if (\n key === \"subject\" ||\n key === \"from\" ||\n key === \"to\" ||\n key === \"cc\" ||\n key === \"bcc\" ||\n key === \"reply-to\" ||\n key === \"thread-topic\" ||\n key === \"date\" ||\n key === \"message-id\" ||\n key === \"in-reply-to\" ||\n key === \"references\" ||\n key === \"content-type\"\n ) {\n pushCurrentAttachment();\n break;\n }\n if (key === \"attachment\") {\n const names = parseMailboxAttachmentNames(headerMatch[2]);\n attachmentDescriptorNames.push(...names);\n if (names.length === 1) {\n pushCurrentAttachment();\n currentAttachment = { fileName: names[0] };\n }\n continue;\n }\n if (key === \"attachments\") {\n attachmentDescriptorNames.push(\n ...parseMailboxAttachmentNames(headerMatch[2]),\n );\n leadingMetadata[key] = headerMatch[2] ?? \"\";\n continue;\n }\n if (key === \"attachment-content-type\") {\n if (currentAttachment) {\n currentAttachment.contentType = headerMatch[2] ?? \"\";\n }\n continue;\n }\n if (key === \"attachment-transfer-encoding\") {\n if (currentAttachment) {\n currentAttachment.transferEncoding = headerMatch[2] ?? \"\";\n }\n continue;\n }\n if (key === \"attachment-data\") {\n if (currentAttachment) {\n currentAttachment.dataValue = headerMatch[2] ?? \"\";\n }\n continue;\n }\n if (key === \"attachment-disposition\") {\n if (currentAttachment) {\n currentAttachment.dispositionType = normalizeWhitespace(\n headerMatch[2] ?? \"\",\n ).toLowerCase();\n }\n continue;\n }\n if (key === \"attachment-content-id\") {\n if (currentAttachment) {\n currentAttachment.contentId = normalizeWhitespace(\n headerMatch[2] ?? \"\",\n );\n }\n continue;\n }\n if (key === \"attachment-content-location\") {\n if (currentAttachment) {\n currentAttachment.contentLocation = normalizeWhitespace(\n headerMatch[2] ?? \"\",\n );\n }\n continue;\n }\n if (\n key === \"folder\" ||\n key === \"mailbox\" ||\n key === \"sender\" ||\n key === \"sender-name\" ||\n key === \"sender-email\" ||\n key === \"recipients\" ||\n key === \"to-recipients\" ||\n key === \"cc-recipients\" ||\n key === \"bcc-recipients\" ||\n key === \"reply-to-recipients\" ||\n key === \"sent\" ||\n key === \"received\" ||\n key === \"internet-message-id\" ||\n key === \"client-submit-time\" ||\n key === \"delivery-time\" ||\n key === \"creation-time\" ||\n key === \"last-modified-time\" ||\n key === \"parent-message-id\" ||\n key === \"reference-chain\" ||\n key === \"message-class\" ||\n key === \"categories\" ||\n key === \"conversation-id\" ||\n key === \"conversation-index\" ||\n key === \"conversation-topic\" ||\n key === \"flags\" ||\n key === \"has-attachments\" ||\n key === \"importance\" ||\n key === \"normalized-subject\" ||\n key === \"read\" ||\n key === \"sensitivity\" ||\n key === \"thread-topic\" ||\n key === \"unread\" ||\n key === \"flagged\" ||\n key === \"replied\" ||\n key === \"answered\" ||\n key === \"draft\" ||\n key === \"passed\" ||\n key === \"forwarded\" ||\n key === \"trashed\" ||\n key === \"deleted\"\n ) {\n leadingMetadata[key] = headerMatch[2] ?? \"\";\n }\n }\n pushCurrentAttachment();\n\n const messageRaw = buildMailboxContainerSyntheticHeaders(\n normalizeWhitespace(lines.slice(startIndex).join(\"\\n\")),\n leadingMetadata,\n );\n const mailboxFolderValue =\n leadingMetadata.folder ?? leadingMetadata.mailbox;\n const attachmentNames = [\n ...new Set([\n ...attachmentDescriptorNames,\n ...parseMailboxAttachmentNames(leadingMetadata.attachments),\n ]),\n ];\n const categories = parseMailboxAttachmentNames(\n leadingMetadata.categories,\n );\n const explicitStateFlags = parseMailboxStateFlags(leadingMetadata.flags);\n const booleanStateFlags = parseMailboxStateFlags(\n [\n leadingMetadata.read === \"true\" ? \"read\" : undefined,\n leadingMetadata.unread === \"true\" ? \"unread\" : undefined,\n leadingMetadata.flagged === \"true\" ? \"flagged\" : undefined,\n leadingMetadata.replied === \"true\" ||\n leadingMetadata.answered === \"true\"\n ? \"replied\"\n : undefined,\n leadingMetadata.draft === \"true\" ? \"draft\" : undefined,\n leadingMetadata.passed === \"true\" ||\n leadingMetadata.forwarded === \"true\"\n ? \"passed\"\n : undefined,\n leadingMetadata.trashed === \"true\" ||\n leadingMetadata.deleted === \"true\"\n ? \"trashed\"\n : undefined,\n ]\n .filter((value): value is string => typeof value === \"string\")\n .join(\" \"),\n );\n const stateFlags = [\n ...new Set([...explicitStateFlags, ...booleanStateFlags]),\n ];\n\n return {\n metadata: {\n ...parseMailboxFolderMetadata(mailboxFolderValue),\n ...buildMailboxStateMetadata(stateFlags),\n ...(attachmentNames.length > 0\n ? {\n attachmentCount: attachmentNames.length,\n attachmentNames,\n hasAttachments: true,\n }\n : leadingMetadata[\"has-attachments\"] === \"true\"\n ? {\n attachmentCount: 1,\n hasAttachments: true,\n }\n : {}),\n ...(categories.length > 0 ? { emailCategories: categories } : {}),\n ...(typeof leadingMetadata.importance === \"string\" &&\n leadingMetadata.importance.trim().length > 0\n ? {\n emailImportance: normalizeWhitespace(\n leadingMetadata.importance,\n ),\n }\n : {}),\n ...(typeof leadingMetadata[\"normalized-subject\"] === \"string\" &&\n leadingMetadata[\"normalized-subject\"].trim().length > 0\n ? {\n emailNormalizedSubject: normalizeWhitespace(\n leadingMetadata[\"normalized-subject\"],\n ),\n }\n : {}),\n ...(typeof leadingMetadata.sensitivity === \"string\" &&\n leadingMetadata.sensitivity.trim().length > 0\n ? {\n emailSensitivity: normalizeWhitespace(\n leadingMetadata.sensitivity,\n ),\n }\n : {}),\n ...(typeof leadingMetadata[\"conversation-topic\"] === \"string\" &&\n leadingMetadata[\"conversation-topic\"].trim().length > 0\n ? {\n emailConversationTopic: normalizeWhitespace(\n leadingMetadata[\"conversation-topic\"],\n ),\n threadTopic: normalizeWhitespace(\n leadingMetadata[\"conversation-topic\"],\n ),\n }\n : typeof leadingMetadata[\"thread-topic\"] === \"string\" &&\n leadingMetadata[\"thread-topic\"].trim().length > 0\n ? {\n threadTopic: normalizeWhitespace(\n leadingMetadata[\"thread-topic\"],\n ),\n }\n : {}),\n ...(typeof leadingMetadata[\"conversation-id\"] === \"string\" &&\n leadingMetadata[\"conversation-id\"].trim().length > 0\n ? {\n emailConversationId: normalizeWhitespace(\n leadingMetadata[\"conversation-id\"],\n ),\n }\n : {}),\n ...(typeof leadingMetadata[\"conversation-index\"] === \"string\" &&\n leadingMetadata[\"conversation-index\"].trim().length > 0\n ? {\n emailConversationIndex: normalizeWhitespace(\n leadingMetadata[\"conversation-index\"],\n ),\n }\n : {}),\n ...(typeof leadingMetadata.sent === \"string\" &&\n leadingMetadata.sent.trim().length > 0\n ? {\n emailSentAt: normalizeWhitespace(leadingMetadata.sent),\n }\n : typeof leadingMetadata[\"client-submit-time\"] === \"string\" &&\n leadingMetadata[\"client-submit-time\"].trim().length > 0\n ? {\n emailSentAt: normalizeWhitespace(\n leadingMetadata[\"client-submit-time\"],\n ),\n }\n : typeof leadingMetadata[\"creation-time\"] === \"string\" &&\n leadingMetadata[\"creation-time\"].trim().length > 0\n ? {\n emailSentAt: normalizeWhitespace(\n leadingMetadata[\"creation-time\"],\n ),\n }\n : {}),\n ...(typeof leadingMetadata.received === \"string\" &&\n leadingMetadata.received.trim().length > 0\n ? {\n emailReceivedAt: normalizeWhitespace(leadingMetadata.received),\n }\n : typeof leadingMetadata[\"delivery-time\"] === \"string\" &&\n leadingMetadata[\"delivery-time\"].trim().length > 0\n ? {\n emailReceivedAt: normalizeWhitespace(\n leadingMetadata[\"delivery-time\"],\n ),\n }\n : {}),\n ...(typeof leadingMetadata[\"internet-message-id\"] === \"string\" &&\n leadingMetadata[\"internet-message-id\"].trim().length > 0\n ? {\n emailInternetMessageId: normalizeWhitespace(\n leadingMetadata[\"internet-message-id\"],\n ),\n }\n : {}),\n ...(typeof leadingMetadata[\"client-submit-time\"] === \"string\" &&\n leadingMetadata[\"client-submit-time\"].trim().length > 0\n ? {\n emailClientSubmitTime: normalizeWhitespace(\n leadingMetadata[\"client-submit-time\"],\n ),\n }\n : {}),\n ...(typeof leadingMetadata[\"delivery-time\"] === \"string\" &&\n leadingMetadata[\"delivery-time\"].trim().length > 0\n ? {\n emailDeliveryTime: normalizeWhitespace(\n leadingMetadata[\"delivery-time\"],\n ),\n }\n : {}),\n ...(typeof leadingMetadata[\"creation-time\"] === \"string\" &&\n leadingMetadata[\"creation-time\"].trim().length > 0\n ? {\n emailCreationTime: normalizeWhitespace(\n leadingMetadata[\"creation-time\"],\n ),\n }\n : {}),\n ...(typeof leadingMetadata[\"last-modified-time\"] === \"string\" &&\n leadingMetadata[\"last-modified-time\"].trim().length > 0\n ? {\n emailLastModifiedTime: normalizeWhitespace(\n leadingMetadata[\"last-modified-time\"],\n ),\n }\n : {}),\n ...(typeof leadingMetadata[\"message-class\"] === \"string\" &&\n leadingMetadata[\"message-class\"].trim().length > 0\n ? {\n emailMessageClass: normalizeWhitespace(\n leadingMetadata[\"message-class\"],\n ),\n }\n : {}),\n },\n ...(recoverableAttachments.length > 0\n ? { attachments: recoverableAttachments }\n : {}),\n raw: messageRaw,\n };\n })\n .filter((segment) => {\n const { headerBlock } = splitEmailMessage(segment.raw);\n const headers = parseHeaderBlock(headerBlock);\n return (\n headers.size >= 3 &&\n (headers.has(\"subject\") || headers.has(\"message-id\")) &&\n (headers.has(\"from\") || headers.has(\"to\") || headers.has(\"date\"))\n );\n });\n};\n\nconst decodeEmlxMessageData = (data: Uint8Array) => {\n if (data.length === 0) {\n return {\n hasTrailingMetadata: false,\n messageByteLength: 0,\n raw: \"\",\n };\n }\n\n let lineEnd = data.indexOf(0x0a);\n if (lineEnd < 0) {\n lineEnd = data.length;\n }\n const headerLine = Buffer.from(data.slice(0, lineEnd))\n .toString(\"utf8\")\n .replace(/\\r$/, \"\")\n .trim();\n const messageByteLength = Number.parseInt(headerLine, 10);\n if (!Number.isFinite(messageByteLength) || messageByteLength <= 0) {\n return {\n hasTrailingMetadata: false,\n messageByteLength: undefined,\n raw: decodeUtf8(data),\n };\n }\n\n let messageOffset = lineEnd;\n while (\n messageOffset < data.length &&\n (data[messageOffset] === 0x0a || data[messageOffset] === 0x0d)\n ) {\n messageOffset += 1;\n }\n const messageEnd = Math.min(data.length, messageOffset + messageByteLength);\n return {\n hasTrailingMetadata: messageEnd < data.length,\n messageByteLength,\n raw: decodeUtf8(data.slice(messageOffset, messageEnd)),\n };\n};\n\nconst MAILDIR_FOLDER_NAMES = new Set([\"cur\", \"new\"]);\n\nconst isLikelyRawEmailData = (raw: string) => {\n const { headerBlock } = splitEmailMessage(raw);\n if (!headerBlock || !headerBlock.includes(\":\")) {\n return false;\n }\n\n const headers = parseHeaderBlock(headerBlock);\n let score = 0;\n for (const name of [\n \"from\",\n \"to\",\n \"subject\",\n \"date\",\n \"message-id\",\n \"in-reply-to\",\n \"references\",\n \"content-type\",\n \"return-path\",\n \"delivered-to\",\n ]) {\n if (headers.has(name)) {\n score += 1;\n }\n }\n\n return score >= 2;\n};\n\nconst parseMaildirMetadata = (source: string | undefined) => {\n if (!source) {\n return undefined;\n }\n\n const normalized = source.replace(/\\\\/g, \"/\");\n const segments = normalized.split(\"/\").filter(Boolean);\n const folderIndex = segments.findLastIndex((segment) =>\n MAILDIR_FOLDER_NAMES.has(segment),\n );\n if (folderIndex < 0) {\n return undefined;\n }\n\n const folder = segments[folderIndex];\n const fileName = segments.at(-1);\n if (!folder || !fileName) {\n return undefined;\n }\n\n const [maildirKey, flagSuffix] = fileName.split(\":2,\");\n const flags = flagSuffix\n ? [...new Set(flagSuffix.split(\"\").filter(Boolean).sort())]\n : [];\n const stateFlags = [\n ...(flags.includes(\"D\") ? [\"draft\"] : []),\n ...(flags.includes(\"F\") ? [\"flagged\"] : []),\n ...(flags.includes(\"P\") ? [\"passed\"] : []),\n ...(flags.includes(\"R\") ? [\"replied\"] : []),\n ...(flags.includes(\"S\") ? [\"read\"] : [\"unread\"]),\n ...(flags.includes(\"T\") ? [\"trashed\"] : []),\n ];\n const pathSegments = segments.slice(0, folderIndex);\n const containerSource = pathSegments.join(\"/\");\n const familyKey = pathSegments\n .map((segment) => segment.trim().toLowerCase())\n .filter(Boolean)\n .join(\"/\");\n const leaf = pathSegments.at(-1);\n\n return {\n emailMailboxFormat: \"maildir\",\n emailMailboxFolder: folder,\n ...(familyKey ? { emailMailboxFamilyKey: familyKey } : {}),\n ...(leaf ? { emailMailboxLeaf: leaf } : {}),\n ...(pathSegments.length > 0\n ? {\n emailMailboxPathDepth: pathSegments.length,\n emailMailboxPathSegments: pathSegments,\n }\n : {}),\n ...(containerSource\n ? { emailMailboxContainerSource: containerSource }\n : {}),\n ...(flags.length > 0 ? { emailMailboxFlags: flags } : {}),\n ...(stateFlags.length > 0 ? { emailMailboxStateFlags: stateFlags } : {}),\n emailMailboxIsDraft: flags.includes(\"D\"),\n emailMailboxIsFlagged: flags.includes(\"F\"),\n emailMailboxIsPassed: flags.includes(\"P\"),\n emailMailboxIsRead: flags.includes(\"S\"),\n emailMailboxIsReplied: flags.includes(\"R\"),\n emailMailboxIsTrashed: flags.includes(\"T\"),\n emailMailboxIsUnread: !flags.includes(\"S\"),\n ...(maildirKey ? { emailMailboxKey: maildirKey } : {}),\n };\n};\n\n// RFC 2047 encoded-words: =?charset?B|Q?text?=. Undecoded, these poison every\n// header they appear in — subject, display names, and (because threadKey is\n// derived from the subject) thread grouping itself, which is how two unrelated\n// encoded subjects can collide or one thread can split.\nconst RFC2047_WORD = /=\\?([^?]+)\\?([BbQq])\\?([^?]*)\\?=/g;\n\nconst decodeEncodedWord = (charset: string, encoding: string, text: string) => {\n const bytes =\n encoding.toUpperCase() === \"B\"\n ? Buffer.from(text, \"base64\")\n : // Q differs from plain quoted-printable in exactly one way: `_` is a\n // space. latin1 for the same reason as decodeEmailPartBody.\n Buffer.from(decodeQuotedPrintable(text.replace(/_/g, \" \")), \"latin1\");\n\n try {\n return new TextDecoder(charset.trim().toLowerCase()).decode(bytes);\n } catch {\n // Unknown charset — utf8 is the best available guess, and still beats\n // leaving the raw =?...?= in place.\n return bytes.toString(\"utf8\");\n }\n};\n\nconst decodeRfc2047 = (value: string) =>\n value.includes(\"=?\")\n ? value\n // Whitespace separating two adjacent encoded-words is not content\n // (RFC 2047 s6.2), so it must go before decoding splits them apart.\n .replace(/\\?=\\s+=\\?/g, \"?==?\")\n .replace(RFC2047_WORD, (_match, charset: string, enc: string, text: string) =>\n decodeEncodedWord(charset, enc, text),\n )\n : value;\n\nconst parseHeaderBlock = (headerBlock: string) => {\n const unfolded = headerBlock.replace(/\\n[ \\t]+/g, \" \");\n const headers = new Map<string, string>();\n\n for (const line of unfolded.split(\"\\n\")) {\n const separator = line.indexOf(\":\");\n if (separator < 0) {\n continue;\n }\n\n headers.set(\n line.slice(0, separator).trim().toLowerCase(),\n decodeRfc2047(line.slice(separator + 1).trim()),\n );\n }\n\n return headers;\n};\n\nconst decodeQuotedPrintable = (value: string) =>\n value\n .replace(/=\\r?\\n/g, \"\")\n .replace(/=([0-9A-F]{2})/gi, (_match, hex: string) =>\n String.fromCharCode(parseInt(hex, 16)),\n );\n\nconst decodeEmailPartBody = (body: string, encoding: string | undefined) => {\n const normalizedEncoding = encoding?.toLowerCase();\n const trimmed = body.trim();\n\n if (normalizedEncoding === \"base64\") {\n return new Uint8Array(Buffer.from(trimmed.replace(/\\s+/g, \"\"), \"base64\"));\n }\n\n if (normalizedEncoding === \"quoted-printable\") {\n // latin1, NOT utf8. decodeQuotedPrintable turns each =XX into a char whose\n // code IS that byte, so the string is a byte sequence, not text. Reading it\n // back as utf8 re-encoded every char above 0x7F a second time: =C3=A9 (\"é\")\n // became U+00C3 U+00A9 and embedded as \"é\".\n return new Uint8Array(Buffer.from(decodeQuotedPrintable(body), \"latin1\"));\n }\n\n // latin1 to match decodeLatin1 above: the body string holds bytes, not text,\n // so utf8 here would re-encode everything above 0x7F a second time.\n return new Uint8Array(Buffer.from(body, \"latin1\"));\n};\n\n// Content-Type: text/plain; charset=\"iso-8859-1\"\nconst parseMimeCharset = (contentType: string | undefined) =>\n contentType?.match(/charset\\s*=\\s*\"?([^\";\\s]+)\"?/i)?.[1];\n\n/**\n * Decode a part's bytes using the charset it DECLARED, not utf8.\n *\n * Every part body was read as utf8 regardless, so a Shift-JIS, ISO-8859-1 or\n * windows-1252 message decoded into replacement characters and mojibake and was\n * embedded that way — unsearchable, and worse than useless in a vector.\n * Unknown or unsupported labels fall back to utf8, which is what the code did\n * unconditionally before, so this can only improve on the previous behaviour.\n */\nconst decodeWithCharset = (data: Uint8Array, contentType: string | undefined) => {\n const charset = parseMimeCharset(contentType)?.trim().toLowerCase();\n if (!charset || charset === \"utf-8\" || charset === \"utf8\") {\n return decodeUtf8(data);\n }\n\n try {\n return new TextDecoder(charset).decode(data);\n } catch {\n return decodeUtf8(data);\n }\n};\n\nconst parseMimeBoundary = (contentType: string | undefined) => {\n const match = contentType?.match(/boundary=\"?([^\";]+)\"?/i);\n return match?.[1];\n};\n\nconst EMAIL_ATTACHMENT_EXTENSION_BY_CONTENT_TYPE: Record<string, string> = {\n \"application/gzip\": \".gz\",\n \"application/json\": \".json\",\n \"application/pdf\": \".pdf\",\n \"application/rtf\": \".rtf\",\n \"application/zip\": \".zip\",\n \"application/x-gzip\": \".gz\",\n \"application/xml\": \".xml\",\n \"image/gif\": \".gif\",\n \"image/jpeg\": \".jpg\",\n \"image/png\": \".png\",\n \"image/svg+xml\": \".svg\",\n \"message/rfc822\": \".eml\",\n \"text/csv\": \".csv\",\n \"text/html\": \".html\",\n \"text/markdown\": \".md\",\n \"text/plain\": \".txt\",\n \"text/tsv\": \".tsv\",\n \"text/xml\": \".xml\",\n};\n\nconst normalizeEmailContentId = (value: string | undefined) => {\n const normalized = normalizeWhitespace(value ?? \"\")\n .replace(/^cid:/i, \"\")\n .replace(/^<|>$/g, \"\");\n return normalized ? `<${normalized}>` : undefined;\n};\n\nconst inferEmailAttachmentExtension = (contentType: string | undefined) => {\n if (!contentType) {\n return \".bin\";\n }\n\n const normalized = contentType.split(\";\")[0]?.trim().toLowerCase();\n return (\n (normalized\n ? EMAIL_ATTACHMENT_EXTENSION_BY_CONTENT_TYPE[normalized]\n : undefined) ?? \".bin\"\n );\n};\n\nconst inferEmailAttachmentName = ({\n contentId,\n contentLocation,\n contentType,\n filename,\n}: {\n contentId?: string;\n contentLocation?: string;\n contentType?: string;\n filename?: string;\n}) => {\n if (filename) {\n return filename;\n }\n\n if (contentLocation) {\n const locationHead = contentLocation.split(/[?#]/)[0];\n const normalizedLocation = locationHead?.split(/[/\\\\]/).pop()?.trim();\n if (normalizedLocation) {\n return normalizedLocation;\n }\n }\n\n const contentIdToken = contentId\n ?.replace(/^<|>$/g, \"\")\n .replace(/[^a-z0-9._-]+/gi, \"-\")\n .replace(/^-+|-+$/g, \"\");\n if (contentIdToken) {\n return `${contentIdToken}${inferEmailAttachmentExtension(contentType)}`;\n }\n\n return `email-attachment${inferEmailAttachmentExtension(contentType)}`;\n};\n\nconst parseEmailEmbeddedResourceReferences = (bodyHtml: string | undefined) => {\n if (!bodyHtml) {\n return {\n contentIds: [] as string[],\n contentLocations: [] as string[],\n };\n }\n\n const contentIds = [\n ...new Set(\n Array.from(bodyHtml.matchAll(/cid:([^\"'>\\s)]+)/gi), (match) =>\n normalizeEmailContentId(match[1]),\n ).filter((value): value is string => Boolean(value)),\n ),\n ];\n const contentLocations = [\n ...new Set(\n Array.from(\n bodyHtml.matchAll(/\\b(?:src|href)=[\"']([^\"'#][^\"']*)[\"']/gi),\n (match) => normalizeWhitespace(match[1] ?? \"\"),\n ).filter(\n (value) =>\n Boolean(value) && !/^(?:https?:|mailto:|data:|cid:)/i.test(value),\n ),\n ),\n ];\n\n return {\n contentIds,\n contentLocations,\n };\n};\n\ntype ParsedEmailAddressEntry = {\n address: string;\n displayName?: string;\n raw: string;\n};\n\nconst parseEmailAddressList = (value: string | undefined) => {\n if (!value) {\n return {\n addresses: [] as string[],\n displayNames: [] as string[],\n entries: [] as ParsedEmailAddressEntry[],\n };\n }\n\n const tokens = value\n .split(/,(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)/)\n .map((entry) => normalizeWhitespace(entry))\n .filter(Boolean);\n const entries = tokens\n .map((entry) => {\n const angleMatch = entry.match(/^(.*?)(?:<([^>]+)>)$/);\n if (angleMatch) {\n const address = normalizeWhitespace(\n angleMatch[2]?.trim().toLowerCase() ?? \"\",\n );\n if (!address) {\n return undefined;\n }\n const displayName = normalizeWhitespace(\n (angleMatch[1] ?? \"\").trim().replace(/^\"+|\"+$/g, \"\"),\n );\n return {\n address,\n ...(displayName ? { displayName } : {}),\n raw: entry,\n };\n }\n const bareAddressMatch =\n entry.match(/\\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}\\b/i)?.[0] ?? \"\";\n const address = normalizeWhitespace(\n bareAddressMatch.trim().toLowerCase(),\n );\n if (!address) {\n return undefined;\n }\n const displayName = normalizeWhitespace(\n entry.replace(bareAddressMatch, \"\").replace(/[()\"]/g, \"\"),\n );\n return {\n address,\n ...(displayName ? { displayName } : {}),\n raw: entry,\n };\n })\n .filter((entry): entry is ParsedEmailAddressEntry => Boolean(entry));\n\n return {\n addresses: entries.map((entry) => entry.address),\n displayNames: entries\n .map((entry) => entry.displayName)\n .filter((value): value is string => typeof value === \"string\"),\n entries,\n };\n};\n\nconst normalizeEmailTimestamp = (value: string | undefined) => {\n if (!value) {\n return undefined;\n }\n\n const candidates = [\n value,\n value\n .replace(/\\bat\\b/gi, \" \")\n .replace(/\\s+/g, \" \")\n .trim(),\n `${value\n .replace(/\\bat\\b/gi, \" \")\n .replace(/\\s+/g, \" \")\n .trim()} UTC`,\n ];\n\n for (const candidate of candidates) {\n const timestamp = Date.parse(candidate);\n if (Number.isFinite(timestamp)) {\n return new Date(timestamp).toISOString();\n }\n }\n\n return undefined;\n};\n\nconst parseEmailMessageLineage = (\n metadata?: Record<string, unknown>,\n): EmailMessageLineageEntry[] => {\n if (!Array.isArray(metadata?.emailMessageLineage)) {\n return [];\n }\n\n return metadata.emailMessageLineage\n .map((entry) => {\n if (!entry || typeof entry !== \"object\" || Array.isArray(entry)) {\n return undefined;\n }\n\n const attachmentSource =\n typeof entry.attachmentSource === \"string\" &&\n entry.attachmentSource.length > 0\n ? entry.attachmentSource\n : undefined;\n const messageId =\n typeof entry.messageId === \"string\" && entry.messageId.length > 0\n ? entry.messageId\n : undefined;\n const messageSource =\n typeof entry.messageSource === \"string\" &&\n entry.messageSource.length > 0\n ? entry.messageSource\n : undefined;\n const messageSourceKind =\n typeof entry.messageSourceKind === \"string\" &&\n entry.messageSourceKind.length > 0\n ? entry.messageSourceKind\n : undefined;\n const threadKey =\n typeof entry.threadKey === \"string\" && entry.threadKey.length > 0\n ? entry.threadKey\n : undefined;\n\n if (\n !attachmentSource &&\n !messageId &&\n !messageSource &&\n !messageSourceKind &&\n !threadKey\n ) {\n return undefined;\n }\n\n return {\n ...(attachmentSource ? { attachmentSource } : {}),\n ...(messageId ? { messageId } : {}),\n ...(messageSource ? { messageSource } : {}),\n ...(messageSourceKind ? { messageSourceKind } : {}),\n ...(threadKey ? { threadKey } : {}),\n };\n })\n .filter((entry): entry is EmailMessageLineageEntry => Boolean(entry));\n};\n\nconst EMAIL_FORWARDED_HEADER_PATTERN =\n /^(?:from|sent|to|cc|bcc|subject|date|reply-to):\\s+/i;\nconst EMAIL_FORWARDED_SEPARATOR_PATTERN =\n /^-{2,}\\s*forwarded message\\s*-{2,}$/i;\nconst EMAIL_HTML_QUOTE_OPEN_TOKEN = \"[[ABS_EMAIL_QUOTE_OPEN]]\";\nconst EMAIL_HTML_QUOTE_CLOSE_TOKEN = \"[[ABS_EMAIL_QUOTE_CLOSE]]\";\n\n// Attribution lines that open a quoted reply, across the clients and locales\n// that actually appear in mail. Promoted from a host implementation that had\n// grown these cases in production; the previous single `on .+wrote:` pattern\n// missed the \"at <time>\" variant, Original Message rules, underscore rules and\n// every non-English client.\nconst EMAIL_ATTRIBUTION_PATTERNS = [\n /^on\\s.+\\bwrote:$/iu,\n /^on\\s.+\\bat\\s.+\\bwrote:$/iu,\n /^-+\\s*original message\\s*-+$/iu,\n // NB: no \"---- Forwarded message ----\" rule here. The host implementation\n // this was promoted from lumped that in with quoted history, but the\n // forwarded-separator handling below classifies it as forwarded_headers,\n // which is strictly more precise — claiming it here would regress that.\n /^_{5,}$/u,\n /^el\\s.+\\bescribió:$/iu,\n /^le\\s.+\\ba écrit\\s*:$/iu,\n];\n\n// RFC 3676 §4.3: a line of exactly \"-- \" opens the sender's signature block.\nconst EMAIL_SIGNATURE_DELIMITER = /^--\\s?$/u;\n\nconst classifyEmailBodyLine = (\n line: string,\n currentKind?: EmailBodySection[\"kind\"],\n): EmailBodySection[\"kind\"] | undefined => {\n const trimmed = line.trim();\n if (!trimmed) {\n return currentKind;\n }\n // Both are terminal: everything after the delimiter belongs to the block.\n if (currentKind === \"signature\") {\n return \"signature\";\n }\n if (EMAIL_SIGNATURE_DELIMITER.test(line)) {\n return \"signature\";\n }\n if (/^>+/.test(trimmed)) {\n return \"quoted_history\";\n }\n if (EMAIL_ATTRIBUTION_PATTERNS.some((pattern) => pattern.test(trimmed))) {\n return \"quoted_history\";\n }\n if (EMAIL_FORWARDED_SEPARATOR_PATTERN.test(trimmed)) {\n return \"forwarded_headers\";\n }\n if (\n currentKind === \"forwarded_headers\" &&\n (EMAIL_FORWARDED_HEADER_PATTERN.test(trimmed) ||\n /^[A-Za-z-]+:\\s+\\S+/.test(trimmed))\n ) {\n return \"forwarded_headers\";\n }\n if (EMAIL_FORWARDED_HEADER_PATTERN.test(trimmed)) {\n return \"forwarded_headers\";\n }\n return \"authored_text\";\n};\n\nconst parseEmailForwardedHeaderFields = (lines: string[]) => {\n const fields: Record<string, string> = {};\n\n for (const line of lines) {\n const trimmed = line.trim();\n const match = trimmed.match(/^([A-Za-z-]+):\\s*(.+)$/);\n if (!match) {\n continue;\n }\n const key = normalizeWhitespace(match[1] ?? \"\").toLowerCase();\n const value = normalizeWhitespace(match[2] ?? \"\");\n if (!key || !value) {\n continue;\n }\n fields[key] = value;\n }\n\n return Object.keys(fields).length > 0 ? fields : undefined;\n};\n\nconst parseForwardedHeaderMetadata = (lines: string[]) => {\n const forwardedHeaderFields = parseEmailForwardedHeaderFields(lines);\n const from = forwardedHeaderFields?.from;\n const to = forwardedHeaderFields?.to;\n const cc = forwardedHeaderFields?.cc;\n const bcc = forwardedHeaderFields?.bcc;\n const replyTo = forwardedHeaderFields?.[\"reply-to\"];\n const fromParsed = parseEmailAddressList(from);\n const toParsed = parseEmailAddressList(to);\n const ccParsed = parseEmailAddressList(cc);\n const bccParsed = parseEmailAddressList(bcc);\n const replyToParsed = parseEmailAddressList(replyTo);\n const forwardedParticipantAddresses = [\n ...new Set([\n ...fromParsed.addresses,\n ...toParsed.addresses,\n ...ccParsed.addresses,\n ...bccParsed.addresses,\n ...replyToParsed.addresses,\n ]),\n ];\n\n return {\n ...(forwardedHeaderFields ? { forwardedHeaderFields } : {}),\n ...(fromParsed.addresses[0]\n ? { forwardedFromAddress: fromParsed.addresses[0] }\n : {}),\n ...(fromParsed.displayNames[0]\n ? { forwardedFromDisplayName: fromParsed.displayNames[0] }\n : {}),\n ...(toParsed.addresses.length > 0\n ? { forwardedToAddresses: toParsed.addresses }\n : {}),\n ...(ccParsed.addresses.length > 0\n ? { forwardedCcAddresses: ccParsed.addresses }\n : {}),\n ...(bccParsed.addresses.length > 0\n ? { forwardedBccAddresses: bccParsed.addresses }\n : {}),\n ...(replyToParsed.addresses.length > 0\n ? { forwardedReplyToAddresses: replyToParsed.addresses }\n : {}),\n ...(forwardedParticipantAddresses.length > 0\n ? { forwardedParticipantAddresses }\n : {}),\n ...(forwardedHeaderFields?.subject\n ? { forwardedSubject: forwardedHeaderFields.subject }\n : {}),\n ...(forwardedHeaderFields?.date\n ? { forwardedDate: forwardedHeaderFields.date }\n : {}),\n ...(forwardedHeaderFields?.date\n ? {\n forwardedTimestamp: normalizeEmailTimestamp(\n forwardedHeaderFields.date,\n ),\n }\n : {}),\n };\n};\n\nconst getEmailQuotedDepth = (lines: string[]) => {\n let depth = 0;\n for (const line of lines) {\n const trimmed = line.trim();\n if (/^on .+wrote:$/i.test(trimmed)) {\n depth = Math.max(depth, 1);\n continue;\n }\n const quoteDepth = (trimmed.match(/^>+/)?.[0].length ?? 0) || 0;\n depth = Math.max(depth, quoteDepth);\n }\n return depth || undefined;\n};\n\nconst parseEmailBodySections = (text: string): EmailBodySection[] => {\n const normalized = text.replace(/\\r\\n?/g, \"\\n\");\n const lines = normalized.split(\"\\n\");\n const sections: EmailBodySection[] = [];\n let currentKind: EmailBodySection[\"kind\"] | undefined;\n let currentLines: string[] = [];\n\n const pushCurrent = () => {\n if (!currentKind) {\n currentLines = [];\n return;\n }\n const sectionText = normalizeWhitespace(currentLines.join(\"\\n\"));\n if (sectionText) {\n sections.push({\n ...(currentKind === \"quoted_history\"\n ? {\n quotedDepth: getEmailQuotedDepth(currentLines),\n }\n : {}),\n ...(currentKind === \"forwarded_headers\"\n ? parseForwardedHeaderMetadata(currentLines)\n : {}),\n kind: currentKind,\n text: sectionText,\n });\n }\n currentKind = undefined;\n currentLines = [];\n };\n\n for (const line of lines) {\n const nextKind = classifyEmailBodyLine(line, currentKind);\n if (!nextKind) {\n continue;\n }\n if (\n currentKind === \"forwarded_headers\" &&\n nextKind === \"forwarded_headers\" &&\n EMAIL_FORWARDED_SEPARATOR_PATTERN.test(line.trim()) &&\n currentLines.some((entry) => normalizeWhitespace(entry).length > 0)\n ) {\n pushCurrent();\n currentKind = \"forwarded_headers\";\n currentLines.push(line);\n continue;\n }\n if (!currentKind) {\n currentKind = nextKind;\n currentLines.push(line);\n continue;\n }\n if (nextKind !== currentKind) {\n pushCurrent();\n currentKind = nextKind;\n }\n currentLines.push(line);\n }\n\n pushCurrent();\n\n const merged: EmailBodySection[] = [];\n for (const section of sections) {\n const previous = merged.at(-1);\n if (\n previous &&\n previous.kind === section.kind &&\n section.kind !== \"forwarded_headers\"\n ) {\n previous.text = normalizeWhitespace(\n `${previous.text}\\n\\n${section.text}`,\n );\n if (\n section.kind === \"quoted_history\" &&\n typeof section.quotedDepth === \"number\"\n ) {\n previous.quotedDepth = Math.max(\n previous.quotedDepth ?? 0,\n section.quotedDepth,\n );\n }\n continue;\n }\n merged.push({ ...section });\n }\n\n return merged;\n};\n\nconst stripEmailHtml = (value: string) => {\n const focused = extractMainHtmlContent(value)\n .replace(/<blockquote\\b[^>]*>/gi, `\\n${EMAIL_HTML_QUOTE_OPEN_TOKEN}\\n`)\n .replace(/<\\/blockquote>/gi, `\\n${EMAIL_HTML_QUOTE_CLOSE_TOKEN}\\n`);\n const stripped = stripHtmlTags(focused);\n const lines = stripped.replace(/\\r\\n?/g, \"\\n\").split(\"\\n\");\n const rendered: string[] = [];\n let quotedDepth = 0;\n\n for (const line of lines) {\n const trimmed = normalizeWhitespace(line);\n if (!trimmed) {\n if (rendered.at(-1) !== \"\") {\n rendered.push(\"\");\n }\n continue;\n }\n if (trimmed === EMAIL_HTML_QUOTE_OPEN_TOKEN) {\n quotedDepth += 1;\n continue;\n }\n if (trimmed === EMAIL_HTML_QUOTE_CLOSE_TOKEN) {\n quotedDepth = Math.max(quotedDepth - 1, 0);\n continue;\n }\n\n const prefixed =\n quotedDepth > 0 ? `${\">\".repeat(quotedDepth)} ${trimmed}` : trimmed;\n rendered.push(prefixed);\n }\n\n return normalizeWhitespace(rendered.join(\"\\n\").replace(/\\n{2,}/g, \"\\n\"));\n};\n\nconst scoreEmailBodyCandidate = (candidate: string | undefined) => {\n if (!candidate) {\n return Number.NEGATIVE_INFINITY;\n }\n\n const sections = parseEmailBodySections(candidate);\n // Rank by how much the candidate says that is NEW. This used to be inverted —\n // +8 per forwarded block and +6 per quoted block against +1 for authored text\n // — so for multipart/alternative the HTML part, which carries the whole\n // <blockquote> chain, always beat a clean text/plain part. That is backwards\n // for retrieval and for an embedding bill: it selected the copy with the most\n // duplicated history in it.\n const authoredChars = sections\n .filter((section) => section.kind === \"authored_text\")\n .reduce((total, section) => total + section.text.trim().length, 0);\n\n return authoredChars * 10 + Math.min(candidate.length, 5_000) / 1_000;\n};\n\nconst choosePreferredEmailBodyText = (\n htmlText: string | undefined,\n plainText: string | undefined,\n) => {\n const htmlScore = scoreEmailBodyCandidate(htmlText);\n const plainScore = scoreEmailBodyCandidate(plainText);\n\n return htmlScore >= plainScore ? htmlText : plainText;\n};\n\nconst chooseEmailBodyCandidate = (\n current: string | undefined,\n candidate: string | undefined,\n) => {\n if (!candidate) {\n return current;\n }\n if (!current) {\n return candidate;\n }\n\n return candidate.length > current.length ? candidate : current;\n};\n\nconst parseEmailMimeParts = (\n body: string,\n contentType: string | undefined,\n transferEncoding?: string,\n): {\n bodyHtml?: string;\n bodyText?: string;\n attachments: {\n contentId?: string;\n contentLocation?: string;\n contentType?: string;\n data: Uint8Array;\n dispositionType?: string;\n fileName: string;\n role: \"attached_message\" | \"file_attachment\" | \"inline_resource\";\n }[];\n} => {\n const attachments: {\n contentId?: string;\n contentLocation?: string;\n contentType?: string;\n data: Uint8Array;\n dispositionType?: string;\n fileName: string;\n role: \"attached_message\" | \"file_attachment\" | \"inline_resource\";\n }[] = [];\n let bodyText: string | undefined;\n let bodyHtml: string | undefined;\n const collectMimeParts = (\n partBody: string,\n partContentType: string | undefined,\n ) => {\n const boundary = parseMimeBoundary(partContentType);\n if (!boundary) {\n const htmlMatch = partBody.match(/<html[\\s\\S]*<\\/html>/i);\n bodyHtml = chooseEmailBodyCandidate(bodyHtml, htmlMatch?.[0]);\n bodyText = chooseEmailBodyCandidate(\n bodyText,\n htmlMatch ? undefined : partBody,\n );\n return;\n }\n\n for (const rawPart of partBody.split(`--${boundary}`)) {\n const trimmed = rawPart.trim();\n if (!trimmed || trimmed === \"--\") {\n continue;\n }\n\n const { body: nestedBody, headerBlock } = splitEmailMessage(trimmed);\n const headers = parseHeaderBlock(headerBlock);\n const nestedContentType = headers.get(\"content-type\");\n const disposition = headers.get(\"content-disposition\");\n const dispositionType = disposition?.split(\";\")[0]?.trim().toLowerCase();\n const transferEncoding = headers.get(\"content-transfer-encoding\");\n const contentId = normalizeEmailContentId(headers.get(\"content-id\"));\n const contentLocation = normalizeWhitespace(\n headers.get(\"content-location\") ?? \"\",\n );\n const filename =\n disposition?.match(/filename=\"?([^\";]+)\"?/i)?.[1] ??\n nestedContentType?.match(/name=\"?([^\";]+)\"?/i)?.[1];\n const decodedBytes = decodeEmailPartBody(nestedBody, transferEncoding);\n const decodedText = decodeWithCharset(decodedBytes, nestedContentType);\n const normalizedContentType = nestedContentType?.toLowerCase() ?? \"\";\n const isMultipart = normalizedContentType.startsWith(\"multipart/\");\n const isHtml = normalizedContentType.includes(\"text/html\");\n const isAttachedMessage =\n normalizedContentType.includes(\"message/rfc822\");\n const isPlain = normalizedContentType.includes(\"text/plain\");\n const isBodyLikeTextPart =\n (isHtml || isPlain) &&\n !filename &&\n dispositionType !== \"attachment\" &&\n !contentId &&\n !contentLocation;\n\n if (isMultipart) {\n collectMimeParts(decodedText, nestedContentType);\n continue;\n }\n\n if (isBodyLikeTextPart) {\n if (isHtml) {\n bodyHtml = chooseEmailBodyCandidate(bodyHtml, decodedText);\n continue;\n }\n if (isPlain) {\n bodyText = chooseEmailBodyCandidate(bodyText, decodedText);\n }\n continue;\n }\n\n if (\n filename ||\n dispositionType === \"attachment\" ||\n dispositionType === \"inline\" ||\n contentId ||\n contentLocation\n ) {\n attachments.push({\n contentId,\n contentLocation: contentLocation || undefined,\n contentType: nestedContentType,\n data: decodedBytes,\n dispositionType,\n fileName: inferEmailAttachmentName({\n contentId,\n contentLocation: contentLocation || undefined,\n contentType: nestedContentType,\n filename,\n }),\n role: isAttachedMessage\n ? \"attached_message\"\n : dispositionType === \"inline\" || contentId || contentLocation\n ? \"inline_resource\"\n : \"file_attachment\",\n });\n continue;\n }\n\n if (isHtml) {\n bodyHtml = chooseEmailBodyCandidate(bodyHtml, decodedText);\n continue;\n }\n\n if (isPlain) {\n bodyText = chooseEmailBodyCandidate(bodyText, decodedText);\n }\n }\n };\n\n // A single-part message has no boundary, so its body never reaches the\n // per-part loop below — which is the ONLY place content-transfer-encoding was\n // read. A base64 top-level body was therefore embedded as raw base64 text.\n // Decode it here, where the top-level header is still in scope.\n const topLevelBody =\n transferEncoding && !parseMimeBoundary(contentType)\n ? decodeWithCharset(\n decodeEmailPartBody(body, transferEncoding),\n contentType,\n )\n : body;\n collectMimeParts(topLevelBody, contentType);\n\n return {\n attachments,\n bodyHtml,\n bodyText,\n };\n};\n\n/**\n * The part of a mail body that this message ADDS — authored text only, with\n * quoted history, forwarded headers and the signature block dropped.\n *\n * Exposed rather than applied by default, deliberately. The extractor's own\n * output is a faithful reconstruction of the message (thread lineage and\n * forwarded chains are built from it), so stripping there would break that\n * contract. Embedding is the case that wants only the new content: in a thread,\n * the full text means message N re-embeds the whole of 1..N-1 plus a signature\n * and a confidentiality footer, every time — quadratic in thread length.\n *\n * A message that is nothing but a forward is kept whole rather than reduced to\n * nothing.\n */\nexport const authoredEmailText = (text: string) => {\n const authored = parseEmailBodySections(text)\n .filter((section) => section.kind === \"authored_text\")\n .map((section) => section.text.trim())\n .filter(Boolean)\n .join(\"\\n\\n\")\n .trim();\n\n return authored || text;\n};\n\nconst extractEmailText = (raw: string) => {\n const { body, headerBlock } = splitEmailMessage(raw);\n const headers = parseHeaderBlock(headerBlock);\n const parsed = parseEmailMimeParts(\n body,\n headers.get(\"content-type\"),\n headers.get(\"content-transfer-encoding\"),\n );\n const htmlText = parsed.bodyHtml\n ? stripEmailHtml(parsed.bodyHtml)\n : undefined;\n const plainText = parsed.bodyText\n ? normalizeWhitespace(parsed.bodyText)\n : undefined;\n const preferredBodyText = choosePreferredEmailBodyText(htmlText, plainText);\n if (preferredBodyText) {\n return preferredBodyText;\n }\n if (!body) {\n return normalizeWhitespace(raw.replace(/\\r\\n?/g, \"\\n\"));\n }\n\n const htmlMatch = body.match(/<html[\\s\\S]*<\\/html>/i);\n if (htmlMatch) {\n return stripEmailHtml(htmlMatch[0]);\n }\n\n return normalizeWhitespace(body);\n};\n\nconst parseEmailHeaders = (raw: string) => {\n const { headerBlock } = splitEmailMessage(raw);\n const headers = parseHeaderBlock(headerBlock);\n const getHeader = (name: string) => headers.get(name.toLowerCase());\n const from = getHeader(\"From\");\n const to = getHeader(\"To\");\n const cc = getHeader(\"Cc\");\n const bcc = getHeader(\"Bcc\");\n const replyTo = getHeader(\"Reply-To\");\n const fromParsed = parseEmailAddressList(from);\n const toParsed = parseEmailAddressList(to);\n const ccParsed = parseEmailAddressList(cc);\n const bccParsed = parseEmailAddressList(bcc);\n const replyToParsed = parseEmailAddressList(replyTo);\n const participantAddresses = [\n ...new Set([\n ...fromParsed.addresses,\n ...toParsed.addresses,\n ...ccParsed.addresses,\n ...bccParsed.addresses,\n ...replyToParsed.addresses,\n ]),\n ];\n const participantDisplayNames = [\n ...new Set([\n ...fromParsed.displayNames,\n ...toParsed.displayNames,\n ...ccParsed.displayNames,\n ...bccParsed.displayNames,\n ...replyToParsed.displayNames,\n ]),\n ];\n\n return {\n bcc,\n bccAddressEntries: bccParsed.entries,\n bccAddresses: bccParsed.addresses,\n cc,\n ccAddressEntries: ccParsed.entries,\n ccAddresses: ccParsed.addresses,\n contentType: getHeader(\"Content-Type\"),\n contentTransferEncoding: getHeader(\"Content-Transfer-Encoding\"),\n from,\n fromAddress: fromParsed.addresses[0],\n fromAddressEntries: fromParsed.entries,\n fromDisplayName: fromParsed.displayNames[0],\n inReplyTo: getHeader(\"In-Reply-To\"),\n messageId: getHeader(\"Message-ID\"),\n conversationId: getHeader(\"Conversation-ID\"),\n participantAddresses,\n participantDisplayNames,\n replyTo,\n replyToAddressEntries: replyToParsed.entries,\n replyToAddresses: replyToParsed.addresses,\n references: getHeader(\"References\"),\n subject: getHeader(\"Subject\"),\n threadIndex: getHeader(\"Thread-Index\"),\n threadTopic: getHeader(\"Thread-Topic\") ?? getHeader(\"Subject\"),\n to,\n toAddressEntries: toParsed.entries,\n toAddresses: toParsed.addresses,\n };\n};\n\nconst extractEmailDocumentsFromRawMessage = async (\n input: RAGFileExtractionInput,\n raw: string,\n options?: {\n metadata?: Record<string, unknown>;\n source?: string;\n title?: string;\n },\n) => {\n const headers = parseEmailHeaders(raw);\n const { body } = splitEmailMessage(raw);\n const parsed = parseEmailMimeParts(\n body,\n headers.contentType,\n headers.contentTransferEncoding,\n );\n const source =\n options?.source ??\n input.source ??\n input.path ??\n input.name ??\n `${slugify(input.title ?? DEFAULT_BINARY_NAME)}.eml`;\n const maildirMetadata = parseMaildirMetadata(source);\n const mergedMetadata = {\n ...(input.metadata ?? {}),\n ...(options?.metadata ?? {}),\n };\n const referenceChain = parseEmailReferenceChain(headers.references);\n const messageId = normalizeEmailMessageId(headers.messageId);\n const inReplyTo = normalizeEmailMessageId(headers.inReplyTo);\n const threadMessageIds = [\n ...new Set(\n [\n ...referenceChain.map((entry) => normalizeEmailMessageId(entry)),\n messageId,\n ].filter((value): value is string => typeof value === \"string\"),\n ),\n ];\n const replyDepth = Math.max(referenceChain.length, headers.inReplyTo ? 1 : 0);\n const threadIndex = headers.threadIndex;\n const threadTopic = headers.threadTopic ?? headers.subject;\n const conversationId =\n headers.conversationId ??\n (typeof mergedMetadata.emailConversationId === \"string\" &&\n mergedMetadata.emailConversationId.length > 0\n ? mergedMetadata.emailConversationId\n : undefined);\n const threadRootMessageId =\n normalizeEmailMessageId(referenceChain[0]) ?? inReplyTo ?? messageId;\n const threadKey =\n normalizeEmailThreadKey(threadTopic) ??\n normalizeEmailThreadKey(conversationId) ??\n normalizeEmailThreadKey(messageId) ??\n normalizeEmailThreadKey(headers.subject);\n const parentMessageId = normalizeEmailMessageId(\n typeof options?.metadata?.messageId === \"string\"\n ? options.metadata.messageId\n : typeof input.metadata?.messageId === \"string\"\n ? input.metadata.messageId\n : undefined,\n );\n const parentMessageSource =\n typeof options?.metadata?.emailMessageSource === \"string\" &&\n options.metadata.emailMessageSource.length > 0\n ? options.metadata.emailMessageSource\n : typeof input.metadata?.emailMessageSource === \"string\" &&\n input.metadata.emailMessageSource.length > 0\n ? input.metadata.emailMessageSource\n : undefined;\n const parentThreadKey =\n typeof options?.metadata?.threadKey === \"string\" &&\n options.metadata.threadKey.length > 0\n ? options.metadata.threadKey\n : typeof input.metadata?.threadKey === \"string\" &&\n input.metadata.threadKey.length > 0\n ? input.metadata.threadKey\n : undefined;\n const parentAttachmentSource =\n typeof options?.metadata?.emailAttachmentSource === \"string\" &&\n options.metadata.emailAttachmentSource.length > 0\n ? options.metadata.emailAttachmentSource\n : typeof input.metadata?.emailAttachmentSource === \"string\" &&\n input.metadata.emailAttachmentSource.length > 0\n ? input.metadata.emailAttachmentSource\n : undefined;\n const parentMessageLineage = parseEmailMessageLineage(mergedMetadata);\n const parentAncestorMessageIds = Array.isArray(\n mergedMetadata.emailAncestorMessageIds,\n )\n ? mergedMetadata.emailAncestorMessageIds.filter(\n (value): value is string =>\n typeof value === \"string\" && value.length > 0,\n )\n : [];\n const parentAncestorMessageSources = Array.isArray(\n mergedMetadata.emailAncestorMessageSources,\n )\n ? mergedMetadata.emailAncestorMessageSources.filter(\n (value): value is string =>\n typeof value === \"string\" && value.length > 0,\n )\n : [];\n const emailMessageLineage = parentAttachmentSource\n ? [\n ...parentMessageLineage,\n {\n attachmentSource: parentAttachmentSource,\n ...(parentMessageId ? { messageId: parentMessageId } : {}),\n ...(parentMessageSource\n ? { messageSource: parentMessageSource }\n : {}),\n ...(typeof mergedMetadata.emailMessageSourceKind === \"string\" &&\n mergedMetadata.emailMessageSourceKind.length > 0\n ? {\n messageSourceKind: mergedMetadata.emailMessageSourceKind,\n }\n : {}),\n ...(parentThreadKey ? { threadKey: parentThreadKey } : {}),\n },\n ]\n : parentMessageLineage;\n const emailMessageLineageMessageIds = emailMessageLineage\n .map((entry) => entry.messageId)\n .filter((value): value is string => typeof value === \"string\");\n const emailMessageLineageSources = emailMessageLineage\n .map((entry) => entry.messageSource)\n .filter((value): value is string => typeof value === \"string\");\n const emailMessageLineageAttachmentSources = emailMessageLineage\n .map((entry) => entry.attachmentSource)\n .filter((value): value is string => typeof value === \"string\");\n const emailMessageDepth = emailMessageLineage.length;\n const emailAncestorMessageIds = [\n ...new Set([...parentAncestorMessageIds, ...emailMessageLineageMessageIds]),\n ];\n const emailAncestorMessageSources = [\n ...new Set([\n ...parentAncestorMessageSources,\n ...emailMessageLineageSources,\n ]),\n ];\n const embeddedResourceReferences = parseEmailEmbeddedResourceReferences(\n parsed.bodyHtml,\n );\n const messageText = extractEmailText(raw);\n const emailBodySections = parseEmailBodySections(messageText);\n const forwardedSections = emailBodySections.filter(\n (section) => section.kind === \"forwarded_headers\",\n );\n const primaryForwardedSection = emailBodySections.find(\n (section) => section.kind === \"forwarded_headers\",\n );\n const forwardedHeaderFieldNames = [\n ...new Set(\n emailBodySections.flatMap((section) =>\n Object.keys(section.forwardedHeaderFields ?? {}),\n ),\n ),\n ];\n const quotedDepths = emailBodySections\n .map((section) =>\n typeof section.quotedDepth === \"number\" ? section.quotedDepth : undefined,\n )\n .filter((value): value is number => typeof value === \"number\");\n const inheritedAttachmentNames = Array.isArray(mergedMetadata.attachmentNames)\n ? mergedMetadata.attachmentNames.filter(\n (value): value is string =>\n typeof value === \"string\" && value.length > 0,\n )\n : [];\n const attachmentNames =\n parsed.attachments.length > 0\n ? parsed.attachments.map((attachment) => attachment.fileName)\n : inheritedAttachmentNames;\n const attachmentCount =\n parsed.attachments.length > 0\n ? parsed.attachments.length\n : typeof mergedMetadata.attachmentCount === \"number\" &&\n Number.isFinite(mergedMetadata.attachmentCount)\n ? mergedMetadata.attachmentCount\n : attachmentNames.length;\n const messageMetadata = {\n ...mergedMetadata,\n ...(maildirMetadata ?? {}),\n attachmentCount,\n attachmentNames,\n emailKind: \"message\",\n fileKind: \"email\",\n ...(typeof conversationId === \"string\" && conversationId.trim().length > 0\n ? { emailConversationId: normalizeWhitespace(conversationId) }\n : {}),\n from: headers.from,\n fromAddress: headers.fromAddress,\n fromAddressEntries: headers.fromAddressEntries,\n fromDisplayName: headers.fromDisplayName,\n inReplyTo,\n messageId,\n emailAncestorMessageIds,\n emailAncestorMessageSources,\n emailContainerAttachmentSource: parentAttachmentSource,\n emailContainerMessageId: parentAttachmentSource\n ? parentMessageId\n : undefined,\n emailContainerMessageSource: parentAttachmentSource\n ? parentMessageSource\n : undefined,\n emailContainerThreadKey: parentAttachmentSource\n ? parentThreadKey\n : undefined,\n emailMessageLineage,\n emailMessageLineageAttachmentSources,\n emailMessageLineageCount: emailMessageLineage.length,\n emailMessageLineageMessageIds,\n emailMessageLineageSources,\n emailMessageDepth,\n emailMessageSourceKind: parentAttachmentSource\n ? \"attached_message\"\n : \"root_message\",\n references: headers.references,\n replyDepth,\n replyReferenceCount: referenceChain.length,\n threadMessageCount: threadMessageIds.length,\n threadMessageIds,\n ...(typeof threadIndex === \"string\" && threadIndex.trim().length > 0\n ? { threadIndex: normalizeWhitespace(threadIndex) }\n : {}),\n threadKey,\n threadRootMessageId,\n threadTopic,\n to: headers.to,\n toAddressEntries: headers.toAddressEntries,\n toAddresses: headers.toAddresses,\n hasAttachments: attachmentCount > 0,\n hasInlineResources: parsed.attachments.some(\n (attachment) => attachment.role === \"inline_resource\",\n ),\n embeddedResourceCount:\n embeddedResourceReferences.contentIds.length +\n embeddedResourceReferences.contentLocations.length,\n embeddedResourceContentIds: embeddedResourceReferences.contentIds,\n embeddedResourceContentLocations:\n embeddedResourceReferences.contentLocations,\n bcc: headers.bcc,\n bccAddressEntries: headers.bccAddressEntries,\n bccAddresses: headers.bccAddresses,\n cc: headers.cc,\n ccAddressEntries: headers.ccAddressEntries,\n ccAddresses: headers.ccAddresses,\n emailAuthoredSectionCount: emailBodySections.filter(\n (section) => section.kind === \"authored_text\",\n ).length,\n emailBodySectionCount: emailBodySections.length,\n emailBodySections,\n emailForwardedChainCount: forwardedSections.length,\n emailForwardedChains: forwardedSections.map((section, index) => ({\n ...(Array.isArray(section.forwardedBccAddresses) &&\n section.forwardedBccAddresses.length > 0\n ? { forwardedBccAddresses: section.forwardedBccAddresses }\n : {}),\n ...(Array.isArray(section.forwardedCcAddresses) &&\n section.forwardedCcAddresses.length > 0\n ? { forwardedCcAddresses: section.forwardedCcAddresses }\n : {}),\n ...(typeof section.forwardedDate === \"string\"\n ? { forwardedDate: section.forwardedDate }\n : {}),\n ...(typeof section.forwardedFromAddress === \"string\"\n ? { forwardedFromAddress: section.forwardedFromAddress }\n : {}),\n ...(typeof section.forwardedFromDisplayName === \"string\"\n ? {\n forwardedFromDisplayName: section.forwardedFromDisplayName,\n }\n : {}),\n ...(section.forwardedHeaderFields\n ? { forwardedHeaderFields: section.forwardedHeaderFields }\n : {}),\n ...(Array.isArray(section.forwardedParticipantAddresses) &&\n section.forwardedParticipantAddresses.length > 0\n ? {\n forwardedParticipantAddresses:\n section.forwardedParticipantAddresses,\n }\n : {}),\n ...(Array.isArray(section.forwardedReplyToAddresses) &&\n section.forwardedReplyToAddresses.length > 0\n ? {\n forwardedReplyToAddresses: section.forwardedReplyToAddresses,\n }\n : {}),\n ...(typeof section.forwardedSubject === \"string\"\n ? { forwardedSubject: section.forwardedSubject }\n : {}),\n ...(typeof section.forwardedTimestamp === \"string\"\n ? { forwardedTimestamp: section.forwardedTimestamp }\n : {}),\n ...(Array.isArray(section.forwardedToAddresses) &&\n section.forwardedToAddresses.length > 0\n ? { forwardedToAddresses: section.forwardedToAddresses }\n : {}),\n ordinal: index + 1,\n text: section.text,\n })),\n emailForwardedBccAddresses: primaryForwardedSection?.forwardedBccAddresses,\n emailForwardedCcAddresses: primaryForwardedSection?.forwardedCcAddresses,\n emailForwardedDate: primaryForwardedSection?.forwardedDate,\n emailForwardedFromAddress: primaryForwardedSection?.forwardedFromAddress,\n emailForwardedFromDisplayName:\n primaryForwardedSection?.forwardedFromDisplayName,\n emailForwardedHeaderSectionCount: emailBodySections.filter(\n (section) => section.kind === \"forwarded_headers\",\n ).length,\n emailForwardedHeaderFieldCount: forwardedHeaderFieldNames.length,\n emailForwardedHeaderFieldNames: forwardedHeaderFieldNames,\n emailForwardedHeaderFields: primaryForwardedSection?.forwardedHeaderFields,\n emailForwardedParticipantAddresses:\n primaryForwardedSection?.forwardedParticipantAddresses,\n emailForwardedReplyToAddresses:\n primaryForwardedSection?.forwardedReplyToAddresses,\n emailForwardedSubject: primaryForwardedSection?.forwardedSubject,\n emailForwardedTimestamp: primaryForwardedSection?.forwardedTimestamp,\n emailForwardedToAddresses: primaryForwardedSection?.forwardedToAddresses,\n emailQuotedMaxDepth:\n quotedDepths.length > 0 ? Math.max(...quotedDepths) : undefined,\n emailQuotedSectionCount: emailBodySections.filter(\n (section) => section.kind === \"quoted_history\",\n ).length,\n emailMessageSource: source,\n participantAddresses: headers.participantAddresses,\n participantDisplayNames: headers.participantDisplayNames,\n replyTo: headers.replyTo,\n replyToAddressEntries: headers.replyToAddressEntries,\n replyToAddresses: headers.replyToAddresses,\n };\n const attachmentDocuments = await Promise.all(\n parsed.attachments.map(async (attachment, index) => {\n const attachmentSource = `${source}#attachments/${attachment.fileName}`;\n const matchesEmbeddedReference =\n (attachment.contentId\n ? embeddedResourceReferences.contentIds.includes(attachment.contentId)\n : false) ||\n (attachment.contentLocation\n ? embeddedResourceReferences.contentLocations.includes(\n attachment.contentLocation,\n )\n : false);\n const documents = await extractRAGFileDocuments({\n chunking: input.chunking,\n contentType: attachment.contentType,\n data: attachment.data,\n extractorRegistry: input.extractorRegistry,\n format:\n inferFormatFromContentType(attachment.contentType ?? null) ??\n inferFormatFromName(attachment.fileName),\n metadata: {\n ...messageMetadata,\n attachmentIndex: index,\n attachmentContentId: attachment.contentId,\n attachmentContentLocation: attachment.contentLocation,\n attachmentDisposition: attachment.dispositionType ?? \"attachment\",\n attachmentEmbeddedReferenceMatched: matchesEmbeddedReference,\n attachmentName: attachment.fileName,\n emailAttachmentRole: attachment.role,\n emailAttachmentSource: attachmentSource,\n emailKind: \"attachment\",\n },\n name: attachment.fileName,\n source: attachmentSource,\n title: headers.subject\n ? `${headers.subject} · ${attachment.fileName}`\n : attachment.fileName,\n });\n\n return documents;\n }),\n );\n\n const messageDocument: RAGExtractedFileDocument = {\n chunking: input.chunking,\n contentType: input.contentType,\n format: \"text\",\n metadata: messageMetadata,\n source,\n text: messageText,\n title: options?.title ?? input.title ?? headers.subject,\n };\n\n return [messageDocument, ...attachmentDocuments.flat()];\n};\n\nconst normalizeEmailThreadKey = (value: string | undefined) => {\n const normalized = normalizeWhitespace(\n value\n // Repeat the anchor: /g does NOT re-apply an ^-anchored pattern, so\n // \"Re: Fwd: Re: Pilot\" only lost its first \"Re:\" and became a different\n // key from \"Pilot\" — the same conversation split across several threads.\n ?.replace(/^(?:(?:re|fw|fwd|aw|sv|vs|antw)\\s*:\\s*)+/i, \"\")\n ?.replace(/[<>]/g, \"\")\n ?.toLowerCase() ?? \"\",\n );\n\n return normalized || undefined;\n};\n\nconst normalizeEmailMessageId = (value: string | undefined) => {\n const normalized = normalizeWhitespace(value ?? \"\");\n return normalized || undefined;\n};\n\nconst parseEmailReferenceChain = (references: string | undefined) =>\n (references?.match(/<[^>]+>/g) ?? [])\n .map((entry) => normalizeWhitespace(entry))\n .filter(Boolean);\n\nconst stripRTF = (value: string) => {\n const withoutBinary = value.replace(/\\\\bin\\d+ [\\s\\S]*?(?=[\\\\}])/g, \" \");\n const withoutControls = withoutBinary\n .replace(/\\\\par[d]?/g, \"\\n\")\n .replace(/\\\\tab/g, \"\\t\")\n .replace(/\\\\'[0-9a-fA-F]{2}/g, (match) =>\n String.fromCharCode(parseInt(match.slice(2), 16)),\n )\n .replace(/\\\\[a-zA-Z]+\\d* ?/g, \" \")\n .replace(/[{}]/g, \" \");\n\n return normalizeWhitespace(withoutControls);\n};\n\nconst extractOrderedPrintableStrings = (data: Uint8Array) => {\n const text = Buffer.from(data).toString(\"latin1\");\n const asciiMatches =\n text.match(\n /[A-Za-z0-9][A-Za-z0-9 ,.;:!?@#$%^&*()[\\]_\\-+/\\\\'\"`~|=<>]{3,}/g,\n ) ?? [];\n const utf16Matches =\n Buffer.from(data)\n .toString(\"utf16le\")\n .match(/[A-Za-z0-9][A-Za-z0-9 ,.;:!?@#$%^&*()[\\]_\\-+/\\\\'\"`~|=<>]{3,}/g) ??\n [];\n\n const values = [...asciiMatches, ...utf16Matches].map((entry) =>\n normalizeWhitespace(entry),\n );\n return values.filter((entry) => entry.length >= 4).join(\"\\n\");\n};\n\nconst extractPrintableStrings = (data: Uint8Array) => {\n const values = extractOrderedPrintableStrings(data)\n .split(\"\\n\")\n .filter(Boolean);\n const unique = [...new Set(values)].filter((entry) => entry.length >= 4);\n return unique.join(\"\\n\");\n};\n\nconst ocrMetadata = (result: RAGOCRResult) => {\n const regions = result.regions?.filter(\n (region) => normalizeWhitespace(region.text ?? \"\").length > 0,\n );\n const pageNumbers = [\n ...new Set(\n (regions ?? [])\n .map((region) =>\n typeof region.page === \"number\" && region.page > 0\n ? region.page\n : undefined,\n )\n .filter((value): value is number => value !== undefined),\n ),\n ].sort((left, right) => left - right);\n const confidenceValues = [\n typeof result.confidence === \"number\" ? result.confidence : undefined,\n ...(regions ?? []).map((region) =>\n typeof region.confidence === \"number\" ? region.confidence : undefined,\n ),\n ].filter((value): value is number => value !== undefined);\n\n const averageConfidence =\n confidenceValues.length > 0\n ? confidenceValues.reduce((sum, value) => sum + value, 0) /\n confidenceValues.length\n : undefined;\n const minConfidence =\n confidenceValues.length > 0 ? Math.min(...confidenceValues) : undefined;\n const maxConfidence =\n confidenceValues.length > 0 ? Math.max(...confidenceValues) : undefined;\n const pageStart = pageNumbers[0];\n const pageEnd = pageNumbers.at(-1);\n\n return {\n ...(result.metadata ?? {}),\n ocrConfidence: result.confidence,\n ocrPageCount: pageNumbers.length,\n ...(typeof pageStart === \"number\" ? { ocrPageStart: pageStart } : {}),\n ...(typeof pageEnd === \"number\" ? { ocrPageEnd: pageEnd } : {}),\n ocrPageNumbers: pageNumbers,\n ocrRegionCount: regions?.length,\n ocrRegions: regions,\n ocrAverageConfidence: averageConfidence,\n ...(typeof minConfidence === \"number\"\n ? { ocrMinConfidence: minConfidence }\n : {}),\n ...(typeof maxConfidence === \"number\"\n ? { ocrMaxConfidence: maxConfidence }\n : {}),\n };\n};\n\nconst toOCRReadingOrder = (regions: NonNullable<RAGOCRResult[\"regions\"]>) =>\n [...regions].sort((left, right) => {\n const leftY =\n typeof left.y === \"number\" && Number.isFinite(left.y) ? left.y : 0;\n const rightY =\n typeof right.y === \"number\" && Number.isFinite(right.y) ? right.y : 0;\n const leftHeight =\n typeof left.height === \"number\" && Number.isFinite(left.height)\n ? left.height\n : 0;\n const rightHeight =\n typeof right.height === \"number\" && Number.isFinite(right.height)\n ? right.height\n : 0;\n const lineThreshold = Math.max(leftHeight, rightHeight, 12) * 0.6;\n if (Math.abs(leftY - rightY) > lineThreshold) {\n return leftY - rightY;\n }\n\n const leftX =\n typeof left.x === \"number\" && Number.isFinite(left.x) ? left.x : 0;\n const rightX =\n typeof right.x === \"number\" && Number.isFinite(right.x) ? right.x : 0;\n if (leftX !== rightX) {\n return leftX - rightX;\n }\n\n return normalizeWhitespace(left.text ?? \"\").localeCompare(\n normalizeWhitespace(right.text ?? \"\"),\n );\n });\n\nconst buildOCRReadingLinesText = (\n regions: NonNullable<RAGOCRResult[\"regions\"]>,\n) => {\n const ordered = toOCRReadingOrder(regions);\n const lines: Array<{\n y: number;\n height: number;\n segments: typeof ordered;\n }> = [];\n\n for (const region of ordered) {\n const text = normalizeWhitespace(region.text ?? \"\");\n if (!text) {\n continue;\n }\n const y =\n typeof region.y === \"number\" && Number.isFinite(region.y) ? region.y : 0;\n const height =\n typeof region.height === \"number\" && Number.isFinite(region.height)\n ? region.height\n : 12;\n const line = lines.at(-1);\n const threshold = Math.max(line?.height ?? 0, height, 12) * 0.6;\n if (line && Math.abs(y - line.y) <= threshold) {\n line.segments.push(region);\n line.y = Math.min(line.y, y);\n line.height = Math.max(line.height, height);\n continue;\n }\n\n lines.push({ height, segments: [region], y });\n }\n\n return normalizeWhitespace(\n lines\n .map((line) =>\n toOCRReadingOrder(line.segments)\n .map((segment) => normalizeWhitespace(segment.text ?? \"\"))\n .filter(Boolean)\n .join(\" \"),\n )\n .filter(Boolean)\n .join(\"\\n\"),\n );\n};\n\nconst splitOCRColumns = (regions: NonNullable<RAGOCRResult[\"regions\"]>) => {\n if (regions.length < 4) {\n return [regions];\n }\n\n const xAnchors = regions\n .map((region) =>\n typeof region.x === \"number\" && Number.isFinite(region.x)\n ? region.x\n : undefined,\n )\n .filter((value): value is number => typeof value === \"number\")\n .sort((left, right) => left - right);\n if (xAnchors.length < 4) {\n return [regions];\n }\n\n let largestGap = 0;\n let splitX: number | undefined;\n for (let index = 1; index < xAnchors.length; index += 1) {\n const gap = xAnchors[index]! - xAnchors[index - 1]!;\n if (gap > largestGap) {\n largestGap = gap;\n splitX = xAnchors[index - 1]! + gap / 2;\n }\n }\n\n if (!(largestGap >= 80) || typeof splitX !== \"number\") {\n return [regions];\n }\n\n const leftColumn = regions.filter((region) => {\n const x =\n typeof region.x === \"number\" && Number.isFinite(region.x) ? region.x : 0;\n return x < splitX;\n });\n const rightColumn = regions.filter((region) => {\n const x =\n typeof region.x === \"number\" && Number.isFinite(region.x) ? region.x : 0;\n return x >= splitX;\n });\n\n if (leftColumn.length < 2 || rightColumn.length < 2) {\n return [regions];\n }\n\n const yRange = (column: NonNullable<RAGOCRResult[\"regions\"]>) => {\n const ys = column\n .map((region) =>\n typeof region.y === \"number\" && Number.isFinite(region.y)\n ? region.y\n : undefined,\n )\n .filter((value): value is number => typeof value === \"number\");\n return ys.length > 0\n ? { max: Math.max(...ys), min: Math.min(...ys) }\n : undefined;\n };\n const leftRange = yRange(leftColumn);\n const rightRange = yRange(rightColumn);\n const overlapsVertically =\n leftRange &&\n rightRange &&\n Math.min(leftRange.max, rightRange.max) >=\n Math.max(leftRange.min, rightRange.min);\n if (!overlapsVertically) {\n return [regions];\n }\n\n return [leftColumn, rightColumn];\n};\n\nconst buildOCRReadingText = (regions: NonNullable<RAGOCRResult[\"regions\"]>) =>\n normalizeWhitespace(\n splitOCRColumns(regions)\n .map((column) => buildOCRReadingLinesText(column))\n .filter(Boolean)\n .join(\"\\n\\n\"),\n );\n\nconst getOCRPrimaryText = (result: RAGOCRResult) => {\n const regions = result.regions?.filter(\n (region) => normalizeWhitespace(region.text ?? \"\").length > 0,\n );\n const reconstructed =\n regions && regions.length > 0 ? buildOCRReadingText(regions) : \"\";\n\n return reconstructed || result.text;\n};\n\nconst buildOCRSummaryText = (result: RAGOCRResult) => {\n const regions =\n result.regions?.filter(\n (region) => normalizeWhitespace(region.text ?? \"\").length > 0,\n ) ?? [];\n if (regions.length === 0) {\n return {\n lowConfidenceRegionCount: 0,\n strongRegionCount: 0,\n summaryConfidenceThreshold: OCR_SUMMARY_CONFIDENCE_THRESHOLD,\n text: result.text,\n usedStrongRegionsOnly: false,\n };\n }\n\n const strongRegions = regions.filter(\n (region) =>\n typeof region.confidence !== \"number\" ||\n region.confidence >= OCR_SUMMARY_CONFIDENCE_THRESHOLD,\n );\n const lowConfidenceRegionCount = regions.length - strongRegions.length;\n const strongTextLength = strongRegions.reduce(\n (sum, region) => sum + normalizeWhitespace(region.text ?? \"\").length,\n 0,\n );\n const totalTextLength = regions.reduce(\n (sum, region) => sum + normalizeWhitespace(region.text ?? \"\").length,\n 0,\n );\n const strongCoverageRatio =\n totalTextLength > 0 ? strongTextLength / totalTextLength : 0;\n const useStrongRegionsOnly =\n strongRegions.length > 0 &&\n lowConfidenceRegionCount > 0 &&\n strongCoverageRatio >= OCR_SUMMARY_MIN_STRONG_TEXT_RATIO;\n const strongReconstructed = buildOCRReadingText(strongRegions);\n const allReconstructed = buildOCRReadingText(regions);\n\n return {\n lowConfidenceRegionCount,\n strongRegionCount: strongRegions.length,\n summaryConfidenceThreshold: OCR_SUMMARY_CONFIDENCE_THRESHOLD,\n text:\n (useStrongRegionsOnly ? strongReconstructed : allReconstructed) ||\n result.text,\n usedStrongRegionsOnly: useStrongRegionsOnly,\n };\n};\n\nconst ocrPageDocuments = (\n result: RAGOCRResult,\n input: RAGFileExtractionInput,\n baseMetadata: Record<string, unknown>,\n): RAGExtractedFileDocument[] => {\n const grouped = new Map<number, NonNullable<RAGOCRResult[\"regions\"]>>();\n for (const region of result.regions ?? []) {\n const text = normalizeWhitespace(region.text ?? \"\");\n if (!text || typeof region.page !== \"number\" || region.page < 1) {\n continue;\n }\n\n const bucket = grouped.get(region.page) ?? [];\n bucket.push({ ...region, text });\n grouped.set(region.page, bucket);\n }\n\n return [...grouped.entries()]\n .sort((left, right) => left[0] - right[0])\n .map(([pageNumber, regions]) => {\n const orderedRegions = toOCRReadingOrder(regions);\n const confidenceValues = regions\n .map((region) =>\n typeof region.confidence === \"number\" ? region.confidence : undefined,\n )\n .filter((value): value is number => value !== undefined);\n const averageConfidence =\n confidenceValues.length > 0\n ? confidenceValues.reduce((sum, value) => sum + value, 0) /\n confidenceValues.length\n : undefined;\n const minConfidence =\n confidenceValues.length > 0 ? Math.min(...confidenceValues) : undefined;\n const maxConfidence =\n confidenceValues.length > 0 ? Math.max(...confidenceValues) : undefined;\n\n return {\n chunking: input.chunking,\n contentType: input.contentType,\n format: \"text\",\n metadata: {\n ...(input.metadata ?? {}),\n ...baseMetadata,\n ocrPageAverageConfidence: averageConfidence,\n ocrPageConfidence: averageConfidence,\n ...(typeof minConfidence === \"number\"\n ? { ocrPageMinConfidence: minConfidence }\n : {}),\n ...(typeof maxConfidence === \"number\"\n ? { ocrPageMaxConfidence: maxConfidence }\n : {}),\n ocrRegionCount: regions.length,\n ocrRegionNumbers: regions.map((_region, index) => index + 1),\n ocrRegions: regions,\n pageNumber,\n pageIndex: pageNumber - 1,\n sourceNativeKind: \"pdf_page\",\n },\n source:\n input.source ??\n input.path ??\n input.name ??\n `${slugify(input.title ?? DEFAULT_BINARY_NAME)}.pdf`,\n text: normalizeWhitespace(\n `PDF page ${pageNumber} from ${\n input.title ?? input.name ?? input.path ?? DEFAULT_BINARY_NAME\n }.\\n${buildOCRReadingText(orderedRegions)}`,\n ),\n title: input.title\n ? `${input.title} · Page ${pageNumber}`\n : `Page ${pageNumber}`,\n };\n });\n};\n\nconst ocrRegionDocuments = (\n result: RAGOCRResult,\n input: RAGFileExtractionInput,\n baseMetadata: Record<string, unknown>,\n): RAGExtractedFileDocument[] => {\n const documents: RAGExtractedFileDocument[] = [];\n\n for (const [index, region] of (result.regions ?? []).entries()) {\n const text = normalizeWhitespace(region.text ?? \"\");\n if (!text || typeof region.page !== \"number\" || region.page < 1) {\n continue;\n }\n\n const pageNumber = region.page;\n const regionNumber = index + 1;\n\n documents.push({\n chunking: input.chunking,\n contentType: input.contentType,\n format: \"text\",\n metadata: {\n ...(input.metadata ?? {}),\n ...baseMetadata,\n ocrPageCount: 1,\n ocrPageNumbers: [pageNumber],\n ocrRegionConfidence: region.confidence,\n ocrRegionHeight: region.height,\n ocrRegionWidth: region.width,\n ocrRegionX: region.x,\n ocrRegionY: region.y,\n pageNumber,\n pageIndex: pageNumber - 1,\n regionIndex: index,\n regionNumber,\n sourceNativeKind: \"pdf_region\",\n },\n source:\n input.source ??\n input.path ??\n input.name ??\n `${slugify(input.title ?? DEFAULT_BINARY_NAME)}.pdf`,\n text: normalizeWhitespace(\n `PDF page ${pageNumber} region ${regionNumber} from ${\n input.title ?? input.name ?? input.path ?? DEFAULT_BINARY_NAME\n }.\\n${text}`,\n ),\n title: input.title\n ? `${input.title} · Page ${pageNumber} Region ${regionNumber}`\n : `Page ${pageNumber} Region ${regionNumber}`,\n });\n }\n\n return documents;\n};\n\nconst textExtractorSupports = (input: RAGFileExtractionInput) => {\n if (input.format) {\n return true;\n }\n\n const contentType = (input.contentType ?? \"\").toLowerCase();\n if (\n contentType.startsWith(\"text/\") ||\n contentType.includes(\"json\") ||\n contentType.includes(\"xml\") ||\n contentType.includes(\"yaml\") ||\n contentType.includes(\"javascript\")\n ) {\n return true;\n }\n\n if (TEXT_FILE_EXTENSIONS.has(inferExtensionFromInput(input))) {\n return true;\n }\n\n return isLikelyTextData(input.data);\n};\n\nconst pdfExtractorSupports = (input: RAGFileExtractionInput) => {\n const contentType = (input.contentType ?? \"\").toLowerCase();\n if (contentType.includes(\"application/pdf\")) {\n return true;\n }\n\n return PDF_FILE_EXTENSIONS.has(inferExtensionFromInput(input));\n};\n\nconst mediaExtractorSupports = (input: RAGFileExtractionInput) => {\n const contentType = (input.contentType ?? \"\").toLowerCase();\n if (contentType.startsWith(\"audio/\") || contentType.startsWith(\"video/\")) {\n return true;\n }\n\n const extension = inferExtensionFromInput(input);\n\n return (\n AUDIO_FILE_EXTENSIONS.has(extension) || VIDEO_FILE_EXTENSIONS.has(extension)\n );\n};\n\nconst officeExtractorSupports = (input: RAGFileExtractionInput) => {\n const extension = inferExtensionFromInput(input);\n\n return OFFICE_FILE_EXTENSIONS.has(extension);\n};\n\nconst legacyExtractorSupports = (input: RAGFileExtractionInput) =>\n LEGACY_DOCUMENT_FILE_EXTENSIONS.has(inferExtensionFromInput(input));\n\nconst epubExtractorSupports = (input: RAGFileExtractionInput) =>\n EPUB_FILE_EXTENSIONS.has(inferExtensionFromInput(input));\n\nconst emailExtractorSupports = (input: RAGFileExtractionInput) => {\n const contentType = (input.contentType ?? \"\").toLowerCase();\n if (\n contentType.includes(\"message/rfc822\") ||\n contentType.includes(\"application/eml\") ||\n contentType.includes(\"application/emlx\") ||\n contentType.includes(\"application/x-emlx\") ||\n contentType.includes(\"application/mbox\") ||\n contentType.includes(\"application/x-mbox\")\n ) {\n return true;\n }\n\n const extension = inferExtensionFromInput(input);\n if (EMAIL_FILE_EXTENSIONS.has(extension)) {\n return true;\n }\n\n if (\n parseMaildirMetadata(input.source ?? input.path ?? input.name) &&\n isLikelyRawEmailData(decodeUtf8(input.data))\n ) {\n return true;\n }\n\n return false;\n};\n\nconst mailboxContainerExtractorSupports = (input: RAGFileExtractionInput) => {\n const extension = inferExtensionFromInput(input);\n return MAILBOX_CONTAINER_FILE_EXTENSIONS.has(extension);\n};\n\nconst imageExtractorSupports = (input: RAGFileExtractionInput) => {\n const contentType = (input.contentType ?? \"\").toLowerCase();\n if (contentType.startsWith(\"image/\")) {\n return true;\n }\n\n return IMAGE_FILE_EXTENSIONS.has(inferExtensionFromInput(input));\n};\n\nconst archiveExtractorSupports = (input: RAGFileExtractionInput) => {\n const contentType = (input.contentType ?? \"\").toLowerCase();\n if (\n contentType.includes(\"zip\") ||\n contentType.includes(\"tar\") ||\n contentType.includes(\"gzip\") ||\n contentType.includes(\"x-gzip\")\n ) {\n return true;\n }\n\n return ARCHIVE_FILE_EXTENSIONS.has(inferExtensionFromInput(input));\n};\n\nexport const createBuiltinArchiveExpander = (): RAGArchiveExpander => ({\n name: \"builtin_archive\",\n expand: (input) => {\n const extension = inferExtensionFromInput(input);\n if (isZipData(input.data) || extension === \".zip\") {\n return {\n entries: unzipEntries(input.data),\n metadata: { archiveType: \"zip\" },\n };\n }\n\n if (TAR_FILE_EXTENSIONS.has(extension)) {\n return {\n entries: untarEntries(input.data),\n metadata: { archiveType: \"tar\" },\n };\n }\n\n if (GZIP_FILE_EXTENSIONS.has(extension)) {\n return {\n entries: decodeGzipEntries(input.data, input),\n metadata: {\n archiveType:\n extension === \".tgz\" ||\n (input.name ?? input.path ?? \"\").toLowerCase().endsWith(\".tar.gz\")\n ? \"tgz\"\n : \"gzip\",\n },\n };\n }\n\n throw new Error(\n `Builtin archive expander does not support ${inferNameFromInput(input)}`,\n );\n },\n});\nexport const createEmailExtractor = (): RAGFileExtractor => ({\n name: \"absolute_email\",\n supports: emailExtractorSupports,\n extract: async (input) => {\n const source =\n input.source ??\n input.path ??\n input.name ??\n `${slugify(input.title ?? DEFAULT_BINARY_NAME)}.eml`;\n const extension = inferExtensionFromInput(input);\n const emlx =\n extension === \".emlx\" ? decodeEmlxMessageData(input.data) : undefined;\n const raw = emlx?.raw ?? decodeLatin1(input.data);\n if (extension === \".emlx\") {\n return extractEmailDocumentsFromRawMessage(input, raw, {\n metadata: {\n emailMailboxContainerSource: source,\n emailMailboxFormat: \"emlx\",\n emailMailboxMessageCount: 1,\n emailMailboxMessageIndex: 0,\n emailMailboxMessageOrdinal: 1,\n ...(typeof emlx?.messageByteLength === \"number\"\n ? {\n emailMailboxMessageByteLength: emlx.messageByteLength,\n }\n : {}),\n ...(emlx?.hasTrailingMetadata\n ? { emailMailboxHasTrailingMetadata: true }\n : {}),\n },\n source,\n });\n }\n if (extension === \".mbox\" || extension === \".mbx\") {\n const messages = splitMboxMessages(raw);\n const documents = await Promise.all(\n messages.map((messageRaw, index) =>\n extractEmailDocumentsFromRawMessage(input, messageRaw, {\n metadata: {\n emailMailboxContainerSource: source,\n emailMailboxFormat: \"mbox\",\n emailMailboxMessageCount: messages.length,\n emailMailboxMessageIndex: index,\n emailMailboxMessageOrdinal: index + 1,\n },\n source: `${source}#messages/${index + 1}`,\n }),\n ),\n );\n\n return documents.flat();\n }\n\n return extractEmailDocumentsFromRawMessage(input, raw, { source });\n },\n});\nexport const createMailboxContainerExtractor = (): RAGFileExtractor => ({\n name: \"absolute_mailbox_container\",\n supports: mailboxContainerExtractorSupports,\n extract: async (input) => {\n const extension = inferExtensionFromInput(input);\n const format = extension.replace(/^\\./, \"\") || \"mailbox\";\n const source =\n input.source ??\n input.path ??\n input.name ??\n `${slugify(input.title ?? DEFAULT_BINARY_NAME)}${extension || \".mailbox\"}`;\n const raw = extractOrderedPrintableStrings(input.data);\n\n if (!raw) {\n throw new Error(\n `AbsoluteJS could not extract readable text from ${inferNameFromInput(input)}`,\n );\n }\n\n const messages = splitMailboxContainerMessages(raw);\n if (messages.length > 0) {\n const documents = await Promise.all(\n messages.map(async (message, index) => {\n const messageSource = `${source}#messages/${index + 1}`;\n const extractedDocuments = await extractEmailDocumentsFromRawMessage(\n input,\n message.raw,\n {\n metadata: {\n ...message.metadata,\n emailMailboxContainerSource: source,\n emailMailboxFormat: format,\n emailMailboxMessageCount: messages.length,\n emailMailboxMessageIndex: index,\n emailMailboxMessageOrdinal: index + 1,\n },\n source: messageSource,\n },\n );\n if (!message.attachments || message.attachments.length === 0) {\n return extractedDocuments;\n }\n\n const embeddedReferences = extractMailboxRecoveredEmbeddedReferences(\n message.raw,\n );\n const messageDocument = extractedDocuments.find(\n (document) => document.metadata?.emailKind === \"message\",\n );\n const baseMetadata = {\n ...(messageDocument?.metadata ?? {}),\n emailMailboxContainerSource: source,\n emailMailboxFormat: format,\n emailMailboxMessageCount: messages.length,\n emailMailboxMessageIndex: index,\n emailMailboxMessageOrdinal: index + 1,\n };\n const mailboxAttachmentDocuments = await Promise.all(\n message.attachments.map(async (attachment, attachmentIndex) =>\n extractRAGFileDocuments({\n chunking: input.chunking,\n contentType: attachment.contentType,\n data: attachment.data,\n extractorRegistry: input.extractorRegistry,\n format:\n inferFormatFromContentType(attachment.contentType ?? null) ??\n inferFormatFromName(attachment.fileName),\n metadata: {\n ...baseMetadata,\n attachmentIndex,\n attachmentContentId: attachment.contentId,\n attachmentContentLocation: attachment.contentLocation,\n attachmentDisposition:\n attachment.dispositionType ?? \"attachment\",\n attachmentEmbeddedReferenceMatched:\n (attachment.contentId\n ? embeddedReferences.contentIds.includes(\n attachment.contentId,\n )\n : false) ||\n (attachment.contentLocation\n ? embeddedReferences.contentLocations.includes(\n attachment.contentLocation,\n ) || message.raw.includes(attachment.contentLocation)\n : false),\n attachmentName: attachment.fileName,\n attachmentRecoveredFromMailboxContainer: true,\n emailAttachmentRole: attachment.role,\n emailAttachmentSource: `${messageSource}#attachments/${attachment.fileName}`,\n emailKind: \"attachment\",\n },\n name: attachment.fileName,\n source: `${messageSource}#attachments/${attachment.fileName}`,\n title: messageDocument?.title\n ? `${messageDocument.title} · ${attachment.fileName}`\n : attachment.fileName,\n }),\n ),\n );\n\n return [...extractedDocuments, ...mailboxAttachmentDocuments.flat()];\n }),\n );\n\n return documents.flat();\n }\n\n return {\n chunking: input.chunking,\n contentType: input.contentType,\n format: \"text\",\n metadata: {\n ...(input.metadata ?? {}),\n emailMailboxContainerSource: source,\n emailMailboxFormat: format,\n fileKind: \"email_mailbox\",\n },\n source,\n text: raw,\n title: input.title,\n };\n },\n});\nexport const createEPUBExtractor = (): RAGFileExtractor => ({\n name: \"absolute_epub\",\n supports: epubExtractorSupports,\n extract: (input) => {\n const text = epubText(unzipEntries(input.data));\n if (!text) {\n throw new Error(\n `AbsoluteJS could not extract readable text from ${inferNameFromInput(input)}`,\n );\n }\n\n return {\n chunking: input.chunking,\n contentType: input.contentType,\n format: \"text\",\n metadata: {\n ...(input.metadata ?? {}),\n fileKind: \"epub\",\n },\n source:\n input.source ??\n input.path ??\n input.name ??\n `${slugify(input.title ?? DEFAULT_BINARY_NAME)}.epub`,\n text,\n title: input.title,\n };\n },\n});\nexport const createLegacyDocumentExtractor = (): RAGFileExtractor => ({\n name: \"absolute_legacy_document\",\n supports: legacyExtractorSupports,\n extract: (input) => {\n const extension = inferExtensionFromInput(input);\n const raw =\n extension === \".rtf\"\n ? stripRTF(Buffer.from(input.data).toString(\"latin1\"))\n : extractPrintableStrings(input.data);\n\n if (!raw) {\n throw new Error(\n `AbsoluteJS could not extract readable text from ${inferNameFromInput(input)}`,\n );\n }\n\n const fileKind =\n extension === \".msg\"\n ? \"email\"\n : extension === \".rtf\"\n ? \"rtf\"\n : \"legacy_office\";\n\n return {\n chunking: input.chunking,\n contentType: input.contentType,\n format: \"text\",\n metadata: {\n ...(input.metadata ?? {}),\n fileKind,\n legacyFormat: extension.replace(/^\\./, \"\"),\n },\n source:\n input.source ??\n input.path ??\n input.name ??\n `${slugify(input.title ?? DEFAULT_BINARY_NAME)}${extension || \".legacy\"}`,\n text: raw,\n title: input.title,\n };\n },\n});\nexport const createOfficeDocumentExtractor = (): RAGFileExtractor => ({\n name: \"absolute_office_document\",\n supports: officeExtractorSupports,\n extract: (input) => {\n const extension = inferExtensionFromInput(input);\n const entries = unzipEntries(input.data);\n let text = \"\";\n let officeMetadata: Record<string, unknown> = {};\n let structuredDocuments: RAGExtractedFileDocument[] = [];\n if (extension === \".docx\" || extension === \".odt\") {\n const officeBlocks = officeDocumentBlocks(entries);\n text = officeDocumentText(entries);\n officeMetadata = {\n officeBlocks,\n sectionCount: officeDocumentSectionCount(entries),\n };\n } else if (extension === \".xlsx\" || extension === \".ods\") {\n text = spreadsheetText(entries);\n const sheets = spreadsheetSheetTexts(entries);\n const workbookLabel =\n input.title ??\n input.name ??\n input.path ??\n input.source ??\n DEFAULT_BINARY_NAME;\n officeMetadata = {\n sheetNames: spreadsheetSheetNames(entries),\n };\n structuredDocuments = sheets.map((sheet, index) => ({\n chunking: input.chunking,\n contentType: input.contentType,\n format: \"text\",\n metadata: {\n ...(input.metadata ?? {}),\n fileKind: \"office\",\n ...officeMetadata,\n repeatedHeaderRowNumbers: sheet.repeatedHeaderRowNumbers,\n sheetColumnEnd: sheet.spreadsheetColumnEnd,\n sheetColumnStart: sheet.spreadsheetColumnStart,\n sheetHeaders: sheet.headers,\n sheetTableHeaders: sheet.sheetTableHeaders,\n sheetTableColumnRanges: sheet.sheetTableColumnRanges,\n sourceNativeKind: \"spreadsheet_sheet\",\n sheetIndex: index,\n sheetName: sheet.name,\n sheetRowCount: sheet.rowCount,\n sheetTableCount: sheet.tableCount,\n },\n source:\n input.source ??\n input.path ??\n input.name ??\n `${slugify(input.title ?? DEFAULT_BINARY_NAME)}${extension || \".office\"}`,\n text: normalizeWhitespace(\n `Spreadsheet workbook ${workbookLabel}. ` +\n `Worksheet ${index + 1}. ` +\n `Workbook sheet named ${sheet.name}. ` +\n `Sheet ${sheet.name} from spreadsheet workbook ${workbookLabel}.` +\n `\\n${sheet.text}`,\n ),\n title: input.title\n ? `${input.title} · Sheet ${sheet.name}`\n : `Sheet ${sheet.name}`,\n }));\n } else if (extension === \".pptx\" || extension === \".odp\") {\n text = presentationText(entries);\n const slides = presentationSlides(entries);\n officeMetadata = {\n slideCount: presentationSlideCount(entries),\n };\n structuredDocuments = slides.map((slide) => ({\n chunking: input.chunking,\n contentType: input.contentType,\n format: \"text\",\n metadata: {\n ...(input.metadata ?? {}),\n fileKind: \"office\",\n ...officeMetadata,\n ...(slide.slideBodyText\n ? { slideBodyText: slide.slideBodyText }\n : {}),\n ...(slide.notesText ? { slideNotesText: slide.notesText } : {}),\n ...(slide.slideTitle ? { slideTitle: slide.slideTitle } : {}),\n sourceNativeKind: \"presentation_slide\",\n slideIndex: slide.index,\n slideNumber: slide.index + 1,\n },\n source:\n input.source ??\n input.path ??\n input.name ??\n `${slugify(input.title ?? DEFAULT_BINARY_NAME)}${extension || \".office\"}`,\n text: normalizeWhitespace(\n `Presentation slide ${slide.index + 1} from ${\n input.title ?? input.name ?? input.path ?? DEFAULT_BINARY_NAME\n }.\\n${slide.text}`,\n ),\n title: input.title\n ? `${input.title} · Slide ${slide.index + 1}`\n : `Slide ${slide.index + 1}`,\n }));\n }\n\n if (!text) {\n throw new Error(\n `AbsoluteJS could not extract readable text from ${inferNameFromInput(input)}`,\n );\n }\n\n const summaryDocument: RAGExtractedFileDocument = {\n chunking: input.chunking,\n contentType: input.contentType,\n format: \"text\",\n metadata: {\n ...(input.metadata ?? {}),\n fileKind: \"office\",\n ...officeMetadata,\n },\n source:\n input.source ??\n input.path ??\n input.name ??\n `${slugify(input.title ?? DEFAULT_BINARY_NAME)}${extension || \".office\"}`,\n text,\n title: input.title,\n };\n\n return [summaryDocument, ...structuredDocuments];\n },\n});\nexport const createRAGArchiveExpander = (expander: RAGArchiveExpander) =>\n expander;\nexport const createRAGFileExtractor = (extractor: RAGFileExtractor) =>\n extractor;\nexport const createRAGFileExtractorRegistry = (\n registry: RAGFileExtractorRegistryLike,\n) => registry;\nexport const createRAGChunkingRegistry = (registry: RAGChunkingRegistryLike) =>\n registry;\nexport const createRAGImageOCRExtractor = (\n provider: RAGOCRProvider,\n): RAGFileExtractor => ({\n name: `absolute_image_ocr:${provider.name}`,\n supports: imageExtractorSupports,\n extract: async (input) => {\n const result = await provider.extractText(input);\n const summary = buildOCRSummaryText(result);\n\n return {\n chunking: input.chunking,\n contentType: input.contentType,\n format: \"text\",\n metadata: {\n ...(input.metadata ?? {}),\n ...ocrMetadata(result),\n ocrLowConfidenceRegionCount: summary.lowConfidenceRegionCount,\n ocrStrongRegionCount: summary.strongRegionCount,\n ocrSummaryConfidenceThreshold: summary.summaryConfidenceThreshold,\n ocrSummaryUsedStrongRegionsOnly: summary.usedStrongRegionsOnly,\n fileKind: \"image\",\n sourceNativeKind: \"image_ocr\",\n },\n source:\n input.source ??\n input.path ??\n input.name ??\n `${slugify(input.title ?? DEFAULT_BINARY_NAME)}.image.txt`,\n text: summary.text,\n title: result.title ?? input.title,\n };\n },\n});\nexport const createRAGMediaFileExtractor = (\n transcriber: RAGMediaTranscriber,\n): RAGFileExtractor => ({\n name: `absolute_media:${transcriber.name}`,\n supports: mediaExtractorSupports,\n extract: async (input) => {\n const result = await transcriber.transcribe(input);\n const rawSegments = sortMediaTranscriptSegments(\n (result.segments ?? [])\n .filter((segment): segment is RAGMediaTranscriptSegmentWithText => {\n if (!segment || typeof segment !== \"object\") {\n return false;\n }\n\n return normalizeWhitespace(segment.text ?? \"\").length > 0;\n })\n .map(normalizeMediaSegment),\n );\n const segmentGroups = groupTranscriptSegments(rawSegments);\n const source =\n input.source ??\n input.path ??\n input.name ??\n `${slugify(input.title ?? DEFAULT_BINARY_NAME)}.media.txt`;\n const baseDocumentId = slugify(\n source || input.title || input.name || input.path || DEFAULT_BINARY_NAME,\n );\n const segmentCount = rawSegments.length;\n const mediaDurationMs = rawSegments.reduce<number | undefined>(\n (max, segment) => {\n const endMs =\n typeof segment.endMs === \"number\" ? segment.endMs : undefined;\n if (typeof endMs !== \"number\") {\n return max;\n }\n return typeof max === \"number\" ? Math.max(max, endMs) : endMs;\n },\n undefined,\n );\n const mediaSpeakers = [\n ...new Set(\n rawSegments\n .map((segment) => normalizeMediaSpeaker(segment.speaker))\n .filter((value): value is string => typeof value === \"string\"),\n ),\n ];\n const segmentDocuments: RAGExtractedFileDocument[] = [];\n let previousGroupEndMs: number | undefined;\n for (const [index, segmentGroup] of segmentGroups.entries()) {\n const { endMs, startMs } = buildMediaTimestampBoundary(\n segmentGroup.segments,\n );\n const groupText = normalizeWhitespace(\n segmentGroup.segments\n .map((segment) => normalizeWhitespace(segment.text ?? \"\"))\n .filter((value) => value.length > 0)\n .join(\" \"),\n );\n if (!groupText) {\n continue;\n }\n\n const mediaSegmentStartMs = startMs;\n const mediaSegmentEndMs = endMs;\n const startLabel = formatMediaTimestampForIngest(startMs);\n const endLabel = formatMediaTimestampForIngest(endMs);\n const mediaKind =\n typeof result.metadata?.mediaKind === \"string\"\n ? result.metadata.mediaKind\n : \"media\";\n const mediaSegmentGapFromPreviousMs = buildMediaSegmentGapFromPrevious(\n startMs,\n previousGroupEndMs,\n );\n const nextSegmentGroup = segmentGroups[index + 1];\n const nextSegmentGroupStartMs = nextSegmentGroup\n ? buildMediaTimestampBoundary(nextSegmentGroup.segments).startMs\n : undefined;\n const mediaSegmentGapToNextMs = buildMediaSegmentGapToNext(\n endMs,\n nextSegmentGroupStartMs,\n );\n previousGroupEndMs = endMs;\n const mediaSegmentGroupDurationMs =\n typeof endMs === \"number\" &&\n typeof startMs === \"number\" &&\n Number.isFinite(endMs) &&\n Number.isFinite(startMs) &&\n endMs >= startMs\n ? endMs - startMs\n : undefined;\n\n segmentDocuments.push({\n chunking: input.chunking,\n contentType: input.contentType,\n format: \"text\",\n id: `${baseDocumentId}-segment-${String(index + 1).padStart(2, \"0\")}`,\n metadata: {\n ...(input.metadata ?? {}),\n ...(result.metadata ?? {}),\n fileKind: \"media\",\n sourceNativeKind: \"media_segment\",\n mediaDurationMs,\n mediaSegmentIndex: index,\n mediaSegmentStartMs,\n mediaSegmentEndMs,\n mediaSegmentCount: segmentCount,\n mediaSegmentGroupIndex: index,\n mediaSegmentGroupSize: segmentGroup.segments.length,\n mediaSegmentGroupSpeaker: segmentGroup.speaker,\n mediaChannel: segmentGroup.channel,\n mediaSegmentGroupDurationMs,\n mediaSegmentGapFromPreviousMs,\n mediaSegmentGapToNextMs,\n mediaSegmentGroupStartMs: startMs,\n mediaSegmentGroupEndMs: endMs,\n mediaSegments: segmentGroup.segments,\n startMs: mediaSegmentStartMs,\n endMs: mediaSegmentEndMs,\n ...(mediaSpeakers.length > 0\n ? {\n mediaSpeakerCount: mediaSpeakers.length,\n mediaSpeakers,\n }\n : {}),\n speaker: segmentGroup.speaker,\n },\n source,\n text: normalizeWhitespace(\n `${mediaKind} transcript segment${\n startLabel\n ? ` at timestamp ${startLabel}${\n endLabel ? ` to ${endLabel}` : \"\"\n }`\n : \"\"\n } from ${\n input.title ?? input.name ?? input.path ?? DEFAULT_BINARY_NAME\n }. ` +\n `${mediaKind} timestamp evidence${\n startLabel\n ? ` ${startLabel}${endLabel ? ` to ${endLabel}` : \"\"}`\n : \"\"\n }.` +\n `\\n${groupText}`,\n ),\n title: input.title\n ? `${input.title} · ${\n mediaKind[0]?.toUpperCase() + mediaKind.slice(1)\n } segment ${index + 1}`\n : `${mediaKind[0]?.toUpperCase() + mediaKind.slice(1)} segment ${index + 1}`,\n });\n }\n\n const summaryDocument: RAGExtractedFileDocument = {\n chunking: input.chunking,\n contentType: input.contentType,\n format: \"text\",\n id: baseDocumentId,\n metadata: {\n ...(input.metadata ?? {}),\n ...(result.metadata ?? {}),\n fileKind: \"media\",\n mediaDurationMs,\n mediaSegmentCount: segmentCount,\n mediaSegments: rawSegments,\n ...(mediaSpeakers.length > 0\n ? {\n mediaSpeakerCount: mediaSpeakers.length,\n mediaSpeakers,\n }\n : {}),\n },\n source,\n text: result.text,\n title: result.title ?? input.title,\n };\n\n return [summaryDocument, ...segmentDocuments];\n },\n});\nexport const createRAGMediaTranscriber = (transcriber: RAGMediaTranscriber) =>\n transcriber;\nexport const createRAGOCRProvider = (provider: RAGOCRProvider) => provider;\nexport const createTextFileExtractor = (): RAGFileExtractor => ({\n name: \"absolute_text\",\n supports: textExtractorSupports,\n extract: (input) => {\n const format =\n input.format ??\n inferFormatFromContentType(input.contentType ?? null) ??\n inferFormatFromName(\n input.path ?? input.source ?? input.name ?? input.title,\n );\n const text = Buffer.from(input.data).toString(\"utf8\");\n\n validateStructuredTextInput(text, format);\n\n return {\n chunking: input.chunking,\n contentType: input.contentType,\n format,\n metadata: input.metadata,\n source: input.source ?? input.path ?? input.name,\n text,\n title: input.title,\n };\n },\n});\n\nconst expandArchiveEntry = async (\n entry: RAGArchiveEntry,\n archiveInput: RAGFileExtractionInput,\n extractors?: RAGFileExtractor[],\n registry?: RAGFileExtractorRegistryLike,\n) => {\n const parentArchiveLineage = Array.isArray(\n archiveInput.metadata?.archiveLineage,\n )\n ? archiveInput.metadata.archiveLineage.filter(\n (value): value is string =>\n typeof value === \"string\" && value.trim().length > 0,\n )\n : [];\n const entryArchiveLineage = entry.path\n .split(/[\\\\/]/)\n .map((segment) => normalizeWhitespace(segment))\n .filter(Boolean);\n const archiveLineage = [...parentArchiveLineage, ...entryArchiveLineage];\n const parentArchivePath =\n typeof archiveInput.metadata?.archivePath === \"string\" &&\n archiveInput.metadata.archivePath.trim().length > 0\n ? archiveInput.metadata.archivePath.trim()\n : undefined;\n const archiveFullPath = parentArchivePath\n ? `${parentArchivePath}!${entry.path}`\n : entry.path;\n const archiveRootName =\n (typeof archiveInput.metadata?.archiveRootName === \"string\" &&\n archiveInput.metadata.archiveRootName.trim().length > 0\n ? archiveInput.metadata.archiveRootName.trim()\n : undefined) ??\n archiveInput.name ??\n archiveInput.path?.split(/[/\\\\]/).pop() ??\n archiveInput.source;\n const archiveRootSource =\n (typeof archiveInput.metadata?.archiveRootSource === \"string\" &&\n archiveInput.metadata.archiveRootSource.trim().length > 0\n ? archiveInput.metadata.archiveRootSource.trim()\n : undefined) ??\n archiveInput.source ??\n archiveInput.path ??\n archiveInput.name;\n const documents = await extractRAGFileDocuments(\n {\n chunking: archiveInput.chunking,\n contentType: entry.contentType,\n data: entry.data,\n extractorRegistry: archiveInput.extractorRegistry,\n format: entry.format,\n metadata: {\n ...(archiveInput.metadata ?? {}),\n ...(entry.metadata ?? {}),\n archiveEntryName: basename(entry.path),\n archiveParentName:\n archiveInput.name ??\n archiveInput.path?.split(/[/\\\\]/).pop() ??\n archiveInput.source,\n archiveParentSource:\n archiveInput.source ?? archiveInput.path ?? archiveInput.name,\n archiveContainerPath: parentArchivePath,\n archiveDepth: archiveLineage.length,\n archiveFullPath,\n archiveLineage,\n archivePath: entry.path,\n archiveRootName,\n archiveRootSource,\n archiveNestedDepth: parentArchiveLineage.length + 1,\n fileKind: \"archive_entry\",\n },\n name: basename(entry.path),\n source:\n archiveInput.source && !archiveInput.source.startsWith(\"http\")\n ? `${archiveInput.source}#${entry.path}`\n : entry.path,\n title: basename(entry.path),\n },\n extractors,\n registry,\n );\n\n return documents;\n};\n\nexport const createPDFFileExtractor = (): RAGFileExtractor => ({\n name: \"absolute_pdf\",\n supports: pdfExtractorSupports,\n extract: (input) => {\n const extracted = extractNativePDFText(input.data);\n if (!extracted.text) {\n throw new Error(\n \"AbsoluteJS could not extract readable text from this PDF. Supply a custom extractor for scanned or image-only PDFs.\",\n );\n }\n\n return {\n chunking: input.chunking,\n contentType: input.contentType ?? \"application/pdf\",\n format: \"text\",\n metadata: {\n ...(input.metadata ?? {}),\n fileKind: \"pdf\",\n pageCount: extracted.pageCount,\n pdfEvidenceMode: \"native\",\n pdfEvidenceOrigin: \"native\",\n pdfTextBlockCount: extracted.textBlockCount,\n pdfTextBlocks: extracted.textBlocks,\n },\n source:\n input.source ??\n input.path ??\n input.name ??\n `${slugify(input.title ?? DEFAULT_BINARY_NAME)}.pdf`,\n text: extracted.text,\n title: input.title,\n };\n },\n});\nexport const createRAGArchiveFileExtractor = (\n expander: RAGArchiveExpander,\n options: {\n entryExtractors?: RAGFileExtractor[];\n } = {},\n): RAGFileExtractor => ({\n name: `absolute_archive:${expander.name}`,\n supports: archiveExtractorSupports,\n extract: async (input) => {\n const expanded = await expander.expand(input);\n const documents = await Promise.all(\n expanded.entries.map((entry) =>\n expandArchiveEntry(\n entry,\n input,\n options.entryExtractors ?? DEFAULT_FILE_EXTRACTORS,\n ),\n ),\n );\n\n return documents.flat().map((document) => ({\n ...document,\n metadata: {\n ...(expanded.metadata ?? {}),\n ...(document.metadata ?? {}),\n fileKind: \"archive\",\n },\n }));\n },\n});\nexport const createRAGPDFOCRExtractor = (\n options: RAGPDFOCRExtractorOptions,\n): RAGFileExtractor => ({\n name: `absolute_pdf_ocr:${options.provider.name}`,\n supports: pdfExtractorSupports,\n extract: async (input) => {\n const extracted = extractNativePDFText(input.data);\n const nativeText = extracted.text;\n const minLength = options.minExtractedTextLength ?? 80;\n const shouldUseNativeText =\n !options.alwaysOCR && nativeText.length >= minLength;\n const shouldUseHybridText =\n !options.alwaysOCR &&\n nativeText.length > 0 &&\n nativeText.length < minLength;\n\n if (shouldUseNativeText) {\n return {\n chunking: input.chunking,\n contentType: input.contentType ?? \"application/pdf\",\n format: \"text\",\n metadata: {\n ...(input.metadata ?? {}),\n fileKind: \"pdf\",\n pageCount: extracted.pageCount,\n pdfEvidenceMode: \"native\",\n pdfEvidenceOrigin: \"native\",\n pdfTextBlockCount: extracted.textBlockCount,\n pdfTextBlocks: extracted.textBlocks,\n pdfTextMode: \"native\",\n },\n source:\n input.source ??\n input.path ??\n input.name ??\n `${slugify(input.title ?? DEFAULT_BINARY_NAME)}.pdf`,\n text: nativeText,\n title: input.title,\n };\n }\n\n const ocr = await options.provider.extractText({\n ...input,\n contentType: input.contentType ?? \"application/pdf\",\n });\n const summary = buildOCRSummaryText(ocr);\n const baseMetadata = {\n ...ocrMetadata(ocr),\n ocrLowConfidenceRegionCount: summary.lowConfidenceRegionCount,\n ocrStrongRegionCount: summary.strongRegionCount,\n ocrSummaryConfidenceThreshold: summary.summaryConfidenceThreshold,\n ocrSummaryUsedStrongRegionsOnly: summary.usedStrongRegionsOnly,\n fileKind: \"pdf\",\n pageCount: extracted.pageCount,\n pdfEvidenceMode: \"ocr\",\n pdfEvidenceOrigin: \"ocr\",\n pdfTextMode: \"ocr\",\n };\n\n if (shouldUseHybridText) {\n const hybridMetadata = {\n ...(input.metadata ?? {}),\n ...baseMetadata,\n pageCount: extracted.pageCount,\n pdfEvidenceMode: \"hybrid\",\n pdfEvidenceOrigin: \"native\",\n pdfEvidenceSupplement: \"ocr\",\n pdfHybridOCRSupplement: true,\n pdfNativeTextBlockCount: extracted.textBlockCount,\n pdfNativeTextLength: nativeText.length,\n pdfOCRFallbackReason: \"native_below_min_length\",\n pdfOCRTextLength: summary.text.length,\n pdfTextBlockCount: extracted.textBlockCount,\n pdfTextBlocks: extracted.textBlocks,\n pdfTextMode: \"hybrid\",\n };\n const hybridDocument: RAGExtractedFileDocument = {\n chunking: input.chunking,\n contentType: input.contentType ?? \"application/pdf\",\n format: \"text\",\n metadata: hybridMetadata,\n source:\n input.source ??\n input.path ??\n input.name ??\n `${slugify(input.title ?? DEFAULT_BINARY_NAME)}.pdf`,\n text: nativeText,\n title: input.title,\n };\n const pageDocuments = ocrPageDocuments(ocr, input, baseMetadata);\n const regionDocuments = ocrRegionDocuments(ocr, input, baseMetadata);\n\n return [hybridDocument, ...pageDocuments, ...regionDocuments];\n }\n\n const summaryDocument: RAGExtractedFileDocument = {\n chunking: input.chunking,\n contentType: input.contentType ?? \"application/pdf\",\n format: \"text\",\n metadata: {\n ...(input.metadata ?? {}),\n ...baseMetadata,\n },\n source:\n input.source ??\n input.path ??\n input.name ??\n `${slugify(input.title ?? DEFAULT_BINARY_NAME)}.pdf`,\n text: summary.text,\n title: ocr.title ?? input.title,\n };\n const pageDocuments = ocrPageDocuments(ocr, input, baseMetadata);\n const regionDocuments = ocrRegionDocuments(ocr, input, baseMetadata);\n\n return [summaryDocument, ...pageDocuments, ...regionDocuments];\n },\n});\n\nconst DEFAULT_FILE_EXTRACTORS = [\n createOfficeDocumentExtractor(),\n createMailboxContainerExtractor(),\n createLegacyDocumentExtractor(),\n createEPUBExtractor(),\n createEmailExtractor(),\n createRAGArchiveFileExtractor(createBuiltinArchiveExpander()),\n createPDFFileExtractor(),\n createTextFileExtractor(),\n] satisfies RAGFileExtractor[];\n\nconst resolveExtractorRegistry = (\n registry?: RAGFileExtractorRegistryLike,\n): {\n defaultOrder: \"registry_first\" | \"defaults_first\";\n includeDefaults: boolean;\n registrations: RAGFileExtractorRegistration[];\n} => {\n if (!registry) {\n return {\n defaultOrder: \"registry_first\",\n includeDefaults: true,\n registrations: [],\n };\n }\n\n if (Array.isArray(registry)) {\n return {\n defaultOrder: \"registry_first\",\n includeDefaults: true,\n registrations: registry,\n };\n }\n\n return {\n defaultOrder: registry.defaultOrder ?? \"registry_first\",\n includeDefaults: registry.includeDefaults ?? true,\n registrations: registry.registrations,\n };\n};\n\nconst createExtractorRegistryInput = (\n input: RAGFileExtractionInput,\n): RAGFileExtractorRegistryInput => ({\n ...input,\n inferredContentType: input.contentType ?? null,\n inferredExtension: inferExtensionFromInput(input) || null,\n inferredFormat:\n input.format ??\n inferFormatFromContentType(input.contentType ?? null) ??\n inferFormatFromName(\n input.path ?? input.source ?? input.name ?? input.title,\n ),\n});\n\nconst registrationMatches = async (\n registration: RAGFileExtractorRegistration,\n input: RAGFileExtractorRegistryInput,\n) => {\n const normalizedContentType = input.inferredContentType?.toLowerCase();\n const normalizedExtension = input.inferredExtension?.toLowerCase();\n const normalizedName = (\n input.path ??\n input.source ??\n input.name ??\n input.title ??\n \"\"\n ).toLowerCase();\n\n if (\n registration.contentTypes?.length &&\n !registration.contentTypes.some(\n (entry) => normalizedContentType === entry.toLowerCase(),\n )\n ) {\n return false;\n }\n\n if (\n registration.extensions?.length &&\n !registration.extensions.some(\n (entry) => normalizedExtension === entry.toLowerCase(),\n )\n ) {\n return false;\n }\n\n if (\n registration.formats?.length &&\n (!input.inferredFormat ||\n !registration.formats.includes(input.inferredFormat))\n ) {\n return false;\n }\n\n if (\n registration.names?.length &&\n !registration.names.some((entry) =>\n normalizedName.includes(entry.toLowerCase()),\n )\n ) {\n return false;\n }\n\n if (registration.match) {\n return registration.match(input);\n }\n\n return true;\n};\n\nconst dedupeExtractors = (extractors: RAGFileExtractor[]) => {\n const seen = new Set<string>();\n const ordered: RAGFileExtractor[] = [];\n\n for (const extractor of extractors) {\n if (seen.has(extractor.name)) {\n continue;\n }\n seen.add(extractor.name);\n ordered.push(extractor);\n }\n\n return ordered;\n};\n\ntype ResolvedFileExtractor = {\n extractor: RAGFileExtractor;\n registryMatchName?: string;\n};\n\nconst dedupeResolvedExtractors = (extractors: ResolvedFileExtractor[]) => {\n const seen = new Set<string>();\n const ordered: ResolvedFileExtractor[] = [];\n\n for (const entry of extractors) {\n if (seen.has(entry.extractor.name)) {\n continue;\n }\n seen.add(entry.extractor.name);\n ordered.push(entry);\n }\n\n return ordered;\n};\n\nconst resolveFileExtractors = async (\n input: RAGFileExtractionInput,\n extractors?: RAGFileExtractor[],\n registry?: RAGFileExtractorRegistryLike,\n): Promise<ResolvedFileExtractor[]> => {\n const explicit = extractors ?? [];\n const resolvedRegistry = resolveExtractorRegistry(registry);\n const registryInput = createExtractorRegistryInput(input);\n const matchedRegistrations = (\n await Promise.all(\n resolvedRegistry.registrations.map(async (registration) => ({\n matches: await registrationMatches(registration, registryInput),\n priority: registration.priority ?? 0,\n registration,\n })),\n )\n )\n .filter((entry) => entry.matches)\n .sort((left, right) => right.priority - left.priority)\n .map((entry) => ({\n extractor: entry.registration.extractor,\n registryMatchName:\n entry.registration.name ?? entry.registration.extractor.name,\n }));\n const defaults = resolvedRegistry.includeDefaults\n ? DEFAULT_FILE_EXTRACTORS.map((extractor) => ({ extractor }))\n : [];\n const explicitResolved = explicit.map((extractor) => ({ extractor }));\n\n return dedupeResolvedExtractors(\n resolvedRegistry.defaultOrder === \"defaults_first\"\n ? [...explicitResolved, ...defaults, ...matchedRegistrations]\n : [...explicitResolved, ...matchedRegistrations, ...defaults],\n );\n};\n\nconst applyExtractorDefaults = (\n document: RAGExtractedFileDocument,\n input: RAGFileExtractionInput,\n extractorName: string,\n registryMatchName?: string,\n): RAGIngestDocument => ({\n chunking: document.chunking ?? input.chunking,\n format:\n document.format ??\n input.format ??\n inferFormatFromContentType(\n document.contentType ?? input.contentType ?? null,\n ) ??\n inferFormatFromName(\n document.source ?? input.source ?? input.path ?? input.name,\n ),\n id: document.id,\n metadata: {\n ...(input.metadata ?? {}),\n ...(document.metadata ?? {}),\n contentType: document.contentType ?? input.contentType,\n extractor: document.extractor ?? extractorName,\n ...(registryMatchName ? { extractorRegistryMatch: registryMatchName } : {}),\n },\n source: document.source ?? input.source ?? input.path ?? input.name,\n text: document.text,\n title: document.title ?? input.title,\n});\n\nconst extractRAGFileDocuments = async (\n input: RAGFileExtractionInput,\n extractors?: RAGFileExtractor[],\n registry?: RAGFileExtractorRegistryLike,\n) => {\n for (const resolvedExtractor of await resolveFileExtractors(\n input,\n extractors,\n registry,\n )) {\n const { extractor, registryMatchName } = resolvedExtractor;\n if (!(await extractor.supports(input))) {\n continue;\n }\n\n const extracted = await extractor.extract(input);\n const documents = Array.isArray(extracted) ? extracted : [extracted];\n\n return documents.map((document) =>\n applyExtractorDefaults(\n document,\n input,\n extractor.name,\n registryMatchName,\n ),\n );\n }\n\n throw new Error(\n `No RAG file extractor matched ${inferNameFromInput(input)}. Register a custom extractor for this file type.`,\n );\n};\n\nconst getFirstExtractedDocument = (\n documents: RAGIngestDocument[],\n label: string,\n) => {\n const document = documents[0];\n if (!document) {\n throw new Error(`RAG extractor ${label} did not return a document`);\n }\n\n return document;\n};\n\nconst loadExtractedDocuments = async (\n input: RAGFileExtractionInput,\n extractors?: RAGFileExtractor[],\n registry?: RAGFileExtractorRegistryLike,\n) => extractRAGFileDocuments(input, extractors, registry);\n\nconst collectEmailThreadParticipants = (documents: RAGIngestDocument[]) => {\n const participants = new Set<string>();\n const participantAddresses = new Set<string>();\n const participantDisplayNames = new Set<string>();\n\n for (const document of documents) {\n const parsedParticipantAddresses = Array.isArray(\n document.metadata?.participantAddresses,\n )\n ? document.metadata.participantAddresses\n : [];\n for (const address of parsedParticipantAddresses) {\n if (typeof address === \"string\" && address.trim().length > 0) {\n participantAddresses.add(address.trim());\n participants.add(address.trim());\n }\n }\n const parsedParticipantDisplayNames = Array.isArray(\n document.metadata?.participantDisplayNames,\n )\n ? document.metadata.participantDisplayNames\n : [];\n for (const name of parsedParticipantDisplayNames) {\n if (typeof name === \"string\" && name.trim().length > 0) {\n participantDisplayNames.add(name.trim());\n }\n }\n\n const from = document.metadata?.from;\n if (typeof from === \"string\" && from.trim().length > 0) {\n participants.add(from.trim());\n }\n\n const to = document.metadata?.to;\n if (typeof to === \"string\" && to.trim().length > 0) {\n for (const recipient of to\n .split(\",\")\n .map((entry) => entry.trim())\n .filter(Boolean)) {\n participants.add(recipient);\n }\n }\n }\n\n return {\n participantAddresses: [...participantAddresses],\n participantDisplayNames: [...participantDisplayNames],\n participants: [...participants],\n };\n};\n\nconst reconcileLoadedEmailThreads = (documents: RAGIngestDocument[]) => {\n const messageDocuments = documents.filter(\n (document) => document.metadata?.emailKind === \"message\",\n );\n if (messageDocuments.length === 0) {\n return documents;\n }\n\n const parent = messageDocuments.map((_, index) => index);\n const find = (index: number): number => {\n let current = index;\n while (parent[current] !== current) {\n parent[current] = parent[parent[current]!]!;\n current = parent[current]!;\n }\n return current;\n };\n const union = (left: number, right: number) => {\n const leftRoot = find(left);\n const rightRoot = find(right);\n if (leftRoot !== rightRoot) {\n parent[rightRoot] = leftRoot;\n }\n };\n const messageIndexById = new Map<string, number>();\n const messageIndexBySource = new Map<string, number>();\n const messageIndexesByThreadKey = new Map<string, number[]>();\n for (const [index, document] of messageDocuments.entries()) {\n const messageId = document.metadata?.messageId;\n if (typeof messageId === \"string\" && messageId.length > 0) {\n messageIndexById.set(messageId, index);\n }\n if (typeof document.source === \"string\" && document.source.length > 0) {\n messageIndexBySource.set(document.source, index);\n }\n const threadKey = document.metadata?.threadKey;\n if (typeof threadKey === \"string\" && threadKey.trim().length > 0) {\n const normalizedThreadKey = threadKey.trim();\n const current = messageIndexesByThreadKey.get(normalizedThreadKey);\n if (current) {\n current.push(index);\n } else {\n messageIndexesByThreadKey.set(normalizedThreadKey, [index]);\n }\n }\n }\n\n for (const indexes of messageIndexesByThreadKey.values()) {\n for (let index = 1; index < indexes.length; index += 1) {\n union(indexes[0]!, indexes[index]!);\n }\n }\n for (const [index, document] of messageDocuments.entries()) {\n const inReplyTo = document.metadata?.inReplyTo;\n if (typeof inReplyTo === \"string\" && inReplyTo.length > 0) {\n const parentIndex = messageIndexById.get(inReplyTo);\n if (typeof parentIndex === \"number\") {\n union(index, parentIndex);\n }\n }\n const threadMessageIds = Array.isArray(document.metadata?.threadMessageIds)\n ? document.metadata.threadMessageIds\n : [];\n for (const relatedMessageId of threadMessageIds) {\n if (\n typeof relatedMessageId !== \"string\" ||\n relatedMessageId.length === 0\n ) {\n continue;\n }\n const relatedIndex = messageIndexById.get(relatedMessageId);\n if (typeof relatedIndex === \"number\") {\n union(index, relatedIndex);\n }\n }\n }\n\n const threadGroups = new Map<number, RAGIngestDocument[]>();\n for (const [index, document] of messageDocuments.entries()) {\n const component = find(index);\n const current = threadGroups.get(component);\n if (current) {\n current.push(document);\n } else {\n threadGroups.set(component, [document]);\n }\n }\n for (const document of documents) {\n if (document.metadata?.emailKind === \"message\") {\n continue;\n }\n const messageSource = document.metadata?.emailMessageSource;\n if (typeof messageSource === \"string\" && messageSource.length > 0) {\n const messageIndex = messageIndexBySource.get(messageSource);\n if (typeof messageIndex === \"number\") {\n const component = find(messageIndex);\n const current = threadGroups.get(component);\n if (current) {\n current.push(document);\n } else {\n threadGroups.set(component, [document]);\n }\n continue;\n }\n }\n\n const threadKey = document.metadata?.threadKey;\n if (typeof threadKey === \"string\" && threadKey.trim().length > 0) {\n const candidateIndexes = messageIndexesByThreadKey.get(threadKey.trim());\n const candidateIndex = candidateIndexes?.[0];\n if (typeof candidateIndex === \"number\") {\n const component = find(candidateIndex);\n const current = threadGroups.get(component);\n if (current) {\n current.push(document);\n } else {\n threadGroups.set(component, [document]);\n }\n }\n }\n }\n\n for (const [, threadDocuments] of threadGroups.entries()) {\n const componentMessages = threadDocuments.filter(\n (document) => document.metadata?.emailKind === \"message\",\n );\n if (componentMessages.length === 0) {\n continue;\n }\n const threadKey = (() => {\n const rootByReply = componentMessages.find(\n (document) =>\n typeof document.metadata?.inReplyTo !== \"string\" ||\n document.metadata.inReplyTo.length === 0,\n );\n const rootCandidate = rootByReply ?? componentMessages[0];\n return (\n (typeof rootCandidate?.metadata?.threadKey === \"string\" &&\n rootCandidate.metadata.threadKey.trim().length > 0\n ? rootCandidate.metadata.threadKey.trim()\n : undefined) ??\n componentMessages\n .map((document) => document.metadata?.threadKey)\n .find(\n (value): value is string =>\n typeof value === \"string\" && value.trim().length > 0,\n )\n ?.trim() ??\n \"email-thread\"\n );\n })();\n\n const knownThreadMessageIds: string[] = [];\n const seenKnownThreadMessageIds = new Set<string>();\n for (const document of threadDocuments) {\n const threadMessageIds = Array.isArray(\n document.metadata?.threadMessageIds,\n )\n ? document.metadata?.threadMessageIds\n : [];\n for (const messageId of threadMessageIds) {\n if (\n typeof messageId === \"string\" &&\n messageId.length > 0 &&\n !seenKnownThreadMessageIds.has(messageId)\n ) {\n seenKnownThreadMessageIds.add(messageId);\n knownThreadMessageIds.push(messageId);\n }\n }\n const messageId = document.metadata?.messageId;\n if (\n typeof messageId === \"string\" &&\n messageId.length > 0 &&\n !seenKnownThreadMessageIds.has(messageId)\n ) {\n seenKnownThreadMessageIds.add(messageId);\n knownThreadMessageIds.push(messageId);\n }\n }\n\n const loadedMessageIds = componentMessages\n .map((document) => document.metadata?.messageId)\n .filter(\n (value): value is string =>\n typeof value === \"string\" && value.length > 0,\n );\n const loadedMessageIdSet = new Set(loadedMessageIds);\n const loadedMessageSourceById = new Map<string, string>();\n for (const document of componentMessages) {\n const messageId = document.metadata?.messageId;\n if (\n typeof messageId === \"string\" &&\n messageId.length > 0 &&\n typeof document.source === \"string\" &&\n document.source.length > 0\n ) {\n loadedMessageSourceById.set(messageId, document.source);\n }\n }\n const replySiblingGroups = new Map<string, typeof componentMessages>();\n for (const document of componentMessages) {\n const inReplyTo = document.metadata?.inReplyTo;\n if (\n typeof inReplyTo !== \"string\" ||\n inReplyTo.length === 0 ||\n !loadedMessageIdSet.has(inReplyTo)\n ) {\n continue;\n }\n\n const current = replySiblingGroups.get(inReplyTo);\n if (current) {\n current.push(document);\n } else {\n replySiblingGroups.set(inReplyTo, [document]);\n }\n }\n const replySiblingMetadataByMessageId = new Map<\n string,\n {\n count: number;\n index: number;\n messageIds: string[];\n parentMessageId: string;\n sources: string[];\n }\n >();\n for (const [parentMessageId, siblings] of replySiblingGroups.entries()) {\n const orderedSiblings = [...siblings].sort((left, right) => {\n const leftSource = typeof left.source === \"string\" ? left.source : \"\";\n const rightSource =\n typeof right.source === \"string\" ? right.source : \"\";\n if (leftSource !== rightSource) {\n return leftSource.localeCompare(rightSource);\n }\n const leftMessageId =\n typeof left.metadata?.messageId === \"string\"\n ? left.metadata.messageId\n : \"\";\n const rightMessageId =\n typeof right.metadata?.messageId === \"string\"\n ? right.metadata.messageId\n : \"\";\n return leftMessageId.localeCompare(rightMessageId);\n });\n const siblingMessageIds = orderedSiblings\n .map((document) => document.metadata?.messageId)\n .filter(\n (value): value is string =>\n typeof value === \"string\" && value.length > 0,\n );\n const siblingSources = orderedSiblings\n .map((document) => document.source)\n .filter(\n (value): value is string =>\n typeof value === \"string\" && value.length > 0,\n );\n for (const [index, sibling] of orderedSiblings.entries()) {\n const messageId = sibling.metadata?.messageId;\n if (typeof messageId !== \"string\" || messageId.length === 0) {\n continue;\n }\n replySiblingMetadataByMessageId.set(messageId, {\n count: orderedSiblings.length,\n index,\n messageIds: siblingMessageIds,\n parentMessageId,\n sources: siblingSources,\n });\n }\n }\n\n const threadParticipants = collectEmailThreadParticipants(threadDocuments);\n const loadedMessageSources = messageDocuments\n .map((document) => document.source)\n .filter(\n (value): value is string =>\n typeof value === \"string\" && value.length > 0,\n );\n const loadedAttachmentCount = threadDocuments.filter(\n (document) => document.metadata?.emailKind === \"attachment\",\n ).length;\n const threadRootMessageId = (() => {\n const existingRoot = threadDocuments\n .map((document) => document.metadata?.threadRootMessageId)\n .find(\n (value): value is string =>\n typeof value === \"string\" && value.length > 0,\n );\n return existingRoot ?? loadedMessageIds[0];\n })();\n\n for (const document of threadDocuments) {\n const messageId =\n typeof document.metadata?.messageId === \"string\"\n ? document.metadata.messageId\n : undefined;\n const replySiblingMetadata = messageId\n ? replySiblingMetadataByMessageId.get(messageId)\n : undefined;\n document.metadata = {\n ...(document.metadata ?? {}),\n ...(replySiblingMetadata\n ? {\n emailReplySiblingCount: replySiblingMetadata.count,\n emailReplySiblingIndex: replySiblingMetadata.index,\n emailReplySiblingMessageIds: replySiblingMetadata.messageIds,\n emailReplySiblingOrdinal: replySiblingMetadata.index + 1,\n emailReplySiblingParentMessageId:\n replySiblingMetadata.parentMessageId,\n emailReplySiblingSources: replySiblingMetadata.sources,\n }\n : {}),\n threadKey,\n threadKnownMessageCount: knownThreadMessageIds.length,\n threadKnownMessageIds: knownThreadMessageIds,\n threadLoadedAttachmentCount: loadedAttachmentCount,\n threadLoadedMessageCount: loadedMessageIds.length,\n threadLoadedMessageIds: loadedMessageIds,\n threadLoadedMessageSources: loadedMessageSources,\n threadParticipantAddresses: threadParticipants.participantAddresses,\n threadParticipantDisplayNames:\n threadParticipants.participantDisplayNames,\n threadParticipants: threadParticipants.participants,\n threadRootMessageId,\n };\n\n const inReplyTo = document.metadata?.inReplyTo;\n if (\n typeof inReplyTo === \"string\" &&\n inReplyTo.length > 0 &&\n loadedMessageIdSet.has(inReplyTo)\n ) {\n document.metadata = {\n ...(document.metadata ?? {}),\n emailReplyParentLoaded: true,\n emailReplyParentMessageId: inReplyTo,\n emailReplyParentSource: loadedMessageSourceById.get(inReplyTo),\n };\n }\n }\n }\n\n return documents;\n};\n\nconst sentenceUnits = (text: string) => {\n const matches = text.match(/[^.!?\\n]+(?:[.!?]+|$)/g);\n if (!matches) {\n return [text];\n }\n\n return matches.map((entry) => entry.trim()).filter(Boolean);\n};\n\nconst paragraphUnits = (text: string) => {\n const paragraphs = text\n .split(/\\n\\n+/)\n .map((entry) => entry.trim())\n .filter(Boolean);\n\n return paragraphs.length > 0 ? paragraphs : sentenceUnits(text);\n};\n\nconst fixedUnits = (text: string, maxChunkLength: number) => {\n const units: string[] = [];\n let index = 0;\n while (index < text.length) {\n units.push(text.slice(index, index + maxChunkLength));\n index += maxChunkLength;\n }\n\n return units;\n};\n\nconst sourceAwareUnits = (\n document: RAGIngestDocument,\n format: RAGContentFormat,\n normalizedText: string,\n): StructuredChunkUnit[] => {\n const resolveStructuredUnits = (sections: StructuredChunkUnit[]) =>\n sections.length > 0\n ? sections\n : paragraphUnits(normalizedText).map((text) => ({ text }));\n\n switch (format) {\n case \"jsonl\": {\n const sections = jsonlStructureUnits(document.text);\n\n return resolveStructuredUnits(sections);\n }\n case \"tsv\": {\n const sections = tsvStructureUnits(document.text);\n\n return resolveStructuredUnits(sections);\n }\n case \"csv\": {\n const sections = csvStructureUnits(document.text);\n\n return resolveStructuredUnits(sections);\n }\n case \"xml\": {\n const sections = xmlStructureUnits(document.text);\n\n return resolveStructuredUnits(sections);\n }\n case \"yaml\": {\n const sections = yamlStructureUnits(document.text);\n\n return resolveStructuredUnits(sections);\n }\n case \"markdown\": {\n const sections = markdownStructureUnits(document.text);\n\n return resolveStructuredUnits(sections);\n }\n case \"html\": {\n const sections = htmlStructureUnits(document.text);\n\n return resolveStructuredUnits(sections);\n }\n case \"text\":\n default:\n if (document.metadata?.fileKind === \"office\") {\n const sections = officeNativeStructureUnits(document.metadata);\n if (sections.length > 0) {\n return sections;\n }\n }\n if (document.metadata?.fileKind === \"pdf\") {\n const sections = pdfNativeStructureUnits(document.metadata);\n if (sections.length > 0) {\n return sections;\n }\n }\n if (document.metadata?.sourceNativeKind === \"spreadsheet_sheet\") {\n return spreadsheetStructureUnits(normalizedText, document.metadata);\n }\n if (document.metadata?.sourceNativeKind === \"presentation_slide\") {\n return presentationStructureUnits(normalizedText, document.metadata);\n }\n if (document.metadata?.fileKind === \"email\") {\n const sections = emailStructureUnits(normalizedText, document.metadata);\n if (sections.length > 0) {\n return sections;\n }\n }\n if (\n document.source?.toLowerCase().endsWith(\".docx\") ||\n document.source?.toLowerCase().endsWith(\".odt\")\n ) {\n return officeHeadingStructureUnits(normalizedText);\n }\n if (isCodeLikeSource(document.source)) {\n return codeStructureUnits(document.text);\n }\n return paragraphUnits(normalizedText).map((text) => ({ text }));\n }\n};\n\n// The carry text prepended to the next chunk. Two cases used to return the\n// WHOLE chunk: an overlap of 0 (which must mean \"no carry\" — chunkSourceAwareUnit\n// passes 0, so every structure-aware chunk carried its full predecessor and the\n// document was embedded ~5x over), and a chunk shorter than the overlap (which\n// then got embedded twice in full).\nconst overlapTail = (value: string, overlap: number) => {\n if (overlap <= 0) {\n return \"\";\n }\n if (value.length <= overlap) {\n return value;\n }\n\n const candidate = value.slice(-overlap);\n const boundary = candidate.search(/[\\s,.;:!?-]/);\n\n return boundary > 0 ? candidate.slice(boundary).trim() : candidate.trim();\n};\n\nconst chunkFromUnits = (\n units: string[],\n maxChunkLength: number,\n chunkOverlap: number,\n minChunkLength: number,\n) => {\n const chunks: string[] = [];\n let current = \"\";\n const appendChunk = (chunk: string) => {\n chunks.push(chunk);\n };\n // Folding a runt chunk into its predecessor must not push that predecessor\n // past the limit — the structure-aware path already guards this, this one\n // did not. Unbounded, it also collapsed everything into a single chunk\n // whenever maxChunkLength was configured below minChunkLength (80), because\n // then EVERY chunk counts as small.\n const mergeSmallChunk = (merged: string[], chunk: string) => {\n const last = merged[merged.length - 1];\n if (last === undefined || chunk.length >= minChunkLength) {\n merged.push(chunk);\n\n return;\n }\n const candidate = normalizeWhitespace(`${last} ${chunk}`);\n if (candidate.length > maxChunkLength) {\n merged.push(chunk);\n\n return;\n }\n\n merged[merged.length - 1] = candidate;\n };\n const appendUnitToChunk = (trimmed: string) => {\n if (!current) {\n current = trimmed;\n\n return;\n }\n\n const separator =\n current.includes(\"\\n\") || trimmed.includes(\"\\n\") ? \"\\n\\n\" : \" \";\n const candidate = `${current}${separator}${trimmed}`;\n if (candidate.length <= maxChunkLength) {\n current = candidate;\n\n return;\n }\n\n appendChunk(current);\n const carry = overlapTail(current, chunkOverlap);\n current = carry.length > 0 ? `${carry} ${trimmed}`.trim() : trimmed;\n };\n\n // A unit can itself exceed maxChunkLength — `paragraphUnits` splits only on\n // BLANK lines, so a PDF/HTML/Office extraction that emits single-newline line\n // breaks is one enormous unit, and `appendUnitToChunk` accepted it whole when\n // `current` was empty. maxChunkLength was silently ignored: a 6,249-char\n // document produced exactly one 6,249-char chunk, blowing embedding limits\n // and destroying retrieval granularity. Split oversized units down by\n // sentence, then by hard slice; both terminate because sentenceUnits returns\n // a single-element array when it cannot split further.\n const explodeOversized = (unit: string): string[] => {\n if (unit.length <= maxChunkLength) return [unit];\n const sentences = sentenceUnits(unit);\n if (sentences.length > 1) return sentences.flatMap(explodeOversized);\n\n return fixedUnits(unit, maxChunkLength);\n };\n\n for (const unit of units) {\n for (const piece of explodeOversized(unit.trim())) {\n const trimmed = piece.trim();\n if (!trimmed) continue;\n appendUnitToChunk(trimmed);\n }\n }\n\n if (current) {\n appendChunk(current);\n }\n\n const normalizedChunks = chunks\n .map((entry) => normalizeWhitespace(entry))\n .filter(Boolean);\n\n if (normalizedChunks.length <= 1) {\n return normalizedChunks;\n }\n\n const merged: string[] = [];\n for (const chunk of normalizedChunks) {\n mergeSmallChunk(merged, chunk);\n }\n\n return merged;\n};\n\nconst chunkSourceAwareUnit = (\n unit: StructuredChunkUnit,\n options: Required<\n Pick<\n RAGChunkingOptions,\n \"chunkOverlap\" | \"maxChunkLength\" | \"minChunkLength\" | \"strategy\"\n >\n >,\n): StructuredChunkUnit[] => {\n const defaultSourceAwareChunkReason =\n unit.sectionKind === \"markdown_heading\" ||\n unit.sectionKind === \"html_heading\" ||\n unit.sectionKind === \"office_heading\"\n ? \"section_boundary\"\n : unit.sectionKind\n ? \"source_native_unit\"\n : unit.sourceAwareChunkReason;\n if (\n unit.officeBlockKind === \"table\" &&\n typeof unit.officeTableHeaderText === \"string\" &&\n typeof unit.officeTableBodyRowCount === \"number\" &&\n unit.officeTableBodyRowCount > 0 &&\n unit.text.length > options.maxChunkLength\n ) {\n const headerLine = unit.officeTableHeaderText;\n const contextText =\n typeof unit.officeTableContextText === \"string\"\n ? unit.officeTableContextText\n : undefined;\n const followUpText =\n typeof unit.officeTableFollowUpText === \"string\"\n ? unit.officeTableFollowUpText\n : undefined;\n const bodyRows = unit.text\n .split(\"\\n\")\n .map((line) => normalizeWhitespace(line))\n .filter((line) => /^Row \\d+\\./.test(line))\n .slice(1);\n const slices: Array<{\n bodyRowEnd: number;\n bodyRowStart: number;\n text: string;\n }> = [];\n let currentRows: string[] = [];\n let currentStart = 1;\n\n const pushSlice = () => {\n if (currentRows.length === 0) {\n return;\n }\n slices.push({\n bodyRowEnd: currentStart + currentRows.length - 1,\n bodyRowStart: currentStart,\n text: normalizeWhitespace(\n [\n ...(typeof contextText === \"string\" ? [contextText] : []),\n headerLine,\n ...currentRows,\n ...(typeof followUpText === \"string\" ? [followUpText] : []),\n ].join(\"\\n\"),\n ),\n });\n currentStart += currentRows.length;\n currentRows = [];\n };\n\n for (const row of bodyRows) {\n const candidateRows = [...currentRows, row];\n const candidateText = normalizeWhitespace(\n [\n ...(typeof contextText === \"string\" ? [contextText] : []),\n headerLine,\n ...candidateRows,\n ...(typeof followUpText === \"string\" ? [followUpText] : []),\n ].join(\"\\n\"),\n );\n if (\n currentRows.length > 0 &&\n candidateText.length > options.maxChunkLength\n ) {\n pushSlice();\n }\n currentRows.push(row);\n }\n pushSlice();\n\n if (slices.length > 0) {\n return slices.map((slice) => ({\n ...unit,\n officeTableBodyRowCount: slice.bodyRowEnd - slice.bodyRowStart + 1,\n officeTableBodyRowEnd: slice.bodyRowEnd,\n officeTableBodyRowStart: slice.bodyRowStart,\n officeTableChunkKind: slices.length > 1 ? \"table_slice\" : \"full_table\",\n officeTableRowCount: slice.bodyRowEnd - slice.bodyRowStart + 2,\n sourceAwareChunkReason:\n slices.length > 1 ? \"size_limit\" : defaultSourceAwareChunkReason,\n text: slice.text,\n }));\n }\n }\n if (\n unit.pdfTextKind === \"table_like\" &&\n typeof unit.pdfTableHeaderText === \"string\" &&\n typeof unit.pdfTableBodyRowCount === \"number\" &&\n unit.pdfTableBodyRowCount > 0 &&\n unit.text.length > options.maxChunkLength\n ) {\n const headerLine = unit.pdfTableHeaderText;\n const bodyRows = unit.text\n .split(\"\\n\")\n .map((line) => normalizeWhitespace(line))\n .filter(Boolean)\n .slice(1);\n const slices: Array<{\n bodyRowEnd: number;\n bodyRowStart: number;\n text: string;\n }> = [];\n let currentRows: string[] = [];\n let currentStart = 1;\n\n const pushSlice = () => {\n if (currentRows.length === 0) {\n return;\n }\n slices.push({\n bodyRowEnd: currentStart + currentRows.length - 1,\n bodyRowStart: currentStart,\n text: normalizeWhitespace([headerLine, ...currentRows].join(\"\\n\")),\n });\n currentStart += currentRows.length;\n currentRows = [];\n };\n\n for (const row of bodyRows) {\n const candidateRows = [...currentRows, row];\n const candidateText = normalizeWhitespace(\n [headerLine, ...candidateRows].join(\"\\n\"),\n );\n if (\n currentRows.length > 0 &&\n candidateText.length > options.maxChunkLength\n ) {\n pushSlice();\n }\n currentRows.push(row);\n }\n pushSlice();\n\n if (slices.length > 0) {\n return slices.map((slice) => ({\n ...unit,\n pdfTableBodyRowCount: slice.bodyRowEnd - slice.bodyRowStart + 1,\n pdfTableBodyRowEnd: slice.bodyRowEnd,\n pdfTableBodyRowStart: slice.bodyRowStart,\n pdfTableChunkKind: slices.length > 1 ? \"table_slice\" : \"full_table\",\n pdfTableRowCount: slice.bodyRowEnd - slice.bodyRowStart + 2,\n sourceAwareChunkReason:\n slices.length > 1 ? \"size_limit\" : defaultSourceAwareChunkReason,\n text: slice.text,\n }));\n }\n }\n if (unit.text.length <= options.maxChunkLength) {\n return [\n {\n ...unit,\n ...(defaultSourceAwareChunkReason\n ? { sourceAwareChunkReason: defaultSourceAwareChunkReason }\n : {}),\n },\n ];\n }\n\n const expandOversizedParagraph = (paragraph: string) => {\n if (paragraph.length <= options.maxChunkLength) {\n return [paragraph];\n }\n\n const isLikelyCodeChunk =\n paragraph.includes(\"\\n\") &&\n (/(^|\\n)\\s{2,}\\S/.test(paragraph) ||\n /\\b(function|class|const|let|var|import|export|return|if|else|for|while|switch|case|try|catch|interface|type|enum)\\b/.test(\n paragraph,\n ) ||\n /[{}();=>]/.test(paragraph));\n if (isLikelyCodeChunk) {\n const codeUnits = paragraph.includes(\"\\n\\n\")\n ? paragraph.split(/\\n{2,}/).filter(Boolean)\n : paragraph.split(\"\\n\").filter(Boolean);\n const codeChunks = chunkFromUnits(\n codeUnits,\n options.maxChunkLength,\n 0,\n options.minChunkLength,\n );\n if (codeChunks.length > 1) {\n return codeChunks;\n }\n }\n\n const sentenceChunks = chunkFromUnits(\n sentenceUnits(paragraph),\n options.maxChunkLength,\n 0,\n options.minChunkLength,\n );\n if (sentenceChunks.length > 1) {\n return sentenceChunks;\n }\n\n return chunkFromUnits(\n fixedUnits(paragraph, options.maxChunkLength),\n options.maxChunkLength,\n 0,\n options.minChunkLength,\n );\n };\n\n const stableParagraphs = (\n unit.preferredChunkUnits ?? paragraphUnits(unit.text)\n ).flatMap(expandOversizedParagraph);\n const stableChunks: string[] = [];\n let current = \"\";\n\n const pushCurrent = () => {\n if (!current) {\n return;\n }\n\n stableChunks.push(normalizeWhitespace(current));\n current = \"\";\n };\n\n for (const paragraph of stableParagraphs) {\n const trimmed = paragraph.trim();\n if (!trimmed) {\n continue;\n }\n\n if (!current) {\n current = trimmed;\n continue;\n }\n\n const candidate = `${current}\\n\\n${trimmed}`;\n if (candidate.length <= options.maxChunkLength) {\n current = candidate;\n continue;\n }\n\n pushCurrent();\n current = trimmed;\n }\n\n pushCurrent();\n\n const merged: string[] = [];\n for (const chunk of stableChunks) {\n const last = merged.at(-1);\n if (\n last &&\n chunk.length < options.minChunkLength &&\n `${last}\\n\\n${chunk}`.length <= options.maxChunkLength\n ) {\n merged[merged.length - 1] = normalizeWhitespace(`${last}\\n\\n${chunk}`);\n continue;\n }\n\n merged.push(chunk);\n }\n\n const decorateSourceAwareChunkText = (text: string) => {\n if (!unit.preferredChunkUnits || !unit.sectionTitle) {\n return text;\n }\n\n if (unit.sectionKind === \"spreadsheet_rows\") {\n if (text.includes(`Sheet ${unit.sectionTitle}`)) {\n return text;\n }\n return normalizeWhitespace(`Sheet ${unit.sectionTitle}\\n${text}`);\n }\n\n if (unit.sectionKind === \"presentation_slide\") {\n if (text.includes(unit.sectionTitle)) {\n return text;\n }\n return normalizeWhitespace(`${unit.sectionTitle}\\n${text}`);\n }\n\n return text;\n };\n\n const resolveSpreadsheetChunkRowRange = (text: string) => {\n if (unit.sectionKind !== \"spreadsheet_rows\") {\n return {};\n }\n\n const rowNumbers = [...text.matchAll(/^Row (\\d+)\\./gm)]\n .map((match) => Number(match[1] ?? NaN))\n .filter((value) => Number.isFinite(value));\n\n if (rowNumbers.length === 0) {\n return {};\n }\n\n return {\n spreadsheetRowEnd: rowNumbers[rowNumbers.length - 1],\n spreadsheetRowStart: rowNumbers[0],\n };\n };\n\n return merged.map((text) => {\n const decoratedText = decorateSourceAwareChunkText(text);\n const sourceAwareChunkReason =\n merged.length > 1 ? \"size_limit\" : defaultSourceAwareChunkReason;\n\n return {\n ...unit,\n ...(sourceAwareChunkReason ? { sourceAwareChunkReason } : {}),\n ...resolveSpreadsheetChunkRowRange(decoratedText),\n text: decoratedText,\n };\n });\n};\n\nconst resolveChunkingUnits = (\n text: string,\n options: Required<\n Pick<\n RAGChunkingOptions,\n \"chunkOverlap\" | \"maxChunkLength\" | \"minChunkLength\" | \"strategy\"\n >\n >,\n) => {\n if (options.strategy === \"fixed\") {\n return fixedUnits(text, options.maxChunkLength);\n }\n\n if (options.strategy === \"sentences\") {\n return sentenceUnits(text);\n }\n\n return paragraphUnits(text);\n};\n\nconst resolveChunkingProfiles = (\n registry?: RAGChunkingRegistryLike,\n): RAGChunkingProfile[] => {\n if (!registry) {\n return [];\n }\n\n const profiles = Array.isArray(registry) ? registry : registry.profiles;\n\n return profiles\n .map((profile, index) => normalizeChunkingProfile(profile, index))\n .sort((left, right) => right.priority - left.priority)\n .map(({ profile }) => profile);\n};\n\nconst normalizeChunkingProfile = (\n profile: RAGChunkingProfile | RAGChunkingProfileRegistration,\n index: number,\n) => {\n if (\"resolve\" in profile) {\n return {\n priority: 0,\n profile,\n };\n }\n\n const options = normalizeChunkingProfileOptions(profile.profile);\n const sourceSet =\n profile.sources?.filter((value) => typeof value === \"string\") ?? [];\n const documentIdSet =\n profile.documentIds?.filter((value) => typeof value === \"string\") ?? [];\n const formatSet =\n profile.formats?.filter((value) => typeof value === \"string\") ?? [];\n const sourceNativeKindSet =\n profile.sourceNativeKinds?.filter((value) => typeof value === \"string\") ??\n [];\n\n return {\n priority: profile.priority ?? 0,\n profile: {\n name:\n profile.name ??\n `chunking_profile_${String(index + 1).padStart(2, \"0\")}`,\n resolve: (input: RAGChunkingProfileInput) => {\n const documentId =\n input.document.id?.trim() ||\n (typeof input.metadata.documentId === \"string\"\n ? input.metadata.documentId\n : undefined);\n const source = input.document.source?.trim();\n if (formatSet.length > 0 && !formatSet.includes(input.format)) {\n return undefined;\n }\n if (\n sourceNativeKindSet.length > 0 &&\n (!input.sourceNativeKind ||\n !sourceNativeKindSet.includes(input.sourceNativeKind))\n ) {\n return undefined;\n }\n if (sourceSet.length > 0 && (!source || !sourceSet.includes(source))) {\n return undefined;\n }\n if (\n documentIdSet.length > 0 &&\n (!documentId || !documentIdSet.includes(documentId))\n ) {\n return undefined;\n }\n\n return options;\n },\n },\n };\n};\n\nconst normalizeChunkingProfileOptions = (\n profile:\n | Partial<RAGChunkingOptions>\n | {\n options?: Partial<RAGChunkingOptions>;\n },\n): Partial<RAGChunkingOptions> =>\n isChunkingProfileOptionsWrapper(profile) ? (profile.options ?? {}) : profile;\n\nconst isChunkingProfileOptionsWrapper = (\n profile:\n | Partial<RAGChunkingOptions>\n | {\n options?: Partial<RAGChunkingOptions>;\n },\n): profile is { options?: Partial<RAGChunkingOptions> } =>\n Object.prototype.hasOwnProperty.call(profile, \"options\");\n\nconst resolveChunkingProfileOverrides = ({\n defaults,\n document,\n format,\n normalizedText,\n registry,\n}: {\n defaults?: RAGChunkingOptions;\n document: RAGIngestDocument;\n format: RAGContentFormat;\n normalizedText: string;\n registry?: RAGChunkingRegistryLike;\n}) => {\n const metadata = document.metadata ?? {};\n const sourceNativeKind =\n typeof metadata.sourceNativeKind === \"string\"\n ? metadata.sourceNativeKind\n : undefined;\n\n for (const profile of resolveChunkingProfiles(registry)) {\n const options = profile.resolve({\n defaults,\n document,\n format,\n metadata,\n normalizedText,\n sourceNativeKind,\n });\n if (options) {\n return {\n name: profile.name,\n options,\n };\n }\n }\n\n return undefined;\n};\n\nconst resolveChunkingOptions = (\n document: RAGIngestDocument,\n defaults?: RAGChunkingOptions,\n registry?: RAGChunkingRegistryLike,\n format?: RAGContentFormat,\n normalizedText?: string,\n): Required<\n Pick<\n RAGChunkingOptions,\n \"chunkOverlap\" | \"maxChunkLength\" | \"minChunkLength\" | \"strategy\"\n >\n> => {\n const resolvedFormat = format ?? inferFormat(document);\n const resolvedNormalizedText =\n normalizedText ?? normalizeDocumentText(document.text, resolvedFormat);\n const profileOverrides = resolveChunkingProfileOverrides({\n defaults,\n document,\n format: resolvedFormat,\n normalizedText: resolvedNormalizedText,\n registry,\n });\n const maxChunkLength =\n document.chunking?.maxChunkLength ??\n profileOverrides?.options.maxChunkLength ??\n defaults?.maxChunkLength ??\n DEFAULT_MAX_CHUNK_LENGTH;\n const chunkOverlap =\n document.chunking?.chunkOverlap ??\n profileOverrides?.options.chunkOverlap ??\n defaults?.chunkOverlap ??\n DEFAULT_CHUNK_OVERLAP;\n const minChunkLength =\n document.chunking?.minChunkLength ??\n profileOverrides?.options.minChunkLength ??\n defaults?.minChunkLength ??\n DEFAULT_MIN_CHUNK_LENGTH;\n const strategy =\n document.chunking?.strategy ??\n profileOverrides?.options.strategy ??\n defaults?.strategy ??\n DEFAULT_STRATEGY;\n\n return {\n chunkOverlap: Math.max(0, Math.min(chunkOverlap, maxChunkLength - 1)),\n maxChunkLength: Math.max(RAG_MIN_CHUNK_LENGTH_FLOOR, maxChunkLength),\n minChunkLength: Math.max(1, minChunkLength),\n strategy,\n };\n};\n\nconst createChunkEntries = (\n document: RAGIngestDocument,\n format: RAGContentFormat,\n text: string,\n options: Required<\n Pick<\n RAGChunkingOptions,\n \"chunkOverlap\" | \"maxChunkLength\" | \"minChunkLength\" | \"strategy\"\n >\n >,\n): StructuredChunkUnit[] => {\n if (\n text.length <= options.maxChunkLength &&\n options.strategy !== \"source_aware\"\n ) {\n return [{ text }];\n }\n\n if (options.strategy === \"source_aware\") {\n return sourceAwareUnits(document, format, text).flatMap((unit) =>\n chunkSourceAwareUnit(unit, options),\n );\n }\n\n const units = resolveChunkingUnits(text, options);\n\n return chunkFromUnits(\n units,\n options.maxChunkLength,\n options.chunkOverlap,\n options.minChunkLength,\n ).map((entry) => ({ text: entry }));\n};\n\nexport const prepareRAGDocument = (\n document: RAGIngestDocument,\n defaultChunking?: RAGChunkingOptions,\n chunkingRegistry?: RAGChunkingRegistryLike,\n): RAGPreparedDocument => {\n const format = inferFormat(document);\n const normalizedText = normalizeDocumentText(document.text, format);\n const chunkingProfileOverrides = resolveChunkingProfileOverrides({\n defaults: defaultChunking,\n document,\n format,\n normalizedText,\n registry: chunkingRegistry,\n });\n const chunking = resolveChunkingOptions(\n document,\n defaultChunking,\n chunkingRegistry,\n format,\n normalizedText,\n );\n const documentId =\n document.id?.trim() ||\n slugify(\n document.source ||\n document.title ||\n normalizedText.slice(0, RAG_DOCUMENT_ID_PREVIEW_LENGTH),\n );\n const title = document.title?.trim() || documentId;\n let sourceExtension = \"txt\";\n if (format === \"markdown\") {\n sourceExtension = \"md\";\n } else if (format === \"html\") {\n sourceExtension = \"html\";\n }\n\n const source = document.source?.trim() || `${documentId}.${sourceExtension}`;\n const corpusKey =\n document.corpusKey?.trim() ||\n (typeof document.metadata?.corpusKey === \"string\"\n ? document.metadata.corpusKey.trim()\n : undefined) ||\n undefined;\n const metadata: RAGPreparedDocument[\"metadata\"] = {\n ...(document.metadata ?? {}),\n ...(corpusKey ? { corpusKey } : {}),\n documentId,\n ...(chunkingProfileOverrides?.name\n ? { chunkingProfile: chunkingProfileOverrides.name }\n : {}),\n format,\n source,\n title,\n };\n const chunkEntries = createChunkEntries(\n document,\n format,\n normalizedText,\n chunking,\n );\n const chunks: RAGDocumentChunk[] = chunkEntries.map((entry, index) => {\n const sectionPath = Array.isArray(entry.sectionPath)\n ? entry.sectionPath.filter(\n (value) => typeof value === \"string\" && value.length > 0,\n )\n : undefined;\n const sectionTitle =\n typeof entry.sectionTitle === \"string\" && entry.sectionTitle.length > 0\n ? entry.sectionTitle\n : sectionPath?.at(-1);\n const chunkTitle =\n sectionTitle && sectionTitle !== title\n ? `${title} · ${sectionTitle}`\n : title;\n const sectionChunkId =\n sectionPath && sectionPath.length > 0\n ? `${documentId}:section:${slugify(sectionPath.join(\" \"))}`\n : undefined;\n const sectionSiblingIndexes =\n sectionChunkId === undefined\n ? [index]\n : chunkEntries.reduce<number[]>(\n (indexes, candidate, candidateIndex) => {\n const candidatePath = Array.isArray(candidate.sectionPath)\n ? candidate.sectionPath.filter(\n (value) => typeof value === \"string\" && value.length > 0,\n )\n : undefined;\n const candidateSectionId =\n candidatePath && candidatePath.length > 0\n ? `${documentId}:section:${slugify(candidatePath.join(\" \"))}`\n : undefined;\n if (candidateSectionId === sectionChunkId) {\n indexes.push(candidateIndex);\n }\n return indexes;\n },\n [],\n );\n const sectionChunkIndex = sectionSiblingIndexes.indexOf(index);\n const previousChunkId =\n index > 0\n ? `${documentId}:${String(index).padStart(RAG_CHUNK_ID_PAD_LENGTH, \"0\")}`\n : undefined;\n const nextChunkId =\n index + 1 < chunkEntries.length\n ? `${documentId}:${String(index + 2).padStart(RAG_CHUNK_ID_PAD_LENGTH, \"0\")}`\n : undefined;\n\n return {\n chunkId: `${documentId}:${String(index + 1).padStart(RAG_CHUNK_ID_PAD_LENGTH, \"0\")}`,\n ...(corpusKey ? { corpusKey } : {}),\n metadata: {\n ...metadata,\n chunkCount: chunkEntries.length,\n chunkIndex: index,\n ...(sectionTitle ? { sectionTitle } : {}),\n ...(sectionPath && sectionPath.length > 0 ? { sectionPath } : {}),\n ...(typeof entry.sectionDepth === \"number\"\n ? { sectionDepth: entry.sectionDepth }\n : {}),\n ...(Array.isArray(entry.sectionFamilyPath) &&\n entry.sectionFamilyPath.length > 0\n ? { sectionFamilyPath: entry.sectionFamilyPath }\n : {}),\n ...(Array.isArray(entry.sectionOrdinalPath) &&\n entry.sectionOrdinalPath.length > 0\n ? { sectionOrdinalPath: entry.sectionOrdinalPath }\n : {}),\n ...(typeof entry.sectionSiblingFamilyKey === \"string\"\n ? { sectionSiblingFamilyKey: entry.sectionSiblingFamilyKey }\n : {}),\n ...(typeof entry.sectionSiblingOrdinal === \"number\"\n ? { sectionSiblingOrdinal: entry.sectionSiblingOrdinal }\n : {}),\n ...(Array.isArray(entry.spreadsheetHeaders) &&\n entry.spreadsheetHeaders.length > 0\n ? { spreadsheetHeaders: entry.spreadsheetHeaders }\n : {}),\n ...(typeof entry.spreadsheetColumnStart === \"string\"\n ? { spreadsheetColumnStart: entry.spreadsheetColumnStart }\n : {}),\n ...(typeof entry.spreadsheetColumnEnd === \"string\"\n ? { spreadsheetColumnEnd: entry.spreadsheetColumnEnd }\n : {}),\n ...(typeof entry.spreadsheetTableIndex === \"number\"\n ? { spreadsheetTableIndex: entry.spreadsheetTableIndex }\n : {}),\n ...(typeof entry.spreadsheetTableCount === \"number\"\n ? { spreadsheetTableCount: entry.spreadsheetTableCount }\n : {}),\n ...(typeof entry.spreadsheetRowStart === \"number\"\n ? { spreadsheetRowStart: entry.spreadsheetRowStart }\n : {}),\n ...(typeof entry.spreadsheetRowEnd === \"number\"\n ? { spreadsheetRowEnd: entry.spreadsheetRowEnd }\n : {}),\n ...(typeof entry.pageNumber === \"number\"\n ? { pageNumber: entry.pageNumber }\n : {}),\n ...(typeof entry.officeBlockNumber === \"number\"\n ? { officeBlockNumber: entry.officeBlockNumber }\n : {}),\n ...(entry.officeBlockKind\n ? { officeBlockKind: entry.officeBlockKind }\n : {}),\n ...(Array.isArray(entry.officeFamilyPath) &&\n entry.officeFamilyPath.length > 0\n ? { officeFamilyPath: entry.officeFamilyPath }\n : {}),\n ...(Array.isArray(entry.officeOrdinalPath) &&\n entry.officeOrdinalPath.length > 0\n ? { officeOrdinalPath: entry.officeOrdinalPath }\n : {}),\n ...(typeof entry.officeSiblingFamilyKey === \"string\"\n ? { officeSiblingFamilyKey: entry.officeSiblingFamilyKey }\n : {}),\n ...(typeof entry.officeSiblingOrdinal === \"number\"\n ? { officeSiblingOrdinal: entry.officeSiblingOrdinal }\n : {}),\n ...(typeof entry.officeListContextText === \"string\"\n ? { officeListContextText: entry.officeListContextText }\n : {}),\n ...(typeof entry.officeListGroupItemCount === \"number\"\n ? {\n officeListGroupItemCount: entry.officeListGroupItemCount,\n }\n : {}),\n ...(typeof entry.officeListLevel === \"number\"\n ? { officeListLevel: entry.officeListLevel }\n : {}),\n ...(Array.isArray(entry.officeListLevels) &&\n entry.officeListLevels.length > 0\n ? { officeListLevels: entry.officeListLevels }\n : {}),\n ...(typeof entry.officeTableBodyRowCount === \"number\"\n ? { officeTableBodyRowCount: entry.officeTableBodyRowCount }\n : {}),\n ...(typeof entry.officeTableBodyRowEnd === \"number\"\n ? { officeTableBodyRowEnd: entry.officeTableBodyRowEnd }\n : {}),\n ...(typeof entry.officeTableBodyRowStart === \"number\"\n ? { officeTableBodyRowStart: entry.officeTableBodyRowStart }\n : {}),\n ...(entry.officeTableChunkKind\n ? { officeTableChunkKind: entry.officeTableChunkKind }\n : {}),\n ...(typeof entry.officeTableColumnCount === \"number\"\n ? { officeTableColumnCount: entry.officeTableColumnCount }\n : {}),\n ...(typeof entry.officeTableContextText === \"string\"\n ? { officeTableContextText: entry.officeTableContextText }\n : {}),\n ...(typeof entry.officeTableFollowUpText === \"string\"\n ? { officeTableFollowUpText: entry.officeTableFollowUpText }\n : {}),\n ...(typeof entry.officeTableHeaderText === \"string\"\n ? { officeTableHeaderText: entry.officeTableHeaderText }\n : {}),\n ...(Array.isArray(entry.officeTableHeaders) &&\n entry.officeTableHeaders.length > 0\n ? { officeTableHeaders: entry.officeTableHeaders }\n : {}),\n ...(typeof entry.officeTableRowCount === \"number\"\n ? { officeTableRowCount: entry.officeTableRowCount }\n : {}),\n ...(typeof entry.officeTableSignature === \"string\"\n ? { officeTableSignature: entry.officeTableSignature }\n : {}),\n ...(typeof entry.pdfBlockNumber === \"number\"\n ? { pdfBlockNumber: entry.pdfBlockNumber }\n : {}),\n ...(typeof entry.pdfFigureCaptionBlockNumber === \"number\"\n ? {\n pdfFigureCaptionBlockNumber: entry.pdfFigureCaptionBlockNumber,\n }\n : {}),\n ...(typeof entry.pdfFigureLabel === \"string\"\n ? { pdfFigureLabel: entry.pdfFigureLabel }\n : {}),\n ...(entry.pdfSemanticRole\n ? { pdfSemanticRole: entry.pdfSemanticRole }\n : {}),\n ...(typeof entry.pdfTableBodyRowEnd === \"number\"\n ? { pdfTableBodyRowEnd: entry.pdfTableBodyRowEnd }\n : {}),\n ...(typeof entry.pdfTableBodyRowCount === \"number\"\n ? { pdfTableBodyRowCount: entry.pdfTableBodyRowCount }\n : {}),\n ...(typeof entry.pdfTableBodyRowStart === \"number\"\n ? { pdfTableBodyRowStart: entry.pdfTableBodyRowStart }\n : {}),\n ...(entry.pdfTableChunkKind\n ? { pdfTableChunkKind: entry.pdfTableChunkKind }\n : {}),\n ...(typeof entry.pdfTableColumnCount === \"number\"\n ? { pdfTableColumnCount: entry.pdfTableColumnCount }\n : {}),\n ...(typeof entry.pdfTableHeaderText === \"string\"\n ? { pdfTableHeaderText: entry.pdfTableHeaderText }\n : {}),\n ...(Array.isArray(entry.pdfTableHeaders) &&\n entry.pdfTableHeaders.length > 0\n ? { pdfTableHeaders: entry.pdfTableHeaders }\n : {}),\n ...(typeof entry.pdfTableRowCount === \"number\"\n ? { pdfTableRowCount: entry.pdfTableRowCount }\n : {}),\n ...(typeof entry.pdfTableSignature === \"string\"\n ? { pdfTableSignature: entry.pdfTableSignature }\n : {}),\n ...(entry.pdfTextKind ? { pdfTextKind: entry.pdfTextKind } : {}),\n ...(entry.emailSectionKind\n ? { emailSectionKind: entry.emailSectionKind }\n : {}),\n ...(Array.isArray(entry.emailForwardedBccAddresses) &&\n entry.emailForwardedBccAddresses.length > 0\n ? {\n emailForwardedBccAddresses: entry.emailForwardedBccAddresses,\n }\n : {}),\n ...(Array.isArray(entry.emailForwardedCcAddresses) &&\n entry.emailForwardedCcAddresses.length > 0\n ? {\n emailForwardedCcAddresses: entry.emailForwardedCcAddresses,\n }\n : {}),\n ...(typeof entry.emailForwardedDate === \"string\"\n ? { emailForwardedDate: entry.emailForwardedDate }\n : {}),\n ...(typeof entry.emailForwardedFromAddress === \"string\"\n ? {\n emailForwardedFromAddress: entry.emailForwardedFromAddress,\n }\n : {}),\n ...(typeof entry.emailForwardedFromDisplayName === \"string\"\n ? {\n emailForwardedFromDisplayName:\n entry.emailForwardedFromDisplayName,\n }\n : {}),\n ...(typeof entry.emailForwardedChainCount === \"number\"\n ? {\n emailForwardedChainCount: entry.emailForwardedChainCount,\n }\n : {}),\n ...(typeof entry.emailForwardedOrdinal === \"number\"\n ? { emailForwardedOrdinal: entry.emailForwardedOrdinal }\n : {}),\n ...(typeof entry.emailQuotedDepth === \"number\"\n ? { emailQuotedDepth: entry.emailQuotedDepth }\n : {}),\n ...(entry.emailForwardedHeaderFields\n ? {\n emailForwardedHeaderFields: entry.emailForwardedHeaderFields,\n }\n : {}),\n ...(Array.isArray(entry.emailForwardedParticipantAddresses) &&\n entry.emailForwardedParticipantAddresses.length > 0\n ? {\n emailForwardedParticipantAddresses:\n entry.emailForwardedParticipantAddresses,\n }\n : {}),\n ...(Array.isArray(entry.emailForwardedReplyToAddresses) &&\n entry.emailForwardedReplyToAddresses.length > 0\n ? {\n emailForwardedReplyToAddresses:\n entry.emailForwardedReplyToAddresses,\n }\n : {}),\n ...(typeof entry.emailForwardedSubject === \"string\"\n ? { emailForwardedSubject: entry.emailForwardedSubject }\n : {}),\n ...(typeof entry.emailForwardedTimestamp === \"string\"\n ? { emailForwardedTimestamp: entry.emailForwardedTimestamp }\n : {}),\n ...(Array.isArray(entry.emailForwardedToAddresses) &&\n entry.emailForwardedToAddresses.length > 0\n ? {\n emailForwardedToAddresses: entry.emailForwardedToAddresses,\n }\n : {}),\n ...(entry.sectionKind ? { sectionKind: entry.sectionKind } : {}),\n ...(entry.sourceAwareChunkReason\n ? { sourceAwareChunkReason: entry.sourceAwareChunkReason }\n : {}),\n ...(sectionChunkId ? { sectionChunkId } : {}),\n ...(sectionChunkId && sectionChunkIndex >= 0\n ? {\n sectionChunkCount: sectionSiblingIndexes.length,\n sectionChunkIndex,\n }\n : {}),\n ...(previousChunkId ? { previousChunkId } : {}),\n ...(nextChunkId ? { nextChunkId } : {}),\n },\n source,\n text: entry.text,\n title: chunkTitle,\n };\n });\n\n return {\n ...(corpusKey ? { corpusKey } : {}),\n chunks,\n documentId,\n format,\n metadata,\n normalizedText,\n source,\n title,\n };\n};\n\nexport const prepareRAGDocuments = (input: RAGDocumentIngestInput) =>\n input.documents.map((document) =>\n prepareRAGDocument(document, input.defaultChunking, input.chunkingRegistry),\n );\n\nexport const mergeMetadata = (\n inputMetadata: Record<string, unknown> | undefined,\n extraMetadata: Record<string, unknown> | undefined,\n baseMetadata: Record<string, unknown> | undefined,\n) => ({\n ...(baseMetadata ?? {}),\n ...(inputMetadata ?? {}),\n ...(extraMetadata ?? {}),\n});\n\nexport const buildRAGUpsertInputFromURLs = async (\n input: RAGDocumentUrlIngestInput,\n) => ({\n chunks: prepareRAGDocuments(await loadRAGDocumentsFromURLs(input)).flatMap(\n (document) => document.chunks,\n ),\n});\nexport const loadRAGDocumentFile = async (input: RAGDocumentFileInput) => {\n const data = await readFile(input.path);\n const documents = await extractRAGFileDocuments(\n {\n chunking: input.chunking,\n contentType: input.contentType,\n data,\n extractorRegistry: input.extractorRegistry,\n format: input.format,\n metadata: input.metadata,\n path: input.path,\n source: input.source,\n title: input.title,\n },\n input.extractors,\n input.extractorRegistry,\n );\n\n return getFirstExtractedDocument(documents, \"for file input\");\n};\nexport const loadRAGDocumentFromURL = async (input: RAGDocumentUrlInput) => {\n const url = input.url.trim();\n if (!url) {\n throw new Error(\"RAG URL is required\");\n }\n\n const response = await fetch(url, h2IfHttps(url));\n if (!response.ok) {\n throw new Error(\n `Failed to fetch RAG URL ${url}: ${response.status} ${response.statusText}`,\n );\n }\n\n const data = new Uint8Array(await response.arrayBuffer());\n const documents = await extractRAGFileDocuments(\n {\n chunking: input.chunking,\n contentType:\n input.contentType ?? response.headers.get(\"content-type\") ?? undefined,\n data,\n extractorRegistry: input.extractorRegistry,\n format:\n input.format ??\n inferFormatFromContentType(input.contentType ?? response.headers.get(\"content-type\")) ??\n inferFormatFromUrl(url),\n metadata: input.metadata,\n name: basename(new URL(url).pathname),\n source: input.source ?? url,\n title: input.title,\n },\n input.extractors,\n input.extractorRegistry,\n );\n\n return getFirstExtractedDocument(documents, \"for URL input\");\n};\nexport const loadRAGDocumentsFromUploads = async (\n input: RAGDocumentUploadIngestInput,\n) => {\n const documents = await Promise.all(\n input.uploads.map(async (upload) => {\n const loaded = await loadExtractedDocuments(\n {\n chunking: upload.chunking,\n contentType: upload.contentType,\n data: decodeUploadContent(upload),\n extractorRegistry: input.extractorRegistry,\n format: upload.format,\n metadata: upload.metadata,\n name: upload.name,\n source: upload.source ?? upload.name,\n title: upload.title,\n },\n input.extractors,\n input.extractorRegistry,\n );\n\n return loaded.map((document) => ({\n ...document,\n metadata: mergeMetadata(\n document.metadata,\n { uploadFile: upload.name },\n input.baseMetadata,\n ),\n }));\n }),\n );\n\n return {\n defaultChunking: input.defaultChunking,\n chunkingRegistry: input.chunkingRegistry,\n documents: reconcileLoadedEmailThreads(documents.flat()),\n };\n};\nexport const loadRAGDocumentsFromURLs = async (\n input: RAGDocumentUrlIngestInput,\n) => {\n const documents = await Promise.all(\n input.urls.map(async (urlInput) => {\n const url = urlInput.url.trim();\n if (!url) {\n throw new Error(\"RAG URL is required\");\n }\n\n const response = await fetch(url, h2IfHttps(url));\n if (!response.ok) {\n throw new Error(\n `Failed to fetch RAG URL ${url}: ${response.status} ${response.statusText}`,\n );\n }\n\n const data = new Uint8Array(await response.arrayBuffer());\n const loaded = await loadExtractedDocuments(\n {\n chunking: urlInput.chunking,\n contentType:\n urlInput.contentType ??\n response.headers.get(\"content-type\") ??\n undefined,\n data,\n extractorRegistry:\n urlInput.extractorRegistry ?? input.extractorRegistry,\n format:\n urlInput.format ??\n inferFormatFromContentType(urlInput.contentType ?? response.headers.get(\"content-type\")) ??\n inferFormatFromUrl(url),\n metadata: urlInput.metadata,\n name: basename(new URL(url).pathname),\n source: urlInput.source ?? url,\n title: urlInput.title,\n },\n urlInput.extractors ?? input.extractors,\n urlInput.extractorRegistry ?? input.extractorRegistry,\n );\n\n return loaded.map((document) => ({\n ...document,\n metadata: mergeMetadata(\n document.metadata,\n { sourceUrl: urlInput.url },\n input.baseMetadata,\n ),\n }));\n }),\n );\n\n return {\n defaultChunking: input.defaultChunking,\n chunkingRegistry: input.chunkingRegistry,\n documents: reconcileLoadedEmailThreads(documents.flat()),\n };\n};\nexport const loadRAGDocumentUpload = async (\n input: RAGDocumentUploadInput & {\n extractors?: RAGFileExtractor[];\n extractorRegistry?: RAGFileExtractorRegistryLike;\n },\n) => {\n const documents = await extractRAGFileDocuments(\n {\n chunking: input.chunking,\n contentType: input.contentType,\n data: decodeUploadContent(input),\n extractorRegistry: input.extractorRegistry,\n format: input.format,\n metadata: input.metadata,\n name: input.name,\n source: input.source ?? input.name,\n title: input.title,\n },\n input.extractors,\n input.extractorRegistry,\n );\n\n return getFirstExtractedDocument(documents, \"for upload input\");\n};\nexport const prepareRAGDocumentFile = async (\n input: RAGDocumentFileInput,\n defaultChunking?: RAGChunkingOptions,\n chunkingRegistry?: RAGChunkingRegistryLike,\n) =>\n prepareRAGDocument(\n await loadRAGDocumentFile(input),\n defaultChunking,\n chunkingRegistry,\n );\n\nconst DEFAULT_DIRECTORY_EXTENSIONS = [\n \".txt\",\n \".md\",\n \".mdx\",\n \".html\",\n \".htm\",\n \".json\",\n \".csv\",\n \".xml\",\n \".yaml\",\n \".yml\",\n \".pdf\",\n \".eml\",\n \".emlx\",\n \".mbox\",\n \".mbx\",\n];\n\nconst collectDirectoryFiles = async (\n directory: string,\n recursive: boolean,\n includeExtensions: Set<string> | null,\n) => {\n const entries = await readdir(directory, { withFileTypes: true });\n const files: string[] = [];\n const collectNestedDirectoryFiles = (fullPath: string) =>\n collectDirectoryFiles(fullPath, recursive, includeExtensions);\n const shouldIncludeDirectoryFile = (\n entryName: string,\n sourcePath?: string,\n ) => {\n if (includeExtensions === null) {\n return true;\n }\n\n const extension = extname(entryName).toLowerCase();\n if (parseMaildirMetadata(sourcePath ?? entryName)) {\n return true;\n }\n\n return includeExtensions.has(extension);\n };\n const appendNestedDirectoryFiles = async (fullPath: string) => {\n if (!recursive) {\n return;\n }\n\n files.push(...(await collectNestedDirectoryFiles(fullPath)));\n };\n const processDirectoryEntry = async (\n entry: (typeof entries)[number],\n fullPath: string,\n ) => {\n if (entry.isDirectory()) {\n await appendNestedDirectoryFiles(fullPath);\n\n return true;\n }\n\n if (!entry.isFile()) {\n return true;\n }\n\n if (!shouldIncludeDirectoryFile(entry.name, fullPath)) {\n return true;\n }\n\n files.push(fullPath);\n\n return true;\n };\n\n await Promise.all(\n entries.map(async (entry) => {\n const fullPath = join(directory, entry.name);\n await processDirectoryEntry(entry, fullPath);\n }),\n );\n\n return files.sort();\n};\n\nexport const buildRAGUpsertInputFromDirectory = async (\n input: RAGDirectoryIngestInput,\n) =>\n buildRAGUpsertInputFromDocuments(await loadRAGDocumentsFromDirectory(input));\nexport const buildRAGUpsertInputFromDocuments = (\n input: RAGDocumentIngestInput,\n) => ({\n chunks: prepareRAGDocuments(input).flatMap((document) => document.chunks),\n});\n\nexport const buildRAGUpsertInputFromUploads = async (\n input: RAGDocumentUploadIngestInput,\n) => ({\n chunks: prepareRAGDocuments(await loadRAGDocumentsFromUploads(input)).flatMap(\n (document) => document.chunks,\n ),\n});\n\nexport const loadRAGDocumentsFromDirectory = async (\n input: RAGDirectoryIngestInput,\n) => {\n const root = resolve(input.directory);\n const includeExtensions =\n input.includeExtensions === undefined &&\n (input.extractors?.length || input.extractorRegistry)\n ? null\n : new Set(\n (input.includeExtensions ?? DEFAULT_DIRECTORY_EXTENSIONS).map(\n (entry) =>\n entry.startsWith(\".\")\n ? entry.toLowerCase()\n : `.${entry.toLowerCase()}`,\n ),\n );\n const files = await collectDirectoryFiles(\n root,\n input.recursive !== false,\n includeExtensions,\n );\n\n const documents = await Promise.all(\n files.map(async (path) => {\n const source = relative(root, path).replace(/\\\\/g, \"/\");\n const data = await readFile(path);\n const loaded = await loadExtractedDocuments(\n {\n chunking: input.defaultChunking,\n data,\n extractorRegistry: input.extractorRegistry,\n metadata: {\n fileName: basename(path),\n relativePath: source,\n },\n path,\n source,\n },\n input.extractors,\n input.extractorRegistry,\n );\n\n return loaded.map((document) => ({\n ...document,\n metadata: mergeMetadata(\n document.metadata,\n undefined,\n input.baseMetadata,\n ),\n }));\n }),\n );\n\n return {\n defaultChunking: input.defaultChunking,\n chunkingRegistry: input.chunkingRegistry,\n documents: reconcileLoadedEmailThreads(documents.flat()),\n };\n};\nexport const prepareRAGDirectoryDocuments = async (\n input: RAGDirectoryIngestInput,\n) => prepareRAGDocuments(await loadRAGDocumentsFromDirectory(input));\n",
210
+ "export const HTTP_STATUS_OK = 200;\nexport const HTTP_STATUS_BAD_REQUEST = 400;\nexport const HTTP_STATUS_NOT_FOUND = 404;\nexport const EXCLUDE_LAST_OFFSET = -1;\nexport const RAG_CHUNK_ID_PAD_LENGTH = 3;\nexport const RAG_DOCUMENT_ID_PREVIEW_LENGTH = 32;\nexport const RAG_DOCUMENT_SLUG_MAX_LENGTH = 48;\nexport const RAG_MIN_CHUNK_LENGTH_FLOOR = 120;\nexport const RAG_SEARCH_SCORE_DECIMAL_PLACES = 3;\n",
211
+ "import {\n readRAGWebpage,\n type ReadWebpageOptions,\n type WebReadResult,\n} from \"./index\";\nimport { fetchPublicWebResource } from \"./transport\";\nconst pagePriority = (url: string, label: string) => {\n const path = new URL(url).pathname;\n if (/\\/(?:news|thought-leadership|careers|contact)(?:\\/|$)/iu.test(path))\n return 0;\n if (/client|customer|case.?stud|success/iu.test(path)) return 3;\n if (/service|capabilit|solution|what.we.do/iu.test(path)) return 2;\n if (/about|who.we.are|company/iu.test(path)) return 1;\n if (\n /^(?:our )?(?:clients|customers|client successes|case studies)\\b/iu.test(\n label,\n )\n )\n return 3;\n if (\n /^(?:our )?(?:services|capabilities|solutions|what we do)\\b/iu.test(label)\n )\n return 2;\n if (/^(?:about|who we are|company info)\\b/iu.test(label)) return 1;\n return 0;\n};\n/** Bounded company research: preserve citations and follow relevant same-origin links. */\nexport const readRAGWebsite = async (\n options: ReadWebpageOptions & { maxPages?: number },\n) => {\n const signal = options.signal ?? AbortSignal.timeout(75000);\n const maxPages = Math.max(1, Math.min(options.maxPages ?? 4, 5));\n const maxChars = Math.max(1000, Math.min(options.maxChars ?? 24000, 100000));\n const pages: WebReadResult[] = [];\n const queue: { url: string; label: string }[] = [\n { url: options.url, label: \"Requested page\" },\n ];\n const visited = new Set<string>();\n const coveredTopics = new Set<number>();\n let origin: string | undefined;\n while (queue.length && pages.length < maxPages && !signal.aborted) {\n const next = queue.shift()!;\n let key: URL;\n try {\n key = new URL(next.url);\n } catch {\n pages.push(await readRAGWebpage({ ...options, signal }));\n break;\n }\n key.hash = \"\";\n if (visited.has(key.href)) continue;\n visited.add(key.href);\n coveredTopics.add(pagePriority(next.url, next.label));\n const page = await readRAGWebpage({\n ...options,\n url: next.url,\n maxChars: Math.min(maxChars, 12000),\n signal: AbortSignal.any([signal, AbortSignal.timeout(30000)]),\n });\n pages.push(page);\n visited.add(page.finalUrl.split(\"#\")[0]!);\n origin ??= new URL(page.finalUrl).origin;\n if (page.status === \"error\") continue;\n const links = page.evidence.links.filter(\n (link) =>\n new URL(link.url).origin === origin &&\n pagePriority(link.url, link.label) > 0 &&\n !visited.has(link.url.split(\"#\")[0]!),\n );\n queue.push(...links);\n queue.sort(\n (a, b) =>\n pagePriority(b.url, b.label) +\n (coveredTopics.has(pagePriority(b.url, b.label)) ? 0 : 10) -\n (pagePriority(a.url, a.label) +\n (coveredTopics.has(pagePriority(a.url, a.label)) ? 0 : 10)),\n );\n }\n const first = pages[0] ?? (await readRAGWebpage({ ...options, signal }));\n const captionEvidence: { url: string; text: string; error?: string }[] = [];\n const tracks = [\n ...new Set(\n pages.flatMap((page) =>\n page.evidence.media\n .filter((media) => media.kind === \"captions\")\n .map((media) => media.url),\n ),\n ),\n ].slice(0, 2);\n for (const url of tracks) {\n if (signal.aborted) break;\n try {\n const response = await (options.fetchResource ?? fetchPublicWebResource)(\n url,\n {\n signal: AbortSignal.any([signal, AbortSignal.timeout(5000)]),\n maxBytes: 250000,\n },\n );\n if (response.status !== 200) throw new Error(`HTTP ${response.status}`);\n const text = new TextDecoder()\n .decode(response.body)\n .replace(/^WEBVTT.*$/gmu, \"\")\n .replace(/^.*-->.*$/gmu, \"\")\n .replace(/^\\d+$/gmu, \"\")\n .replace(/<[^>]*>/gu, \"\")\n .trim()\n .slice(0, 6000);\n captionEvidence.push({ url: response.url, text });\n } catch (error) {\n captionEvidence.push({\n url,\n text: \"\",\n error:\n error instanceof Error ? error.message : \"Caption retrieval failed\",\n });\n }\n }\n const evidenceText = pages\n .filter((page) => page.status !== \"error\")\n .map(\n (page) =>\n `SOURCE: ${page.finalUrl}\\nTITLE: ${page.title ?? \"Untitled\"}\\n${page.text}`,\n )\n .join(\"\\n\\n\");\n const readable = pages.filter((page) => page.status !== \"error\" && page.text);\n const incomplete =\n pages.some((page) => page.status !== \"ok\") || signal.aborted;\n const unvisited = queue.filter(\n (link) => !visited.has(link.url.split(\"#\")[0]!),\n );\n return {\n ...first,\n status: (readable.length\n ? incomplete\n ? \"partial\"\n : \"ok\"\n : \"error\") as WebReadResult[\"status\"],\n text: evidenceText.slice(0, maxChars),\n truncated:\n evidenceText.length > maxChars || pages.some((page) => page.truncated),\n pages: pages.map(({ text: _text, ...page }) => page),\n captionEvidence,\n coverage: {\n pagesRead: pages.length,\n pageLimit: maxPages,\n remainingRelevantLinks: [\n ...new Set(unvisited.map((link) => link.url)),\n ].slice(0, 20),\n deadlineReached: signal.aborted,\n exhaustive: false,\n },\n citationGuidance:\n \"Cite the exact source page URL for each factual claim. Distinguish page text, image labels, caption text and inference. A successful fetch is not proof that every requested topic was answered. Follow remaining relevant links if the question is still unanswered; do not ask permission merely to finish already-requested research. Describe an empty HTTP extraction followed by browser success as successful fallback, not silent failure. Only identify HTTP redirect status codes actually present in redirects. Media URLs alone are not watched video evidence.\",\n };\n};\n",
212
+ "import {\n extractWebEvidence,\n hasIncompleteAppContent,\n type WebEvidence,\n} from \"./evidence\";\nimport type { WebRedirect } from \"./transport\";\nexport type { WebEvidence, WebLink, WebImage, WebMedia } from \"./evidence\";\nexport type { WebRedirect } from \"./transport\";\nimport {\n loadRAGDocumentUpload,\n prepareRAGDocument,\n} from \"../ingestion/ingestion\";\nimport {\n fetchPublicWebResource,\n validatePublicWebUrl,\n WebReadError,\n type WebFetchResult,\n} from \"./transport\";\nexport {\n fetchPublicWebResource,\n validatePublicWebUrl,\n isPublicWebAddress,\n WebReadError,\n} from \"./transport\";\nexport type { WebFetchResult, WebFetchOptions } from \"./transport\";\nexport type WebReadAttempt = {\n method: \"http\" | \"browser\";\n status: string;\n httpStatus?: number;\n extractedChars?: number;\n};\nexport type WebReadResult = {\n status: \"ok\" | \"partial\" | \"error\";\n url: string;\n finalUrl: string;\n title: string | null;\n text: string;\n method: \"http\" | \"browser\";\n truncated: boolean;\n attempts: WebReadAttempt[];\n error?: { code: string; message: string };\n fetchedAt: string;\n redirects: WebRedirect[];\n evidence: WebEvidence;\n limitations: string[];\n};\nexport type WebRenderer = (\n url: string,\n options: { signal: AbortSignal },\n) => Promise<{\n html: string;\n text?: string;\n url: string;\n status: number;\n redirects?: WebRedirect[];\n settled?: boolean;\n}>;\nexport type ReadWebpageOptions = {\n url: string;\n render?: WebRenderer;\n signal?: AbortSignal;\n maxChars?: number;\n mode?: \"auto\" | \"browser\";\n fetchResource?: typeof fetchPublicWebResource;\n};\nconst messageFor = (error: unknown) =>\n error instanceof Error ? error.message : \"Website retrieval failed.\";\nconst codeFor = (error: unknown) =>\n error instanceof WebReadError\n ? error.code\n : error instanceof Error &&\n /^(?:AbortError|TimeoutError)$/u.test(error.name)\n ? \"timeout\"\n : \"fetch_failed\";\nconst cleanHtml = (html: string) =>\n prepareRAGDocument({ text: html, format: \"html\" }).normalizedText;\nconst titleOf = (html: string) => {\n const title = /<title\\b[^>]*>([\\s\\S]*?)<\\/title>/iu.exec(html)?.[1];\n return title\n ? prepareRAGDocument({ text: title, format: \"html\" }).normalizedText\n : null;\n};\nconst isShell = (html: string, text: string) =>\n text.length < 300 ||\n hasIncompleteAppContent(html) ||\n /(?:enable|requires?|turn on)\\s+javascript|javascript\\s+(?:is\\s+)?(?:disabled|required)/iu.test(\n text,\n ) ||\n /<(?:div|main|section)[^>]*(?:id=[\"'](?:root|app|__next)[\"']|class=[\"']todoapp[\"'])[^>]*>\\s*<\\//iu.test(\n html,\n );\nconst isChallenge = (text: string) =>\n /verify (?:that )?you are human|checking your browser|just a moment|enable javascript and cookies to continue|access denied/iu.test(\n text.slice(0, 1000),\n );\n/** Read prepared evidence, escalating thin HTML shells to a host-supplied browser. */\nexport const readRAGWebpage = async (\n options: ReadWebpageOptions,\n): Promise<WebReadResult> => {\n const attempts: WebReadAttempt[] = [];\n const redirects: WebRedirect[] = [];\n const limitations = [\n \"A page read is not exhaustive company research. Image labels are evidence supplied by the site, not independently verified customer relationships. Videos are not watched or transcribed unless caption text is returned.\",\n ];\n let evidence: WebEvidence = {\n links: [],\n images: [],\n media: [],\n canonicalUrl: null,\n };\n const signal = options.signal ?? AbortSignal.timeout(45000);\n const maxChars = Math.max(1000, Math.min(options.maxChars ?? 24000, 100000));\n let finalUrl = options.url,\n text = \"\",\n title: string | null = null,\n method: \"http\" | \"browser\" = \"http\";\n const result = (\n status: WebReadResult[\"status\"],\n error?: WebReadResult[\"error\"],\n ): WebReadResult => ({\n status,\n url: options.url,\n finalUrl,\n title,\n text: text.slice(0, maxChars),\n method,\n truncated: text.length > maxChars,\n attempts,\n redirects,\n evidence,\n limitations,\n fetchedAt: new Date().toISOString(),\n ...(error ? { error } : {}),\n });\n try {\n validatePublicWebUrl(options.url);\n let response: WebFetchResult | undefined;\n try {\n response = await (options.fetchResource ?? fetchPublicWebResource)(\n options.url,\n { signal, maxBytes: 5_000_000 },\n );\n } catch (error) {\n attempts.push({ method: \"http\", status: codeFor(error) });\n if (error instanceof WebReadError && error.code === \"blocked_url\")\n throw error;\n if (!options.render) throw error;\n }\n let needsBrowser = options.mode === \"browser\" || !response;\n if (response) {\n finalUrl = response.url;\n redirects.push(...(response.redirects ?? []));\n const mime = response.headers[\"content-type\"] ?? \"\";\n const raw = new TextDecoder().decode(response.body);\n const html =\n /html/iu.test(mime) || /^\\s*(?:<!doctype html|<html)/iu.test(raw);\n if (response.status >= 200 && response.status < 300) {\n if (html) {\n evidence = extractWebEvidence(raw, finalUrl);\n text = cleanHtml(raw);\n title = titleOf(raw);\n needsBrowser ||= isShell(raw, text) || isChallenge(text);\n } else {\n const doc = await loadRAGDocumentUpload({\n content: Buffer.from(response.body).toString(\"base64\"),\n encoding: \"base64\",\n contentType: mime,\n name: new URL(finalUrl).pathname,\n source: finalUrl,\n });\n text = prepareRAGDocument(doc).normalizedText;\n title = doc.title ?? null;\n }\n attempts.push({\n method: \"http\",\n status: text ? \"extracted\" : \"empty\",\n httpStatus: response.status,\n extractedChars: text.length,\n });\n } else {\n attempts.push({\n method: \"http\",\n status: \"http_error\",\n httpStatus: response.status,\n });\n if (![401, 403, 429, 503].includes(response.status))\n return result(\"error\", {\n code: \"http_error\",\n message: `Website returned HTTP ${response.status}.`,\n });\n needsBrowser = true;\n }\n }\n if (needsBrowser) {\n if (!options.render)\n return result(text ? \"partial\" : \"error\", {\n code: \"rendering_required\",\n message:\n \"Static HTML was incomplete. Browser rendering is required; this is not evidence that the site has no information.\",\n });\n try {\n const rendered = await options.render(finalUrl, { signal });\n method = \"browser\";\n finalUrl = rendered.url;\n validatePublicWebUrl(finalUrl);\n redirects.push(...(rendered.redirects ?? []));\n evidence = extractWebEvidence(rendered.html, finalUrl);\n if (rendered.settled === false)\n limitations.push(\n \"Browser content did not reach the readability threshold before the wait limit.\",\n );\n text = rendered.text?.trim() ?? cleanHtml(rendered.html);\n title = titleOf(rendered.html) ?? title;\n attempts.push({\n method: \"browser\",\n status: text ? \"extracted\" : \"empty\",\n httpStatus: rendered.status,\n extractedChars: text.length,\n });\n if (rendered.status === 401)\n return result(\"error\", {\n code: \"authentication_required\",\n message: \"This page requires sign-in.\",\n });\n if ([403, 429].includes(rendered.status) || isChallenge(text))\n return result(\"error\", {\n code: \"access_blocked\",\n message:\n \"The website blocked automated access or presented a verification challenge.\",\n });\n if (rendered.status >= 400)\n return result(\"error\", {\n code: \"http_error\",\n message: `Website returned HTTP ${rendered.status}.`,\n });\n if (\n !text ||\n /^(?:loading[.\\s]*|please wait[.\\s]*)$/iu.test(text) ||\n /(?:enable|requires?)\\s+javascript/iu.test(text)\n )\n return result(\"error\", {\n code: \"rendering_incomplete\",\n message:\n \"The page still provided no usable text after browser rendering.\",\n });\n if (rendered.settled === false)\n return result(\"partial\", {\n code: \"rendering_incomplete\",\n message:\n \"Some content was extracted, but the application did not reach the readability threshold. Do not treat it as complete.\",\n });\n } catch (error) {\n attempts.push({ method: \"browser\", status: codeFor(error) });\n return result(text ? \"partial\" : \"error\", {\n code: codeFor(error),\n message: messageFor(error),\n });\n }\n }\n return text\n ? result(\"ok\")\n : result(\"error\", {\n code: \"no_readable_content\",\n message: \"The page returned no readable text.\",\n });\n } catch (error) {\n return result(\"error\", {\n code: codeFor(error),\n message: messageFor(error),\n });\n }\n};\n\nexport { readRAGWebsite } from \"./website\";\n"
213
+ ],
214
+ "mappings": "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",
215
+ "debugId": "4E4CFF24F5CCBA3E64756E2164756E21",
216
+ "names": []
217
+ }