tutuca 0.9.36 → 0.9.37

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.
@@ -2066,6 +2066,2632 @@ var init_components = __esm(() => {
2066
2066
  init_attribute();
2067
2067
  });
2068
2068
 
2069
+ // node_modules/entities/dist/decode-codepoint.js
2070
+ function replaceCodePoint(codePoint) {
2071
+ if (codePoint >= 55296 && codePoint <= 57343 || codePoint > 1114111) {
2072
+ return 65533;
2073
+ }
2074
+ return decodeMap.get(codePoint) ?? codePoint;
2075
+ }
2076
+ var decodeMap;
2077
+ var init_decode_codepoint = __esm(() => {
2078
+ decodeMap = new Map([
2079
+ [0, 65533],
2080
+ [128, 8364],
2081
+ [130, 8218],
2082
+ [131, 402],
2083
+ [132, 8222],
2084
+ [133, 8230],
2085
+ [134, 8224],
2086
+ [135, 8225],
2087
+ [136, 710],
2088
+ [137, 8240],
2089
+ [138, 352],
2090
+ [139, 8249],
2091
+ [140, 338],
2092
+ [142, 381],
2093
+ [145, 8216],
2094
+ [146, 8217],
2095
+ [147, 8220],
2096
+ [148, 8221],
2097
+ [149, 8226],
2098
+ [150, 8211],
2099
+ [151, 8212],
2100
+ [152, 732],
2101
+ [153, 8482],
2102
+ [154, 353],
2103
+ [155, 8250],
2104
+ [156, 339],
2105
+ [158, 382],
2106
+ [159, 376]
2107
+ ]);
2108
+ });
2109
+
2110
+ // node_modules/entities/dist/internal/decode-shared.js
2111
+ function decodeBase64(input) {
2112
+ const binary = atob(input);
2113
+ const evenLength = binary.length & ~1;
2114
+ const out = new Uint16Array(evenLength / 2);
2115
+ for (let index = 0, outIndex = 0;index < evenLength; index += 2) {
2116
+ const lo = binary.charCodeAt(index);
2117
+ const hi = binary.charCodeAt(index + 1);
2118
+ out[outIndex++] = lo | hi << 8;
2119
+ }
2120
+ return out;
2121
+ }
2122
+
2123
+ // node_modules/entities/dist/generated/decode-data-html.js
2124
+ var htmlDecodeTree;
2125
+ var init_decode_data_html = __esm(() => {
2126
+ 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");
2127
+ });
2128
+
2129
+ // node_modules/entities/dist/generated/decode-data-xml.js
2130
+ var xmlDecodeTree;
2131
+ var init_decode_data_xml = __esm(() => {
2132
+ xmlDecodeTree = /* @__PURE__ */ decodeBase64("AAJhZ2xxBwARABMAFQBtAg0AAAAAAA8AcAAmYG8AcwAnYHQAPmB0ADxg9SFvdCJg");
2133
+ });
2134
+
2135
+ // node_modules/entities/dist/internal/bin-trie-flags.js
2136
+ var BinTrieFlags;
2137
+ var init_bin_trie_flags = __esm(() => {
2138
+ (function(BinTrieFlags2) {
2139
+ BinTrieFlags2[BinTrieFlags2["VALUE_LENGTH"] = 49152] = "VALUE_LENGTH";
2140
+ BinTrieFlags2[BinTrieFlags2["FLAG13"] = 8192] = "FLAG13";
2141
+ BinTrieFlags2[BinTrieFlags2["BRANCH_LENGTH"] = 8064] = "BRANCH_LENGTH";
2142
+ BinTrieFlags2[BinTrieFlags2["JUMP_TABLE"] = 127] = "JUMP_TABLE";
2143
+ })(BinTrieFlags || (BinTrieFlags = {}));
2144
+ });
2145
+
2146
+ // node_modules/entities/dist/decode.js
2147
+ function isNumber(code) {
2148
+ return code >= CharCodes.ZERO && code <= CharCodes.NINE;
2149
+ }
2150
+ function isHexadecimalCharacter(code) {
2151
+ return code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_F || code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_F;
2152
+ }
2153
+ function isAsciiAlphaNumeric(code) {
2154
+ return code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_Z || code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_Z || isNumber(code);
2155
+ }
2156
+ function isEntityInAttributeInvalidEnd(code) {
2157
+ return code === CharCodes.EQUALS || isAsciiAlphaNumeric(code);
2158
+ }
2159
+
2160
+ class EntityDecoder {
2161
+ decodeTree;
2162
+ emitCodePoint;
2163
+ errors;
2164
+ constructor(decodeTree, emitCodePoint, errors) {
2165
+ this.decodeTree = decodeTree;
2166
+ this.emitCodePoint = emitCodePoint;
2167
+ this.errors = errors;
2168
+ }
2169
+ state = EntityDecoderState.EntityStart;
2170
+ consumed = 1;
2171
+ result = 0;
2172
+ treeIndex = 0;
2173
+ excess = 1;
2174
+ decodeMode = DecodingMode.Strict;
2175
+ runConsumed = 0;
2176
+ startEntity(decodeMode) {
2177
+ this.decodeMode = decodeMode;
2178
+ this.state = EntityDecoderState.EntityStart;
2179
+ this.result = 0;
2180
+ this.treeIndex = 0;
2181
+ this.excess = 1;
2182
+ this.consumed = 1;
2183
+ this.runConsumed = 0;
2184
+ }
2185
+ write(input, offset) {
2186
+ switch (this.state) {
2187
+ case EntityDecoderState.EntityStart: {
2188
+ if (input.charCodeAt(offset) === CharCodes.NUM) {
2189
+ this.state = EntityDecoderState.NumericStart;
2190
+ this.consumed += 1;
2191
+ return this.stateNumericStart(input, offset + 1);
2192
+ }
2193
+ this.state = EntityDecoderState.NamedEntity;
2194
+ return this.stateNamedEntity(input, offset);
2195
+ }
2196
+ case EntityDecoderState.NumericStart: {
2197
+ return this.stateNumericStart(input, offset);
2198
+ }
2199
+ case EntityDecoderState.NumericDecimal: {
2200
+ return this.stateNumericDecimal(input, offset);
2201
+ }
2202
+ case EntityDecoderState.NumericHex: {
2203
+ return this.stateNumericHex(input, offset);
2204
+ }
2205
+ case EntityDecoderState.NamedEntity: {
2206
+ return this.stateNamedEntity(input, offset);
2207
+ }
2208
+ }
2209
+ }
2210
+ stateNumericStart(input, offset) {
2211
+ if (offset >= input.length) {
2212
+ return -1;
2213
+ }
2214
+ if ((input.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) {
2215
+ this.state = EntityDecoderState.NumericHex;
2216
+ this.consumed += 1;
2217
+ return this.stateNumericHex(input, offset + 1);
2218
+ }
2219
+ this.state = EntityDecoderState.NumericDecimal;
2220
+ return this.stateNumericDecimal(input, offset);
2221
+ }
2222
+ stateNumericHex(input, offset) {
2223
+ while (offset < input.length) {
2224
+ const char = input.charCodeAt(offset);
2225
+ if (isNumber(char) || isHexadecimalCharacter(char)) {
2226
+ const digit = char <= CharCodes.NINE ? char - CharCodes.ZERO : (char | TO_LOWER_BIT) - CharCodes.LOWER_A + 10;
2227
+ this.result = this.result * 16 + digit;
2228
+ this.consumed++;
2229
+ offset++;
2230
+ } else {
2231
+ return this.emitNumericEntity(char, 3);
2232
+ }
2233
+ }
2234
+ return -1;
2235
+ }
2236
+ stateNumericDecimal(input, offset) {
2237
+ while (offset < input.length) {
2238
+ const char = input.charCodeAt(offset);
2239
+ if (isNumber(char)) {
2240
+ this.result = this.result * 10 + (char - CharCodes.ZERO);
2241
+ this.consumed++;
2242
+ offset++;
2243
+ } else {
2244
+ return this.emitNumericEntity(char, 2);
2245
+ }
2246
+ }
2247
+ return -1;
2248
+ }
2249
+ emitNumericEntity(lastCp, expectedLength) {
2250
+ if (this.consumed <= expectedLength) {
2251
+ this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed);
2252
+ return 0;
2253
+ }
2254
+ if (lastCp === CharCodes.SEMI) {
2255
+ this.consumed += 1;
2256
+ } else if (this.decodeMode === DecodingMode.Strict) {
2257
+ return 0;
2258
+ }
2259
+ this.emitCodePoint(replaceCodePoint(this.result), this.consumed);
2260
+ if (this.errors) {
2261
+ if (lastCp !== CharCodes.SEMI) {
2262
+ this.errors.missingSemicolonAfterCharacterReference();
2263
+ }
2264
+ this.errors.validateNumericCharacterReference(this.result);
2265
+ }
2266
+ return this.consumed;
2267
+ }
2268
+ stateNamedEntity(input, offset) {
2269
+ const { decodeTree } = this;
2270
+ let current = decodeTree[this.treeIndex];
2271
+ let valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
2272
+ while (offset < input.length) {
2273
+ if (valueLength === 0 && (current & BinTrieFlags.FLAG13) !== 0) {
2274
+ const runLength = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;
2275
+ if (this.runConsumed === 0) {
2276
+ const firstChar = current & BinTrieFlags.JUMP_TABLE;
2277
+ if (input.charCodeAt(offset) !== firstChar) {
2278
+ return this.result === 0 ? 0 : this.emitNotTerminatedNamedEntity();
2279
+ }
2280
+ offset++;
2281
+ this.excess++;
2282
+ this.runConsumed++;
2283
+ }
2284
+ while (this.runConsumed < runLength) {
2285
+ if (offset >= input.length) {
2286
+ return -1;
2287
+ }
2288
+ const charIndexInPacked = this.runConsumed - 1;
2289
+ const packedWord = decodeTree[this.treeIndex + 1 + (charIndexInPacked >> 1)];
2290
+ const expectedChar = charIndexInPacked % 2 === 0 ? packedWord & 255 : packedWord >> 8 & 255;
2291
+ if (input.charCodeAt(offset) !== expectedChar) {
2292
+ this.runConsumed = 0;
2293
+ return this.result === 0 ? 0 : this.emitNotTerminatedNamedEntity();
2294
+ }
2295
+ offset++;
2296
+ this.excess++;
2297
+ this.runConsumed++;
2298
+ }
2299
+ this.runConsumed = 0;
2300
+ this.treeIndex += 1 + (runLength >> 1);
2301
+ current = decodeTree[this.treeIndex];
2302
+ valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
2303
+ }
2304
+ if (offset >= input.length)
2305
+ break;
2306
+ const char = input.charCodeAt(offset);
2307
+ if (char === CharCodes.SEMI && valueLength !== 0 && (current & BinTrieFlags.FLAG13) !== 0) {
2308
+ return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);
2309
+ }
2310
+ this.treeIndex = determineBranch(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char);
2311
+ if (this.treeIndex < 0) {
2312
+ return this.result === 0 || this.decodeMode === DecodingMode.Attribute && (valueLength === 0 || isEntityInAttributeInvalidEnd(char)) ? 0 : this.emitNotTerminatedNamedEntity();
2313
+ }
2314
+ current = decodeTree[this.treeIndex];
2315
+ valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
2316
+ if (valueLength !== 0) {
2317
+ if (char === CharCodes.SEMI) {
2318
+ return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);
2319
+ }
2320
+ if (this.decodeMode !== DecodingMode.Strict && (current & BinTrieFlags.FLAG13) === 0) {
2321
+ this.result = this.treeIndex;
2322
+ this.consumed += this.excess;
2323
+ this.excess = 0;
2324
+ }
2325
+ }
2326
+ offset++;
2327
+ this.excess++;
2328
+ }
2329
+ return -1;
2330
+ }
2331
+ emitNotTerminatedNamedEntity() {
2332
+ const { result, decodeTree } = this;
2333
+ const valueLength = (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14;
2334
+ this.emitNamedEntityData(result, valueLength, this.consumed);
2335
+ this.errors?.missingSemicolonAfterCharacterReference();
2336
+ return this.consumed;
2337
+ }
2338
+ emitNamedEntityData(result, valueLength, consumed) {
2339
+ const { decodeTree } = this;
2340
+ this.emitCodePoint(valueLength === 1 ? decodeTree[result] & ~(BinTrieFlags.VALUE_LENGTH | BinTrieFlags.FLAG13) : decodeTree[result + 1], consumed);
2341
+ if (valueLength === 3) {
2342
+ this.emitCodePoint(decodeTree[result + 2], consumed);
2343
+ }
2344
+ return consumed;
2345
+ }
2346
+ end() {
2347
+ switch (this.state) {
2348
+ case EntityDecoderState.NamedEntity: {
2349
+ return this.result !== 0 && (this.decodeMode !== DecodingMode.Attribute || this.result === this.treeIndex) ? this.emitNotTerminatedNamedEntity() : 0;
2350
+ }
2351
+ case EntityDecoderState.NumericDecimal: {
2352
+ return this.emitNumericEntity(0, 2);
2353
+ }
2354
+ case EntityDecoderState.NumericHex: {
2355
+ return this.emitNumericEntity(0, 3);
2356
+ }
2357
+ case EntityDecoderState.NumericStart: {
2358
+ this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed);
2359
+ return 0;
2360
+ }
2361
+ case EntityDecoderState.EntityStart: {
2362
+ return 0;
2363
+ }
2364
+ }
2365
+ }
2366
+ }
2367
+ function determineBranch(decodeTree, current, nodeIndex, char) {
2368
+ const branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;
2369
+ const jumpOffset = current & BinTrieFlags.JUMP_TABLE;
2370
+ if (branchCount === 0) {
2371
+ return jumpOffset !== 0 && char === jumpOffset ? nodeIndex : -1;
2372
+ }
2373
+ if (jumpOffset) {
2374
+ const value = char - jumpOffset;
2375
+ return value < 0 || value >= branchCount ? -1 : decodeTree[nodeIndex + value] - 1;
2376
+ }
2377
+ const packedKeySlots = branchCount + 1 >> 1;
2378
+ let lo = 0;
2379
+ let hi = branchCount - 1;
2380
+ while (lo <= hi) {
2381
+ const mid = lo + hi >>> 1;
2382
+ const slot = mid >> 1;
2383
+ const packed = decodeTree[nodeIndex + slot];
2384
+ const midKey = packed >> (mid & 1) * 8 & 255;
2385
+ if (midKey < char) {
2386
+ lo = mid + 1;
2387
+ } else if (midKey > char) {
2388
+ hi = mid - 1;
2389
+ } else {
2390
+ return decodeTree[nodeIndex + packedKeySlots + mid];
2391
+ }
2392
+ }
2393
+ return -1;
2394
+ }
2395
+ var CharCodes, TO_LOWER_BIT = 32, EntityDecoderState, DecodingMode;
2396
+ var init_decode = __esm(() => {
2397
+ init_decode_codepoint();
2398
+ init_bin_trie_flags();
2399
+ init_decode_data_html();
2400
+ init_decode_data_xml();
2401
+ (function(CharCodes2) {
2402
+ CharCodes2[CharCodes2["NUM"] = 35] = "NUM";
2403
+ CharCodes2[CharCodes2["SEMI"] = 59] = "SEMI";
2404
+ CharCodes2[CharCodes2["EQUALS"] = 61] = "EQUALS";
2405
+ CharCodes2[CharCodes2["ZERO"] = 48] = "ZERO";
2406
+ CharCodes2[CharCodes2["NINE"] = 57] = "NINE";
2407
+ CharCodes2[CharCodes2["LOWER_A"] = 97] = "LOWER_A";
2408
+ CharCodes2[CharCodes2["LOWER_F"] = 102] = "LOWER_F";
2409
+ CharCodes2[CharCodes2["LOWER_X"] = 120] = "LOWER_X";
2410
+ CharCodes2[CharCodes2["LOWER_Z"] = 122] = "LOWER_Z";
2411
+ CharCodes2[CharCodes2["UPPER_A"] = 65] = "UPPER_A";
2412
+ CharCodes2[CharCodes2["UPPER_F"] = 70] = "UPPER_F";
2413
+ CharCodes2[CharCodes2["UPPER_Z"] = 90] = "UPPER_Z";
2414
+ })(CharCodes || (CharCodes = {}));
2415
+ (function(EntityDecoderState2) {
2416
+ EntityDecoderState2[EntityDecoderState2["EntityStart"] = 0] = "EntityStart";
2417
+ EntityDecoderState2[EntityDecoderState2["NumericStart"] = 1] = "NumericStart";
2418
+ EntityDecoderState2[EntityDecoderState2["NumericDecimal"] = 2] = "NumericDecimal";
2419
+ EntityDecoderState2[EntityDecoderState2["NumericHex"] = 3] = "NumericHex";
2420
+ EntityDecoderState2[EntityDecoderState2["NamedEntity"] = 4] = "NamedEntity";
2421
+ })(EntityDecoderState || (EntityDecoderState = {}));
2422
+ (function(DecodingMode2) {
2423
+ DecodingMode2[DecodingMode2["Legacy"] = 0] = "Legacy";
2424
+ DecodingMode2[DecodingMode2["Strict"] = 1] = "Strict";
2425
+ DecodingMode2[DecodingMode2["Attribute"] = 2] = "Attribute";
2426
+ })(DecodingMode || (DecodingMode = {}));
2427
+ });
2428
+
2429
+ // node_modules/htmlparser2/dist/Tokenizer.js
2430
+ function isWhitespace(c) {
2431
+ return c === CharCodes2.Space || c === CharCodes2.NewLine || c === CharCodes2.Tab || c === CharCodes2.FormFeed || c === CharCodes2.CarriageReturn;
2432
+ }
2433
+ function isEndOfTagSection(c) {
2434
+ return c === CharCodes2.Slash || c === CharCodes2.Gt || isWhitespace(c);
2435
+ }
2436
+ function isASCIIAlpha(c) {
2437
+ return c >= CharCodes2.LowerA && c <= CharCodes2.LowerZ || c >= CharCodes2.UpperA && c <= CharCodes2.UpperZ;
2438
+ }
2439
+
2440
+ class Tokenizer {
2441
+ cbs;
2442
+ state = State.Text;
2443
+ buffer = "";
2444
+ sectionStart = 0;
2445
+ index = 0;
2446
+ entityStart = 0;
2447
+ baseState = State.Text;
2448
+ isSpecial = false;
2449
+ running = true;
2450
+ offset = 0;
2451
+ xmlMode;
2452
+ decodeEntities;
2453
+ recognizeSelfClosing;
2454
+ entityDecoder;
2455
+ constructor({ xmlMode = false, decodeEntities = true, recognizeSelfClosing = xmlMode }, cbs) {
2456
+ this.cbs = cbs;
2457
+ this.xmlMode = xmlMode;
2458
+ this.decodeEntities = decodeEntities;
2459
+ this.recognizeSelfClosing = recognizeSelfClosing;
2460
+ this.entityDecoder = new EntityDecoder(xmlMode ? xmlDecodeTree : htmlDecodeTree, (cp, consumed) => this.emitCodePoint(cp, consumed));
2461
+ }
2462
+ reset() {
2463
+ this.state = State.Text;
2464
+ this.buffer = "";
2465
+ this.sectionStart = 0;
2466
+ this.index = 0;
2467
+ this.baseState = State.Text;
2468
+ this.isSpecial = false;
2469
+ this.currentSequence = Sequences.Empty;
2470
+ this.sequenceIndex = 0;
2471
+ this.running = true;
2472
+ this.offset = 0;
2473
+ }
2474
+ write(chunk) {
2475
+ this.offset += this.buffer.length;
2476
+ this.buffer = chunk;
2477
+ this.parse();
2478
+ }
2479
+ end() {
2480
+ if (this.running)
2481
+ this.finish();
2482
+ }
2483
+ pause() {
2484
+ this.running = false;
2485
+ }
2486
+ resume() {
2487
+ this.running = true;
2488
+ if (this.index < this.buffer.length + this.offset) {
2489
+ this.parse();
2490
+ }
2491
+ }
2492
+ stateText(c) {
2493
+ if (c === CharCodes2.Lt || !this.decodeEntities && this.fastForwardTo(CharCodes2.Lt)) {
2494
+ if (this.index > this.sectionStart) {
2495
+ this.cbs.ontext(this.sectionStart, this.index);
2496
+ }
2497
+ this.state = State.BeforeTagName;
2498
+ this.sectionStart = this.index;
2499
+ } else if (this.decodeEntities && c === CharCodes2.Amp) {
2500
+ this.startEntity();
2501
+ }
2502
+ }
2503
+ currentSequence = Sequences.Empty;
2504
+ sequenceIndex = 0;
2505
+ enterTagBody() {
2506
+ if (this.currentSequence === Sequences.Plaintext) {
2507
+ this.currentSequence = Sequences.Empty;
2508
+ this.state = State.InPlainText;
2509
+ } else if (this.isSpecial) {
2510
+ this.state = State.InSpecialTag;
2511
+ this.sequenceIndex = 0;
2512
+ } else {
2513
+ this.state = State.Text;
2514
+ }
2515
+ }
2516
+ stateSpecialStartSequence(c) {
2517
+ const lower = c | 32;
2518
+ if (this.sequenceIndex < this.currentSequence.length) {
2519
+ if (lower === this.currentSequence[this.sequenceIndex]) {
2520
+ this.sequenceIndex++;
2521
+ return;
2522
+ }
2523
+ if (this.sequenceIndex === 3) {
2524
+ if (this.currentSequence === Sequences.ScriptEnd && lower === Sequences.StyleEnd[3]) {
2525
+ this.currentSequence = Sequences.StyleEnd;
2526
+ this.sequenceIndex = 4;
2527
+ return;
2528
+ }
2529
+ if (this.currentSequence === Sequences.TitleEnd && lower === Sequences.TextareaEnd[3]) {
2530
+ this.currentSequence = Sequences.TextareaEnd;
2531
+ this.sequenceIndex = 4;
2532
+ return;
2533
+ }
2534
+ } else if (this.sequenceIndex === 4 && this.currentSequence === Sequences.NoembedEnd && lower === Sequences.NoframesEnd[4]) {
2535
+ this.currentSequence = Sequences.NoframesEnd;
2536
+ this.sequenceIndex = 5;
2537
+ return;
2538
+ }
2539
+ } else if (isEndOfTagSection(c)) {
2540
+ this.sequenceIndex = 0;
2541
+ this.state = State.InTagName;
2542
+ this.stateInTagName(c);
2543
+ return;
2544
+ }
2545
+ this.isSpecial = false;
2546
+ this.currentSequence = Sequences.Empty;
2547
+ this.sequenceIndex = 0;
2548
+ this.state = State.InTagName;
2549
+ this.stateInTagName(c);
2550
+ }
2551
+ stateCDATASequence(c) {
2552
+ if (c === Sequences.Cdata[this.sequenceIndex]) {
2553
+ if (++this.sequenceIndex === Sequences.Cdata.length) {
2554
+ this.state = State.InCommentLike;
2555
+ this.currentSequence = Sequences.CdataEnd;
2556
+ this.sequenceIndex = 0;
2557
+ this.sectionStart = this.index + 1;
2558
+ }
2559
+ } else {
2560
+ this.sequenceIndex = 0;
2561
+ if (this.xmlMode) {
2562
+ this.state = State.InDeclaration;
2563
+ this.stateInDeclaration(c);
2564
+ } else {
2565
+ this.state = State.InSpecialComment;
2566
+ this.stateInSpecialComment(c);
2567
+ }
2568
+ }
2569
+ }
2570
+ fastForwardTo(c) {
2571
+ while (++this.index < this.buffer.length + this.offset) {
2572
+ if (this.buffer.charCodeAt(this.index - this.offset) === c) {
2573
+ return true;
2574
+ }
2575
+ }
2576
+ this.index = this.buffer.length + this.offset - 1;
2577
+ return false;
2578
+ }
2579
+ emitComment(offset) {
2580
+ this.cbs.oncomment(this.sectionStart, this.index, offset);
2581
+ this.sequenceIndex = 0;
2582
+ this.sectionStart = this.index + 1;
2583
+ this.state = State.Text;
2584
+ }
2585
+ stateInCommentLike(c) {
2586
+ if (!this.xmlMode && this.currentSequence === Sequences.CommentEnd && this.sequenceIndex <= 1 && this.index === this.sectionStart + this.sequenceIndex && c === CharCodes2.Gt) {
2587
+ this.emitComment(this.sequenceIndex);
2588
+ } else if (this.currentSequence === Sequences.CommentEnd && this.sequenceIndex === 2 && c === CharCodes2.Gt) {
2589
+ this.emitComment(2);
2590
+ } else if (this.currentSequence === Sequences.CommentEnd && this.sequenceIndex === this.currentSequence.length - 1 && c !== CharCodes2.Gt) {
2591
+ this.sequenceIndex = Number(c === CharCodes2.Dash);
2592
+ } else if (c === this.currentSequence[this.sequenceIndex]) {
2593
+ if (++this.sequenceIndex === this.currentSequence.length) {
2594
+ if (this.currentSequence === Sequences.CdataEnd) {
2595
+ this.cbs.oncdata(this.sectionStart, this.index, 2);
2596
+ } else {
2597
+ this.cbs.oncomment(this.sectionStart, this.index, 3);
2598
+ }
2599
+ this.sequenceIndex = 0;
2600
+ this.sectionStart = this.index + 1;
2601
+ this.state = State.Text;
2602
+ }
2603
+ } else if (this.sequenceIndex === 0) {
2604
+ if (this.fastForwardTo(this.currentSequence[0])) {
2605
+ this.sequenceIndex = 1;
2606
+ }
2607
+ } else if (c !== this.currentSequence[this.sequenceIndex - 1]) {
2608
+ this.sequenceIndex = 0;
2609
+ }
2610
+ }
2611
+ isTagStartChar(c) {
2612
+ return this.xmlMode ? !isEndOfTagSection(c) : isASCIIAlpha(c);
2613
+ }
2614
+ stateInSpecialTag(c) {
2615
+ if (this.sequenceIndex === this.currentSequence.length) {
2616
+ if (isEndOfTagSection(c)) {
2617
+ const endOfText = this.index - this.currentSequence.length;
2618
+ if (this.sectionStart < endOfText) {
2619
+ const actualIndex = this.index;
2620
+ this.index = endOfText;
2621
+ this.cbs.ontext(this.sectionStart, endOfText);
2622
+ this.index = actualIndex;
2623
+ }
2624
+ this.isSpecial = false;
2625
+ this.sectionStart = endOfText + 2;
2626
+ this.stateInClosingTagName(c);
2627
+ return;
2628
+ }
2629
+ this.sequenceIndex = 0;
2630
+ }
2631
+ if ((c | 32) === this.currentSequence[this.sequenceIndex]) {
2632
+ this.sequenceIndex += 1;
2633
+ } else if (this.sequenceIndex === 0) {
2634
+ if (this.currentSequence === Sequences.TitleEnd || this.currentSequence === Sequences.TextareaEnd) {
2635
+ if (this.decodeEntities && c === CharCodes2.Amp) {
2636
+ this.startEntity();
2637
+ }
2638
+ } else if (this.fastForwardTo(CharCodes2.Lt)) {
2639
+ this.sequenceIndex = 1;
2640
+ }
2641
+ } else {
2642
+ this.sequenceIndex = Number(c === CharCodes2.Lt);
2643
+ }
2644
+ }
2645
+ stateBeforeTagName(c) {
2646
+ if (c === CharCodes2.ExclamationMark) {
2647
+ this.state = State.BeforeDeclaration;
2648
+ this.sectionStart = this.index + 1;
2649
+ } else if (c === CharCodes2.Questionmark) {
2650
+ if (this.xmlMode) {
2651
+ this.state = State.InProcessingInstruction;
2652
+ this.sequenceIndex = 0;
2653
+ this.sectionStart = this.index + 1;
2654
+ } else {
2655
+ this.state = State.InSpecialComment;
2656
+ this.sectionStart = this.index;
2657
+ }
2658
+ } else if (this.isTagStartChar(c)) {
2659
+ this.sectionStart = this.index;
2660
+ const special = this.xmlMode || this.cbs.isInForeignContext?.() ? undefined : specialStartSequences.get(c | 32);
2661
+ if (special === undefined) {
2662
+ this.state = State.InTagName;
2663
+ } else {
2664
+ this.isSpecial = true;
2665
+ this.currentSequence = special;
2666
+ this.sequenceIndex = 3;
2667
+ this.state = State.SpecialStartSequence;
2668
+ }
2669
+ } else if (c === CharCodes2.Slash) {
2670
+ this.state = State.BeforeClosingTagName;
2671
+ } else {
2672
+ this.state = State.Text;
2673
+ this.stateText(c);
2674
+ }
2675
+ }
2676
+ stateInTagName(c) {
2677
+ if (isEndOfTagSection(c)) {
2678
+ this.cbs.onopentagname(this.sectionStart, this.index);
2679
+ this.sectionStart = -1;
2680
+ this.state = State.BeforeAttributeName;
2681
+ this.stateBeforeAttributeName(c);
2682
+ }
2683
+ }
2684
+ stateBeforeClosingTagName(c) {
2685
+ if (isWhitespace(c)) {
2686
+ if (this.xmlMode) {} else {
2687
+ this.state = State.InSpecialComment;
2688
+ this.sectionStart = this.index;
2689
+ }
2690
+ } else if (c === CharCodes2.Gt) {
2691
+ this.state = State.Text;
2692
+ if (!this.xmlMode) {
2693
+ this.sectionStart = this.index + 1;
2694
+ }
2695
+ } else {
2696
+ this.state = this.isTagStartChar(c) ? State.InClosingTagName : State.InSpecialComment;
2697
+ this.sectionStart = this.index;
2698
+ }
2699
+ }
2700
+ stateInClosingTagName(c) {
2701
+ if (isEndOfTagSection(c)) {
2702
+ this.cbs.onclosetag(this.sectionStart, this.index);
2703
+ this.sectionStart = -1;
2704
+ this.state = State.AfterClosingTagName;
2705
+ this.stateAfterClosingTagName(c);
2706
+ }
2707
+ }
2708
+ stateAfterClosingTagName(c) {
2709
+ if (c === CharCodes2.Gt || this.fastForwardTo(CharCodes2.Gt)) {
2710
+ this.state = State.Text;
2711
+ this.sectionStart = this.index + 1;
2712
+ }
2713
+ }
2714
+ stateBeforeAttributeName(c) {
2715
+ if (c === CharCodes2.Gt) {
2716
+ this.cbs.onopentagend(this.index);
2717
+ this.enterTagBody();
2718
+ this.sectionStart = this.index + 1;
2719
+ } else if (c === CharCodes2.Slash) {
2720
+ this.state = State.InSelfClosingTag;
2721
+ } else if (!isWhitespace(c)) {
2722
+ this.state = State.InAttributeName;
2723
+ this.sectionStart = this.index;
2724
+ }
2725
+ }
2726
+ stateInSelfClosingTag(c) {
2727
+ if (c === CharCodes2.Gt) {
2728
+ this.cbs.onselfclosingtag(this.index);
2729
+ this.sectionStart = this.index + 1;
2730
+ if (!this.recognizeSelfClosing) {
2731
+ this.enterTagBody();
2732
+ return;
2733
+ }
2734
+ this.state = State.Text;
2735
+ this.isSpecial = false;
2736
+ this.currentSequence = Sequences.Empty;
2737
+ } else if (!isWhitespace(c)) {
2738
+ this.state = State.BeforeAttributeName;
2739
+ this.stateBeforeAttributeName(c);
2740
+ }
2741
+ }
2742
+ stateInAttributeName(c) {
2743
+ if (c === CharCodes2.Eq || isEndOfTagSection(c)) {
2744
+ this.cbs.onattribname(this.sectionStart, this.index);
2745
+ this.sectionStart = this.index;
2746
+ this.state = State.AfterAttributeName;
2747
+ this.stateAfterAttributeName(c);
2748
+ }
2749
+ }
2750
+ stateAfterAttributeName(c) {
2751
+ if (c === CharCodes2.Eq) {
2752
+ this.state = State.BeforeAttributeValue;
2753
+ } else if (c === CharCodes2.Slash || c === CharCodes2.Gt) {
2754
+ this.cbs.onattribend(QuoteType.NoValue, this.sectionStart);
2755
+ this.sectionStart = -1;
2756
+ this.state = State.BeforeAttributeName;
2757
+ this.stateBeforeAttributeName(c);
2758
+ } else if (!isWhitespace(c)) {
2759
+ this.cbs.onattribend(QuoteType.NoValue, this.sectionStart);
2760
+ this.state = State.InAttributeName;
2761
+ this.sectionStart = this.index;
2762
+ }
2763
+ }
2764
+ stateBeforeAttributeValue(c) {
2765
+ if (c === CharCodes2.DoubleQuote) {
2766
+ this.state = State.InAttributeValueDq;
2767
+ this.sectionStart = this.index + 1;
2768
+ } else if (c === CharCodes2.SingleQuote) {
2769
+ this.state = State.InAttributeValueSq;
2770
+ this.sectionStart = this.index + 1;
2771
+ } else if (!isWhitespace(c)) {
2772
+ this.sectionStart = this.index;
2773
+ this.state = State.InAttributeValueNq;
2774
+ this.stateInAttributeValueNoQuotes(c);
2775
+ }
2776
+ }
2777
+ handleInAttributeValue(c, quote) {
2778
+ if (c === quote || !this.decodeEntities && this.fastForwardTo(quote)) {
2779
+ this.cbs.onattribdata(this.sectionStart, this.index);
2780
+ this.sectionStart = -1;
2781
+ this.cbs.onattribend(quote === CharCodes2.DoubleQuote ? QuoteType.Double : QuoteType.Single, this.index + 1);
2782
+ this.state = State.BeforeAttributeName;
2783
+ } else if (this.decodeEntities && c === CharCodes2.Amp) {
2784
+ this.startEntity();
2785
+ }
2786
+ }
2787
+ stateInAttributeValueDoubleQuotes(c) {
2788
+ this.handleInAttributeValue(c, CharCodes2.DoubleQuote);
2789
+ }
2790
+ stateInAttributeValueSingleQuotes(c) {
2791
+ this.handleInAttributeValue(c, CharCodes2.SingleQuote);
2792
+ }
2793
+ stateInAttributeValueNoQuotes(c) {
2794
+ if (isWhitespace(c) || c === CharCodes2.Gt) {
2795
+ this.cbs.onattribdata(this.sectionStart, this.index);
2796
+ this.sectionStart = -1;
2797
+ this.cbs.onattribend(QuoteType.Unquoted, this.index);
2798
+ this.state = State.BeforeAttributeName;
2799
+ this.stateBeforeAttributeName(c);
2800
+ } else if (this.decodeEntities && c === CharCodes2.Amp) {
2801
+ this.startEntity();
2802
+ }
2803
+ }
2804
+ stateBeforeDeclaration(c) {
2805
+ if (c === CharCodes2.OpeningSquareBracket) {
2806
+ this.state = State.CDATASequence;
2807
+ this.sequenceIndex = 0;
2808
+ } else if (this.xmlMode) {
2809
+ this.state = c === CharCodes2.Dash ? State.BeforeComment : State.InDeclaration;
2810
+ } else if ((c | 32) === Sequences.Doctype[0]) {
2811
+ this.state = State.DeclarationSequence;
2812
+ this.currentSequence = Sequences.Doctype;
2813
+ this.sequenceIndex = 1;
2814
+ } else if (c === CharCodes2.Gt) {
2815
+ this.cbs.oncomment(this.sectionStart, this.index, 0);
2816
+ this.state = State.Text;
2817
+ this.sectionStart = this.index + 1;
2818
+ } else if (c === CharCodes2.Dash) {
2819
+ this.state = State.BeforeComment;
2820
+ } else {
2821
+ this.state = State.InSpecialComment;
2822
+ }
2823
+ }
2824
+ stateDeclarationSequence(c) {
2825
+ if (this.sequenceIndex === this.currentSequence.length) {
2826
+ this.state = State.InDeclaration;
2827
+ this.stateInDeclaration(c);
2828
+ } else if ((c | 32) === this.currentSequence[this.sequenceIndex]) {
2829
+ this.sequenceIndex += 1;
2830
+ } else if (c === CharCodes2.Gt) {
2831
+ this.cbs.oncomment(this.sectionStart, this.index, 0);
2832
+ this.state = State.Text;
2833
+ this.sectionStart = this.index + 1;
2834
+ } else {
2835
+ this.state = State.InSpecialComment;
2836
+ }
2837
+ }
2838
+ stateInDeclaration(c) {
2839
+ if (c === CharCodes2.Gt || this.fastForwardTo(CharCodes2.Gt)) {
2840
+ this.cbs.ondeclaration(this.sectionStart, this.index);
2841
+ this.state = State.Text;
2842
+ this.sectionStart = this.index + 1;
2843
+ }
2844
+ }
2845
+ stateInProcessingInstruction(c) {
2846
+ if (c === CharCodes2.Questionmark) {
2847
+ this.sequenceIndex = 1;
2848
+ } else if (c === CharCodes2.Gt && this.sequenceIndex === 1) {
2849
+ this.cbs.onprocessinginstruction(this.sectionStart, this.index - 1);
2850
+ this.sequenceIndex = 0;
2851
+ this.state = State.Text;
2852
+ this.sectionStart = this.index + 1;
2853
+ } else {
2854
+ this.sequenceIndex = Number(this.fastForwardTo(CharCodes2.Questionmark));
2855
+ }
2856
+ }
2857
+ stateBeforeComment(c) {
2858
+ if (c === CharCodes2.Dash) {
2859
+ this.state = State.InCommentLike;
2860
+ this.currentSequence = Sequences.CommentEnd;
2861
+ this.sequenceIndex = 0;
2862
+ this.sectionStart = this.index + 1;
2863
+ } else if (this.xmlMode) {
2864
+ this.state = State.InDeclaration;
2865
+ } else if (c === CharCodes2.Gt) {
2866
+ this.cbs.oncomment(this.sectionStart, this.index, 0);
2867
+ this.state = State.Text;
2868
+ this.sectionStart = this.index + 1;
2869
+ } else {
2870
+ this.state = State.InSpecialComment;
2871
+ }
2872
+ }
2873
+ stateInSpecialComment(c) {
2874
+ if (c === CharCodes2.Gt || this.fastForwardTo(CharCodes2.Gt)) {
2875
+ this.cbs.oncomment(this.sectionStart, this.index, 0);
2876
+ this.state = State.Text;
2877
+ this.sectionStart = this.index + 1;
2878
+ }
2879
+ }
2880
+ startEntity() {
2881
+ this.baseState = this.state;
2882
+ this.state = State.InEntity;
2883
+ this.entityStart = this.index;
2884
+ this.entityDecoder.startEntity(this.xmlMode ? DecodingMode.Strict : this.baseState === State.Text || this.baseState === State.InSpecialTag ? DecodingMode.Legacy : DecodingMode.Attribute);
2885
+ }
2886
+ stateInEntity() {
2887
+ const indexInBuffer = this.index - this.offset;
2888
+ const length = this.entityDecoder.write(this.buffer, indexInBuffer);
2889
+ if (length >= 0) {
2890
+ this.state = this.baseState;
2891
+ if (length === 0) {
2892
+ this.index -= 1;
2893
+ }
2894
+ } else {
2895
+ if (indexInBuffer < this.buffer.length && this.buffer.charCodeAt(indexInBuffer) === CharCodes2.Amp) {
2896
+ this.state = this.baseState;
2897
+ this.index -= 1;
2898
+ return;
2899
+ }
2900
+ this.index = this.offset + this.buffer.length - 1;
2901
+ }
2902
+ }
2903
+ cleanup() {
2904
+ if (this.running && this.sectionStart !== this.index) {
2905
+ if (this.state === State.Text || this.state === State.InPlainText || this.state === State.InSpecialTag && this.sequenceIndex === 0) {
2906
+ this.cbs.ontext(this.sectionStart, this.index);
2907
+ this.sectionStart = this.index;
2908
+ } else if (this.state === State.InAttributeValueDq || this.state === State.InAttributeValueSq || this.state === State.InAttributeValueNq) {
2909
+ this.cbs.onattribdata(this.sectionStart, this.index);
2910
+ this.sectionStart = this.index;
2911
+ }
2912
+ }
2913
+ }
2914
+ shouldContinue() {
2915
+ return this.index < this.buffer.length + this.offset && this.running;
2916
+ }
2917
+ parse() {
2918
+ while (this.shouldContinue()) {
2919
+ const c = this.buffer.charCodeAt(this.index - this.offset);
2920
+ switch (this.state) {
2921
+ case State.Text: {
2922
+ this.stateText(c);
2923
+ break;
2924
+ }
2925
+ case State.InPlainText: {
2926
+ this.index = this.buffer.length + this.offset - 1;
2927
+ break;
2928
+ }
2929
+ case State.SpecialStartSequence: {
2930
+ this.stateSpecialStartSequence(c);
2931
+ break;
2932
+ }
2933
+ case State.InSpecialTag: {
2934
+ this.stateInSpecialTag(c);
2935
+ break;
2936
+ }
2937
+ case State.CDATASequence: {
2938
+ this.stateCDATASequence(c);
2939
+ break;
2940
+ }
2941
+ case State.DeclarationSequence: {
2942
+ this.stateDeclarationSequence(c);
2943
+ break;
2944
+ }
2945
+ case State.InAttributeValueDq: {
2946
+ this.stateInAttributeValueDoubleQuotes(c);
2947
+ break;
2948
+ }
2949
+ case State.InAttributeName: {
2950
+ this.stateInAttributeName(c);
2951
+ break;
2952
+ }
2953
+ case State.InCommentLike: {
2954
+ this.stateInCommentLike(c);
2955
+ break;
2956
+ }
2957
+ case State.InSpecialComment: {
2958
+ this.stateInSpecialComment(c);
2959
+ break;
2960
+ }
2961
+ case State.BeforeAttributeName: {
2962
+ this.stateBeforeAttributeName(c);
2963
+ break;
2964
+ }
2965
+ case State.InTagName: {
2966
+ this.stateInTagName(c);
2967
+ break;
2968
+ }
2969
+ case State.InClosingTagName: {
2970
+ this.stateInClosingTagName(c);
2971
+ break;
2972
+ }
2973
+ case State.BeforeTagName: {
2974
+ this.stateBeforeTagName(c);
2975
+ break;
2976
+ }
2977
+ case State.AfterAttributeName: {
2978
+ this.stateAfterAttributeName(c);
2979
+ break;
2980
+ }
2981
+ case State.InAttributeValueSq: {
2982
+ this.stateInAttributeValueSingleQuotes(c);
2983
+ break;
2984
+ }
2985
+ case State.BeforeAttributeValue: {
2986
+ this.stateBeforeAttributeValue(c);
2987
+ break;
2988
+ }
2989
+ case State.BeforeClosingTagName: {
2990
+ this.stateBeforeClosingTagName(c);
2991
+ break;
2992
+ }
2993
+ case State.AfterClosingTagName: {
2994
+ this.stateAfterClosingTagName(c);
2995
+ break;
2996
+ }
2997
+ case State.InAttributeValueNq: {
2998
+ this.stateInAttributeValueNoQuotes(c);
2999
+ break;
3000
+ }
3001
+ case State.InSelfClosingTag: {
3002
+ this.stateInSelfClosingTag(c);
3003
+ break;
3004
+ }
3005
+ case State.InDeclaration: {
3006
+ this.stateInDeclaration(c);
3007
+ break;
3008
+ }
3009
+ case State.BeforeDeclaration: {
3010
+ this.stateBeforeDeclaration(c);
3011
+ break;
3012
+ }
3013
+ case State.BeforeComment: {
3014
+ this.stateBeforeComment(c);
3015
+ break;
3016
+ }
3017
+ case State.InProcessingInstruction: {
3018
+ this.stateInProcessingInstruction(c);
3019
+ break;
3020
+ }
3021
+ case State.InEntity: {
3022
+ this.stateInEntity();
3023
+ break;
3024
+ }
3025
+ }
3026
+ this.index++;
3027
+ }
3028
+ this.cleanup();
3029
+ }
3030
+ finish() {
3031
+ if (this.state === State.InEntity) {
3032
+ this.entityDecoder.end();
3033
+ this.state = this.baseState;
3034
+ }
3035
+ this.handleTrailingData();
3036
+ this.cbs.onend();
3037
+ }
3038
+ handleTrailingCommentLikeData(endIndex) {
3039
+ if (this.state !== State.InCommentLike) {
3040
+ return false;
3041
+ }
3042
+ if (this.currentSequence === Sequences.CdataEnd) {
3043
+ if (this.xmlMode) {
3044
+ if (this.sectionStart < endIndex) {
3045
+ this.cbs.oncdata(this.sectionStart, endIndex, 0);
3046
+ }
3047
+ } else {
3048
+ const cdataStart = this.sectionStart - Sequences.Cdata.length - 1;
3049
+ this.cbs.oncomment(cdataStart, endIndex, 0);
3050
+ }
3051
+ } else {
3052
+ const offset = this.xmlMode ? 0 : Math.min(this.sequenceIndex, Sequences.CommentEnd.length - 1);
3053
+ this.cbs.oncomment(this.sectionStart, endIndex, offset);
3054
+ }
3055
+ return true;
3056
+ }
3057
+ handleTrailingMarkupDeclaration(endIndex) {
3058
+ if (this.xmlMode) {
3059
+ switch (this.state) {
3060
+ case State.InSpecialComment:
3061
+ case State.BeforeComment:
3062
+ case State.CDATASequence:
3063
+ case State.DeclarationSequence:
3064
+ case State.InDeclaration: {
3065
+ this.cbs.ontext(this.sectionStart, endIndex);
3066
+ return true;
3067
+ }
3068
+ default: {
3069
+ return false;
3070
+ }
3071
+ }
3072
+ }
3073
+ switch (this.state) {
3074
+ case State.BeforeDeclaration:
3075
+ case State.InSpecialComment:
3076
+ case State.BeforeComment:
3077
+ case State.CDATASequence: {
3078
+ this.cbs.oncomment(this.sectionStart, endIndex, 0);
3079
+ return true;
3080
+ }
3081
+ case State.DeclarationSequence: {
3082
+ if (this.sequenceIndex !== Sequences.Doctype.length) {
3083
+ this.cbs.oncomment(this.sectionStart, endIndex, 0);
3084
+ }
3085
+ return true;
3086
+ }
3087
+ case State.InDeclaration: {
3088
+ return true;
3089
+ }
3090
+ default: {
3091
+ return false;
3092
+ }
3093
+ }
3094
+ }
3095
+ handleTrailingData() {
3096
+ const endIndex = this.buffer.length + this.offset;
3097
+ if (this.handleTrailingCommentLikeData(endIndex) || this.handleTrailingMarkupDeclaration(endIndex)) {
3098
+ return;
3099
+ }
3100
+ if (this.sectionStart >= endIndex) {
3101
+ return;
3102
+ }
3103
+ switch (this.state) {
3104
+ case State.InTagName:
3105
+ case State.BeforeAttributeName:
3106
+ case State.BeforeAttributeValue:
3107
+ case State.AfterAttributeName:
3108
+ case State.InAttributeName:
3109
+ case State.InAttributeValueSq:
3110
+ case State.InAttributeValueDq:
3111
+ case State.InAttributeValueNq:
3112
+ case State.InClosingTagName: {
3113
+ break;
3114
+ }
3115
+ default: {
3116
+ this.cbs.ontext(this.sectionStart, endIndex);
3117
+ }
3118
+ }
3119
+ }
3120
+ emitCodePoint(cp, consumed) {
3121
+ if (this.baseState !== State.Text && this.baseState !== State.InSpecialTag) {
3122
+ if (this.sectionStart < this.entityStart) {
3123
+ this.cbs.onattribdata(this.sectionStart, this.entityStart);
3124
+ }
3125
+ this.sectionStart = this.entityStart + consumed;
3126
+ this.index = this.sectionStart - 1;
3127
+ this.cbs.onattribentity(cp);
3128
+ } else {
3129
+ if (this.sectionStart < this.entityStart) {
3130
+ this.cbs.ontext(this.sectionStart, this.entityStart);
3131
+ }
3132
+ this.sectionStart = this.entityStart + consumed;
3133
+ this.index = this.sectionStart - 1;
3134
+ this.cbs.ontextentity(cp, this.sectionStart);
3135
+ }
3136
+ }
3137
+ }
3138
+ var CharCodes2, State, QuoteType, Sequences, specialStartSequences;
3139
+ var init_Tokenizer = __esm(() => {
3140
+ init_decode();
3141
+ (function(CharCodes3) {
3142
+ CharCodes3[CharCodes3["Tab"] = 9] = "Tab";
3143
+ CharCodes3[CharCodes3["NewLine"] = 10] = "NewLine";
3144
+ CharCodes3[CharCodes3["FormFeed"] = 12] = "FormFeed";
3145
+ CharCodes3[CharCodes3["CarriageReturn"] = 13] = "CarriageReturn";
3146
+ CharCodes3[CharCodes3["Space"] = 32] = "Space";
3147
+ CharCodes3[CharCodes3["ExclamationMark"] = 33] = "ExclamationMark";
3148
+ CharCodes3[CharCodes3["Number"] = 35] = "Number";
3149
+ CharCodes3[CharCodes3["Amp"] = 38] = "Amp";
3150
+ CharCodes3[CharCodes3["SingleQuote"] = 39] = "SingleQuote";
3151
+ CharCodes3[CharCodes3["DoubleQuote"] = 34] = "DoubleQuote";
3152
+ CharCodes3[CharCodes3["Dash"] = 45] = "Dash";
3153
+ CharCodes3[CharCodes3["Slash"] = 47] = "Slash";
3154
+ CharCodes3[CharCodes3["Zero"] = 48] = "Zero";
3155
+ CharCodes3[CharCodes3["Nine"] = 57] = "Nine";
3156
+ CharCodes3[CharCodes3["Semi"] = 59] = "Semi";
3157
+ CharCodes3[CharCodes3["Lt"] = 60] = "Lt";
3158
+ CharCodes3[CharCodes3["Eq"] = 61] = "Eq";
3159
+ CharCodes3[CharCodes3["Gt"] = 62] = "Gt";
3160
+ CharCodes3[CharCodes3["Questionmark"] = 63] = "Questionmark";
3161
+ CharCodes3[CharCodes3["UpperA"] = 65] = "UpperA";
3162
+ CharCodes3[CharCodes3["LowerA"] = 97] = "LowerA";
3163
+ CharCodes3[CharCodes3["UpperF"] = 70] = "UpperF";
3164
+ CharCodes3[CharCodes3["LowerF"] = 102] = "LowerF";
3165
+ CharCodes3[CharCodes3["UpperZ"] = 90] = "UpperZ";
3166
+ CharCodes3[CharCodes3["LowerZ"] = 122] = "LowerZ";
3167
+ CharCodes3[CharCodes3["LowerX"] = 120] = "LowerX";
3168
+ CharCodes3[CharCodes3["OpeningSquareBracket"] = 91] = "OpeningSquareBracket";
3169
+ })(CharCodes2 || (CharCodes2 = {}));
3170
+ (function(State2) {
3171
+ State2[State2["Text"] = 1] = "Text";
3172
+ State2[State2["BeforeTagName"] = 2] = "BeforeTagName";
3173
+ State2[State2["InTagName"] = 3] = "InTagName";
3174
+ State2[State2["InSelfClosingTag"] = 4] = "InSelfClosingTag";
3175
+ State2[State2["BeforeClosingTagName"] = 5] = "BeforeClosingTagName";
3176
+ State2[State2["InClosingTagName"] = 6] = "InClosingTagName";
3177
+ State2[State2["AfterClosingTagName"] = 7] = "AfterClosingTagName";
3178
+ State2[State2["BeforeAttributeName"] = 8] = "BeforeAttributeName";
3179
+ State2[State2["InAttributeName"] = 9] = "InAttributeName";
3180
+ State2[State2["AfterAttributeName"] = 10] = "AfterAttributeName";
3181
+ State2[State2["BeforeAttributeValue"] = 11] = "BeforeAttributeValue";
3182
+ State2[State2["InAttributeValueDq"] = 12] = "InAttributeValueDq";
3183
+ State2[State2["InAttributeValueSq"] = 13] = "InAttributeValueSq";
3184
+ State2[State2["InAttributeValueNq"] = 14] = "InAttributeValueNq";
3185
+ State2[State2["BeforeDeclaration"] = 15] = "BeforeDeclaration";
3186
+ State2[State2["InDeclaration"] = 16] = "InDeclaration";
3187
+ State2[State2["InProcessingInstruction"] = 17] = "InProcessingInstruction";
3188
+ State2[State2["BeforeComment"] = 18] = "BeforeComment";
3189
+ State2[State2["CDATASequence"] = 19] = "CDATASequence";
3190
+ State2[State2["DeclarationSequence"] = 20] = "DeclarationSequence";
3191
+ State2[State2["InSpecialComment"] = 21] = "InSpecialComment";
3192
+ State2[State2["InCommentLike"] = 22] = "InCommentLike";
3193
+ State2[State2["SpecialStartSequence"] = 23] = "SpecialStartSequence";
3194
+ State2[State2["InSpecialTag"] = 24] = "InSpecialTag";
3195
+ State2[State2["InPlainText"] = 25] = "InPlainText";
3196
+ State2[State2["InEntity"] = 26] = "InEntity";
3197
+ })(State || (State = {}));
3198
+ (function(QuoteType2) {
3199
+ QuoteType2[QuoteType2["NoValue"] = 0] = "NoValue";
3200
+ QuoteType2[QuoteType2["Unquoted"] = 1] = "Unquoted";
3201
+ QuoteType2[QuoteType2["Single"] = 2] = "Single";
3202
+ QuoteType2[QuoteType2["Double"] = 3] = "Double";
3203
+ })(QuoteType || (QuoteType = {}));
3204
+ Sequences = {
3205
+ Empty: new Uint8Array(0),
3206
+ Cdata: new Uint8Array([67, 68, 65, 84, 65, 91]),
3207
+ CdataEnd: new Uint8Array([93, 93, 62]),
3208
+ CommentEnd: new Uint8Array([45, 45, 33, 62]),
3209
+ Doctype: new Uint8Array([100, 111, 99, 116, 121, 112, 101]),
3210
+ IframeEnd: new Uint8Array([60, 47, 105, 102, 114, 97, 109, 101]),
3211
+ NoembedEnd: new Uint8Array([
3212
+ 60,
3213
+ 47,
3214
+ 110,
3215
+ 111,
3216
+ 101,
3217
+ 109,
3218
+ 98,
3219
+ 101,
3220
+ 100
3221
+ ]),
3222
+ NoframesEnd: new Uint8Array([
3223
+ 60,
3224
+ 47,
3225
+ 110,
3226
+ 111,
3227
+ 102,
3228
+ 114,
3229
+ 97,
3230
+ 109,
3231
+ 101,
3232
+ 115
3233
+ ]),
3234
+ Plaintext: new Uint8Array([
3235
+ 60,
3236
+ 47,
3237
+ 112,
3238
+ 108,
3239
+ 97,
3240
+ 105,
3241
+ 110,
3242
+ 116,
3243
+ 101,
3244
+ 120,
3245
+ 116
3246
+ ]),
3247
+ ScriptEnd: new Uint8Array([60, 47, 115, 99, 114, 105, 112, 116]),
3248
+ StyleEnd: new Uint8Array([60, 47, 115, 116, 121, 108, 101]),
3249
+ TitleEnd: new Uint8Array([60, 47, 116, 105, 116, 108, 101]),
3250
+ TextareaEnd: new Uint8Array([
3251
+ 60,
3252
+ 47,
3253
+ 116,
3254
+ 101,
3255
+ 120,
3256
+ 116,
3257
+ 97,
3258
+ 114,
3259
+ 101,
3260
+ 97
3261
+ ]),
3262
+ XmpEnd: new Uint8Array([60, 47, 120, 109, 112])
3263
+ };
3264
+ specialStartSequences = new Map([
3265
+ [Sequences.IframeEnd[2], Sequences.IframeEnd],
3266
+ [Sequences.NoembedEnd[2], Sequences.NoembedEnd],
3267
+ [Sequences.Plaintext[2], Sequences.Plaintext],
3268
+ [Sequences.ScriptEnd[2], Sequences.ScriptEnd],
3269
+ [Sequences.TitleEnd[2], Sequences.TitleEnd],
3270
+ [Sequences.XmpEnd[2], Sequences.XmpEnd]
3271
+ ]);
3272
+ });
3273
+
3274
+ // node_modules/domelementtype/dist/index.js
3275
+ var ElementType, Root, Text, Directive, Comment, Script, Style, Tag, CDATA, Doctype;
3276
+ var init_dist = __esm(() => {
3277
+ (function(ElementType2) {
3278
+ ElementType2["Root"] = "root";
3279
+ ElementType2["Text"] = "text";
3280
+ ElementType2["Directive"] = "directive";
3281
+ ElementType2["Comment"] = "comment";
3282
+ ElementType2["Script"] = "script";
3283
+ ElementType2["Style"] = "style";
3284
+ ElementType2["Tag"] = "tag";
3285
+ ElementType2["CDATA"] = "cdata";
3286
+ ElementType2["Doctype"] = "doctype";
3287
+ })(ElementType || (ElementType = {}));
3288
+ Root = ElementType.Root;
3289
+ Text = ElementType.Text;
3290
+ Directive = ElementType.Directive;
3291
+ Comment = ElementType.Comment;
3292
+ Script = ElementType.Script;
3293
+ Style = ElementType.Style;
3294
+ Tag = ElementType.Tag;
3295
+ CDATA = ElementType.CDATA;
3296
+ Doctype = ElementType.Doctype;
3297
+ });
3298
+
3299
+ // node_modules/domutils/dist/querying.js
3300
+ var init_querying = () => {};
3301
+
3302
+ // node_modules/domutils/dist/legacy.js
3303
+ var init_legacy = () => {};
3304
+
3305
+ // node_modules/domutils/dist/stringify.js
3306
+ var init_stringify = () => {};
3307
+
3308
+ // node_modules/domutils/dist/feeds.js
3309
+ var init_feeds = () => {};
3310
+
3311
+ // node_modules/domutils/dist/helpers.js
3312
+ var DocumentPosition;
3313
+ var init_helpers = __esm(() => {
3314
+ (function(DocumentPosition2) {
3315
+ DocumentPosition2[DocumentPosition2["DISCONNECTED"] = 1] = "DISCONNECTED";
3316
+ DocumentPosition2[DocumentPosition2["PRECEDING"] = 2] = "PRECEDING";
3317
+ DocumentPosition2[DocumentPosition2["FOLLOWING"] = 4] = "FOLLOWING";
3318
+ DocumentPosition2[DocumentPosition2["CONTAINS"] = 8] = "CONTAINS";
3319
+ DocumentPosition2[DocumentPosition2["CONTAINED_BY"] = 16] = "CONTAINED_BY";
3320
+ })(DocumentPosition || (DocumentPosition = {}));
3321
+ });
3322
+
3323
+ // node_modules/domutils/dist/traversal.js
3324
+ var init_traversal = () => {};
3325
+
3326
+ // node_modules/domutils/dist/index.js
3327
+ var init_dist2 = __esm(() => {
3328
+ init_feeds();
3329
+ init_helpers();
3330
+ init_legacy();
3331
+ init_querying();
3332
+ init_stringify();
3333
+ init_traversal();
3334
+ });
3335
+
3336
+ // node_modules/htmlparser2/dist/index.js
3337
+ var init_dist3 = __esm(() => {
3338
+ init_dist();
3339
+ init_Tokenizer();
3340
+ init_dist2();
3341
+ });
3342
+
3343
+ // tools/core/htmllinter-tables.js
3344
+ var VOID_ELEMENTS, RAW_TEXT_ELEMENTS, RCDATA_ELEMENTS, SPECIAL_ELEMENTS, FORMATTING_ELEMENTS, DEFAULT_SCOPE_BOUNDARIES, SCOPE_LIST_ITEM, SCOPE_BUTTON, SCOPE_DEFAULT, SCOPE_TABLE, SCOPE_SELECT, STANDARD_SVG_CAMEL_ELEMENTS, STANDARD_SVG_CAMEL_ATTRS, MATHML_CAMEL_ATTRS, FOREIGN_BREAKOUT_TAGS, MATHML_TEXT_INTEGRATION_POINTS, BLOCK_LEVEL_AUTO_CLOSE_P, SELECT_VALID_CHILDREN, SELECT_BREAKOUT_TAGS, MODES, NS, FRAGMENT_CONTEXT_MODES;
3345
+ var init_htmllinter_tables = __esm(() => {
3346
+ VOID_ELEMENTS = new Set([
3347
+ "area",
3348
+ "base",
3349
+ "br",
3350
+ "col",
3351
+ "embed",
3352
+ "hr",
3353
+ "img",
3354
+ "input",
3355
+ "link",
3356
+ "meta",
3357
+ "source",
3358
+ "track",
3359
+ "wbr"
3360
+ ]);
3361
+ RAW_TEXT_ELEMENTS = new Set([
3362
+ "script",
3363
+ "style",
3364
+ "iframe",
3365
+ "noembed",
3366
+ "noframes",
3367
+ "noscript",
3368
+ "xmp",
3369
+ "plaintext"
3370
+ ]);
3371
+ RCDATA_ELEMENTS = new Set(["textarea", "title"]);
3372
+ SPECIAL_ELEMENTS = new Set([
3373
+ "address",
3374
+ "applet",
3375
+ "area",
3376
+ "article",
3377
+ "aside",
3378
+ "base",
3379
+ "basefont",
3380
+ "bgsound",
3381
+ "blockquote",
3382
+ "br",
3383
+ "button",
3384
+ "caption",
3385
+ "center",
3386
+ "col",
3387
+ "colgroup",
3388
+ "dd",
3389
+ "details",
3390
+ "dir",
3391
+ "div",
3392
+ "dl",
3393
+ "dt",
3394
+ "embed",
3395
+ "fieldset",
3396
+ "figcaption",
3397
+ "figure",
3398
+ "footer",
3399
+ "form",
3400
+ "h1",
3401
+ "h2",
3402
+ "h3",
3403
+ "h4",
3404
+ "h5",
3405
+ "h6",
3406
+ "header",
3407
+ "hgroup",
3408
+ "hr",
3409
+ "iframe",
3410
+ "img",
3411
+ "input",
3412
+ "keygen",
3413
+ "li",
3414
+ "link",
3415
+ "listing",
3416
+ "main",
3417
+ "marquee",
3418
+ "menu",
3419
+ "meta",
3420
+ "nav",
3421
+ "noembed",
3422
+ "noframes",
3423
+ "noscript",
3424
+ "object",
3425
+ "ol",
3426
+ "p",
3427
+ "param",
3428
+ "plaintext",
3429
+ "pre",
3430
+ "script",
3431
+ "search",
3432
+ "section",
3433
+ "select",
3434
+ "source",
3435
+ "style",
3436
+ "summary",
3437
+ "table",
3438
+ "tbody",
3439
+ "td",
3440
+ "template",
3441
+ "textarea",
3442
+ "tfoot",
3443
+ "th",
3444
+ "thead",
3445
+ "title",
3446
+ "tr",
3447
+ "track",
3448
+ "ul",
3449
+ "wbr",
3450
+ "xmp"
3451
+ ]);
3452
+ FORMATTING_ELEMENTS = new Set([
3453
+ "a",
3454
+ "b",
3455
+ "big",
3456
+ "code",
3457
+ "em",
3458
+ "font",
3459
+ "i",
3460
+ "nobr",
3461
+ "s",
3462
+ "small",
3463
+ "strike",
3464
+ "strong",
3465
+ "tt",
3466
+ "u"
3467
+ ]);
3468
+ DEFAULT_SCOPE_BOUNDARIES = new Set([
3469
+ "applet",
3470
+ "caption",
3471
+ "html",
3472
+ "table",
3473
+ "td",
3474
+ "th",
3475
+ "marquee",
3476
+ "object",
3477
+ "template"
3478
+ ]);
3479
+ SCOPE_LIST_ITEM = new Set([...DEFAULT_SCOPE_BOUNDARIES, "ol", "ul"]);
3480
+ SCOPE_BUTTON = new Set([...DEFAULT_SCOPE_BOUNDARIES, "button"]);
3481
+ SCOPE_DEFAULT = DEFAULT_SCOPE_BOUNDARIES;
3482
+ SCOPE_TABLE = new Set(["html", "table", "template"]);
3483
+ SCOPE_SELECT = new Set;
3484
+ STANDARD_SVG_CAMEL_ELEMENTS = new Set([
3485
+ "altGlyph",
3486
+ "altGlyphDef",
3487
+ "altGlyphItem",
3488
+ "animateColor",
3489
+ "animateMotion",
3490
+ "animateTransform",
3491
+ "clipPath",
3492
+ "feBlend",
3493
+ "feColorMatrix",
3494
+ "feComponentTransfer",
3495
+ "feComposite",
3496
+ "feConvolveMatrix",
3497
+ "feDiffuseLighting",
3498
+ "feDisplacementMap",
3499
+ "feDistantLight",
3500
+ "feDropShadow",
3501
+ "feFlood",
3502
+ "feFuncA",
3503
+ "feFuncB",
3504
+ "feFuncG",
3505
+ "feFuncR",
3506
+ "feGaussianBlur",
3507
+ "feImage",
3508
+ "feMerge",
3509
+ "feMergeNode",
3510
+ "feMorphology",
3511
+ "feOffset",
3512
+ "fePointLight",
3513
+ "feSpecularLighting",
3514
+ "feSpotLight",
3515
+ "feTile",
3516
+ "feTurbulence",
3517
+ "foreignObject",
3518
+ "glyphRef",
3519
+ "linearGradient",
3520
+ "radialGradient",
3521
+ "textPath"
3522
+ ]);
3523
+ STANDARD_SVG_CAMEL_ATTRS = new Set([
3524
+ "attributeName",
3525
+ "attributeType",
3526
+ "baseFrequency",
3527
+ "baseProfile",
3528
+ "calcMode",
3529
+ "clipPathUnits",
3530
+ "diffuseConstant",
3531
+ "edgeMode",
3532
+ "filterUnits",
3533
+ "glyphRef",
3534
+ "gradientTransform",
3535
+ "gradientUnits",
3536
+ "kernelMatrix",
3537
+ "kernelUnitLength",
3538
+ "keyPoints",
3539
+ "keySplines",
3540
+ "keyTimes",
3541
+ "lengthAdjust",
3542
+ "limitingConeAngle",
3543
+ "markerHeight",
3544
+ "markerUnits",
3545
+ "markerWidth",
3546
+ "maskContentUnits",
3547
+ "maskUnits",
3548
+ "numOctaves",
3549
+ "pathLength",
3550
+ "patternContentUnits",
3551
+ "patternTransform",
3552
+ "patternUnits",
3553
+ "pointsAtX",
3554
+ "pointsAtY",
3555
+ "pointsAtZ",
3556
+ "preserveAlpha",
3557
+ "preserveAspectRatio",
3558
+ "primitiveUnits",
3559
+ "refX",
3560
+ "refY",
3561
+ "repeatCount",
3562
+ "repeatDur",
3563
+ "requiredExtensions",
3564
+ "requiredFeatures",
3565
+ "specularConstant",
3566
+ "specularExponent",
3567
+ "spreadMethod",
3568
+ "startOffset",
3569
+ "stdDeviation",
3570
+ "stitchTiles",
3571
+ "surfaceScale",
3572
+ "systemLanguage",
3573
+ "tableValues",
3574
+ "targetX",
3575
+ "targetY",
3576
+ "textLength",
3577
+ "viewBox",
3578
+ "xChannelSelector",
3579
+ "yChannelSelector",
3580
+ "zoomAndPan"
3581
+ ]);
3582
+ MATHML_CAMEL_ATTRS = new Set(["definitionURL"]);
3583
+ FOREIGN_BREAKOUT_TAGS = new Set([
3584
+ "b",
3585
+ "big",
3586
+ "blockquote",
3587
+ "body",
3588
+ "br",
3589
+ "center",
3590
+ "code",
3591
+ "dd",
3592
+ "div",
3593
+ "dl",
3594
+ "dt",
3595
+ "em",
3596
+ "embed",
3597
+ "h1",
3598
+ "h2",
3599
+ "h3",
3600
+ "h4",
3601
+ "h5",
3602
+ "h6",
3603
+ "head",
3604
+ "hr",
3605
+ "i",
3606
+ "img",
3607
+ "li",
3608
+ "listing",
3609
+ "menu",
3610
+ "meta",
3611
+ "nobr",
3612
+ "ol",
3613
+ "p",
3614
+ "pre",
3615
+ "ruby",
3616
+ "s",
3617
+ "small",
3618
+ "span",
3619
+ "strong",
3620
+ "strike",
3621
+ "sub",
3622
+ "sup",
3623
+ "table",
3624
+ "tt",
3625
+ "u",
3626
+ "ul",
3627
+ "var"
3628
+ ]);
3629
+ MATHML_TEXT_INTEGRATION_POINTS = new Set(["mi", "mo", "mn", "ms", "mtext"]);
3630
+ BLOCK_LEVEL_AUTO_CLOSE_P = new Set([
3631
+ "address",
3632
+ "article",
3633
+ "aside",
3634
+ "blockquote",
3635
+ "center",
3636
+ "details",
3637
+ "dialog",
3638
+ "dir",
3639
+ "div",
3640
+ "dl",
3641
+ "fieldset",
3642
+ "figcaption",
3643
+ "figure",
3644
+ "footer",
3645
+ "form",
3646
+ "h1",
3647
+ "h2",
3648
+ "h3",
3649
+ "h4",
3650
+ "h5",
3651
+ "h6",
3652
+ "header",
3653
+ "hgroup",
3654
+ "hr",
3655
+ "main",
3656
+ "menu",
3657
+ "nav",
3658
+ "ol",
3659
+ "p",
3660
+ "plaintext",
3661
+ "pre",
3662
+ "search",
3663
+ "section",
3664
+ "summary",
3665
+ "table",
3666
+ "ul",
3667
+ "xmp",
3668
+ "li",
3669
+ "dd",
3670
+ "dt"
3671
+ ]);
3672
+ SELECT_VALID_CHILDREN = new Set(["option", "optgroup", "hr", "script", "template"]);
3673
+ SELECT_BREAKOUT_TAGS = new Set(["input", "keygen", "textarea", "select"]);
3674
+ MODES = Object.freeze({
3675
+ inBody: "inBody",
3676
+ inTable: "inTable",
3677
+ inTableText: "inTableText",
3678
+ inCaption: "inCaption",
3679
+ inColumnGroup: "inColumnGroup",
3680
+ inTableBody: "inTableBody",
3681
+ inRow: "inRow",
3682
+ inCell: "inCell",
3683
+ inSelect: "inSelect",
3684
+ inSelectInTable: "inSelectInTable",
3685
+ inTemplate: "inTemplate",
3686
+ text: "text"
3687
+ });
3688
+ NS = Object.freeze({
3689
+ html: "html",
3690
+ svg: "svg",
3691
+ math: "math"
3692
+ });
3693
+ FRAGMENT_CONTEXT_MODES = Object.freeze({
3694
+ template: { mode: MODES.inTemplate, ns: NS.html },
3695
+ body: { mode: MODES.inBody, ns: NS.html },
3696
+ div: { mode: MODES.inBody, ns: NS.html },
3697
+ table: { mode: MODES.inTable, ns: NS.html },
3698
+ tbody: { mode: MODES.inTableBody, ns: NS.html },
3699
+ thead: { mode: MODES.inTableBody, ns: NS.html },
3700
+ tfoot: { mode: MODES.inTableBody, ns: NS.html },
3701
+ caption: { mode: MODES.inCaption, ns: NS.html },
3702
+ colgroup: { mode: MODES.inColumnGroup, ns: NS.html },
3703
+ tr: { mode: MODES.inRow, ns: NS.html },
3704
+ td: { mode: MODES.inCell, ns: NS.html },
3705
+ th: { mode: MODES.inCell, ns: NS.html },
3706
+ select: { mode: MODES.inSelect, ns: NS.html },
3707
+ svg: { mode: MODES.inBody, ns: NS.svg },
3708
+ math: { mode: MODES.inBody, ns: NS.math }
3709
+ });
3710
+ });
3711
+
3712
+ // tools/core/htmllinter.js
3713
+ function lintHtml(html, onFinding, opts = {}) {
3714
+ const ctx = new LinterCtx(html, onFinding, opts);
3715
+ const tokenizer = new Tokenizer({ xmlMode: false, decodeEntities: false, recognizeSelfClosing: true }, ctx);
3716
+ ctx.tokenizer = tokenizer;
3717
+ tokenizer.write(html);
3718
+ tokenizer.end();
3719
+ return ctx.findingCount;
3720
+ }
3721
+
3722
+ class LinterCtx {
3723
+ constructor(html, onFinding, opts) {
3724
+ this.html = html;
3725
+ this.onFinding = onFinding;
3726
+ this.findingCount = 0;
3727
+ this.lineStarts = computeLineStarts(html);
3728
+ const ctxName = opts.fragmentContext ?? "template";
3729
+ const ctxInfo = FRAGMENT_CONTEXT_MODES[ctxName] ?? FRAGMENT_CONTEXT_MODES.template;
3730
+ this.openElements = [];
3731
+ if (ctxName === "tr") {
3732
+ this.openElements.push({ name: "table", ns: NS.html, start: -1 });
3733
+ this.openElements.push({ name: "tbody", ns: NS.html, start: -1 });
3734
+ } else if (ctxName === "tbody" || ctxName === "thead" || ctxName === "tfoot") {
3735
+ this.openElements.push({ name: "table", ns: NS.html, start: -1 });
3736
+ } else if (ctxName === "td" || ctxName === "th") {
3737
+ this.openElements.push({ name: "table", ns: NS.html, start: -1 });
3738
+ this.openElements.push({ name: "tbody", ns: NS.html, start: -1 });
3739
+ this.openElements.push({ name: "tr", ns: NS.html, start: -1 });
3740
+ } else if (ctxName === "caption") {
3741
+ this.openElements.push({ name: "table", ns: NS.html, start: -1 });
3742
+ } else if (ctxName === "colgroup") {
3743
+ this.openElements.push({ name: "table", ns: NS.html, start: -1 });
3744
+ } else if (ctxName === "svg") {
3745
+ this.openElements.push({ name: "svg", ns: NS.svg, start: -1 });
3746
+ } else if (ctxName === "math") {
3747
+ this.openElements.push({ name: "math", ns: NS.math, start: -1 });
3748
+ } else if (ctxName === "select") {
3749
+ this.openElements.push({ name: "select", ns: NS.html, start: -1 });
3750
+ }
3751
+ this.insertionMode = ctxInfo.mode;
3752
+ this.originalInsertionMode = MODES.inBody;
3753
+ this.templateInsertionModes = ctxName === "template" ? [MODES.inTemplate] : [];
3754
+ this.activeFormatting = [];
3755
+ this.formPointer = null;
3756
+ this.framesetOk = true;
3757
+ this.svgCamelElements = opts.svgCamelElements ?? STANDARD_SVG_CAMEL_ELEMENTS;
3758
+ this.transparentTagPrefixes = opts.transparentTagPrefixes ?? [];
3759
+ this.currentTagName = "";
3760
+ this.currentTagRawName = "";
3761
+ this.currentTagStart = 0;
3762
+ this.tokenizer = null;
3763
+ this.textRestoreMode = null;
3764
+ }
3765
+ onopentagname(start, end) {
3766
+ const raw = this.html.slice(start, end);
3767
+ this.currentTagRawName = raw;
3768
+ this.currentTagName = raw.toLowerCase();
3769
+ this.currentTagStart = start;
3770
+ }
3771
+ onattribname(_start, _end) {}
3772
+ onattribdata(_start, _end) {}
3773
+ onattribentity(_cp) {}
3774
+ onattribend(_quote, _end) {}
3775
+ ontextentity(_cp, _end) {}
3776
+ onopentagend(endIndex) {
3777
+ this.handleStartTag(false, endIndex);
3778
+ }
3779
+ onselfclosingtag(endIndex) {
3780
+ this.handleStartTag(true, endIndex);
3781
+ }
3782
+ onclosetag(start, end) {
3783
+ const raw = this.html.slice(start, end);
3784
+ const name = raw.toLowerCase();
3785
+ this.handleEndTag(name, start);
3786
+ }
3787
+ ontext(start, end) {
3788
+ if (start >= end)
3789
+ return;
3790
+ this.handleText(start, end);
3791
+ }
3792
+ oncomment(_start, _end, _endOffset) {}
3793
+ oncdata(start, _end, _endOffset) {
3794
+ if (this.currentNamespace() === NS.html) {
3795
+ this.report(HTML_TAG_NOT_ALLOWED_IN_PARENT, LEVEL_WARN, start, {
3796
+ tag: "[CDATA[",
3797
+ mode: this.insertionMode,
3798
+ action: "ignored"
3799
+ });
3800
+ }
3801
+ }
3802
+ ondeclaration(_start, _end) {}
3803
+ onprocessinginstruction(_start, _end) {}
3804
+ isInForeignContext() {
3805
+ return this.currentNamespace() !== NS.html;
3806
+ }
3807
+ onend() {}
3808
+ report(id, level, offset, info) {
3809
+ this.findingCount++;
3810
+ const { line, column } = offsetToLineCol(this.lineStarts, offset);
3811
+ this.onFinding({
3812
+ id,
3813
+ level,
3814
+ info,
3815
+ location: { start: offset, end: offset + (info.tag?.length ?? 0), line, column }
3816
+ });
3817
+ }
3818
+ currentNode() {
3819
+ return this.openElements[this.openElements.length - 1] ?? null;
3820
+ }
3821
+ currentNamespace() {
3822
+ const top = this.currentNode();
3823
+ return top ? top.ns : NS.html;
3824
+ }
3825
+ push(name, ns, start) {
3826
+ this.openElements.push({ name, ns, start });
3827
+ }
3828
+ pop() {
3829
+ return this.openElements.pop();
3830
+ }
3831
+ hasInScope(target, scopeSet) {
3832
+ for (let i = this.openElements.length - 1;i >= 0; i--) {
3833
+ const f = this.openElements[i];
3834
+ if (f.name === target && f.ns === NS.html)
3835
+ return true;
3836
+ if (f.ns === NS.html && scopeSet.has(f.name))
3837
+ return false;
3838
+ if (f.ns !== NS.html) {
3839
+ return false;
3840
+ }
3841
+ }
3842
+ return false;
3843
+ }
3844
+ hasInDefaultScope(target) {
3845
+ return this.hasInScope(target, SCOPE_DEFAULT);
3846
+ }
3847
+ hasInButtonScope(target) {
3848
+ return this.hasInScope(target, SCOPE_BUTTON);
3849
+ }
3850
+ hasInListItemScope(target) {
3851
+ return this.hasInScope(target, SCOPE_LIST_ITEM);
3852
+ }
3853
+ hasInTableScope(target) {
3854
+ return this.hasInScope(target, SCOPE_TABLE);
3855
+ }
3856
+ hasInSelectScope(target) {
3857
+ for (let i = this.openElements.length - 1;i >= 0; i--) {
3858
+ const f = this.openElements[i];
3859
+ if (f.ns !== NS.html)
3860
+ return false;
3861
+ if (f.name === target)
3862
+ return true;
3863
+ if (f.name !== "optgroup" && f.name !== "option")
3864
+ return false;
3865
+ }
3866
+ return false;
3867
+ }
3868
+ popUntilName(name) {
3869
+ while (this.openElements.length) {
3870
+ const f = this.openElements.pop();
3871
+ if (f.name === name)
3872
+ return f;
3873
+ }
3874
+ return null;
3875
+ }
3876
+ generateImpliedEndTags(except = null) {
3877
+ const implied = new Set(["dd", "dt", "li", "optgroup", "option", "p", "rb", "rp", "rt", "rtc"]);
3878
+ while (this.openElements.length) {
3879
+ const top = this.currentNode();
3880
+ if (top.ns !== NS.html)
3881
+ break;
3882
+ if (!implied.has(top.name) || top.name === except)
3883
+ break;
3884
+ this.openElements.pop();
3885
+ }
3886
+ }
3887
+ isTransparentTag(name) {
3888
+ for (const prefix of this.transparentTagPrefixes) {
3889
+ if (name === prefix || name.startsWith(`${prefix}:`))
3890
+ return true;
3891
+ }
3892
+ return false;
3893
+ }
3894
+ handleStartTag(selfClosing, endIndex) {
3895
+ const name = this.currentTagName;
3896
+ const raw = this.currentTagRawName;
3897
+ const start = this.currentTagStart;
3898
+ const ns = this.currentNamespace();
3899
+ if (ns === NS.html) {
3900
+ if (raw !== name) {
3901
+ this.report(HTML_TAG_NAME_HAS_UPPERCASE, LEVEL_ERROR, start, {
3902
+ raw,
3903
+ lowercased: name
3904
+ });
3905
+ }
3906
+ } else if (ns === NS.svg) {
3907
+ if (raw !== raw.toLowerCase() && !this.svgCamelElements.has(raw)) {
3908
+ this.report(HTML_SVG_TAG_WILL_LOWERCASE, LEVEL_ERROR, start, {
3909
+ raw,
3910
+ lowercased: name
3911
+ });
3912
+ }
3913
+ }
3914
+ if (this.isTransparentTag(name))
3915
+ return;
3916
+ if (ns !== NS.html && !this.shouldBreakoutFromForeign(name)) {
3917
+ this.startTagInForeign(name, raw, selfClosing, start);
3918
+ return;
3919
+ }
3920
+ if (ns !== NS.html && this.shouldBreakoutFromForeign(name)) {
3921
+ while (this.openElements.length && this.currentNode()?.ns !== NS.html) {
3922
+ this.openElements.pop();
3923
+ }
3924
+ }
3925
+ this.dispatchStartTag(name, raw, selfClosing, start, endIndex);
3926
+ }
3927
+ shouldBreakoutFromForeign(name) {
3928
+ if (FOREIGN_BREAKOUT_TAGS.has(name))
3929
+ return true;
3930
+ if (name === "font")
3931
+ return true;
3932
+ return false;
3933
+ }
3934
+ startTagInForeign(name, raw, selfClosing, start) {
3935
+ const ns = name === "svg" ? NS.svg : name === "math" ? NS.math : this.currentNamespace();
3936
+ const top = this.currentNode();
3937
+ if (top && top.ns === NS.math && MATHML_TEXT_INTEGRATION_POINTS.has(top.name) && name !== "mglyph" && name !== "malignmark") {
3938
+ this.dispatchStartTag(name, raw, selfClosing, start, start + raw.length);
3939
+ return;
3940
+ }
3941
+ if (selfClosing)
3942
+ return;
3943
+ this.push(raw, ns, start);
3944
+ }
3945
+ dispatchStartTag(name, raw, selfClosing, start, endIndex) {
3946
+ switch (this.insertionMode) {
3947
+ case MODES.inTemplate:
3948
+ return this.startInTemplate(name, raw, selfClosing, start, endIndex);
3949
+ case MODES.inBody:
3950
+ return this.startInBody(name, raw, selfClosing, start, endIndex);
3951
+ case MODES.inTable:
3952
+ return this.startInTable(name, raw, selfClosing, start, endIndex);
3953
+ case MODES.inTableText:
3954
+ this.flushTableText();
3955
+ this.insertionMode = this.originalInsertionMode;
3956
+ return this.dispatchStartTag(name, raw, selfClosing, start, endIndex);
3957
+ case MODES.inCaption:
3958
+ return this.startInCaption(name, raw, selfClosing, start, endIndex);
3959
+ case MODES.inColumnGroup:
3960
+ return this.startInColumnGroup(name, raw, selfClosing, start, endIndex);
3961
+ case MODES.inTableBody:
3962
+ return this.startInTableBody(name, raw, selfClosing, start, endIndex);
3963
+ case MODES.inRow:
3964
+ return this.startInRow(name, raw, selfClosing, start, endIndex);
3965
+ case MODES.inCell:
3966
+ return this.startInCell(name, raw, selfClosing, start, endIndex);
3967
+ case MODES.inSelect:
3968
+ return this.startInSelect(name, raw, selfClosing, start, endIndex);
3969
+ case MODES.inSelectInTable:
3970
+ return this.startInSelectInTable(name, raw, selfClosing, start, endIndex);
3971
+ case MODES.text:
3972
+ return;
3973
+ }
3974
+ }
3975
+ startInBody(name, raw, selfClosing, start, _endIndex) {
3976
+ if (name === "html" || name === "head" || name === "body" || name === "frame" || name === "frameset") {
3977
+ this.report(HTML_TAG_NOT_ALLOWED_IN_PARENT, LEVEL_WARN, start, {
3978
+ tag: raw,
3979
+ mode: this.insertionMode,
3980
+ action: "ignored"
3981
+ });
3982
+ return;
3983
+ }
3984
+ if (name === "address" || name === "article" || name === "aside" || name === "blockquote" || name === "center" || name === "details" || name === "dialog" || name === "dir" || name === "div" || name === "dl" || name === "fieldset" || name === "figcaption" || name === "figure" || name === "footer" || name === "header" || name === "hgroup" || name === "main" || name === "menu" || name === "nav" || name === "ol" || name === "p" || name === "search" || name === "section" || name === "summary" || name === "ul") {
3985
+ if (this.hasInButtonScope("p"))
3986
+ this.implicitlyClose("p", start, raw);
3987
+ this.push(raw, NS.html, start);
3988
+ return;
3989
+ }
3990
+ if (name === "h1" || name === "h2" || name === "h3" || name === "h4" || name === "h5" || name === "h6") {
3991
+ if (this.hasInButtonScope("p"))
3992
+ this.implicitlyClose("p", start, raw);
3993
+ const top = this.currentNode();
3994
+ if (top && /^h[1-6]$/.test(top.name)) {
3995
+ this.report(HTML_TAG_NOT_ALLOWED_IN_PARENT, LEVEL_ERROR, start, {
3996
+ tag: raw,
3997
+ parent: top.name,
3998
+ mode: this.insertionMode,
3999
+ action: "auto-close-implicit"
4000
+ });
4001
+ this.openElements.pop();
4002
+ }
4003
+ this.push(raw, NS.html, start);
4004
+ return;
4005
+ }
4006
+ if (name === "pre" || name === "listing") {
4007
+ if (this.hasInButtonScope("p"))
4008
+ this.implicitlyClose("p", start, raw);
4009
+ this.push(raw, NS.html, start);
4010
+ this.framesetOk = false;
4011
+ return;
4012
+ }
4013
+ if (name === "form") {
4014
+ if (this.formPointer !== null && !this.openElementsHas("template")) {
4015
+ this.report(HTML_DUPLICATE_FORM, LEVEL_ERROR, start, {
4016
+ tag: raw,
4017
+ mode: this.insertionMode
4018
+ });
4019
+ return;
4020
+ }
4021
+ if (this.hasInButtonScope("p"))
4022
+ this.implicitlyClose("p", start, raw);
4023
+ this.push(raw, NS.html, start);
4024
+ this.formPointer = this.currentNode();
4025
+ return;
4026
+ }
4027
+ if (name === "li") {
4028
+ this.framesetOk = false;
4029
+ for (let i = this.openElements.length - 1;i >= 0; i--) {
4030
+ const f = this.openElements[i];
4031
+ if (f.ns !== NS.html)
4032
+ break;
4033
+ if (f.name === "li") {
4034
+ this.generateImpliedEndTags("li");
4035
+ while (this.openElements.length) {
4036
+ const popped = this.openElements.pop();
4037
+ if (popped.name === "li")
4038
+ break;
4039
+ }
4040
+ break;
4041
+ }
4042
+ if (SPECIAL_ELEMENTS.has(f.name) && f.name !== "address" && f.name !== "div" && f.name !== "p") {
4043
+ break;
4044
+ }
4045
+ }
4046
+ if (this.hasInButtonScope("p"))
4047
+ this.implicitlyClose("p", start, raw);
4048
+ this.push(raw, NS.html, start);
4049
+ return;
4050
+ }
4051
+ if (name === "dd" || name === "dt") {
4052
+ this.framesetOk = false;
4053
+ for (let i = this.openElements.length - 1;i >= 0; i--) {
4054
+ const f = this.openElements[i];
4055
+ if (f.ns !== NS.html)
4056
+ break;
4057
+ if (f.name === "dd" || f.name === "dt") {
4058
+ this.generateImpliedEndTags(f.name);
4059
+ while (this.openElements.length) {
4060
+ const popped = this.openElements.pop();
4061
+ if (popped.name === f.name)
4062
+ break;
4063
+ }
4064
+ break;
4065
+ }
4066
+ if (SPECIAL_ELEMENTS.has(f.name) && f.name !== "address" && f.name !== "div" && f.name !== "p") {
4067
+ break;
4068
+ }
4069
+ }
4070
+ if (this.hasInButtonScope("p"))
4071
+ this.implicitlyClose("p", start, raw);
4072
+ this.push(raw, NS.html, start);
4073
+ return;
4074
+ }
4075
+ if (name === "plaintext") {
4076
+ if (this.hasInButtonScope("p"))
4077
+ this.implicitlyClose("p", start, raw);
4078
+ this.push(raw, NS.html, start);
4079
+ return;
4080
+ }
4081
+ if (name === "button") {
4082
+ if (this.hasInDefaultScope("button")) {
4083
+ this.report(HTML_TAG_NOT_ALLOWED_IN_PARENT, LEVEL_ERROR, start, {
4084
+ tag: raw,
4085
+ parent: "button",
4086
+ mode: this.insertionMode,
4087
+ action: "auto-close-implicit"
4088
+ });
4089
+ this.generateImpliedEndTags();
4090
+ this.popUntilName("button");
4091
+ }
4092
+ this.push(raw, NS.html, start);
4093
+ this.framesetOk = false;
4094
+ return;
4095
+ }
4096
+ if (name === "a") {
4097
+ if (this.openElementsHas("a") || this.activeFormattingHas("a")) {
4098
+ this.report(HTML_NESTED_INTERACTIVE, LEVEL_WARN, start, {
4099
+ tag: raw,
4100
+ mode: this.insertionMode
4101
+ });
4102
+ this.runAdoptionAgency("a");
4103
+ }
4104
+ this.push(raw, NS.html, start);
4105
+ this.activeFormatting.push(this.currentNode());
4106
+ return;
4107
+ }
4108
+ if (FORMATTING_ELEMENTS.has(name)) {
4109
+ this.push(raw, NS.html, start);
4110
+ this.activeFormatting.push(this.currentNode());
4111
+ return;
4112
+ }
4113
+ if (name === "nobr") {
4114
+ if (this.hasInDefaultScope("nobr")) {
4115
+ this.report(HTML_NESTED_INTERACTIVE, LEVEL_WARN, start, {
4116
+ tag: raw,
4117
+ mode: this.insertionMode
4118
+ });
4119
+ this.runAdoptionAgency("nobr");
4120
+ }
4121
+ this.push(raw, NS.html, start);
4122
+ this.activeFormatting.push(this.currentNode());
4123
+ return;
4124
+ }
4125
+ if (name === "table") {
4126
+ if (this.hasInButtonScope("p"))
4127
+ this.implicitlyClose("p", start, raw);
4128
+ this.push(raw, NS.html, start);
4129
+ this.framesetOk = false;
4130
+ this.insertionMode = MODES.inTable;
4131
+ return;
4132
+ }
4133
+ if (name === "area" || name === "br" || name === "embed" || name === "img" || name === "keygen" || name === "wbr" || name === "input" || name === "param" || name === "source" || name === "track" || name === "hr" || name === "meta" || name === "link" || name === "col" || name === "base") {
4134
+ this.framesetOk = false;
4135
+ return;
4136
+ }
4137
+ if (name === "select") {
4138
+ if (this.hasInButtonScope("p"))
4139
+ this.implicitlyClose("p", start, raw);
4140
+ this.push(raw, NS.html, start);
4141
+ this.framesetOk = false;
4142
+ this.insertionMode = MODES.inSelect;
4143
+ return;
4144
+ }
4145
+ if (name === "option" || name === "optgroup") {
4146
+ if (this.currentNode()?.name === "option") {
4147
+ this.openElements.pop();
4148
+ }
4149
+ this.push(raw, NS.html, start);
4150
+ return;
4151
+ }
4152
+ if (name === "textarea" || name === "title" || RAW_TEXT_ELEMENTS.has(name)) {
4153
+ this.push(raw, NS.html, start);
4154
+ return;
4155
+ }
4156
+ if (name === "math" || name === "svg") {
4157
+ this.push(raw, name === "svg" ? NS.svg : NS.math, start);
4158
+ this.framesetOk = false;
4159
+ return;
4160
+ }
4161
+ if (name === "caption" || name === "col" || name === "colgroup" || name === "frame" || name === "tbody" || name === "td" || name === "tfoot" || name === "th" || name === "thead" || name === "tr") {
4162
+ this.report(HTML_TAG_NOT_ALLOWED_IN_PARENT, LEVEL_ERROR, start, {
4163
+ tag: raw,
4164
+ parent: this.currentNode()?.name ?? "(root)",
4165
+ mode: this.insertionMode,
4166
+ action: "ignored"
4167
+ });
4168
+ return;
4169
+ }
4170
+ if (selfClosing)
4171
+ return;
4172
+ this.push(raw, NS.html, start);
4173
+ }
4174
+ openElementsHas(name) {
4175
+ for (let i = this.openElements.length - 1;i >= 0; i--) {
4176
+ const f = this.openElements[i];
4177
+ if (f.ns === NS.html && f.name === name)
4178
+ return true;
4179
+ }
4180
+ return false;
4181
+ }
4182
+ activeFormattingHas(name) {
4183
+ for (let i = this.activeFormatting.length - 1;i >= 0; i--) {
4184
+ const e = this.activeFormatting[i];
4185
+ if (e === null)
4186
+ return false;
4187
+ if (e.name === name)
4188
+ return true;
4189
+ }
4190
+ return false;
4191
+ }
4192
+ runAdoptionAgency(name) {
4193
+ for (let i = this.activeFormatting.length - 1;i >= 0; i--) {
4194
+ const e = this.activeFormatting[i];
4195
+ if (e === null)
4196
+ break;
4197
+ if (e.name === name) {
4198
+ this.activeFormatting.splice(i, 1);
4199
+ const idx = this.openElements.indexOf(e);
4200
+ if (idx >= 0)
4201
+ this.openElements.splice(idx, 1);
4202
+ return;
4203
+ }
4204
+ }
4205
+ }
4206
+ implicitlyClose(name, _start, _newTagRaw) {
4207
+ while (this.openElements.length) {
4208
+ const popped = this.openElements.pop();
4209
+ if (popped.name === name)
4210
+ break;
4211
+ }
4212
+ }
4213
+ startInTemplate(name, raw, selfClosing, start, endIndex) {
4214
+ let next;
4215
+ if (name === "caption" || name === "colgroup" || name === "tbody" || name === "tfoot" || name === "thead") {
4216
+ next = MODES.inTable;
4217
+ } else if (name === "col") {
4218
+ next = MODES.inColumnGroup;
4219
+ } else if (name === "tr") {
4220
+ next = MODES.inTableBody;
4221
+ } else if (name === "td" || name === "th") {
4222
+ next = MODES.inRow;
4223
+ } else {
4224
+ this.popTemplateMode();
4225
+ this.pushTemplateMode(MODES.inBody);
4226
+ this.insertionMode = MODES.inBody;
4227
+ return this.startInBody(name, raw, selfClosing, start, endIndex);
4228
+ }
4229
+ this.popTemplateMode();
4230
+ this.pushTemplateMode(next);
4231
+ this.insertionMode = next;
4232
+ return this.dispatchStartTag(name, raw, selfClosing, start, endIndex);
4233
+ }
4234
+ popTemplateMode() {
4235
+ if (this.templateInsertionModes.length)
4236
+ this.templateInsertionModes.pop();
4237
+ }
4238
+ pushTemplateMode(mode) {
4239
+ this.templateInsertionModes.push(mode);
4240
+ }
4241
+ startInTable(name, raw, selfClosing, start, endIndex) {
4242
+ if (name === "caption") {
4243
+ this.clearStackBackToTable();
4244
+ this.activeFormatting.push(null);
4245
+ this.push(raw, NS.html, start);
4246
+ this.insertionMode = MODES.inCaption;
4247
+ return;
4248
+ }
4249
+ if (name === "colgroup") {
4250
+ this.clearStackBackToTable();
4251
+ this.push(raw, NS.html, start);
4252
+ this.insertionMode = MODES.inColumnGroup;
4253
+ return;
4254
+ }
4255
+ if (name === "col") {
4256
+ this.clearStackBackToTable();
4257
+ this.push("colgroup", NS.html, start);
4258
+ this.insertionMode = MODES.inColumnGroup;
4259
+ return this.dispatchStartTag(name, raw, selfClosing, start, endIndex);
4260
+ }
4261
+ if (name === "tbody" || name === "thead" || name === "tfoot") {
4262
+ this.clearStackBackToTable();
4263
+ this.push(raw, NS.html, start);
4264
+ this.insertionMode = MODES.inTableBody;
4265
+ return;
4266
+ }
4267
+ if (name === "td" || name === "th" || name === "tr") {
4268
+ this.clearStackBackToTable();
4269
+ this.push("tbody", NS.html, start);
4270
+ this.insertionMode = MODES.inTableBody;
4271
+ return this.dispatchStartTag(name, raw, selfClosing, start, endIndex);
4272
+ }
4273
+ if (name === "table") {
4274
+ this.report(HTML_TAG_NOT_ALLOWED_IN_PARENT, LEVEL_ERROR, start, {
4275
+ tag: raw,
4276
+ parent: "table",
4277
+ mode: this.insertionMode,
4278
+ action: "auto-close-implicit"
4279
+ });
4280
+ if (this.hasInTableScope("table")) {
4281
+ this.popUntilName("table");
4282
+ this.resetInsertionModeAppropriately();
4283
+ return this.dispatchStartTag(name, raw, selfClosing, start, endIndex);
4284
+ }
4285
+ return;
4286
+ }
4287
+ if (name === "style" || name === "script" || name === "template") {
4288
+ return this.startInBody(name, raw, selfClosing, start, endIndex);
4289
+ }
4290
+ if (name === "input") {
4291
+ this.report(HTML_TAG_NOT_ALLOWED_IN_PARENT, LEVEL_WARN, start, {
4292
+ tag: raw,
4293
+ parent: "table",
4294
+ mode: this.insertionMode,
4295
+ action: "foster-parent"
4296
+ });
4297
+ return;
4298
+ }
4299
+ if (name === "form") {
4300
+ this.report(HTML_TAG_NOT_ALLOWED_IN_PARENT, LEVEL_ERROR, start, {
4301
+ tag: raw,
4302
+ parent: "table",
4303
+ mode: this.insertionMode,
4304
+ action: "ignored"
4305
+ });
4306
+ return;
4307
+ }
4308
+ this.report(HTML_TAG_NOT_ALLOWED_IN_PARENT, LEVEL_ERROR, start, {
4309
+ tag: raw,
4310
+ parent: this.currentNode()?.name ?? "table",
4311
+ mode: this.insertionMode,
4312
+ action: "foster-parent"
4313
+ });
4314
+ return this.startInBody(name, raw, selfClosing, start, endIndex);
4315
+ }
4316
+ clearStackBackToTable() {
4317
+ while (this.openElements.length) {
4318
+ const top = this.currentNode();
4319
+ if (!top)
4320
+ break;
4321
+ if (top.name === "table" || top.name === "template")
4322
+ break;
4323
+ this.openElements.pop();
4324
+ }
4325
+ }
4326
+ flushTableText() {
4327
+ if (!this.pendingTableText)
4328
+ return;
4329
+ const { hasNonWhitespace, start, snippet } = this.pendingTableText;
4330
+ if (hasNonWhitespace) {
4331
+ this.report(HTML_TEXT_NOT_ALLOWED_IN_PARENT, LEVEL_ERROR, start, {
4332
+ mode: this.originalInsertionMode,
4333
+ snippet
4334
+ });
4335
+ }
4336
+ this.pendingTableText = null;
4337
+ }
4338
+ startInCaption(name, raw, selfClosing, start, endIndex) {
4339
+ if (name === "caption" || name === "col" || name === "colgroup" || name === "tbody" || name === "td" || name === "tfoot" || name === "th" || name === "thead" || name === "tr") {
4340
+ if (this.hasInTableScope("caption")) {
4341
+ this.generateImpliedEndTags();
4342
+ this.popUntilName("caption");
4343
+ this.clearActiveFormattingToMarker();
4344
+ this.insertionMode = MODES.inTable;
4345
+ return this.dispatchStartTag(name, raw, selfClosing, start, endIndex);
4346
+ }
4347
+ return;
4348
+ }
4349
+ return this.startInBody(name, raw, selfClosing, start, endIndex);
4350
+ }
4351
+ clearActiveFormattingToMarker() {
4352
+ while (this.activeFormatting.length) {
4353
+ const e = this.activeFormatting.pop();
4354
+ if (e === null)
4355
+ return;
4356
+ }
4357
+ }
4358
+ startInColumnGroup(name, raw, selfClosing, start, endIndex) {
4359
+ if (name === "col") {
4360
+ return;
4361
+ }
4362
+ if (name === "template") {
4363
+ return this.startInBody(name, raw, selfClosing, start, endIndex);
4364
+ }
4365
+ if (this.currentNode()?.name === "colgroup") {
4366
+ this.openElements.pop();
4367
+ this.insertionMode = MODES.inTable;
4368
+ return this.dispatchStartTag(name, raw, selfClosing, start, endIndex);
4369
+ }
4370
+ this.report(HTML_TAG_NOT_ALLOWED_IN_PARENT, LEVEL_ERROR, start, {
4371
+ tag: raw,
4372
+ parent: "colgroup",
4373
+ mode: this.insertionMode,
4374
+ action: "ignored"
4375
+ });
4376
+ }
4377
+ startInTableBody(name, raw, selfClosing, start, endIndex) {
4378
+ if (name === "tr") {
4379
+ this.clearStackBackToTableBody();
4380
+ this.push(raw, NS.html, start);
4381
+ this.insertionMode = MODES.inRow;
4382
+ return;
4383
+ }
4384
+ if (TABLE_BODY_CELL_TAGS.has(name)) {
4385
+ this.report(HTML_TAG_NOT_ALLOWED_IN_PARENT, LEVEL_WARN, start, {
4386
+ tag: raw,
4387
+ parent: this.currentNode()?.name ?? "tbody",
4388
+ mode: this.insertionMode,
4389
+ action: "auto-close-implicit"
4390
+ });
4391
+ this.clearStackBackToTableBody();
4392
+ this.push("tr", NS.html, start);
4393
+ this.insertionMode = MODES.inRow;
4394
+ return this.dispatchStartTag(name, raw, selfClosing, start, endIndex);
4395
+ }
4396
+ if (name === "caption" || name === "col" || name === "colgroup" || name === "tbody" || name === "tfoot" || name === "thead") {
4397
+ if (this.hasInTableScope("tbody") || this.hasInTableScope("thead") || this.hasInTableScope("tfoot")) {
4398
+ this.clearStackBackToTableBody();
4399
+ this.openElements.pop();
4400
+ this.insertionMode = MODES.inTable;
4401
+ return this.dispatchStartTag(name, raw, selfClosing, start, endIndex);
4402
+ }
4403
+ return;
4404
+ }
4405
+ return this.startInTable(name, raw, selfClosing, start, endIndex);
4406
+ }
4407
+ clearStackBackToTableBody() {
4408
+ while (this.openElements.length) {
4409
+ const top = this.currentNode();
4410
+ if (!top)
4411
+ break;
4412
+ if (top.name === "tbody" || top.name === "thead" || top.name === "tfoot" || top.name === "template" || top.name === "table")
4413
+ break;
4414
+ this.openElements.pop();
4415
+ }
4416
+ }
4417
+ startInRow(name, raw, selfClosing, start, endIndex) {
4418
+ if (TABLE_BODY_CELL_TAGS.has(name)) {
4419
+ this.clearStackBackToTableRow();
4420
+ this.push(raw, NS.html, start);
4421
+ this.insertionMode = MODES.inCell;
4422
+ this.activeFormatting.push(null);
4423
+ return;
4424
+ }
4425
+ if (name === "caption" || name === "col" || name === "colgroup" || name === "tbody" || name === "tfoot" || name === "thead" || name === "tr") {
4426
+ if (this.hasInTableScope("tr")) {
4427
+ this.clearStackBackToTableRow();
4428
+ this.openElements.pop();
4429
+ this.insertionMode = MODES.inTableBody;
4430
+ return this.dispatchStartTag(name, raw, selfClosing, start, endIndex);
4431
+ }
4432
+ return;
4433
+ }
4434
+ return this.startInTable(name, raw, selfClosing, start, endIndex);
4435
+ }
4436
+ clearStackBackToTableRow() {
4437
+ while (this.openElements.length) {
4438
+ const top = this.currentNode();
4439
+ if (!top)
4440
+ break;
4441
+ if (top.name === "tr" || top.name === "template" || top.name === "table")
4442
+ break;
4443
+ this.openElements.pop();
4444
+ }
4445
+ }
4446
+ startInCell(name, raw, selfClosing, start, endIndex) {
4447
+ if (name === "caption" || name === "col" || name === "colgroup" || name === "tbody" || name === "td" || name === "tfoot" || name === "th" || name === "thead" || name === "tr") {
4448
+ if (this.hasInTableScope("td") || this.hasInTableScope("th")) {
4449
+ this.closeCell();
4450
+ return this.dispatchStartTag(name, raw, selfClosing, start, endIndex);
4451
+ }
4452
+ return;
4453
+ }
4454
+ return this.startInBody(name, raw, selfClosing, start, endIndex);
4455
+ }
4456
+ closeCell() {
4457
+ this.generateImpliedEndTags();
4458
+ while (this.openElements.length) {
4459
+ const popped = this.openElements.pop();
4460
+ if (popped.name === "td" || popped.name === "th")
4461
+ break;
4462
+ }
4463
+ this.clearActiveFormattingToMarker();
4464
+ this.insertionMode = MODES.inRow;
4465
+ }
4466
+ startInSelect(name, raw, _selfClosing, start, _endIndex) {
4467
+ if (name === "option") {
4468
+ if (this.currentNode()?.name === "option")
4469
+ this.openElements.pop();
4470
+ this.push(raw, NS.html, start);
4471
+ return;
4472
+ }
4473
+ if (name === "optgroup") {
4474
+ if (this.currentNode()?.name === "option")
4475
+ this.openElements.pop();
4476
+ if (this.currentNode()?.name === "optgroup")
4477
+ this.openElements.pop();
4478
+ this.push(raw, NS.html, start);
4479
+ return;
4480
+ }
4481
+ if (name === "hr")
4482
+ return;
4483
+ if (SELECT_BREAKOUT_TAGS.has(name)) {
4484
+ this.report(HTML_TAG_NOT_ALLOWED_IN_PARENT, LEVEL_ERROR, start, {
4485
+ tag: raw,
4486
+ parent: "select",
4487
+ mode: this.insertionMode,
4488
+ action: "auto-close-implicit"
4489
+ });
4490
+ if (this.hasInSelectScope("select")) {
4491
+ this.popUntilName("select");
4492
+ this.resetInsertionModeAppropriately();
4493
+ }
4494
+ if (name === "select")
4495
+ return;
4496
+ return this.dispatchStartTag(name, raw, false, start, _endIndex);
4497
+ }
4498
+ if (name === "script" || name === "template") {
4499
+ return this.startInBody(name, raw, false, start, _endIndex);
4500
+ }
4501
+ this.report(HTML_TAG_NOT_ALLOWED_IN_PARENT, LEVEL_ERROR, start, {
4502
+ tag: raw,
4503
+ parent: "select",
4504
+ mode: this.insertionMode,
4505
+ action: "ignored"
4506
+ });
4507
+ }
4508
+ startInSelectInTable(name, raw, selfClosing, start, endIndex) {
4509
+ if (name === "caption" || name === "table" || name === "tbody" || name === "tfoot" || name === "thead" || name === "tr" || name === "td" || name === "th") {
4510
+ this.report(HTML_TAG_NOT_ALLOWED_IN_PARENT, LEVEL_ERROR, start, {
4511
+ tag: raw,
4512
+ parent: "select",
4513
+ mode: this.insertionMode,
4514
+ action: "auto-close-implicit"
4515
+ });
4516
+ this.popUntilName("select");
4517
+ this.resetInsertionModeAppropriately();
4518
+ return this.dispatchStartTag(name, raw, selfClosing, start, endIndex);
4519
+ }
4520
+ return this.startInSelect(name, raw, selfClosing, start, endIndex);
4521
+ }
4522
+ resetInsertionModeAppropriately() {
4523
+ for (let i = this.openElements.length - 1;i >= 0; i--) {
4524
+ const f = this.openElements[i];
4525
+ if (f.ns !== NS.html)
4526
+ continue;
4527
+ const last = i === 0;
4528
+ switch (f.name) {
4529
+ case "select":
4530
+ this.insertionMode = MODES.inSelect;
4531
+ return;
4532
+ case "td":
4533
+ case "th":
4534
+ if (!last) {
4535
+ this.insertionMode = MODES.inCell;
4536
+ return;
4537
+ }
4538
+ break;
4539
+ case "tr":
4540
+ this.insertionMode = MODES.inRow;
4541
+ return;
4542
+ case "tbody":
4543
+ case "thead":
4544
+ case "tfoot":
4545
+ this.insertionMode = MODES.inTableBody;
4546
+ return;
4547
+ case "caption":
4548
+ this.insertionMode = MODES.inCaption;
4549
+ return;
4550
+ case "colgroup":
4551
+ this.insertionMode = MODES.inColumnGroup;
4552
+ return;
4553
+ case "table":
4554
+ this.insertionMode = MODES.inTable;
4555
+ return;
4556
+ case "template":
4557
+ this.insertionMode = this.templateInsertionModes[this.templateInsertionModes.length - 1] ?? MODES.inBody;
4558
+ return;
4559
+ default:
4560
+ break;
4561
+ }
4562
+ }
4563
+ this.insertionMode = MODES.inBody;
4564
+ }
4565
+ handleEndTag(name, start) {
4566
+ if (this.isTransparentTag(name))
4567
+ return;
4568
+ const ns = this.currentNamespace();
4569
+ if (ns !== NS.html) {
4570
+ for (let i = this.openElements.length - 1;i >= 0; i--) {
4571
+ const f = this.openElements[i];
4572
+ if (f.ns === NS.html)
4573
+ break;
4574
+ if (f.name.toLowerCase() === name) {
4575
+ this.openElements.length = i;
4576
+ return;
4577
+ }
4578
+ }
4579
+ }
4580
+ if (VOID_ELEMENTS.has(name)) {
4581
+ this.report(HTML_VOID_ELEMENT_HAS_CLOSE_TAG, LEVEL_WARN, start, {
4582
+ tag: name,
4583
+ mode: this.insertionMode
4584
+ });
4585
+ return;
4586
+ }
4587
+ if (FORMATTING_ELEMENTS.has(name)) {
4588
+ const top = this.currentNode();
4589
+ if (top && top.ns === NS.html && top.name === name) {
4590
+ this.openElements.pop();
4591
+ this.removeFromActiveFormattingByRef(top);
4592
+ return;
4593
+ }
4594
+ if (this.activeFormattingHas(name) || this.openElementsHas(name)) {
4595
+ this.report(HTML_MISNESTED_FORMATTING, LEVEL_WARN, start, {
4596
+ tag: name,
4597
+ mode: this.insertionMode
4598
+ });
4599
+ this.runAdoptionAgency(name);
4600
+ return;
4601
+ }
4602
+ this.report(HTML_UNEXPECTED_END_TAG, LEVEL_WARN, start, {
4603
+ tag: name,
4604
+ mode: this.insertionMode
4605
+ });
4606
+ return;
4607
+ }
4608
+ for (let i = this.openElements.length - 1;i >= 0; i--) {
4609
+ const f = this.openElements[i];
4610
+ if (f.ns === NS.html && f.name === name) {
4611
+ this.openElements.length = i;
4612
+ if (name === "form")
4613
+ this.formPointer = null;
4614
+ if (TABLE_SCOPE_TAGS.has(name) || name === "select" || name === "template") {
4615
+ this.resetInsertionModeAppropriately();
4616
+ }
4617
+ return;
4618
+ }
4619
+ if (f.ns === NS.html && SPECIAL_ELEMENTS.has(f.name)) {
4620
+ break;
4621
+ }
4622
+ }
4623
+ }
4624
+ removeFromActiveFormattingByRef(ref) {
4625
+ const idx = this.activeFormatting.indexOf(ref);
4626
+ if (idx >= 0)
4627
+ this.activeFormatting.splice(idx, 1);
4628
+ }
4629
+ handleText(start, end) {
4630
+ if (this.insertionMode === MODES.inTable || this.insertionMode === MODES.inTableBody || this.insertionMode === MODES.inRow) {
4631
+ const slice = this.html.slice(start, end);
4632
+ const hasNonWhitespace = /\S/.test(slice);
4633
+ if (hasNonWhitespace) {
4634
+ this.report(HTML_TEXT_NOT_ALLOWED_IN_PARENT, LEVEL_ERROR, start, {
4635
+ mode: this.insertionMode,
4636
+ snippet: slice.length > 40 ? `${slice.slice(0, 40)}…` : slice
4637
+ });
4638
+ }
4639
+ return;
4640
+ }
4641
+ if (this.insertionMode === MODES.inColumnGroup) {
4642
+ const slice = this.html.slice(start, end);
4643
+ if (/\S/.test(slice)) {
4644
+ if (this.currentNode()?.name === "colgroup") {
4645
+ this.openElements.pop();
4646
+ this.insertionMode = MODES.inTable;
4647
+ return this.handleText(start, end);
4648
+ }
4649
+ }
4650
+ return;
4651
+ }
4652
+ if (this.insertionMode === MODES.inSelect || this.insertionMode === MODES.inSelectInTable) {
4653
+ return;
4654
+ }
4655
+ }
4656
+ }
4657
+ function computeLineStarts(html) {
4658
+ const arr = [0];
4659
+ for (let i = 0;i < html.length; i++) {
4660
+ if (html.charCodeAt(i) === 10)
4661
+ arr.push(i + 1);
4662
+ }
4663
+ return arr;
4664
+ }
4665
+ function offsetToLineCol(lineStarts, offset) {
4666
+ let lo = 0;
4667
+ let hi = lineStarts.length - 1;
4668
+ while (lo < hi) {
4669
+ const mid = lo + hi + 1 >>> 1;
4670
+ if (lineStarts[mid] <= offset)
4671
+ lo = mid;
4672
+ else
4673
+ hi = mid - 1;
4674
+ }
4675
+ return { line: lo + 1, column: offset - lineStarts[lo] + 1 };
4676
+ }
4677
+ var HTML_TAG_NAME_HAS_UPPERCASE = "HTML_TAG_NAME_HAS_UPPERCASE", HTML_SVG_TAG_WILL_LOWERCASE = "HTML_SVG_TAG_WILL_LOWERCASE", HTML_TAG_NOT_ALLOWED_IN_PARENT = "HTML_TAG_NOT_ALLOWED_IN_PARENT", HTML_TEXT_NOT_ALLOWED_IN_PARENT = "HTML_TEXT_NOT_ALLOWED_IN_PARENT", HTML_VOID_ELEMENT_HAS_CLOSE_TAG = "HTML_VOID_ELEMENT_HAS_CLOSE_TAG", HTML_DUPLICATE_FORM = "HTML_DUPLICATE_FORM", HTML_NESTED_INTERACTIVE = "HTML_NESTED_INTERACTIVE", HTML_MISNESTED_FORMATTING = "HTML_MISNESTED_FORMATTING", HTML_UNEXPECTED_END_TAG = "HTML_UNEXPECTED_END_TAG", LEVEL_ERROR = "error", LEVEL_WARN = "warn", TABLE_SCOPE_TAGS, TABLE_BODY_CELL_TAGS;
4678
+ var init_htmllinter = __esm(() => {
4679
+ init_dist3();
4680
+ init_htmllinter_tables();
4681
+ TABLE_SCOPE_TAGS = new Set([
4682
+ "caption",
4683
+ "colgroup",
4684
+ "thead",
4685
+ "tbody",
4686
+ "tfoot",
4687
+ "tr",
4688
+ "td",
4689
+ "th",
4690
+ "table"
4691
+ ]);
4692
+ TABLE_BODY_CELL_TAGS = new Set(["td", "th"]);
4693
+ });
4694
+
2069
4695
  // tools/core/lint-check.js
