tutuca 0.9.37 → 0.9.39

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,405 +2066,37 @@ 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
2069
+ // tools/core/html-tokenizer.js
2430
2070
  function isWhitespace(c) {
2431
- return c === CharCodes2.Space || c === CharCodes2.NewLine || c === CharCodes2.Tab || c === CharCodes2.FormFeed || c === CharCodes2.CarriageReturn;
2071
+ return c === CharCodes.Space || c === CharCodes.NewLine || c === CharCodes.Tab || c === CharCodes.FormFeed || c === CharCodes.CarriageReturn;
2432
2072
  }
2433
2073
  function isEndOfTagSection(c) {
2434
- return c === CharCodes2.Slash || c === CharCodes2.Gt || isWhitespace(c);
2074
+ return c === CharCodes.Slash || c === CharCodes.Gt || isWhitespace(c);
2435
2075
  }
2436
2076
  function isASCIIAlpha(c) {
2437
- return c >= CharCodes2.LowerA && c <= CharCodes2.LowerZ || c >= CharCodes2.UpperA && c <= CharCodes2.UpperZ;
2077
+ return c >= CharCodes.LowerA && c <= CharCodes.LowerZ || c >= CharCodes.UpperA && c <= CharCodes.UpperZ;
2438
2078
  }
2439
2079
 
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) {
2080
+ class HtmlTokenizer {
2081
+ constructor({ xmlMode = false, recognizeSelfClosing = xmlMode } = {}, cbs) {
2456
2082
  this.cbs = cbs;
2457
2083
  this.xmlMode = xmlMode;
2458
- this.decodeEntities = decodeEntities;
2459
2084
  this.recognizeSelfClosing = recognizeSelfClosing;
2460
- this.entityDecoder = new EntityDecoder(xmlMode ? xmlDecodeTree : htmlDecodeTree, (cp, consumed) => this.emitCodePoint(cp, consumed));
2085
+ this.state = State.Text;
2086
+ this.buffer = "";
2087
+ this.sectionStart = 0;
2088
+ this.index = 0;
2089
+ this.isSpecial = false;
2090
+ this.running = true;
2091
+ this.offset = 0;
2092
+ this.currentSequence = Sequences.Empty;
2093
+ this.sequenceIndex = 0;
2461
2094
  }
2462
2095
  reset() {
2463
2096
  this.state = State.Text;
2464
2097
  this.buffer = "";
2465
2098
  this.sectionStart = 0;
2466
2099
  this.index = 0;
2467
- this.baseState = State.Text;
2468
2100
  this.isSpecial = false;
2469
2101
  this.currentSequence = Sequences.Empty;
2470
2102
  this.sequenceIndex = 0;
@@ -2490,18 +2122,14 @@ class Tokenizer {
2490
2122
  }
2491
2123
  }
2492
2124
  stateText(c) {
2493
- if (c === CharCodes2.Lt || !this.decodeEntities && this.fastForwardTo(CharCodes2.Lt)) {
2125
+ if (c === CharCodes.Lt || this.fastForwardTo(CharCodes.Lt)) {
2494
2126
  if (this.index > this.sectionStart) {
2495
2127
  this.cbs.ontext(this.sectionStart, this.index);
2496
2128
  }
2497
2129
  this.state = State.BeforeTagName;
2498
2130
  this.sectionStart = this.index;
2499
- } else if (this.decodeEntities && c === CharCodes2.Amp) {
2500
- this.startEntity();
2501
2131
  }
2502
2132
  }
2503
- currentSequence = Sequences.Empty;
2504
- sequenceIndex = 0;
2505
2133
  enterTagBody() {
2506
2134
  if (this.currentSequence === Sequences.Plaintext) {
2507
2135
  this.currentSequence = Sequences.Empty;
@@ -2583,12 +2211,12 @@ class Tokenizer {
2583
2211
  this.state = State.Text;
2584
2212
  }
2585
2213
  stateInCommentLike(c) {
2586
- if (!this.xmlMode && this.currentSequence === Sequences.CommentEnd && this.sequenceIndex <= 1 && this.index === this.sectionStart + this.sequenceIndex && c === CharCodes2.Gt) {
2214
+ if (!this.xmlMode && this.currentSequence === Sequences.CommentEnd && this.sequenceIndex <= 1 && this.index === this.sectionStart + this.sequenceIndex && c === CharCodes.Gt) {
2587
2215
  this.emitComment(this.sequenceIndex);
2588
- } else if (this.currentSequence === Sequences.CommentEnd && this.sequenceIndex === 2 && c === CharCodes2.Gt) {
2216
+ } else if (this.currentSequence === Sequences.CommentEnd && this.sequenceIndex === 2 && c === CharCodes.Gt) {
2589
2217
  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);
2218
+ } else if (this.currentSequence === Sequences.CommentEnd && this.sequenceIndex === this.currentSequence.length - 1 && c !== CharCodes.Gt) {
2219
+ this.sequenceIndex = Number(c === CharCodes.Dash);
2592
2220
  } else if (c === this.currentSequence[this.sequenceIndex]) {
2593
2221
  if (++this.sequenceIndex === this.currentSequence.length) {
2594
2222
  if (this.currentSequence === Sequences.CdataEnd) {
@@ -2631,22 +2259,18 @@ class Tokenizer {
2631
2259
  if ((c | 32) === this.currentSequence[this.sequenceIndex]) {
2632
2260
  this.sequenceIndex += 1;
2633
2261
  } 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)) {
2262
+ if (this.fastForwardTo(CharCodes.Lt)) {
2639
2263
  this.sequenceIndex = 1;
2640
2264
  }
2641
2265
  } else {
2642
- this.sequenceIndex = Number(c === CharCodes2.Lt);
2266
+ this.sequenceIndex = Number(c === CharCodes.Lt);
2643
2267
  }
2644
2268
  }
2645
2269
  stateBeforeTagName(c) {
2646
- if (c === CharCodes2.ExclamationMark) {
2270
+ if (c === CharCodes.ExclamationMark) {
2647
2271
  this.state = State.BeforeDeclaration;
2648
2272
  this.sectionStart = this.index + 1;
2649
- } else if (c === CharCodes2.Questionmark) {
2273
+ } else if (c === CharCodes.Questionmark) {
2650
2274
  if (this.xmlMode) {
2651
2275
  this.state = State.InProcessingInstruction;
2652
2276
  this.sequenceIndex = 0;
@@ -2666,7 +2290,7 @@ class Tokenizer {
2666
2290
  this.sequenceIndex = 3;
2667
2291
  this.state = State.SpecialStartSequence;
2668
2292
  }
2669
- } else if (c === CharCodes2.Slash) {
2293
+ } else if (c === CharCodes.Slash) {
2670
2294
  this.state = State.BeforeClosingTagName;
2671
2295
  } else {
2672
2296
  this.state = State.Text;
@@ -2683,11 +2307,11 @@ class Tokenizer {
2683
2307
  }
2684
2308
  stateBeforeClosingTagName(c) {
2685
2309
  if (isWhitespace(c)) {
2686
- if (this.xmlMode) {} else {
2310
+ if (!this.xmlMode) {
2687
2311
  this.state = State.InSpecialComment;
2688
2312
  this.sectionStart = this.index;
2689
2313
  }
2690
- } else if (c === CharCodes2.Gt) {
2314
+ } else if (c === CharCodes.Gt) {
2691
2315
  this.state = State.Text;
2692
2316
  if (!this.xmlMode) {
2693
2317
  this.sectionStart = this.index + 1;
@@ -2706,17 +2330,17 @@ class Tokenizer {
2706
2330
  }
2707
2331
  }
2708
2332
  stateAfterClosingTagName(c) {
2709
- if (c === CharCodes2.Gt || this.fastForwardTo(CharCodes2.Gt)) {
2333
+ if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {
2710
2334
  this.state = State.Text;
2711
2335
  this.sectionStart = this.index + 1;
2712
2336
  }
2713
2337
  }
2714
2338
  stateBeforeAttributeName(c) {
2715
- if (c === CharCodes2.Gt) {
2339
+ if (c === CharCodes.Gt) {
2716
2340
  this.cbs.onopentagend(this.index);
2717
2341
  this.enterTagBody();
2718
2342
  this.sectionStart = this.index + 1;
2719
- } else if (c === CharCodes2.Slash) {
2343
+ } else if (c === CharCodes.Slash) {
2720
2344
  this.state = State.InSelfClosingTag;
2721
2345
  } else if (!isWhitespace(c)) {
2722
2346
  this.state = State.InAttributeName;
@@ -2724,7 +2348,7 @@ class Tokenizer {
2724
2348
  }
2725
2349
  }
2726
2350
  stateInSelfClosingTag(c) {
2727
- if (c === CharCodes2.Gt) {
2351
+ if (c === CharCodes.Gt) {
2728
2352
  this.cbs.onselfclosingtag(this.index);
2729
2353
  this.sectionStart = this.index + 1;
2730
2354
  if (!this.recognizeSelfClosing) {
@@ -2740,7 +2364,7 @@ class Tokenizer {
2740
2364
  }
2741
2365
  }
2742
2366
  stateInAttributeName(c) {
2743
- if (c === CharCodes2.Eq || isEndOfTagSection(c)) {
2367
+ if (c === CharCodes.Eq || isEndOfTagSection(c)) {
2744
2368
  this.cbs.onattribname(this.sectionStart, this.index);
2745
2369
  this.sectionStart = this.index;
2746
2370
  this.state = State.AfterAttributeName;
@@ -2748,9 +2372,9 @@ class Tokenizer {
2748
2372
  }
2749
2373
  }
2750
2374
  stateAfterAttributeName(c) {
2751
- if (c === CharCodes2.Eq) {
2375
+ if (c === CharCodes.Eq) {
2752
2376
  this.state = State.BeforeAttributeValue;
2753
- } else if (c === CharCodes2.Slash || c === CharCodes2.Gt) {
2377
+ } else if (c === CharCodes.Slash || c === CharCodes.Gt) {
2754
2378
  this.cbs.onattribend(QuoteType.NoValue, this.sectionStart);
2755
2379
  this.sectionStart = -1;
2756
2380
  this.state = State.BeforeAttributeName;
@@ -2762,10 +2386,10 @@ class Tokenizer {
2762
2386
  }
2763
2387
  }
2764
2388
  stateBeforeAttributeValue(c) {
2765
- if (c === CharCodes2.DoubleQuote) {
2389
+ if (c === CharCodes.DoubleQuote) {
2766
2390
  this.state = State.InAttributeValueDq;
2767
2391
  this.sectionStart = this.index + 1;
2768
- } else if (c === CharCodes2.SingleQuote) {
2392
+ } else if (c === CharCodes.SingleQuote) {
2769
2393
  this.state = State.InAttributeValueSq;
2770
2394
  this.sectionStart = this.index + 1;
2771
2395
  } else if (!isWhitespace(c)) {
@@ -2775,47 +2399,43 @@ class Tokenizer {
2775
2399
  }
2776
2400
  }
2777
2401
  handleInAttributeValue(c, quote) {
2778
- if (c === quote || !this.decodeEntities && this.fastForwardTo(quote)) {
2402
+ if (c === quote || this.fastForwardTo(quote)) {
2779
2403
  this.cbs.onattribdata(this.sectionStart, this.index);
2780
2404
  this.sectionStart = -1;
2781
- this.cbs.onattribend(quote === CharCodes2.DoubleQuote ? QuoteType.Double : QuoteType.Single, this.index + 1);
2405
+ this.cbs.onattribend(quote === CharCodes.DoubleQuote ? QuoteType.Double : QuoteType.Single, this.index + 1);
2782
2406
  this.state = State.BeforeAttributeName;
2783
- } else if (this.decodeEntities && c === CharCodes2.Amp) {
2784
- this.startEntity();
2785
2407
  }
2786
2408
  }
2787
2409
  stateInAttributeValueDoubleQuotes(c) {
2788
- this.handleInAttributeValue(c, CharCodes2.DoubleQuote);
2410
+ this.handleInAttributeValue(c, CharCodes.DoubleQuote);
2789
2411
  }
2790
2412
  stateInAttributeValueSingleQuotes(c) {
2791
- this.handleInAttributeValue(c, CharCodes2.SingleQuote);
2413
+ this.handleInAttributeValue(c, CharCodes.SingleQuote);
2792
2414
  }
2793
2415
  stateInAttributeValueNoQuotes(c) {
2794
- if (isWhitespace(c) || c === CharCodes2.Gt) {
2416
+ if (isWhitespace(c) || c === CharCodes.Gt) {
2795
2417
  this.cbs.onattribdata(this.sectionStart, this.index);
2796
2418
  this.sectionStart = -1;
2797
2419
  this.cbs.onattribend(QuoteType.Unquoted, this.index);
2798
2420
  this.state = State.BeforeAttributeName;
2799
2421
  this.stateBeforeAttributeName(c);
2800
- } else if (this.decodeEntities && c === CharCodes2.Amp) {
2801
- this.startEntity();
2802
2422
  }
2803
2423
  }
2804
2424
  stateBeforeDeclaration(c) {
2805
- if (c === CharCodes2.OpeningSquareBracket) {
2425
+ if (c === CharCodes.OpeningSquareBracket) {
2806
2426
  this.state = State.CDATASequence;
2807
2427
  this.sequenceIndex = 0;
2808
2428
  } else if (this.xmlMode) {
2809
- this.state = c === CharCodes2.Dash ? State.BeforeComment : State.InDeclaration;
2429
+ this.state = c === CharCodes.Dash ? State.BeforeComment : State.InDeclaration;
2810
2430
  } else if ((c | 32) === Sequences.Doctype[0]) {
2811
2431
  this.state = State.DeclarationSequence;
2812
2432
  this.currentSequence = Sequences.Doctype;
2813
2433
  this.sequenceIndex = 1;
2814
- } else if (c === CharCodes2.Gt) {
2434
+ } else if (c === CharCodes.Gt) {
2815
2435
  this.cbs.oncomment(this.sectionStart, this.index, 0);
2816
2436
  this.state = State.Text;
2817
2437
  this.sectionStart = this.index + 1;
2818
- } else if (c === CharCodes2.Dash) {
2438
+ } else if (c === CharCodes.Dash) {
2819
2439
  this.state = State.BeforeComment;
2820
2440
  } else {
2821
2441
  this.state = State.InSpecialComment;
@@ -2827,7 +2447,7 @@ class Tokenizer {
2827
2447
  this.stateInDeclaration(c);
2828
2448
  } else if ((c | 32) === this.currentSequence[this.sequenceIndex]) {
2829
2449
  this.sequenceIndex += 1;
2830
- } else if (c === CharCodes2.Gt) {
2450
+ } else if (c === CharCodes.Gt) {
2831
2451
  this.cbs.oncomment(this.sectionStart, this.index, 0);
2832
2452
  this.state = State.Text;
2833
2453
  this.sectionStart = this.index + 1;
@@ -2836,33 +2456,33 @@ class Tokenizer {
2836
2456
  }
2837
2457
  }
2838
2458
  stateInDeclaration(c) {
2839
- if (c === CharCodes2.Gt || this.fastForwardTo(CharCodes2.Gt)) {
2459
+ if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {
2840
2460
  this.cbs.ondeclaration(this.sectionStart, this.index);
2841
2461
  this.state = State.Text;
2842
2462
  this.sectionStart = this.index + 1;
2843
2463
  }
2844
2464
  }
2845
2465
  stateInProcessingInstruction(c) {
2846
- if (c === CharCodes2.Questionmark) {
2466
+ if (c === CharCodes.Questionmark) {
2847
2467
  this.sequenceIndex = 1;
2848
- } else if (c === CharCodes2.Gt && this.sequenceIndex === 1) {
2468
+ } else if (c === CharCodes.Gt && this.sequenceIndex === 1) {
2849
2469
  this.cbs.onprocessinginstruction(this.sectionStart, this.index - 1);
2850
2470
  this.sequenceIndex = 0;
2851
2471
  this.state = State.Text;
2852
2472
  this.sectionStart = this.index + 1;
2853
2473
  } else {
2854
- this.sequenceIndex = Number(this.fastForwardTo(CharCodes2.Questionmark));
2474
+ this.sequenceIndex = Number(this.fastForwardTo(CharCodes.Questionmark));
2855
2475
  }
2856
2476
  }
2857
2477
  stateBeforeComment(c) {
2858
- if (c === CharCodes2.Dash) {
2478
+ if (c === CharCodes.Dash) {
2859
2479
  this.state = State.InCommentLike;
2860
2480
  this.currentSequence = Sequences.CommentEnd;
2861
2481
  this.sequenceIndex = 0;
2862
2482
  this.sectionStart = this.index + 1;
2863
2483
  } else if (this.xmlMode) {
2864
2484
  this.state = State.InDeclaration;
2865
- } else if (c === CharCodes2.Gt) {
2485
+ } else if (c === CharCodes.Gt) {
2866
2486
  this.cbs.oncomment(this.sectionStart, this.index, 0);
2867
2487
  this.state = State.Text;
2868
2488
  this.sectionStart = this.index + 1;
@@ -2871,35 +2491,12 @@ class Tokenizer {
2871
2491
  }
2872
2492
  }
2873
2493
  stateInSpecialComment(c) {
2874
- if (c === CharCodes2.Gt || this.fastForwardTo(CharCodes2.Gt)) {
2494
+ if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {
2875
2495
  this.cbs.oncomment(this.sectionStart, this.index, 0);
2876
2496
  this.state = State.Text;
2877
2497
  this.sectionStart = this.index + 1;
2878
2498
  }
2879
2499
  }
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
2500
  cleanup() {
2904
2501
  if (this.running && this.sectionStart !== this.index) {
2905
2502
  if (this.state === State.Text || this.state === State.InPlainText || this.state === State.InSpecialTag && this.sequenceIndex === 0) {
@@ -2918,127 +2515,93 @@ class Tokenizer {
2918
2515
  while (this.shouldContinue()) {
2919
2516
  const c = this.buffer.charCodeAt(this.index - this.offset);
2920
2517
  switch (this.state) {
2921
- case State.Text: {
2518
+ case State.Text:
2922
2519
  this.stateText(c);
2923
2520
  break;
2924
- }
2925
- case State.InPlainText: {
2521
+ case State.InPlainText:
2926
2522
  this.index = this.buffer.length + this.offset - 1;
2927
2523
  break;
2928
- }
2929
- case State.SpecialStartSequence: {
2524
+ case State.SpecialStartSequence:
2930
2525
  this.stateSpecialStartSequence(c);
2931
2526
  break;
2932
- }
2933
- case State.InSpecialTag: {
2527
+ case State.InSpecialTag:
2934
2528
  this.stateInSpecialTag(c);
2935
2529
  break;
2936
- }
2937
- case State.CDATASequence: {
2530
+ case State.CDATASequence:
2938
2531
  this.stateCDATASequence(c);
2939
2532
  break;
2940
- }
2941
- case State.DeclarationSequence: {
2533
+ case State.DeclarationSequence:
2942
2534
  this.stateDeclarationSequence(c);
2943
2535
  break;
2944
- }
2945
- case State.InAttributeValueDq: {
2536
+ case State.InAttributeValueDq:
2946
2537
  this.stateInAttributeValueDoubleQuotes(c);
2947
2538
  break;
2948
- }
2949
- case State.InAttributeName: {
2539
+ case State.InAttributeName:
2950
2540
  this.stateInAttributeName(c);
2951
2541
  break;
2952
- }
2953
- case State.InCommentLike: {
2542
+ case State.InCommentLike:
2954
2543
  this.stateInCommentLike(c);
2955
2544
  break;
2956
- }
2957
- case State.InSpecialComment: {
2545
+ case State.InSpecialComment:
2958
2546
  this.stateInSpecialComment(c);
2959
2547
  break;
2960
- }
2961
- case State.BeforeAttributeName: {
2548
+ case State.BeforeAttributeName:
2962
2549
  this.stateBeforeAttributeName(c);
2963
2550
  break;
2964
- }
2965
- case State.InTagName: {
2551
+ case State.InTagName:
2966
2552
  this.stateInTagName(c);
2967
2553
  break;
2968
- }
2969
- case State.InClosingTagName: {
2554
+ case State.InClosingTagName:
2970
2555
  this.stateInClosingTagName(c);
2971
2556
  break;
2972
- }
2973
- case State.BeforeTagName: {
2557
+ case State.BeforeTagName:
2974
2558
  this.stateBeforeTagName(c);
2975
2559
  break;
2976
- }
2977
- case State.AfterAttributeName: {
2560
+ case State.AfterAttributeName:
2978
2561
  this.stateAfterAttributeName(c);
2979
2562
  break;
2980
- }
2981
- case State.InAttributeValueSq: {
2563
+ case State.InAttributeValueSq:
2982
2564
  this.stateInAttributeValueSingleQuotes(c);
2983
2565
  break;
2984
- }
2985
- case State.BeforeAttributeValue: {
2566
+ case State.BeforeAttributeValue:
2986
2567
  this.stateBeforeAttributeValue(c);
2987
2568
  break;
2988
- }
2989
- case State.BeforeClosingTagName: {
2569
+ case State.BeforeClosingTagName:
2990
2570
  this.stateBeforeClosingTagName(c);
2991
2571
  break;
2992
- }
2993
- case State.AfterClosingTagName: {
2572
+ case State.AfterClosingTagName:
2994
2573
  this.stateAfterClosingTagName(c);
2995
2574
  break;
2996
- }
2997
- case State.InAttributeValueNq: {
2575
+ case State.InAttributeValueNq:
2998
2576
  this.stateInAttributeValueNoQuotes(c);
2999
2577
  break;
3000
- }
3001
- case State.InSelfClosingTag: {
2578
+ case State.InSelfClosingTag:
3002
2579
  this.stateInSelfClosingTag(c);
3003
2580
  break;
3004
- }
3005
- case State.InDeclaration: {
2581
+ case State.InDeclaration:
3006
2582
  this.stateInDeclaration(c);
3007
2583
  break;
3008
- }
3009
- case State.BeforeDeclaration: {
2584
+ case State.BeforeDeclaration:
3010
2585
  this.stateBeforeDeclaration(c);
3011
2586
  break;
3012
- }
3013
- case State.BeforeComment: {
2587
+ case State.BeforeComment:
3014
2588
  this.stateBeforeComment(c);
3015
2589
  break;
3016
- }
3017
- case State.InProcessingInstruction: {
2590
+ case State.InProcessingInstruction:
3018
2591
  this.stateInProcessingInstruction(c);
3019
2592
  break;
3020
- }
3021
- case State.InEntity: {
3022
- this.stateInEntity();
3023
- break;
3024
- }
3025
2593
  }
3026
2594
  this.index++;
3027
2595
  }
3028
2596
  this.cleanup();
3029
2597
  }
3030
2598
  finish() {
3031
- if (this.state === State.InEntity) {
3032
- this.entityDecoder.end();
3033
- this.state = this.baseState;
3034
- }
3035
2599
  this.handleTrailingData();
3036
2600
  this.cbs.onend();
3037
2601
  }
3038
2602
  handleTrailingCommentLikeData(endIndex) {
3039
- if (this.state !== State.InCommentLike) {
2603
+ if (this.state !== State.InCommentLike)
3040
2604
  return false;
3041
- }
3042
2605
  if (this.currentSequence === Sequences.CdataEnd) {
3043
2606
  if (this.xmlMode) {
3044
2607
  if (this.sectionStart < endIndex) {
@@ -3061,35 +2624,29 @@ class Tokenizer {
3061
2624
  case State.BeforeComment:
3062
2625
  case State.CDATASequence:
3063
2626
  case State.DeclarationSequence:
3064
- case State.InDeclaration: {
2627
+ case State.InDeclaration:
3065
2628
  this.cbs.ontext(this.sectionStart, endIndex);
3066
2629
  return true;
3067
- }
3068
- default: {
2630
+ default:
3069
2631
  return false;
3070
- }
3071
2632
  }
3072
2633
  }
3073
2634
  switch (this.state) {
3074
2635
  case State.BeforeDeclaration:
3075
2636
  case State.InSpecialComment:
3076
2637
  case State.BeforeComment:
3077
- case State.CDATASequence: {
2638
+ case State.CDATASequence:
3078
2639
  this.cbs.oncomment(this.sectionStart, endIndex, 0);
3079
2640
  return true;
3080
- }
3081
- case State.DeclarationSequence: {
2641
+ case State.DeclarationSequence:
3082
2642
  if (this.sequenceIndex !== Sequences.Doctype.length) {
3083
2643
  this.cbs.oncomment(this.sectionStart, endIndex, 0);
3084
2644
  }
3085
2645
  return true;
3086
- }
3087
- case State.InDeclaration: {
2646
+ case State.InDeclaration:
3088
2647
  return true;
3089
- }
3090
- default: {
2648
+ default:
3091
2649
  return false;
3092
- }
3093
2650
  }
3094
2651
  }
3095
2652
  handleTrailingData() {
@@ -3097,9 +2654,8 @@ class Tokenizer {
3097
2654
  if (this.handleTrailingCommentLikeData(endIndex) || this.handleTrailingMarkupDeclaration(endIndex)) {
3098
2655
  return;
3099
2656
  }
3100
- if (this.sectionStart >= endIndex) {
2657
+ if (this.sectionStart >= endIndex)
3101
2658
  return;
3102
- }
3103
2659
  switch (this.state) {
3104
2660
  case State.InTagName:
3105
2661
  case State.BeforeAttributeName:
@@ -3109,98 +2665,76 @@ class Tokenizer {
3109
2665
  case State.InAttributeValueSq:
3110
2666
  case State.InAttributeValueDq:
3111
2667
  case State.InAttributeValueNq:
3112
- case State.InClosingTagName: {
2668
+ case State.InClosingTagName:
3113
2669
  break;
3114
- }
3115
- default: {
2670
+ default:
3116
2671
  this.cbs.ontext(this.sectionStart, endIndex);
3117
- }
3118
2672
  }
3119
2673
  }
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 = {}));
2674
+ }
2675
+ var CharCodes, State, QuoteType, Sequences, specialStartSequences;
2676
+ var init_html_tokenizer = __esm(() => {
2677
+ CharCodes = {
2678
+ Tab: 9,
2679
+ NewLine: 10,
2680
+ FormFeed: 12,
2681
+ CarriageReturn: 13,
2682
+ Space: 32,
2683
+ ExclamationMark: 33,
2684
+ Number: 35,
2685
+ SingleQuote: 39,
2686
+ DoubleQuote: 34,
2687
+ Dash: 45,
2688
+ Slash: 47,
2689
+ Zero: 48,
2690
+ Nine: 57,
2691
+ Semi: 59,
2692
+ Lt: 60,
2693
+ Eq: 61,
2694
+ Gt: 62,
2695
+ Questionmark: 63,
2696
+ UpperA: 65,
2697
+ LowerA: 97,
2698
+ UpperF: 70,
2699
+ LowerF: 102,
2700
+ UpperZ: 90,
2701
+ LowerZ: 122,
2702
+ LowerX: 120,
2703
+ OpeningSquareBracket: 91
2704
+ };
2705
+ State = {
2706
+ Text: 1,
2707
+ BeforeTagName: 2,
2708
+ InTagName: 3,
2709
+ InSelfClosingTag: 4,
2710
+ BeforeClosingTagName: 5,
2711
+ InClosingTagName: 6,
2712
+ AfterClosingTagName: 7,
2713
+ BeforeAttributeName: 8,
2714
+ InAttributeName: 9,
2715
+ AfterAttributeName: 10,
2716
+ BeforeAttributeValue: 11,
2717
+ InAttributeValueDq: 12,
2718
+ InAttributeValueSq: 13,
2719
+ InAttributeValueNq: 14,
2720
+ BeforeDeclaration: 15,
2721
+ InDeclaration: 16,
2722
+ InProcessingInstruction: 17,
2723
+ BeforeComment: 18,
2724
+ CDATASequence: 19,
2725
+ DeclarationSequence: 20,
2726
+ InSpecialComment: 21,
2727
+ InCommentLike: 22,
2728
+ SpecialStartSequence: 23,
2729
+ InSpecialTag: 24,
2730
+ InPlainText: 25
2731
+ };
2732
+ QuoteType = {
2733
+ NoValue: 0,
2734
+ Unquoted: 1,
2735
+ Single: 2,
2736
+ Double: 3
2737
+ };
3204
2738
  Sequences = {
3205
2739
  Empty: new Uint8Array(0),
3206
2740
  Cdata: new Uint8Array([67, 68, 65, 84, 65, 91]),
@@ -3208,57 +2742,13 @@ var init_Tokenizer = __esm(() => {
3208
2742
  CommentEnd: new Uint8Array([45, 45, 33, 62]),
3209
2743
  Doctype: new Uint8Array([100, 111, 99, 116, 121, 112, 101]),
3210
2744
  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
- ]),
2745
+ NoembedEnd: new Uint8Array([60, 47, 110, 111, 101, 109, 98, 101, 100]),
2746
+ NoframesEnd: new Uint8Array([60, 47, 110, 111, 102, 114, 97, 109, 101, 115]),
2747
+ Plaintext: new Uint8Array([60, 47, 112, 108, 97, 105, 110, 116, 101, 120, 116]),
3247
2748
  ScriptEnd: new Uint8Array([60, 47, 115, 99, 114, 105, 112, 116]),
3248
2749
  StyleEnd: new Uint8Array([60, 47, 115, 116, 121, 108, 101]),
3249
2750
  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
- ]),
2751
+ TextareaEnd: new Uint8Array([60, 47, 116, 101, 120, 116, 97, 114, 101, 97]),
3262
2752
  XmpEnd: new Uint8Array([60, 47, 120, 109, 112])
3263
2753
  };
3264
2754
  specialStartSequences = new Map([
@@ -3271,77 +2761,8 @@ var init_Tokenizer = __esm(() => {
3271
2761
  ]);
3272
2762
  });
3273
2763
 
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
2764
  // 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;
2765
+ var VOID_ELEMENTS, RAW_TEXT_ELEMENTS, RCDATA_ELEMENTS, SPECIAL_ELEMENTS, FORMATTING_ELEMENTS, DEFAULT_SCOPE_BOUNDARIES, MATHML_TEXT_INTEGRATION_POINT_NAMES, SVG_HTML_INTEGRATION_POINT_NAMES, SCOPE_LIST_ITEM, SCOPE_BUTTON, SCOPE_DEFAULT, SCOPE_TABLE, SCOPE_SELECT, STANDARD_SVG_CAMEL_ELEMENTS, STANDARD_SVG_CAMEL_ATTRS, MATHML_CAMEL_ATTRS, SVG_ATTR_LOWERCASE_TO_CAMEL, MATHML_ATTR_LOWERCASE_TO_CAMEL, FOREIGN_BREAKOUT_TAGS, MATHML_TEXT_INTEGRATION_POINTS, BLOCK_LEVEL_AUTO_CLOSE_P, SELECT_VALID_CHILDREN, SELECT_BREAKOUT_TAGS, MODES, NS, FRAGMENT_CONTEXT_MODES;
3345
2766
  var init_htmllinter_tables = __esm(() => {
3346
2767
  VOID_ELEMENTS = new Set([
3347
2768
  "area",
@@ -3474,8 +2895,11 @@ var init_htmllinter_tables = __esm(() => {
3474
2895
  "th",
3475
2896
  "marquee",
3476
2897
  "object",
2898
+ "select",
3477
2899
  "template"
3478
2900
  ]);
2901
+ MATHML_TEXT_INTEGRATION_POINT_NAMES = new Set(["mi", "mo", "mn", "ms", "mtext"]);
2902
+ SVG_HTML_INTEGRATION_POINT_NAMES = new Set(["foreignobject", "desc", "title"]);
3479
2903
  SCOPE_LIST_ITEM = new Set([...DEFAULT_SCOPE_BOUNDARIES, "ol", "ul"]);
3480
2904
  SCOPE_BUTTON = new Set([...DEFAULT_SCOPE_BOUNDARIES, "button"]);
3481
2905
  SCOPE_DEFAULT = DEFAULT_SCOPE_BOUNDARIES;
@@ -3580,6 +3004,12 @@ var init_htmllinter_tables = __esm(() => {
3580
3004
  "zoomAndPan"
3581
3005
  ]);
3582
3006
  MATHML_CAMEL_ATTRS = new Set(["definitionURL"]);
3007
+ SVG_ATTR_LOWERCASE_TO_CAMEL = new Map;
3008
+ for (const camel of STANDARD_SVG_CAMEL_ATTRS)
3009
+ SVG_ATTR_LOWERCASE_TO_CAMEL.set(camel.toLowerCase(), camel);
3010
+ MATHML_ATTR_LOWERCASE_TO_CAMEL = new Map;
3011
+ for (const camel of MATHML_CAMEL_ATTRS)
3012
+ MATHML_ATTR_LOWERCASE_TO_CAMEL.set(camel.toLowerCase(), camel);
3583
3013
  FOREIGN_BREAKOUT_TAGS = new Set([
3584
3014
  "b",
3585
3015
  "big",
@@ -3674,7 +3104,6 @@ var init_htmllinter_tables = __esm(() => {
3674
3104
  MODES = Object.freeze({
3675
3105
  inBody: "inBody",
3676
3106
  inTable: "inTable",
3677
- inTableText: "inTableText",
3678
3107
  inCaption: "inCaption",
3679
3108
  inColumnGroup: "inColumnGroup",
3680
3109
  inTableBody: "inTableBody",
@@ -3682,8 +3111,7 @@ var init_htmllinter_tables = __esm(() => {
3682
3111
  inCell: "inCell",
3683
3112
  inSelect: "inSelect",
3684
3113
  inSelectInTable: "inSelectInTable",
3685
- inTemplate: "inTemplate",
3686
- text: "text"
3114
+ inTemplate: "inTemplate"
3687
3115
  });
3688
3116
  NS = Object.freeze({
3689
3117
  html: "html",
@@ -3711,8 +3139,9 @@ var init_htmllinter_tables = __esm(() => {
3711
3139
 
3712
3140
  // tools/core/htmllinter.js
3713
3141
  function lintHtml(html, onFinding, opts = {}) {
3142
+ const TokenizerClass = opts.TokenizerClass ?? HtmlTokenizer;
3714
3143
  const ctx = new LinterCtx(html, onFinding, opts);
3715
- const tokenizer = new Tokenizer({ xmlMode: false, decodeEntities: false, recognizeSelfClosing: true }, ctx);
3144
+ const tokenizer = new TokenizerClass({ xmlMode: false, decodeEntities: false, recognizeSelfClosing: true }, ctx);
3716
3145
  ctx.tokenizer = tokenizer;
3717
3146
  tokenizer.write(html);
3718
3147
  tokenizer.end();
@@ -3749,30 +3178,75 @@ class LinterCtx {
3749
3178
  this.openElements.push({ name: "select", ns: NS.html, start: -1 });
3750
3179
  }
3751
3180
  this.insertionMode = ctxInfo.mode;
3752
- this.originalInsertionMode = MODES.inBody;
3753
3181
  this.templateInsertionModes = ctxName === "template" ? [MODES.inTemplate] : [];
3754
3182
  this.activeFormatting = [];
3755
- this.formPointer = null;
3756
3183
  this.framesetOk = true;
3757
3184
  this.svgCamelElements = opts.svgCamelElements ?? STANDARD_SVG_CAMEL_ELEMENTS;
3758
- this.transparentTagPrefixes = opts.transparentTagPrefixes ?? [];
3185
+ this.transparentTagPrefixes = (opts.transparentTagPrefixes ?? []).map((p) => p.toLowerCase());
3759
3186
  this.currentTagName = "";
3760
3187
  this.currentTagRawName = "";
3761
3188
  this.currentTagStart = 0;
3189
+ this.currentAttrs = [];
3190
+ this.currentAttr = null;
3762
3191
  this.tokenizer = null;
3763
- this.textRestoreMode = null;
3764
3192
  }
3765
3193
  onopentagname(start, end) {
3766
3194
  const raw = this.html.slice(start, end);
3767
3195
  this.currentTagRawName = raw;
3768
3196
  this.currentTagName = raw.toLowerCase();
3769
3197
  this.currentTagStart = start;
3198
+ this.currentAttrs = [];
3199
+ this.currentAttr = null;
3200
+ }
3201
+ onattribname(start, end) {
3202
+ const rawName = this.html.slice(start, end);
3203
+ this.currentAttr = {
3204
+ name: rawName.toLowerCase(),
3205
+ rawName,
3206
+ nameStart: start,
3207
+ value: null,
3208
+ valueStart: -1,
3209
+ valueEnd: -1,
3210
+ quote: QuoteType.NoValue
3211
+ };
3212
+ }
3213
+ onattribdata(start, end) {
3214
+ if (!this.currentAttr)
3215
+ return;
3216
+ this.currentAttr.valueStart = start;
3217
+ this.currentAttr.valueEnd = end;
3218
+ this.currentAttr.value = this.html.slice(start, end);
3219
+ }
3220
+ onattribend(quote, _end) {
3221
+ const a = this.currentAttr;
3222
+ if (!a)
3223
+ return;
3224
+ a.quote = quote;
3225
+ const dup = this.currentAttrs.find((x) => x.name === a.name);
3226
+ if (dup) {
3227
+ this.report(HTML_DUPLICATE_ATTRIBUTE, LEVEL_WARN, a.nameStart, {
3228
+ name: a.name,
3229
+ firstAt: dup.nameStart
3230
+ });
3231
+ } else {
3232
+ this.currentAttrs.push(a);
3233
+ }
3234
+ if (a.quote === QuoteType.Unquoted && a.value === "") {
3235
+ this.report(HTML_MISSING_ATTRIBUTE_VALUE, LEVEL_WARN, a.nameStart, {
3236
+ name: a.name
3237
+ });
3238
+ }
3239
+ this.currentAttr = null;
3770
3240
  }
3771
- onattribname(_start, _end) {}
3772
- onattribdata(_start, _end) {}
3773
3241
  onattribentity(_cp) {}
3774
- onattribend(_quote, _end) {}
3775
3242
  ontextentity(_cp, _end) {}
3243
+ getAttr(name) {
3244
+ const a = this.currentAttrs.find((x) => x.name === name);
3245
+ return a ? a.value : null;
3246
+ }
3247
+ hasAttr(name) {
3248
+ return this.currentAttrs.some((x) => x.name === name);
3249
+ }
3776
3250
  onopentagend(endIndex) {
3777
3251
  this.handleStartTag(false, endIndex);
3778
3252
  }
@@ -3782,20 +3256,56 @@ class LinterCtx {
3782
3256
  onclosetag(start, end) {
3783
3257
  const raw = this.html.slice(start, end);
3784
3258
  const name = raw.toLowerCase();
3259
+ let i = end;
3260
+ let lastNonWs = -1;
3261
+ while (i < this.html.length) {
3262
+ const c = this.html.charCodeAt(i);
3263
+ if (c === 62)
3264
+ break;
3265
+ if (c !== 32 && c !== 9 && c !== 10 && c !== 13 && c !== 12)
3266
+ lastNonWs = i;
3267
+ i++;
3268
+ }
3269
+ if (lastNonWs >= 0) {
3270
+ if (this.html.charCodeAt(lastNonWs) === 47 && lastNonWs === i - 1) {
3271
+ let firstNonWs = -1;
3272
+ for (let j = end;j < lastNonWs; j++) {
3273
+ const c2 = this.html.charCodeAt(j);
3274
+ if (c2 !== 32 && c2 !== 9 && c2 !== 10 && c2 !== 13 && c2 !== 12) {
3275
+ firstNonWs = j;
3276
+ break;
3277
+ }
3278
+ }
3279
+ if (firstNonWs < 0) {
3280
+ this.report(HTML_SELF_CLOSING_END_TAG, LEVEL_WARN, start, { tag: name });
3281
+ } else {
3282
+ this.report(HTML_ATTRIBUTES_ON_END_TAG, LEVEL_WARN, start, { tag: name });
3283
+ }
3284
+ } else {
3285
+ this.report(HTML_ATTRIBUTES_ON_END_TAG, LEVEL_WARN, start, { tag: name });
3286
+ }
3287
+ }
3785
3288
  this.handleEndTag(name, start);
3786
3289
  }
3787
3290
  ontext(start, end) {
3788
3291
  if (start >= end)
3789
3292
  return;
3293
+ const top = this.currentNode();
3294
+ if (top && top.ns !== NS.html && !this.isIntegrationPoint(top))
3295
+ return;
3790
3296
  this.handleText(start, end);
3791
3297
  }
3792
- oncomment(_start, _end, _endOffset) {}
3298
+ oncomment(start, _end, endOffset) {
3299
+ if (endOffset === 0) {
3300
+ this.report(HTML_BOGUS_COMMENT, LEVEL_WARN, start, {
3301
+ mode: this.insertionMode
3302
+ });
3303
+ }
3304
+ }
3793
3305
  oncdata(start, _end, _endOffset) {
3794
3306
  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"
3307
+ this.report(HTML_CDATA_IN_HTML_NAMESPACE, LEVEL_WARN, start, {
3308
+ mode: this.insertionMode
3799
3309
  });
3800
3310
  }
3801
3311
  }
@@ -3833,14 +3343,37 @@ class LinterCtx {
3833
3343
  const f = this.openElements[i];
3834
3344
  if (f.name === target && f.ns === NS.html)
3835
3345
  return true;
3836
- if (f.ns === NS.html && scopeSet.has(f.name))
3837
- return false;
3838
- if (f.ns !== NS.html) {
3346
+ if (f.ns === NS.html) {
3347
+ if (scopeSet.has(f.name))
3348
+ return false;
3349
+ } else if (this.isScopeBoundary(f)) {
3839
3350
  return false;
3840
3351
  }
3841
3352
  }
3842
3353
  return false;
3843
3354
  }
3355
+ isScopeBoundary(frame) {
3356
+ if (frame.ns === NS.math) {
3357
+ return MATHML_TEXT_INTEGRATION_POINT_NAMES.has(frame.name) || frame.name === "annotation-xml";
3358
+ }
3359
+ if (frame.ns === NS.svg) {
3360
+ return SVG_HTML_INTEGRATION_POINT_NAMES.has(frame.name);
3361
+ }
3362
+ return false;
3363
+ }
3364
+ isIntegrationPoint(frame) {
3365
+ if (frame.ns === NS.math) {
3366
+ if (MATHML_TEXT_INTEGRATION_POINT_NAMES.has(frame.name))
3367
+ return true;
3368
+ if (frame.name === "annotation-xml" && frame.htmlIntegration)
3369
+ return true;
3370
+ return false;
3371
+ }
3372
+ if (frame.ns === NS.svg) {
3373
+ return SVG_HTML_INTEGRATION_POINT_NAMES.has(frame.name);
3374
+ }
3375
+ return false;
3376
+ }
3844
3377
  hasInDefaultScope(target) {
3845
3378
  return this.hasInScope(target, SCOPE_DEFAULT);
3846
3379
  }
@@ -3911,13 +3444,43 @@ class LinterCtx {
3911
3444
  });
3912
3445
  }
3913
3446
  }
3447
+ const targetNs = ns !== NS.html ? ns : name === "svg" ? NS.svg : name === "math" ? NS.math : NS.html;
3448
+ if (targetNs === NS.svg) {
3449
+ for (const a of this.currentAttrs) {
3450
+ const canonical = SVG_ATTR_LOWERCASE_TO_CAMEL.get(a.name);
3451
+ if (canonical && a.rawName !== canonical) {
3452
+ this.report(HTML_SVG_ATTR_WILL_LOWERCASE, LEVEL_ERROR, a.nameStart, {
3453
+ raw: a.rawName,
3454
+ canonical
3455
+ });
3456
+ }
3457
+ }
3458
+ } else if (targetNs === NS.math) {
3459
+ for (const a of this.currentAttrs) {
3460
+ const canonical = MATHML_ATTR_LOWERCASE_TO_CAMEL.get(a.name);
3461
+ if (canonical && a.rawName !== canonical) {
3462
+ this.report(HTML_MATHML_ATTR_WILL_LOWERCASE, LEVEL_ERROR, a.nameStart, {
3463
+ raw: a.rawName,
3464
+ canonical
3465
+ });
3466
+ }
3467
+ }
3468
+ }
3914
3469
  if (this.isTransparentTag(name))
3915
3470
  return;
3916
- if (ns !== NS.html && !this.shouldBreakoutFromForeign(name)) {
3471
+ const top = this.currentNode();
3472
+ const inForeign = ns !== NS.html && !(top && this.isIntegrationPoint(top));
3473
+ if (inForeign && !this.shouldBreakoutFromForeign(name)) {
3917
3474
  this.startTagInForeign(name, raw, selfClosing, start);
3918
3475
  return;
3919
3476
  }
3920
- if (ns !== NS.html && this.shouldBreakoutFromForeign(name)) {
3477
+ if (inForeign && this.shouldBreakoutFromForeign(name)) {
3478
+ this.report(HTML_TAG_NOT_ALLOWED_IN_PARENT, LEVEL_WARN, start, {
3479
+ tag: raw,
3480
+ parent: this.currentNode()?.name ?? "(root)",
3481
+ mode: this.insertionMode,
3482
+ action: "foreign-breakout"
3483
+ });
3921
3484
  while (this.openElements.length && this.currentNode()?.ns !== NS.html) {
3922
3485
  this.openElements.pop();
3923
3486
  }
@@ -3927,20 +3490,28 @@ class LinterCtx {
3927
3490
  shouldBreakoutFromForeign(name) {
3928
3491
  if (FOREIGN_BREAKOUT_TAGS.has(name))
3929
3492
  return true;
3930
- if (name === "font")
3931
- return true;
3493
+ if (name === "font") {
3494
+ return this.hasAttr("color") || this.hasAttr("face") || this.hasAttr("size");
3495
+ }
3932
3496
  return false;
3933
3497
  }
3934
3498
  startTagInForeign(name, raw, selfClosing, start) {
3935
3499
  const ns = name === "svg" ? NS.svg : name === "math" ? NS.math : this.currentNamespace();
3936
3500
  const top = this.currentNode();
3937
- if (top && top.ns === NS.math && MATHML_TEXT_INTEGRATION_POINTS.has(top.name) && name !== "mglyph" && name !== "malignmark") {
3501
+ if (top && this.isIntegrationPoint(top) && name !== "mglyph" && name !== "malignmark") {
3938
3502
  this.dispatchStartTag(name, raw, selfClosing, start, start + raw.length);
3939
3503
  return;
3940
3504
  }
3941
3505
  if (selfClosing)
3942
3506
  return;
3943
- this.push(raw, ns, start);
3507
+ const frame = { name, ns, start };
3508
+ if (ns === NS.math && name === "annotation-xml") {
3509
+ const enc = (this.getAttr("encoding") ?? "").toLowerCase();
3510
+ if (enc === "text/html" || enc === "application/xhtml+xml") {
3511
+ frame.htmlIntegration = true;
3512
+ }
3513
+ }
3514
+ this.openElements.push(frame);
3944
3515
  }
3945
3516
  dispatchStartTag(name, raw, selfClosing, start, endIndex) {
3946
3517
  switch (this.insertionMode) {
@@ -3950,10 +3521,6 @@ class LinterCtx {
3950
3521
  return this.startInBody(name, raw, selfClosing, start, endIndex);
3951
3522
  case MODES.inTable:
3952
3523
  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
3524
  case MODES.inCaption:
3958
3525
  return this.startInCaption(name, raw, selfClosing, start, endIndex);
3959
3526
  case MODES.inColumnGroup:
@@ -3968,8 +3535,6 @@ class LinterCtx {
3968
3535
  return this.startInSelect(name, raw, selfClosing, start, endIndex);
3969
3536
  case MODES.inSelectInTable:
3970
3537
  return this.startInSelectInTable(name, raw, selfClosing, start, endIndex);
3971
- case MODES.text:
3972
- return;
3973
3538
  }
3974
3539
  }
3975
3540
  startInBody(name, raw, selfClosing, start, _endIndex) {
@@ -4011,7 +3576,7 @@ class LinterCtx {
4011
3576
  return;
4012
3577
  }
4013
3578
  if (name === "form") {
4014
- if (this.formPointer !== null && !this.openElementsHas("template")) {
3579
+ if (this.openElementsHas("form") && !this.openElementsHas("template")) {
4015
3580
  this.report(HTML_DUPLICATE_FORM, LEVEL_ERROR, start, {
4016
3581
  tag: raw,
4017
3582
  mode: this.insertionMode
@@ -4021,7 +3586,6 @@ class LinterCtx {
4021
3586
  if (this.hasInButtonScope("p"))
4022
3587
  this.implicitlyClose("p", start, raw);
4023
3588
  this.push(raw, NS.html, start);
4024
- this.formPointer = this.currentNode();
4025
3589
  return;
4026
3590
  }
4027
3591
  if (name === "li") {
@@ -4094,7 +3658,7 @@ class LinterCtx {
4094
3658
  return;
4095
3659
  }
4096
3660
  if (name === "a") {
4097
- if (this.openElementsHas("a") || this.activeFormattingHas("a")) {
3661
+ if (this.activeFormattingHas("a")) {
4098
3662
  this.report(HTML_NESTED_INTERACTIVE, LEVEL_WARN, start, {
4099
3663
  tag: raw,
4100
3664
  mode: this.insertionMode
@@ -4111,7 +3675,7 @@ class LinterCtx {
4111
3675
  return;
4112
3676
  }
4113
3677
  if (name === "nobr") {
4114
- if (this.hasInDefaultScope("nobr")) {
3678
+ if (this.activeFormattingHas("nobr")) {
4115
3679
  this.report(HTML_NESTED_INTERACTIVE, LEVEL_WARN, start, {
4116
3680
  tag: raw,
4117
3681
  mode: this.insertionMode
@@ -4195,7 +3759,6 @@ class LinterCtx {
4195
3759
  if (e === null)
4196
3760
  break;
4197
3761
  if (e.name === name) {
4198
- this.activeFormatting.splice(i, 1);
4199
3762
  const idx = this.openElements.indexOf(e);
4200
3763
  if (idx >= 0)
4201
3764
  this.openElements.splice(idx, 1);
@@ -4288,6 +3851,9 @@ class LinterCtx {
4288
3851
  return this.startInBody(name, raw, selfClosing, start, endIndex);
4289
3852
  }
4290
3853
  if (name === "input") {
3854
+ const type = (this.getAttr("type") ?? "").toLowerCase();
3855
+ if (type === "hidden")
3856
+ return;
4291
3857
  this.report(HTML_TAG_NOT_ALLOWED_IN_PARENT, LEVEL_WARN, start, {
4292
3858
  tag: raw,
4293
3859
  parent: "table",
@@ -4323,18 +3889,6 @@ class LinterCtx {
4323
3889
  this.openElements.pop();
4324
3890
  }
4325
3891
  }
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
3892
  startInCaption(name, raw, selfClosing, start, endIndex) {
4339
3893
  if (name === "caption" || name === "col" || name === "colgroup" || name === "tbody" || name === "td" || name === "tfoot" || name === "th" || name === "thead" || name === "tr") {
4340
3894
  if (this.hasInTableScope("caption")) {
@@ -4567,14 +4121,24 @@ class LinterCtx {
4567
4121
  return;
4568
4122
  const ns = this.currentNamespace();
4569
4123
  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)
4124
+ let stackIdx = this.openElements.length - 1;
4125
+ let first = true;
4126
+ while (stackIdx > 0) {
4127
+ const f = this.openElements[stackIdx];
4128
+ if (!first && f.ns === NS.html)
4573
4129
  break;
4574
- if (f.name.toLowerCase() === name) {
4575
- this.openElements.length = i;
4130
+ if (f.ns !== NS.html && f.name.toLowerCase() === name) {
4131
+ this.openElements.length = stackIdx;
4576
4132
  return;
4577
4133
  }
4134
+ if (first) {
4135
+ this.report(HTML_UNEXPECTED_END_TAG, LEVEL_WARN, start, {
4136
+ tag: name,
4137
+ mode: this.insertionMode
4138
+ });
4139
+ first = false;
4140
+ }
4141
+ stackIdx--;
4578
4142
  }
4579
4143
  }
4580
4144
  if (VOID_ELEMENTS.has(name)) {
@@ -4605,19 +4169,33 @@ class LinterCtx {
4605
4169
  });
4606
4170
  return;
4607
4171
  }
4172
+ const endIsTableStructural = TABLE_SCOPE_TAGS.has(name);
4608
4173
  for (let i = this.openElements.length - 1;i >= 0; i--) {
4609
4174
  const f = this.openElements[i];
4610
4175
  if (f.ns === NS.html && f.name === name) {
4176
+ for (let j = this.openElements.length - 1;j > i; j--) {
4177
+ const popped = this.openElements[j];
4178
+ if (popped.ns === NS.html && popped.name !== name && !IMPLIED_END_TAGS.has(popped.name) && !(endIsTableStructural && TABLE_SCOPE_TAGS.has(popped.name))) {
4179
+ this.report(HTML_UNCLOSED_BEFORE_END, LEVEL_WARN, start, {
4180
+ tag: name,
4181
+ unclosed: popped.name,
4182
+ mode: this.insertionMode
4183
+ });
4184
+ break;
4185
+ }
4186
+ }
4611
4187
  this.openElements.length = i;
4612
- if (name === "form")
4613
- this.formPointer = null;
4614
4188
  if (TABLE_SCOPE_TAGS.has(name) || name === "select" || name === "template") {
4615
4189
  this.resetInsertionModeAppropriately();
4616
4190
  }
4617
4191
  return;
4618
4192
  }
4619
- if (f.ns === NS.html && SPECIAL_ELEMENTS.has(f.name)) {
4620
- break;
4193
+ if (f.ns === NS.html && SPECIAL_ELEMENTS.has(f.name) && !IMPLIED_END_TAGS.has(f.name) && !(endIsTableStructural && TABLE_SCOPE_TAGS.has(f.name))) {
4194
+ this.report(HTML_UNEXPECTED_END_TAG, LEVEL_WARN, start, {
4195
+ tag: name,
4196
+ mode: this.insertionMode
4197
+ });
4198
+ return;
4621
4199
  }
4622
4200
  }
4623
4201
  }
@@ -4674,9 +4252,9 @@ function offsetToLineCol(lineStarts, offset) {
4674
4252
  }
4675
4253
  return { line: lo + 1, column: offset - lineStarts[lo] + 1 };
4676
4254
  }
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;
4255
+ var HTML_TAG_NAME_HAS_UPPERCASE = "HTML_TAG_NAME_HAS_UPPERCASE", HTML_SVG_TAG_WILL_LOWERCASE = "HTML_SVG_TAG_WILL_LOWERCASE", HTML_SVG_ATTR_WILL_LOWERCASE = "HTML_SVG_ATTR_WILL_LOWERCASE", HTML_MATHML_ATTR_WILL_LOWERCASE = "HTML_MATHML_ATTR_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", HTML_DUPLICATE_ATTRIBUTE = "HTML_DUPLICATE_ATTRIBUTE", HTML_ATTRIBUTES_ON_END_TAG = "HTML_ATTRIBUTES_ON_END_TAG", HTML_SELF_CLOSING_END_TAG = "HTML_SELF_CLOSING_END_TAG", HTML_MISSING_ATTRIBUTE_VALUE = "HTML_MISSING_ATTRIBUTE_VALUE", HTML_CDATA_IN_HTML_NAMESPACE = "HTML_CDATA_IN_HTML_NAMESPACE", HTML_BOGUS_COMMENT = "HTML_BOGUS_COMMENT", HTML_UNCLOSED_BEFORE_END = "HTML_UNCLOSED_BEFORE_END", LEVEL_ERROR = "error", LEVEL_WARN = "warn", TABLE_SCOPE_TAGS, TABLE_BODY_CELL_TAGS, IMPLIED_END_TAGS;
4678
4256
  var init_htmllinter = __esm(() => {
4679
- init_dist3();
4257
+ init_html_tokenizer();
4680
4258
  init_htmllinter_tables();
4681
4259
  TABLE_SCOPE_TAGS = new Set([
4682
4260
  "caption",
@@ -4690,6 +4268,18 @@ var init_htmllinter = __esm(() => {
4690
4268
  "table"
4691
4269
  ]);
4692
4270
  TABLE_BODY_CELL_TAGS = new Set(["td", "th"]);
4271
+ IMPLIED_END_TAGS = new Set([
4272
+ "dd",
4273
+ "dt",
4274
+ "li",
4275
+ "optgroup",
4276
+ "option",
4277
+ "p",
4278
+ "rb",
4279
+ "rp",
4280
+ "rt",
4281
+ "rtc"
4282
+ ]);
4693
4283
  });
4694
4284
 
4695
4285
  // tools/core/lint-check.js
@@ -5137,8 +4727,8 @@ var init_lint_check = __esm(() => {
5137
4727
  PushViewNameNode: { originAttr: "<x push-view>" }
5138
4728
  };
5139
4729
  LintParseContext = class LintParseContext extends ParseContext {
5140
- constructor(document2, Text2, Comment2) {
5141
- super(document2, Text2, Comment2);
4730
+ constructor(document2, Text, Comment) {
4731
+ super(document2, Text, Comment);
5142
4732
  this.attrs = [];
5143
4733
  this.parseIssues = [];
5144
4734
  }
@@ -11049,18 +10639,18 @@ async function createNodeEnv() {
11049
10639
  const dom = new JSDOM("<!DOCTYPE html><html><head></head><body></body></html>", {
11050
10640
  virtualConsole
11051
10641
  });
11052
- const { document: document2, Text: Text2, Comment: Comment2 } = dom.window;
10642
+ const { document: document2, Text, Comment } = dom.window;
11053
10643
  globalThis.document = document2;
11054
10644
 
11055
10645
  class HeadlessParseContext extends ParseContext {
11056
10646
  constructor() {
11057
- super(document2, Text2, Comment2);
10647
+ super(document2, Text, Comment);
11058
10648
  }
11059
10649
  }
11060
10650
 
11061
10651
  class HeadlessLintParseContext extends LintParseContext {
11062
10652
  constructor() {
11063
- super(document2, Text2, Comment2);
10653
+ super(document2, Text, Comment);
11064
10654
  }
11065
10655
  }
11066
10656
  return {