2070
4696
  function checkComponent(Comp, lx = new LintContext) {
2071
4697
  return lx.push({ componentName: Comp.name }, () => {
@@ -2087,6 +4713,12 @@ function checkView(lx, view, Comp, referencedAlters) {
2087
4713
  checkEventModifiers(lx, view);
2088
4714
  checkKnownHandlerNames(lx, view, Comp, referencedAlters);
2089
4715
  checkMacroCallArgs(lx, view, Comp);
4716
+ checkHtmlStructure(lx, view);
4717
+ }
4718
+ function checkHtmlStructure(lx, view) {
4719
+ if (typeof view.rawView !== "string" || !view.rawView)
4720
+ return;
4721
+ lintHtml(view.rawView, (f) => lx.report(f.id, { ...f.info, location: f.location }, f.level), HTML_LINT_OPTS);
2090
4722
  }
2091
4723
  function checkParseIssues(lx, view) {
2092
4724
  const issues = view.ctx.parseIssues;
@@ -2434,21 +5066,22 @@ class LintContext {
2434
5066
  }
2435
5067
  }
2436
5068
  error(id, info) {
2437
- this.report(id, info, LEVEL_ERROR);
5069
+ this.report(id, info, LEVEL_ERROR2);
2438
5070
  }
2439
5071
  warn(id, info) {
2440
- this.report(id, info, LEVEL_WARN);
5072
+ this.report(id, info, LEVEL_WARN2);
2441
5073
  }
2442
5074
  hint(id, info) {
2443
5075
  this.report(id, info, LEVEL_HINT);
2444
5076
  }
2445
- report(id, info = {}, level = LEVEL_ERROR) {
5077
+ report(id, info = {}, level = LEVEL_ERROR2) {
2446
5078
  this.reports.push({ id, info, level, context: { ...this.frame } });
2447
5079
  }
2448
5080
  }
2449
- var ALT_HANDLER_NOT_DEFINED = "ALT_HANDLER_NOT_DEFINED", ALT_HANDLER_NOT_REFERENCED = "ALT_HANDLER_NOT_REFERENCED", RENDER_IT_OUTSIDE_OF_LOOP = "RENDER_IT_OUTSIDE_OF_LOOP", UNKNOWN_EVENT_MODIFIER = "UNKNOWN_EVENT_MODIFIER", UNKNOWN_HANDLER_ARG_NAME = "UNKNOWN_HANDLER_ARG_NAME", INPUT_HANDLER_NOT_IMPLEMENTED = "INPUT_HANDLER_NOT_IMPLEMENTED", INPUT_HANDLER_NOT_REFERENCED = "INPUT_HANDLER_NOT_REFERENCED", INPUT_HANDLER_METHOD_NOT_IMPLEMENTED = "INPUT_HANDLER_METHOD_NOT_IMPLEMENTED", INPUT_HANDLER_FOR_INPUT_HANDLER_METHOD = "INPUT_HANDLER_FOR_INPUT_HANDLER_METHOD", INPUT_HANDLER_METHOD_FOR_INPUT_HANDLER = "INPUT_HANDLER_METHOD_FOR_INPUT_HANDLER", FIELD_VAL_NOT_DEFINED = "FIELD_VAL_NOT_DEFINED", DUPLICATE_ATTR_DEFINITION = "DUPLICATE_ATTR_DEFINITION", IF_NO_BRANCH_SET = "IF_NO_BRANCH_SET", UNKNOWN_REQUEST_NAME = "UNKNOWN_REQUEST_NAME", UNKNOWN_COMPONENT_NAME = "UNKNOWN_COMPONENT_NAME", UNKNOWN_MACRO_ARG = "UNKNOWN_MACRO_ARG", UNKNOWN_DIRECTIVE = "UNKNOWN_DIRECTIVE", UNKNOWN_X_OP = "UNKNOWN_X_OP", UNKNOWN_X_ATTR = "UNKNOWN_X_ATTR", MAYBE_DROP_AT_PREFIX = "MAYBE_DROP_AT_PREFIX", BAD_VALUE = "BAD_VALUE", PARSE_ISSUE_KIND_TO_LINT_ID, X_KNOWN_OP_NAMES, X_KNOWN_ATTR_NAMES, AT_PREFIX_HINT_KNOWN_BY_KIND, LEVEL_WARN = "warn", LEVEL_ERROR = "error", LEVEL_HINT = "hint", NO_WRAPPERS, KNOWN_HANDLER_NAMES, NODE_KIND_TO_CTX, LintParseContext;
5081
+ var ALT_HANDLER_NOT_DEFINED = "ALT_HANDLER_NOT_DEFINED", ALT_HANDLER_NOT_REFERENCED = "ALT_HANDLER_NOT_REFERENCED", RENDER_IT_OUTSIDE_OF_LOOP = "RENDER_IT_OUTSIDE_OF_LOOP", UNKNOWN_EVENT_MODIFIER = "UNKNOWN_EVENT_MODIFIER", UNKNOWN_HANDLER_ARG_NAME = "UNKNOWN_HANDLER_ARG_NAME", INPUT_HANDLER_NOT_IMPLEMENTED = "INPUT_HANDLER_NOT_IMPLEMENTED", INPUT_HANDLER_NOT_REFERENCED = "INPUT_HANDLER_NOT_REFERENCED", INPUT_HANDLER_METHOD_NOT_IMPLEMENTED = "INPUT_HANDLER_METHOD_NOT_IMPLEMENTED", INPUT_HANDLER_FOR_INPUT_HANDLER_METHOD = "INPUT_HANDLER_FOR_INPUT_HANDLER_METHOD", INPUT_HANDLER_METHOD_FOR_INPUT_HANDLER = "INPUT_HANDLER_METHOD_FOR_INPUT_HANDLER", FIELD_VAL_NOT_DEFINED = "FIELD_VAL_NOT_DEFINED", DUPLICATE_ATTR_DEFINITION = "DUPLICATE_ATTR_DEFINITION", IF_NO_BRANCH_SET = "IF_NO_BRANCH_SET", UNKNOWN_REQUEST_NAME = "UNKNOWN_REQUEST_NAME", UNKNOWN_COMPONENT_NAME = "UNKNOWN_COMPONENT_NAME", UNKNOWN_MACRO_ARG = "UNKNOWN_MACRO_ARG", UNKNOWN_DIRECTIVE = "UNKNOWN_DIRECTIVE", UNKNOWN_X_OP = "UNKNOWN_X_OP", UNKNOWN_X_ATTR = "UNKNOWN_X_ATTR", MAYBE_DROP_AT_PREFIX = "MAYBE_DROP_AT_PREFIX", BAD_VALUE = "BAD_VALUE", PARSE_ISSUE_KIND_TO_LINT_ID, X_KNOWN_OP_NAMES, X_KNOWN_ATTR_NAMES, AT_PREFIX_HINT_KNOWN_BY_KIND, LEVEL_WARN2 = "warn", LEVEL_ERROR2 = "error", LEVEL_HINT = "hint", HTML_LINT_OPTS, NO_WRAPPERS, KNOWN_HANDLER_NAMES, NODE_KIND_TO_CTX, LintParseContext;
2450
5082
  var init_lint_check = __esm(() => {
2451
5083
  init_anode();
5084
+ init_htmllinter();
2452
5085
  PARSE_ISSUE_KIND_TO_LINT_ID = {
2453
5086
  "unknown-directive": UNKNOWN_DIRECTIVE,
2454
5087
  "unknown-x-op": UNKNOWN_X_OP,
@@ -2469,6 +5102,10 @@ var init_lint_check = __esm(() => {
2469
5102
  "unknown-x-op": X_KNOWN_OP_NAMES,
2470
5103
  "unknown-x-attr": X_KNOWN_ATTR_NAMES
2471
5104
  };
5105
+ HTML_LINT_OPTS = {
5106
+ fragmentContext: "template",
5107
+ transparentTagPrefixes: ["x"]
5108
+ };
2472
5109
  NO_WRAPPERS = {};
2473
5110
  KNOWN_HANDLER_NAMES = new Set([
2474
5111
  "value",
@@ -2500,8 +5137,8 @@ var init_lint_check = __esm(() => {
2500
5137
  PushViewNameNode: { originAttr: "<x push-view>" }
2501
5138
  };
2502
5139
  LintParseContext = class LintParseContext extends ParseContext {
2503
- constructor(document2, Text, Comment) {
2504
- super(document2, Text, Comment);
5140
+ constructor(document2, Text2, Comment2) {
5141
+ super(document2, Text2, Comment2);
2505
5142
  this.attrs = [];
2506
5143
  this.parseIssues = [];
2507
5144
  }
@@ -2682,7 +5319,7 @@ var init_stack = __esm(() => {
2682
5319
  });
2683
5320
 
2684
5321
  // src/transactor.js
2685
- class State {
5322
+ class State2 {
2686
5323
  constructor(val) {
2687
5324
  this.val = val;
2688
5325
  this.changeSubs = [];
@@ -2705,7 +5342,7 @@ class Transactor {
2705
5342
  constructor(comps, rootValue) {
2706
5343
  this.comps = comps;
2707
5344
  this.transactions = [];
2708
- this.state = new State(rootValue);
5345
+ this.state = new State2(rootValue);
2709
5346
  this.onTransactionPushed = () => {};
2710
5347
  }
2711
5348
  pushTransaction(t) {
@@ -8412,18 +11049,18 @@ async function createNodeEnv() {
8412
11049
  const dom = new JSDOM("<!DOCTYPE html><html><head></head><body></body></html>", {
8413
11050
  virtualConsole
8414
11051
  });
8415
- const { document: document2, Text, Comment } = dom.window;
11052
+ const { document: document2, Text: Text2, Comment: Comment2 } = dom.window;
8416
11053
  globalThis.document = document2;
8417
11054
 
8418
11055
  class HeadlessParseContext extends ParseContext {
8419
11056
  constructor() {
8420
- super(document2, Text, Comment);
11057
+ super(document2, Text2, Comment2);
8421
11058
  }
8422
11059
  }
8423
11060
 
8424
11061
  class HeadlessLintParseContext extends LintParseContext {
8425
11062
  constructor() {
8426
- super(document2, Text, Comment);
11063
+ super(document2, Text2, Comment2);
8427
11064
  }
8428
11065
  }
8429
11066
  return {
@@ -8570,12 +11207,36 @@ function lintIdToMessage(id, info) {
8570
11207
  }
8571
11208
  case "BAD_VALUE":
8572
11209
  return `${badValueMessage(info)}${fmtTagSuffix(info)}`;
11210
+ case "HTML_TAG_NAME_HAS_UPPERCASE":
11211
+ return `Tag <${info.raw}> will be lowercased to <${info.lowercased}>${fmtLocationSuffix(info)}`;
11212
+ case "HTML_SVG_TAG_WILL_LOWERCASE":
11213
+ return `SVG tag <${info.raw}> is not in the WHATWG case-correction list — will be lowercased to <${info.lowercased}>${fmtLocationSuffix(info)}`;
11214
+ case "HTML_TAG_NOT_ALLOWED_IN_PARENT":
11215
+ return `<${info.tag}> not allowed under <${info.parent ?? "?"}> in ${info.mode} (action: ${info.action})${fmtLocationSuffix(info)}`;
11216
+ case "HTML_TEXT_NOT_ALLOWED_IN_PARENT":
11217
+ return `Non-whitespace text not allowed in ${info.mode}: ${JSON.stringify(info.snippet)}${fmtLocationSuffix(info)}`;
11218
+ case "HTML_VOID_ELEMENT_HAS_CLOSE_TAG":
11219
+ return `Void element <${info.tag}> has an explicit close tag${fmtLocationSuffix(info)}`;
11220
+ case "HTML_DUPLICATE_FORM":
11221
+ return `Nested <form> — the inner form will be dropped by the parser${fmtLocationSuffix(info)}`;
11222
+ case "HTML_NESTED_INTERACTIVE":
11223
+ return `<${info.tag}> nested inside another <${info.tag}> — adoption agency will reorder${fmtLocationSuffix(info)}`;
11224
+ case "HTML_MISNESTED_FORMATTING":
11225
+ return `Misnested formatting tag </${info.tag}> — adoption agency will reorder nodes${fmtLocationSuffix(info)}`;
11226
+ case "HTML_UNEXPECTED_END_TAG":
11227
+ return `Unexpected end tag </${info.tag}>${fmtLocationSuffix(info)}`;
8573
11228
  case "LINT_ERROR":
8574
11229
  return info.message;
8575
11230
  default:
8576
11231
  return id;
8577
11232
  }
8578
11233
  }
11234
+ function fmtLocationSuffix(info) {
11235
+ const loc = info?.location;
11236
+ if (!loc)
11237
+ return "";
11238
+ return ` at L${loc.line}:C${loc.column}`;
11239
+ }
8579
11240
 
8580
11241
  // tools/format/cli.js
8581
11242
  function fmtModuleInfo(info) {